@acorex/core 7.21.0 → 7.21.2

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.
@@ -1,5 +1,5 @@
1
- import { defaults, orderBy } from 'lodash-es';
2
1
  import { translateSync } from '@acorex/core/translation';
2
+ import { defaults, orderBy } from 'lodash-es';
3
3
  export class AXCalendar {
4
4
  /**
5
5
  * @ignore
@@ -59,15 +59,15 @@ export class AXDateTime {
59
59
  //
60
60
  A: () => (this.date.getHours() < 12 ? 'am' : 'pm'),
61
61
  a: () => (this.date.getHours() < 12 ? 'am' : 'pm'),
62
- 'date': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortDate')),
63
- 'shortDate': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortDate')),
64
- 'longDate': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'longDate')),
62
+ date: (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortDate')),
63
+ shortDate: (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortDate')),
64
+ longDate: (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'longDate')),
65
65
  //
66
- 'shortTime': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortTime')),
67
- 'time': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortTime')),
68
- 'longTime': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'longTime')),
66
+ shortTime: (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortTime')),
67
+ time: (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortTime')),
68
+ longTime: (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'longTime')),
69
69
  //
70
- 'datetime': (options) => this.format("date time", { locale: options.locale }),
70
+ datetime: (options) => this.format('date time', { locale: options.locale }),
71
71
  };
72
72
  this._calendar = calendar;
73
73
  this._date = value;
@@ -125,7 +125,7 @@ export class AXDateTime {
125
125
  }
126
126
  format(format = this.getDateTimeFormatByLocale(navigator.language, 'shortDate'), options) {
127
127
  const effectiveOptions = defaults({}, options, {
128
- locale: navigator.language
128
+ locale: navigator.language,
129
129
  });
130
130
  const re = new RegExp(orderBy(Object.keys(this._formatKeys), (c) => c.length, ['desc']).join('|'), 'gi');
131
131
  return format.replace(re, (matched) => {
@@ -155,17 +155,18 @@ export class AXDateTime {
155
155
  const parts = formatter.formatToParts(new Date());
156
156
  // Map parts to their respective format
157
157
  const formatMap = {
158
- 'day': 'dd',
159
- 'month': style == 'longDate' ? 'MMMM' : 'MM',
160
- 'year': 'yyyy',
161
- 'hour': 'HH',
162
- 'minute': 'mm',
163
- 'second': 'ss',
164
- 'weekday': 'E',
165
- 'literal': ''
158
+ day: 'dd',
159
+ month: style == 'longDate' ? 'MMMM' : 'MM',
160
+ year: 'yyyy',
161
+ hour: 'HH',
162
+ minute: 'mm',
163
+ second: 'ss',
164
+ weekday: 'E',
165
+ literal: '',
166
166
  };
167
167
  // Construct the date and/or time format string
168
- return parts.map(part => {
168
+ return parts
169
+ .map((part) => {
169
170
  if (part.type === 'literal') {
170
171
  // Use the literal part directly as separator
171
172
  return part.value;
@@ -173,7 +174,8 @@ export class AXDateTime {
173
174
  else {
174
175
  return formatMap[part.type] || part.value;
175
176
  }
176
- }).join('');
177
+ })
178
+ .join('');
177
179
  }
178
180
  pad(n, width, z = '0') {
179
181
  n = n + '';
@@ -320,4 +322,4 @@ export class AXDateTimeRange {
320
322
  return result;
321
323
  }
322
324
  }
323
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvZGF0ZVRpbWUvc3JjL2xpYi9kYXRldGltZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFrRHpELE1BQU0sT0FBZ0IsVUFBVTtJQUc5Qjs7T0FFRztJQUNILFlBQVksTUFBd0I7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUM5QixDQUFDO0lBR0QsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDL0IsQ0FBQztDQTRCRjtBQUVELE1BQU0sT0FBTyxVQUFVO0lBR3JCLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBR0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxZQUFZLEtBQVcsRUFBRSxRQUFvQjtRQXdFN0MsMkJBQTJCO1FBQ25CLGdCQUFXLEdBQUc7WUFFcEIsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0MsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFO1lBQzFDLEVBQUU7WUFDRixFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFELEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUQsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7WUFDdkQsRUFBRTtZQUNGLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUMxQyxFQUFFO1lBQ0YsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckgsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckgsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzRCxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM3QyxFQUFFO1lBQ0YsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEgsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckgsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbkMsRUFBRTtZQUNGLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEQsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0RCxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNqRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNqRSxFQUFFO1lBQ0YsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDM0MsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1lBQ3hDLEVBQUU7WUFDRixFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUNyRCxFQUFFO1lBQ0YsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2xELENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNsRCxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixD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QUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RCxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQWlCLEtBQUssRUFBRSxNQUFNLEdBQUcsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBaUIsRUFBRSxDQUFDO1FBQ2hDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO2dCQUM1QyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ25CO1lBQ0QsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQWlCRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmF1bHRzLCBvcmRlckJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IHRyYW5zbGF0ZVN5bmMgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuXG5leHBvcnQgdHlwZSBUaW1lVW5pdCA9ICdtcycgfCAnc2Vjb25kJyB8ICdtaW51dGUnIHwgJ2hvdXInIHwgJ2RheScgfCAnbW9udGgnIHwgJ3llYXInIHwgJ3dlZWsnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYRGF0ZVZhbHVlIHtcbiAgeWVhcjogbnVtYmVyO1xuICBtb250aDogbnVtYmVyO1xuICBkYXRlOiBudW1iZXI7XG4gIGhvdXJzPzogbnVtYmVyO1xuICBtaW51dGVzPzogbnVtYmVyO1xuICBzZWNvbmRzPzogbnVtYmVyO1xuICBtcz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWERhdGVUaW1lRGlzcGxheUZvcm1hdHMge1xuICBkYXRlSW5wdXQ6IHN0cmluZztcbiAgdGltZUlucHV0OiBzdHJpbmc7XG4gIGRhdGVUaW1lSW5wdXQ6IHN0cmluZztcbiAgZGF0ZURpc3BsYXk6IHN0cmluZztcbiAgdGltZURpc3BsYXk6IHN0cmluZztcbiAgZGF0ZVRpbWVEaXNwbGF5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIEFYRGF0ZVRpbWVVbml0TmFtZXMgPSB7IGxvbmc6IHN0cmluZzsgc2hvcnQ6IHN0cmluZzsgbGV0dGVyOiBzdHJpbmcgfVtdO1xuXG5leHBvcnQgdHlwZSBBWERhdGVUaW1lUGFydCA9IHtcbiAga2V5OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyczogc3RyaW5nW107XG4gIHR5cGVkVmFsdWU/OiBzdHJpbmcgfCBudWxsO1xuICBkZWZhdWx0OiBudW1iZXI7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIHJlYWxWYWx1ZTogKCkgPT4gc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQVhEYXRlVGltZVBhcnRzID0ge1xuICB5ZWFyOiBBWERhdGVUaW1lUGFydDtcbiAgbW9udGg6IEFYRGF0ZVRpbWVQYXJ0O1xuICBkYXk6IEFYRGF0ZVRpbWVQYXJ0O1xuICBob3VyOiBBWERhdGVUaW1lUGFydDtcbiAgbWludXRlOiBBWERhdGVUaW1lUGFydDtcbiAgc2Vjb25kOiBBWERhdGVUaW1lUGFydDtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhDYWxlbmRhckNvbmZpZyB7XG4gIHdlZWtkYXlzOiBudW1iZXJbXTtcbiAgd2Vla2VuZDogbnVtYmVyW107XG4gIGZvcm1hdHM6IEFYRGF0ZVRpbWVEaXNwbGF5Rm9ybWF0cztcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFYQ2FsZW5kYXIge1xuICBwcml2YXRlIF9jb25maWc6IEFYQ2FsZW5kYXJDb25maWc7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQVhDYWxlbmRhckNvbmZpZykge1xuICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgd2Vla2VuZCgpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy53ZWVrZW5kO1xuICB9XG5cbiAgcHVibGljIGdldCBmb3JtYXRzKCk6IEFYRGF0ZVRpbWVEaXNwbGF5Rm9ybWF0cyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5mb3JtYXRzO1xuICB9XG5cblxuICBwdWJsaWMgZ2V0IHdlZWtkYXlzKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLndlZWtkYXlzO1xuICB9XG5cblxuICBhYnN0cmFjdCBuYW1lKCk6IHN0cmluZztcblxuICBhYnN0cmFjdCBkYXlPZk1vbnRoKGRhdGU6IERhdGUpOiBudW1iZXI7XG5cbiAgYWJzdHJhY3QgZGF5T2ZZZWFyKGRhdGU6IERhdGUpOiBudW1iZXI7XG5cbiAgYWJzdHJhY3QgZGF5T2ZXZWVrKGRhdGU6IERhdGUpOiBudW1iZXI7XG5cbiAgYWJzdHJhY3QgbW9udGhPZlllYXIoZGF0ZTogRGF0ZSk6IG51bWJlcjtcblxuICBhYnN0cmFjdCB3ZWVrT2ZZZWFyKGRhdGU6IERhdGUpOiBudW1iZXI7XG5cbiAgYWJzdHJhY3QgeWVhcihkYXRlOiBEYXRlKTogbnVtYmVyO1xuXG4gIGFic3RyYWN0IGFkZChkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCwgYW1vdW50OiBudW1iZXIpOiBBWERhdGVUaW1lO1xuXG4gIGFic3RyYWN0IHNldChkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCwgdmFsdWU6IG51bWJlcik6IEFYRGF0ZVRpbWU7XG5cbiAgYWJzdHJhY3Qgc3RhcnRPZihkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCk6IEFYRGF0ZVRpbWU7XG5cbiAgYWJzdHJhY3QgZW5kT2YoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQpOiBBWERhdGVUaW1lO1xuXG4gIGFic3RyYWN0IGNyZWF0ZSh2YWx1ZTogQVhEYXRlVmFsdWUpOiBBWERhdGVUaW1lO1xuXG4gIGFic3RyYWN0IHBhcnNlKHZhbHVlOiBzdHJpbmcpOiBBWERhdGVUaW1lO1xufVxuXG5leHBvcnQgY2xhc3MgQVhEYXRlVGltZSB7XG4gIHByaXZhdGUgX2RhdGU6IERhdGU7XG5cbiAgZ2V0IGRhdGUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGU7XG4gIH1cblxuICBwcml2YXRlIF9jYWxlbmRhcjogQVhDYWxlbmRhcjtcbiAgZ2V0IGNhbGVuZGFyKCk6IEFYQ2FsZW5kYXIge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhcjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHZhbHVlOiBEYXRlLCBjYWxlbmRhcjogQVhDYWxlbmRhcikge1xuICAgIHRoaXMuX2NhbGVuZGFyID0gY2FsZW5kYXI7XG4gICAgdGhpcy5fZGF0ZSA9IHZhbHVlO1xuICB9XG5cbiAgY2xvbmUoKTogQVhEYXRlVGltZSB7XG4gICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKHRoaXMuZGF0ZSwgdGhpcy5jYWxlbmRhcik7XG4gIH1cblxuICBnZXQgZGF5T2ZNb250aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZk1vbnRoKHRoaXMuZGF0ZSk7XG4gIH1cblxuICBnZXQgZGF5T2ZZZWFyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mWWVhcih0aGlzLmRhdGUpO1xuICB9XG5cbiAgZ2V0IGRheU9mV2VlaygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZldlZWsodGhpcy5kYXRlKTtcbiAgfVxuXG4gIGdldCBob3VyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGUuZ2V0SG91cnMoKTtcbiAgfVxuXG4gIGdldCBtaW51dGUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0ZS5nZXRNaW51dGVzKCk7XG4gIH1cblxuICBnZXQgc2Vjb25kKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGUuZ2V0U2Vjb25kcygpO1xuICB9XG5cbiAgZ2V0IHllYXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIueWVhcih0aGlzLmRhdGUpO1xuICB9XG5cbiAgZ2V0IG1vbnRoT2ZZZWFyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSk7XG4gIH1cblxuICBnZXQgd2Vla09mWWVhcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci53ZWVrT2ZZZWFyKHRoaXMuZGF0ZSk7XG4gIH1cblxuICBnZXQgbW9udGgoKTogQVhDYWxlbmRhck1vbnRoIHtcbiAgICByZXR1cm4gbmV3IEFYQ2FsZW5kYXJNb250aCh0aGlzKTtcbiAgfVxuXG4gIGFkZCh1bml0OiBUaW1lVW5pdCwgYW1vdW50OiBudW1iZXIpOiBBWERhdGVUaW1lIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIuYWRkKHRoaXMuZGF0ZSwgdW5pdCwgYW1vdW50KTtcbiAgfVxuXG4gIHNldCh1bml0OiBUaW1lVW5pdCA9ICdkYXknLCB2YWx1ZTogbnVtYmVyKTogQVhEYXRlVGltZSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLnNldCh0aGlzLmRhdGUsIHVuaXQsIHZhbHVlKTtcbiAgfVxuXG4gIGR1cmF0aW9uKGVuZDogRGF0ZSB8IEFYRGF0ZVRpbWUpOiBBWFRpbWVTcGFuIHtcbiAgICBjb25zdCBkYXRlID0gZW5kIGluc3RhbmNlb2YgQVhEYXRlVGltZSA/IGVuZC5kYXRlIDogKGVuZCBhcyBEYXRlKTtcbiAgICBjb25zdCB2YWwgPSBuZXcgQVhEYXRlVGltZShkYXRlLCB0aGlzLmNhbGVuZGFyKTtcbiAgICBjb25zdCByYW5nZSA9IG5ldyBBWERhdGVUaW1lUmFuZ2UodGhpcywgdmFsKTtcbiAgICByZXR1cm4gcmFuZ2UuZHVyYXRpb24oKTtcbiAgfVxuXG4gIHN0YXJ0T2YodW5pdDogVGltZVVuaXQgPSAnZGF5Jyk6IEFYRGF0ZVRpbWUge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci5zdGFydE9mKHRoaXMuZGF0ZSwgdW5pdCk7XG4gIH1cblxuICBlbmRPZih1bml0OiBUaW1lVW5pdCA9ICdkYXknKTogQVhEYXRlVGltZSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLmVuZE9mKHRoaXMuZGF0ZSwgdW5pdCk7XG4gIH1cblxuICAvL1RPRE86IHJlbW92ZSB1bnVzZWQgaXRlbXNcbiAgcHJpdmF0ZSBfZm9ybWF0S2V5cyA9IHtcblxuICAgIHNzOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmRhdGUuZ2V0U2Vjb25kcygpLCAyKSxcbiAgICBzOiAoKSA9PiB0aGlzLmRhdGUuZ2V0U2Vjb25kcygpLnRvU3RyaW5nKCksXG4gICAgLy9cbiAgICBkZDogKCkgPT4gdGhpcy5wYWQodGhpcy5jYWxlbmRhci5kYXlPZk1vbnRoKHRoaXMuZGF0ZSksIDIpLFxuICAgIEREOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmNhbGVuZGFyLmRheU9mTW9udGgodGhpcy5kYXRlKSwgMiksXG4gICAgZDogKCkgPT4gdGhpcy5jYWxlbmRhci5kYXlPZk1vbnRoKHRoaXMuZGF0ZSkudG9TdHJpbmcoKSxcbiAgICAvL1xuICAgIG1tOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmRhdGUuZ2V0TWludXRlcygpLCAyKSxcbiAgICBtOiAoKSA9PiB0aGlzLmRhdGUuZ2V0TWludXRlcygpLnRvU3RyaW5nKCksXG4gICAgLy9cbiAgICBNTU1NOiAoKSA9PiB0cmFuc2xhdGVTeW5jKGBkYXRlVGltZS5tb250aHMuJHt0aGlzLmNhbGVuZGFyLm5hbWUoKX0ubG9uZy4ke3RoaXMuY2FsZW5kYXIubW9udGhPZlllYXIodGhpcy5kYXRlKSAtIDF9YCksXG4gICAgTU1NOiAoKSA9PiB0cmFuc2xhdGVTeW5jKGBkYXRlVGltZS5tb250aHMuJHt0aGlzLmNhbGVuZGFyLm5hbWUoKX0uc2hvcnQuJHt0aGlzLmNhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSkgLSAxfWApLFxuICAgIE1NOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmNhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSksIDIpLFxuICAgIE06ICgpID0+IHRoaXMuY2FsZW5kYXIubW9udGhPZlllYXIodGhpcy5kYXRlKSxcbiAgICAvL1xuICAgIEU6ICgpID0+IHRyYW5zbGF0ZVN5bmMoYGRhdGVUaW1lLndlZWtkYXlzLmxvbmcuJHt0aGlzLmNhbGVuZGFyLndlZWtkYXlzW3RoaXMuY2FsZW5kYXIuZGF5T2ZXZWVrKHRoaXMuZGF0ZSkgLSAxXX1gKSxcbiAgICBEREQ6ICgpID0+IHRyYW5zbGF0ZVN5bmMoYGRhdGVUaW1lLndlZWtkYXlzLnNob3J0LiR7dGhpcy5jYWxlbmRhci53ZWVrZGF5c1t0aGlzLmNhbGVuZGFyLmRheU9mV2Vlayh0aGlzLmRhdGUpIC0gMV19YCksXG4gICAgRERERDogKCkgPT4gdGhpcy5fZm9ybWF0S2V5c1snRSddKCksXG4gICAgLy9cbiAgICB5eXl5OiAoKSA9PiB0aGlzLnBhZCh0aGlzLmNhbGVuZGFyLnllYXIodGhpcy5kYXRlKSwgNCksXG4gICAgWVlZWTogKCkgPT4gdGhpcy5wYWQodGhpcy5jYWxlbmRhci55ZWFyKHRoaXMuZGF0ZSksIDQpLFxuICAgIHl5OiAoKSA9PiB0aGlzLnBhZCh0aGlzLmNhbGVuZGFyLnllYXIodGhpcy5kYXRlKSwgNCkuc3Vic3RyaW5nKDIpLFxuICAgIFlZOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmNhbGVuZGFyLnllYXIodGhpcy5kYXRlKSwgNCkuc3Vic3RyaW5nKDIpLFxuICAgIC8vXG4gICAgSEg6ICgpID0+IHRoaXMucGFkKHRoaXMuZGF0ZS5nZXRIb3VycygpLCAyKSxcbiAgICBIOiAoKSA9PiB0aGlzLmRhdGUuZ2V0SG91cnMoKS50b1N0cmluZygpLFxuICAgIC8vXG4gICAgaGg6ICgpID0+IHRoaXMucGFkKHRoaXMuZGF0ZS5nZXRIb3VycygpICUgMTIgfHwgMTIsIDIpLFxuICAgIGg6ICgpID0+ICh0aGlzLmRhdGUuZ2V0SG91cnMoKSAlIDEyIHx8IDEyKS50b1N0cmluZygpLFxuICAgIC8vXG4gICAgQTogKCkgPT4gKHRoaXMuZGF0ZS5nZXRIb3VycygpIDwgMTIgPyAnYW0nIDogJ3BtJyksXG4gICAgYTogKCkgPT4gKHRoaXMuZGF0ZS5nZXRIb3VycygpIDwgMTIgPyAnYW0nIDogJ3BtJyksXG4gICAgJ2RhdGUnOiAob3B0aW9ucykgPT4gdGhpcy5mb3JtYXQodGhpcy5nZXREYXRlVGltZUZvcm1hdEJ5TG9jYWxlKG9wdGlvbnMubG9jYWxlLCAnc2hvcnREYXRlJykpLFxuICAgICdzaG9ydERhdGUnOiAob3B0aW9ucykgPT4gdGhpcy5mb3JtYXQodGhpcy5nZXREYXRlVGltZUZvcm1hdEJ5TG9jYWxlKG9wdGlvbnMubG9jYWxlLCAnc2hvcnREYXRlJykpLFxuICAgICdsb25nRGF0ZSc6IChvcHRpb25zKSA9PiB0aGlzLmZvcm1hdCh0aGlzLmdldERhdGVUaW1lRm9ybWF0QnlMb2NhbGUob3B0aW9ucy5sb2NhbGUsICdsb25nRGF0ZScpKSxcbiAgICAvL1xuICAgICdzaG9ydFRpbWUnOiAob3B0aW9ucykgPT4gdGhpcy5mb3JtYXQodGhpcy5nZXREYXRlVGltZUZvcm1hdEJ5TG9jYWxlKG9wdGlvbnMubG9jYWxlLCAnc2hvcnRUaW1lJykpLFxuICAgICd0aW1lJzogKG9wdGlvbnMpID0+IHRoaXMuZm9ybWF0KHRoaXMuZ2V0RGF0ZVRpbWVGb3JtYXRCeUxvY2FsZShvcHRpb25zLmxvY2FsZSwgJ3Nob3J0VGltZScpKSxcbiAgICAnbG9uZ1RpbWUnOiAob3B0aW9ucykgPT4gdGhpcy5mb3JtYXQodGhpcy5nZXREYXRlVGltZUZvcm1hdEJ5TG9jYWxlKG9wdGlvbnMubG9jYWxlLCAnbG9uZ1RpbWUnKSksXG4gICAgLy9cbiAgICAnZGF0ZXRpbWUnOiAob3B0aW9ucykgPT4gdGhpcy5mb3JtYXQoXCJkYXRlIHRpbWVcIiwgeyBsb2NhbGU6IG9wdGlvbnMubG9jYWxlIH0pLFxuICB9O1xuXG4gIGZvcm1hdChmb3JtYXQ6IHN0cmluZyA9IHRoaXMuZ2V0RGF0ZVRpbWVGb3JtYXRCeUxvY2FsZShuYXZpZ2F0b3IubGFuZ3VhZ2UsICdzaG9ydERhdGUnKSwgb3B0aW9ucz86IHsgbG9jYWxlPzogc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIGNvbnN0IGVmZmVjdGl2ZU9wdGlvbnMgPSBkZWZhdWx0cyh7fSwgb3B0aW9ucywge1xuICAgICAgbG9jYWxlOiBuYXZpZ2F0b3IubGFuZ3VhZ2VcbiAgICB9KTtcbiAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAob3JkZXJCeShPYmplY3Qua2V5cyh0aGlzLl9mb3JtYXRLZXlzKSwgKGMpID0+IGMubGVuZ3RoLCBbJ2Rlc2MnXSkuam9pbignfCcpLCAnZ2knKTtcbiAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UocmUsIChtYXRjaGVkKSA9PiB7XG4gICAgICBjb25zdCBmID0gdGhpcy5fZm9ybWF0S2V5c1ttYXRjaGVkXVxuICAgICAgY29uc3QgciA9IGYoZWZmZWN0aXZlT3B0aW9ucyk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9KTtcbiAgfVxuXG5cblxuICBnZXREYXRlVGltZUZvcm1hdEJ5TG9jYWxlKGxvY2FsZTogc3RyaW5nLCBzdHlsZTogJ3Nob3J0RGF0ZScgfCAnbG9uZ0RhdGUnIHwgJ3Nob3J0VGltZScgfCAnbG9uZ1RpbWUnKTogc3RyaW5nIHtcbiAgICBsZXQgb3B0aW9uczogSW50bC5EYXRlVGltZUZvcm1hdE9wdGlvbnMgPSB7fTtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlICdzaG9ydERhdGUnOiAvLyBZZWFyLCBNb250aCwgRGF5XG4gICAgICAgIG9wdGlvbnMgPSB7IHllYXI6ICdudW1lcmljJywgbW9udGg6ICcyLWRpZ2l0JywgZGF5OiAnMi1kaWdpdCcgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsb25nRGF0ZSc6IC8vIFdlZWtkYXksIE1vbnRoIG5hbWUsIERheSwgWWVhclxuICAgICAgICBvcHRpb25zID0geyB3ZWVrZGF5OiAnbG9uZycsIHllYXI6ICdudW1lcmljJywgbW9udGg6ICdsb25nJywgZGF5OiAnbnVtZXJpYycgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzaG9ydFRpbWUnOiAvLyBIb3VyLCBNaW51dGVcbiAgICAgICAgb3B0aW9ucyA9IHsgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JywgaG91cjEyOiBmYWxzZSB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xvbmdUaW1lJzogLy8gSG91ciwgTWludXRlLCBTZWNvbmRcbiAgICAgICAgb3B0aW9ucyA9IHsgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0Jywgc2Vjb25kOiAnMi1kaWdpdCcsIGhvdXIxMjogZmFsc2UgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBvcHRpb25zKTtcblxuICAgIC8vIEdldCBwYXJ0cyBvZiB0aGUgZGF0ZSBhbmQvb3IgdGltZVxuICAgIGNvbnN0IHBhcnRzID0gZm9ybWF0dGVyLmZvcm1hdFRvUGFydHMobmV3IERhdGUoKSk7XG5cbiAgICAvLyBNYXAgcGFydHMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBmb3JtYXRcbiAgICBjb25zdCBmb3JtYXRNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAnZGF5JzogJ2RkJyxcbiAgICAgICdtb250aCc6IHN0eWxlID09ICdsb25nRGF0ZScgPyAnTU1NTScgOiAnTU0nLFxuICAgICAgJ3llYXInOiAneXl5eScsXG4gICAgICAnaG91cic6ICdISCcsXG4gICAgICAnbWludXRlJzogJ21tJyxcbiAgICAgICdzZWNvbmQnOiAnc3MnLFxuICAgICAgJ3dlZWtkYXknOiAnRScsXG4gICAgICAnbGl0ZXJhbCc6ICcnXG4gICAgfTtcblxuICAgIC8vIENvbnN0cnVjdCB0aGUgZGF0ZSBhbmQvb3IgdGltZSBmb3JtYXQgc3RyaW5nXG4gICAgcmV0dXJuIHBhcnRzLm1hcChwYXJ0ID0+IHtcbiAgICAgIGlmIChwYXJ0LnR5cGUgPT09ICdsaXRlcmFsJykge1xuICAgICAgICAvLyBVc2UgdGhlIGxpdGVyYWwgcGFydCBkaXJlY3RseSBhcyBzZXBhcmF0b3JcbiAgICAgICAgcmV0dXJuIHBhcnQudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZm9ybWF0TWFwW3BhcnQudHlwZV0gfHwgcGFydC52YWx1ZTtcbiAgICAgIH1cbiAgICB9KS5qb2luKCcnKTtcbiAgfVxuXG5cblxuICBwcml2YXRlIHBhZChuLCB3aWR0aCwgeiA9ICcwJykge1xuICAgIG4gPSBuICsgJyc7XG4gICAgcmV0dXJuIG4ubGVuZ3RoID49IHdpZHRoID8gbiA6IG5ldyBBcnJheSh3aWR0aCAtIG4ubGVuZ3RoICsgMSkuam9pbih6KSArIG47XG4gIH1cblxuICBlcXVhbCh2YWx1ZTogRGF0ZSB8IEFYRGF0ZVRpbWUsIHVuaXQ6IFRpbWVVbml0ID0gJ2RheScpIHtcbiAgICByZXR1cm4gdGhpcy5jb21wYXJlKHZhbHVlLCB1bml0KSA9PSAwO1xuICB9XG5cbiAgY29tcGFyZSh2YWx1ZTogRGF0ZSB8IEFYRGF0ZVRpbWUsIHVuaXQ6IFRpbWVVbml0ID0gJ2RheScpIHtcbiAgICBjb25zdCBkYXRlID0gdmFsdWUgaW5zdGFuY2VvZiBBWERhdGVUaW1lID8gdmFsdWUuZGF0ZSA6ICh2YWx1ZSBhcyBEYXRlKTtcbiAgICBjb25zdCB2YWwgPSBuZXcgQVhEYXRlVGltZShkYXRlLCB0aGlzLmNhbGVuZGFyKTtcbiAgICBjb25zdCBmdW5jID0gKHYxOiBudW1iZXIsIHYyOiBudW1iZXIpID0+IHtcbiAgICAgIGlmICh2MSA9PSB2Mikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSBpZiAodjEgPiB2Mikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGxldCBwID0gMDtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICByZXR1cm4gZnVuYyh0aGlzLnllYXIsIHZhbC55ZWFyKTtcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ3llYXInKTtcbiAgICAgICAgcmV0dXJuIHAgPT0gMCA/IGZ1bmModGhpcy53ZWVrT2ZZZWFyLCB2YWwud2Vla09mWWVhcikgOiBwO1xuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ3llYXInKTtcbiAgICAgICAgcmV0dXJuIHAgPT0gMCA/IGZ1bmModGhpcy5tb250aE9mWWVhciwgdmFsLm1vbnRoT2ZZZWFyKSA6IHA7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ3llYXInKTtcbiAgICAgICAgcmV0dXJuIHAgPT0gMCA/IGZ1bmModGhpcy5kYXlPZlllYXIsIHZhbC5kYXlPZlllYXIpIDogcDtcbiAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ2RheScpO1xuICAgICAgICByZXR1cm4gcCA9PSAwID8gZnVuYyh0aGlzLmhvdXIsIHZhbC5ob3VyKSA6IHA7XG4gICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ2hvdXInKTtcbiAgICAgICAgcmV0dXJuIHAgPT0gMCA/IGZ1bmModGhpcy5taW51dGUsIHZhbC5taW51dGUpIDogcDtcbiAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIHAgPSB0aGlzLmNvbXBhcmUodmFsLCAnbWludXRlJyk7XG4gICAgICAgIHJldHVybiBwID09IDAgPyBmdW5jKHRoaXMuc2Vjb25kLCB2YWwuc2Vjb25kKSA6IHA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZnVuYyh0aGlzLmRhdGUuZ2V0VGltZSgpLCB2YWwuZGF0ZS5nZXRUaW1lKCkpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQVhDYWxlbmRhck1vbnRoIHtcbiAgcHJpdmF0ZSBfcmFuZ2U6IEFYRGF0ZVRpbWVSYW5nZTtcbiAgcHVibGljIGdldCByYW5nZSgpOiBBWERhdGVUaW1lUmFuZ2Uge1xuICAgIHJldHVybiB0aGlzLl9yYW5nZTtcbiAgfVxuICBwdWJsaWMgc2V0IHJhbmdlKHY6IEFYRGF0ZVRpbWVSYW5nZSkge1xuICAgIHRoaXMuX3JhbmdlID0gdjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdG90YWxEYXlzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2UuZW5kVGltZS5kYXlPZk1vbnRoO1xuICB9XG5cbiAgY29uc3RydWN0b3IoZGF0ZTogQVhEYXRlVGltZSkge1xuICAgIHRoaXMuaW5kZXggPSBkYXRlLmRhdGUuZ2V0TW9udGgoKTtcbiAgICB0aGlzLm5hbWUgPSBkYXRlLmZvcm1hdCgnTU1NTScpO1xuICAgIHRoaXMucmFuZ2UgPSBuZXcgQVhEYXRlVGltZVJhbmdlKFxuICAgICAgbmV3IEFYRGF0ZVRpbWUoZGF0ZS5zdGFydE9mKCdtb250aCcpLmRhdGUsIGRhdGUuY2FsZW5kYXIpLFxuICAgICAgbmV3IEFYRGF0ZVRpbWUoZGF0ZS5lbmRPZignbW9udGgnKS5kYXRlLCBkYXRlLmNhbGVuZGFyKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpbmRleDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFRpbWVTcGFuVG90YWwge1xuICBtaWxpc2Vjb25kczogbnVtYmVyO1xuICBzZWNvbmRzOiBudW1iZXI7XG4gIG1pbnV0ZXM6IG51bWJlcjtcbiAgaG91cnM6IG51bWJlcjtcbiAgZGF5czogbnVtYmVyO1xuICB3ZWVrczogbnVtYmVyO1xuICBtb250aHM6IG51bWJlcjtcbiAgeWVhcnM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFRpbWVTcGFuIHtcbiAgbWlsaXNlY29uZHM6IG51bWJlcjtcbiAgc2Vjb25kczogbnVtYmVyO1xuICBtaW51dGVzOiBudW1iZXI7XG4gIGhvdXJzOiBudW1iZXI7XG4gIGRheXM6IG51bWJlcjtcbiAgbW9udGhzOiBudW1iZXI7XG4gIHllYXJzOiBudW1iZXI7XG4gIHRvdGFsOiBBWFRpbWVTcGFuVG90YWw7XG59XG5cbmV4cG9ydCBjbGFzcyBBWERhdGVUaW1lUmFuZ2Uge1xuICBwcml2YXRlIF9zdGFydFRpbWU6IEFYRGF0ZVRpbWU7XG4gIHByaXZhdGUgX2VuZFRpbWU6IEFYRGF0ZVRpbWU7XG5cbiAgcHVibGljIGdldCBzdGFydFRpbWUoKTogQVhEYXRlVGltZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0VGltZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZW5kVGltZSgpOiBBWERhdGVUaW1lIHtcbiAgICByZXR1cm4gdGhpcy5fZW5kVGltZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHN0YXJ0VGltZTogQVhEYXRlVGltZSwgZW5kVGltZTogQVhEYXRlVGltZSkge1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IHN0YXJ0VGltZTtcbiAgICB0aGlzLl9lbmRUaW1lID0gZW5kVGltZTtcbiAgfVxuXG4gIGR1cmF0aW9uKCk6IEFYVGltZVNwYW4ge1xuICAgIGNvbnN0IHJlc3VsdDogQVhUaW1lU3BhbiA9IHtcbiAgICAgIG1pbGlzZWNvbmRzOiAwLFxuICAgICAgc2Vjb25kczogMCxcbiAgICAgIG1pbnV0ZXM6IDAsXG4gICAgICBob3VyczogMCxcbiAgICAgIGRheXM6IDAsXG4gICAgICBtb250aHM6IDAsXG4gICAgICB5ZWFyczogMCxcbiAgICAgIHRvdGFsOiB7XG4gICAgICAgIG1pbGlzZWNvbmRzOiAwLFxuICAgICAgICBzZWNvbmRzOiAwLFxuICAgICAgICBtaW51dGVzOiAwLFxuICAgICAgICBob3VyczogMCxcbiAgICAgICAgZGF5czogMCxcbiAgICAgICAgd2Vla3M6IDAsXG4gICAgICAgIG1vbnRoczogMCxcbiAgICAgICAgeWVhcnM6IDAsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBvbmVfc2Vjb25kID0gMTAwMDtcbiAgICBjb25zdCBvbmVfbWluID0gb25lX3NlY29uZCAqIDYwO1xuICAgIGNvbnN0IG9uZV9ob3VyID0gb25lX21pbiAqIDYwO1xuICAgIGNvbnN0IG9uZV9kYXkgPSBvbmVfaG91ciAqIDI0O1xuICAgIGNvbnN0IG9uZV93ZWVrID0gb25lX2RheSAqIDc7XG4gICAgY29uc3Qgb25lX3llYXIgPSAzNjUuMjUgKiBvbmVfZGF5O1xuICAgIGNvbnN0IG9uZV9tb250aCA9IG9uZV95ZWFyIC8gMTI7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gdGhpcy5fc3RhcnRUaW1lLmRhdGUuZ2V0VGltZSgpO1xuICAgIGNvbnN0IGVuZFRpbWUgPSB0aGlzLl9lbmRUaW1lLmRhdGUuZ2V0VGltZSgpO1xuICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhlbmRUaW1lIC0gc3RhcnRUaW1lKTtcbiAgICAvL1xuICAgIHJlc3VsdC50b3RhbC5taWxpc2Vjb25kcyA9IGRpZmY7XG4gICAgcmVzdWx0LnRvdGFsLnNlY29uZHMgPSBOdW1iZXIoKGRpZmYgLyBvbmVfc2Vjb25kKS50b0ZpeGVkKDIpKTtcbiAgICByZXN1bHQudG90YWwubWludXRlcyA9IE51bWJlcigoZGlmZiAvIG9uZV9taW4pLnRvRml4ZWQoMikpO1xuICAgIHJlc3VsdC50b3RhbC5ob3VycyA9IE51bWJlcigoZGlmZiAvIG9uZV9ob3VyKS50b0ZpeGVkKDIpKTtcbiAgICByZXN1bHQudG90YWwuZGF5cyA9IE51bWJlcigoZGlmZiAvIG9uZV9kYXkpLnRvRml4ZWQoMikpO1xuICAgIHJlc3VsdC50b3RhbC53ZWVrcyA9IE51bWJlcigoZGlmZiAvIG9uZV93ZWVrKS50b0ZpeGVkKDIpKTtcbiAgICAvL1xuICAgIC8vIGxldCBtb250aHMgPSAodGhpcy5lbmRUaW1lLnllYXIgLSB0aGlzLnN0YXJ0VGltZS55ZWFyKSAqIDEyO1xuICAgIC8vIG1vbnRocyArPSB0aGlzLmVuZFRpbWUubW9udGhPZlllYXIgLSB0aGlzLnN0YXJ0VGltZS5tb250aE9mWWVhciArIDE7XG4gICAgLy8gaWYgKHRoaXMuZW5kVGltZS5kYXlPZlllYXIgPCB0aGlzLnN0YXJ0VGltZS5kYXlPZlllYXIpIHtcbiAgICAvLyAgICAgbW9udGhzLS07XG4gICAgLy8gfVxuICAgIC8vIHJlc3VsdC50b3RhbC5tb250aHMgPSBNYXRoLmFicyhtb250aHMpO1xuICAgIC8vIFRPRE86IHJldmlld1xuICAgIHJlc3VsdC50b3RhbC5tb250aHMgPSBOdW1iZXIoKGRpZmYgLyBvbmVfbW9udGgpLnRvRml4ZWQoMikpO1xuICAgIHJlc3VsdC50b3RhbC55ZWFycyA9IE51bWJlcigoZGlmZiAvIG9uZV95ZWFyKS50b0ZpeGVkKDIpKTtcbiAgICAvL1xuICAgIHJlc3VsdC5taWxpc2Vjb25kcyA9IHJlc3VsdC50b3RhbC5taWxpc2Vjb25kcyAlIDEwMDA7XG4gICAgcmVzdWx0LnNlY29uZHMgPSBOdW1iZXIoKHJlc3VsdC50b3RhbC5zZWNvbmRzICUgNjApLnRvRml4ZWQoMCkpO1xuICAgIHJlc3VsdC5taW51dGVzID0gTnVtYmVyKChyZXN1bHQudG90YWwubWludXRlcyAlIDYwKS50b0ZpeGVkKDApKTtcbiAgICByZXN1bHQuaG91cnMgPSBOdW1iZXIoKHJlc3VsdC50b3RhbC5ob3VycyAlIDI0KS50b0ZpeGVkKDApKTtcbiAgICAvLyBUT0RPOiByZXZpZXdcbiAgICByZXN1bHQuZGF5cyA9IE51bWJlcigocmVzdWx0LnRvdGFsLmRheXMgJSAzMC40KS50b0ZpeGVkKDApKTtcbiAgICByZXN1bHQubW9udGhzID0gTnVtYmVyKChyZXN1bHQudG90YWwubW9udGhzICUgMTIpLnRvRml4ZWQoMCkpO1xuICAgIHJlc3VsdC55ZWFycyA9IE51bWJlcihyZXN1bHQudG90YWwueWVhcnMudG9GaXhlZCgwKSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGVudW11cmF0ZSh1bml0OiBUaW1lVW5pdCA9ICdkYXknLCBhbW91bnQgPSAxKTogQVhEYXRlVGltZVtdIHtcbiAgICBjb25zdCByZXN1bHQ6IEFYRGF0ZVRpbWVbXSA9IFtdO1xuICAgIGxldCBpdGVtID0gdGhpcy5fc3RhcnRUaW1lLmNsb25lKCk7XG4gICAgd2hpbGUgKGl0ZW0uY29tcGFyZSh0aGlzLl9lbmRUaW1lLCB1bml0KSA8IDEpIHtcbiAgICAgIGlmICghcmVzdWx0LnNvbWUoKGMpID0+IGMuZXF1YWwoaXRlbSwgdW5pdCkpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgICAgaXRlbSA9IGl0ZW0uYWRkKHVuaXQsIGFtb3VudCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpbmNsdWRlcyh2YWx1ZTogQVhEYXRlVGltZSwgdW5pdDogVGltZVVuaXQgPSAnZGF5Jyk6IGJvb2xlYW4ge1xuICAvLyAgIC8vIFRPRE86ID8/XG4gIC8vICAgcmV0dXJuIHRydWU7XG4gIC8vIH1cblxuICAvLyBnZXRWaWV3Q29tcGFpcmUodmlldykge1xuICAvLyAgICAgc3dpdGNoICh2aWV3KSB7XG4gIC8vICAgICAgICAgY2FzZSAnZGF5JzpcbiAgLy8gICAgICAgICAgICAgcmV0dXJuICdZTUQnO1xuICAvLyAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgLy8gICAgICAgICAgICAgcmV0dXJuICdZTSc7XG4gIC8vICAgICAgICAgY2FzZSAneWVhcic6XG4gIC8vICAgICAgICAgICAgIHJldHVybiAnWSc7XG4gIC8vICAgICB9XG4gIC8vIH1cbn1cbiJdfQ==
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvZGF0ZVRpbWUvc3JjL2xpYi9kYXRldGltZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFrRDlDLE1BQU0sT0FBZ0IsVUFBVTtJQUc5Qjs7T0FFRztJQUNILFlBQVksTUFBd0I7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDL0IsQ0FBQztDQTJCRjtBQUVELE1BQU0sT0FBTyxVQUFVO0lBR3JCLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBR0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxZQUFZLEtBQVcsRUFBRSxRQUFvQjtRQXdFN0MsMkJBQTJCO1FBQ25CLGdCQUFXLEdBQUc7WUFDcEIsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0MsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFO1lBQzFDLEVBQUU7WUFDRixFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFELEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUQsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7WUFDdkQsRUFBRTtZQUNGLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUMxQyxFQUFFO1lBQ0YsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUNULGFBQWEsQ0FDWCxtQkFBbUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQzNGO1lBQ0gsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUNSLGFBQWEsQ0FDWCxtQkFBbUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQzVGO1lBQ0gsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzRCxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM3QyxFQUFFO1lBQ0YsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUNOLGFBQWEsQ0FDWCwwQkFBMEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQzNGO1lBQ0gsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUNSLGFBQWEsQ0FDWCwyQkFBMkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQzVGO1lBQ0gsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbkMsRUFBRTtZQUNGLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEQsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0RCxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNqRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNqRSxFQUFFO1lBQ0YsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDM0MsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1lBQ3hDLEVBQUU7WUFDRixFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUNyRCxFQUFFO1lBQ0YsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2xELENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNsRCxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixD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Q0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RCxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQWlCLEtBQUssRUFBRSxNQUFNLEdBQUcsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBaUIsRUFBRSxDQUFDO1FBQ2hDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO2dCQUM1QyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ25CO1lBQ0QsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHJhbnNsYXRlU3luYyB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBkZWZhdWx0cywgb3JkZXJCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmV4cG9ydCB0eXBlIFRpbWVVbml0ID0gJ21zJyB8ICdzZWNvbmQnIHwgJ21pbnV0ZScgfCAnaG91cicgfCAnZGF5JyB8ICdtb250aCcgfCAneWVhcicgfCAnd2Vlayc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhEYXRlVmFsdWUge1xuICB5ZWFyOiBudW1iZXI7XG4gIG1vbnRoOiBudW1iZXI7XG4gIGRhdGU6IG51bWJlcjtcbiAgaG91cnM/OiBudW1iZXI7XG4gIG1pbnV0ZXM/OiBudW1iZXI7XG4gIHNlY29uZHM/OiBudW1iZXI7XG4gIG1zPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYRGF0ZVRpbWVEaXNwbGF5Rm9ybWF0cyB7XG4gIGRhdGVJbnB1dDogc3RyaW5nO1xuICB0aW1lSW5wdXQ6IHN0cmluZztcbiAgZGF0ZVRpbWVJbnB1dDogc3RyaW5nO1xuICBkYXRlRGlzcGxheTogc3RyaW5nO1xuICB0aW1lRGlzcGxheTogc3RyaW5nO1xuICBkYXRlVGltZURpc3BsYXk6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQVhEYXRlVGltZVVuaXROYW1lcyA9IHsgbG9uZzogc3RyaW5nOyBzaG9ydDogc3RyaW5nOyBsZXR0ZXI6IHN0cmluZyB9W107XG5cbmV4cG9ydCB0eXBlIEFYRGF0ZVRpbWVQYXJ0ID0ge1xuICBrZXk6IHN0cmluZztcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgcGxhY2Vob2xkZXJzOiBzdHJpbmdbXTtcbiAgdHlwZWRWYWx1ZT86IHN0cmluZyB8IG51bGw7XG4gIGRlZmF1bHQ6IG51bWJlcjtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgcmVhbFZhbHVlOiAoKSA9PiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBBWERhdGVUaW1lUGFydHMgPSB7XG4gIHllYXI6IEFYRGF0ZVRpbWVQYXJ0O1xuICBtb250aDogQVhEYXRlVGltZVBhcnQ7XG4gIGRheTogQVhEYXRlVGltZVBhcnQ7XG4gIGhvdXI6IEFYRGF0ZVRpbWVQYXJ0O1xuICBtaW51dGU6IEFYRGF0ZVRpbWVQYXJ0O1xuICBzZWNvbmQ6IEFYRGF0ZVRpbWVQYXJ0O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBBWENhbGVuZGFyQ29uZmlnIHtcbiAgd2Vla2RheXM6IG51bWJlcltdO1xuICB3ZWVrZW5kOiBudW1iZXJbXTtcbiAgZm9ybWF0czogQVhEYXRlVGltZURpc3BsYXlGb3JtYXRzO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQVhDYWxlbmRhciB7XG4gIHByaXZhdGUgX2NvbmZpZzogQVhDYWxlbmRhckNvbmZpZztcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoY29uZmlnOiBBWENhbGVuZGFyQ29uZmlnKSB7XG4gICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuICB9XG5cbiAgcHVibGljIGdldCB3ZWVrZW5kKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLndlZWtlbmQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZvcm1hdHMoKTogQVhEYXRlVGltZURpc3BsYXlGb3JtYXRzIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLmZvcm1hdHM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHdlZWtkYXlzKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLndlZWtkYXlzO1xuICB9XG5cbiAgYWJzdHJhY3QgbmFtZSgpOiBzdHJpbmc7XG5cbiAgYWJzdHJhY3QgZGF5T2ZNb250aChkYXRlOiBEYXRlKTogbnVtYmVyO1xuXG4gIGFic3RyYWN0IGRheU9mWWVhcihkYXRlOiBEYXRlKTogbnVtYmVyO1xuXG4gIGFic3RyYWN0IGRheU9mV2VlayhkYXRlOiBEYXRlKTogbnVtYmVyO1xuXG4gIGFic3RyYWN0IG1vbnRoT2ZZZWFyKGRhdGU6IERhdGUpOiBudW1iZXI7XG5cbiAgYWJzdHJhY3Qgd2Vla09mWWVhcihkYXRlOiBEYXRlKTogbnVtYmVyO1xuXG4gIGFic3RyYWN0IHllYXIoZGF0ZTogRGF0ZSk6IG51bWJlcjtcblxuICBhYnN0cmFjdCBhZGQoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQsIGFtb3VudDogbnVtYmVyKTogQVhEYXRlVGltZTtcblxuICBhYnN0cmFjdCBzZXQoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQsIHZhbHVlOiBudW1iZXIpOiBBWERhdGVUaW1lO1xuXG4gIGFic3RyYWN0IHN0YXJ0T2YoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQpOiBBWERhdGVUaW1lO1xuXG4gIGFic3RyYWN0IGVuZE9mKGRhdGU6IERhdGUsIHVuaXQ6IFRpbWVVbml0KTogQVhEYXRlVGltZTtcblxuICBhYnN0cmFjdCBjcmVhdGUodmFsdWU6IEFYRGF0ZVZhbHVlKTogQVhEYXRlVGltZTtcblxuICBhYnN0cmFjdCBwYXJzZSh2YWx1ZTogc3RyaW5nKTogQVhEYXRlVGltZTtcbn1cblxuZXhwb3J0IGNsYXNzIEFYRGF0ZVRpbWUge1xuICBwcml2YXRlIF9kYXRlOiBEYXRlO1xuXG4gIGdldCBkYXRlKCk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLl9kYXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2FsZW5kYXI6IEFYQ2FsZW5kYXI7XG4gIGdldCBjYWxlbmRhcigpOiBBWENhbGVuZGFyIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXI7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih2YWx1ZTogRGF0ZSwgY2FsZW5kYXI6IEFYQ2FsZW5kYXIpIHtcbiAgICB0aGlzLl9jYWxlbmRhciA9IGNhbGVuZGFyO1xuICAgIHRoaXMuX2RhdGUgPSB2YWx1ZTtcbiAgfVxuXG4gIGNsb25lKCk6IEFYRGF0ZVRpbWUge1xuICAgIHJldHVybiBuZXcgQVhEYXRlVGltZSh0aGlzLmRhdGUsIHRoaXMuY2FsZW5kYXIpO1xuICB9XG5cbiAgZ2V0IGRheU9mTW9udGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZNb250aCh0aGlzLmRhdGUpO1xuICB9XG5cbiAgZ2V0IGRheU9mWWVhcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZlllYXIodGhpcy5kYXRlKTtcbiAgfVxuXG4gIGdldCBkYXlPZldlZWsoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZXZWVrKHRoaXMuZGF0ZSk7XG4gIH1cblxuICBnZXQgaG91cigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9kYXRlLmdldEhvdXJzKCk7XG4gIH1cblxuICBnZXQgbWludXRlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGUuZ2V0TWludXRlcygpO1xuICB9XG5cbiAgZ2V0IHNlY29uZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9kYXRlLmdldFNlY29uZHMoKTtcbiAgfVxuXG4gIGdldCB5ZWFyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLnllYXIodGhpcy5kYXRlKTtcbiAgfVxuXG4gIGdldCBtb250aE9mWWVhcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci5tb250aE9mWWVhcih0aGlzLmRhdGUpO1xuICB9XG5cbiAgZ2V0IHdlZWtPZlllYXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla09mWWVhcih0aGlzLmRhdGUpO1xuICB9XG5cbiAgZ2V0IG1vbnRoKCk6IEFYQ2FsZW5kYXJNb250aCB7XG4gICAgcmV0dXJuIG5ldyBBWENhbGVuZGFyTW9udGgodGhpcyk7XG4gIH1cblxuICBhZGQodW5pdDogVGltZVVuaXQsIGFtb3VudDogbnVtYmVyKTogQVhEYXRlVGltZSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLmFkZCh0aGlzLmRhdGUsIHVuaXQsIGFtb3VudCk7XG4gIH1cblxuICBzZXQodW5pdDogVGltZVVuaXQgPSAnZGF5JywgdmFsdWU6IG51bWJlcik6IEFYRGF0ZVRpbWUge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci5zZXQodGhpcy5kYXRlLCB1bml0LCB2YWx1ZSk7XG4gIH1cblxuICBkdXJhdGlvbihlbmQ6IERhdGUgfCBBWERhdGVUaW1lKTogQVhUaW1lU3BhbiB7XG4gICAgY29uc3QgZGF0ZSA9IGVuZCBpbnN0YW5jZW9mIEFYRGF0ZVRpbWUgPyBlbmQuZGF0ZSA6IChlbmQgYXMgRGF0ZSk7XG4gICAgY29uc3QgdmFsID0gbmV3IEFYRGF0ZVRpbWUoZGF0ZSwgdGhpcy5jYWxlbmRhcik7XG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgQVhEYXRlVGltZVJhbmdlKHRoaXMsIHZhbCk7XG4gICAgcmV0dXJuIHJhbmdlLmR1cmF0aW9uKCk7XG4gIH1cblxuICBzdGFydE9mKHVuaXQ6IFRpbWVVbml0ID0gJ2RheScpOiBBWERhdGVUaW1lIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIuc3RhcnRPZih0aGlzLmRhdGUsIHVuaXQpO1xuICB9XG5cbiAgZW5kT2YodW5pdDogVGltZVVuaXQgPSAnZGF5Jyk6IEFYRGF0ZVRpbWUge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci5lbmRPZih0aGlzLmRhdGUsIHVuaXQpO1xuICB9XG5cbiAgLy9UT0RPOiByZW1vdmUgdW51c2VkIGl0ZW1zXG4gIHByaXZhdGUgX2Zvcm1hdEtleXMgPSB7XG4gICAgc3M6ICgpID0+IHRoaXMucGFkKHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCksIDIpLFxuICAgIHM6ICgpID0+IHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKSxcbiAgICAvL1xuICAgIGRkOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmNhbGVuZGFyLmRheU9mTW9udGgodGhpcy5kYXRlKSwgMiksXG4gICAgREQ6ICgpID0+IHRoaXMucGFkKHRoaXMuY2FsZW5kYXIuZGF5T2ZNb250aCh0aGlzLmRhdGUpLCAyKSxcbiAgICBkOiAoKSA9PiB0aGlzLmNhbGVuZGFyLmRheU9mTW9udGgodGhpcy5kYXRlKS50b1N0cmluZygpLFxuICAgIC8vXG4gICAgbW06ICgpID0+IHRoaXMucGFkKHRoaXMuZGF0ZS5nZXRNaW51dGVzKCksIDIpLFxuICAgIG06ICgpID0+IHRoaXMuZGF0ZS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSxcbiAgICAvL1xuICAgIE1NTU06ICgpID0+XG4gICAgICB0cmFuc2xhdGVTeW5jKFxuICAgICAgICBgZGF0ZVRpbWUubW9udGhzLiR7dGhpcy5jYWxlbmRhci5uYW1lKCl9LmxvbmcuJHt0aGlzLmNhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSkgLSAxfWAsXG4gICAgICApLFxuICAgIE1NTTogKCkgPT5cbiAgICAgIHRyYW5zbGF0ZVN5bmMoXG4gICAgICAgIGBkYXRlVGltZS5tb250aHMuJHt0aGlzLmNhbGVuZGFyLm5hbWUoKX0uc2hvcnQuJHt0aGlzLmNhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSkgLSAxfWAsXG4gICAgICApLFxuICAgIE1NOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmNhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSksIDIpLFxuICAgIE06ICgpID0+IHRoaXMuY2FsZW5kYXIubW9udGhPZlllYXIodGhpcy5kYXRlKSxcbiAgICAvL1xuICAgIEU6ICgpID0+XG4gICAgICB0cmFuc2xhdGVTeW5jKFxuICAgICAgICBgZGF0ZVRpbWUud2Vla2RheXMubG9uZy4ke3RoaXMuY2FsZW5kYXIud2Vla2RheXNbdGhpcy5jYWxlbmRhci5kYXlPZldlZWsodGhpcy5kYXRlKSAtIDFdfWAsXG4gICAgICApLFxuICAgIERERDogKCkgPT5cbiAgICAgIHRyYW5zbGF0ZVN5bmMoXG4gICAgICAgIGBkYXRlVGltZS53ZWVrZGF5cy5zaG9ydC4ke3RoaXMuY2FsZW5kYXIud2Vla2RheXNbdGhpcy5jYWxlbmRhci5kYXlPZldlZWsodGhpcy5kYXRlKSAtIDFdfWAsXG4gICAgICApLFxuICAgIEREREQ6ICgpID0+IHRoaXMuX2Zvcm1hdEtleXNbJ0UnXSgpLFxuICAgIC8vXG4gICAgeXl5eTogKCkgPT4gdGhpcy5wYWQodGhpcy5jYWxlbmRhci55ZWFyKHRoaXMuZGF0ZSksIDQpLFxuICAgIFlZWVk6ICgpID0+IHRoaXMucGFkKHRoaXMuY2FsZW5kYXIueWVhcih0aGlzLmRhdGUpLCA0KSxcbiAgICB5eTogKCkgPT4gdGhpcy5wYWQodGhpcy5jYWxlbmRhci55ZWFyKHRoaXMuZGF0ZSksIDQpLnN1YnN0cmluZygyKSxcbiAgICBZWTogKCkgPT4gdGhpcy5wYWQodGhpcy5jYWxlbmRhci55ZWFyKHRoaXMuZGF0ZSksIDQpLnN1YnN0cmluZygyKSxcbiAgICAvL1xuICAgIEhIOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmRhdGUuZ2V0SG91cnMoKSwgMiksXG4gICAgSDogKCkgPT4gdGhpcy5kYXRlLmdldEhvdXJzKCkudG9TdHJpbmcoKSxcbiAgICAvL1xuICAgIGhoOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmRhdGUuZ2V0SG91cnMoKSAlIDEyIHx8IDEyLCAyKSxcbiAgICBoOiAoKSA9PiAodGhpcy5kYXRlLmdldEhvdXJzKCkgJSAxMiB8fCAxMikudG9TdHJpbmcoKSxcbiAgICAvL1xuICAgIEE6ICgpID0+ICh0aGlzLmRhdGUuZ2V0SG91cnMoKSA8IDEyID8gJ2FtJyA6ICdwbScpLFxuICAgIGE6ICgpID0+ICh0aGlzLmRhdGUuZ2V0SG91cnMoKSA8IDEyID8gJ2FtJyA6ICdwbScpLFxuICAgIGRhdGU6IChvcHRpb25zKSA9PiB0aGlzLmZvcm1hdCh0aGlzLmdldERhdGVUaW1lRm9ybWF0QnlMb2NhbGUob3B0aW9ucy5sb2NhbGUsICdzaG9ydERhdGUnKSksXG4gICAgc2hvcnREYXRlOiAob3B0aW9ucykgPT4gdGhpcy5mb3JtYXQodGhpcy5nZXREYXRlVGltZUZvcm1hdEJ5TG9jYWxlKG9wdGlvbnMubG9jYWxlLCAnc2hvcnREYXRlJykpLFxuICAgIGxvbmdEYXRlOiAob3B0aW9ucykgPT4gdGhpcy5mb3JtYXQodGhpcy5nZXREYXRlVGltZUZvcm1hdEJ5TG9jYWxlKG9wdGlvbnMubG9jYWxlLCAnbG9uZ0RhdGUnKSksXG4gICAgLy9cbiAgICBzaG9ydFRpbWU6IChvcHRpb25zKSA9PiB0aGlzLmZvcm1hdCh0aGlzLmdldERhdGVUaW1lRm9ybWF0QnlMb2NhbGUob3B0aW9ucy5sb2NhbGUsICdzaG9ydFRpbWUnKSksXG4gICAgdGltZTogKG9wdGlvbnMpID0+IHRoaXMuZm9ybWF0KHRoaXMuZ2V0RGF0ZVRpbWVGb3JtYXRCeUxvY2FsZShvcHRpb25zLmxvY2FsZSwgJ3Nob3J0VGltZScpKSxcbiAgICBsb25nVGltZTogKG9wdGlvbnMpID0+IHRoaXMuZm9ybWF0KHRoaXMuZ2V0RGF0ZVRpbWVGb3JtYXRCeUxvY2FsZShvcHRpb25zLmxvY2FsZSwgJ2xvbmdUaW1lJykpLFxuICAgIC8vXG4gICAgZGF0ZXRpbWU6IChvcHRpb25zKSA9PiB0aGlzLmZvcm1hdCgnZGF0ZSB0aW1lJywgeyBsb2NhbGU6IG9wdGlvbnMubG9jYWxlIH0pLFxuICB9O1xuXG4gIGZvcm1hdChcbiAgICBmb3JtYXQ6IHN0cmluZyA9IHRoaXMuZ2V0RGF0ZVRpbWVGb3JtYXRCeUxvY2FsZShuYXZpZ2F0b3IubGFuZ3VhZ2UsICdzaG9ydERhdGUnKSxcbiAgICBvcHRpb25zPzogeyBsb2NhbGU/OiBzdHJpbmcgfSxcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBlZmZlY3RpdmVPcHRpb25zID0gZGVmYXVsdHMoe30sIG9wdGlvbnMsIHtcbiAgICAgIGxvY2FsZTogbmF2aWdhdG9yLmxhbmd1YWdlLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChvcmRlckJ5KE9iamVjdC5rZXlzKHRoaXMuX2Zvcm1hdEtleXMpLCAoYykgPT4gYy5sZW5ndGgsIFsnZGVzYyddKS5qb2luKCd8JyksICdnaScpO1xuICAgIHJldHVybiBmb3JtYXQucmVwbGFjZShyZSwgKG1hdGNoZWQpID0+IHtcbiAgICAgIGNvbnN0IGYgPSB0aGlzLl9mb3JtYXRLZXlzW21hdGNoZWRdO1xuICAgICAgY29uc3QgciA9IGYoZWZmZWN0aXZlT3B0aW9ucyk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9KTtcbiAgfVxuXG4gIGdldERhdGVUaW1lRm9ybWF0QnlMb2NhbGUoXG4gICAgbG9jYWxlOiBzdHJpbmcsXG4gICAgc3R5bGU6ICdzaG9ydERhdGUnIHwgJ2xvbmdEYXRlJyB8ICdzaG9ydFRpbWUnIHwgJ2xvbmdUaW1lJyxcbiAgKTogc3RyaW5nIHtcbiAgICBsZXQgb3B0aW9uczogSW50bC5EYXRlVGltZUZvcm1hdE9wdGlvbnMgPSB7fTtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlICdzaG9ydERhdGUnOiAvLyBZZWFyLCBNb250aCwgRGF5XG4gICAgICAgIG9wdGlvbnMgPSB7IHllYXI6ICdudW1lcmljJywgbW9udGg6ICcyLWRpZ2l0JywgZGF5OiAnMi1kaWdpdCcgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsb25nRGF0ZSc6IC8vIFdlZWtkYXksIE1vbnRoIG5hbWUsIERheSwgWWVhclxuICAgICAgICBvcHRpb25zID0geyB3ZWVrZGF5OiAnbG9uZycsIHllYXI6ICdudW1lcmljJywgbW9udGg6ICdsb25nJywgZGF5OiAnbnVtZXJpYycgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzaG9ydFRpbWUnOiAvLyBIb3VyLCBNaW51dGVcbiAgICAgICAgb3B0aW9ucyA9IHsgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JywgaG91cjEyOiBmYWxzZSB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xvbmdUaW1lJzogLy8gSG91ciwgTWludXRlLCBTZWNvbmRcbiAgICAgICAgb3B0aW9ucyA9IHsgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0Jywgc2Vjb25kOiAnMi1kaWdpdCcsIGhvdXIxMjogZmFsc2UgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBvcHRpb25zKTtcblxuICAgIC8vIEdldCBwYXJ0cyBvZiB0aGUgZGF0ZSBhbmQvb3IgdGltZVxuICAgIGNvbnN0IHBhcnRzID0gZm9ybWF0dGVyLmZvcm1hdFRvUGFydHMobmV3IERhdGUoKSk7XG5cbiAgICAvLyBNYXAgcGFydHMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBmb3JtYXRcbiAgICBjb25zdCBmb3JtYXRNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICBkYXk6ICdkZCcsXG4gICAgICBtb250aDogc3R5bGUgPT0gJ2xvbmdEYXRlJyA/ICdNTU1NJyA6ICdNTScsXG4gICAgICB5ZWFyOiAneXl5eScsXG4gICAgICBob3VyOiAnSEgnLFxuICAgICAgbWludXRlOiAnbW0nLFxuICAgICAgc2Vjb25kOiAnc3MnLFxuICAgICAgd2Vla2RheTogJ0UnLFxuICAgICAgbGl0ZXJhbDogJycsXG4gICAgfTtcblxuICAgIC8vIENvbnN0cnVjdCB0aGUgZGF0ZSBhbmQvb3IgdGltZSBmb3JtYXQgc3RyaW5nXG4gICAgcmV0dXJuIHBhcnRzXG4gICAgICAubWFwKChwYXJ0KSA9PiB7XG4gICAgICAgIGlmIChwYXJ0LnR5cGUgPT09ICdsaXRlcmFsJykge1xuICAgICAgICAgIC8vIFVzZSB0aGUgbGl0ZXJhbCBwYXJ0IGRpcmVjdGx5IGFzIHNlcGFyYXRvclxuICAgICAgICAgIHJldHVybiBwYXJ0LnZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmb3JtYXRNYXBbcGFydC50eXBlXSB8fCBwYXJ0LnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmpvaW4oJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYWQobiwgd2lkdGgsIHogPSAnMCcpIHtcbiAgICBuID0gbiArICcnO1xuICAgIHJldHVybiBuLmxlbmd0aCA+PSB3aWR0aCA/IG4gOiBuZXcgQXJyYXkod2lkdGggLSBuLmxlbmd0aCArIDEpLmpvaW4oeikgKyBuO1xuICB9XG5cbiAgZXF1YWwodmFsdWU6IERhdGUgfCBBWERhdGVUaW1lLCB1bml0OiBUaW1lVW5pdCA9ICdkYXknKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tcGFyZSh2YWx1ZSwgdW5pdCkgPT0gMDtcbiAgfVxuXG4gIGNvbXBhcmUodmFsdWU6IERhdGUgfCBBWERhdGVUaW1lLCB1bml0OiBUaW1lVW5pdCA9ICdkYXknKSB7XG4gICAgY29uc3QgZGF0ZSA9IHZhbHVlIGluc3RhbmNlb2YgQVhEYXRlVGltZSA/IHZhbHVlLmRhdGUgOiAodmFsdWUgYXMgRGF0ZSk7XG4gICAgY29uc3QgdmFsID0gbmV3IEFYRGF0ZVRpbWUoZGF0ZSwgdGhpcy5jYWxlbmRhcik7XG4gICAgY29uc3QgZnVuYyA9ICh2MTogbnVtYmVyLCB2MjogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAodjEgPT0gdjIpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9IGVsc2UgaWYgKHYxID4gdjIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgfTtcbiAgICBsZXQgcCA9IDA7XG4gICAgc3dpdGNoICh1bml0KSB7XG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgcmV0dXJuIGZ1bmModGhpcy55ZWFyLCB2YWwueWVhcik7XG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgcCA9IHRoaXMuY29tcGFyZSh2YWwsICd5ZWFyJyk7XG4gICAgICAgIHJldHVybiBwID09IDAgPyBmdW5jKHRoaXMud2Vla09mWWVhciwgdmFsLndlZWtPZlllYXIpIDogcDtcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgcCA9IHRoaXMuY29tcGFyZSh2YWwsICd5ZWFyJyk7XG4gICAgICAgIHJldHVybiBwID09IDAgPyBmdW5jKHRoaXMubW9udGhPZlllYXIsIHZhbC5tb250aE9mWWVhcikgOiBwO1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgcCA9IHRoaXMuY29tcGFyZSh2YWwsICd5ZWFyJyk7XG4gICAgICAgIHJldHVybiBwID09IDAgPyBmdW5jKHRoaXMuZGF5T2ZZZWFyLCB2YWwuZGF5T2ZZZWFyKSA6IHA7XG4gICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgcCA9IHRoaXMuY29tcGFyZSh2YWwsICdkYXknKTtcbiAgICAgICAgcmV0dXJuIHAgPT0gMCA/IGZ1bmModGhpcy5ob3VyLCB2YWwuaG91cikgOiBwO1xuICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgcCA9IHRoaXMuY29tcGFyZSh2YWwsICdob3VyJyk7XG4gICAgICAgIHJldHVybiBwID09IDAgPyBmdW5jKHRoaXMubWludXRlLCB2YWwubWludXRlKSA6IHA7XG4gICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ21pbnV0ZScpO1xuICAgICAgICByZXR1cm4gcCA9PSAwID8gZnVuYyh0aGlzLnNlY29uZCwgdmFsLnNlY29uZCkgOiBwO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZ1bmModGhpcy5kYXRlLmdldFRpbWUoKSwgdmFsLmRhdGUuZ2V0VGltZSgpKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFYQ2FsZW5kYXJNb250aCB7XG4gIHByaXZhdGUgX3JhbmdlOiBBWERhdGVUaW1lUmFuZ2U7XG4gIHB1YmxpYyBnZXQgcmFuZ2UoKTogQVhEYXRlVGltZVJhbmdlIHtcbiAgICByZXR1cm4gdGhpcy5fcmFuZ2U7XG4gIH1cbiAgcHVibGljIHNldCByYW5nZSh2OiBBWERhdGVUaW1lUmFuZ2UpIHtcbiAgICB0aGlzLl9yYW5nZSA9IHY7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRvdGFsRGF5cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnJhbmdlLmVuZFRpbWUuZGF5T2ZNb250aDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGRhdGU6IEFYRGF0ZVRpbWUpIHtcbiAgICB0aGlzLmluZGV4ID0gZGF0ZS5kYXRlLmdldE1vbnRoKCk7XG4gICAgdGhpcy5uYW1lID0gZGF0ZS5mb3JtYXQoJ01NTU0nKTtcbiAgICB0aGlzLnJhbmdlID0gbmV3IEFYRGF0ZVRpbWVSYW5nZShcbiAgICAgIG5ldyBBWERhdGVUaW1lKGRhdGUuc3RhcnRPZignbW9udGgnKS5kYXRlLCBkYXRlLmNhbGVuZGFyKSxcbiAgICAgIG5ldyBBWERhdGVUaW1lKGRhdGUuZW5kT2YoJ21vbnRoJykuZGF0ZSwgZGF0ZS5jYWxlbmRhciksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5kZXg6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhUaW1lU3BhblRvdGFsIHtcbiAgbWlsaXNlY29uZHM6IG51bWJlcjtcbiAgc2Vjb25kczogbnVtYmVyO1xuICBtaW51dGVzOiBudW1iZXI7XG4gIGhvdXJzOiBudW1iZXI7XG4gIGRheXM6IG51bWJlcjtcbiAgd2Vla3M6IG51bWJlcjtcbiAgbW9udGhzOiBudW1iZXI7XG4gIHllYXJzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhUaW1lU3BhbiB7XG4gIG1pbGlzZWNvbmRzOiBudW1iZXI7XG4gIHNlY29uZHM6IG51bWJlcjtcbiAgbWludXRlczogbnVtYmVyO1xuICBob3VyczogbnVtYmVyO1xuICBkYXlzOiBudW1iZXI7XG4gIG1vbnRoczogbnVtYmVyO1xuICB5ZWFyczogbnVtYmVyO1xuICB0b3RhbDogQVhUaW1lU3BhblRvdGFsO1xufVxuXG5leHBvcnQgY2xhc3MgQVhEYXRlVGltZVJhbmdlIHtcbiAgcHJpdmF0ZSBfc3RhcnRUaW1lOiBBWERhdGVUaW1lO1xuICBwcml2YXRlIF9lbmRUaW1lOiBBWERhdGVUaW1lO1xuXG4gIHB1YmxpYyBnZXQgc3RhcnRUaW1lKCk6IEFYRGF0ZVRpbWUge1xuICAgIHJldHVybiB0aGlzLl9zdGFydFRpbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVuZFRpbWUoKTogQVhEYXRlVGltZSB7XG4gICAgcmV0dXJuIHRoaXMuX2VuZFRpbWU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzdGFydFRpbWU6IEFYRGF0ZVRpbWUsIGVuZFRpbWU6IEFYRGF0ZVRpbWUpIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBzdGFydFRpbWU7XG4gICAgdGhpcy5fZW5kVGltZSA9IGVuZFRpbWU7XG4gIH1cblxuICBkdXJhdGlvbigpOiBBWFRpbWVTcGFuIHtcbiAgICBjb25zdCByZXN1bHQ6IEFYVGltZVNwYW4gPSB7XG4gICAgICBtaWxpc2Vjb25kczogMCxcbiAgICAgIHNlY29uZHM6IDAsXG4gICAgICBtaW51dGVzOiAwLFxuICAgICAgaG91cnM6IDAsXG4gICAgICBkYXlzOiAwLFxuICAgICAgbW9udGhzOiAwLFxuICAgICAgeWVhcnM6IDAsXG4gICAgICB0b3RhbDoge1xuICAgICAgICBtaWxpc2Vjb25kczogMCxcbiAgICAgICAgc2Vjb25kczogMCxcbiAgICAgICAgbWludXRlczogMCxcbiAgICAgICAgaG91cnM6IDAsXG4gICAgICAgIGRheXM6IDAsXG4gICAgICAgIHdlZWtzOiAwLFxuICAgICAgICBtb250aHM6IDAsXG4gICAgICAgIHllYXJzOiAwLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3Qgb25lX3NlY29uZCA9IDEwMDA7XG4gICAgY29uc3Qgb25lX21pbiA9IG9uZV9zZWNvbmQgKiA2MDtcbiAgICBjb25zdCBvbmVfaG91ciA9IG9uZV9taW4gKiA2MDtcbiAgICBjb25zdCBvbmVfZGF5ID0gb25lX2hvdXIgKiAyNDtcbiAgICBjb25zdCBvbmVfd2VlayA9IG9uZV9kYXkgKiA3O1xuICAgIGNvbnN0IG9uZV95ZWFyID0gMzY1LjI1ICogb25lX2RheTtcbiAgICBjb25zdCBvbmVfbW9udGggPSBvbmVfeWVhciAvIDEyO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHRoaXMuX3N0YXJ0VGltZS5kYXRlLmdldFRpbWUoKTtcbiAgICBjb25zdCBlbmRUaW1lID0gdGhpcy5fZW5kVGltZS5kYXRlLmdldFRpbWUoKTtcbiAgICBjb25zdCBkaWZmID0gTWF0aC5hYnMoZW5kVGltZSAtIHN0YXJ0VGltZSk7XG4gICAgLy9cbiAgICByZXN1bHQudG90YWwubWlsaXNlY29uZHMgPSBkaWZmO1xuICAgIHJlc3VsdC50b3RhbC5zZWNvbmRzID0gTnVtYmVyKChkaWZmIC8gb25lX3NlY29uZCkudG9GaXhlZCgyKSk7XG4gICAgcmVzdWx0LnRvdGFsLm1pbnV0ZXMgPSBOdW1iZXIoKGRpZmYgLyBvbmVfbWluKS50b0ZpeGVkKDIpKTtcbiAgICByZXN1bHQudG90YWwuaG91cnMgPSBOdW1iZXIoKGRpZmYgLyBvbmVfaG91cikudG9GaXhlZCgyKSk7XG4gICAgcmVzdWx0LnRvdGFsLmRheXMgPSBOdW1iZXIoKGRpZmYgLyBvbmVfZGF5KS50b0ZpeGVkKDIpKTtcbiAgICByZXN1bHQudG90YWwud2Vla3MgPSBOdW1iZXIoKGRpZmYgLyBvbmVfd2VlaykudG9GaXhlZCgyKSk7XG4gICAgLy9cbiAgICAvLyBsZXQgbW9udGhzID0gKHRoaXMuZW5kVGltZS55ZWFyIC0gdGhpcy5zdGFydFRpbWUueWVhcikgKiAxMjtcbiAgICAvLyBtb250aHMgKz0gdGhpcy5lbmRUaW1lLm1vbnRoT2ZZZWFyIC0gdGhpcy5zdGFydFRpbWUubW9udGhPZlllYXIgKyAxO1xuICAgIC8vIGlmICh0aGlzLmVuZFRpbWUuZGF5T2ZZZWFyIDwgdGhpcy5zdGFydFRpbWUuZGF5T2ZZZWFyKSB7XG4gICAgLy8gICAgIG1vbnRocy0tO1xuICAgIC8vIH1cbiAgICAvLyByZXN1bHQudG90YWwubW9udGhzID0gTWF0aC5hYnMobW9udGhzKTtcbiAgICAvLyBUT0RPOiByZXZpZXdcbiAgICByZXN1bHQudG90YWwubW9udGhzID0gTnVtYmVyKChkaWZmIC8gb25lX21vbnRoKS50b0ZpeGVkKDIpKTtcbiAgICByZXN1bHQudG90YWwueWVhcnMgPSBOdW1iZXIoKGRpZmYgLyBvbmVfeWVhcikudG9GaXhlZCgyKSk7XG4gICAgLy9cbiAgICByZXN1bHQubWlsaXNlY29uZHMgPSByZXN1bHQudG90YWwubWlsaXNlY29uZHMgJSAxMDAwO1xuICAgIHJlc3VsdC5zZWNvbmRzID0gTnVtYmVyKChyZXN1bHQudG90YWwuc2Vjb25kcyAlIDYwKS50b0ZpeGVkKDApKTtcbiAgICByZXN1bHQubWludXRlcyA9IE51bWJlcigocmVzdWx0LnRvdGFsLm1pbnV0ZXMgJSA2MCkudG9GaXhlZCgwKSk7XG4gICAgcmVzdWx0LmhvdXJzID0gTnVtYmVyKChyZXN1bHQudG90YWwuaG91cnMgJSAyNCkudG9GaXhlZCgwKSk7XG4gICAgLy8gVE9ETzogcmV2aWV3XG4gICAgcmVzdWx0LmRheXMgPSBOdW1iZXIoKHJlc3VsdC50b3RhbC5kYXlzICUgMzAuNCkudG9GaXhlZCgwKSk7XG4gICAgcmVzdWx0Lm1vbnRocyA9IE51bWJlcigocmVzdWx0LnRvdGFsLm1vbnRocyAlIDEyKS50b0ZpeGVkKDApKTtcbiAgICByZXN1bHQueWVhcnMgPSBOdW1iZXIocmVzdWx0LnRvdGFsLnllYXJzLnRvRml4ZWQoMCkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBlbnVtdXJhdGUodW5pdDogVGltZVVuaXQgPSAnZGF5JywgYW1vdW50ID0gMSk6IEFYRGF0ZVRpbWVbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBBWERhdGVUaW1lW10gPSBbXTtcbiAgICBsZXQgaXRlbSA9IHRoaXMuX3N0YXJ0VGltZS5jbG9uZSgpO1xuICAgIHdoaWxlIChpdGVtLmNvbXBhcmUodGhpcy5fZW5kVGltZSwgdW5pdCkgPCAxKSB7XG4gICAgICBpZiAoIXJlc3VsdC5zb21lKChjKSA9PiBjLmVxdWFsKGl0ZW0sIHVuaXQpKSkge1xuICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICAgIGl0ZW0gPSBpdGVtLmFkZCh1bml0LCBhbW91bnQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4iXX0=
@@ -67,15 +67,15 @@ class AXDateTime {
67
67
  //
68
68
  A: () => (this.date.getHours() < 12 ? 'am' : 'pm'),
69
69
  a: () => (this.date.getHours() < 12 ? 'am' : 'pm'),
70
- 'date': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortDate')),
71
- 'shortDate': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortDate')),
72
- 'longDate': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'longDate')),
70
+ date: (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortDate')),
71
+ shortDate: (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortDate')),
72
+ longDate: (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'longDate')),
73
73
  //
74
- 'shortTime': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortTime')),
75
- 'time': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortTime')),
76
- 'longTime': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'longTime')),
74
+ shortTime: (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortTime')),
75
+ time: (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortTime')),
76
+ longTime: (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'longTime')),
77
77
  //
78
- 'datetime': (options) => this.format("date time", { locale: options.locale }),
78
+ datetime: (options) => this.format('date time', { locale: options.locale }),
79
79
  };
80
80
  this._calendar = calendar;
81
81
  this._date = value;
@@ -133,7 +133,7 @@ class AXDateTime {
133
133
  }
134
134
  format(format = this.getDateTimeFormatByLocale(navigator.language, 'shortDate'), options) {
135
135
  const effectiveOptions = defaults({}, options, {
136
- locale: navigator.language
136
+ locale: navigator.language,
137
137
  });
138
138
  const re = new RegExp(orderBy(Object.keys(this._formatKeys), (c) => c.length, ['desc']).join('|'), 'gi');
139
139
  return format.replace(re, (matched) => {
@@ -163,17 +163,18 @@ class AXDateTime {
163
163
  const parts = formatter.formatToParts(new Date());
164
164
  // Map parts to their respective format
165
165
  const formatMap = {
166
- 'day': 'dd',
167
- 'month': style == 'longDate' ? 'MMMM' : 'MM',
168
- 'year': 'yyyy',
169
- 'hour': 'HH',
170
- 'minute': 'mm',
171
- 'second': 'ss',
172
- 'weekday': 'E',
173
- 'literal': ''
166
+ day: 'dd',
167
+ month: style == 'longDate' ? 'MMMM' : 'MM',
168
+ year: 'yyyy',
169
+ hour: 'HH',
170
+ minute: 'mm',
171
+ second: 'ss',
172
+ weekday: 'E',
173
+ literal: '',
174
174
  };
175
175
  // Construct the date and/or time format string
176
- return parts.map(part => {
176
+ return parts
177
+ .map((part) => {
177
178
  if (part.type === 'literal') {
178
179
  // Use the literal part directly as separator
179
180
  return part.value;
@@ -181,7 +182,8 @@ class AXDateTime {
181
182
  else {
182
183
  return formatMap[part.type] || part.value;
183
184
  }
184
- }).join('');
185
+ })
186
+ .join('');
185
187
  }
186
188
  pad(n, width, z = '0') {
187
189
  n = n + '';
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-core-dateTime.mjs","sources":["../../../../libs/core/dateTime/src/lib/datetime.class.ts","../../../../libs/core/dateTime/src/lib/georgian.calendar.ts","../../../../libs/core/dateTime/src/lib/jalali.calendar.ts","../../../../libs/core/dateTime/src/lib/dateTime.config.ts","../../../../libs/core/dateTime/src/lib/holidays.loader.ts","../../../../libs/core/dateTime/src/lib/calendar.service.ts","../../../../libs/core/dateTime/src/lib/formatters/datetime-formatter.ts","../../../../libs/core/dateTime/src/lib/formatters/timeleft-formatter.ts","../../../../libs/core/dateTime/src/lib/datetime.pipe.ts","../../../../libs/core/dateTime/src/lib/datetime.module.ts","../../../../libs/core/dateTime/src/acorex-core-dateTime.ts"],"sourcesContent":["import { defaults, orderBy } from 'lodash-es';\nimport { translateSync } from '@acorex/core/translation';\n\nexport type TimeUnit = 'ms' | 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year' | 'week';\n\nexport interface AXDateValue {\n year: number;\n month: number;\n date: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n ms?: number;\n}\n\nexport interface AXDateTimeDisplayFormats {\n dateInput: string;\n timeInput: string;\n dateTimeInput: string;\n dateDisplay: string;\n timeDisplay: string;\n dateTimeDisplay: string;\n}\n\nexport type AXDateTimeUnitNames = { long: string; short: string; letter: string }[];\n\nexport type AXDateTimePart = {\n key: string;\n placeholder: string;\n placeholders: string[];\n typedValue?: string | null;\n default: number;\n enabled: boolean;\n realValue: () => string;\n};\n\nexport type AXDateTimeParts = {\n year: AXDateTimePart;\n month: AXDateTimePart;\n day: AXDateTimePart;\n hour: AXDateTimePart;\n minute: AXDateTimePart;\n second: AXDateTimePart;\n};\n\nexport interface AXCalendarConfig {\n weekdays: number[];\n weekend: number[];\n formats: AXDateTimeDisplayFormats;\n}\n\nexport abstract class AXCalendar {\n private _config: AXCalendarConfig;\n\n /**\n * @ignore\n */\n constructor(config: AXCalendarConfig) {\n this._config = config;\n }\n\n public get weekend(): number[] {\n return this._config.weekend;\n }\n\n public get formats(): AXDateTimeDisplayFormats {\n return this._config.formats;\n }\n\n\n public get weekdays(): number[] {\n return this._config.weekdays;\n }\n\n\n abstract name(): string;\n\n abstract dayOfMonth(date: Date): number;\n\n abstract dayOfYear(date: Date): number;\n\n abstract dayOfWeek(date: Date): number;\n\n abstract monthOfYear(date: Date): number;\n\n abstract weekOfYear(date: Date): number;\n\n abstract year(date: Date): number;\n\n abstract add(date: Date, unit: TimeUnit, amount: number): AXDateTime;\n\n abstract set(date: Date, unit: TimeUnit, value: number): AXDateTime;\n\n abstract startOf(date: Date, unit: TimeUnit): AXDateTime;\n\n abstract endOf(date: Date, unit: TimeUnit): AXDateTime;\n\n abstract create(value: AXDateValue): AXDateTime;\n\n abstract parse(value: string): AXDateTime;\n}\n\nexport class AXDateTime {\n private _date: Date;\n\n get date(): Date {\n return this._date;\n }\n\n private _calendar: AXCalendar;\n get calendar(): AXCalendar {\n return this._calendar;\n }\n\n constructor(value: Date, calendar: AXCalendar) {\n this._calendar = calendar;\n this._date = value;\n }\n\n clone(): AXDateTime {\n return new AXDateTime(this.date, this.calendar);\n }\n\n get dayOfMonth(): number {\n return this._calendar.dayOfMonth(this.date);\n }\n\n get dayOfYear(): number {\n return this._calendar.dayOfYear(this.date);\n }\n\n get dayOfWeek(): number {\n return this._calendar.dayOfWeek(this.date);\n }\n\n get hour(): number {\n return this._date.getHours();\n }\n\n get minute(): number {\n return this._date.getMinutes();\n }\n\n get second(): number {\n return this._date.getSeconds();\n }\n\n get year(): number {\n return this._calendar.year(this.date);\n }\n\n get monthOfYear(): number {\n return this._calendar.monthOfYear(this.date);\n }\n\n get weekOfYear(): number {\n return this._calendar.weekOfYear(this.date);\n }\n\n get month(): AXCalendarMonth {\n return new AXCalendarMonth(this);\n }\n\n add(unit: TimeUnit, amount: number): AXDateTime {\n return this._calendar.add(this.date, unit, amount);\n }\n\n set(unit: TimeUnit = 'day', value: number): AXDateTime {\n return this._calendar.set(this.date, unit, value);\n }\n\n duration(end: Date | AXDateTime): AXTimeSpan {\n const date = end instanceof AXDateTime ? end.date : (end as Date);\n const val = new AXDateTime(date, this.calendar);\n const range = new AXDateTimeRange(this, val);\n return range.duration();\n }\n\n startOf(unit: TimeUnit = 'day'): AXDateTime {\n return this._calendar.startOf(this.date, unit);\n }\n\n endOf(unit: TimeUnit = 'day'): AXDateTime {\n return this._calendar.endOf(this.date, unit);\n }\n\n //TODO: remove unused items\n private _formatKeys = {\n\n ss: () => this.pad(this.date.getSeconds(), 2),\n s: () => this.date.getSeconds().toString(),\n //\n dd: () => this.pad(this.calendar.dayOfMonth(this.date), 2),\n DD: () => this.pad(this.calendar.dayOfMonth(this.date), 2),\n d: () => this.calendar.dayOfMonth(this.date).toString(),\n //\n mm: () => this.pad(this.date.getMinutes(), 2),\n m: () => this.date.getMinutes().toString(),\n //\n MMMM: () => translateSync(`dateTime.months.${this.calendar.name()}.long.${this.calendar.monthOfYear(this.date) - 1}`),\n MMM: () => translateSync(`dateTime.months.${this.calendar.name()}.short.${this.calendar.monthOfYear(this.date) - 1}`),\n MM: () => this.pad(this.calendar.monthOfYear(this.date), 2),\n M: () => this.calendar.monthOfYear(this.date),\n //\n E: () => translateSync(`dateTime.weekdays.long.${this.calendar.weekdays[this.calendar.dayOfWeek(this.date) - 1]}`),\n DDD: () => translateSync(`dateTime.weekdays.short.${this.calendar.weekdays[this.calendar.dayOfWeek(this.date) - 1]}`),\n DDDD: () => this._formatKeys['E'](),\n //\n yyyy: () => this.pad(this.calendar.year(this.date), 4),\n YYYY: () => this.pad(this.calendar.year(this.date), 4),\n yy: () => this.pad(this.calendar.year(this.date), 4).substring(2),\n YY: () => this.pad(this.calendar.year(this.date), 4).substring(2),\n //\n HH: () => this.pad(this.date.getHours(), 2),\n H: () => this.date.getHours().toString(),\n //\n hh: () => this.pad(this.date.getHours() % 12 || 12, 2),\n h: () => (this.date.getHours() % 12 || 12).toString(),\n //\n A: () => (this.date.getHours() < 12 ? 'am' : 'pm'),\n a: () => (this.date.getHours() < 12 ? 'am' : 'pm'),\n 'date': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortDate')),\n 'shortDate': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortDate')),\n 'longDate': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'longDate')),\n //\n 'shortTime': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortTime')),\n 'time': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortTime')),\n 'longTime': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'longTime')),\n //\n 'datetime': (options) => this.format(\"date time\", { locale: options.locale }),\n };\n\n format(format: string = this.getDateTimeFormatByLocale(navigator.language, 'shortDate'), options?: { locale?: string }): string {\n const effectiveOptions = defaults({}, options, {\n locale: navigator.language\n });\n const re = new RegExp(orderBy(Object.keys(this._formatKeys), (c) => c.length, ['desc']).join('|'), 'gi');\n return format.replace(re, (matched) => {\n const f = this._formatKeys[matched]\n const r = f(effectiveOptions);\n return r;\n });\n }\n\n\n\n getDateTimeFormatByLocale(locale: string, style: 'shortDate' | 'longDate' | 'shortTime' | 'longTime'): string {\n let options: Intl.DateTimeFormatOptions = {};\n switch (style) {\n case 'shortDate': // Year, Month, Day\n options = { year: 'numeric', month: '2-digit', day: '2-digit' };\n break;\n case 'longDate': // Weekday, Month name, Day, Year\n options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };\n break;\n case 'shortTime': // Hour, Minute\n options = { hour: '2-digit', minute: '2-digit', hour12: false };\n break;\n case 'longTime': // Hour, Minute, Second\n options = { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false };\n break;\n }\n\n const formatter = new Intl.DateTimeFormat(locale, options);\n\n // Get parts of the date and/or time\n const parts = formatter.formatToParts(new Date());\n\n // Map parts to their respective format\n const formatMap: { [key: string]: string } = {\n 'day': 'dd',\n 'month': style == 'longDate' ? 'MMMM' : 'MM',\n 'year': 'yyyy',\n 'hour': 'HH',\n 'minute': 'mm',\n 'second': 'ss',\n 'weekday': 'E',\n 'literal': ''\n };\n\n // Construct the date and/or time format string\n return parts.map(part => {\n if (part.type === 'literal') {\n // Use the literal part directly as separator\n return part.value;\n } else {\n return formatMap[part.type] || part.value;\n }\n }).join('');\n }\n\n\n\n private pad(n, width, z = '0') {\n n = n + '';\n return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n }\n\n equal(value: Date | AXDateTime, unit: TimeUnit = 'day') {\n return this.compare(value, unit) == 0;\n }\n\n compare(value: Date | AXDateTime, unit: TimeUnit = 'day') {\n const date = value instanceof AXDateTime ? value.date : (value as Date);\n const val = new AXDateTime(date, this.calendar);\n const func = (v1: number, v2: number) => {\n if (v1 == v2) {\n return 0;\n } else if (v1 > v2) {\n return 1;\n } else {\n return -1;\n }\n };\n let p = 0;\n switch (unit) {\n case 'year':\n return func(this.year, val.year);\n case 'week':\n p = this.compare(val, 'year');\n return p == 0 ? func(this.weekOfYear, val.weekOfYear) : p;\n case 'month':\n p = this.compare(val, 'year');\n return p == 0 ? func(this.monthOfYear, val.monthOfYear) : p;\n case 'day':\n p = this.compare(val, 'year');\n return p == 0 ? func(this.dayOfYear, val.dayOfYear) : p;\n case 'hour':\n p = this.compare(val, 'day');\n return p == 0 ? func(this.hour, val.hour) : p;\n case 'minute':\n p = this.compare(val, 'hour');\n return p == 0 ? func(this.minute, val.minute) : p;\n case 'second':\n p = this.compare(val, 'minute');\n return p == 0 ? func(this.second, val.second) : p;\n default:\n return func(this.date.getTime(), val.date.getTime());\n }\n }\n}\n\nexport class AXCalendarMonth {\n private _range: AXDateTimeRange;\n public get range(): AXDateTimeRange {\n return this._range;\n }\n public set range(v: AXDateTimeRange) {\n this._range = v;\n }\n\n public get totalDays(): number {\n return this.range.endTime.dayOfMonth;\n }\n\n constructor(date: AXDateTime) {\n this.index = date.date.getMonth();\n this.name = date.format('MMMM');\n this.range = new AXDateTimeRange(\n new AXDateTime(date.startOf('month').date, date.calendar),\n new AXDateTime(date.endOf('month').date, date.calendar),\n );\n }\n\n private readonly index: number;\n private readonly name: string;\n}\n\nexport interface AXTimeSpanTotal {\n miliseconds: number;\n seconds: number;\n minutes: number;\n hours: number;\n days: number;\n weeks: number;\n months: number;\n years: number;\n}\n\nexport interface AXTimeSpan {\n miliseconds: number;\n seconds: number;\n minutes: number;\n hours: number;\n days: number;\n months: number;\n years: number;\n total: AXTimeSpanTotal;\n}\n\nexport class AXDateTimeRange {\n private _startTime: AXDateTime;\n private _endTime: AXDateTime;\n\n public get startTime(): AXDateTime {\n return this._startTime;\n }\n\n public get endTime(): AXDateTime {\n return this._endTime;\n }\n\n constructor(startTime: AXDateTime, endTime: AXDateTime) {\n this._startTime = startTime;\n this._endTime = endTime;\n }\n\n duration(): AXTimeSpan {\n const result: AXTimeSpan = {\n miliseconds: 0,\n seconds: 0,\n minutes: 0,\n hours: 0,\n days: 0,\n months: 0,\n years: 0,\n total: {\n miliseconds: 0,\n seconds: 0,\n minutes: 0,\n hours: 0,\n days: 0,\n weeks: 0,\n months: 0,\n years: 0,\n },\n };\n\n const one_second = 1000;\n const one_min = one_second * 60;\n const one_hour = one_min * 60;\n const one_day = one_hour * 24;\n const one_week = one_day * 7;\n const one_year = 365.25 * one_day;\n const one_month = one_year / 12;\n const startTime = this._startTime.date.getTime();\n const endTime = this._endTime.date.getTime();\n const diff = Math.abs(endTime - startTime);\n //\n result.total.miliseconds = diff;\n result.total.seconds = Number((diff / one_second).toFixed(2));\n result.total.minutes = Number((diff / one_min).toFixed(2));\n result.total.hours = Number((diff / one_hour).toFixed(2));\n result.total.days = Number((diff / one_day).toFixed(2));\n result.total.weeks = Number((diff / one_week).toFixed(2));\n //\n // let months = (this.endTime.year - this.startTime.year) * 12;\n // months += this.endTime.monthOfYear - this.startTime.monthOfYear + 1;\n // if (this.endTime.dayOfYear < this.startTime.dayOfYear) {\n // months--;\n // }\n // result.total.months = Math.abs(months);\n // TODO: review\n result.total.months = Number((diff / one_month).toFixed(2));\n result.total.years = Number((diff / one_year).toFixed(2));\n //\n result.miliseconds = result.total.miliseconds % 1000;\n result.seconds = Number((result.total.seconds % 60).toFixed(0));\n result.minutes = Number((result.total.minutes % 60).toFixed(0));\n result.hours = Number((result.total.hours % 24).toFixed(0));\n // TODO: review\n result.days = Number((result.total.days % 30.4).toFixed(0));\n result.months = Number((result.total.months % 12).toFixed(0));\n result.years = Number(result.total.years.toFixed(0));\n return result;\n }\n\n enumurate(unit: TimeUnit = 'day', amount = 1): AXDateTime[] {\n const result: AXDateTime[] = [];\n let item = this._startTime.clone();\n while (item.compare(this._endTime, unit) < 1) {\n if (!result.some((c) => c.equal(item, unit))) {\n result.push(item);\n }\n item = item.add(unit, amount);\n }\n return result;\n }\n\n // includes(value: AXDateTime, unit: TimeUnit = 'day'): boolean {\n // // TODO: ??\n // return true;\n // }\n\n // getViewCompaire(view) {\n // switch (view) {\n // case 'day':\n // return 'YMD';\n // case 'month':\n // return 'YM';\n // case 'year':\n // return 'Y';\n // }\n // }\n}\n","import { AXCalendar, AXCalendarConfig, AXDateTime, AXDateValue, TimeUnit } from './datetime.class';\n\nexport class GeorgianCalendar extends AXCalendar {\n /**\n * @ignore\n */\n constructor(config: AXCalendarConfig) {\n super(config);\n }\n\n create(value: AXDateValue): AXDateTime {\n return new AXDateTime(\n new Date(\n value.year,\n value.month - 1,\n value.date,\n value.hours || 0,\n value.minutes || 0,\n value.seconds || 0,\n value.ms || 0,\n ),\n this,\n );\n }\n\n name(): string {\n return 'georgian';\n }\n\n dayOfMonth(date: Date): number {\n return date.getDate();\n }\n\n dayOfYear(date: Date): number {\n let result = 0;\n let m = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n if (this.isLeap(date)) {\n m[1] = 29;\n }\n for (let i = 0; i < date.getMonth(); i++) {\n result = result + m[i];\n }\n result += date.getDate();\n return result;\n }\n\n dayOfWeek(date: Date): number {\n return date.getDay() + 1;\n }\n\n weekOfYear(date: Date): number {\n const firstDay = new AXDateTime(date, this).startOf('year');\n return Math.ceil(\n ((date.getTime() - firstDay.date.getTime()) / 86400000 + firstDay.date.getDay() + 1) / 7,\n );\n }\n\n year(date: Date): number {\n return date.getFullYear();\n }\n\n monthOfYear(date: Date): number {\n return date.getMonth() + 1;\n }\n\n add(date: Date, unit: TimeUnit, amount: number): AXDateTime {\n let value = date.valueOf();\n switch (unit) {\n case 'second':\n value += 1000 * amount;\n break;\n case 'minute':\n value += 60000 * amount;\n break;\n case 'hour':\n value += 3600000 * amount;\n break;\n case 'month': {\n const v = new Date(value);\n\n // Calculate the new year and month considering the amount\n let newYear = v.getFullYear();\n let newMonth = v.getMonth() + amount;\n\n // Adjust for year overflow or underflow\n while (newMonth > 11) {\n newMonth -= 12;\n newYear++;\n }\n while (newMonth < 0) {\n newMonth += 12;\n newYear--;\n }\n\n // Set the date to the first of the month to prevent overflow\n v.setDate(1);\n v.setFullYear(newYear);\n v.setMonth(newMonth);\n\n // Get the last day of the new month\n const lastDayOfMonth = new Date(newYear, newMonth + 1, 0).getDate();\n\n // Set the date to either the original day or the last day of the new month, whichever is smaller\n const originalDay = date.getDate();\n v.setDate(Math.min(originalDay, lastDayOfMonth));\n\n value = v.valueOf();\n break;\n }\n case 'week':\n value += 7 * 86400000 * amount;\n break;\n case 'year': {\n const newDate = new Date(value);\n newDate.setFullYear(newDate.getFullYear() + amount);\n // Handling for leap years: if the original date is February 29th, and the new year is not a leap year,\n // set the date to February 28th.\n if (date.getMonth() === 1 && date.getDate() === 29 && newDate.getMonth() !== 1) {\n newDate.setMonth(1);\n newDate.setDate(28);\n }\n value = newDate.valueOf();\n break;\n }\n case 'day':\n default:\n value += 86400000 * amount;\n }\n return new AXDateTime(new Date(value), this);\n }\n\n set(date: Date, unit: TimeUnit, value: number): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), value, clone.getMilliseconds());\n break;\n case 'minute':\n clone.setHours(clone.getHours(), value, clone.getSeconds(), clone.getMilliseconds());\n break;\n case 'hour':\n clone.setHours(value, clone.getMinutes(), clone.getSeconds(), clone.getMilliseconds());\n break;\n default:\n case 'day':\n clone.setDate(value);\n break;\n case 'week':\n break;\n case 'month':\n clone.setMonth(Math.max(0, value - 1));\n break;\n case 'year':\n clone.setFullYear(value);\n break;\n }\n return new AXDateTime(clone, this);\n }\n\n startOf(date: Date, unit: TimeUnit): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 0);\n return new AXDateTime(clone, this);\n case 'minute':\n clone.setHours(clone.getHours(), clone.getMinutes(), 0, 0);\n return new AXDateTime(clone, this);\n case 'hour':\n clone.setHours(clone.getHours(), 0, 0, 0);\n return new AXDateTime(clone, this);\n default:\n case 'day':\n clone.setHours(0, 0, 0, 0);\n return new AXDateTime(clone, this);\n case 'week': {\n const start = 1; // Week starts on Monday\n const day = clone.getDay();\n const diff = clone.getDate() - day + (day == 0 ? -6 : start - day);\n clone.setDate(diff);\n clone.setHours(0, 0, 0, 0);\n return new AXDateTime(clone, this);\n }\n case 'month':\n clone.setDate(1);\n return new AXDateTime(clone, this).startOf('day');\n case 'year':\n clone.setMonth(0);\n clone.setDate(1);\n return new AXDateTime(clone, this).startOf('day');\n }\n }\n\n endOf(date: Date, unit: TimeUnit): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);\n return new AXDateTime(clone, this);\n case 'minute':\n clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);\n return new AXDateTime(clone, this);\n case 'hour':\n clone.setHours(clone.getHours(), 59, 59, 999);\n return new AXDateTime(clone, this);\n default:\n case 'day':\n clone.setHours(23, 59, 59, 999);\n return new AXDateTime(clone, this);\n case 'week':\n return this.startOf(date, 'week').add('day', 6).endOf('day');\n case 'month': {\n const dateObj = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n dateObj.setHours(23, 59, 59, 999);\n return new AXDateTime(dateObj, this);\n }\n case 'year':\n clone.setMonth(11);\n return new AXDateTime(clone, this).endOf('month');\n }\n }\n\n isLeap(date: Date) {\n let leapYear = new Date(date.getFullYear(), 1, 29);\n return leapYear.getDate() == 29;\n }\n\n parse(value: string): AXDateTime {\n return new AXDateTime(new Date(value), this);\n }\n}\n","import { AXCalendar, AXCalendarConfig, AXDateTime, AXDateValue, TimeUnit } from './datetime.class';\n\nexport class JalaliCalendar extends AXCalendar {\n /**\n * @ignore\n */\n constructor(config: AXCalendarConfig) {\n super(config);\n }\n\n /*\n Jalaali years starting the 33-year rule.\n*/\n private breaks = [\n -61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456,\n 3178,\n ];\n\n create(value: AXDateValue): AXDateTime {\n const a = this.toGregorian(value.year, value.month, value.date);\n return new AXDateTime(\n new Date(\n a.getFullYear(),\n a.getMonth(),\n a.getDate(),\n value.hours || 0,\n value.minutes || 0,\n value.seconds || 0,\n value.ms || 0,\n ),\n this,\n );\n }\n\n name(): string {\n return 'jalali';\n }\n\n dayOfMonth(date: Date): number {\n return this.toJalaali(date).day;\n }\n\n dayOfYear(date: Date): number {\n const j = this.toJalaali(date);\n return (j.month <= 6 ? (j.month - 1) * 31 : 6 * 31 + (j.month - 7) * 30) + j.day;\n }\n\n dayOfWeek(date: Date): number {\n return date.getDay() == 6 ? 1 : date.getDay() + 2;\n }\n\n weekOfYear(date: Date): number {\n //TODO : apply jalali\n const firstDay = new AXDateTime(date, this).startOf('year');\n return Math.ceil(\n ((date.getTime() - firstDay.date.getTime()) / 86400000 + firstDay.date.getDay() + 1) / 7,\n );\n }\n\n year(date: Date): number {\n return this.toJalaali(date).year;\n }\n\n monthOfYear(date: Date): number {\n return this.toJalaali(date).month;\n }\n\n add(date: Date, unit: TimeUnit, amount: number): AXDateTime {\n let value = date.valueOf();\n switch (unit) {\n case 'second':\n value += 1000 * amount;\n break;\n case 'minute':\n value += 60000 * amount;\n break;\n case 'hour':\n value += 3600000 * amount;\n break;\n case 'month': {\n // const v = new Date(value);\n // let jd = this.dayOfMonth(date);\n // let jm = this.monthOfYear(date);\n // let jy = this.year(date);\n // const nm = jm + amount;\n // const ny = nm % 12 ? Math.floor(nm / 12) : 0;\n // jy += ny;\n // jm = nm - ny * 12;\n // const vv = this.toGregorian(jy, jm, jd);\n // v.setFullYear(vv.getFullYear());\n // v.setMonth(vv.getMonth());\n // v.setDate(vv.getDate());\n // value = v.valueOf();\n // break;\n let jd = this.dayOfMonth(date);\n let jm = this.monthOfYear(date);\n let jy = this.year(date);\n\n let newMonth = jm + amount;\n let yearsToAdd = Math.floor(newMonth / 12);\n newMonth = newMonth % 12;\n if (newMonth <= 0) {\n newMonth += 12;\n yearsToAdd--;\n }\n\n jy += yearsToAdd;\n\n // Temporary set to first of the month to prevent rollover\n const tempDate = this.toGregorian(jy, newMonth, 1);\n const gregorianDate = new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate());\n\n // Adjust the day to either the original day or the last day of the new month, whichever is smaller\n const lastDayOfNewMonth = this.jalaaliMonthLength(jy, newMonth); // Implement this method to find the last day in a Jalali month\n jd = Math.min(jd, lastDayOfNewMonth);\n\n const finalDate = this.toGregorian(jy, newMonth, jd);\n gregorianDate.setFullYear(finalDate.getFullYear());\n gregorianDate.setMonth(finalDate.getMonth());\n gregorianDate.setDate(finalDate.getDate());\n\n value = gregorianDate.valueOf();\n break;\n }\n case 'week':\n value += 7 * 86400000 * amount;\n break;\n case 'year': {\n const v = new Date(value);\n let jd = this.dayOfMonth(date);\n let jm = this.monthOfYear(date);\n let jy = this.year(date);\n const vv = this.toGregorian(jy + amount, jm, jd);\n v.setFullYear(vv.getFullYear());\n v.setMonth(vv.getMonth());\n v.setDate(vv.getDate());\n value = v.valueOf();\n break;\n }\n case 'day':\n default:\n value += 86400000 * amount;\n }\n return new AXDateTime(new Date(value), this);\n }\n\n set(date: Date, unit: TimeUnit, value: number): AXDateTime {\n const clone = new Date(date.valueOf());\n const jDate = this.toJalaali(clone);\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), value, clone.getMilliseconds());\n break;\n case 'minute':\n clone.setHours(clone.getHours(), value, clone.getSeconds(), clone.getMilliseconds());\n break;\n case 'hour':\n clone.setHours(value, clone.getMinutes(), clone.getSeconds(), clone.getMilliseconds());\n break;\n default:\n case 'day': {\n const gDate = this.toGregorian(jDate.year, jDate.month, value);\n clone.setDate(gDate.getDate());\n break;\n }\n case 'week':\n break;\n case 'month': {\n const gDate2 = this.toGregorian(jDate.year, value, jDate.day);\n clone.setMonth(gDate2.getMonth());\n break;\n }\n case 'year': {\n const gDate3 = this.toGregorian(value, jDate.month, jDate.day);\n clone.setFullYear(gDate3.getFullYear());\n break;\n }\n }\n return new AXDateTime(clone, this);\n }\n\n startOf(date: Date, unit: TimeUnit): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 0);\n return new AXDateTime(clone, this);\n case 'minute':\n clone.setHours(clone.getHours(), clone.getMinutes(), 0, 0);\n return new AXDateTime(clone, this);\n case 'hour':\n clone.setHours(clone.getHours(), 0, 0, 0);\n return new AXDateTime(clone, this);\n default:\n case 'day':\n clone.setHours(0, 0, 0, 0);\n return new AXDateTime(clone, this);\n case 'week':\n return new AXDateTime(clone, this).add('day', -this.dayOfWeek(clone) + 1).startOf('day');\n case 'month': {\n const jy = this.year(date);\n const jm = this.monthOfYear(date);\n const gDate = this.toGregorian(jy, jm, 1);\n return new AXDateTime(gDate, this).startOf('day');\n }\n case 'year': {\n const jy = this.year(date);\n const gDate = this.toGregorian(jy, 1, 1);\n return new AXDateTime(gDate, this).startOf('day');\n }\n }\n }\n\n endOf(date: Date, unit: TimeUnit): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);\n return new AXDateTime(clone, this);\n case 'minute':\n clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);\n return new AXDateTime(clone, this);\n case 'hour':\n clone.setHours(clone.getHours(), 59, 59, 999);\n return new AXDateTime(clone, this);\n default:\n case 'day':\n clone.setHours(23, 59, 59, 999);\n return new AXDateTime(clone, this);\n case 'week': {\n return this.startOf(date, 'week').add('day', 6).endOf('day');\n }\n case 'month': {\n const jy = this.year(date);\n const jm = this.monthOfYear(date);\n const jd = this.jalaaliMonthLength(jy, jm);\n const gDate = this.toGregorian(jy, jm, jd);\n return new AXDateTime(gDate, this).endOf('day');\n }\n case 'year': {\n const jy = this.year(date);\n const gDate = this.toGregorian(jy, 12, this.jalaaliMonthLength(jy, 12));\n return new AXDateTime(gDate, this).endOf('day');\n }\n }\n }\n\n parse(value: string): AXDateTime {\n const [y, M, d, h, m, s, ms] = value.split(/[^a-zA-Z0-9]+/gi);\n const date = this.toGregorian(Number(y) ?? 0, Number(M) ?? 1, Number(d) ?? 1);\n if (h != null) date.setHours(Number(h));\n if (m != null) date.setMinutes(Number(m));\n if (s != null) date.setSeconds(Number(s));\n if (ms != null) date.setMilliseconds(Number(d));\n return new AXDateTime(date, this);\n }\n\n /*\n Converts a Gregorian date to Jalaali.\n*/\n toJalaali(date: Date): { year: number; month: number; day: number } {\n const gd = date.getDate();\n const gm = date.getMonth() + 1;\n const gy = date.getFullYear();\n const r = this.d2j(this.g2d(gy, gm, gd));\n return {\n year: r.jy,\n month: r.jm,\n day: r.jd,\n };\n }\n\n /*\n Converts a Jalaali date to Gregorian.\n */\n toGregorian(jy, jm, jd): Date {\n const g = this.d2g(this.j2d(jy, jm, jd));\n return new Date(g.gy, g.gm - 1, g.gd);\n }\n\n /*\n Checks whether a Jalaali date is valid or not.\n */\n isValidJalaaliDate(jy, jm, jd) {\n return jy >= -61 && jy <= 3177 && jm >= 1 && jm <= 12 && jd >= 1 && jd <= this.jalaaliMonthLength(jy, jm);\n }\n\n /*\n Is this a leap year or not?\n */\n isLeapJalaaliYear(jy) {\n return this.jalCalLeap(jy) === 0;\n }\n\n /*\n Number of days in a given month in a Jalaali year.\n */\n jalaaliMonthLength(jy, jm) {\n if (jm <= 6) return 31;\n if (jm <= 11) return 30;\n if (this.isLeapJalaaliYear(jy)) return 30;\n return 29;\n }\n\n /*\n This determines if the Jalaali (Persian) year is\n leap (366-day long) or is the common year (365 days)\n \n @param jy Jalaali calendar year (-61 to 3177)\n @returns number of years since the last leap year (0 to 4)\n */\n private jalCalLeap(jy: number) {\n let bl = this.breaks.length,\n jp = this.breaks[0],\n jm,\n jump,\n leap,\n n,\n i;\n\n if (jy < jp || jy >= this.breaks[bl - 1]) throw new Error('Invalid Jalaali year ' + jy);\n\n for (i = 1; i < bl; i += 1) {\n jm = this.breaks[i];\n jump = jm - jp;\n if (jy < jm) break;\n jp = jm;\n }\n n = jy - jp;\n\n if (jump - n < 6) n = n - jump + this.div(jump + 4, 33) * 33;\n leap = this.mod(this.mod(n + 1, 33) - 1, 4);\n if (leap === -1) {\n leap = 4;\n }\n\n return leap;\n }\n\n private jalCal(jy: number, withoutLeap: boolean) {\n let bl = this.breaks.length,\n gy = jy + 621,\n leapJ = -14,\n jp = this.breaks[0],\n jm,\n jump,\n leap,\n leapG,\n march,\n n,\n i;\n\n if (jy < jp || jy >= this.breaks[bl - 1]) throw new Error('Invalid Jalaali year ' + jy);\n\n // Find the limiting years for the Jalaali year jy.\n for (i = 1; i < bl; i += 1) {\n jm = this.breaks[i];\n jump = jm - jp;\n if (jy < jm) break;\n leapJ = leapJ + this.div(jump, 33) * 8 + this.div(this.mod(jump, 33), 4);\n jp = jm;\n }\n n = jy - jp;\n\n // Find the number of leap years from AD 621 to the beginning\n // of the current Jalaali year in the Persian calendar.\n leapJ = leapJ + this.div(n, 33) * 8 + this.div(this.mod(n, 33) + 3, 4);\n if (this.mod(jump, 33) === 4 && jump - n === 4) leapJ += 1;\n\n // And the same in the Gregorian calendar (until the year gy).\n leapG = this.div(gy, 4) - this.div((this.div(gy, 100) + 1) * 3, 4) - 150;\n\n // Determine the Gregorian date of Farvardin the 1st.\n march = 20 + leapJ - leapG;\n\n // return with gy and march when we don't need leap\n if (withoutLeap) return { gy: gy, march: march };\n\n // Find how many years have passed since the last leap year.\n if (jump - n < 6) n = n - jump + this.div(jump + 4, 33) * 33;\n leap = this.mod(this.mod(n + 1, 33) - 1, 4);\n if (leap === -1) {\n leap = 4;\n }\n\n return {\n leap: leap,\n gy: gy,\n march: march,\n };\n }\n\n private j2d(jy, jm, jd): number {\n let r = this.jalCal(jy, true);\n return this.g2d(r.gy, 3, r.march) + (jm - 1) * 31 - this.div(jm, 7) * (jm - 7) + jd - 1;\n }\n\n private d2j(jdn: number) {\n let gy = this.d2g(jdn).gy, // Calculate Gregorian year (gy).\n jy = gy - 621,\n r = this.jalCal(jy, false),\n jdn1f = this.g2d(gy, 3, r.march),\n jd,\n jm,\n k;\n\n // Find number of days that passed since 1 Farvardin.\n k = jdn - jdn1f;\n if (k >= 0) {\n if (k <= 185) {\n // The first 6 months.\n jm = 1 + this.div(k, 31);\n jd = this.mod(k, 31) + 1;\n return {\n jy: jy,\n jm: jm,\n jd: jd,\n };\n } else {\n // The remaining months.\n k -= 186;\n }\n } else {\n // Previous Jalaali year.\n jy -= 1;\n k += 179;\n if (r.leap === 1) k += 1;\n }\n jm = 7 + this.div(k, 30);\n jd = this.mod(k, 30) + 1;\n return {\n jy: jy,\n jm: jm,\n jd: jd,\n };\n }\n\n private g2d(gy: number, gm: number, gd: number): number {\n let d =\n this.div((gy + this.div(gm - 8, 6) + 100100) * 1461, 4) +\n this.div(153 * this.mod(gm + 9, 12) + 2, 5) +\n gd -\n 34840408;\n d = d - this.div(this.div(gy + 100100 + this.div(gm - 8, 6), 100) * 3, 4) + 752;\n return d;\n }\n\n private d2g(jdn: number) {\n let j, i, gd, gm, gy;\n j = 4 * jdn + 139361631;\n j = j + this.div(this.div(4 * jdn + 183187720, 146097) * 3, 4) * 4 - 3908;\n i = this.div(this.mod(j, 1461), 4) * 5 + 308;\n gd = this.div(this.mod(i, 153), 5) + 1;\n gm = this.mod(this.div(i, 153), 12) + 1;\n gy = this.div(j, 1461) - 100100 + this.div(8 - gm, 6);\n return {\n gy: gy,\n gm: gm,\n gd: gd,\n };\n }\n\n private jalaaliWeek(jy: number, jm: number, jd: number): { saturday: any; friday: any } {\n let dayOfWeek = this.jalaaliToDateObject(jy, jm, jd, 0, 0, 0, 0).getDay();\n\n let startDayDifference = dayOfWeek == 6 ? 0 : -(dayOfWeek + 1);\n let endDayDifference = 6 + startDayDifference;\n\n return {\n saturday: this.d2j(this.j2d(jy, jm, jd + startDayDifference)),\n friday: this.d2j(this.j2d(jy, jm, jd + endDayDifference)),\n };\n }\n\n private jalaaliToDateObject(\n jy: number,\n jm: number,\n jd: number,\n h: number = 0,\n m: number = 0,\n s: number = 0,\n ms: number = 0,\n ) {\n let gregorianCalenderDate = this.toGregorian(jy, jm, jd);\n\n return new Date(\n gregorianCalenderDate.getFullYear(),\n gregorianCalenderDate.getMonth() - 1,\n gregorianCalenderDate.getDate(),\n h || 0,\n m || 0,\n s || 0,\n ms || 0,\n );\n }\n\n /*\n Utility helper functions.\n */\n\n private div(a: number, b: number) {\n return ~~(a / b);\n }\n\n private mod(a: number, b: number) {\n return a - ~~(a / b) * b;\n }\n}\n","import { AX_GLOBAL_CONFIG } from '@acorex/core/config';\nimport { InjectionToken, inject } from '@angular/core';\nimport { set } from 'lodash-es';\nimport { AXCalendar } from './datetime.class';\nimport { GeorgianCalendar } from './georgian.calendar';\nimport { JalaliCalendar } from './jalali.calendar';\n\nexport interface AXDateTimeConfig {\n calendar: string;\n calendars: {\n [key: string]: AXCalendar;\n };\n}\n\nexport const AX_DATETIME_CONFIG = new InjectionToken<AXDateTimeConfig>('AX_DATETIME_CONFIG', {\n providedIn: 'root',\n factory: () => {\n const global = inject(AX_GLOBAL_CONFIG);\n set(global, 'dateTime', AX_DATETIME_CONFIG);\n return AXDateTimeDefaultConfig;\n },\n});\n\nexport const AXDateTimeDefaultConfig: AXDateTimeConfig = {\n calendar: 'georgian',\n calendars: {\n georgian: new GeorgianCalendar({\n weekdays: [0, 1, 2, 3, 4, 5, 6],\n weekend: [5, 6],\n formats: {\n dateInput: 'yyyy/MM/dd',\n timeInput: 'HH:mm',\n dateTimeInput: 'yyyy/MM/dd HH:mm',\n dateDisplay: 'DDDD, d MMM yyyy',\n timeDisplay: 'HH:mm',\n dateTimeDisplay: 'DDDD, d MMM yyyy HH:mm',\n },\n }),\n jalali: new JalaliCalendar({\n weekdays: [6, 0, 1, 2, 3, 4, 5],\n weekend: [6],\n formats: {\n dateInput: 'yyyy/MM/dd',\n timeInput: 'HH:mm',\n dateTimeInput: 'yyyy/MM/dd HH:mm',\n dateDisplay: 'DDDD, d MMM yyyy',\n timeDisplay: 'HH:mm',\n dateTimeDisplay: 'DDDD, d MMM yyyy HH:mm',\n },\n }),\n },\n};\n\nexport type PartialDateTimeConfig = Partial<AXDateTimeConfig>;\n\nexport function dateTimeConfig(config: PartialDateTimeConfig = {}): AXDateTimeConfig {\n const result = {\n ...AXDateTimeDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface AXHolidayDate {\n date: Date;\n title: string;\n description?: string;\n [key: string]: unknown;\n}\n\nexport interface AXHolidaysLoaderOptions {\n calendar?: string;\n range?: { start: Date; end: Date };\n}\n\nexport interface AXHolidaysLoader {\n getHolidays(options?: AXHolidaysLoaderOptions): Promise<AXHolidayDate[]>;\n}\n\nexport class AXHolidaysLoaderDefault implements AXHolidaysLoader {\n getHolidays(options?: AXHolidaysLoaderOptions | undefined): Promise<AXHolidayDate[]> {\n return Promise.resolve([]);\n }\n}\n\nexport const AX_DATETIME_HOLIDAYS_LOADER = new InjectionToken<AXHolidaysLoader>(\n 'AX_DATETIME_HOLIDAYS_LOADER',\n {\n providedIn: 'root',\n factory: () => {\n return new AXHolidaysLoaderDefault();\n },\n },\n);\n","import { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { AXDateTimeConfig, AX_DATETIME_CONFIG } from './dateTime.config';\nimport { AXCalendar, AXDateTime, AXDateValue } from './datetime.class';\nimport { AXHolidayDate, AXHolidaysLoaderOptions, AX_DATETIME_HOLIDAYS_LOADER } from './holidays.loader';\nimport { AXEventService, AXEventTypes } from '@acorex/core/events';\n\n@Injectable({ providedIn: 'root' })\nexport class AXCalendarService {\n private config: AXDateTimeConfig = inject(AX_DATETIME_CONFIG);\n private _holidaysLoader = inject(AX_DATETIME_HOLIDAYS_LOADER);\n private eventService = inject(AXEventService);\n\n\n public get calendar(): AXCalendar {\n return this.getActiveCalendar();\n }\n\n private activeCalendar = new BehaviorSubject<AXCalendar>(this.getDefaultCalendar());\n calendarChanges$ = this.activeCalendar.asObservable();\n\n public getDefaultCalendar(): AXCalendar {\n return this.config.calendars[this.config.calendar];\n }\n\n public getActiveCalendar(): AXCalendar {\n return this.activeCalendar.getValue();\n }\n\n public setActiveCalendar(name: string): void {\n if (name != this.calendar.name()) {\n const calendar = this.resolveCalendar(name);\n this.activeCalendar.next(calendar);\n this.eventService.emitEvent({ type: AXEventTypes.AXCalendarChanged, payload: this.getActiveCalendar() });\n }\n }\n\n public onHolidaysChanged: Subject<AXHolidayDate[]> = new Subject<AXHolidayDate[]>();\n private _holidays: AXHolidayDate[] = [];\n public get holidays(): AXHolidayDate[] {\n return this._holidays;\n }\n\n constructor() {\n this.loadHolidays();\n }\n\n public loadHolidays(options?: AXHolidaysLoaderOptions) {\n return this._holidaysLoader.getHolidays(options).then((value) => {\n this._holidays = value;\n this.onHolidaysChanged.next(this._holidays);\n });\n }\n\n public create(value: AXDateValue, calendarName?: string): AXDateTime;\n public create(value: Date, calendarName?: string): AXDateTime;\n public create(value: AXDateValue | Date, calendarName?: string): AXDateTime {\n const calendar = calendarName ? this.resolveCalendar(calendarName) : this.calendar;\n if (value instanceof Date) {\n return new AXDateTime(value, calendar);\n } else if (value?.year && value?.month) {\n return calendar.create(value as AXDateValue);\n }\n return this.now();\n }\n\n public now(calendarName?: string): AXDateTime {\n const calendar = calendarName ? this.resolveCalendar(calendarName) : this.calendar;\n return new AXDateTime(new Date(), calendar);\n }\n\n public resolveCalendar(name: string): AXCalendar {\n const c = this.config.calendars[name];\n if (!c) {\n console.error(`\"${name}\" is not a valid calendar name!`);\n return this.calendar;\n }\n return c;\n }\n\n public convert(value: Date | AXDateTime | string, calendarName?: string): AXDateTime {\n const isISOString = (str) => {\n if (!/\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(.\\d{3}Z)?/.test(str)) return false;\n const d = new Date(str);\n return d instanceof Date && !isNaN(d.getTime()); // valid date\n };\n //\n const calendar = calendarName ? this.resolveCalendar(calendarName) : this.calendar;\n if (typeof value === 'string') {\n if (isISOString(value)) return new AXDateTime(new Date(value), calendar);\n else return calendar.parse(value);\n }\n const date = value instanceof AXDateTime ? value.date : (value as Date);\n return new AXDateTime(date, calendar);\n }\n}\n","import { AXFormatOptions, AXFormatter } from '@acorex/core/format';\nimport { Injectable, inject } from '@angular/core';\nimport { AXCalendarService } from '../calendar.service';\n\n\nexport interface AXDateTimeFormatterOptions extends AXFormatOptions {\n format?: string;\n calendar?: string;\n locale?: string;\n}\n\ndeclare module '@acorex/core/format' {\n interface AXFormatOptionsMap {\n 'datetime': AXDateTimeFormatterOptions;\n }\n}\n\n\n@Injectable()\nexport class AXDateTimeFormatter implements AXFormatter {\n private calendarService = inject(AXCalendarService);\n\n get name(): string {\n return 'datetime';\n }\n\n format(value: unknown, options?: AXDateTimeFormatterOptions | string): string {\n const effectiveOptions = typeof options == 'object' ? {\n format: options.format ?? 'date',\n locale: options.locale,\n calendar: options.calendar ?? this.calendarService.calendar.name()\n } : {\n format: options,\n calendar: this.calendarService.calendar.name()\n }\n\n return this.calendarService\n .create(value as Date, effectiveOptions.calendar as string)\n .format(effectiveOptions.format, { locale: effectiveOptions.locale });\n }\n}\n\n\n","import { Injectable } from \"@angular/core\";\nimport { isNil } from \"lodash-es\";\nimport { AXFormatOptions, AXFormatter } from '@acorex/core/format';\n\nexport interface AXTimeLeftFormatterOptions extends AXFormatOptions {\n format: string;\n}\n\ndeclare module '@acorex/core/format' {\n interface AXFormatOptionsMap {\n 'timeleft': AXTimeLeftFormatterOptions;\n }\n}\n\n\n@Injectable()\nexport class AXTimeLeftFormatter implements AXFormatter {\n\n get name(): string {\n return 'timeleft';\n }\n\n format(value: number | string, options?: AXTimeLeftFormatterOptions): string {\n const milliseconds = Number(value)\n if (milliseconds === null || isNaN(milliseconds)) {\n return \"Calculating...\";\n }\n const durationInSeconds = Math.round(milliseconds / 1000);\n let format = options?.format;\n // Determine the best format if format is null\n if (isNil(format)) {\n if (durationInSeconds < 45) format = 's';\n else if (durationInSeconds < 60 * 45) format = 'm';\n else if (durationInSeconds < 60 * 60 * 22) format = 'h';\n else if (durationInSeconds < 60 * 60 * 24 * 26) format = 'd';\n else if (durationInSeconds < 60 * 60 * 24 * 320) format = 'M';\n else format = 'y';\n }\n\n // Helper function for zero-padding\n const pad = (num: number) => num.toString().padStart(2, '0');\n\n switch (format) {\n case 's':\n return `${durationInSeconds} seconds left`;\n case 'ss':\n return `${pad(durationInSeconds)} seconds left`;\n case 'm':\n return `${Math.round(durationInSeconds / 60)} minute${durationInSeconds >= 120 ? 's' : ''} left`;\n case 'mm':\n return `${pad(Math.round(durationInSeconds / 60))} minutes left`;\n case 'h':\n case 'H':\n if (durationInSeconds < 60 * 89) return 'an hour left';\n return `${Math.round(durationInSeconds / 3600)} hour${durationInSeconds >= 60 * 180 ? 's' : ''} left`;\n case 'hh':\n case 'HH':\n if (durationInSeconds < 60 * 89) return '01 hour left';\n return `${pad(Math.round(durationInSeconds / 3600))} hours left`;\n case 'd':\n case 'D':\n if (durationInSeconds < 60 * 60 * 35) return 'a day left';\n return `${Math.round(durationInSeconds / (3600 * 24))} day${durationInSeconds >= 60 * 60 * 70 ? 's' : ''} left`;\n case 'dd':\n case 'DD':\n if (durationInSeconds < 60 * 60 * 35) return '01 day left';\n return `${pad(Math.round(durationInSeconds / (3600 * 24)))} days left`;\n case 'M':\n if (durationInSeconds < 60 * 60 * 24 * 45) return 'a month left';\n return `${Math.round(durationInSeconds / (3600 * 24 * 30))} month${durationInSeconds >= 60 * 60 * 24 * 90 ? 's' : ''} left`;\n case 'MM':\n if (durationInSeconds < 60 * 60 * 24 * 45) return '01 month left';\n return `${pad(Math.round(durationInSeconds / (3600 * 24 * 30)))} months left`;\n case 'y':\n case 'Y':\n if (durationInSeconds < 60 * 60 * 24 * 547) return 'a year left';\n return `${Math.round(durationInSeconds / (3600 * 24 * 365))} year${durationInSeconds >= 60 * 60 * 24 * 730 ? 's' : ''} left`;\n case 'yy':\n case 'YY':\n case 'yyyy':\n case 'YYYY':\n if (durationInSeconds < 60 * 60 * 24 * 547) return '01 year left';\n return `${pad(Math.round(durationInSeconds / (3600 * 24 * 365)))} years left`;\n default:\n return 'Invalid format';\n }\n }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { AXCalendarService } from './calendar.service';\nimport { AXDateTime } from './datetime.class';\n\n/**\n * @deprecated The pipe should not be used, use format instead\n */\n@Pipe({ name: 'axDate' })\nexport class AXDateTimePipe implements PipeTransform {\n private _calendarService: AXCalendarService = inject(AXCalendarService);\n\n transform(value: Date | AXDateTime | string, format?: string, calendarName?: string): string {\n if (value == null) {\n return '';\n }\n let calendar = this._calendarService.calendar;\n if (calendarName) {\n calendar = this._calendarService.resolveCalendar(calendarName);\n }\n const val: AXDateTime = this._calendarService.convert(value, calendar.name());\n return val.format(format);\n }\n}\n","import { AXFormatModule } from '@acorex/core/format';\nimport { NgModule } from '@angular/core';\nimport { AXDateTimeFormatter } from './formatters/datetime-formatter';\nimport { AXTimeLeftFormatter } from './formatters/timeleft-formatter';\nimport { AXDateTimePipe } from './datetime.pipe';\n\n@NgModule({\n imports: [AXFormatModule.forChild({ formatters: [AXDateTimeFormatter, AXTimeLeftFormatter] })],\n exports: [AXDateTimePipe],\n declarations: [AXDateTimePipe],\n})\nexport class AXDateTimeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-core-dateTime.mjs","sources":["../../../../libs/core/dateTime/src/lib/datetime.class.ts","../../../../libs/core/dateTime/src/lib/georgian.calendar.ts","../../../../libs/core/dateTime/src/lib/jalali.calendar.ts","../../../../libs/core/dateTime/src/lib/dateTime.config.ts","../../../../libs/core/dateTime/src/lib/holidays.loader.ts","../../../../libs/core/dateTime/src/lib/calendar.service.ts","../../../../libs/core/dateTime/src/lib/formatters/datetime-formatter.ts","../../../../libs/core/dateTime/src/lib/formatters/timeleft-formatter.ts","../../../../libs/core/dateTime/src/lib/datetime.pipe.ts","../../../../libs/core/dateTime/src/lib/datetime.module.ts","../../../../libs/core/dateTime/src/acorex-core-dateTime.ts"],"sourcesContent":["import { translateSync } from '@acorex/core/translation';\nimport { defaults, orderBy } from 'lodash-es';\n\nexport type TimeUnit = 'ms' | 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year' | 'week';\n\nexport interface AXDateValue {\n year: number;\n month: number;\n date: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n ms?: number;\n}\n\nexport interface AXDateTimeDisplayFormats {\n dateInput: string;\n timeInput: string;\n dateTimeInput: string;\n dateDisplay: string;\n timeDisplay: string;\n dateTimeDisplay: string;\n}\n\nexport type AXDateTimeUnitNames = { long: string; short: string; letter: string }[];\n\nexport type AXDateTimePart = {\n key: string;\n placeholder: string;\n placeholders: string[];\n typedValue?: string | null;\n default: number;\n enabled: boolean;\n realValue: () => string;\n};\n\nexport type AXDateTimeParts = {\n year: AXDateTimePart;\n month: AXDateTimePart;\n day: AXDateTimePart;\n hour: AXDateTimePart;\n minute: AXDateTimePart;\n second: AXDateTimePart;\n};\n\nexport interface AXCalendarConfig {\n weekdays: number[];\n weekend: number[];\n formats: AXDateTimeDisplayFormats;\n}\n\nexport abstract class AXCalendar {\n private _config: AXCalendarConfig;\n\n /**\n * @ignore\n */\n constructor(config: AXCalendarConfig) {\n this._config = config;\n }\n\n public get weekend(): number[] {\n return this._config.weekend;\n }\n\n public get formats(): AXDateTimeDisplayFormats {\n return this._config.formats;\n }\n\n public get weekdays(): number[] {\n return this._config.weekdays;\n }\n\n abstract name(): string;\n\n abstract dayOfMonth(date: Date): number;\n\n abstract dayOfYear(date: Date): number;\n\n abstract dayOfWeek(date: Date): number;\n\n abstract monthOfYear(date: Date): number;\n\n abstract weekOfYear(date: Date): number;\n\n abstract year(date: Date): number;\n\n abstract add(date: Date, unit: TimeUnit, amount: number): AXDateTime;\n\n abstract set(date: Date, unit: TimeUnit, value: number): AXDateTime;\n\n abstract startOf(date: Date, unit: TimeUnit): AXDateTime;\n\n abstract endOf(date: Date, unit: TimeUnit): AXDateTime;\n\n abstract create(value: AXDateValue): AXDateTime;\n\n abstract parse(value: string): AXDateTime;\n}\n\nexport class AXDateTime {\n private _date: Date;\n\n get date(): Date {\n return this._date;\n }\n\n private _calendar: AXCalendar;\n get calendar(): AXCalendar {\n return this._calendar;\n }\n\n constructor(value: Date, calendar: AXCalendar) {\n this._calendar = calendar;\n this._date = value;\n }\n\n clone(): AXDateTime {\n return new AXDateTime(this.date, this.calendar);\n }\n\n get dayOfMonth(): number {\n return this._calendar.dayOfMonth(this.date);\n }\n\n get dayOfYear(): number {\n return this._calendar.dayOfYear(this.date);\n }\n\n get dayOfWeek(): number {\n return this._calendar.dayOfWeek(this.date);\n }\n\n get hour(): number {\n return this._date.getHours();\n }\n\n get minute(): number {\n return this._date.getMinutes();\n }\n\n get second(): number {\n return this._date.getSeconds();\n }\n\n get year(): number {\n return this._calendar.year(this.date);\n }\n\n get monthOfYear(): number {\n return this._calendar.monthOfYear(this.date);\n }\n\n get weekOfYear(): number {\n return this._calendar.weekOfYear(this.date);\n }\n\n get month(): AXCalendarMonth {\n return new AXCalendarMonth(this);\n }\n\n add(unit: TimeUnit, amount: number): AXDateTime {\n return this._calendar.add(this.date, unit, amount);\n }\n\n set(unit: TimeUnit = 'day', value: number): AXDateTime {\n return this._calendar.set(this.date, unit, value);\n }\n\n duration(end: Date | AXDateTime): AXTimeSpan {\n const date = end instanceof AXDateTime ? end.date : (end as Date);\n const val = new AXDateTime(date, this.calendar);\n const range = new AXDateTimeRange(this, val);\n return range.duration();\n }\n\n startOf(unit: TimeUnit = 'day'): AXDateTime {\n return this._calendar.startOf(this.date, unit);\n }\n\n endOf(unit: TimeUnit = 'day'): AXDateTime {\n return this._calendar.endOf(this.date, unit);\n }\n\n //TODO: remove unused items\n private _formatKeys = {\n ss: () => this.pad(this.date.getSeconds(), 2),\n s: () => this.date.getSeconds().toString(),\n //\n dd: () => this.pad(this.calendar.dayOfMonth(this.date), 2),\n DD: () => this.pad(this.calendar.dayOfMonth(this.date), 2),\n d: () => this.calendar.dayOfMonth(this.date).toString(),\n //\n mm: () => this.pad(this.date.getMinutes(), 2),\n m: () => this.date.getMinutes().toString(),\n //\n MMMM: () =>\n translateSync(\n `dateTime.months.${this.calendar.name()}.long.${this.calendar.monthOfYear(this.date) - 1}`,\n ),\n MMM: () =>\n translateSync(\n `dateTime.months.${this.calendar.name()}.short.${this.calendar.monthOfYear(this.date) - 1}`,\n ),\n MM: () => this.pad(this.calendar.monthOfYear(this.date), 2),\n M: () => this.calendar.monthOfYear(this.date),\n //\n E: () =>\n translateSync(\n `dateTime.weekdays.long.${this.calendar.weekdays[this.calendar.dayOfWeek(this.date) - 1]}`,\n ),\n DDD: () =>\n translateSync(\n `dateTime.weekdays.short.${this.calendar.weekdays[this.calendar.dayOfWeek(this.date) - 1]}`,\n ),\n DDDD: () => this._formatKeys['E'](),\n //\n yyyy: () => this.pad(this.calendar.year(this.date), 4),\n YYYY: () => this.pad(this.calendar.year(this.date), 4),\n yy: () => this.pad(this.calendar.year(this.date), 4).substring(2),\n YY: () => this.pad(this.calendar.year(this.date), 4).substring(2),\n //\n HH: () => this.pad(this.date.getHours(), 2),\n H: () => this.date.getHours().toString(),\n //\n hh: () => this.pad(this.date.getHours() % 12 || 12, 2),\n h: () => (this.date.getHours() % 12 || 12).toString(),\n //\n A: () => (this.date.getHours() < 12 ? 'am' : 'pm'),\n a: () => (this.date.getHours() < 12 ? 'am' : 'pm'),\n date: (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortDate')),\n shortDate: (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortDate')),\n longDate: (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'longDate')),\n //\n shortTime: (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortTime')),\n time: (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortTime')),\n longTime: (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'longTime')),\n //\n datetime: (options) => this.format('date time', { locale: options.locale }),\n };\n\n format(\n format: string = this.getDateTimeFormatByLocale(navigator.language, 'shortDate'),\n options?: { locale?: string },\n ): string {\n const effectiveOptions = defaults({}, options, {\n locale: navigator.language,\n });\n const re = new RegExp(orderBy(Object.keys(this._formatKeys), (c) => c.length, ['desc']).join('|'), 'gi');\n return format.replace(re, (matched) => {\n const f = this._formatKeys[matched];\n const r = f(effectiveOptions);\n return r;\n });\n }\n\n getDateTimeFormatByLocale(\n locale: string,\n style: 'shortDate' | 'longDate' | 'shortTime' | 'longTime',\n ): string {\n let options: Intl.DateTimeFormatOptions = {};\n switch (style) {\n case 'shortDate': // Year, Month, Day\n options = { year: 'numeric', month: '2-digit', day: '2-digit' };\n break;\n case 'longDate': // Weekday, Month name, Day, Year\n options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };\n break;\n case 'shortTime': // Hour, Minute\n options = { hour: '2-digit', minute: '2-digit', hour12: false };\n break;\n case 'longTime': // Hour, Minute, Second\n options = { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false };\n break;\n }\n\n const formatter = new Intl.DateTimeFormat(locale, options);\n\n // Get parts of the date and/or time\n const parts = formatter.formatToParts(new Date());\n\n // Map parts to their respective format\n const formatMap: { [key: string]: string } = {\n day: 'dd',\n month: style == 'longDate' ? 'MMMM' : 'MM',\n year: 'yyyy',\n hour: 'HH',\n minute: 'mm',\n second: 'ss',\n weekday: 'E',\n literal: '',\n };\n\n // Construct the date and/or time format string\n return parts\n .map((part) => {\n if (part.type === 'literal') {\n // Use the literal part directly as separator\n return part.value;\n } else {\n return formatMap[part.type] || part.value;\n }\n })\n .join('');\n }\n\n private pad(n, width, z = '0') {\n n = n + '';\n return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n }\n\n equal(value: Date | AXDateTime, unit: TimeUnit = 'day') {\n return this.compare(value, unit) == 0;\n }\n\n compare(value: Date | AXDateTime, unit: TimeUnit = 'day') {\n const date = value instanceof AXDateTime ? value.date : (value as Date);\n const val = new AXDateTime(date, this.calendar);\n const func = (v1: number, v2: number) => {\n if (v1 == v2) {\n return 0;\n } else if (v1 > v2) {\n return 1;\n } else {\n return -1;\n }\n };\n let p = 0;\n switch (unit) {\n case 'year':\n return func(this.year, val.year);\n case 'week':\n p = this.compare(val, 'year');\n return p == 0 ? func(this.weekOfYear, val.weekOfYear) : p;\n case 'month':\n p = this.compare(val, 'year');\n return p == 0 ? func(this.monthOfYear, val.monthOfYear) : p;\n case 'day':\n p = this.compare(val, 'year');\n return p == 0 ? func(this.dayOfYear, val.dayOfYear) : p;\n case 'hour':\n p = this.compare(val, 'day');\n return p == 0 ? func(this.hour, val.hour) : p;\n case 'minute':\n p = this.compare(val, 'hour');\n return p == 0 ? func(this.minute, val.minute) : p;\n case 'second':\n p = this.compare(val, 'minute');\n return p == 0 ? func(this.second, val.second) : p;\n default:\n return func(this.date.getTime(), val.date.getTime());\n }\n }\n}\n\nexport class AXCalendarMonth {\n private _range: AXDateTimeRange;\n public get range(): AXDateTimeRange {\n return this._range;\n }\n public set range(v: AXDateTimeRange) {\n this._range = v;\n }\n\n public get totalDays(): number {\n return this.range.endTime.dayOfMonth;\n }\n\n constructor(date: AXDateTime) {\n this.index = date.date.getMonth();\n this.name = date.format('MMMM');\n this.range = new AXDateTimeRange(\n new AXDateTime(date.startOf('month').date, date.calendar),\n new AXDateTime(date.endOf('month').date, date.calendar),\n );\n }\n\n private readonly index: number;\n private readonly name: string;\n}\n\nexport interface AXTimeSpanTotal {\n miliseconds: number;\n seconds: number;\n minutes: number;\n hours: number;\n days: number;\n weeks: number;\n months: number;\n years: number;\n}\n\nexport interface AXTimeSpan {\n miliseconds: number;\n seconds: number;\n minutes: number;\n hours: number;\n days: number;\n months: number;\n years: number;\n total: AXTimeSpanTotal;\n}\n\nexport class AXDateTimeRange {\n private _startTime: AXDateTime;\n private _endTime: AXDateTime;\n\n public get startTime(): AXDateTime {\n return this._startTime;\n }\n\n public get endTime(): AXDateTime {\n return this._endTime;\n }\n\n constructor(startTime: AXDateTime, endTime: AXDateTime) {\n this._startTime = startTime;\n this._endTime = endTime;\n }\n\n duration(): AXTimeSpan {\n const result: AXTimeSpan = {\n miliseconds: 0,\n seconds: 0,\n minutes: 0,\n hours: 0,\n days: 0,\n months: 0,\n years: 0,\n total: {\n miliseconds: 0,\n seconds: 0,\n minutes: 0,\n hours: 0,\n days: 0,\n weeks: 0,\n months: 0,\n years: 0,\n },\n };\n\n const one_second = 1000;\n const one_min = one_second * 60;\n const one_hour = one_min * 60;\n const one_day = one_hour * 24;\n const one_week = one_day * 7;\n const one_year = 365.25 * one_day;\n const one_month = one_year / 12;\n const startTime = this._startTime.date.getTime();\n const endTime = this._endTime.date.getTime();\n const diff = Math.abs(endTime - startTime);\n //\n result.total.miliseconds = diff;\n result.total.seconds = Number((diff / one_second).toFixed(2));\n result.total.minutes = Number((diff / one_min).toFixed(2));\n result.total.hours = Number((diff / one_hour).toFixed(2));\n result.total.days = Number((diff / one_day).toFixed(2));\n result.total.weeks = Number((diff / one_week).toFixed(2));\n //\n // let months = (this.endTime.year - this.startTime.year) * 12;\n // months += this.endTime.monthOfYear - this.startTime.monthOfYear + 1;\n // if (this.endTime.dayOfYear < this.startTime.dayOfYear) {\n // months--;\n // }\n // result.total.months = Math.abs(months);\n // TODO: review\n result.total.months = Number((diff / one_month).toFixed(2));\n result.total.years = Number((diff / one_year).toFixed(2));\n //\n result.miliseconds = result.total.miliseconds % 1000;\n result.seconds = Number((result.total.seconds % 60).toFixed(0));\n result.minutes = Number((result.total.minutes % 60).toFixed(0));\n result.hours = Number((result.total.hours % 24).toFixed(0));\n // TODO: review\n result.days = Number((result.total.days % 30.4).toFixed(0));\n result.months = Number((result.total.months % 12).toFixed(0));\n result.years = Number(result.total.years.toFixed(0));\n return result;\n }\n\n enumurate(unit: TimeUnit = 'day', amount = 1): AXDateTime[] {\n const result: AXDateTime[] = [];\n let item = this._startTime.clone();\n while (item.compare(this._endTime, unit) < 1) {\n if (!result.some((c) => c.equal(item, unit))) {\n result.push(item);\n }\n item = item.add(unit, amount);\n }\n return result;\n }\n}\n","import { AXCalendar, AXCalendarConfig, AXDateTime, AXDateValue, TimeUnit } from './datetime.class';\n\nexport class GeorgianCalendar extends AXCalendar {\n /**\n * @ignore\n */\n constructor(config: AXCalendarConfig) {\n super(config);\n }\n\n create(value: AXDateValue): AXDateTime {\n return new AXDateTime(\n new Date(\n value.year,\n value.month - 1,\n value.date,\n value.hours || 0,\n value.minutes || 0,\n value.seconds || 0,\n value.ms || 0,\n ),\n this,\n );\n }\n\n name(): string {\n return 'georgian';\n }\n\n dayOfMonth(date: Date): number {\n return date.getDate();\n }\n\n dayOfYear(date: Date): number {\n let result = 0;\n let m = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n if (this.isLeap(date)) {\n m[1] = 29;\n }\n for (let i = 0; i < date.getMonth(); i++) {\n result = result + m[i];\n }\n result += date.getDate();\n return result;\n }\n\n dayOfWeek(date: Date): number {\n return date.getDay() + 1;\n }\n\n weekOfYear(date: Date): number {\n const firstDay = new AXDateTime(date, this).startOf('year');\n return Math.ceil(\n ((date.getTime() - firstDay.date.getTime()) / 86400000 + firstDay.date.getDay() + 1) / 7,\n );\n }\n\n year(date: Date): number {\n return date.getFullYear();\n }\n\n monthOfYear(date: Date): number {\n return date.getMonth() + 1;\n }\n\n add(date: Date, unit: TimeUnit, amount: number): AXDateTime {\n let value = date.valueOf();\n switch (unit) {\n case 'second':\n value += 1000 * amount;\n break;\n case 'minute':\n value += 60000 * amount;\n break;\n case 'hour':\n value += 3600000 * amount;\n break;\n case 'month': {\n const v = new Date(value);\n\n // Calculate the new year and month considering the amount\n let newYear = v.getFullYear();\n let newMonth = v.getMonth() + amount;\n\n // Adjust for year overflow or underflow\n while (newMonth > 11) {\n newMonth -= 12;\n newYear++;\n }\n while (newMonth < 0) {\n newMonth += 12;\n newYear--;\n }\n\n // Set the date to the first of the month to prevent overflow\n v.setDate(1);\n v.setFullYear(newYear);\n v.setMonth(newMonth);\n\n // Get the last day of the new month\n const lastDayOfMonth = new Date(newYear, newMonth + 1, 0).getDate();\n\n // Set the date to either the original day or the last day of the new month, whichever is smaller\n const originalDay = date.getDate();\n v.setDate(Math.min(originalDay, lastDayOfMonth));\n\n value = v.valueOf();\n break;\n }\n case 'week':\n value += 7 * 86400000 * amount;\n break;\n case 'year': {\n const newDate = new Date(value);\n newDate.setFullYear(newDate.getFullYear() + amount);\n // Handling for leap years: if the original date is February 29th, and the new year is not a leap year,\n // set the date to February 28th.\n if (date.getMonth() === 1 && date.getDate() === 29 && newDate.getMonth() !== 1) {\n newDate.setMonth(1);\n newDate.setDate(28);\n }\n value = newDate.valueOf();\n break;\n }\n case 'day':\n default:\n value += 86400000 * amount;\n }\n return new AXDateTime(new Date(value), this);\n }\n\n set(date: Date, unit: TimeUnit, value: number): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), value, clone.getMilliseconds());\n break;\n case 'minute':\n clone.setHours(clone.getHours(), value, clone.getSeconds(), clone.getMilliseconds());\n break;\n case 'hour':\n clone.setHours(value, clone.getMinutes(), clone.getSeconds(), clone.getMilliseconds());\n break;\n default:\n case 'day':\n clone.setDate(value);\n break;\n case 'week':\n break;\n case 'month':\n clone.setMonth(Math.max(0, value - 1));\n break;\n case 'year':\n clone.setFullYear(value);\n break;\n }\n return new AXDateTime(clone, this);\n }\n\n startOf(date: Date, unit: TimeUnit): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 0);\n return new AXDateTime(clone, this);\n case 'minute':\n clone.setHours(clone.getHours(), clone.getMinutes(), 0, 0);\n return new AXDateTime(clone, this);\n case 'hour':\n clone.setHours(clone.getHours(), 0, 0, 0);\n return new AXDateTime(clone, this);\n default:\n case 'day':\n clone.setHours(0, 0, 0, 0);\n return new AXDateTime(clone, this);\n case 'week': {\n const start = 1; // Week starts on Monday\n const day = clone.getDay();\n const diff = clone.getDate() - day + (day == 0 ? -6 : start - day);\n clone.setDate(diff);\n clone.setHours(0, 0, 0, 0);\n return new AXDateTime(clone, this);\n }\n case 'month':\n clone.setDate(1);\n return new AXDateTime(clone, this).startOf('day');\n case 'year':\n clone.setMonth(0);\n clone.setDate(1);\n return new AXDateTime(clone, this).startOf('day');\n }\n }\n\n endOf(date: Date, unit: TimeUnit): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);\n return new AXDateTime(clone, this);\n case 'minute':\n clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);\n return new AXDateTime(clone, this);\n case 'hour':\n clone.setHours(clone.getHours(), 59, 59, 999);\n return new AXDateTime(clone, this);\n default:\n case 'day':\n clone.setHours(23, 59, 59, 999);\n return new AXDateTime(clone, this);\n case 'week':\n return this.startOf(date, 'week').add('day', 6).endOf('day');\n case 'month': {\n const dateObj = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n dateObj.setHours(23, 59, 59, 999);\n return new AXDateTime(dateObj, this);\n }\n case 'year':\n clone.setMonth(11);\n return new AXDateTime(clone, this).endOf('month');\n }\n }\n\n isLeap(date: Date) {\n let leapYear = new Date(date.getFullYear(), 1, 29);\n return leapYear.getDate() == 29;\n }\n\n parse(value: string): AXDateTime {\n return new AXDateTime(new Date(value), this);\n }\n}\n","import { AXCalendar, AXCalendarConfig, AXDateTime, AXDateValue, TimeUnit } from './datetime.class';\n\nexport class JalaliCalendar extends AXCalendar {\n /**\n * @ignore\n */\n constructor(config: AXCalendarConfig) {\n super(config);\n }\n\n /*\n Jalaali years starting the 33-year rule.\n*/\n private breaks = [\n -61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456,\n 3178,\n ];\n\n create(value: AXDateValue): AXDateTime {\n const a = this.toGregorian(value.year, value.month, value.date);\n return new AXDateTime(\n new Date(\n a.getFullYear(),\n a.getMonth(),\n a.getDate(),\n value.hours || 0,\n value.minutes || 0,\n value.seconds || 0,\n value.ms || 0,\n ),\n this,\n );\n }\n\n name(): string {\n return 'jalali';\n }\n\n dayOfMonth(date: Date): number {\n return this.toJalaali(date).day;\n }\n\n dayOfYear(date: Date): number {\n const j = this.toJalaali(date);\n return (j.month <= 6 ? (j.month - 1) * 31 : 6 * 31 + (j.month - 7) * 30) + j.day;\n }\n\n dayOfWeek(date: Date): number {\n return date.getDay() == 6 ? 1 : date.getDay() + 2;\n }\n\n weekOfYear(date: Date): number {\n //TODO : apply jalali\n const firstDay = new AXDateTime(date, this).startOf('year');\n return Math.ceil(\n ((date.getTime() - firstDay.date.getTime()) / 86400000 + firstDay.date.getDay() + 1) / 7,\n );\n }\n\n year(date: Date): number {\n return this.toJalaali(date).year;\n }\n\n monthOfYear(date: Date): number {\n return this.toJalaali(date).month;\n }\n\n add(date: Date, unit: TimeUnit, amount: number): AXDateTime {\n let value = date.valueOf();\n switch (unit) {\n case 'second':\n value += 1000 * amount;\n break;\n case 'minute':\n value += 60000 * amount;\n break;\n case 'hour':\n value += 3600000 * amount;\n break;\n case 'month': {\n // const v = new Date(value);\n // let jd = this.dayOfMonth(date);\n // let jm = this.monthOfYear(date);\n // let jy = this.year(date);\n // const nm = jm + amount;\n // const ny = nm % 12 ? Math.floor(nm / 12) : 0;\n // jy += ny;\n // jm = nm - ny * 12;\n // const vv = this.toGregorian(jy, jm, jd);\n // v.setFullYear(vv.getFullYear());\n // v.setMonth(vv.getMonth());\n // v.setDate(vv.getDate());\n // value = v.valueOf();\n // break;\n let jd = this.dayOfMonth(date);\n let jm = this.monthOfYear(date);\n let jy = this.year(date);\n\n let newMonth = jm + amount;\n let yearsToAdd = Math.floor(newMonth / 12);\n newMonth = newMonth % 12;\n if (newMonth <= 0) {\n newMonth += 12;\n yearsToAdd--;\n }\n\n jy += yearsToAdd;\n\n // Temporary set to first of the month to prevent rollover\n const tempDate = this.toGregorian(jy, newMonth, 1);\n const gregorianDate = new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate());\n\n // Adjust the day to either the original day or the last day of the new month, whichever is smaller\n const lastDayOfNewMonth = this.jalaaliMonthLength(jy, newMonth); // Implement this method to find the last day in a Jalali month\n jd = Math.min(jd, lastDayOfNewMonth);\n\n const finalDate = this.toGregorian(jy, newMonth, jd);\n gregorianDate.setFullYear(finalDate.getFullYear());\n gregorianDate.setMonth(finalDate.getMonth());\n gregorianDate.setDate(finalDate.getDate());\n\n value = gregorianDate.valueOf();\n break;\n }\n case 'week':\n value += 7 * 86400000 * amount;\n break;\n case 'year': {\n const v = new Date(value);\n let jd = this.dayOfMonth(date);\n let jm = this.monthOfYear(date);\n let jy = this.year(date);\n const vv = this.toGregorian(jy + amount, jm, jd);\n v.setFullYear(vv.getFullYear());\n v.setMonth(vv.getMonth());\n v.setDate(vv.getDate());\n value = v.valueOf();\n break;\n }\n case 'day':\n default:\n value += 86400000 * amount;\n }\n return new AXDateTime(new Date(value), this);\n }\n\n set(date: Date, unit: TimeUnit, value: number): AXDateTime {\n const clone = new Date(date.valueOf());\n const jDate = this.toJalaali(clone);\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), value, clone.getMilliseconds());\n break;\n case 'minute':\n clone.setHours(clone.getHours(), value, clone.getSeconds(), clone.getMilliseconds());\n break;\n case 'hour':\n clone.setHours(value, clone.getMinutes(), clone.getSeconds(), clone.getMilliseconds());\n break;\n default:\n case 'day': {\n const gDate = this.toGregorian(jDate.year, jDate.month, value);\n clone.setDate(gDate.getDate());\n break;\n }\n case 'week':\n break;\n case 'month': {\n const gDate2 = this.toGregorian(jDate.year, value, jDate.day);\n clone.setMonth(gDate2.getMonth());\n break;\n }\n case 'year': {\n const gDate3 = this.toGregorian(value, jDate.month, jDate.day);\n clone.setFullYear(gDate3.getFullYear());\n break;\n }\n }\n return new AXDateTime(clone, this);\n }\n\n startOf(date: Date, unit: TimeUnit): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 0);\n return new AXDateTime(clone, this);\n case 'minute':\n clone.setHours(clone.getHours(), clone.getMinutes(), 0, 0);\n return new AXDateTime(clone, this);\n case 'hour':\n clone.setHours(clone.getHours(), 0, 0, 0);\n return new AXDateTime(clone, this);\n default:\n case 'day':\n clone.setHours(0, 0, 0, 0);\n return new AXDateTime(clone, this);\n case 'week':\n return new AXDateTime(clone, this).add('day', -this.dayOfWeek(clone) + 1).startOf('day');\n case 'month': {\n const jy = this.year(date);\n const jm = this.monthOfYear(date);\n const gDate = this.toGregorian(jy, jm, 1);\n return new AXDateTime(gDate, this).startOf('day');\n }\n case 'year': {\n const jy = this.year(date);\n const gDate = this.toGregorian(jy, 1, 1);\n return new AXDateTime(gDate, this).startOf('day');\n }\n }\n }\n\n endOf(date: Date, unit: TimeUnit): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);\n return new AXDateTime(clone, this);\n case 'minute':\n clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);\n return new AXDateTime(clone, this);\n case 'hour':\n clone.setHours(clone.getHours(), 59, 59, 999);\n return new AXDateTime(clone, this);\n default:\n case 'day':\n clone.setHours(23, 59, 59, 999);\n return new AXDateTime(clone, this);\n case 'week': {\n return this.startOf(date, 'week').add('day', 6).endOf('day');\n }\n case 'month': {\n const jy = this.year(date);\n const jm = this.monthOfYear(date);\n const jd = this.jalaaliMonthLength(jy, jm);\n const gDate = this.toGregorian(jy, jm, jd);\n return new AXDateTime(gDate, this).endOf('day');\n }\n case 'year': {\n const jy = this.year(date);\n const gDate = this.toGregorian(jy, 12, this.jalaaliMonthLength(jy, 12));\n return new AXDateTime(gDate, this).endOf('day');\n }\n }\n }\n\n parse(value: string): AXDateTime {\n const [y, M, d, h, m, s, ms] = value.split(/[^a-zA-Z0-9]+/gi);\n const date = this.toGregorian(Number(y) ?? 0, Number(M) ?? 1, Number(d) ?? 1);\n if (h != null) date.setHours(Number(h));\n if (m != null) date.setMinutes(Number(m));\n if (s != null) date.setSeconds(Number(s));\n if (ms != null) date.setMilliseconds(Number(d));\n return new AXDateTime(date, this);\n }\n\n /*\n Converts a Gregorian date to Jalaali.\n*/\n toJalaali(date: Date): { year: number; month: number; day: number } {\n const gd = date.getDate();\n const gm = date.getMonth() + 1;\n const gy = date.getFullYear();\n const r = this.d2j(this.g2d(gy, gm, gd));\n return {\n year: r.jy,\n month: r.jm,\n day: r.jd,\n };\n }\n\n /*\n Converts a Jalaali date to Gregorian.\n */\n toGregorian(jy, jm, jd): Date {\n const g = this.d2g(this.j2d(jy, jm, jd));\n return new Date(g.gy, g.gm - 1, g.gd);\n }\n\n /*\n Checks whether a Jalaali date is valid or not.\n */\n isValidJalaaliDate(jy, jm, jd) {\n return jy >= -61 && jy <= 3177 && jm >= 1 && jm <= 12 && jd >= 1 && jd <= this.jalaaliMonthLength(jy, jm);\n }\n\n /*\n Is this a leap year or not?\n */\n isLeapJalaaliYear(jy) {\n return this.jalCalLeap(jy) === 0;\n }\n\n /*\n Number of days in a given month in a Jalaali year.\n */\n jalaaliMonthLength(jy, jm) {\n if (jm <= 6) return 31;\n if (jm <= 11) return 30;\n if (this.isLeapJalaaliYear(jy)) return 30;\n return 29;\n }\n\n /*\n This determines if the Jalaali (Persian) year is\n leap (366-day long) or is the common year (365 days)\n \n @param jy Jalaali calendar year (-61 to 3177)\n @returns number of years since the last leap year (0 to 4)\n */\n private jalCalLeap(jy: number) {\n let bl = this.breaks.length,\n jp = this.breaks[0],\n jm,\n jump,\n leap,\n n,\n i;\n\n if (jy < jp || jy >= this.breaks[bl - 1]) throw new Error('Invalid Jalaali year ' + jy);\n\n for (i = 1; i < bl; i += 1) {\n jm = this.breaks[i];\n jump = jm - jp;\n if (jy < jm) break;\n jp = jm;\n }\n n = jy - jp;\n\n if (jump - n < 6) n = n - jump + this.div(jump + 4, 33) * 33;\n leap = this.mod(this.mod(n + 1, 33) - 1, 4);\n if (leap === -1) {\n leap = 4;\n }\n\n return leap;\n }\n\n private jalCal(jy: number, withoutLeap: boolean) {\n let bl = this.breaks.length,\n gy = jy + 621,\n leapJ = -14,\n jp = this.breaks[0],\n jm,\n jump,\n leap,\n leapG,\n march,\n n,\n i;\n\n if (jy < jp || jy >= this.breaks[bl - 1]) throw new Error('Invalid Jalaali year ' + jy);\n\n // Find the limiting years for the Jalaali year jy.\n for (i = 1; i < bl; i += 1) {\n jm = this.breaks[i];\n jump = jm - jp;\n if (jy < jm) break;\n leapJ = leapJ + this.div(jump, 33) * 8 + this.div(this.mod(jump, 33), 4);\n jp = jm;\n }\n n = jy - jp;\n\n // Find the number of leap years from AD 621 to the beginning\n // of the current Jalaali year in the Persian calendar.\n leapJ = leapJ + this.div(n, 33) * 8 + this.div(this.mod(n, 33) + 3, 4);\n if (this.mod(jump, 33) === 4 && jump - n === 4) leapJ += 1;\n\n // And the same in the Gregorian calendar (until the year gy).\n leapG = this.div(gy, 4) - this.div((this.div(gy, 100) + 1) * 3, 4) - 150;\n\n // Determine the Gregorian date of Farvardin the 1st.\n march = 20 + leapJ - leapG;\n\n // return with gy and march when we don't need leap\n if (withoutLeap) return { gy: gy, march: march };\n\n // Find how many years have passed since the last leap year.\n if (jump - n < 6) n = n - jump + this.div(jump + 4, 33) * 33;\n leap = this.mod(this.mod(n + 1, 33) - 1, 4);\n if (leap === -1) {\n leap = 4;\n }\n\n return {\n leap: leap,\n gy: gy,\n march: march,\n };\n }\n\n private j2d(jy, jm, jd): number {\n let r = this.jalCal(jy, true);\n return this.g2d(r.gy, 3, r.march) + (jm - 1) * 31 - this.div(jm, 7) * (jm - 7) + jd - 1;\n }\n\n private d2j(jdn: number) {\n let gy = this.d2g(jdn).gy, // Calculate Gregorian year (gy).\n jy = gy - 621,\n r = this.jalCal(jy, false),\n jdn1f = this.g2d(gy, 3, r.march),\n jd,\n jm,\n k;\n\n // Find number of days that passed since 1 Farvardin.\n k = jdn - jdn1f;\n if (k >= 0) {\n if (k <= 185) {\n // The first 6 months.\n jm = 1 + this.div(k, 31);\n jd = this.mod(k, 31) + 1;\n return {\n jy: jy,\n jm: jm,\n jd: jd,\n };\n } else {\n // The remaining months.\n k -= 186;\n }\n } else {\n // Previous Jalaali year.\n jy -= 1;\n k += 179;\n if (r.leap === 1) k += 1;\n }\n jm = 7 + this.div(k, 30);\n jd = this.mod(k, 30) + 1;\n return {\n jy: jy,\n jm: jm,\n jd: jd,\n };\n }\n\n private g2d(gy: number, gm: number, gd: number): number {\n let d =\n this.div((gy + this.div(gm - 8, 6) + 100100) * 1461, 4) +\n this.div(153 * this.mod(gm + 9, 12) + 2, 5) +\n gd -\n 34840408;\n d = d - this.div(this.div(gy + 100100 + this.div(gm - 8, 6), 100) * 3, 4) + 752;\n return d;\n }\n\n private d2g(jdn: number) {\n let j, i, gd, gm, gy;\n j = 4 * jdn + 139361631;\n j = j + this.div(this.div(4 * jdn + 183187720, 146097) * 3, 4) * 4 - 3908;\n i = this.div(this.mod(j, 1461), 4) * 5 + 308;\n gd = this.div(this.mod(i, 153), 5) + 1;\n gm = this.mod(this.div(i, 153), 12) + 1;\n gy = this.div(j, 1461) - 100100 + this.div(8 - gm, 6);\n return {\n gy: gy,\n gm: gm,\n gd: gd,\n };\n }\n\n private jalaaliWeek(jy: number, jm: number, jd: number): { saturday: any; friday: any } {\n let dayOfWeek = this.jalaaliToDateObject(jy, jm, jd, 0, 0, 0, 0).getDay();\n\n let startDayDifference = dayOfWeek == 6 ? 0 : -(dayOfWeek + 1);\n let endDayDifference = 6 + startDayDifference;\n\n return {\n saturday: this.d2j(this.j2d(jy, jm, jd + startDayDifference)),\n friday: this.d2j(this.j2d(jy, jm, jd + endDayDifference)),\n };\n }\n\n private jalaaliToDateObject(\n jy: number,\n jm: number,\n jd: number,\n h: number = 0,\n m: number = 0,\n s: number = 0,\n ms: number = 0,\n ) {\n let gregorianCalenderDate = this.toGregorian(jy, jm, jd);\n\n return new Date(\n gregorianCalenderDate.getFullYear(),\n gregorianCalenderDate.getMonth() - 1,\n gregorianCalenderDate.getDate(),\n h || 0,\n m || 0,\n s || 0,\n ms || 0,\n );\n }\n\n /*\n Utility helper functions.\n */\n\n private div(a: number, b: number) {\n return ~~(a / b);\n }\n\n private mod(a: number, b: number) {\n return a - ~~(a / b) * b;\n }\n}\n","import { AX_GLOBAL_CONFIG } from '@acorex/core/config';\nimport { InjectionToken, inject } from '@angular/core';\nimport { set } from 'lodash-es';\nimport { AXCalendar } from './datetime.class';\nimport { GeorgianCalendar } from './georgian.calendar';\nimport { JalaliCalendar } from './jalali.calendar';\n\nexport interface AXDateTimeConfig {\n calendar: string;\n calendars: {\n [key: string]: AXCalendar;\n };\n}\n\nexport const AX_DATETIME_CONFIG = new InjectionToken<AXDateTimeConfig>('AX_DATETIME_CONFIG', {\n providedIn: 'root',\n factory: () => {\n const global = inject(AX_GLOBAL_CONFIG);\n set(global, 'dateTime', AX_DATETIME_CONFIG);\n return AXDateTimeDefaultConfig;\n },\n});\n\nexport const AXDateTimeDefaultConfig: AXDateTimeConfig = {\n calendar: 'georgian',\n calendars: {\n georgian: new GeorgianCalendar({\n weekdays: [0, 1, 2, 3, 4, 5, 6],\n weekend: [5, 6],\n formats: {\n dateInput: 'yyyy/MM/dd',\n timeInput: 'HH:mm',\n dateTimeInput: 'yyyy/MM/dd HH:mm',\n dateDisplay: 'DDDD, d MMM yyyy',\n timeDisplay: 'HH:mm',\n dateTimeDisplay: 'DDDD, d MMM yyyy HH:mm',\n },\n }),\n jalali: new JalaliCalendar({\n weekdays: [6, 0, 1, 2, 3, 4, 5],\n weekend: [6],\n formats: {\n dateInput: 'yyyy/MM/dd',\n timeInput: 'HH:mm',\n dateTimeInput: 'yyyy/MM/dd HH:mm',\n dateDisplay: 'DDDD, d MMM yyyy',\n timeDisplay: 'HH:mm',\n dateTimeDisplay: 'DDDD, d MMM yyyy HH:mm',\n },\n }),\n },\n};\n\nexport type PartialDateTimeConfig = Partial<AXDateTimeConfig>;\n\nexport function dateTimeConfig(config: PartialDateTimeConfig = {}): AXDateTimeConfig {\n const result = {\n ...AXDateTimeDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface AXHolidayDate {\n date: Date;\n title: string;\n description?: string;\n [key: string]: unknown;\n}\n\nexport interface AXHolidaysLoaderOptions {\n calendar?: string;\n range?: { start: Date; end: Date };\n}\n\nexport interface AXHolidaysLoader {\n getHolidays(options?: AXHolidaysLoaderOptions): Promise<AXHolidayDate[]>;\n}\n\nexport class AXHolidaysLoaderDefault implements AXHolidaysLoader {\n getHolidays(options?: AXHolidaysLoaderOptions | undefined): Promise<AXHolidayDate[]> {\n return Promise.resolve([]);\n }\n}\n\nexport const AX_DATETIME_HOLIDAYS_LOADER = new InjectionToken<AXHolidaysLoader>(\n 'AX_DATETIME_HOLIDAYS_LOADER',\n {\n providedIn: 'root',\n factory: () => {\n return new AXHolidaysLoaderDefault();\n },\n },\n);\n","import { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { AXDateTimeConfig, AX_DATETIME_CONFIG } from './dateTime.config';\nimport { AXCalendar, AXDateTime, AXDateValue } from './datetime.class';\nimport { AXHolidayDate, AXHolidaysLoaderOptions, AX_DATETIME_HOLIDAYS_LOADER } from './holidays.loader';\nimport { AXEventService, AXEventTypes } from '@acorex/core/events';\n\n@Injectable({ providedIn: 'root' })\nexport class AXCalendarService {\n private config: AXDateTimeConfig = inject(AX_DATETIME_CONFIG);\n private _holidaysLoader = inject(AX_DATETIME_HOLIDAYS_LOADER);\n private eventService = inject(AXEventService);\n\n\n public get calendar(): AXCalendar {\n return this.getActiveCalendar();\n }\n\n private activeCalendar = new BehaviorSubject<AXCalendar>(this.getDefaultCalendar());\n calendarChanges$ = this.activeCalendar.asObservable();\n\n public getDefaultCalendar(): AXCalendar {\n return this.config.calendars[this.config.calendar];\n }\n\n public getActiveCalendar(): AXCalendar {\n return this.activeCalendar.getValue();\n }\n\n public setActiveCalendar(name: string): void {\n if (name != this.calendar.name()) {\n const calendar = this.resolveCalendar(name);\n this.activeCalendar.next(calendar);\n this.eventService.emitEvent({ type: AXEventTypes.AXCalendarChanged, payload: this.getActiveCalendar() });\n }\n }\n\n public onHolidaysChanged: Subject<AXHolidayDate[]> = new Subject<AXHolidayDate[]>();\n private _holidays: AXHolidayDate[] = [];\n public get holidays(): AXHolidayDate[] {\n return this._holidays;\n }\n\n constructor() {\n this.loadHolidays();\n }\n\n public loadHolidays(options?: AXHolidaysLoaderOptions) {\n return this._holidaysLoader.getHolidays(options).then((value) => {\n this._holidays = value;\n this.onHolidaysChanged.next(this._holidays);\n });\n }\n\n public create(value: AXDateValue, calendarName?: string): AXDateTime;\n public create(value: Date, calendarName?: string): AXDateTime;\n public create(value: AXDateValue | Date, calendarName?: string): AXDateTime {\n const calendar = calendarName ? this.resolveCalendar(calendarName) : this.calendar;\n if (value instanceof Date) {\n return new AXDateTime(value, calendar);\n } else if (value?.year && value?.month) {\n return calendar.create(value as AXDateValue);\n }\n return this.now();\n }\n\n public now(calendarName?: string): AXDateTime {\n const calendar = calendarName ? this.resolveCalendar(calendarName) : this.calendar;\n return new AXDateTime(new Date(), calendar);\n }\n\n public resolveCalendar(name: string): AXCalendar {\n const c = this.config.calendars[name];\n if (!c) {\n console.error(`\"${name}\" is not a valid calendar name!`);\n return this.calendar;\n }\n return c;\n }\n\n public convert(value: Date | AXDateTime | string, calendarName?: string): AXDateTime {\n const isISOString = (str) => {\n if (!/\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(.\\d{3}Z)?/.test(str)) return false;\n const d = new Date(str);\n return d instanceof Date && !isNaN(d.getTime()); // valid date\n };\n //\n const calendar = calendarName ? this.resolveCalendar(calendarName) : this.calendar;\n if (typeof value === 'string') {\n if (isISOString(value)) return new AXDateTime(new Date(value), calendar);\n else return calendar.parse(value);\n }\n const date = value instanceof AXDateTime ? value.date : (value as Date);\n return new AXDateTime(date, calendar);\n }\n}\n","import { AXFormatOptions, AXFormatter } from '@acorex/core/format';\nimport { Injectable, inject } from '@angular/core';\nimport { AXCalendarService } from '../calendar.service';\n\n\nexport interface AXDateTimeFormatterOptions extends AXFormatOptions {\n format?: string;\n calendar?: string;\n locale?: string;\n}\n\ndeclare module '@acorex/core/format' {\n interface AXFormatOptionsMap {\n 'datetime': AXDateTimeFormatterOptions;\n }\n}\n\n\n@Injectable()\nexport class AXDateTimeFormatter implements AXFormatter {\n private calendarService = inject(AXCalendarService);\n\n get name(): string {\n return 'datetime';\n }\n\n format(value: unknown, options?: AXDateTimeFormatterOptions | string): string {\n const effectiveOptions = typeof options == 'object' ? {\n format: options.format ?? 'date',\n locale: options.locale,\n calendar: options.calendar ?? this.calendarService.calendar.name()\n } : {\n format: options,\n calendar: this.calendarService.calendar.name()\n }\n\n return this.calendarService\n .create(value as Date, effectiveOptions.calendar as string)\n .format(effectiveOptions.format, { locale: effectiveOptions.locale });\n }\n}\n\n\n","import { Injectable } from \"@angular/core\";\nimport { isNil } from \"lodash-es\";\nimport { AXFormatOptions, AXFormatter } from '@acorex/core/format';\n\nexport interface AXTimeLeftFormatterOptions extends AXFormatOptions {\n format: string;\n}\n\ndeclare module '@acorex/core/format' {\n interface AXFormatOptionsMap {\n 'timeleft': AXTimeLeftFormatterOptions;\n }\n}\n\n\n@Injectable()\nexport class AXTimeLeftFormatter implements AXFormatter {\n\n get name(): string {\n return 'timeleft';\n }\n\n format(value: number | string, options?: AXTimeLeftFormatterOptions): string {\n const milliseconds = Number(value)\n if (milliseconds === null || isNaN(milliseconds)) {\n return \"Calculating...\";\n }\n const durationInSeconds = Math.round(milliseconds / 1000);\n let format = options?.format;\n // Determine the best format if format is null\n if (isNil(format)) {\n if (durationInSeconds < 45) format = 's';\n else if (durationInSeconds < 60 * 45) format = 'm';\n else if (durationInSeconds < 60 * 60 * 22) format = 'h';\n else if (durationInSeconds < 60 * 60 * 24 * 26) format = 'd';\n else if (durationInSeconds < 60 * 60 * 24 * 320) format = 'M';\n else format = 'y';\n }\n\n // Helper function for zero-padding\n const pad = (num: number) => num.toString().padStart(2, '0');\n\n switch (format) {\n case 's':\n return `${durationInSeconds} seconds left`;\n case 'ss':\n return `${pad(durationInSeconds)} seconds left`;\n case 'm':\n return `${Math.round(durationInSeconds / 60)} minute${durationInSeconds >= 120 ? 's' : ''} left`;\n case 'mm':\n return `${pad(Math.round(durationInSeconds / 60))} minutes left`;\n case 'h':\n case 'H':\n if (durationInSeconds < 60 * 89) return 'an hour left';\n return `${Math.round(durationInSeconds / 3600)} hour${durationInSeconds >= 60 * 180 ? 's' : ''} left`;\n case 'hh':\n case 'HH':\n if (durationInSeconds < 60 * 89) return '01 hour left';\n return `${pad(Math.round(durationInSeconds / 3600))} hours left`;\n case 'd':\n case 'D':\n if (durationInSeconds < 60 * 60 * 35) return 'a day left';\n return `${Math.round(durationInSeconds / (3600 * 24))} day${durationInSeconds >= 60 * 60 * 70 ? 's' : ''} left`;\n case 'dd':\n case 'DD':\n if (durationInSeconds < 60 * 60 * 35) return '01 day left';\n return `${pad(Math.round(durationInSeconds / (3600 * 24)))} days left`;\n case 'M':\n if (durationInSeconds < 60 * 60 * 24 * 45) return 'a month left';\n return `${Math.round(durationInSeconds / (3600 * 24 * 30))} month${durationInSeconds >= 60 * 60 * 24 * 90 ? 's' : ''} left`;\n case 'MM':\n if (durationInSeconds < 60 * 60 * 24 * 45) return '01 month left';\n return `${pad(Math.round(durationInSeconds / (3600 * 24 * 30)))} months left`;\n case 'y':\n case 'Y':\n if (durationInSeconds < 60 * 60 * 24 * 547) return 'a year left';\n return `${Math.round(durationInSeconds / (3600 * 24 * 365))} year${durationInSeconds >= 60 * 60 * 24 * 730 ? 's' : ''} left`;\n case 'yy':\n case 'YY':\n case 'yyyy':\n case 'YYYY':\n if (durationInSeconds < 60 * 60 * 24 * 547) return '01 year left';\n return `${pad(Math.round(durationInSeconds / (3600 * 24 * 365)))} years left`;\n default:\n return 'Invalid format';\n }\n }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { AXCalendarService } from './calendar.service';\nimport { AXDateTime } from './datetime.class';\n\n/**\n * @deprecated The pipe should not be used, use format instead\n */\n@Pipe({ name: 'axDate' })\nexport class AXDateTimePipe implements PipeTransform {\n private _calendarService: AXCalendarService = inject(AXCalendarService);\n\n transform(value: Date | AXDateTime | string, format?: string, calendarName?: string): string {\n if (value == null) {\n return '';\n }\n let calendar = this._calendarService.calendar;\n if (calendarName) {\n calendar = this._calendarService.resolveCalendar(calendarName);\n }\n const val: AXDateTime = this._calendarService.convert(value, calendar.name());\n return val.format(format);\n }\n}\n","import { AXFormatModule } from '@acorex/core/format';\nimport { NgModule } from '@angular/core';\nimport { AXDateTimeFormatter } from './formatters/datetime-formatter';\nimport { AXTimeLeftFormatter } from './formatters/timeleft-formatter';\nimport { AXDateTimePipe } from './datetime.pipe';\n\n@NgModule({\n imports: [AXFormatModule.forChild({ formatters: [AXDateTimeFormatter, AXTimeLeftFormatter] })],\n exports: [AXDateTimePipe],\n declarations: [AXDateTimePipe],\n})\nexport class AXDateTimeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acorex/core",
3
- "version": "7.21.0",
3
+ "version": "7.21.2",
4
4
  "sideEffects": false,
5
5
  "peerDependencies": {
6
6
  "@angular/common": ">=17.0.3",