@acorex/core 21.0.2-next.38 → 21.0.2-next.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/acorex-core-components.mjs +3 -3
- package/fesm2022/acorex-core-components.mjs.map +1 -1
- package/fesm2022/acorex-core-config.mjs +3 -3
- package/fesm2022/acorex-core-config.mjs.map +1 -1
- package/fesm2022/acorex-core-constants.mjs.map +1 -1
- package/fesm2022/acorex-core-date-time.mjs +25 -25
- package/fesm2022/acorex-core-date-time.mjs.map +1 -1
- package/fesm2022/acorex-core-events.mjs +3 -3
- package/fesm2022/acorex-core-events.mjs.map +1 -1
- package/fesm2022/acorex-core-file.mjs +37 -37
- package/fesm2022/acorex-core-file.mjs.map +1 -1
- package/fesm2022/acorex-core-format.mjs +19 -19
- package/fesm2022/acorex-core-format.mjs.map +1 -1
- package/fesm2022/acorex-core-full-screen.mjs +4 -4
- package/fesm2022/acorex-core-full-screen.mjs.map +1 -1
- package/fesm2022/acorex-core-icon.mjs +3 -3
- package/fesm2022/acorex-core-icon.mjs.map +1 -1
- package/fesm2022/acorex-core-image.mjs +3 -3
- package/fesm2022/acorex-core-image.mjs.map +1 -1
- package/fesm2022/acorex-core-locale.mjs +12 -12
- package/fesm2022/acorex-core-locale.mjs.map +1 -1
- package/fesm2022/acorex-core-memoize.mjs.map +1 -1
- package/fesm2022/acorex-core-network.mjs +4 -4
- package/fesm2022/acorex-core-network.mjs.map +1 -1
- package/fesm2022/acorex-core-pipes.mjs +3 -3
- package/fesm2022/acorex-core-pipes.mjs.map +1 -1
- package/fesm2022/acorex-core-platform.mjs +5 -5
- package/fesm2022/acorex-core-platform.mjs.map +1 -1
- package/fesm2022/acorex-core-storage.mjs +9 -9
- package/fesm2022/acorex-core-storage.mjs.map +1 -1
- package/fesm2022/acorex-core-translation.mjs +16 -16
- package/fesm2022/acorex-core-translation.mjs.map +1 -1
- package/fesm2022/acorex-core-utils.mjs +6 -4
- package/fesm2022/acorex-core-utils.mjs.map +1 -1
- package/fesm2022/acorex-core-validation.mjs +40 -40
- package/fesm2022/acorex-core-validation.mjs.map +1 -1
- package/fesm2022/acorex-core-z-index.mjs +3 -3
- package/fesm2022/acorex-core-z-index.mjs.map +1 -1
- package/fesm2022/acorex-core.mjs.map +1 -1
- package/package.json +25 -24
- package/{format/index.d.ts → types/acorex-core-format.d.ts} +2 -2
- package/{utils/index.d.ts → types/acorex-core-utils.d.ts} +10 -2
- package/{validation/index.d.ts → types/acorex-core-validation.d.ts} +10 -10
- /package/{components/index.d.ts → types/acorex-core-components.d.ts} +0 -0
- /package/{config/index.d.ts → types/acorex-core-config.d.ts} +0 -0
- /package/{constants/index.d.ts → types/acorex-core-constants.d.ts} +0 -0
- /package/{date-time/index.d.ts → types/acorex-core-date-time.d.ts} +0 -0
- /package/{events/index.d.ts → types/acorex-core-events.d.ts} +0 -0
- /package/{file/index.d.ts → types/acorex-core-file.d.ts} +0 -0
- /package/{full-screen/index.d.ts → types/acorex-core-full-screen.d.ts} +0 -0
- /package/{icon/index.d.ts → types/acorex-core-icon.d.ts} +0 -0
- /package/{image/index.d.ts → types/acorex-core-image.d.ts} +0 -0
- /package/{locale/index.d.ts → types/acorex-core-locale.d.ts} +0 -0
- /package/{memoize/index.d.ts → types/acorex-core-memoize.d.ts} +0 -0
- /package/{network/index.d.ts → types/acorex-core-network.d.ts} +0 -0
- /package/{pipes/index.d.ts → types/acorex-core-pipes.d.ts} +0 -0
- /package/{platform/index.d.ts → types/acorex-core-platform.d.ts} +0 -0
- /package/{storage/index.d.ts → types/acorex-core-storage.d.ts} +0 -0
- /package/{translation/index.d.ts → types/acorex-core-translation.d.ts} +0 -0
- /package/{z-index/index.d.ts → types/acorex-core-z-index.d.ts} +0 -0
- /package/{index.d.ts → types/acorex-core.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-core-date-time.mjs","sources":["../tmp-esm2022/date-time/lib/datetime.types.js","../tmp-esm2022/date-time/lib/gregorian.calendar.js","../tmp-esm2022/date-time/lib/holidays.loader.js","../tmp-esm2022/date-time/lib/solar-hijri.calendar.js","../tmp-esm2022/date-time/lib/calendar.service.js","../tmp-esm2022/date-time/lib/datetime.pipe.js","../tmp-esm2022/date-time/lib/formatters/date.formatter.js","../tmp-esm2022/date-time/lib/formatters/datetime.formatter.js","../tmp-esm2022/date-time/lib/formatters/time-duration.formatter.js","../tmp-esm2022/date-time/lib/formatters/time.formatter.js","../tmp-esm2022/date-time/lib/formatters/timeleft.formatter.js","../tmp-esm2022/date-time/lib/datetime.module.js","../tmp-esm2022/date-time/acorex-core-date-time.js"],"sourcesContent":["import { isBrowser } from '@acorex/core/platform';\nimport { translateSync } from '@acorex/core/translation';\nimport { defaults, orderBy } from 'lodash-es';\nexport class AXCalendar {\n /**\n * @ignore\n */\n constructor(config) {\n this._config = config;\n }\n get weekend() {\n return this._config.weekend;\n }\n // public get formats(): AXDateTimeDisplayFormats {\n // return this._config.formats;\n // }\n get weekdays() {\n return this._config.weekdays;\n }\n /**\n * Updates week layout settings (column order and weekend days).\n */\n applyWeekConfig(config) {\n this._config = { ...this._config, ...config };\n }\n /**\n * Returns the 0-based weekday index used for week layout (0 = Sunday … 6 = Saturday).\n */\n weekdayIndex(date) {\n return this.dayOfWeek(date) - 1;\n }\n}\nexport class AXDateTime {\n get date() {\n return this._date;\n }\n get calendar() {\n return this._calendar;\n }\n constructor(value, calendar) {\n //TODO: remove unused items\n this._formatKeys = {\n // 0 1 ... 58 59\n s: () => this.date.getSeconds().toString(),\n // 00 01 ... 58 59\n ss: () => this.pad(this.date.getSeconds(), 2),\n // 0 1 ... 5 6 day of week ***\n d: () => (this.calendar.dayOfWeek(this.date) - 1).toString(),\n // Su Mo ... Fr Sa ***\n dd: () => translateSync(`@acorex:dateTime.weekdays.short.${this.weekdayIndex}`),\n ddd: () => translateSync(`@acorex:dateTime.weekdays.short.${this.weekdayIndex}`),\n // Sunday Monday ... Friday Saturday\n dddd: () => translateSync(`@acorex:dateTime.weekdays.long.${this.weekdayIndex}`),\n // 1 2 ... 30 31\n D: () => this.calendar.dayOfMonth(this.date).toString(),\n // 01 02 ... 30 31 day of month\n DD: () => this.pad(this.calendar.dayOfMonth(this.date), 2),\n // 1 2 ... 364 365\n DDD: () => this.calendar.dayOfYear(this.date).toString(),\n // 001 002 ... 364 365 day of year\n DDDD: () => this.pad(this.calendar.dayOfYear(this.date), 3),\n // 1 2 ... 52 53\n w: () => this.calendar.weekOfYear(this.date).toString(),\n // 01 02 ... 52 53\n ww: () => this.pad(this.calendar.weekOfYear(this.date), 2),\n // 1 2 ... 11 12\n M: () => this.calendar.monthOfYear(this.date).toString(),\n // 01 02 ... 11 12\n MM: () => this.pad(this.calendar.monthOfYear(this.date), 2),\n // Jan Feb ... Nov Dec\n MMM: () => translateSync(`@acorex:dateTime.months.${this.calendar.name()}.short.${this.calendar.monthOfYear(this.date) - 1}`),\n // January February ... November December\n MMMM: () => translateSync(`@acorex:dateTime.months.${this.calendar.name()}.long.${this.calendar.monthOfYear(this.date) - 1}`),\n // 1 2 ... 7\n E: () => this.calendar.dayOfWeek(this.date).toString(),\n // 01 02 ... 07\n EE: () => this.pad(this.calendar.dayOfWeek(this.date), 2),\n // Sun Mon ... Sat\n EEE: () => translateSync(`@acorex:dateTime.weekdays.short.${this.weekdayIndex}`),\n // Sunday Monday ... Saturday\n EEEE: () => translateSync(`@acorex:dateTime.weekdays.long.${this.weekdayIndex}`),\n // 1 2 ... 2020 ...\n y: () => this.calendar.year(this.date).toString(),\n // 70 71 ... 29 30\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 // 1970 1971 ... 2029 2030\n yyyy: () => this.pad(this.calendar.year(this.date), 4),\n YYYY: () => this.pad(this.calendar.year(this.date), 4),\n // 0 1 ... 58 59\n m: () => this.date.getMinutes().toString(),\n // 00 01 ... 58 59\n mm: () => this.pad(this.date.getMinutes(), 2),\n // 0 1 ... 11 12\n h: () => (this.date.getHours() % 12 || 12).toString(),\n // 00 01 ... 11 12\n hh: () => this.pad(this.date.getHours() % 12 || 12, 2),\n // 0 1 ... 23 24\n H: () => this.date.getHours().toString(),\n // 00 01 ... 23 24\n HH: () => this.pad(this.date.getHours(), 2),\n // TODO: i18n\n // AM PM\n A: () => (this.date.getHours() < 12 ? 'AM' : 'PM').toUpperCase(),\n // am pm\n a: () => (this.date.getHours() < 12 ? 'am' : 'pm').toLowerCase(),\n // TODO: review\n Z: () => '',\n ZZZZ: () => '',\n //\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 this._language = () => (isBrowser() ? navigator.language : 'en-US');\n this._calendar = calendar;\n this._date = value;\n }\n clone() {\n return new AXDateTime(this.date, this.calendar);\n }\n get dayOfMonth() {\n return this._calendar.dayOfMonth(this.date);\n }\n get dayOfYear() {\n return this._calendar.dayOfYear(this.date);\n }\n get dayOfWeek() {\n return this._calendar.dayOfWeek(this.date);\n }\n get weekdayIndex() {\n return this._calendar.weekdayIndex(this.date);\n }\n get hour() {\n return this._date.getHours();\n }\n get minute() {\n return this._date.getMinutes();\n }\n get second() {\n return this._date.getSeconds();\n }\n get year() {\n return this._calendar.year(this.date);\n }\n get monthOfYear() {\n return this._calendar.monthOfYear(this.date);\n }\n get weekOfYear() {\n return this._calendar.weekOfYear(this.date);\n }\n get month() {\n return new AXCalendarMonth(this);\n }\n add(unit, amount) {\n return this._calendar.add(this.date, unit, amount);\n }\n set(unit = 'day', value) {\n return this._calendar.set(this.date, unit, value);\n }\n duration(end) {\n const date = end instanceof AXDateTime ? end.date : end;\n const val = new AXDateTime(date, this.calendar);\n const range = new AXDateTimeRange(this, val);\n return range.duration();\n }\n startOf(unit = 'day') {\n return this._calendar.startOf(this.date, unit);\n }\n endOf(unit = 'day') {\n return this._calendar.endOf(this.date, unit);\n }\n format(format = this.getDateTimeFormatByLocale(this._language(), 'shortDate'), options) {\n const effectiveOptions = defaults({}, options, {\n locale: this._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 if (f && typeof f === 'function') {\n const r = f(effectiveOptions);\n return r;\n }\n return matched;\n });\n }\n getDateTimeFormatByLocale(locale, style) {\n let options = {};\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 = {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n };\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 = {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n };\n break;\n }\n const formatter = new Intl.DateTimeFormat(locale, options);\n // Get parts of the date and/or time\n const parts = formatter.formatToParts(new Date());\n // Map parts to their respective format\n const formatMap = {\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 // 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 }\n else {\n return formatMap[part.type] || part.value;\n }\n })\n .join('');\n }\n 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 equal(value, unit = 'day') {\n return this.compare(value, unit) == 0;\n }\n compare(value, unit = 'day') {\n const date = value instanceof AXDateTime ? value.date : value;\n const val = new AXDateTime(date, this.calendar);\n const func = (v1, v2) => {\n if (v1 == v2) {\n return 0;\n }\n else if (v1 > v2) {\n return 1;\n }\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 case 'ms':\n default:\n return func(this.date?.getTime(), val.date?.getTime());\n }\n }\n /**\n * Checks if the current date is after the provided date.\n * @param value The date to compare against.\n * @param unit The unit of measurement for comparison (e.g., 'day', 'hour'). Defaults to 'ms' for precise comparison.\n * @returns `true` if the current date is after the provided date, otherwise `false`.\n */\n isAfter(value, unit = 'ms') {\n // A date is \"after\" if the comparison result is 1.\n return this.compare(value, unit) === 1;\n }\n /**\n * Checks if the current date is before the provided date.\n * @param value The date to compare against.\n * @param unit The unit of measurement for comparison (e.g., 'day', 'hour'). Defaults to 'ms' for precise comparison.\n * @returns `true` if the current date is before the provided date, otherwise `false`.\n */\n isBefore(value, unit = 'ms') {\n // A date is \"before\" if the comparison result is -1.\n return this.compare(value, unit) === -1;\n }\n /**\n * Checks if the current date is the same as the provided date, up to a specified unit.\n * @param value The date to compare against.\n * @param unit The unit of measurement for comparison (e.g., 'day', 'hour'). Defaults to 'ms' for precise comparison.\n * @returns `true` if the dates are the same for the given unit, otherwise `false`.\n */\n isSame(value, unit = 'ms') {\n // Dates are \"the same\" if the comparison result is 0.\n return this.compare(value, unit) === 0;\n }\n}\nexport class AXCalendarMonth {\n get range() {\n return this._range;\n }\n set range(v) {\n this._range = v;\n }\n get totalDays() {\n return this.range.endTime.dayOfMonth;\n }\n constructor(date) {\n this.index = date.date.getMonth();\n this.name = date.format('MMMM');\n this.range = new AXDateTimeRange(new AXDateTime(date.startOf('month').date, date.calendar), new AXDateTime(date.endOf('month').date, date.calendar));\n }\n}\nexport class AXDateTimeRange {\n get startTime() {\n return this._startTime;\n }\n get endTime() {\n return this._endTime;\n }\n constructor(startTime, endTime) {\n this._startTime = startTime;\n this._endTime = endTime;\n }\n duration() {\n const result = {\n miliseconds: 0,\n seconds: 0,\n minutes: 0,\n hours: 0,\n days: 0,\n // NOTE: Calculating exact calendar months/years component is complex\n // from milliseconds alone. We'll set these to 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 // NOTE: total.months and total.years are approximate based on average lengths\n months: 0,\n years: 0,\n },\n };\n // Constants for time units in milliseconds\n const ONE_MILLISECOND = 1;\n const ONE_SECOND = 1000 * ONE_MILLISECOND;\n const ONE_MINUTE = 60 * ONE_SECOND;\n const ONE_HOUR = 60 * ONE_MINUTE;\n const ONE_DAY = 24 * ONE_HOUR;\n const ONE_WEEK = 7 * ONE_DAY;\n // Average lengths for approximate total months/years\n const ONE_YEAR_AVG = 365.25 * ONE_DAY;\n const ONE_MONTH_AVG = ONE_YEAR_AVG / 12;\n const startTime = this._startTime.date?.getTime();\n const endTime = this._endTime.date?.getTime();\n // Calculate the absolute difference in milliseconds\n const diff = Math.abs(endTime - startTime);\n // --- Calculate Total Durations ---\n result.total.miliseconds = diff;\n result.total.seconds = diff / ONE_SECOND;\n result.total.minutes = diff / ONE_MINUTE;\n result.total.hours = diff / ONE_HOUR;\n result.total.days = diff / ONE_DAY; // Includes fractional days\n result.total.weeks = diff / ONE_WEEK; // Includes fractional weeks\n result.total.months = diff / ONE_MONTH_AVG; // Approximate\n result.total.years = diff / ONE_YEAR_AVG; // Approximate\n // --- Calculate Component Parts ---\n let remainingMillis = diff;\n // Calculate full days and update remaining milliseconds\n result.days = Math.floor(remainingMillis / ONE_DAY);\n remainingMillis %= ONE_DAY; // Get the remainder milliseconds after taking out full days\n // Calculate full hours from the remainder\n result.hours = Math.floor(remainingMillis / ONE_HOUR);\n remainingMillis %= ONE_HOUR; // Get the remainder milliseconds after taking out full hours\n // Calculate full minutes from the remainder\n result.minutes = Math.floor(remainingMillis / ONE_MINUTE);\n remainingMillis %= ONE_MINUTE; // Get the remainder milliseconds after taking out full minutes\n // Calculate full seconds from the remainder\n result.seconds = Math.floor(remainingMillis / ONE_SECOND);\n remainingMillis %= ONE_SECOND; // Get the remainder milliseconds after taking out full seconds\n // The final remainder is the milliseconds component\n result.miliseconds = remainingMillis;\n // As noted above, setting month/year components to 0 as accurate\n // calendar-aware calculation is not implemented here.\n result.months = 0;\n result.years = 0;\n return result;\n }\n enumerate(unit = 'day', amount = 1) {\n const result = [];\n let item = this._startTime.clone();\n while (item.compare(this._endTime, unit) <= 0) {\n result.push(item);\n item = item.add(unit, amount);\n }\n return result;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL2RhdGUtdGltZS9zcmMvbGliL2RhdGV0aW1lLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUF3RDlDLE1BQU0sT0FBZ0IsVUFBVTtJQUc5Qjs7T0FFRztJQUNILFlBQVksTUFBd0I7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQzlCLENBQUM7SUFFRCxtREFBbUQ7SUFDbkQsaUNBQWlDO0lBQ2pDLElBQUk7SUFFSixJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlLENBQUMsTUFBaUM7UUFDdEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQ2hELENBQUM7SUE2QkQ7O09BRUc7SUFDSSxZQUFZLENBQUMsSUFBVTtRQUM1QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Q0FzRUY7QUFFRCxNQUFNLE9BQU8sVUFBVTtJQUdyQixJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUdELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFD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LENBQUM7UUFDMUQsZUFBZSxJQUFJLFVBQVUsQ0FBQyxDQUFDLCtEQUErRDtRQUU5RixvREFBb0Q7UUFDcEQsTUFBTSxDQUFDLFdBQVcsR0FBRyxlQUFlLENBQUM7UUFFckMsaUVBQWlFO1FBQ2pFLHNEQUFzRDtRQUN0RCxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNsQixNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUVqQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQWlCLEtBQUssRUFBRSxNQUFNLEdBQUcsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBaUIsRUFBRSxDQUFDO1FBQ2hDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDOUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzQnJvd3NlciB9IGZyb20gJ0BhY29yZXgvY29yZS9wbGF0Zm9ybSc7XG5pbXBvcnQgeyB0cmFuc2xhdGVTeW5jIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IGRlZmF1bHRzLCBvcmRlckJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcblxuZXhwb3J0IHR5cGUgVGltZVVuaXQgPSAnbXMnIHwgJ3NlY29uZCcgfCAnbWludXRlJyB8ICdob3VyJyB8ICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJyB8ICd3ZWVrJztcblxuZXhwb3J0IGludGVyZmFjZSBBWERhdGVWYWx1ZSB7XG4gIHllYXI6IG51bWJlcjtcbiAgbW9udGg6IG51bWJlcjtcbiAgZGF5OiBudW1iZXI7XG4gIGhvdXJzPzogbnVtYmVyO1xuICBtaW51dGVzPzogbnVtYmVyO1xuICBzZWNvbmRzPzogbnVtYmVyO1xuICBtcz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWERhdGVUaW1lRGlzcGxheUZvcm1hdHMge1xuICBkYXRlSW5wdXQ6IHN0cmluZztcbiAgdGltZUlucHV0OiBzdHJpbmc7XG4gIGRhdGVUaW1lSW5wdXQ6IHN0cmluZztcbiAgZGF0ZURpc3BsYXk6IHN0cmluZztcbiAgdGltZURpc3BsYXk6IHN0cmluZztcbiAgZGF0ZVRpbWVEaXNwbGF5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIEFYRGF0ZVRpbWVVbml0TmFtZXMgPSB7XG4gIGxvbmc6IHN0cmluZztcbiAgc2hvcnQ6IHN0cmluZztcbiAgbGV0dGVyOiBzdHJpbmc7XG59W107XG5cbmV4cG9ydCB0eXBlIEFYRGF0ZVRpbWVQYXJ0ID0ge1xuICBrZXk6IHN0cmluZztcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgcGxhY2Vob2xkZXJzOiBzdHJpbmdbXTtcbiAgdHlwZWRWYWx1ZT86IHN0cmluZyB8IG51bGw7XG4gIGRlZmF1bHQ6IG51bWJlcjtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgcmVhbFZhbHVlOiAoKSA9PiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBBWERhdGVUaW1lUGFydHMgPSB7XG4gIHllYXI6IEFYRGF0ZVRpbWVQYXJ0O1xuICBtb250aDogQVhEYXRlVGltZVBhcnQ7XG4gIGRheTogQVhEYXRlVGltZVBhcnQ7XG4gIGhvdXI6IEFYRGF0ZVRpbWVQYXJ0O1xuICBtaW51dGU6IEFYRGF0ZVRpbWVQYXJ0O1xuICBzZWNvbmQ6IEFYRGF0ZVRpbWVQYXJ0O1xuICBBTVBNOiBBWERhdGVUaW1lUGFydDtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhDYWxlbmRhckNvbmZpZyB7XG4gIHdlZWtkYXlzOiBudW1iZXJbXTtcbiAgd2Vla2VuZDogbnVtYmVyW107XG59XG5cbmV4cG9ydCB0eXBlIEFYVmFsaWREYXRlVGltZVZhbHVlID0gQVhEYXRlVGltZSB8IERhdGUgfCBzdHJpbmcgfCBBWERhdGVWYWx1ZTtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFYQ2FsZW5kYXIge1xuICBwcml2YXRlIF9jb25maWc6IEFYQ2FsZW5kYXJDb25maWc7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQVhDYWxlbmRhckNvbmZpZykge1xuICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgd2Vla2VuZCgpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy53ZWVrZW5kO1xuICB9XG5cbiAgLy8gcHVibGljIGdldCBmb3JtYXRzKCk6IEFYRGF0ZVRpbWVEaXNwbGF5Rm9ybWF0cyB7XG4gIC8vICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5mb3JtYXRzO1xuICAvLyB9XG5cbiAgcHVibGljIGdldCB3ZWVrZGF5cygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy53ZWVrZGF5cztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHdlZWsgbGF5b3V0IHNldHRpbmdzIChjb2x1bW4gb3JkZXIgYW5kIHdlZWtlbmQgZGF5cykuXG4gICAqL1xuICBwdWJsaWMgYXBwbHlXZWVrQ29uZmlnKGNvbmZpZzogUGFydGlhbDxBWENhbGVuZGFyQ29uZmlnPik6IHZvaWQge1xuICAgIHRoaXMuX2NvbmZpZyA9IHsgLi4udGhpcy5fY29uZmlnLCAuLi5jb25maWcgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjYWxlbmRhciBzeXN0ZW0uXG4gICAqIEByZXR1cm5zIFRoZSBjYWxlbmRhciBzeXN0ZW0gbmFtZSAoZS5nLiwgJ2dyZWdvcmlhbicsICdwZXJzaWFuJywgJ2lzbGFtaWMnKS5cbiAgICovXG4gIGFic3RyYWN0IG5hbWUoKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkYXkgb2YgdGhlIG1vbnRoIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAgICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBnZXQgdGhlIGRheSBvZiBtb250aCBmcm9tLlxuICAgKiBAcmV0dXJucyBUaGUgZGF5IG9mIHRoZSBtb250aCAoMS0zMSkuXG4gICAqL1xuICBhYnN0cmFjdCBkYXlPZk1vbnRoKGRhdGU6IERhdGUpOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRheSBvZiB0aGUgeWVhciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gICAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gZ2V0IHRoZSBkYXkgb2YgeWVhciBmcm9tLlxuICAgKiBAcmV0dXJucyBUaGUgZGF5IG9mIHRoZSB5ZWFyICgxLTM2NS8zNjYpLlxuICAgKi9cbiAgYWJzdHJhY3QgZGF5T2ZZZWFyKGRhdGU6IERhdGUpOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRheSBvZiB0aGUgd2VlayBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gICAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gZ2V0IHRoZSBkYXkgb2Ygd2VlayBmcm9tLlxuICAgKiBAcmV0dXJucyBUaGUgZGF5IG9mIHRoZSB3ZWVrICgxLTcpLlxuICAgKi9cbiAgYWJzdHJhY3QgZGF5T2ZXZWVrKGRhdGU6IERhdGUpOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIDAtYmFzZWQgd2Vla2RheSBpbmRleCB1c2VkIGZvciB3ZWVrIGxheW91dCAoMCA9IFN1bmRheSDigKYgNiA9IFNhdHVyZGF5KS5cbiAgICovXG4gIHB1YmxpYyB3ZWVrZGF5SW5kZXgoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZGF5T2ZXZWVrKGRhdGUpIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBtb250aCBvZiB0aGUgeWVhciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gICAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gZ2V0IHRoZSBtb250aCBmcm9tLlxuICAgKiBAcmV0dXJucyBUaGUgbW9udGggb2YgdGhlIHllYXIgKDEtMTIpLlxuICAgKi9cbiAgYWJzdHJhY3QgbW9udGhPZlllYXIoZGF0ZTogRGF0ZSk6IG51bWJlcjtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2VlayBvZiB0aGUgeWVhciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gICAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gZ2V0IHRoZSB3ZWVrIGZyb20uXG4gICAqIEByZXR1cm5zIFRoZSB3ZWVrIG9mIHRoZSB5ZWFyICgxLTUyLzUzKS5cbiAgICovXG4gIGFic3RyYWN0IHdlZWtPZlllYXIoZGF0ZTogRGF0ZSk6IG51bWJlcjtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgeWVhciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gICAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gZ2V0IHRoZSB5ZWFyIGZyb20uXG4gICAqIEByZXR1cm5zIFRoZSB5ZWFyLlxuICAgKi9cbiAgYWJzdHJhY3QgeWVhcihkYXRlOiBEYXRlKTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgc3BlY2lmaWVkIGFtb3VudCBvZiB0aW1lIHVuaXRzIHRvIHRoZSBnaXZlbiBkYXRlLlxuICAgKiBAcGFyYW0gZGF0ZSAtIFRoZSBiYXNlIGRhdGUuXG4gICAqIEBwYXJhbSB1bml0IC0gVGhlIHRpbWUgdW5pdCB0byBhZGQgKGRheSwgbW9udGgsIHllYXIsIGV0Yy4pLlxuICAgKiBAcGFyYW0gYW1vdW50IC0gVGhlIGFtb3VudCB0byBhZGQuXG4gICAqIEByZXR1cm5zIEEgbmV3IEFYRGF0ZVRpbWUgaW5zdGFuY2Ugd2l0aCB0aGUgYWRkZWQgdGltZS5cbiAgICovXG4gIGFic3RyYWN0IGFkZChkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCwgYW1vdW50OiBudW1iZXIpOiBBWERhdGVUaW1lO1xuXG4gIC8qKlxuICAgKiBTZXRzIGEgc3BlY2lmaWMgdGltZSB1bml0IHRvIGEgZ2l2ZW4gdmFsdWUuXG4gICAqIEBwYXJhbSBkYXRlIC0gVGhlIGJhc2UgZGF0ZS5cbiAgICogQHBhcmFtIHVuaXQgLSBUaGUgdGltZSB1bml0IHRvIHNldCAoZGF5LCBtb250aCwgeWVhciwgZXRjLikuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSB0aW1lIHVuaXQuXG4gICAqIEByZXR1cm5zIEEgbmV3IEFYRGF0ZVRpbWUgaW5zdGFuY2Ugd2l0aCB0aGUgc2V0IHRpbWUgdW5pdC5cbiAgICovXG4gIGFic3RyYWN0IHNldChkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCwgdmFsdWU6IG51bWJlcik6IEFYRGF0ZVRpbWU7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN0YXJ0IG9mIHRoZSBzcGVjaWZpZWQgdGltZSB1bml0IGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAgICogQHBhcmFtIGRhdGUgLSBUaGUgYmFzZSBkYXRlLlxuICAgKiBAcGFyYW0gdW5pdCAtIFRoZSB0aW1lIHVuaXQgdG8gZ2V0IHRoZSBzdGFydCBvZiAoZGF5LCBtb250aCwgeWVhciwgZXRjLikuXG4gICAqIEByZXR1cm5zIEEgbmV3IEFYRGF0ZVRpbWUgaW5zdGFuY2UgcmVwcmVzZW50aW5nIHRoZSBzdGFydCBvZiB0aGUgdGltZSB1bml0LlxuICAgKi9cbiAgYWJzdHJhY3Qgc3RhcnRPZihkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCk6IEFYRGF0ZVRpbWU7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVuZCBvZiB0aGUgc3BlY2lmaWVkIHRpbWUgdW5pdCBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gICAqIEBwYXJhbSBkYXRlIC0gVGhlIGJhc2UgZGF0ZS5cbiAgICogQHBhcmFtIHVuaXQgLSBUaGUgdGltZSB1bml0IHRvIGdldCB0aGUgZW5kIG9mIChkYXksIG1vbnRoLCB5ZWFyLCBldGMuKS5cbiAgICogQHJldHVybnMgQSBuZXcgQVhEYXRlVGltZSBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlIGVuZCBvZiB0aGUgdGltZSB1bml0LlxuICAgKi9cbiAgYWJzdHJhY3QgZW5kT2YoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQpOiBBWERhdGVUaW1lO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEFYRGF0ZVRpbWUgaW5zdGFuY2UgZnJvbSBhbiBBWERhdGVWYWx1ZSBvYmplY3QuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBkYXRlIHZhbHVlIG9iamVjdCBjb250YWluaW5nIGRhdGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIEEgbmV3IEFYRGF0ZVRpbWUgaW5zdGFuY2UuXG4gICAqL1xuICBhYnN0cmFjdCBjcmVhdGUodmFsdWU6IEFYRGF0ZVZhbHVlKTogQVhEYXRlVGltZTtcblxuICAvKipcbiAgICogUGFyc2VzIGEgZGF0ZSBzdHJpbmcgYW5kIHJldHVybnMgYSBuZXcgQVhEYXRlVGltZSBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGRhdGUgc3RyaW5nIHRvIHBhcnNlLlxuICAgKiBAcmV0dXJucyBBIG5ldyBBWERhdGVUaW1lIGluc3RhbmNlLlxuICAgKi9cbiAgYWJzdHJhY3QgcGFyc2UodmFsdWU6IHN0cmluZyk6IEFYRGF0ZVRpbWU7XG59XG5cbmV4cG9ydCBjbGFzcyBBWERhdGVUaW1lIHtcbiAgcHJpdmF0ZSBfZGF0ZTogRGF0ZTtcblxuICBnZXQgZGF0ZSgpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2NhbGVuZGFyOiBBWENhbGVuZGFyO1xuICBnZXQgY2FsZW5kYXIoKTogQVhDYWxlbmRhciB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyO1xuICB9XG5cbiAgY29uc3RydWN0b3IodmFsdWU6IERhdGUsIGNhbGVuZGFyOiBBWENhbGVuZGFyKSB7XG4gICAgdGhpcy5fY2FsZW5kYXIgPSBjYWxlbmRhcjtcbiAgICB0aGlzLl9kYXRlID0gdmFsdWU7XG4gIH1cblxuICBjbG9uZSgpOiBBWERhdGVUaW1lIHtcbiAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUodGhpcy5kYXRlLCB0aGlzLmNhbGVuZGFyKTtcbiAgfVxuXG4gIGdldCBkYXlPZk1vbnRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mTW9udGgodGhpcy5kYXRlKTtcbiAgfVxuXG4gIGdldCBkYXlPZlllYXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZZZWFyKHRoaXMuZGF0ZSk7XG4gIH1cblxuICBnZXQgZGF5T2ZXZWVrKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mV2Vlayh0aGlzLmRhdGUpO1xuICB9XG5cbiAgZ2V0IHdlZWtkYXlJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci53ZWVrZGF5SW5kZXgodGhpcy5kYXRlKTtcbiAgfVxuXG4gIGdldCBob3VyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGUuZ2V0SG91cnMoKTtcbiAgfVxuXG4gIGdldCBtaW51dGUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0ZS5nZXRNaW51dGVzKCk7XG4gIH1cblxuICBnZXQgc2Vjb25kKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGUuZ2V0U2Vjb25kcygpO1xuICB9XG5cbiAgZ2V0IHllYXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIueWVhcih0aGlzLmRhdGUpO1xuICB9XG5cbiAgZ2V0IG1vbnRoT2ZZZWFyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSk7XG4gIH1cblxuICBnZXQgd2Vla09mWWVhcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci53ZWVrT2ZZZWFyKHRoaXMuZGF0ZSk7XG4gIH1cblxuICBnZXQgbW9udGgoKTogQVhDYWxlbmRhck1vbnRoIHtcbiAgICByZXR1cm4gbmV3IEFYQ2FsZW5kYXJNb250aCh0aGlzKTtcbiAgfVxuXG4gIGFkZCh1bml0OiBUaW1lVW5pdCwgYW1vdW50OiBudW1iZXIpOiBBWERhdGVUaW1lIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIuYWRkKHRoaXMuZGF0ZSwgdW5pdCwgYW1vdW50KTtcbiAgfVxuXG4gIHNldCh1bml0OiBUaW1lVW5pdCA9ICdkYXknLCB2YWx1ZTogbnVtYmVyKTogQVhEYXRlVGltZSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLnNldCh0aGlzLmRhdGUsIHVuaXQsIHZhbHVlKTtcbiAgfVxuXG4gIGR1cmF0aW9uKGVuZDogRGF0ZSB8IEFYRGF0ZVRpbWUpOiBBWFRpbWVTcGFuIHtcbiAgICBjb25zdCBkYXRlID0gZW5kIGluc3RhbmNlb2YgQVhEYXRlVGltZSA/IGVuZC5kYXRlIDogKGVuZCBhcyBEYXRlKTtcbiAgICBjb25zdCB2YWwgPSBuZXcgQVhEYXRlVGltZShkYXRlLCB0aGlzLmNhbGVuZGFyKTtcbiAgICBjb25zdCByYW5nZSA9IG5ldyBBWERhdGVUaW1lUmFuZ2UodGhpcywgdmFsKTtcbiAgICByZXR1cm4gcmFuZ2UuZHVyYXRpb24oKTtcbiAgfVxuXG4gIHN0YXJ0T2YodW5pdDogVGltZVVuaXQgPSAnZGF5Jyk6IEFYRGF0ZVRpbWUge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci5zdGFydE9mKHRoaXMuZGF0ZSwgdW5pdCk7XG4gIH1cblxuICBlbmRPZih1bml0OiBUaW1lVW5pdCA9ICdkYXknKTogQVhEYXRlVGltZSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLmVuZE9mKHRoaXMuZGF0ZSwgdW5pdCk7XG4gIH1cblxuICAvL1RPRE86IHJlbW92ZSB1bnVzZWQgaXRlbXNcbiAgcHJpdmF0ZSBfZm9ybWF0S2V5cyA9IHtcbiAgICAvLyAwIDEgLi4uIDU4IDU5XG4gICAgczogKCkgPT4gdGhpcy5kYXRlLmdldFNlY29uZHMoKS50b1N0cmluZygpLFxuICAgIC8vIDAwIDAxIC4uLiA1OCA1OVxuICAgIHNzOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmRhdGUuZ2V0U2Vjb25kcygpLCAyKSxcblxuICAgIC8vIDAgMSAuLi4gNSA2IGRheSBvZiB3ZWVrICoqKlxuICAgIGQ6ICgpID0+ICh0aGlzLmNhbGVuZGFyLmRheU9mV2Vlayh0aGlzLmRhdGUpIC0gMSkudG9TdHJpbmcoKSxcbiAgICAvLyAgU3UgTW8gLi4uIEZyIFNhICoqKlxuICAgIGRkOiAoKSA9PiB0cmFuc2xhdGVTeW5jKGBAYWNvcmV4OmRhdGVUaW1lLndlZWtkYXlzLnNob3J0LiR7dGhpcy53ZWVrZGF5SW5kZXh9YCksXG4gICAgZGRkOiAoKSA9PiB0cmFuc2xhdGVTeW5jKGBAYWNvcmV4OmRhdGVUaW1lLndlZWtkYXlzLnNob3J0LiR7dGhpcy53ZWVrZGF5SW5kZXh9YCksXG4gICAgLy8gU3VuZGF5IE1vbmRheSAuLi4gRnJpZGF5IFNhdHVyZGF5XG4gICAgZGRkZDogKCkgPT4gdHJhbnNsYXRlU3luYyhgQGFjb3JleDpkYXRlVGltZS53ZWVrZGF5cy5sb25nLiR7dGhpcy53ZWVrZGF5SW5kZXh9YCksXG5cbiAgICAvLyAxIDIgLi4uIDMwIDMxXG4gICAgRDogKCkgPT4gdGhpcy5jYWxlbmRhci5kYXlPZk1vbnRoKHRoaXMuZGF0ZSkudG9TdHJpbmcoKSxcbiAgICAvLyAwMSAwMiAuLi4gMzAgMzEgZGF5IG9mIG1vbnRoXG4gICAgREQ6ICgpID0+IHRoaXMucGFkKHRoaXMuY2FsZW5kYXIuZGF5T2ZNb250aCh0aGlzLmRhdGUpLCAyKSxcbiAgICAvLyAxIDIgLi4uIDM2NCAzNjVcbiAgICBEREQ6ICgpID0+IHRoaXMuY2FsZW5kYXIuZGF5T2ZZZWFyKHRoaXMuZGF0ZSkudG9TdHJpbmcoKSxcbiAgICAvLyAwMDEgMDAyIC4uLiAzNjQgMzY1IGRheSBvZiB5ZWFyXG4gICAgRERERDogKCkgPT4gdGhpcy5wYWQodGhpcy5jYWxlbmRhci5kYXlPZlllYXIodGhpcy5kYXRlKSwgMyksXG5cbiAgICAvLyAxIDIgLi4uIDUyIDUzXG4gICAgdzogKCkgPT4gdGhpcy5jYWxlbmRhci53ZWVrT2ZZZWFyKHRoaXMuZGF0ZSkudG9TdHJpbmcoKSxcbiAgICAvLyAwMSAwMiAuLi4gNTIgNTNcbiAgICB3dzogKCkgPT4gdGhpcy5wYWQodGhpcy5jYWxlbmRhci53ZWVrT2ZZZWFyKHRoaXMuZGF0ZSksIDIpLFxuXG4gICAgLy8gMSAyIC4uLiAxMSAxMlxuICAgIE06ICgpID0+IHRoaXMuY2FsZW5kYXIubW9udGhPZlllYXIodGhpcy5kYXRlKS50b1N0cmluZygpLFxuICAgIC8vIDAxIDAyIC4uLiAxMSAxMlxuICAgIE1NOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmNhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSksIDIpLFxuICAgIC8vIEphbiBGZWIgLi4uIE5vdiBEZWNcbiAgICBNTU06ICgpID0+XG4gICAgICB0cmFuc2xhdGVTeW5jKFxuICAgICAgICBgQGFjb3JleDpkYXRlVGltZS5tb250aHMuJHt0aGlzLmNhbGVuZGFyLm5hbWUoKX0uc2hvcnQuJHt0aGlzLmNhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSkgLSAxfWAsXG4gICAgICApLFxuICAgIC8vIEphbnVhcnkgRmVicnVhcnkgLi4uIE5vdmVtYmVyIERlY2VtYmVyXG4gICAgTU1NTTogKCkgPT5cbiAgICAgIHRyYW5zbGF0ZVN5bmMoYEBhY29yZXg6ZGF0ZVRpbWUubW9udGhzLiR7dGhpcy5jYWxlbmRhci5uYW1lKCl9LmxvbmcuJHt0aGlzLmNhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSkgLSAxfWApLFxuXG4gICAgLy8gMSAyIC4uLiA3XG4gICAgRTogKCkgPT4gdGhpcy5jYWxlbmRhci5kYXlPZldlZWsodGhpcy5kYXRlKS50b1N0cmluZygpLFxuICAgIC8vIDAxIDAyIC4uLiAwN1xuICAgIEVFOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmNhbGVuZGFyLmRheU9mV2Vlayh0aGlzLmRhdGUpLCAyKSxcbiAgICAvLyBTdW4gTW9uIC4uLiBTYXRcbiAgICBFRUU6ICgpID0+IHRyYW5zbGF0ZVN5bmMoYEBhY29yZXg6ZGF0ZVRpbWUud2Vla2RheXMuc2hvcnQuJHt0aGlzLndlZWtkYXlJbmRleH1gKSxcbiAgICAvLyBTdW5kYXkgTW9uZGF5IC4uLiBTYXR1cmRheVxuICAgIEVFRUU6ICgpID0+IHRyYW5zbGF0ZVN5bmMoYEBhY29yZXg6ZGF0ZVRpbWUud2Vla2RheXMubG9uZy4ke3RoaXMud2Vla2RheUluZGV4fWApLFxuXG4gICAgLy8gMSAyIC4uLiAyMDIwIC4uLlxuICAgIHk6ICgpID0+IHRoaXMuY2FsZW5kYXIueWVhcih0aGlzLmRhdGUpLnRvU3RyaW5nKCksXG4gICAgLy8gNzAgNzEgLi4uIDI5IDMwXG4gICAgeXk6ICgpID0+IHRoaXMucGFkKHRoaXMuY2FsZW5kYXIueWVhcih0aGlzLmRhdGUpLCA0KS5zdWJzdHJpbmcoMiksXG4gICAgWVk6ICgpID0+IHRoaXMucGFkKHRoaXMuY2FsZW5kYXIueWVhcih0aGlzLmRhdGUpLCA0KS5zdWJzdHJpbmcoMiksXG4gICAgLy8gMTk3MCAxOTcxIC4uLiAyMDI5IDIwMzBcbiAgICB5eXl5OiAoKSA9PiB0aGlzLnBhZCh0aGlzLmNhbGVuZGFyLnllYXIodGhpcy5kYXRlKSwgNCksXG4gICAgWVlZWTogKCkgPT4gdGhpcy5wYWQodGhpcy5jYWxlbmRhci55ZWFyKHRoaXMuZGF0ZSksIDQpLFxuXG4gICAgLy8gMCAxIC4uLiA1OCA1OVxuICAgIG06ICgpID0+IHRoaXMuZGF0ZS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSxcbiAgICAvLyAwMCAwMSAuLi4gNTggNTlcbiAgICBtbTogKCkgPT4gdGhpcy5wYWQodGhpcy5kYXRlLmdldE1pbnV0ZXMoKSwgMiksXG5cbiAgICAvLyAwIDEgLi4uIDExIDEyXG4gICAgaDogKCkgPT4gKHRoaXMuZGF0ZS5nZXRIb3VycygpICUgMTIgfHwgMTIpLnRvU3RyaW5nKCksXG4gICAgLy8gMDAgMDEgLi4uIDExIDEyXG4gICAgaGg6ICgpID0+IHRoaXMucGFkKHRoaXMuZGF0ZS5nZXRIb3VycygpICUgMTIgfHwgMTIsIDIpLFxuICAgIC8vIDAgMSAuLi4gMjMgMjRcbiAgICBIOiAoKSA9PiB0aGlzLmRhdGUuZ2V0SG91cnMoKS50b1N0cmluZygpLFxuICAgIC8vIDAwIDAxIC4uLiAyMyAyNFxuICAgIEhIOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmRhdGUuZ2V0SG91cnMoKSwgMiksXG5cbiAgICAvLyBUT0RPOiBpMThuXG4gICAgLy8gQU0gUE1cbiAgICBBOiAoKSA9PiAodGhpcy5kYXRlLmdldEhvdXJzKCkgPCAxMiA/ICdBTScgOiAnUE0nKS50b1VwcGVyQ2FzZSgpLFxuICAgIC8vIGFtIHBtXG4gICAgYTogKCkgPT4gKHRoaXMuZGF0ZS5nZXRIb3VycygpIDwgMTIgPyAnYW0nIDogJ3BtJykudG9Mb3dlckNhc2UoKSxcblxuICAgIC8vIFRPRE86IHJldmlld1xuICAgIFo6ICgpID0+ICcnLFxuICAgIFpaWlo6ICgpID0+ICcnLFxuICAgIC8vXG4gICAgZGF0ZTogKG9wdGlvbnMpID0+IHRoaXMuZm9ybWF0KHRoaXMuZ2V0RGF0ZVRpbWVGb3JtYXRCeUxvY2FsZShvcHRpb25zLmxvY2FsZSwgJ3Nob3J0RGF0ZScpKSxcbiAgICBzaG9ydERhdGU6IChvcHRpb25zKSA9PiB0aGlzLmZvcm1hdCh0aGlzLmdldERhdGVUaW1lRm9ybWF0QnlMb2NhbGUob3B0aW9ucy5sb2NhbGUsICdzaG9ydERhdGUnKSksXG4gICAgbG9uZ0RhdGU6IChvcHRpb25zKSA9PiB0aGlzLmZvcm1hdCh0aGlzLmdldERhdGVUaW1lRm9ybWF0QnlMb2NhbGUob3B0aW9ucy5sb2NhbGUsICdsb25nRGF0ZScpKSxcbiAgICAvL1xuICAgIHNob3J0VGltZTogKG9wdGlvbnMpID0+IHRoaXMuZm9ybWF0KHRoaXMuZ2V0RGF0ZVRpbWVGb3JtYXRCeUxvY2FsZShvcHRpb25zLmxvY2FsZSwgJ3Nob3J0VGltZScpKSxcbiAgICB0aW1lOiAob3B0aW9ucykgPT4gdGhpcy5mb3JtYXQodGhpcy5nZXREYXRlVGltZUZvcm1hdEJ5TG9jYWxlKG9wdGlvbnMubG9jYWxlLCAnc2hvcnRUaW1lJykpLFxuICAgIGxvbmdUaW1lOiAob3B0aW9ucykgPT4gdGhpcy5mb3JtYXQodGhpcy5nZXREYXRlVGltZUZvcm1hdEJ5TG9jYWxlKG9wdGlvbnMubG9jYWxlLCAnbG9uZ1RpbWUnKSksXG4gICAgLy9cbiAgICBkYXRldGltZTogKG9wdGlvbnMpID0+IHRoaXMuZm9ybWF0KCdkYXRlIHRpbWUnLCB7IGxvY2FsZTogb3B0aW9ucy5sb2NhbGUgfSksXG4gIH07XG5cbiAgcHJvdGVjdGVkIF9sYW5ndWFnZSA9ICgpID0+IChpc0Jyb3dzZXIoKSA/IG5hdmlnYXRvci5sYW5ndWFnZSA6ICdlbi1VUycpO1xuXG4gIGZvcm1hdChcbiAgICBmb3JtYXQ6IHN0cmluZyA9IHRoaXMuZ2V0RGF0ZVRpbWVGb3JtYXRCeUxvY2FsZSh0aGlzLl9sYW5ndWFnZSgpLCAnc2hvcnREYXRlJyksXG4gICAgb3B0aW9ucz86IHsgbG9jYWxlPzogc3RyaW5nIH0sXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgZWZmZWN0aXZlT3B0aW9ucyA9IGRlZmF1bHRzKHt9LCBvcHRpb25zLCB7XG4gICAgICBsb2NhbGU6IHRoaXMuX2xhbmd1YWdlKCksXG4gICAgfSk7XG4gICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKG9yZGVyQnkoT2JqZWN0LmtleXModGhpcy5fZm9ybWF0S2V5cyksIChjKSA9PiBjLmxlbmd0aCwgWydkZXNjJ10pLmpvaW4oJ3wnKSwgJ2dpJyk7XG4gICAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKHJlLCAobWF0Y2hlZCkgPT4ge1xuICAgICAgY29uc3QgZiA9IHRoaXMuX2Zvcm1hdEtleXNbbWF0Y2hlZF07XG4gICAgICBpZiAoZiAmJiB0eXBlb2YgZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCByID0gZihlZmZlY3RpdmVPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWF0Y2hlZDtcbiAgICB9KTtcbiAgfVxuXG4gIGdldERhdGVUaW1lRm9ybWF0QnlMb2NhbGUobG9jYWxlOiBzdHJpbmcsIHN0eWxlOiAnc2hvcnREYXRlJyB8ICdsb25nRGF0ZScgfCAnc2hvcnRUaW1lJyB8ICdsb25nVGltZScpOiBzdHJpbmcge1xuICAgIGxldCBvcHRpb25zOiBJbnRsLkRhdGVUaW1lRm9ybWF0T3B0aW9ucyA9IHt9O1xuICAgIHN3aXRjaCAoc3R5bGUpIHtcbiAgICAgIGNhc2UgJ3Nob3J0RGF0ZSc6IC8vIFllYXIsIE1vbnRoLCBEYXlcbiAgICAgICAgb3B0aW9ucyA9IHsgeWVhcjogJ251bWVyaWMnLCBtb250aDogJzItZGlnaXQnLCBkYXk6ICcyLWRpZ2l0JyB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xvbmdEYXRlJzogLy8gV2Vla2RheSwgTW9udGggbmFtZSwgRGF5LCBZZWFyXG4gICAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgICAgd2Vla2RheTogJ2xvbmcnLFxuICAgICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgICBtb250aDogJ2xvbmcnLFxuICAgICAgICAgIGRheTogJ251bWVyaWMnLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Nob3J0VGltZSc6IC8vIEhvdXIsIE1pbnV0ZVxuICAgICAgICBvcHRpb25zID0geyBob3VyOiAnMi1kaWdpdCcsIG1pbnV0ZTogJzItZGlnaXQnLCBob3VyMTI6IGZhbHNlIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbG9uZ1RpbWUnOiAvLyBIb3VyLCBNaW51dGUsIFNlY29uZFxuICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBzZWNvbmQ6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBob3VyMTI6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIG9wdGlvbnMpO1xuXG4gICAgLy8gR2V0IHBhcnRzIG9mIHRoZSBkYXRlIGFuZC9vciB0aW1lXG4gICAgY29uc3QgcGFydHMgPSBmb3JtYXR0ZXIuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgpKTtcblxuICAgIC8vIE1hcCBwYXJ0cyB0byB0aGVpciByZXNwZWN0aXZlIGZvcm1hdFxuICAgIGNvbnN0IGZvcm1hdE1hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgIGRheTogJ0REJyxcbiAgICAgIG1vbnRoOiBzdHlsZSA9PSAnbG9uZ0RhdGUnID8gJ01NTU0nIDogJ01NJyxcbiAgICAgIHllYXI6ICd5eXl5JyxcbiAgICAgIGhvdXI6ICdISCcsXG4gICAgICBtaW51dGU6ICdtbScsXG4gICAgICBzZWNvbmQ6ICdzcycsXG4gICAgICB3ZWVrZGF5OiAnRScsXG4gICAgICBsaXRlcmFsOiAnJyxcbiAgICB9O1xuXG4gICAgLy8gQ29uc3RydWN0IHRoZSBkYXRlIGFuZC9vciB0aW1lIGZvcm1hdCBzdHJpbmdcbiAgICByZXR1cm4gcGFydHNcbiAgICAgIC5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgaWYgKHBhcnQudHlwZSA9PT0gJ2xpdGVyYWwnKSB7XG4gICAgICAgICAgLy8gVXNlIHRoZSBsaXRlcmFsIHBhcnQgZGlyZWN0bHkgYXMgc2VwYXJhdG9yXG4gICAgICAgICAgcmV0dXJuIHBhcnQudmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdE1hcFtwYXJ0LnR5cGVdIHx8IHBhcnQudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuam9pbignJyk7XG4gIH1cblxuICBwcml2YXRlIHBhZChuLCB3aWR0aCwgeiA9ICcwJykge1xuICAgIG4gPSBuICsgJyc7XG4gICAgcmV0dXJuIG4ubGVuZ3RoID49IHdpZHRoID8gbiA6IG5ldyBBcnJheSh3aWR0aCAtIG4ubGVuZ3RoICsgMSkuam9pbih6KSArIG47XG4gIH1cblxuICBlcXVhbCh2YWx1ZTogRGF0ZSB8IEFYRGF0ZVRpbWUsIHVuaXQ6IFRpbWVVbml0ID0gJ2RheScpIHtcbiAgICByZXR1cm4gdGhpcy5jb21wYXJlKHZhbHVlLCB1bml0KSA9PSAwO1xuICB9XG5cbiAgY29tcGFyZSh2YWx1ZTogRGF0ZSB8IEFYRGF0ZVRpbWUsIHVuaXQ6IFRpbWVVbml0ID0gJ2RheScpIHtcbiAgICBjb25zdCBkYXRlID0gdmFsdWUgaW5zdGFuY2VvZiBBWERhdGVUaW1lID8gdmFsdWUuZGF0ZSA6ICh2YWx1ZSBhcyBEYXRlKTtcbiAgICBjb25zdCB2YWwgPSBuZXcgQVhEYXRlVGltZShkYXRlLCB0aGlzLmNhbGVuZGFyKTtcbiAgICBjb25zdCBmdW5jID0gKHYxOiBudW1iZXIsIHYyOiBudW1iZXIpID0+IHtcbiAgICAgIGlmICh2MSA9PSB2Mikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSBpZiAodjEgPiB2Mikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGxldCBwID0gMDtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICByZXR1cm4gZnVuYyh0aGlzLnllYXIsIHZhbC55ZWFyKTtcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ3llYXInKTtcbiAgICAgICAgcmV0dXJuIHAgPT0gMCA/IGZ1bmModGhpcy53ZWVrT2ZZZWFyLCB2YWwud2Vla09mWWVhcikgOiBwO1xuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ3llYXInKTtcbiAgICAgICAgcmV0dXJuIHAgPT0gMCA/IGZ1bmModGhpcy5tb250aE9mWWVhciwgdmFsLm1vbnRoT2ZZZWFyKSA6IHA7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ3llYXInKTtcbiAgICAgICAgcmV0dXJuIHAgPT0gMCA/IGZ1bmModGhpcy5kYXlPZlllYXIsIHZhbC5kYXlPZlllYXIpIDogcDtcbiAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ2RheScpO1xuICAgICAgICByZXR1cm4gcCA9PSAwID8gZnVuYyh0aGlzLmhvdXIsIHZhbC5ob3VyKSA6IHA7XG4gICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ2hvdXInKTtcbiAgICAgICAgcmV0dXJuIHAgPT0gMCA/IGZ1bmModGhpcy5taW51dGUsIHZhbC5taW51dGUpIDogcDtcbiAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIHAgPSB0aGlzLmNvbXBhcmUodmFsLCAnbWludXRlJyk7XG4gICAgICAgIHJldHVybiBwID09IDAgPyBmdW5jKHRoaXMuc2Vjb25kLCB2YWwuc2Vjb25kKSA6IHA7XG4gICAgICBjYXNlICdtcyc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZnVuYyh0aGlzLmRhdGU/LmdldFRpbWUoKSwgdmFsLmRhdGU/LmdldFRpbWUoKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgY3VycmVudCBkYXRlIGlzIGFmdGVyIHRoZSBwcm92aWRlZCBkYXRlLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIGRhdGUgdG8gY29tcGFyZSBhZ2FpbnN0LlxuICAgKiBAcGFyYW0gdW5pdCBUaGUgdW5pdCBvZiBtZWFzdXJlbWVudCBmb3IgY29tcGFyaXNvbiAoZS5nLiwgJ2RheScsICdob3VyJykuIERlZmF1bHRzIHRvICdtcycgZm9yIHByZWNpc2UgY29tcGFyaXNvbi5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBjdXJyZW50IGRhdGUgaXMgYWZ0ZXIgdGhlIHByb3ZpZGVkIGRhdGUsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgaXNBZnRlcih2YWx1ZTogQVhEYXRlVGltZSB8IERhdGUsIHVuaXQ6IFRpbWVVbml0ID0gJ21zJyk6IGJvb2xlYW4ge1xuICAgIC8vIEEgZGF0ZSBpcyBcImFmdGVyXCIgaWYgdGhlIGNvbXBhcmlzb24gcmVzdWx0IGlzIDEuXG4gICAgcmV0dXJuIHRoaXMuY29tcGFyZSh2YWx1ZSwgdW5pdCkgPT09IDE7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjdXJyZW50IGRhdGUgaXMgYmVmb3JlIHRoZSBwcm92aWRlZCBkYXRlLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIGRhdGUgdG8gY29tcGFyZSBhZ2FpbnN0LlxuICAgKiBAcGFyYW0gdW5pdCBUaGUgdW5pdCBvZiBtZWFzdXJlbWVudCBmb3IgY29tcGFyaXNvbiAoZS5nLiwgJ2RheScsICdob3VyJykuIERlZmF1bHRzIHRvICdtcycgZm9yIHByZWNpc2UgY29tcGFyaXNvbi5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBjdXJyZW50IGRhdGUgaXMgYmVmb3JlIHRoZSBwcm92aWRlZCBkYXRlLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICovXG4gIGlzQmVmb3JlKHZhbHVlOiBBWERhdGVUaW1lIHwgRGF0ZSwgdW5pdDogVGltZVVuaXQgPSAnbXMnKTogYm9vbGVhbiB7XG4gICAgLy8gQSBkYXRlIGlzIFwiYmVmb3JlXCIgaWYgdGhlIGNvbXBhcmlzb24gcmVzdWx0IGlzIC0xLlxuICAgIHJldHVybiB0aGlzLmNvbXBhcmUodmFsdWUsIHVuaXQpID09PSAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgZGF0ZSBpcyB0aGUgc2FtZSBhcyB0aGUgcHJvdmlkZWQgZGF0ZSwgdXAgdG8gYSBzcGVjaWZpZWQgdW5pdC5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSBkYXRlIHRvIGNvbXBhcmUgYWdhaW5zdC5cbiAgICogQHBhcmFtIHVuaXQgVGhlIHVuaXQgb2YgbWVhc3VyZW1lbnQgZm9yIGNvbXBhcmlzb24gKGUuZy4sICdkYXknLCAnaG91cicpLiBEZWZhdWx0cyB0byAnbXMnIGZvciBwcmVjaXNlIGNvbXBhcmlzb24uXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZGF0ZXMgYXJlIHRoZSBzYW1lIGZvciB0aGUgZ2l2ZW4gdW5pdCwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAqL1xuICBpc1NhbWUodmFsdWU6IEFYRGF0ZVRpbWUgfCBEYXRlLCB1bml0OiBUaW1lVW5pdCA9ICdtcycpOiBib29sZWFuIHtcbiAgICAvLyBEYXRlcyBhcmUgXCJ0aGUgc2FtZVwiIGlmIHRoZSBjb21wYXJpc29uIHJlc3VsdCBpcyAwLlxuICAgIHJldHVybiB0aGlzLmNvbXBhcmUodmFsdWUsIHVuaXQpID09PSAwO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBWENhbGVuZGFyTW9udGgge1xuICBwcml2YXRlIF9yYW5nZTogQVhEYXRlVGltZVJhbmdlO1xuICBwdWJsaWMgZ2V0IHJhbmdlKCk6IEFYRGF0ZVRpbWVSYW5nZSB7XG4gICAgcmV0dXJuIHRoaXMuX3JhbmdlO1xuICB9XG4gIHB1YmxpYyBzZXQgcmFuZ2UodjogQVhEYXRlVGltZVJhbmdlKSB7XG4gICAgdGhpcy5fcmFuZ2UgPSB2O1xuICB9XG5cbiAgcHVibGljIGdldCB0b3RhbERheXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZS5lbmRUaW1lLmRheU9mTW9udGg7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihkYXRlOiBBWERhdGVUaW1lKSB7XG4gICAgdGhpcy5pbmRleCA9IGRhdGUuZGF0ZS5nZXRNb250aCgpO1xuICAgIHRoaXMubmFtZSA9IGRhdGUuZm9ybWF0KCdNTU1NJyk7XG4gICAgdGhpcy5yYW5nZSA9IG5ldyBBWERhdGVUaW1lUmFuZ2UoXG4gICAgICBuZXcgQVhEYXRlVGltZShkYXRlLnN0YXJ0T2YoJ21vbnRoJykuZGF0ZSwgZGF0ZS5jYWxlbmRhciksXG4gICAgICBuZXcgQVhEYXRlVGltZShkYXRlLmVuZE9mKCdtb250aCcpLmRhdGUsIGRhdGUuY2FsZW5kYXIpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGluZGV4OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYVGltZVNwYW5Ub3RhbCB7XG4gIG1pbGlzZWNvbmRzOiBudW1iZXI7XG4gIHNlY29uZHM6IG51bWJlcjtcbiAgbWludXRlczogbnVtYmVyO1xuICBob3VyczogbnVtYmVyO1xuICBkYXlzOiBudW1iZXI7XG4gIHdlZWtzOiBudW1iZXI7XG4gIG1vbnRoczogbnVtYmVyO1xuICB5ZWFyczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYVGltZVNwYW4ge1xuICBtaWxpc2Vjb25kczogbnVtYmVyO1xuICBzZWNvbmRzOiBudW1iZXI7XG4gIG1pbnV0ZXM6IG51bWJlcjtcbiAgaG91cnM6IG51bWJlcjtcbiAgZGF5czogbnVtYmVyO1xuICBtb250aHM6IG51bWJlcjtcbiAgeWVhcnM6IG51bWJlcjtcbiAgdG90YWw6IEFYVGltZVNwYW5Ub3RhbDtcbn1cblxuZXhwb3J0IGNsYXNzIEFYRGF0ZVRpbWVSYW5nZSB7XG4gIHByaXZhdGUgX3N0YXJ0VGltZTogQVhEYXRlVGltZTtcbiAgcHJpdmF0ZSBfZW5kVGltZTogQVhEYXRlVGltZTtcblxuICBwdWJsaWMgZ2V0IHN0YXJ0VGltZSgpOiBBWERhdGVUaW1lIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRUaW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBlbmRUaW1lKCk6IEFYRGF0ZVRpbWUge1xuICAgIHJldHVybiB0aGlzLl9lbmRUaW1lO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc3RhcnRUaW1lOiBBWERhdGVUaW1lLCBlbmRUaW1lOiBBWERhdGVUaW1lKSB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gc3RhcnRUaW1lO1xuICAgIHRoaXMuX2VuZFRpbWUgPSBlbmRUaW1lO1xuICB9XG5cbiAgZHVyYXRpb24oKTogQVhUaW1lU3BhbiB7XG4gICAgY29uc3QgcmVzdWx0OiBBWFRpbWVTcGFuID0ge1xuICAgICAgbWlsaXNlY29uZHM6IDAsXG4gICAgICBzZWNvbmRzOiAwLFxuICAgICAgbWludXRlczogMCxcbiAgICAgIGhvdXJzOiAwLFxuICAgICAgZGF5czogMCxcbiAgICAgIC8vIE5PVEU6IENhbGN1bGF0aW5nIGV4YWN0IGNhbGVuZGFyIG1vbnRocy95ZWFycyBjb21wb25lbnQgaXMgY29tcGxleFxuICAgICAgLy8gZnJvbSBtaWxsaXNlY29uZHMgYWxvbmUuIFdlJ2xsIHNldCB0aGVzZSB0byAwLlxuICAgICAgbW9udGhzOiAwLFxuICAgICAgeWVhcnM6IDAsXG4gICAgICB0b3RhbDoge1xuICAgICAgICBtaWxpc2Vjb25kczogMCxcbiAgICAgICAgc2Vjb25kczogMCxcbiAgICAgICAgbWludXRlczogMCxcbiAgICAgICAgaG91cnM6IDAsXG4gICAgICAgIGRheXM6IDAsXG4gICAgICAgIHdlZWtzOiAwLFxuICAgICAgICAvLyBOT1RFOiB0b3RhbC5tb250aHMgYW5kIHRvdGFsLnllYXJzIGFyZSBhcHByb3hpbWF0ZSBiYXNlZCBvbiBhdmVyYWdlIGxlbmd0aHNcbiAgICAgICAgbW9udGhzOiAwLFxuICAgICAgICB5ZWFyczogMCxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIC8vIENvbnN0YW50cyBmb3IgdGltZSB1bml0cyBpbiBtaWxsaXNlY29uZHNcbiAgICBjb25zdCBPTkVfTUlMTElTRUNPTkQgPSAxO1xuICAgIGNvbnN0IE9ORV9TRUNPTkQgPSAxMDAwICogT05FX01JTExJU0VDT05EO1xuICAgIGNvbnN0IE9ORV9NSU5VVEUgPSA2MCAqIE9ORV9TRUNPTkQ7XG4gICAgY29uc3QgT05FX0hPVVIgPSA2MCAqIE9ORV9NSU5VVEU7XG4gICAgY29uc3QgT05FX0RBWSA9IDI0ICogT05FX0hPVVI7XG4gICAgY29uc3QgT05FX1dFRUsgPSA3ICogT05FX0RBWTtcbiAgICAvLyBBdmVyYWdlIGxlbmd0aHMgZm9yIGFwcHJveGltYXRlIHRvdGFsIG1vbnRocy95ZWFyc1xuICAgIGNvbnN0IE9ORV9ZRUFSX0FWRyA9IDM2NS4yNSAqIE9ORV9EQVk7XG4gICAgY29uc3QgT05FX01PTlRIX0FWRyA9IE9ORV9ZRUFSX0FWRyAvIDEyO1xuXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gdGhpcy5fc3RhcnRUaW1lLmRhdGU/LmdldFRpbWUoKTtcbiAgICBjb25zdCBlbmRUaW1lID0gdGhpcy5fZW5kVGltZS5kYXRlPy5nZXRUaW1lKCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGFic29sdXRlIGRpZmZlcmVuY2UgaW4gbWlsbGlzZWNvbmRzXG4gICAgY29uc3QgZGlmZiA9IE1hdGguYWJzKGVuZFRpbWUgLSBzdGFydFRpbWUpO1xuXG4gICAgLy8gLS0tIENhbGN1bGF0ZSBUb3RhbCBEdXJhdGlvbnMgLS0tXG4gICAgcmVzdWx0LnRvdGFsLm1pbGlzZWNvbmRzID0gZGlmZjtcbiAgICByZXN1bHQudG90YWwuc2Vjb25kcyA9IGRpZmYgLyBPTkVfU0VDT05EO1xuICAgIHJlc3VsdC50b3RhbC5taW51dGVzID0gZGlmZiAvIE9ORV9NSU5VVEU7XG4gICAgcmVzdWx0LnRvdGFsLmhvdXJzID0gZGlmZiAvIE9ORV9IT1VSO1xuICAgIHJlc3VsdC50b3RhbC5kYXlzID0gZGlmZiAvIE9ORV9EQVk7IC8vIEluY2x1ZGVzIGZyYWN0aW9uYWwgZGF5c1xuICAgIHJlc3VsdC50b3RhbC53ZWVrcyA9IGRpZmYgLyBPTkVfV0VFSzsgLy8gSW5jbHVkZXMgZnJhY3Rpb25hbCB3ZWVrc1xuICAgIHJlc3VsdC50b3RhbC5tb250aHMgPSBkaWZmIC8gT05FX01PTlRIX0FWRzsgLy8gQXBwcm94aW1hdGVcbiAgICByZXN1bHQudG90YWwueWVhcnMgPSBkaWZmIC8gT05FX1lFQVJfQVZHOyAvLyBBcHByb3hpbWF0ZVxuXG4gICAgLy8gLS0tIENhbGN1bGF0ZSBDb21wb25lbnQgUGFydHMgLS0tXG4gICAgbGV0IHJlbWFpbmluZ01pbGxpcyA9IGRpZmY7XG5cbiAgICAvLyBDYWxjdWxhdGUgZnVsbCBkYXlzIGFuZCB1cGRhdGUgcmVtYWluaW5nIG1pbGxpc2Vjb25kc1xuICAgIHJlc3VsdC5kYXlzID0gTWF0aC5mbG9vcihyZW1haW5pbmdNaWxsaXMgLyBPTkVfREFZKTtcbiAgICByZW1haW5pbmdNaWxsaXMgJT0gT05FX0RBWTsgLy8gR2V0IHRoZSByZW1haW5kZXIgbWlsbGlzZWNvbmRzIGFmdGVyIHRha2luZyBvdXQgZnVsbCBkYXlzXG5cbiAgICAvLyBDYWxjdWxhdGUgZnVsbCBob3VycyBmcm9tIHRoZSByZW1haW5kZXJcbiAgICByZXN1bHQuaG91cnMgPSBNYXRoLmZsb29yKHJlbWFpbmluZ01pbGxpcyAvIE9ORV9IT1VSKTtcbiAgICByZW1haW5pbmdNaWxsaXMgJT0gT05FX0hPVVI7IC8vIEdldCB0aGUgcmVtYWluZGVyIG1pbGxpc2Vjb25kcyBhZnRlciB0YWtpbmcgb3V0IGZ1bGwgaG91cnNcblxuICAgIC8vIENhbGN1bGF0ZSBmdWxsIG1pbnV0ZXMgZnJvbSB0aGUgcmVtYWluZGVyXG4gICAgcmVzdWx0Lm1pbnV0ZXMgPSBNYXRoLmZsb29yKHJlbWFpbmluZ01pbGxpcyAvIE9ORV9NSU5VVEUpO1xuICAgIHJlbWFpbmluZ01pbGxpcyAlPSBPTkVfTUlOVVRFOyAvLyBHZXQgdGhlIHJlbWFpbmRlciBtaWxsaXNlY29uZHMgYWZ0ZXIgdGFraW5nIG91dCBmdWxsIG1pbnV0ZXNcblxuICAgIC8vIENhbGN1bGF0ZSBmdWxsIHNlY29uZHMgZnJvbSB0aGUgcmVtYWluZGVyXG4gICAgcmVzdWx0LnNlY29uZHMgPSBNYXRoLmZsb29yKHJlbWFpbmluZ01pbGxpcyAvIE9ORV9TRUNPTkQpO1xuICAgIHJlbWFpbmluZ01pbGxpcyAlPSBPTkVfU0VDT05EOyAvLyBHZXQgdGhlIHJlbWFpbmRlciBtaWxsaXNlY29uZHMgYWZ0ZXIgdGFraW5nIG91dCBmdWxsIHNlY29uZHNcblxuICAgIC8vIFRoZSBmaW5hbCByZW1haW5kZXIgaXMgdGhlIG1pbGxpc2Vjb25kcyBjb21wb25lbnRcbiAgICByZXN1bHQubWlsaXNlY29uZHMgPSByZW1haW5pbmdNaWxsaXM7XG5cbiAgICAvLyBBcyBub3RlZCBhYm92ZSwgc2V0dGluZyBtb250aC95ZWFyIGNvbXBvbmVudHMgdG8gMCBhcyBhY2N1cmF0ZVxuICAgIC8vIGNhbGVuZGFyLWF3YXJlIGNhbGN1bGF0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBoZXJlLlxuICAgIHJlc3VsdC5tb250aHMgPSAwO1xuICAgIHJlc3VsdC55ZWFycyA9IDA7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZW51bWVyYXRlKHVuaXQ6IFRpbWVVbml0ID0gJ2RheScsIGFtb3VudCA9IDEpOiBBWERhdGVUaW1lW10ge1xuICAgIGNvbnN0IHJlc3VsdDogQVhEYXRlVGltZVtdID0gW107XG4gICAgbGV0IGl0ZW0gPSB0aGlzLl9zdGFydFRpbWUuY2xvbmUoKTtcbiAgICB3aGlsZSAoaXRlbS5jb21wYXJlKHRoaXMuX2VuZFRpbWUsIHVuaXQpIDw9IDApIHtcbiAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgICAgaXRlbSA9IGl0ZW0uYWRkKHVuaXQsIGFtb3VudCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==","import { AXCalendar, AXDateTime } from './datetime.types';\nexport class AXGregorianCalendar extends AXCalendar {\n /**\n * @ignore\n */\n constructor(config) {\n super(config);\n }\n create(value) {\n return new AXDateTime(new Date(value.year, value.month - 1, value.day, value.hours || 0, value.minutes || 0, value.seconds || 0, value.ms || 0), this);\n }\n name() {\n return 'gregorian';\n }\n dayOfMonth(date) {\n return date.getDate();\n }\n dayOfYear(date) {\n let result = 0;\n const 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 dayOfWeek(date) {\n return date.getDay() + 1;\n }\n weekOfYear(date) {\n const firstDay = new AXDateTime(date, this).startOf('year');\n return Math.ceil(((date.getTime() - firstDay.date.getTime()) / 86400000 + firstDay.date.getDay() + 1) / 7);\n }\n year(date) {\n return date.getFullYear();\n }\n monthOfYear(date) {\n return date.getMonth() + 1;\n }\n add(date, unit, amount) {\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 // Calculate the new year and month considering the amount\n let newYear = v.getFullYear();\n let newMonth = v.getMonth() + amount;\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 // 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 // Get the last day of the new month\n const lastDayOfMonth = new Date(newYear, newMonth + 1, 0).getDate();\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 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 set(date, unit, value) {\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 startOf(date, unit) {\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 currentDayOfWeek_0based = this.dayOfWeek(clone) - 1;\n const firstDayOfWeek_0based = this.weekdays[0];\n const daysToSubtract = (currentDayOfWeek_0based - firstDayOfWeek_0based + 7) % 7;\n clone.setDate(clone.getDate() - daysToSubtract);\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 endOf(date, unit) {\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 isLeap(date) {\n const leapYear = new Date(date.getFullYear(), 1, 29);\n return leapYear.getDate() == 29;\n }\n parse(value) {\n return new AXDateTime(new Date(value), this);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JlZ29yaWFuLmNhbGVuZGFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9kYXRlLXRpbWUvc3JjL2xpYi9ncmVnb3JpYW4uY2FsZW5kYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBb0IsVUFBVSxFQUF5QixNQUFNLGtCQUFrQixDQUFDO0FBRW5HLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxVQUFVO0lBQ2pEOztPQUVHO0lBQ0gsWUFBWSxNQUF3QjtRQUNsQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFrQjtRQUN2QixPQUFPLElBQUksVUFBVSxDQUNuQixJQUFJLElBQUksQ0FDTixLQUFLLENBQUMsSUFBSSxFQUNWLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUNmLEtBQUssQ0FBQyxHQUFHLEVBQ1QsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQ2hCLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUNsQixLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsRUFDbEIsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQ2QsRUFDRCxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJO1FBQ0YsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBVTtRQUNsQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFF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QUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUNELEtBQUssTUFBTTtnQkFDVCxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNuQixPQUFPLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsSUFBVTtRQUNmLE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckQsT0FBTyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBYTtRQUNqQixPQUFPLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ2FsZW5kYXIsIEFYQ2FsZW5kYXJDb25maWcsIEFYRGF0ZVRpbWUsIEFYRGF0ZVZhbHVlLCBUaW1lVW5pdCB9IGZyb20gJy4vZGF0ZXRpbWUudHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQVhHcmVnb3JpYW5DYWxlbmRhciBleHRlbmRzIEFYQ2FsZW5kYXIge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoY29uZmlnOiBBWENhbGVuZGFyQ29uZmlnKSB7XG4gICAgc3VwZXIoY29uZmlnKTtcbiAgfVxuXG4gIGNyZWF0ZSh2YWx1ZTogQVhEYXRlVmFsdWUpOiBBWERhdGVUaW1lIHtcbiAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoXG4gICAgICBuZXcgRGF0ZShcbiAgICAgICAgdmFsdWUueWVhcixcbiAgICAgICAgdmFsdWUubW9udGggLSAxLFxuICAgICAgICB2YWx1ZS5kYXksXG4gICAgICAgIHZhbHVlLmhvdXJzIHx8IDAsXG4gICAgICAgIHZhbHVlLm1pbnV0ZXMgfHwgMCxcbiAgICAgICAgdmFsdWUuc2Vjb25kcyB8fCAwLFxuICAgICAgICB2YWx1ZS5tcyB8fCAwLFxuICAgICAgKSxcbiAgICAgIHRoaXMsXG4gICAgKTtcbiAgfVxuXG4gIG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2dyZWdvcmlhbic7XG4gIH1cblxuICBkYXlPZk1vbnRoKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiBkYXRlLmdldERhdGUoKTtcbiAgfVxuXG4gIGRheU9mWWVhcihkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBjb25zdCBtID0gWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdO1xuICAgIGlmICh0aGlzLmlzTGVhcChkYXRlKSkge1xuICAgICAgbVsxXSA9IDI5O1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGUuZ2V0TW9udGgoKTsgaSsrKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgKyBtW2ldO1xuICAgIH1cbiAgICByZXN1bHQgKz0gZGF0ZS5nZXREYXRlKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGRheU9mV2VlayhkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZGF0ZS5nZXREYXkoKSArIDE7XG4gIH1cblxuICB3ZWVrT2ZZZWFyKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIGNvbnN0IGZpcnN0RGF5ID0gbmV3IEFYRGF0ZVRpbWUoZGF0ZSwgdGhpcykuc3RhcnRPZigneWVhcicpO1xuICAgIHJldHVybiBNYXRoLmNlaWwoKChkYXRlLmdldFRpbWUoKSAtIGZpcnN0RGF5LmRhdGUuZ2V0VGltZSgpKSAvIDg2NDAwMDAwICsgZmlyc3REYXkuZGF0ZS5nZXREYXkoKSArIDEpIC8gNyk7XG4gIH1cblxuICB5ZWFyKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gIH1cblxuICBtb250aE9mWWVhcihkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZGF0ZS5nZXRNb250aCgpICsgMTtcbiAgfVxuXG4gIGFkZChkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCwgYW1vdW50OiBudW1iZXIpOiBBWERhdGVUaW1lIHtcbiAgICBsZXQgdmFsdWUgPSBkYXRlLnZhbHVlT2YoKTtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIHZhbHVlICs9IDEwMDAgKiBhbW91bnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgdmFsdWUgKz0gNjAwMDAgKiBhbW91bnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgIHZhbHVlICs9IDM2MDAwMDAgKiBhbW91bnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbW9udGgnOiB7XG4gICAgICAgIGNvbnN0IHYgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBuZXcgeWVhciBhbmQgbW9udGggY29uc2lkZXJpbmcgdGhlIGFtb3VudFxuICAgICAgICBsZXQgbmV3WWVhciA9IHYuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgbGV0IG5ld01vbnRoID0gdi5nZXRNb250aCgpICsgYW1vdW50O1xuXG4gICAgICAgIC8vIEFkanVzdCBmb3IgeWVhciBvdmVyZmxvdyBvciB1bmRlcmZsb3dcbiAgICAgICAgd2hpbGUgKG5ld01vbnRoID4gMTEpIHtcbiAgICAgICAgICBuZXdNb250aCAtPSAxMjtcbiAgICAgICAgICBuZXdZZWFyKys7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKG5ld01vbnRoIDwgMCkge1xuICAgICAgICAgIG5ld01vbnRoICs9IDEyO1xuICAgICAgICAgIG5ld1llYXItLTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCB0aGUgZGF0ZSB0byB0aGUgZmlyc3Qgb2YgdGhlIG1vbnRoIHRvIHByZXZlbnQgb3ZlcmZsb3dcbiAgICAgICAgdi5zZXREYXRlKDEpO1xuICAgICAgICB2LnNldEZ1bGxZZWFyKG5ld1llYXIpO1xuICAgICAgICB2LnNldE1vbnRoKG5ld01vbnRoKTtcblxuICAgICAgICAvLyBHZXQgdGhlIGxhc3QgZGF5IG9mIHRoZSBuZXcgbW9udGhcbiAgICAgICAgY29uc3QgbGFzdERheU9mTW9udGggPSBuZXcgRGF0ZShuZXdZZWFyLCBuZXdNb250aCArIDEsIDApLmdldERhdGUoKTtcblxuICAgICAgICAvLyBTZXQgdGhlIGRhdGUgdG8gZWl0aGVyIHRoZSBvcmlnaW5hbCBkYXkgb3IgdGhlIGxhc3QgZGF5IG9mIHRoZSBuZXcgbW9udGgsIHdoaWNoZXZlciBpcyBzbWFsbGVyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRGF5ID0gZGF0ZS5nZXREYXRlKCk7XG4gICAgICAgIHYuc2V0RGF0ZShNYXRoLm1pbihvcmlnaW5hbERheSwgbGFzdERheU9mTW9udGgpKTtcblxuICAgICAgICB2YWx1ZSA9IHYudmFsdWVPZigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICB2YWx1ZSArPSA3ICogODY0MDAwMDAgKiBhbW91bnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAneWVhcic6IHtcbiAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgbmV3RGF0ZS5zZXRGdWxsWWVhcihuZXdEYXRlLmdldEZ1bGxZZWFyKCkgKyBhbW91bnQpO1xuICAgICAgICAvLyBIYW5kbGluZyBmb3IgbGVhcCB5ZWFyczogaWYgdGhlIG9yaWdpbmFsIGRhdGUgaXMgRmVicnVhcnkgMjl0aCwgYW5kIHRoZSBuZXcgeWVhciBpcyBub3QgYSBsZWFwIHllYXIsXG4gICAgICAgIC8vIHNldCB0aGUgZGF0ZSB0byBGZWJydWFyeSAyOHRoLlxuICAgICAgICBpZiAoZGF0ZS5nZXRNb250aCgpID09PSAxICYmIGRhdGUuZ2V0RGF0ZSgpID09PSAyOSAmJiBuZXdEYXRlLmdldE1vbnRoKCkgIT09IDEpIHtcbiAgICAgICAgICBuZXdEYXRlLnNldE1vbnRoKDEpO1xuICAgICAgICAgIG5ld0RhdGUuc2V0RGF0ZSgyOCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSBuZXdEYXRlLnZhbHVlT2YoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFsdWUgKz0gODY0MDAwMDAgKiBhbW91bnQ7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShuZXcgRGF0ZSh2YWx1ZSksIHRoaXMpO1xuICB9XG5cbiAgc2V0KGRhdGU6IERhdGUsIHVuaXQ6IFRpbWVVbml0LCB2YWx1ZTogbnVtYmVyKTogQVhEYXRlVGltZSB7XG4gICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0ZShkYXRlLnZhbHVlT2YoKSk7XG4gICAgc3dpdGNoICh1bml0KSB7XG4gICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICBjbG9uZS5zZXRIb3VycyhjbG9uZS5nZXRIb3VycygpLCBjbG9uZS5nZXRNaW51dGVzKCksIHZhbHVlLCBjbG9uZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgY2xvbmUuc2V0SG91cnMoY2xvbmUuZ2V0SG91cnMoKSwgdmFsdWUsIGNsb25lLmdldFNlY29uZHMoKSwgY2xvbmUuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICBjbG9uZS5zZXRIb3Vycyh2YWx1ZSwgY2xvbmUuZ2V0TWludXRlcygpLCBjbG9uZS5nZXRTZWNvbmRzKCksIGNsb25lLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgY2xvbmUuc2V0RGF0ZSh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICBjbG9uZS5zZXRNb250aChNYXRoLm1heCgwLCB2YWx1ZSAtIDEpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgY2xvbmUuc2V0RnVsbFllYXIodmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzKTtcbiAgfVxuXG4gIHN0YXJ0T2YoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQpOiBBWERhdGVUaW1lIHtcbiAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRlKGRhdGUudmFsdWVPZigpKTtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIGNsb25lLmdldE1pbnV0ZXMoKSwgY2xvbmUuZ2V0U2Vjb25kcygpLCAwKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzKTtcbiAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIGNsb25lLmdldE1pbnV0ZXMoKSwgMCwgMCk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcyk7XG4gICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgY2xvbmUuc2V0SG91cnMoY2xvbmUuZ2V0SG91cnMoKSwgMCwgMCwgMCk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgY2xvbmUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcyk7XG4gICAgICBjYXNlICd3ZWVrJzoge1xuICAgICAgICBjb25zdCBjdXJyZW50RGF5T2ZXZWVrXzBiYXNlZCA9IHRoaXMuZGF5T2ZXZWVrKGNsb25lKSAtIDE7XG4gICAgICAgIGNvbnN0IGZpcnN0RGF5T2ZXZWVrXzBiYXNlZCA9IHRoaXMud2Vla2RheXNbMF07XG4gICAgICAgIGNvbnN0IGRheXNUb1N1YnRyYWN0ID0gKGN1cnJlbnREYXlPZldlZWtfMGJhc2VkIC0gZmlyc3REYXlPZldlZWtfMGJhc2VkICsgNykgJSA3O1xuICAgICAgICBjbG9uZS5zZXREYXRlKGNsb25lLmdldERhdGUoKSAtIGRheXNUb1N1YnRyYWN0KTtcbiAgICAgICAgY2xvbmUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcyk7XG4gICAgICB9XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIGNsb25lLnNldERhdGUoMSk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcykuc3RhcnRPZignZGF5Jyk7XG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgY2xvbmUuc2V0TW9udGgoMCk7XG4gICAgICAgIGNsb25lLnNldERhdGUoMSk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcykuc3RhcnRPZignZGF5Jyk7XG4gICAgfVxuICB9XG5cbiAgZW5kT2YoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQpOiBBWERhdGVUaW1lIHtcbiAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRlKGRhdGUudmFsdWVPZigpKTtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIGNsb25lLmdldE1pbnV0ZXMoKSwgY2xvbmUuZ2V0U2Vjb25kcygpLCA5OTkpO1xuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMpO1xuICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgY2xvbmUuc2V0SG91cnMoY2xvbmUuZ2V0SG91cnMoKSwgY2xvbmUuZ2V0TWludXRlcygpLCA1OSwgOTk5KTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzKTtcbiAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICBjbG9uZS5zZXRIb3VycyhjbG9uZS5nZXRIb3VycygpLCA1OSwgNTksIDk5OSk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgY2xvbmUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzKTtcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydE9mKGRhdGUsICd3ZWVrJykuYWRkKCdkYXknLCA2KS5lbmRPZignZGF5Jyk7XG4gICAgICBjYXNlICdtb250aCc6IHtcbiAgICAgICAgY29uc3QgZGF0ZU9iaiA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpICsgMSwgMCk7XG4gICAgICAgIGRhdGVPYmouc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGRhdGVPYmosIHRoaXMpO1xuICAgICAgfVxuICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgIGNsb25lLnNldE1vbnRoKDExKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzKS5lbmRPZignbW9udGgnKTtcbiAgICB9XG4gIH1cblxuICBpc0xlYXAoZGF0ZTogRGF0ZSkge1xuICAgIGNvbnN0IGxlYXBZZWFyID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCAxLCAyOSk7XG4gICAgcmV0dXJuIGxlYXBZZWFyLmdldERhdGUoKSA9PSAyOTtcbiAgfVxuXG4gIHBhcnNlKHZhbHVlOiBzdHJpbmcpOiBBWERhdGVUaW1lIHtcbiAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUobmV3IERhdGUodmFsdWUpLCB0aGlzKTtcbiAgfVxufVxuIl19","import { InjectionToken } from '@angular/core';\nexport class AXHolidaysLoaderDefault {\n getHolidays(options) {\n return Promise.resolve([]);\n }\n}\nexport const AX_DATETIME_HOLIDAYS_LOADER = new InjectionToken('AX_DATETIME_HOLIDAYS_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXHolidaysLoaderDefault();\n },\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9saWRheXMubG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9kYXRlLXRpbWUvc3JjL2xpYi9ob2xpZGF5cy5sb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQW1CL0MsTUFBTSxPQUFPLHVCQUF1QjtJQUNsQyxXQUFXLENBQUMsT0FBNkM7UUFDdkQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7Q0FDRjtBQUVELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLElBQUksY0FBYyxDQUFtQiw2QkFBNkIsRUFBRTtJQUM3RyxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFO1FBQ1osT0FBTyxJQUFJLHVCQUF1QixFQUFFLENBQUM7SUFDdkMsQ0FBQztDQUNGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhIb2xpZGF5RGF0ZSB7XG4gIGRhdGU6IERhdGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGNzc0NsYXNzPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWEhvbGlkYXlzTG9hZGVyT3B0aW9ucyB7XG4gIGNhbGVuZGFyPzogc3RyaW5nO1xuICByYW5nZT86IHsgc3RhcnQ6IERhdGU7IGVuZDogRGF0ZSB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYSG9saWRheXNMb2FkZXIge1xuICBnZXRIb2xpZGF5cyhvcHRpb25zPzogQVhIb2xpZGF5c0xvYWRlck9wdGlvbnMpOiBQcm9taXNlPEFYSG9saWRheURhdGVbXT47XG59XG5cbmV4cG9ydCBjbGFzcyBBWEhvbGlkYXlzTG9hZGVyRGVmYXVsdCBpbXBsZW1lbnRzIEFYSG9saWRheXNMb2FkZXIge1xuICBnZXRIb2xpZGF5cyhvcHRpb25zPzogQVhIb2xpZGF5c0xvYWRlck9wdGlvbnMgfCB1bmRlZmluZWQpOiBQcm9taXNlPEFYSG9saWRheURhdGVbXT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBBWF9EQVRFVElNRV9IT0xJREFZU19MT0FERVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhIb2xpZGF5c0xvYWRlcj4oJ0FYX0RBVEVUSU1FX0hPTElEQVlTX0xPQURFUicsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBBWEhvbGlkYXlzTG9hZGVyRGVmYXVsdCgpO1xuICB9LFxufSk7XG4iXX0=","import { AXCalendar, AXDateTime } from './datetime.types';\nexport class AXSolarHijriCalendar extends AXCalendar {\n /**\n * @ignore\n */\n constructor(config) {\n super(config);\n /*\n SolarHijri years starting the 33-year rule.\n */\n this.breaks = [\n -61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178,\n ];\n }\n create(value) {\n const a = this.toGregorian(value.year, value.month, value.day);\n return new AXDateTime(new Date(a.getFullYear(), a.getMonth(), a.getDate(), value.hours || 0, value.minutes || 0, value.seconds || 0, value.ms || 0), this);\n }\n name() {\n return 'solar-hijri';\n }\n dayOfMonth(date) {\n return this.toSolarHijri(date).day;\n }\n dayOfYear(date) {\n const j = this.toSolarHijri(date);\n return (j.month <= 6 ? (j.month - 1) * 31 : 6 * 31 + (j.month - 7) * 30) + j.day;\n }\n dayOfWeek(date) {\n return date.getDay() == 6 ? 1 : date.getDay() + 2;\n }\n weekdayIndex(date) {\n const dow = this.dayOfWeek(date);\n return dow === 1 ? 6 : dow - 2;\n }\n weekOfYear(date) {\n //TODO : apply jalali\n const firstDay = new AXDateTime(date, this).startOf('year');\n return Math.ceil(((date.getTime() - firstDay.date.getTime()) / 86400000 + firstDay.date.getDay() + 1) / 7);\n }\n year(date) {\n return this.toSolarHijri(date).year;\n }\n monthOfYear(date) {\n return this.toSolarHijri(date).month;\n }\n add(date, unit, amount) {\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 const jm = this.monthOfYear(date);\n let jy = this.year(date);\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 jy += yearsToAdd;\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 // Adjust the day to either the original day or the last day of the new month, whichever is smaller\n const lastDayOfNewMonth = this.SolarHijriMonthLength(jy, newMonth); // Implement this method to find the last day in a Jalali month\n jd = Math.min(jd, lastDayOfNewMonth);\n const finalDate = this.toGregorian(jy, newMonth, jd);\n gregorianDate.setFullYear(finalDate.getFullYear());\n gregorianDate.setMonth(finalDate.getMonth());\n gregorianDate.setDate(finalDate.getDate());\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 const jd = this.dayOfMonth(date);\n const jm = this.monthOfYear(date);\n const 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 set(date, unit, value) {\n const clone = new Date(date.valueOf());\n const jDate = this.toSolarHijri(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 startOf(date, unit) {\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 currentDayOfWeek_0based = this.weekdayIndex(clone);\n const firstDayOfWeek_0based = this.weekdays[0];\n const daysToSubtract = (currentDayOfWeek_0based - firstDayOfWeek_0based + 7) % 7;\n return new AXDateTime(clone, this).add('day', -daysToSubtract).startOf('day');\n }\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 endOf(date, unit) {\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.SolarHijriMonthLength(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.SolarHijriMonthLength(jy, 12));\n return new AXDateTime(gDate, this).endOf('day');\n }\n }\n }\n parse(value) {\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)\n date.setHours(Number(h));\n if (m != null)\n date.setMinutes(Number(m));\n if (s != null)\n date.setSeconds(Number(s));\n if (ms != null)\n date.setMilliseconds(Number(d));\n return new AXDateTime(date, this);\n }\n /*\n Converts a Gregorian date to SolarHijri.\n */\n toSolarHijri(date) {\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 Converts a SolarHijri date to Gregorian.\n */\n toGregorian(jy, jm, jd) {\n const g = this.d2g(this.j2d(jy, jm, jd));\n return new Date(g.gy, g.gm - 1, g.gd);\n }\n /*\n Checks whether a SolarHijri date is valid or not.\n */\n isValidSolarHijriDate(jy, jm, jd) {\n return jy >= -61 && jy <= 3177 && jm >= 1 && jm <= 12 && jd >= 1 && jd <= this.SolarHijriMonthLength(jy, jm);\n }\n /*\n Is this a leap year or not?\n */\n isLeapSolarHijriYear(jy) {\n return this.jalCalLeap(jy) === 0;\n }\n /*\n Number of days in a given month in a SolarHijri year.\n */\n SolarHijriMonthLength(jy, jm) {\n if (jm <= 6)\n return 31;\n if (jm <= 11)\n return 30;\n if (this.isLeapSolarHijriYear(jy))\n return 30;\n return 29;\n }\n /*\n This determines if the SolarHijri (Persian) year is\n leap (366-day long) or is the common year (365 days)\n \n @param jy SolarHijri calendar year (-61 to 3177)\n @returns number of years since the last leap year (0 to 4)\n */\n jalCalLeap(jy) {\n const bl = this.breaks.length;\n let jp = this.breaks[0];\n let jm;\n let jump;\n let leap;\n let n;\n let i;\n if (jy < jp || jy >= this.breaks[bl - 1])\n throw new Error('Invalid SolarHijri year ' + jy);\n for (i = 1; i < bl; i += 1) {\n jm = this.breaks[i];\n jump = jm - jp;\n if (jy < jm)\n break;\n jp = jm;\n }\n n = jy - jp;\n if (jump - n < 6)\n 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 return leap;\n }\n jalCal(jy, withoutLeap) {\n const bl = this.breaks.length;\n const gy = jy + 621;\n let leapJ = -14;\n let jp = this.breaks[0];\n let jm;\n let jump;\n let leap;\n let n;\n let i;\n if (jy < jp || jy >= this.breaks[bl - 1])\n throw new Error('Invalid SolarHijri year ' + jy);\n // Find the limiting years for the SolarHijri year jy.\n for (i = 1; i < bl; i += 1) {\n jm = this.breaks[i];\n jump = jm - jp;\n if (jy < jm)\n 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 // Find the number of leap years from AD 621 to the beginning\n // of the current SolarHijri 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)\n leapJ += 1;\n // And the same in the Gregorian calendar (until the year gy).\n const leapG = this.div(gy, 4) - this.div((this.div(gy, 100) + 1) * 3, 4) - 150;\n // Determine the Gregorian date of Farvardin the 1st.\n const march = 20 + leapJ - leapG;\n // return with gy and march when we don't need leap\n if (withoutLeap)\n return { gy: gy, march: march };\n // Find how many years have passed since the last leap year.\n if (jump - n < 6)\n 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 return {\n leap: leap,\n gy: gy,\n march: march,\n };\n }\n j2d(jy, jm, jd) {\n const 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 d2j(jdn) {\n const gy = this.d2g(jdn).gy; // Calculate Gregorian year (gy).\n let jy = gy - 621;\n const r = this.jalCal(jy, false);\n const jdn1f = this.g2d(gy, 3, r.march);\n let jd;\n let jm;\n let k;\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 }\n else {\n // The remaining months.\n k -= 186;\n }\n }\n else {\n // Previous SolarHijri year.\n jy -= 1;\n k += 179;\n if (r.leap === 1)\n 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 g2d(gy, gm, gd) {\n let d = 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 d2g(jdn) {\n let j = 4 * jdn + 139361631;\n j = 4 * jdn + 139361631 + this.div(this.div(4 * jdn + 183187720, 146097) * 3, 4) * 4 - 3908;\n const i = this.div(this.mod(j, 1461), 4) * 5 + 308;\n const gd = this.div(this.mod(i, 153), 5) + 1;\n const gm = this.mod(this.div(i, 153), 12) + 1;\n const 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 SolarHijriWeek(jy, jm, jd) {\n const dayOfWeek = this.SolarHijriToDateObject(jy, jm, jd, 0, 0, 0, 0).getDay();\n const startDayDifference = dayOfWeek == 6 ? 0 : -(dayOfWeek + 1);\n const endDayDifference = 6 + startDayDifference;\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 SolarHijriToDateObject(jy, jm, jd, h = 0, m = 0, s = 0, ms = 0) {\n const gregorianCalenderDate = this.toGregorian(jy, jm, jd);\n return new Date(gregorianCalenderDate.getFullYear(), gregorianCalenderDate.getMonth() - 1, gregorianCalenderDate.getDate(), h || 0, m || 0, s || 0, ms || 0);\n }\n /*\n Utility helper functions.\n */\n div(a, b) {\n return ~~(a / b);\n }\n mod(a, b) {\n return a - ~~(a / b) * b;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sYXItaGlqcmkuY2FsZW5kYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL2RhdGUtdGltZS9zcmMvbGliL3NvbGFyLWhpanJpLmNhbGVuZGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQW9CLFVBQVUsRUFBeUIsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRyxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsVUFBVTtJQUNsRDs7T0FFRztJQUNILFlBQVksTUFBd0I7UUFDbEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBR2hCOztRQUVBO1FBQ1EsV0FBTSxHQUFHO1lBQ2YsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtTQUM1RyxDQUFDO0lBUEYsQ0FBQztJQVNELE1BQU0sQ0FBQyxLQUFrQjtRQUN2QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0QsT0FBTyxJQUFJLFVBQVUsQ0FDbkIsSUFBSSxJQUFJLENBQ04sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUNmLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFDWixDQUFDLENBQUMsT0FBTyxFQUFFLEVBQ1gsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQ2hCLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUNsQixLQUFLLENBQUMsT0FBTyxJQUFJLENB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LElBQUksQ0FBQyxFQUNOLEVBQUUsSUFBSSxDQUFDLENBQ1IsQ0FBQztJQUNKLENBQUM7SUFFRDs7TUFFRTtJQUVNLEdBQUcsQ0FBQyxDQUFTLEVBQUUsQ0FBUztRQUM5QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRU8sR0FBRyxDQUFDLENBQVMsRUFBRSxDQUFTO1FBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDYWxlbmRhciwgQVhDYWxlbmRhckNvbmZpZywgQVhEYXRlVGltZSwgQVhEYXRlVmFsdWUsIFRpbWVVbml0IH0gZnJvbSAnLi9kYXRldGltZS50eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBBWFNvbGFySGlqcmlDYWxlbmRhciBleHRlbmRzIEFYQ2FsZW5kYXIge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoY29uZmlnOiBBWENhbGVuZGFyQ29uZmlnKSB7XG4gICAgc3VwZXIoY29uZmlnKTtcbiAgfVxuXG4gIC8qXG4gIFNvbGFySGlqcmkgeWVhcnMgc3RhcnRpbmcgdGhlIDMzLXllYXIgcnVsZS5cbiovXG4gIHByaXZhdGUgYnJlYWtzID0gW1xuICAgIC02MSwgOSwgMzgsIDE5OSwgNDI2LCA2ODYsIDc1NiwgODE4LCAxMTExLCAxMTgxLCAxMjEwLCAxNjM1LCAyMDYwLCAyMDk3LCAyMTkyLCAyMjYyLCAyMzI0LCAyMzk0LCAyNDU2LCAzMTc4LFxuICBdO1xuXG4gIGNyZWF0ZSh2YWx1ZTogQVhEYXRlVmFsdWUpOiBBWERhdGVUaW1lIHtcbiAgICBjb25zdCBhID0gdGhpcy50b0dyZWdvcmlhbih2YWx1ZS55ZWFyLCB2YWx1ZS5tb250aCwgdmFsdWUuZGF5KTtcbiAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoXG4gICAgICBuZXcgRGF0ZShcbiAgICAgICAgYS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBhLmdldE1vbnRoKCksXG4gICAgICAgIGEuZ2V0RGF0ZSgpLFxuICAgICAgICB2YWx1ZS5ob3VycyB8fCAwLFxuICAgICAgICB2YWx1ZS5taW51dGVzIHx8IDAsXG4gICAgICAgIHZhbHVlLnNlY29uZHMgfHwgMCxcbiAgICAgICAgdmFsdWUubXMgfHwgMCxcbiAgICAgICksXG4gICAgICB0aGlzLFxuICAgICk7XG4gIH1cblxuICBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdzb2xhci1oaWpyaSc7XG4gIH1cblxuICBkYXlPZk1vbnRoKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRvU29sYXJIaWpyaShkYXRlKS5kYXk7XG4gIH1cblxuICBkYXlPZlllYXIoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgY29uc3QgaiA9IHRoaXMudG9Tb2xhckhpanJpKGRhdGUpO1xuICAgIHJldHVybiAoai5tb250aCA8PSA2ID8gKGoubW9udGggLSAxKSAqIDMxIDogNiAqIDMxICsgKGoubW9udGggLSA3KSAqIDMwKSArIGouZGF5O1xuICB9XG5cbiAgZGF5T2ZXZWVrKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiBkYXRlLmdldERheSgpID09IDYgPyAxIDogZGF0ZS5nZXREYXkoKSArIDI7XG4gIH1cblxuICBvdmVycmlkZSB3ZWVrZGF5SW5kZXgoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgY29uc3QgZG93ID0gdGhpcy5kYXlPZldlZWsoZGF0ZSk7XG4gICAgcmV0dXJuIGRvdyA9PT0gMSA/IDYgOiBkb3cgLSAyO1xuICB9XG5cbiAgd2Vla09mWWVhcihkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgICAvL1RPRE8gOiBhcHBseSBqYWxhbGlcbiAgICBjb25zdCBmaXJzdERheSA9IG5ldyBBWERhdGVUaW1lKGRhdGUsIHRoaXMpLnN0YXJ0T2YoJ3llYXInKTtcbiAgICByZXR1cm4gTWF0aC5jZWlsKCgoZGF0ZS5nZXRUaW1lKCkgLSBmaXJzdERheS5kYXRlLmdldFRpbWUoKSkgLyA4NjQwMDAwMCArIGZpcnN0RGF5LmRhdGUuZ2V0RGF5KCkgKyAxKSAvIDcpO1xuICB9XG5cbiAgeWVhcihkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50b1NvbGFySGlqcmkoZGF0ZSkueWVhcjtcbiAgfVxuXG4gIG1vbnRoT2ZZZWFyKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRvU29sYXJIaWpyaShkYXRlKS5tb250aDtcbiAgfVxuXG4gIGFkZChkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCwgYW1vdW50OiBudW1iZXIpOiBBWERhdGVUaW1lIHtcbiAgICBsZXQgdmFsdWUgPSBkYXRlLnZhbHVlT2YoKTtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIHZhbHVlICs9IDEwMDAgKiBhbW91bnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgdmFsdWUgKz0gNjAwMDAgKiBhbW91bnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgIHZhbHVlICs9IDM2MDAwMDAgKiBhbW91bnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbW9udGgnOiB7XG4gICAgICAgIC8vIGNvbnN0IHYgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgIC8vIGxldCBqZCA9IHRoaXMuZGF5T2ZNb250aChkYXRlKTtcbiAgICAgICAgLy8gbGV0IGptID0gdGhpcy5tb250aE9mWWVhcihkYXRlKTtcbiAgICAgICAgLy8gbGV0IGp5ID0gdGhpcy55ZWFyKGRhdGUpO1xuICAgICAgICAvLyBjb25zdCBubSA9IGptICsgYW1vdW50O1xuICAgICAgICAvLyBjb25zdCBueSA9IG5tICUgMTIgPyBNYXRoLmZsb29yKG5tIC8gMTIpIDogMDtcbiAgICAgICAgLy8gankgKz0gbnk7XG4gICAgICAgIC8vIGptID0gbm0gLSBueSAqIDEyO1xuICAgICAgICAvLyBjb25zdCB2diA9IHRoaXMudG9HcmVnb3JpYW4oanksIGptLCBqZCk7XG4gICAgICAgIC8vIHYuc2V0RnVsbFllYXIodnYuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIC8vIHYuc2V0TW9udGgodnYuZ2V0TW9udGgoKSk7XG4gICAgICAgIC8vIHYuc2V0RGF0ZSh2di5nZXREYXRlKCkpO1xuICAgICAgICAvLyB2YWx1ZSA9IHYudmFsdWVPZigpO1xuICAgICAgICAvLyBicmVhaztcbiAgICAgICAgbGV0IGpkID0gdGhpcy5kYXlPZk1vbnRoKGRhdGUpO1xuICAgICAgICBjb25zdCBqbSA9IHRoaXMubW9udGhPZlllYXIoZGF0ZSk7XG4gICAgICAgIGxldCBqeSA9IHRoaXMueWVhcihkYXRlKTtcblxuICAgICAgICBsZXQgbmV3TW9udGggPSBqbSArIGFtb3VudDtcbiAgICAgICAgbGV0IHllYXJzVG9BZGQgPSBNYXRoLmZsb29yKG5ld01vbnRoIC8gMTIpO1xuICAgICAgICBuZXdNb250aCA9IG5ld01vbnRoICUgMTI7XG4gICAgICAgIGlmIChuZXdNb250aCA8PSAwKSB7XG4gICAgICAgICAgbmV3TW9udGggKz0gMTI7XG4gICAgICAgICAgeWVhcnNUb0FkZC0tO1xuICAgICAgICB9XG5cbiAgICAgICAgankgKz0geWVhcnNUb0FkZDtcblxuICAgICAgICAvLyBUZW1wb3Jhcnkgc2V0IHRvIGZpcnN0IG9mIHRoZSBtb250aCB0byBwcmV2ZW50IHJvbGxvdmVyXG4gICAgICAgIGNvbnN0IHRlbXBEYXRlID0gdGhpcy50b0dyZWdvcmlhbihqeSwgbmV3TW9udGgsIDEpO1xuICAgICAgICBjb25zdCBncmVnb3JpYW5EYXRlID0gbmV3IERhdGUodGVtcERhdGUuZ2V0RnVsbFllYXIoKSwgdGVtcERhdGUuZ2V0TW9udGgoKSwgdGVtcERhdGUuZ2V0RGF0ZSgpKTtcblxuICAgICAgICAvLyBBZGp1c3QgdGhlIGRheSB0byBlaXRoZXIgdGhlIG9yaWdpbmFsIGRheSBvciB0aGUgbGFzdCBkYXkgb2YgdGhlIG5ldyBtb250aCwgd2hpY2hldmVyIGlzIHNtYWxsZXJcbiAgICAgICAgY29uc3QgbGFzdERheU9mTmV3TW9udGggPSB0aGlzLlNvbGFySGlqcmlNb250aExlbmd0aChqeSwgbmV3TW9udGgpOyAvLyBJbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gZmluZCB0aGUgbGFzdCBkYXkgaW4gYSBKYWxhbGkgbW9udGhcbiAgICAgICAgamQgPSBNYXRoLm1pbihqZCwgbGFzdERheU9mTmV3TW9udGgpO1xuXG4gICAgICAgIGNvbnN0IGZpbmFsRGF0ZSA9IHRoaXMudG9HcmVnb3JpYW4oanksIG5ld01vbnRoLCBqZCk7XG4gICAgICAgIGdyZWdvcmlhbkRhdGUuc2V0RnVsbFllYXIoZmluYWxEYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICBncmVnb3JpYW5EYXRlLnNldE1vbnRoKGZpbmFsRGF0ZS5nZXRNb250aCgpKTtcbiAgICAgICAgZ3JlZ29yaWFuRGF0ZS5zZXREYXRlKGZpbmFsRGF0ZS5nZXREYXRlKCkpO1xuXG4gICAgICAgIHZhbHVlID0gZ3JlZ29yaWFuRGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIHZhbHVlICs9IDcgKiA4NjQwMDAwMCAqIGFtb3VudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd5ZWFyJzoge1xuICAgICAgICBjb25zdCB2ID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICBjb25zdCBqZCA9IHRoaXMuZGF5T2ZNb250aChkYXRlKTtcbiAgICAgICAgY29uc3Qgam0gPSB0aGlzLm1vbnRoT2ZZZWFyKGRhdGUpO1xuICAgICAgICBjb25zdCBqeSA9IHRoaXMueWVhcihkYXRlKTtcbiAgICAgICAgY29uc3QgdnYgPSB0aGlzLnRvR3JlZ29yaWFuKGp5ICsgYW1vdW50LCBqbSwgamQpO1xuICAgICAgICB2LnNldEZ1bGxZZWFyKHZ2LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB2LnNldE1vbnRoKHZ2LmdldE1vbnRoKCkpO1xuICAgICAgICB2LnNldERhdGUodnYuZ2V0RGF0ZSgpKTtcbiAgICAgICAgdmFsdWUgPSB2LnZhbHVlT2YoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFsdWUgKz0gODY0MDAwMDAgKiBhbW91bnQ7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShuZXcgRGF0ZSh2YWx1ZSksIHRoaXMpO1xuICB9XG5cbiAgc2V0KGRhdGU6IERhdGUsIHVuaXQ6IFRpbWVVbml0LCB2YWx1ZTogbnVtYmVyKTogQVhEYXRlVGltZSB7XG4gICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0ZShkYXRlLnZhbHVlT2YoKSk7XG4gICAgY29uc3QgakRhdGUgPSB0aGlzLnRvU29sYXJIaWpyaShjbG9uZSk7XG4gICAgc3dpdGNoICh1bml0KSB7XG4gICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICBjbG9uZS5zZXRIb3VycyhjbG9uZS5nZXRIb3VycygpLCBjbG9uZS5nZXRNaW51dGVzKCksIHZhbHVlLCBjbG9uZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgY2xvbmUuc2V0SG91cnMoY2xvbmUuZ2V0SG91cnMoKSwgdmFsdWUsIGNsb25lLmdldFNlY29uZHMoKSwgY2xvbmUuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICBjbG9uZS5zZXRIb3Vycyh2YWx1ZSwgY2xvbmUuZ2V0TWludXRlcygpLCBjbG9uZS5nZXRTZWNvbmRzKCksIGNsb25lLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgY2FzZSAnZGF5Jzoge1xuICAgICAgICBjb25zdCBnRGF0ZSA9IHRoaXMudG9HcmVnb3JpYW4oakRhdGUueWVhciwgakRhdGUubW9udGgsIHZhbHVlKTtcbiAgICAgICAgY2xvbmUuc2V0RGF0ZShnRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21vbnRoJzoge1xuICAgICAgICBjb25zdCBnRGF0ZTIgPSB0aGlzLnRvR3JlZ29yaWFuKGpEYXRlLnllYXIsIHZhbHVlLCBqRGF0ZS5kYXkpO1xuICAgICAgICBjbG9uZS5zZXRNb250aChnRGF0ZTIuZ2V0TW9udGgoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAneWVhcic6IHtcbiAgICAgICAgY29uc3QgZ0RhdGUzID0gdGhpcy50b0dyZWdvcmlhbih2YWx1ZSwgakRhdGUubW9udGgsIGpEYXRlLmRheSk7XG4gICAgICAgIGNsb25lLnNldEZ1bGxZZWFyKGdEYXRlMy5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcyk7XG4gIH1cblxuICBzdGFydE9mKGRhdGU6IERhdGUsIHVuaXQ6IFRpbWVVbml0KTogQVhEYXRlVGltZSB7XG4gICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0ZShkYXRlLnZhbHVlT2YoKSk7XG4gICAgc3dpdGNoICh1bml0KSB7XG4gICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICBjbG9uZS5zZXRIb3VycyhjbG9uZS5nZXRIb3VycygpLCBjbG9uZS5nZXRNaW51dGVzKCksIGNsb25lLmdldFNlY29uZHMoKSwgMCk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcyk7XG4gICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICBjbG9uZS5zZXRIb3VycyhjbG9uZS5nZXRIb3VycygpLCBjbG9uZS5nZXRNaW51dGVzKCksIDAsIDApO1xuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMpO1xuICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIDAsIDAsIDApO1xuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMpO1xuICAgICAgY2FzZSAnd2Vlayc6IHtcbiAgICAgICAgY29uc3QgY3VycmVudERheU9mV2Vla18wYmFzZWQgPSB0aGlzLndlZWtkYXlJbmRleChjbG9uZSk7XG4gICAgICAgIGNvbnN0IGZpcnN0RGF5T2ZXZWVrXzBiYXNlZCA9IHRoaXMud2Vla2RheXNbMF07XG4gICAgICAgIGNvbnN0IGRheXNUb1N1YnRyYWN0ID0gKGN1cnJlbnREYXlPZldlZWtfMGJhc2VkIC0gZmlyc3REYXlPZldlZWtfMGJhc2VkICsgNykgJSA3O1xuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMpLmFkZCgnZGF5JywgLWRheXNUb1N1YnRyYWN0KS5zdGFydE9mKCdkYXknKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ21vbnRoJzoge1xuICAgICAgICBjb25zdCBqeSA9IHRoaXMueWVhcihkYXRlKTtcbiAgICAgICAgY29uc3Qgam0gPSB0aGlzLm1vbnRoT2ZZZWFyKGRhdGUpO1xuICAgICAgICBjb25zdCBnRGF0ZSA9IHRoaXMudG9HcmVnb3JpYW4oanksIGptLCAxKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGdEYXRlLCB0aGlzKS5zdGFydE9mKCdkYXknKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3llYXInOiB7XG4gICAgICAgIGNvbnN0IGp5ID0gdGhpcy55ZWFyKGRhdGUpO1xuICAgICAgICBjb25zdCBnRGF0ZSA9IHRoaXMudG9HcmVnb3JpYW4oanksIDEsIDEpO1xuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoZ0RhdGUsIHRoaXMpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVuZE9mKGRhdGU6IERhdGUsIHVuaXQ6IFRpbWVVbml0KTogQVhEYXRlVGltZSB7XG4gICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0ZShkYXRlLnZhbHVlT2YoKSk7XG4gICAgc3dpdGNoICh1bml0KSB7XG4gICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICBjbG9uZS5zZXRIb3VycyhjbG9uZS5nZXRIb3VycygpLCBjbG9uZS5nZXRNaW51dGVzKCksIGNsb25lLmdldFNlY29uZHMoKSwgOTk5KTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzKTtcbiAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIGNsb25lLmdldE1pbnV0ZXMoKSwgNTksIDk5OSk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcyk7XG4gICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgY2xvbmUuc2V0SG91cnMoY2xvbmUuZ2V0SG91cnMoKSwgNTksIDU5LCA5OTkpO1xuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcyk7XG4gICAgICBjYXNlICd3ZWVrJzoge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydE9mKGRhdGUsICd3ZWVrJykuYWRkKCdkYXknLCA2KS5lbmRPZignZGF5Jyk7XG4gICAgICB9XG4gICAgICBjYXNlICdtb250aCc6IHtcbiAgICAgICAgY29uc3QgankgPSB0aGlzLnllYXIoZGF0ZSk7XG4gICAgICAgIGNvbnN0IGptID0gdGhpcy5tb250aE9mWWVhcihkYXRlKTtcbiAgICAgICAgY29uc3QgamQgPSB0aGlzLlNvbGFySGlqcmlNb250aExlbmd0aChqeSwgam0pO1xuICAgICAgICBjb25zdCBnRGF0ZSA9IHRoaXMudG9HcmVnb3JpYW4oanksIGptLCBqZCk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShnRGF0ZSwgdGhpcykuZW5kT2YoJ2RheScpO1xuICAgICAgfVxuICAgICAgY2FzZSAneWVhcic6IHtcbiAgICAgICAgY29uc3QgankgPSB0aGlzLnllYXIoZGF0ZSk7XG4gICAgICAgIGNvbnN0IGdEYXRlID0gdGhpcy50b0dyZWdvcmlhbihqeSwgMTIsIHRoaXMuU29sYXJIaWpyaU1vbnRoTGVuZ3RoKGp5LCAxMikpO1xuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoZ0RhdGUsIHRoaXMpLmVuZE9mKCdkYXknKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwYXJzZSh2YWx1ZTogc3RyaW5nKTogQVhEYXRlVGltZSB7XG4gICAgY29uc3QgW3ksIE0sIGQsIGgsIG0sIHMsIG1zXSA9IHZhbHVlLnNwbGl0KC9bXmEtekEtWjAtOV0rL2dpKTtcbiAgICBjb25zdCBkYXRlID0gdGhpcy50b0dyZWdvcmlhbihOdW1iZXIoeSkgPz8gMCwgTnVtYmVyKE0pID8/IDEsIE51bWJlcihkKSA/PyAxKTtcbiAgICBpZiAoaCAhPSBudWxsKSBkYXRlLnNldEhvdXJzKE51bWJlcihoKSk7XG4gICAgaWYgKG0gIT0gbnVsbCkgZGF0ZS5zZXRNaW51dGVzKE51bWJlcihtKSk7XG4gICAgaWYgKHMgIT0gbnVsbCkgZGF0ZS5zZXRTZWNvbmRzKE51bWJlcihzKSk7XG4gICAgaWYgKG1zICE9IG51bGwpIGRhdGUuc2V0TWlsbGlzZWNvbmRzKE51bWJlcihkKSk7XG4gICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGRhdGUsIHRoaXMpO1xuICB9XG5cbiAgLypcbiAgQ29udmVydHMgYSBHcmVnb3JpYW4gZGF0ZSB0byBTb2xhckhpanJpLlxuKi9cbiAgdG9Tb2xhckhpanJpKGRhdGU6IERhdGUpOiB7IHllYXI6IG51bWJlcjsgbW9udGg6IG51bWJlcjsgZGF5OiBudW1iZXIgfSB7XG4gICAgY29uc3QgZ2QgPSBkYXRlLmdldERhdGUoKTtcbiAgICBjb25zdCBnbSA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XG4gICAgY29uc3QgZ3kgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgciA9IHRoaXMuZDJqKHRoaXMuZzJkKGd5LCBnbSwgZ2QpKTtcbiAgICByZXR1cm4ge1xuICAgICAgeWVhcjogci5qeSxcbiAgICAgIG1vbnRoOiByLmptLFxuICAgICAgZGF5OiByLmpkLFxuICAgIH07XG4gIH1cblxuICAvKlxuICAgIENvbnZlcnRzIGEgU29sYXJIaWpyaSBkYXRlIHRvIEdyZWdvcmlhbi5cbiAgKi9cbiAgdG9HcmVnb3JpYW4oanksIGptLCBqZCk6IERhdGUge1xuICAgIGNvbnN0IGcgPSB0aGlzLmQyZyh0aGlzLmoyZChqeSwgam0sIGpkKSk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGcuZ3ksIGcuZ20gLSAxLCBnLmdkKTtcbiAgfVxuXG4gIC8qXG4gICAgQ2hlY2tzIHdoZXRoZXIgYSBTb2xhckhpanJpIGRhdGUgaXMgdmFsaWQgb3Igbm90LlxuICAqL1xuICBpc1ZhbGlkU29sYXJIaWpyaURhdGUoanksIGptLCBqZCkge1xuICAgIHJldHVybiBqeSA+PSAtNjEgJiYgankgPD0gMzE3NyAmJiBqbSA+PSAxICYmIGptIDw9IDEyICYmIGpkID49IDEgJiYgamQgPD0gdGhpcy5Tb2xhckhpanJpTW9udGhMZW5ndGgoanksIGptKTtcbiAgfVxuXG4gIC8qXG4gICAgSXMgdGhpcyBhIGxlYXAgeWVhciBvciBub3Q/XG4gICovXG4gIGlzTGVhcFNvbGFySGlqcmlZZWFyKGp5KSB7XG4gICAgcmV0dXJuIHRoaXMuamFsQ2FsTGVhcChqeSkgPT09IDA7XG4gIH1cblxuICAvKlxuICAgIE51bWJlciBvZiBkYXlzIGluIGEgZ2l2ZW4gbW9udGggaW4gYSBTb2xhckhpanJpIHllYXIuXG4gICovXG4gIFNvbGFySGlqcmlNb250aExlbmd0aChqeSwgam0pIHtcbiAgICBpZiAoam0gPD0gNikgcmV0dXJuIDMxO1xuICAgIGlmIChqbSA8PSAxMSkgcmV0dXJuIDMwO1xuICAgIGlmICh0aGlzLmlzTGVhcFNvbGFySGlqcmlZZWFyKGp5KSkgcmV0dXJuIDMwO1xuICAgIHJldHVybiAyOTtcbiAgfVxuXG4gIC8qXG4gICAgICBUaGlzIGRldGVybWluZXMgaWYgdGhlIFNvbGFySGlqcmkgKFBlcnNpYW4pIHllYXIgaXNcbiAgICAgIGxlYXAgKDM2Ni1kYXkgbG9uZykgb3IgaXMgdGhlIGNvbW1vbiB5ZWFyICgzNjUgZGF5cylcbiAgXG4gICAgICBAcGFyYW0gankgU29sYXJIaWpyaSBjYWxlbmRhciB5ZWFyICgtNjEgdG8gMzE3NylcbiAgICAgIEByZXR1cm5zIG51bWJlciBvZiB5ZWFycyBzaW5jZSB0aGUgbGFzdCBsZWFwIHllYXIgKDAgdG8gNClcbiAgICovXG4gIHByaXZhdGUgamFsQ2FsTGVhcChqeTogbnVtYmVyKSB7XG4gICAgY29uc3QgYmwgPSB0aGlzLmJyZWFrcy5sZW5ndGg7XG4gICAgbGV0IGpwID0gdGhpcy5icmVha3NbMF07XG4gICAgbGV0IGptOiBudW1iZXI7XG4gICAgbGV0IGp1bXA6IG51bWJlcjtcbiAgICBsZXQgbGVhcDogbnVtYmVyO1xuICAgIGxldCBuOiBudW1iZXI7XG4gICAgbGV0IGk6IG51bWJlcjtcblxuICAgIGlmIChqeSA8IGpwIHx8IGp5ID49IHRoaXMuYnJlYWtzW2JsIC0gMV0pIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBTb2xhckhpanJpIHllYXIgJyArIGp5KTtcblxuICAgIGZvciAoaSA9IDE7IGkgPCBibDsgaSArPSAxKSB7XG4gICAgICBqbSA9IHRoaXMuYnJlYWtzW2ldO1xuICAgICAganVtcCA9IGptIC0ganA7XG4gICAgICBpZiAoankgPCBqbSkgYnJlYWs7XG4gICAgICBqcCA9IGptO1xuICAgIH1cbiAgICBuID0gankgLSBqcDtcblxuICAgIGlmIChqdW1wIC0gbiA8IDYpIG4gPSBuIC0ganVtcCArIHRoaXMuZGl2KGp1bXAgKyA0LCAzMykgKiAzMztcbiAgICBsZWFwID0gdGhpcy5tb2QodGhpcy5tb2QobiArIDEsIDMzKSAtIDEsIDQpO1xuICAgIGlmIChsZWFwID09PSAtMSkge1xuICAgICAgbGVhcCA9IDQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxlYXA7XG4gIH1cblxuICBwcml2YXRlIGphbENhbChqeTogbnVtYmVyLCB3aXRob3V0TGVhcDogYm9vbGVhbikge1xuICAgIGNvbnN0IGJsID0gdGhpcy5icmVha3MubGVuZ3RoO1xuICAgIGNvbnN0IGd5ID0gankgKyA2MjE7XG4gICAgbGV0IGxlYXBKID0gLTE0O1xuICAgIGxldCBqcCA9IHRoaXMuYnJlYWtzWzBdO1xuICAgIGxldCBqbTogbnVtYmVyO1xuICAgIGxldCBqdW1wOiBudW1iZXI7XG4gICAgbGV0IGxlYXA6IG51bWJlcjtcbiAgICBsZXQgbjogbnVtYmVyO1xuICAgIGxldCBpOiBudW1iZXI7XG5cbiAgICBpZiAoankgPCBqcCB8fCBqeSA+PSB0aGlzLmJyZWFrc1tibCAtIDFdKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgU29sYXJIaWpyaSB5ZWFyICcgKyBqeSk7XG5cbiAgICAvLyBGaW5kIHRoZSBsaW1pdGluZyB5ZWFycyBmb3IgdGhlIFNvbGFySGlqcmkgeWVhciBqeS5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYmw7IGkgKz0gMSkge1xuICAgICAgam0gPSB0aGlzLmJyZWFrc1tpXTtcbiAgICAgIGp1bXAgPSBqbSAtIGpwO1xuICAgICAgaWYgKGp5IDwgam0pIGJyZWFrO1xuICAgICAgbGVhcEogPSBsZWFwSiArIHRoaXMuZGl2KGp1bXAsIDMzKSAqIDggKyB0aGlzLmRpdih0aGlzLm1vZChqdW1wLCAzMyksIDQpO1xuICAgICAganAgPSBqbTtcbiAgICB9XG4gICAgbiA9IGp5IC0ganA7XG5cbiAgICAvLyBGaW5kIHRoZSBudW1iZXIgb2YgbGVhcCB5ZWFycyBmcm9tIEFEIDYyMSB0byB0aGUgYmVnaW5uaW5nXG4gICAgLy8gb2YgdGhlIGN1cnJlbnQgU29sYXJIaWpyaSB5ZWFyIGluIHRoZSBQZXJzaWFuIGNhbGVuZGFyLlxuICAgIGxlYXBKID0gbGVhcEogKyB0aGlzLmRpdihuLCAzMykgKiA4ICsgdGhpcy5kaXYodGhpcy5tb2QobiwgMzMpICsgMywgNCk7XG4gICAgaWYgKHRoaXMubW9kKGp1bXAsIDMzKSA9PT0gNCAmJiBqdW1wIC0gbiA9PT0gNCkgbGVhcEogKz0gMTtcblxuICAgIC8vIEFuZCB0aGUgc2FtZSBpbiB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyICh1bnRpbCB0aGUgeWVhciBneSkuXG4gICAgY29uc3QgbGVhcEcgPSB0aGlzLmRpdihneSwgNCkgLSB0aGlzLmRpdigodGhpcy5kaXYoZ3ksIDEwMCkgKyAxKSAqIDMsIDQpIC0gMTUwO1xuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBHcmVnb3JpYW4gZGF0ZSBvZiBGYXJ2YXJkaW4gdGhlIDFzdC5cbiAgICBjb25zdCBtYXJjaCA9IDIwICsgbGVhcEogLSBsZWFwRztcblxuICAgIC8vIHJldHVybiB3aXRoIGd5IGFuZCBtYXJjaCB3aGVuIHdlIGRvbid0IG5lZWQgbGVhcFxuICAgIGlmICh3aXRob3V0TGVhcCkgcmV0dXJuIHsgZ3k6IGd5LCBtYXJjaDogbWFyY2ggfTtcblxuICAgIC8vIEZpbmQgaG93IG1hbnkgeWVhcnMgaGF2ZSBwYXNzZWQgc2luY2UgdGhlIGxhc3QgbGVhcCB5ZWFyLlxuICAgIGlmIChqdW1wIC0gbiA8IDYpIG4gPSBuIC0ganVtcCArIHRoaXMuZGl2KGp1bXAgKyA0LCAzMykgKiAzMztcbiAgICBsZWFwID0gdGhpcy5tb2QodGhpcy5tb2QobiArIDEsIDMzKSAtIDEsIDQpO1xuICAgIGlmIChsZWFwID09PSAtMSkge1xuICAgICAgbGVhcCA9IDQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxlYXA6IGxlYXAsXG4gICAgICBneTogZ3ksXG4gICAgICBtYXJjaDogbWFyY2gsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgajJkKGp5LCBqbSwgamQpOiBudW1iZXIge1xuICAgIGNvbnN0IHIgPSB0aGlzLmphbENhbChqeSwgdHJ1ZSk7XG4gICAgcmV0dXJuIHRoaXMuZzJkKHIuZ3ksIDMsIHIubWFyY2gpICsgKGptIC0gMSkgKiAzMSAtIHRoaXMuZGl2KGptLCA3KSAqIChqbSAtIDcpICsgamQgLSAxO1xuICB9XG5cbiAgcHJpdmF0ZSBkMmooamRuOiBudW1iZXIpIHtcbiAgICBjb25zdCBneSA9IHRoaXMuZDJnKGpkbikuZ3k7IC8vIENhbGN1bGF0ZSBHcmVnb3JpYW4geWVhciAoZ3kpLlxuICAgIGxldCBqeSA9IGd5IC0gNjIxO1xuICAgIGNvbnN0IHIgPSB0aGlzLmphbENhbChqeSwgZmFsc2UpO1xuICAgIGNvbnN0IGpkbjFmID0gdGhpcy5nMmQoZ3ksIDMsIHIubWFyY2gpO1xuICAgIGxldCBqZDogbnVtYmVyO1xuICAgIGxldCBqbTogbnVtYmVyO1xuICAgIGxldCBrOiBudW1iZXI7XG5cbiAgICAvLyBGaW5kIG51bWJlciBvZiBkYXlzIHRoYXQgcGFzc2VkIHNpbmNlIDEgRmFydmFyZGluLlxuICAgIGsgPSBqZG4gLSBqZG4xZjtcbiAgICBpZiAoayA+PSAwKSB7XG4gICAgICBpZiAoayA8PSAxODUpIHtcbiAgICAgICAgLy8gVGhlIGZpcnN0IDYgbW9udGhzLlxuICAgICAgICBqbSA9IDEgKyB0aGlzLmRpdihrLCAzMSk7XG4gICAgICAgIGpkID0gdGhpcy5tb2QoaywgMzEpICsgMTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBqeToganksXG4gICAgICAgICAgam06IGptLFxuICAgICAgICAgIGpkOiBqZCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSByZW1haW5pbmcgbW9udGhzLlxuICAgICAgICBrIC09IDE4NjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUHJldmlvdXMgU29sYXJIaWpyaSB5ZWFyLlxuICAgICAgankgLT0gMTtcbiAgICAgIGsgKz0gMTc5O1xuICAgICAgaWYgKHIubGVhcCA9PT0gMSkgayArPSAxO1xuICAgIH1cbiAgICBqbSA9IDcgKyB0aGlzLmRpdihrLCAzMCk7XG4gICAgamQgPSB0aGlzLm1vZChrLCAzMCkgKyAxO1xuICAgIHJldHVybiB7XG4gICAgICBqeToganksXG4gICAgICBqbTogam0sXG4gICAgICBqZDogamQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZzJkKGd5OiBudW1iZXIsIGdtOiBudW1iZXIsIGdkOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBkID1cbiAgICAgIHRoaXMuZGl2KChneSArIHRoaXMuZGl2KGdtIC0gOCwgNikgKyAxMDAxMDApICogMTQ2MSwgNCkgK1xuICAgICAgdGhpcy5kaXYoMTUzICogdGhpcy5tb2QoZ20gKyA5LCAxMikgKyAyLCA1KSArXG4gICAgICBnZCAtXG4gICAgICAzNDg0MDQwODtcbiAgICBkID0gZCAtIHRoaXMuZGl2KHRoaXMuZGl2KGd5ICsgMTAwMTAwICsgdGhpcy5kaXYoZ20gLSA4LCA2KSwgMTAwKSAqIDMsIDQpICsgNzUyO1xuICAgIHJldHVybiBkO1xuICB9XG5cbiAgcHJpdmF0ZSBkMmcoamRuOiBudW1iZXIpIHtcbiAgICBsZXQgaiA9IDQgKiBqZG4gKyAxMzkzNjE2MzE7XG4gICAgaiA9IDQgKiBqZG4gKyAxMzkzNjE2MzEgKyB0aGlzLmRpdih0aGlzLmRpdig0ICogamRuICsgMTgzMTg3NzIwLCAxNDYwOTcpICogMywgNCkgKiA0IC0gMzkwODtcbiAgICBjb25zdCBpID0gdGhpcy5kaXYodGhpcy5tb2QoaiwgMTQ2MSksIDQpICogNSArIDMwODtcbiAgICBjb25zdCBnZCA9IHRoaXMuZGl2KHRoaXMubW9kKGksIDE1MyksIDUpICsgMTtcbiAgICBjb25zdCBnbSA9IHRoaXMubW9kKHRoaXMuZGl2KGksIDE1MyksIDEyKSArIDE7XG4gICAgY29uc3QgZ3kgPSB0aGlzLmRpdihqLCAxNDYxKSAtIDEwMDEwMCArIHRoaXMuZGl2KDggLSBnbSwgNik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ3k6IGd5LFxuICAgICAgZ206IGdtLFxuICAgICAgZ2Q6IGdkLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIFNvbGFySGlqcmlXZWVrKGp5OiBudW1iZXIsIGptOiBudW1iZXIsIGpkOiBudW1iZXIpOiB7IHNhdHVyZGF5OiBhbnk7IGZyaWRheTogYW55IH0ge1xuICAgIGNvbnN0IGRheU9mV2VlayA9IHRoaXMuU29sYXJIaWpyaVRvRGF0ZU9iamVjdChqeSwgam0sIGpkLCAwLCAwLCAwLCAwKS5nZXREYXkoKTtcblxuICAgIGNvbnN0IHN0YXJ0RGF5RGlmZmVyZW5jZSA9IGRheU9mV2VlayA9PSA2ID8gMCA6IC0oZGF5T2ZXZWVrICsgMSk7XG4gICAgY29uc3QgZW5kRGF5RGlmZmVyZW5jZSA9IDYgKyBzdGFydERheURpZmZlcmVuY2U7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2F0dXJkYXk6IHRoaXMuZDJqKHRoaXMuajJkKGp5LCBqbSwgamQgKyBzdGFydERheURpZmZlcmVuY2UpKSxcbiAgICAgIGZyaWRheTogdGhpcy5kMmoodGhpcy5qMmQoanksIGptLCBqZCArIGVuZERheURpZmZlcmVuY2UpKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBTb2xhckhpanJpVG9EYXRlT2JqZWN0KGp5OiBudW1iZXIsIGptOiBudW1iZXIsIGpkOiBudW1iZXIsIGggPSAwLCBtID0gMCwgcyA9IDAsIG1zID0gMCkge1xuICAgIGNvbnN0IGdyZWdvcmlhbkNhbGVuZGVyRGF0ZSA9IHRoaXMudG9HcmVnb3JpYW4oanksIGptLCBqZCk7XG5cbiAgICByZXR1cm4gbmV3IERhdGUoXG4gICAgICBncmVnb3JpYW5DYWxlbmRlckRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgIGdyZWdvcmlhbkNhbGVuZGVyRGF0ZS5nZXRNb250aCgpIC0gMSxcblxuICAgICAgZ3JlZ29yaWFuQ2FsZW5kZXJEYXRlLmdldERhdGUoKSxcbiAgICAgIGggfHwgMCxcbiAgICAgIG0gfHwgMCxcbiAgICAgIHMgfHwgMCxcbiAgICAgIG1zIHx8IDAsXG4gICAgKTtcbiAgfVxuXG4gIC8qXG4gICAgVXRpbGl0eSBoZWxwZXIgZnVuY3Rpb25zLlxuICAqL1xuXG4gIHByaXZhdGUgZGl2KGE6IG51bWJlciwgYjogbnVtYmVyKSB7XG4gICAgcmV0dXJuIH5+KGEgLyBiKTtcbiAgfVxuXG4gIHByaXZhdGUgbW9kKGE6IG51bWJlciwgYjogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGEgLSB+fihhIC8gYikgKiBiO1xuICB9XG59XG4iXX0=","import { AXEventService, AXSystemEvents } from '@acorex/core/events';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { AXDateTime } from './datetime.types';\nimport { AXGregorianCalendar } from './gregorian.calendar';\nimport { AX_DATETIME_HOLIDAYS_LOADER } from './holidays.loader';\nimport { AXSolarHijriCalendar } from './solar-hijri.calendar';\nimport * as i0 from \"@angular/core\";\nexport class AXCalendarService {\n get calendar() {\n return this.getActiveCalendar();\n }\n getDefaultCalendar() {\n return this.resolveCalendar(this.localeService.activeProfile().calendar.system);\n }\n getActiveCalendar() {\n return this.activeCalendar.getValue();\n }\n setActiveCalendar(name) {\n if (name != this.calendar?.name()) {\n const calendar = this.resolveCalendar(name);\n this.notifyCalendarChanged(calendar);\n }\n }\n notifyCalendarChanged(calendar) {\n this.activeCalendar.next(calendar);\n this.eventService.emitEvent({\n type: AXSystemEvents.AXCalendarChanged,\n payload: calendar,\n });\n }\n buildWeekConfig(profile) {\n const weekdays = Array.from({ length: 7 }, (_, i) => (profile.calendar.week.startsOn + i) % 7);\n return {\n weekdays,\n weekend: profile.calendar.week.weekends,\n };\n }\n registerCalendars(profile) {\n const weekConfig = this.buildWeekConfig(profile);\n this.calendars.set('gregorian', new AXGregorianCalendar(weekConfig));\n this.calendars.set('solar-hijri', new AXSolarHijriCalendar(weekConfig));\n }\n applyLocaleWeekSettings(locale) {\n const weekConfig = this.buildWeekConfig(locale);\n this.calendars.forEach((calendar) => calendar.applyWeekConfig(weekConfig));\n this.notifyCalendarChanged(this.resolveCalendar(locale.calendar.system));\n }\n get holidays() {\n return this._holidays;\n }\n constructor() {\n this._holidaysLoader = inject(AX_DATETIME_HOLIDAYS_LOADER);\n this.eventService = inject(AXEventService);\n this.formatService = inject(AXFormatService);\n this.localeService = inject(AXLocaleService);\n this.calendars = new Map();\n this.onHolidaysChanged = new Subject();\n this._holidays = [];\n const profile = this.localeService.activeProfile();\n this.registerCalendars(profile);\n this.activeCalendar = new BehaviorSubject(this.resolveCalendar(profile.calendar.system));\n this.calendarChanges$ = this.activeCalendar.asObservable();\n this.loadHolidays();\n this.localeService.profileChanged$.subscribe((locale) => {\n if (locale?.calendar?.system) {\n this.applyLocaleWeekSettings(locale);\n }\n });\n }\n loadHolidays(options) {\n return this._holidaysLoader.getHolidays(options).then((value) => {\n this._holidays = value;\n this.onHolidaysChanged.next(this._holidays);\n });\n }\n isValidDate(value) {\n try {\n if (!value) {\n return false;\n }\n //\n if (value instanceof AXDateTime) {\n return true;\n }\n // Check if it's a Date object\n if (value instanceof Date) {\n return !isNaN(value.getTime());\n }\n // Check if it's a valid date string\n if (typeof value === 'string') {\n const parsed = new Date(value);\n return !isNaN(parsed.getTime());\n }\n // Check if it's an AXDateValue object\n if (typeof value === 'object') {\n return !!(value.year &&\n typeof value.month === 'number' &&\n value.month >= 1 &&\n value.month <= 12 &&\n value.year > 0);\n }\n return false;\n }\n catch (error) {\n return false;\n }\n }\n create(value, calendarName) {\n try {\n const calendar = calendarName ? this.resolveCalendar(calendarName) : this.calendar;\n if (!this.isValidDate(value)) {\n throw new Error(`Invalid Date value: ${value}`);\n }\n if (value instanceof AXDateTime) {\n return value;\n }\n else if (typeof value === 'string') {\n return new AXDateTime(new Date(value), calendar);\n }\n else if (value instanceof Date) {\n return new AXDateTime(value, calendar);\n }\n else if (value?.year && value?.month) {\n return calendar.create(value);\n }\n return this.now();\n }\n catch (error) {\n console.error('Error creating date:', error);\n throw new Error(`Invalid Date value: ${value}`);\n }\n }\n now(calendarName) {\n const calendar = calendarName ? this.resolveCalendar(calendarName) : this.calendar;\n return new AXDateTime(new Date(), calendar);\n }\n resolveCalendar(name) {\n const calendar = this.calendars.get(name);\n if (!calendar) {\n return this.calendar;\n }\n return calendar;\n }\n convert(value, calendarName) {\n const isISOString = (str) => {\n if (!/\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(.\\d{3}Z)?/.test(str))\n 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))\n return new AXDateTime(new Date(value), calendar);\n else\n return calendar.parse(value);\n }\n const date = value instanceof AXDateTime ? value.date : value;\n return new AXDateTime(date, calendar);\n }\n format(value, format, options) {\n const calendar = options?.calendar ? this.resolveCalendar(options.calendar) : this.calendar;\n return this.formatService.format(value, 'datetime', {\n format: format,\n calendar: calendar.name(),\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXCalendarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXCalendarService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXCalendarService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvZGF0ZS10aW1lL3NyYy9saWIvY2FsZW5kYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQW1CLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBZ0MsVUFBVSxFQUFxQyxNQUFNLGtCQUFrQixDQUFDO0FBRS9HLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBMEMsMkJBQTJCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFHOUQsTUFBTSxPQUFPLGlCQUFpQjtJQVE1QixJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBS00sa0JBQWtCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRU0saUJBQWlCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRU0saUJBQWlCLENBQUMsSUFBWTtRQUNuQyxJQUFJLElBQUksSUFB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QWlCO2tIQUFqQixpQkFBaUIsY0FESixNQUFNOzsyRkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYRXZlbnRTZXJ2aWNlLCBBWFN5c3RlbUV2ZW50cyB9IGZyb20gJ0BhY29yZXgvY29yZS9ldmVudHMnO1xuaW1wb3J0IHsgQVhGb3JtYXRTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2Zvcm1hdCc7XG5pbXBvcnQgeyBBWExvY2FsZVByb2ZpbGUsIEFYTG9jYWxlU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS9sb2NhbGUnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYQ2FsZW5kYXIsIEFYQ2FsZW5kYXJDb25maWcsIEFYRGF0ZVRpbWUsIEFYRGF0ZVZhbHVlLCBBWFZhbGlkRGF0ZVRpbWVWYWx1ZSB9IGZyb20gJy4vZGF0ZXRpbWUudHlwZXMnO1xuaW1wb3J0IHsgQVhEYXRlVGltZUZvcm1hdHRlck9wdGlvbnMgfSBmcm9tICcuL2Zvcm1hdHRlcnMvZGF0ZXRpbWUuZm9ybWF0dGVyJztcbmltcG9ydCB7IEFYR3JlZ29yaWFuQ2FsZW5kYXIgfSBmcm9tICcuL2dyZWdvcmlhbi5jYWxlbmRhcic7XG5pbXBvcnQgeyBBWEhvbGlkYXlEYXRlLCBBWEhvbGlkYXlzTG9hZGVyT3B0aW9ucywgQVhfREFURVRJTUVfSE9MSURBWVNfTE9BREVSIH0gZnJvbSAnLi9ob2xpZGF5cy5sb2FkZXInO1xuaW1wb3J0IHsgQVhTb2xhckhpanJpQ2FsZW5kYXIgfSBmcm9tICcuL3NvbGFyLWhpanJpLmNhbGVuZGFyJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBWENhbGVuZGFyU2VydmljZSB7XG4gIHByaXZhdGUgX2hvbGlkYXlzTG9hZGVyID0gaW5qZWN0KEFYX0RBVEVUSU1FX0hPTElEQVlTX0xPQURFUik7XG4gIHByaXZhdGUgZXZlbnRTZXJ2aWNlID0gaW5qZWN0KEFYRXZlbnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBmb3JtYXRTZXJ2aWNlID0gaW5qZWN0KEFYRm9ybWF0U2VydmljZSk7XG4gIHByaXZhdGUgbG9jYWxlU2VydmljZSA9IGluamVjdChBWExvY2FsZVNlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2FsZW5kYXJzID0gbmV3IE1hcDxzdHJpbmcsIEFYQ2FsZW5kYXI+KCk7XG5cbiAgcHVibGljIGdldCBjYWxlbmRhcigpOiBBWENhbGVuZGFyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBY3RpdmVDYWxlbmRhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBhY3RpdmVDYWxlbmRhciE6IEJlaGF2aW9yU3ViamVjdDxBWENhbGVuZGFyPjtcbiAgY2FsZW5kYXJDaGFuZ2VzJCE6IE9ic2VydmFibGU8QVhDYWxlbmRhcj47XG5cbiAgcHVibGljIGdldERlZmF1bHRDYWxlbmRhcigpOiBBWENhbGVuZGFyIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlQ2FsZW5kYXIodGhpcy5sb2NhbGVTZXJ2aWNlLmFjdGl2ZVByb2ZpbGUoKS5jYWxlbmRhci5zeXN0ZW0pO1xuICB9XG5cbiAgcHVibGljIGdldEFjdGl2ZUNhbGVuZGFyKCk6IEFYQ2FsZW5kYXIge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUNhbGVuZGFyLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0QWN0aXZlQ2FsZW5kYXIobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKG5hbWUgIT0gdGhpcy5jYWxlbmRhcj8ubmFtZSgpKSB7XG4gICAgICBjb25zdCBjYWxlbmRhciA9IHRoaXMucmVzb2x2ZUNhbGVuZGFyKG5hbWUpO1xuICAgICAgdGhpcy5ub3RpZnlDYWxlbmRhckNoYW5nZWQoY2FsZW5kYXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbm90aWZ5Q2FsZW5kYXJDaGFuZ2VkKGNhbGVuZGFyOiBBWENhbGVuZGFyKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVDYWxlbmRhci5uZXh0KGNhbGVuZGFyKTtcbiAgICB0aGlzLmV2ZW50U2VydmljZS5lbWl0RXZlbnQoe1xuICAgICAgdHlwZTogQVhTeXN0ZW1FdmVudHMuQVhDYWxlbmRhckNoYW5nZWQsXG4gICAgICBwYXlsb2FkOiBjYWxlbmRhcixcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRXZWVrQ29uZmlnKHByb2ZpbGU6IEFYTG9jYWxlUHJvZmlsZSk6IEFYQ2FsZW5kYXJDb25maWcge1xuICAgIGNvbnN0IHdlZWtkYXlzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgaSkgPT4gKHByb2ZpbGUuY2FsZW5kYXIud2Vlay5zdGFydHNPbiArIGkpICUgNyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdlZWtkYXlzLFxuICAgICAgd2Vla2VuZDogcHJvZmlsZS5jYWxlbmRhci53ZWVrLndlZWtlbmRzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyQ2FsZW5kYXJzKHByb2ZpbGU6IEFYTG9jYWxlUHJvZmlsZSk6IHZvaWQge1xuICAgIGNvbnN0IHdlZWtDb25maWcgPSB0aGlzLmJ1aWxkV2Vla0NvbmZpZyhwcm9maWxlKTtcbiAgICB0aGlzLmNhbGVuZGFycy5zZXQoJ2dyZWdvcmlhbicsIG5ldyBBWEdyZWdvcmlhbkNhbGVuZGFyKHdlZWtDb25maWcpKTtcbiAgICB0aGlzLmNhbGVuZGFycy5zZXQoJ3NvbGFyLWhpanJpJywgbmV3IEFYU29sYXJIaWpyaUNhbGVuZGFyKHdlZWtDb25maWcpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlMb2NhbGVXZWVrU2V0dGluZ3MobG9jYWxlOiBBWExvY2FsZVByb2ZpbGUpOiB2b2lkIHtcbiAgICBjb25zdCB3ZWVrQ29uZmlnID0gdGhpcy5idWlsZFdlZWtDb25maWcobG9jYWxlKTtcbiAgICB0aGlzLmNhbGVuZGFycy5mb3JFYWNoKChjYWxlbmRhcikgPT4gY2FsZW5kYXIuYXBwbHlXZWVrQ29uZmlnKHdlZWtDb25maWcpKTtcbiAgICB0aGlzLm5vdGlmeUNhbGVuZGFyQ2hhbmdlZCh0aGlzLnJlc29sdmVDYWxlbmRhcihsb2NhbGUuY2FsZW5kYXIuc3lzdGVtKSk7XG4gIH1cblxuICBwdWJsaWMgb25Ib2xpZGF5c0NoYW5nZWQ6IFN1YmplY3Q8QVhIb2xpZGF5RGF0ZVtdPiA9IG5ldyBTdWJqZWN0PEFYSG9saWRheURhdGVbXT4oKTtcbiAgcHJpdmF0ZSBfaG9saWRheXM6IEFYSG9saWRheURhdGVbXSA9IFtdO1xuICBwdWJsaWMgZ2V0IGhvbGlkYXlzKCk6IEFYSG9saWRheURhdGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2hvbGlkYXlzO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcHJvZmlsZSA9IHRoaXMubG9jYWxlU2VydmljZS5hY3RpdmVQcm9maWxlKCk7XG4gICAgdGhpcy5yZWdpc3RlckNhbGVuZGFycyhwcm9maWxlKTtcbiAgICB0aGlzLmFjdGl2ZUNhbGVuZGFyID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLnJlc29sdmVDYWxlbmRhcihwcm9maWxlLmNhbGVuZGFyLnN5c3RlbSkpO1xuICAgIHRoaXMuY2FsZW5kYXJDaGFuZ2VzJCA9IHRoaXMuYWN0aXZlQ2FsZW5kYXIuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICB0aGlzLmxvYWRIb2xpZGF5cygpO1xuICAgIHRoaXMubG9jYWxlU2VydmljZS5wcm9maWxlQ2hhbmdlZCQuc3Vic2NyaWJlKChsb2NhbGUpID0+IHtcbiAgICAgIGlmIChsb2NhbGU/LmNhbGVuZGFyPy5zeXN0ZW0pIHtcbiAgICAgICAgdGhpcy5hcHBseUxvY2FsZVdlZWtTZXR0aW5ncyhsb2NhbGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGxvYWRIb2xpZGF5cyhvcHRpb25zPzogQVhIb2xpZGF5c0xvYWRlck9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5faG9saWRheXNMb2FkZXIuZ2V0SG9saWRheXMob3B0aW9ucykudGhlbigodmFsdWUpID0+IHtcbiAgICAgIHRoaXMuX2hvbGlkYXlzID0gdmFsdWU7XG4gICAgICB0aGlzLm9uSG9saWRheXNDaGFuZ2VkLm5leHQodGhpcy5faG9saWRheXMpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGlzVmFsaWREYXRlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvL1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQVhEYXRlVGltZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIGlmIGl0J3MgYSBEYXRlIG9iamVjdFxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gIWlzTmFOKHZhbHVlLmdldFRpbWUoKSk7XG4gICAgICB9XG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGEgdmFsaWQgZGF0ZSBzdHJpbmdcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuICFpc05hTihwYXJzZWQuZ2V0VGltZSgpKTtcbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIGlmIGl0J3MgYW4gQVhEYXRlVmFsdWUgb2JqZWN0XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gISEoXG4gICAgICAgICAgdmFsdWUueWVhciAmJlxuICAgICAgICAgIHR5cGVvZiB2YWx1ZS5tb250aCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICB2YWx1ZS5tb250aCA+PSAxICYmXG4gICAgICAgICAgdmFsdWUubW9udGggPD0gMTIgJiZcbiAgICAgICAgICB2YWx1ZS55ZWFyID4gMFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNyZWF0ZSh2YWx1ZTogQVhEYXRlVmFsdWUsIGNhbGVuZGFyTmFtZT86IHN0cmluZyk6IEFYRGF0ZVRpbWU7XG4gIHB1YmxpYyBjcmVhdGUodmFsdWU6IERhdGUsIGNhbGVuZGFyTmFtZT86IHN0cmluZyk6IEFYRGF0ZVRpbWU7XG4gIHB1YmxpYyBjcmVhdGUodmFsdWU6IHN0cmluZywgY2FsZW5kYXJOYW1lPzogc3RyaW5nKTogQVhEYXRlVGltZTtcbiAgcHVibGljIGNyZWF0ZSh2YWx1ZTogQVhEYXRlVGltZSk6IEFYRGF0ZVRpbWU7XG4gIHB1YmxpYyBjcmVhdGUodmFsdWU6IEFYRGF0ZVZhbHVlIHwgRGF0ZSB8IHN0cmluZyB8IEFYRGF0ZVRpbWUsIGNhbGVuZGFyTmFtZT86IHN0cmluZyk6IEFYRGF0ZVRpbWUge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjYWxlbmRhciA9IGNhbGVuZGFyTmFtZSA/IHRoaXMucmVzb2x2ZUNhbGVuZGFyKGNhbGVuZGFyTmFtZSkgOiB0aGlzLmNhbGVuZGFyO1xuXG4gICAgICBpZiAoIXRoaXMuaXNWYWxpZERhdGUodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBEYXRlIHZhbHVlOiAke3ZhbHVlfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBWERhdGVUaW1lKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUobmV3IERhdGUodmFsdWUpLCBjYWxlbmRhcik7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUodmFsdWUsIGNhbGVuZGFyKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWU/LnllYXIgJiYgdmFsdWU/Lm1vbnRoKSB7XG4gICAgICAgIHJldHVybiBjYWxlbmRhci5jcmVhdGUodmFsdWUgYXMgQVhEYXRlVmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubm93KCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIGRhdGU6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIERhdGUgdmFsdWU6ICR7dmFsdWV9YCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5vdyhjYWxlbmRhck5hbWU/OiBzdHJpbmcpOiBBWERhdGVUaW1lIHtcbiAgICBjb25zdCBjYWxlbmRhciA9IGNhbGVuZGFyTmFtZSA/IHRoaXMucmVzb2x2ZUNhbGVuZGFyKGNhbGVuZGFyTmFtZSkgOiB0aGlzLmNhbGVuZGFyO1xuICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShuZXcgRGF0ZSgpLCBjYWxlbmRhcik7XG4gIH1cblxuICBwdWJsaWMgcmVzb2x2ZUNhbGVuZGFyKG5hbWU6IHN0cmluZyk6IEFYQ2FsZW5kYXIge1xuICAgIGNvbnN0IGNhbGVuZGFyID0gdGhpcy5jYWxlbmRhcnMuZ2V0KG5hbWUpO1xuICAgIGlmICghY2FsZW5kYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhbGVuZGFyO1xuICAgIH1cbiAgICByZXR1cm4gY2FsZW5kYXI7XG4gIH1cblxuICBwdWJsaWMgY29udmVydCh2YWx1ZTogQVhWYWxpZERhdGVUaW1lVmFsdWUsIGNhbGVuZGFyTmFtZT86IHN0cmluZyk6IEFYRGF0ZVRpbWUge1xuICAgIGNvbnN0IGlzSVNPU3RyaW5nID0gKHN0cikgPT4ge1xuICAgICAgaWYgKCEvXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0oLlxcZHszfVopPy8udGVzdChzdHIpKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBkID0gbmV3IERhdGUoc3RyKTtcbiAgICAgIHJldHVybiBkIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZC5nZXRUaW1lKCkpOyAvLyB2YWxpZCBkYXRlXG4gICAgfTtcbiAgICAvL1xuICAgIGNvbnN0IGNhbGVuZGFyID0gY2FsZW5kYXJOYW1lID8gdGhpcy5yZXNvbHZlQ2FsZW5kYXIoY2FsZW5kYXJOYW1lKSA6IHRoaXMuY2FsZW5kYXI7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChpc0lTT1N0cmluZyh2YWx1ZSkpIHJldHVybiBuZXcgQVhEYXRlVGltZShuZXcgRGF0ZSh2YWx1ZSksIGNhbGVuZGFyKTtcbiAgICAgIGVsc2UgcmV0dXJuIGNhbGVuZGFyLnBhcnNlKHZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgZGF0ZSA9IHZhbHVlIGluc3RhbmNlb2YgQVhEYXRlVGltZSA/IHZhbHVlLmRhdGUgOiAodmFsdWUgYXMgRGF0ZSk7XG4gICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGRhdGUsIGNhbGVuZGFyKTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXQodmFsdWU6IEFYVmFsaWREYXRlVGltZVZhbHVlLCBmb3JtYXQ6IHN0cmluZywgb3B0aW9ucz86IEFYRGF0ZVRpbWVGb3JtYXR0ZXJPcHRpb25zKTogc3RyaW5nIHtcbiAgICBjb25zdCBjYWxlbmRhciA9IG9wdGlvbnM/LmNhbGVuZGFyID8gdGhpcy5yZXNvbHZlQ2FsZW5kYXIob3B0aW9ucy5jYWxlbmRhcikgOiB0aGlzLmNhbGVuZGFyO1xuXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0U2VydmljZS5mb3JtYXQodmFsdWUsICdkYXRldGltZScsIHtcbiAgICAgIGZvcm1hdDogZm9ybWF0LFxuICAgICAgY2FsZW5kYXI6IGNhbGVuZGFyLm5hbWUoKSxcbiAgICB9KTtcbiAgfVxufVxuIl19","import { AXFormatService } from '@acorex/core/format';\nimport { Pipe, inject } from '@angular/core';\nimport { AXCalendarService } from './calendar.service';\nimport * as i0 from \"@angular/core\";\n/**\n * @deprecated The pipe should not be used, use format instead\n */\nexport class AXDateTimePipe {\n constructor() {\n this._calendarService = inject(AXCalendarService);\n this.formatService = inject(AXFormatService);\n }\n transform(value, format, calendarName) {\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 = this._calendarService.convert(value, calendar.name());\n return this.formatService.format(val, 'datetime', format);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDateTimePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDateTimePipe, isStandalone: true, name: \"axDate\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDateTimePipe, decorators: [{\n type: Pipe,\n args: [{ name: 'axDate' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvZGF0ZS10aW1lL3NyYy9saWIvZGF0ZXRpbWUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQUd2RDs7R0FFRztBQUVILE1BQU0sT0FBTyxjQUFjO0lBRDNCO1FBRVUscUJBQWdCLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hFLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBYWpEO0lBWEMsU0FBUyxDQUFDLEtBQWlDLEVBQUUsTUFBZSxFQUFFLFlBQXFCO1FBQ2pGLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7UUFDOUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQWUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUUsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQWEsQ0FBQyxDQUFDO0lBQ25FLENBQUM7OEdBZFUsY0FBYzs0R0FBZCxjQUFjOzsyRkFBZCxjQUFjO2tCQUQxQixJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYRm9ybWF0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS9mb3JtYXQnO1xuaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4vY2FsZW5kYXIuc2VydmljZSc7XG5pbXBvcnQgeyBBWERhdGVUaW1lIH0gZnJvbSAnLi9kYXRldGltZS50eXBlcyc7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVGhlIHBpcGUgc2hvdWxkIG5vdCBiZSB1c2VkLCB1c2UgZm9ybWF0IGluc3RlYWRcbiAqL1xuQFBpcGUoeyBuYW1lOiAnYXhEYXRlJyB9KVxuZXhwb3J0IGNsYXNzIEFYRGF0ZVRpbWVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHByaXZhdGUgX2NhbGVuZGFyU2VydmljZTogQVhDYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIGZvcm1hdFNlcnZpY2UgPSBpbmplY3QoQVhGb3JtYXRTZXJ2aWNlKTtcblxuICB0cmFuc2Zvcm0odmFsdWU6IERhdGUgfCBBWERhdGVUaW1lIHwgc3RyaW5nLCBmb3JtYXQ/OiBzdHJpbmcsIGNhbGVuZGFyTmFtZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgbGV0IGNhbGVuZGFyID0gdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmNhbGVuZGFyO1xuICAgIGlmIChjYWxlbmRhck5hbWUpIHtcbiAgICAgIGNhbGVuZGFyID0gdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLnJlc29sdmVDYWxlbmRhcihjYWxlbmRhck5hbWUpO1xuICAgIH1cbiAgICBjb25zdCB2YWw6IEFYRGF0ZVRpbWUgPSB0aGlzLl9jYWxlbmRhclNlcnZpY2UuY29udmVydCh2YWx1ZSwgY2FsZW5kYXIubmFtZSgpKTtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXRTZXJ2aWNlLmZvcm1hdCh2YWwsICdkYXRldGltZScsIGZvcm1hdCBhcyBhbnkpO1xuICB9XG59XG4iXX0=","import { AXLocaleService } from '@acorex/core/locale';\nimport { inject, Injectable } from '@angular/core';\nimport { isNil } from 'lodash-es';\nimport { AXCalendarService } from '../calendar.service';\nimport * as i0 from \"@angular/core\";\nexport class AXDateFormatter {\n constructor() {\n this.calendarService = inject(AXCalendarService);\n this.localeService = inject(AXLocaleService);\n }\n get name() {\n return 'date';\n }\n format(value, options) {\n if (isNil(value)) {\n return '';\n }\n //\n if (!this.calendarService.isValidDate(value))\n return 'Invalid date';\n //\n const effectiveOptions = typeof options == 'object'\n ? {\n format: options.format ?? 'short',\n locale: options.locale,\n calendar: options.calendar ?? this.calendarService.calendar.name(),\n }\n : {\n format: options,\n calendar: this.calendarService.calendar.name(),\n };\n //\n const formats = this.localeService.activeProfile().formats;\n const map = {\n short: formats.date.short,\n medium: formats.date.medium,\n long: formats.date.long,\n full: formats.date.full,\n };\n const format = map[effectiveOptions.format] ?? effectiveOptions.format ?? map['short'];\n //\n return this.calendarService\n .convert(value, effectiveOptions.calendar)\n .format(format, { locale: effectiveOptions.locale });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDateFormatter, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDateFormatter }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDateFormatter, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5mb3JtYXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL2RhdGUtdGltZS9zcmMvbGliL2Zvcm1hdHRlcnMvZGF0ZS5mb3JtYXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBS3hELE1BQU0sT0FBTyxlQUFlO0lBRDVCO1FBRVUsb0JBQWUsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM1QyxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztLQXNDakQ7SUFwQ0MsSUFBSSxJQUFJO1FBQ04sT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUEyQixFQUFFLE9BQTZDO1FBQy9FLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakIsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsRUFBRTtRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLGNBQWMsQ0FBQztRQUNwRSxFQUFFO1FBQ0YsTUFBTSxnQkFBZ0IsR0FDcEIsT0FBTyxPQUFPLElBQUksUUFBUTtZQUN4QixDQUFDLENBQUM7Z0JBQ0UsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTztnQkFDakMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO2dCQUN0QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUU7YUFDbkU7WUFDSCxDQUFDLENBQUM7Z0JBQ0UsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTthQUMvQyxDQUFDO1FBQ1IsRUFBRTtRQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQzNELE1BQU0sR0FBRyxHQUFHO1lBQ1YsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSztZQUN6QixNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQzNCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUk7WUFDdkIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSTtTQUN4QixDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQTBCLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNHLEVBQUU7UUFDRixPQUFPLElBQUksQ0FBQyxlQUFlO2FBQ3hCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsUUFBa0IsQ0FBQzthQUNuRCxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQzs4R0F2Q1UsZUFBZTtrSEFBZixlQUFlOzsyRkFBZixlQUFlO2tCQUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhGb3JtYXR0ZXIgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFYTG9jYWxlU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS9sb2NhbGUnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhWYWxpZERhdGVUaW1lVmFsdWUgfSBmcm9tICcuLi9kYXRldGltZS50eXBlcyc7XG5pbXBvcnQgeyBBWERhdGVUaW1lRm9ybWF0dGVyT3B0aW9ucyB9IGZyb20gJy4vZGF0ZXRpbWUuZm9ybWF0dGVyJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFYRGF0ZUZvcm1hdHRlciBpbXBsZW1lbnRzIEFYRm9ybWF0dGVyIHtcbiAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIGxvY2FsZVNlcnZpY2UgPSBpbmplY3QoQVhMb2NhbGVTZXJ2aWNlKTtcblxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnZGF0ZSc7XG4gIH1cblxuICBmb3JtYXQodmFsdWU6IEFYVmFsaWREYXRlVGltZVZhbHVlLCBvcHRpb25zPzogQVhEYXRlVGltZUZvcm1hdHRlck9wdGlvbnMgfCBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgLy9cbiAgICBpZiAoIXRoaXMuY2FsZW5kYXJTZXJ2aWNlLmlzVmFsaWREYXRlKHZhbHVlKSkgcmV0dXJuICdJbnZhbGlkIGRhdGUnO1xuICAgIC8vXG4gICAgY29uc3QgZWZmZWN0aXZlT3B0aW9ucyA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucyA9PSAnb2JqZWN0J1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIGZvcm1hdDogb3B0aW9ucy5mb3JtYXQgPz8gJ3Nob3J0JyxcbiAgICAgICAgICAgIGxvY2FsZTogb3B0aW9ucy5sb2NhbGUsXG4gICAgICAgICAgICBjYWxlbmRhcjogb3B0aW9ucy5jYWxlbmRhciA/PyB0aGlzLmNhbGVuZGFyU2VydmljZS5jYWxlbmRhci5uYW1lKCksXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIGZvcm1hdDogb3B0aW9ucyxcbiAgICAgICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyU2VydmljZS5jYWxlbmRhci5uYW1lKCksXG4gICAgICAgICAgfTtcbiAgICAvL1xuICAgIGNvbnN0IGZvcm1hdHMgPSB0aGlzLmxvY2FsZVNlcnZpY2UuYWN0aXZlUHJvZmlsZSgpLmZvcm1hdHM7XG4gICAgY29uc3QgbWFwID0ge1xuICAgICAgc2hvcnQ6IGZvcm1hdHMuZGF0ZS5zaG9ydCxcbiAgICAgIG1lZGl1bTogZm9ybWF0cy5kYXRlLm1lZGl1bSxcbiAgICAgIGxvbmc6IGZvcm1hdHMuZGF0ZS5sb25nLFxuICAgICAgZnVsbDogZm9ybWF0cy5kYXRlLmZ1bGwsXG4gICAgfTtcbiAgICBjb25zdCBmb3JtYXQgPSBtYXBbZWZmZWN0aXZlT3B0aW9ucy5mb3JtYXQgYXMga2V5b2YgdHlwZW9mIG1hcF0gPz8gZWZmZWN0aXZlT3B0aW9ucy5mb3JtYXQgPz8gbWFwWydzaG9ydCddO1xuICAgIC8vXG4gICAgcmV0dXJuIHRoaXMuY2FsZW5kYXJTZXJ2aWNlXG4gICAgICAuY29udmVydCh2YWx1ZSwgZWZmZWN0aXZlT3B0aW9ucy5jYWxlbmRhciBhcyBzdHJpbmcpXG4gICAgICAuZm9ybWF0KGZvcm1hdCwgeyBsb2NhbGU6IGVmZmVjdGl2ZU9wdGlvbnMubG9jYWxlIH0pO1xuICB9XG59XG4iXX0=","import { AXLocaleService } from '@acorex/core/locale';\nimport { Injectable, inject } from '@angular/core';\nimport { isNil } from 'lodash-es';\nimport { AXCalendarService } from '../calendar.service';\nimport * as i0 from \"@angular/core\";\nexport class AXDateTimeFormatter {\n constructor() {\n this.localeService = inject(AXLocaleService);\n this.calendarService = inject(AXCalendarService);\n }\n get name() {\n return 'datetime';\n }\n format(value, options) {\n if (isNil(value)) {\n return '';\n }\n //\n if (!this.calendarService.isValidDate(value))\n return 'Invalid date';\n //\n const effectiveOptions = typeof options == 'object'\n ? {\n format: options.format ?? 'date',\n locale: options.locale,\n calendar: options.calendar ?? this.calendarService.calendar.name(),\n }\n : {\n format: options,\n calendar: this.calendarService.calendar.name(),\n };\n //\n const formats = this.localeService.activeProfile().formats;\n const map = {\n longDate: formats.date.long,\n shortDate: formats.date.short,\n mediumDate: formats.date.medium,\n date: formats.date.short,\n //\n longTime: formats.time.long,\n shortTime: formats.time.short,\n mediumTime: formats.time.medium,\n time: formats.time.short,\n //\n long: formats.datetime.long,\n short: formats.datetime.short,\n medium: formats.datetime.medium,\n full: formats.datetime.full,\n };\n const format = map[effectiveOptions.format] ?? effectiveOptions.format ?? map['date'];\n //\n return this.calendarService\n .convert(value, effectiveOptions.calendar)\n .format(format, { locale: effectiveOptions.locale });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDateTimeFormatter, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDateTimeFormatter }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDateTimeFormatter, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9kYXRlLXRpbWUvc3JjL2xpYi9mb3JtYXR0ZXJzL2RhdGV0aW1lLmZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFnQnhELE1BQU0sT0FBTyxtQkFBbUI7SUFEaEM7UUFFVSxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN4QyxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0tBZ0RyRDtJQTlDQyxJQUFJLElBQUk7UUFDTixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQTJCLEVBQUUsT0FBNkM7UUFDL0UsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqQixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxFQUFFO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sY0FBYyxDQUFDO1FBQ3BFLEVBQUU7UUFDRixNQUFNLGdCQUFnQixHQUNwQixPQUFPLE9BQU8sSUFBSSxRQUFRO1lBQ3hCLENBQUMsQ0FBQztnQkFDRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sSUFBSSxNQUFNO2dCQUNoQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07Z0JBQ3RCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTthQUNuRTtZQUNILENBQUMsQ0FBQztnQkFDRSxNQUFNLEVBQUUsT0FBTztnQkFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFO2FBQy9DLENBQUM7UUFDUixFQUFFO1FBQ0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDM0QsTUFBTSxHQUFHLEdBQUc7WUFDVixRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQzNCLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFDN0IsVUFBVSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUMvQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQ3hCLEVBQUU7WUFDRixRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQzNCLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFDN0IsVUFBVSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUMvQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQ3hCLEVBQUU7WUFDRixJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJO1lBQzNCLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUs7WUFDN0IsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtZQUMvQixJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJO1NBQzVCLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsTUFBMEIsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUcsRUFBRTtRQUNGLE9BQU8sSUFBSSxDQUFDLGVBQWU7YUFDeEIsT0FBTyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxRQUFrQixDQUFDO2FBQ25ELE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDOzhHQWpEVSxtQkFBbUI7a0hBQW5CLG1CQUFtQjs7MkZBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYRm9ybWF0T3B0aW9ucywgQVhGb3JtYXR0ZXIgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFYTG9jYWxlU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS9sb2NhbGUnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhWYWxpZERhdGVUaW1lVmFsdWUgfSBmcm9tICcuLi9kYXRldGltZS50eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhEYXRlVGltZUZvcm1hdHRlck9wdGlvbnMgZXh0ZW5kcyBBWEZvcm1hdE9wdGlvbnMge1xuICBmb3JtYXQ/OiBzdHJpbmc7XG4gIGNhbGVuZGFyPzogc3RyaW5nO1xuICBsb2NhbGU/OiBzdHJpbmc7XG59XG5cbmRlY2xhcmUgbW9kdWxlICdAYWNvcmV4L2NvcmUvZm9ybWF0JyB7XG4gIGludGVyZmFjZSBBWEZvcm1hdE9wdGlvbnNNYXAge1xuICAgIGRhdGV0aW1lOiBBWERhdGVUaW1lRm9ybWF0dGVyT3B0aW9ucztcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhEYXRlVGltZUZvcm1hdHRlciBpbXBsZW1lbnRzIEFYRm9ybWF0dGVyIHtcbiAgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlID0gaW5qZWN0KEFYTG9jYWxlU2VydmljZSk7XG4gIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlID0gaW5qZWN0KEFYQ2FsZW5kYXJTZXJ2aWNlKTtcblxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnZGF0ZXRpbWUnO1xuICB9XG5cbiAgZm9ybWF0KHZhbHVlOiBBWFZhbGlkRGF0ZVRpbWVWYWx1ZSwgb3B0aW9ucz86IEFYRGF0ZVRpbWVGb3JtYXR0ZXJPcHRpb25zIHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIC8vXG4gICAgaWYgKCF0aGlzLmNhbGVuZGFyU2VydmljZS5pc1ZhbGlkRGF0ZSh2YWx1ZSkpIHJldHVybiAnSW52YWxpZCBkYXRlJztcbiAgICAvL1xuICAgIGNvbnN0IGVmZmVjdGl2ZU9wdGlvbnMgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMgPT0gJ29iamVjdCdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBmb3JtYXQ6IG9wdGlvbnMuZm9ybWF0ID8/ICdkYXRlJyxcbiAgICAgICAgICAgIGxvY2FsZTogb3B0aW9ucy5sb2NhbGUsXG4gICAgICAgICAgICBjYWxlbmRhcjogb3B0aW9ucy5jYWxlbmRhciA/PyB0aGlzLmNhbGVuZGFyU2VydmljZS5jYWxlbmRhci5uYW1lKCksXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIGZvcm1hdDogb3B0aW9ucyxcbiAgICAgICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyU2VydmljZS5jYWxlbmRhci5uYW1lKCksXG4gICAgICAgICAgfTtcbiAgICAvL1xuICAgIGNvbnN0IGZvcm1hdHMgPSB0aGlzLmxvY2FsZVNlcnZpY2UuYWN0aXZlUHJvZmlsZSgpLmZvcm1hdHM7XG4gICAgY29uc3QgbWFwID0ge1xuICAgICAgbG9uZ0RhdGU6IGZvcm1hdHMuZGF0ZS5sb25nLFxuICAgICAgc2hvcnREYXRlOiBmb3JtYXRzLmRhdGUuc2hvcnQsXG4gICAgICBtZWRpdW1EYXRlOiBmb3JtYXRzLmRhdGUubWVkaXVtLFxuICAgICAgZGF0ZTogZm9ybWF0cy5kYXRlLnNob3J0LFxuICAgICAgLy9cbiAgICAgIGxvbmdUaW1lOiBmb3JtYXRzLnRpbWUubG9uZyxcbiAgICAgIHNob3J0VGltZTogZm9ybWF0cy50aW1lLnNob3J0LFxuICAgICAgbWVkaXVtVGltZTogZm9ybWF0cy50aW1lLm1lZGl1bSxcbiAgICAgIHRpbWU6IGZvcm1hdHMudGltZS5zaG9ydCxcbiAgICAgIC8vXG4gICAgICBsb25nOiBmb3JtYXRzLmRhdGV0aW1lLmxvbmcsXG4gICAgICBzaG9ydDogZm9ybWF0cy5kYXRldGltZS5zaG9ydCxcbiAgICAgIG1lZGl1bTogZm9ybWF0cy5kYXRldGltZS5tZWRpdW0sXG4gICAgICBmdWxsOiBmb3JtYXRzLmRhdGV0aW1lLmZ1bGwsXG4gICAgfTtcbiAgICBjb25zdCBmb3JtYXQgPSBtYXBbZWZmZWN0aXZlT3B0aW9ucy5mb3JtYXQgYXMga2V5b2YgdHlwZW9mIG1hcF0gPz8gZWZmZWN0aXZlT3B0aW9ucy5mb3JtYXQgPz8gbWFwWydkYXRlJ107XG4gICAgLy9cbiAgICByZXR1cm4gdGhpcy5jYWxlbmRhclNlcnZpY2VcbiAgICAgIC5jb252ZXJ0KHZhbHVlLCBlZmZlY3RpdmVPcHRpb25zLmNhbGVuZGFyIGFzIHN0cmluZylcbiAgICAgIC5mb3JtYXQoZm9ybWF0LCB7IGxvY2FsZTogZWZmZWN0aXZlT3B0aW9ucy5sb2NhbGUgfSk7XG4gIH1cbn1cbiJdfQ==","import { AXTranslationService } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXTimeDurationFormatter {\n constructor() {\n this.translationService = inject(AXTranslationService);\n }\n get name() {\n return 'time-duration';\n }\n format(value, options) {\n const milliseconds = Number(value);\n if (milliseconds === null || isNaN(milliseconds)) {\n return '...';\n }\n // Convert milliseconds to various units\n const totalMilliseconds = milliseconds % 1000;\n const totalSeconds = Math.floor(milliseconds / 1000);\n const seconds = totalSeconds % 60;\n const totalMinutes = Math.floor(totalSeconds / 60);\n const minutes = totalMinutes % 60;\n const totalHours = Math.floor(totalMinutes / 60);\n // Helper function for zero-padding\n const pad = (num, length = 2) => num.toString().padStart(length, '0');\n // Default format if none provided\n const format = options?.format || (totalHours >= 0 ? 'HH:mm:ss' : 'mm:ss');\n const formattedTime = [];\n // Parse format and build the time string accordingly\n if (format.includes('HH') || format.includes('H')) {\n formattedTime.push(pad(totalHours));\n }\n if (format.includes('mm')) {\n formattedTime.push(pad(minutes));\n }\n else if (format.includes('m')) {\n formattedTime.push(minutes.toString());\n }\n if (format.includes('ss')) {\n formattedTime.push(pad(seconds));\n }\n else if (format.includes('s')) {\n formattedTime.push(seconds.toString());\n }\n if (format.includes('ms') || format.includes('MS')) {\n formattedTime.push(pad(totalMilliseconds, 3));\n }\n // Join the parts according to the format\n return formattedTime.join(format.includes('ms') || format.includes('MS') ? ':' : ':');\n }\n async millisecondsToMask(ms, startUnit = 'YEAR', endUnit = 'MILLISECOND', label = false, maskDigits = '00:00:00:00:00:00:00:000', padZero = false) {\n if (ms <= 0)\n return '';\n const yearDigits = maskDigits.split(':')[0];\n const monthDigits = maskDigits.split(':')[1];\n const weekDigits = maskDigits.split(':')[2];\n const dayDigits = maskDigits.split(':')[3];\n const hourDigits = maskDigits.split(':')[4];\n const minuteDigits = maskDigits.split(':')[5];\n const secondDigits = maskDigits.split(':')[6];\n const millisecondDigits = maskDigits.split(':')[7];\n const translations = await Promise.all([\n this.translationService.translateAsync('@acorex:dateTime.units.year'),\n this.translationService.translateAsync('@acorex:dateTime.units.month'),\n this.translationService.translateAsync('@acorex:dateTime.units.week'),\n this.translationService.translateAsync('@acorex:dateTime.units.day'),\n this.translationService.translateAsync('@acorex:dateTime.units.hour'),\n this.translationService.translateAsync('@acorex:dateTime.units.minute'),\n this.translationService.translateAsync('@acorex:dateTime.units.second'),\n this.translationService.translateAsync('@acorex:dateTime.units.millisecond'),\n ]);\n const units = [\n { key: 'YEAR', label: translations[0].toLocaleUpperCase(), value: 1000 * 60 * 60 * 24 * 365, digits: yearDigits },\n {\n key: 'MONTH',\n label: translations[1].toLocaleUpperCase(),\n value: 1000 * 60 * 60 * 24 * 30,\n digits: monthDigits,\n },\n { key: 'WEEK', label: translations[2].toLocaleUpperCase(), value: 1000 * 60 * 60 * 24 * 7, digits: weekDigits },\n { key: 'DAY', label: translations[3].toLocaleUpperCase(), value: 1000 * 60 * 60 * 24, digits: dayDigits },\n { key: 'HOUR', label: translations[4].toLocaleUpperCase(), value: 1000 * 60 * 60, digits: hourDigits },\n { key: 'MINUTE', label: translations[5].toLocaleUpperCase(), value: 1000 * 60, digits: minuteDigits },\n { key: 'SECOND', label: translations[6].toLocaleUpperCase(), value: 1000, digits: secondDigits },\n { key: 'MILLISECOND', label: translations[7].toLocaleUpperCase(), value: 1, digits: millisecondDigits },\n ];\n const startIndex = units.findIndex((u) => u.key === startUnit.toUpperCase());\n const endIndex = units.findIndex((u) => u.key === endUnit.toUpperCase());\n if (startIndex === -1 || endIndex === -1 || startIndex > endIndex) {\n throw new Error('Invalid time unit range');\n }\n const limitedUnits = units.slice(startIndex, endIndex + 1);\n let remainingMs = ms;\n const result = [];\n for (let i = 0; i < limitedUnits.length; i++) {\n const unit = limitedUnits[i];\n const maxValue = Math.pow(10, unit.digits.length) - 1;\n let unitValue = 0;\n if (remainingMs >= unit.value) {\n // Calculate how much of this unit we can fill\n unitValue = Math.min(Math.floor(remainingMs / unit.value), maxValue);\n remainingMs -= unitValue * unit.value;\n }\n // Always add all units to result, even if value is zero\n const displayValue = label\n ? `${padZero ? unitValue.toString().padStart(unit.digits.length, '0') : unitValue} (${unit.label})`\n : `${padZero ? unitValue.toString().padStart(unit.digits.length, '0') : unitValue}`;\n result.push(displayValue);\n }\n const separator = label ? ' : ' : ':';\n const reverseSeparator = label ? ' : ' : ':';\n if (label) {\n if (this.translationService.getActiveLang() === 'fa-IR') {\n return result.reverse().join(reverseSeparator);\n }\n else {\n return result.join(separator);\n }\n }\n else {\n return result.join(separator);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXTimeDurationFormatter, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXTimeDurationFormatter }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXTimeDurationFormatter, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1kdXJhdGlvbi5mb3JtYXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL2RhdGUtdGltZS9zcmMvbGliL2Zvcm1hdHRlcnMvdGltZS1kdXJhdGlvbi5mb3JtYXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBZW5ELE1BQU0sT0FBTyx1QkFBdUI7SUFEcEM7UUFrREUsdUJBQWtCLEdBQXlCLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0tBNEZ6RTtJQTVJQyxJQUFJLElBQUk7UUFDTixPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWEsRUFBRSxPQUF3QztRQUM1RCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsSUFBSSxZQUFZLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ2pELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELHdDQUF3QztRQUN4QyxNQUFNLGlCQUFpQixHQUFHLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDOUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDckQsTUFBTSxPQUFPLEdBQUcsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUNsQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFB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QkFDWixLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFO2dCQUMxQyxLQUFLLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7Z0JBQy9CLE1BQU0sRUFBRSxXQUFXO2FBQ3BCO1lBQ0QsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFO1lBQy9HLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO1lBQ3pHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUU7WUFDdEcsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFO1lBQ3JHLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFO1lBQ2hHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsWUFB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Z0JBQ04sT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hDLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQzs4R0E1SVUsdUJBQXVCO2tIQUF2Qix1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEZvcm1hdE9wdGlvbnMsIEFYRm9ybWF0dGVyIH0gZnJvbSAnQGFjb3JleC9jb3JlL2Zvcm1hdCc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBBWFRpbWVEdXJhdGlvbkZvcm1hdHRlck9wdGlvbnMgZXh0ZW5kcyBBWEZvcm1hdE9wdGlvbnMge1xuICBmb3JtYXQ6IHN0cmluZztcbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BhY29yZXgvY29yZS9mb3JtYXQnIHtcbiAgaW50ZXJmYWNlIEFYRm9ybWF0T3B0aW9uc01hcCB7XG4gICAgZHVyYXRpb246IEFYVGltZUR1cmF0aW9uRm9ybWF0dGVyT3B0aW9ucztcbiAgfVxufVxuXG50eXBlIEFYVGltZUR1cmF0aW9uVW5pdCA9ICdZRUFSJyB8ICdNT05USCcgfCAnV0VFSycgfCAnREFZJyB8ICdIT1VSJyB8ICdNSU5VVEUnIHwgJ1NFQ09ORCcgfCAnTUlMTElTRUNPTkQnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhUaW1lRHVyYXRpb25Gb3JtYXR0ZXIgaW1wbGVtZW50cyBBWEZvcm1hdHRlciB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICd0aW1lLWR1cmF0aW9uJztcbiAgfVxuXG4gIGZvcm1hdCh2YWx1ZTogbnVtYmVyLCBvcHRpb25zPzogQVhUaW1lRHVyYXRpb25Gb3JtYXR0ZXJPcHRpb25zKTogc3RyaW5nIHtcbiAgICBjb25zdCBtaWxsaXNlY29uZHMgPSBOdW1iZXIodmFsdWUpO1xuICAgIGlmIChtaWxsaXNlY29uZHMgPT09IG51bGwgfHwgaXNOYU4obWlsbGlzZWNvbmRzKSkge1xuICAgICAgcmV0dXJuICcuLi4nO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgbWlsbGlzZWNvbmRzIHRvIHZhcmlvdXMgdW5pdHNcbiAgICBjb25zdCB0b3RhbE1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcyAlIDEwMDA7XG4gICAgY29uc3QgdG90YWxTZWNvbmRzID0gTWF0aC5mbG9vcihtaWxsaXNlY29uZHMgLyAxMDAwKTtcbiAgICBjb25zdCBzZWNvbmRzID0gdG90YWxTZWNvbmRzICUgNjA7XG4gICAgY29uc3QgdG90YWxNaW51dGVzID0gTWF0aC5mbG9vcih0b3RhbFNlY29uZHMgLyA2MCk7XG4gICAgY29uc3QgbWludXRlcyA9IHRvdGFsTWludXRlcyAlIDYwO1xuICAgIGNvbnN0IHRvdGFsSG91cnMgPSBNYXRoLmZsb29yKHRvdGFsTWludXRlcyAvIDYwKTtcblxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgemVyby1wYWRkaW5nXG4gICAgY29uc3QgcGFkID0gKG51bTogbnVtYmVyLCBsZW5ndGggPSAyKSA9PiBudW0udG9TdHJpbmcoKS5wYWRTdGFydChsZW5ndGgsICcwJyk7XG5cbiAgICAvLyBEZWZhdWx0IGZvcm1hdCBpZiBub25lIHByb3ZpZGVkXG4gICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucz8uZm9ybWF0IHx8ICh0b3RhbEhvdXJzID49IDAgPyAnSEg6bW06c3MnIDogJ21tOnNzJyk7XG5cbiAgICBjb25zdCBmb3JtYXR0ZWRUaW1lID0gW107XG5cbiAgICAvLyBQYXJzZSBmb3JtYXQgYW5kIGJ1aWxkIHRoZSB0aW1lIHN0cmluZyBhY2NvcmRpbmdseVxuICAgIGlmIChmb3JtYXQuaW5jbHVkZXMoJ0hIJykgfHwgZm9ybWF0LmluY2x1ZGVzKCdIJykpIHtcbiAgICAgIGZvcm1hdHRlZFRpbWUucHVzaChwYWQodG90YWxIb3VycykpO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0LmluY2x1ZGVzKCdtbScpKSB7XG4gICAgICBmb3JtYXR0ZWRUaW1lLnB1c2gocGFkKG1pbnV0ZXMpKTtcbiAgICB9IGVsc2UgaWYgKGZvcm1hdC5pbmNsdWRlcygnbScpKSB7XG4gICAgICBmb3JtYXR0ZWRUaW1lLnB1c2gobWludXRlcy50b1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKGZvcm1hdC5pbmNsdWRlcygnc3MnKSkge1xuICAgICAgZm9ybWF0dGVkVGltZS5wdXNoKHBhZChzZWNvbmRzKSk7XG4gICAgfSBlbHNlIGlmIChmb3JtYXQuaW5jbHVkZXMoJ3MnKSkge1xuICAgICAgZm9ybWF0dGVkVGltZS5wdXNoKHNlY29uZHMudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChmb3JtYXQuaW5jbHVkZXMoJ21zJykgfHwgZm9ybWF0LmluY2x1ZGVzKCdNUycpKSB7XG4gICAgICBmb3JtYXR0ZWRUaW1lLnB1c2gocGFkKHRvdGFsTWlsbGlzZWNvbmRzLCAzKSk7XG4gICAgfVxuXG4gICAgLy8gSm9pbiB0aGUgcGFydHMgYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXRcbiAgICByZXR1cm4gZm9ybWF0dGVkVGltZS5qb2luKGZvcm1hdC5pbmNsdWRlcygnbXMnKSB8fCBmb3JtYXQuaW5jbHVkZXMoJ01TJykgPyAnOicgOiAnOicpO1xuICB9XG5cbiAgdHJhbnNsYXRpb25TZXJ2aWNlOiBBWFRyYW5zbGF0aW9uU2VydmljZSA9IGluamVjdChBWFRyYW5zbGF0aW9uU2VydmljZSk7XG5cbiAgYXN5bmMgbWlsbGlzZWNvbmRzVG9NYXNrKFxuICAgIG1zOiBudW1iZXIsXG4gICAgc3RhcnRVbml0OiBBWFRpbWVEdXJhdGlvblVuaXQgPSAnWUVBUicsXG4gICAgZW5kVW5pdDogQVhUaW1lRHVyYXRpb25Vbml0ID0gJ01JTExJU0VDT05EJyxcbiAgICBsYWJlbCA9IGZhbHNlLFxuICAgIG1hc2tEaWdpdHMgPSAnMDA6MDA6MDA6MDA6MDA6MDA6MDA6MDAwJyxcbiAgICBwYWRaZXJvID0gZmFsc2UsXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKG1zIDw9IDApIHJldHVybiAnJztcblxuICAgIGNvbnN0IHllYXJEaWdpdHMgPSBtYXNrRGlnaXRzLnNwbGl0KCc6JylbMF07XG4gICAgY29uc3QgbW9udGhEaWdpdHMgPSBtYXNrRGlnaXRzLnNwbGl0KCc6JylbMV07XG4gICAgY29uc3Qgd2Vla0RpZ2l0cyA9IG1hc2tEaWdpdHMuc3BsaXQoJzonKVsyXTtcbiAgICBjb25zdCBkYXlEaWdpdHMgPSBtYXNrRGlnaXRzLnNwbGl0KCc6JylbM107XG4gICAgY29uc3QgaG91ckRpZ2l0cyA9IG1hc2tEaWdpdHMuc3BsaXQoJzonKVs0XTtcbiAgICBjb25zdCBtaW51dGVEaWdpdHMgPSBtYXNrRGlnaXRzLnNwbGl0KCc6JylbNV07XG4gICAgY29uc3Qgc2Vjb25kRGlnaXRzID0gbWFza0RpZ2l0cy5zcGxpdCgnOicpWzZdO1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kRGlnaXRzID0gbWFza0RpZ2l0cy5zcGxpdCgnOicpWzddO1xuXG4gICAgY29uc3QgdHJhbnNsYXRpb25zID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BhY29yZXg6ZGF0ZVRpbWUudW5pdHMueWVhcicpLFxuICAgICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BhY29yZXg6ZGF0ZVRpbWUudW5pdHMubW9udGgnKSxcbiAgICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAYWNvcmV4OmRhdGVUaW1lLnVuaXRzLndlZWsnKSxcbiAgICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAYWNvcmV4OmRhdGVUaW1lLnVuaXRzLmRheScpLFxuICAgICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BhY29yZXg6ZGF0ZVRpbWUudW5pdHMuaG91cicpLFxuICAgICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BhY29yZXg6ZGF0ZVRpbWUudW5pdHMubWludXRlJyksXG4gICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQGFjb3JleDpkYXRlVGltZS51bml0cy5zZWNvbmQnKSxcbiAgICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAYWNvcmV4OmRhdGVUaW1lLnVuaXRzLm1pbGxpc2Vjb25kJyksXG4gICAgXSk7XG5cbiAgICBjb25zdCB1bml0cyA9IFtcbiAgICAgIHsga2V5OiAnWUVBUicsIGxhYmVsOiB0cmFuc2xhdGlvbnNbMF0udG9Mb2NhbGVVcHBlckNhc2UoKSwgdmFsdWU6IDEwMDAgKiA2MCAqIDYwICogMjQgKiAzNjUsIGRpZ2l0czogeWVhckRpZ2l0cyB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdNT05USCcsXG4gICAgICAgIGxhYmVsOiB0cmFuc2xhdGlvbnNbMV0udG9Mb2NhbGVVcHBlckNhc2UoKSxcbiAgICAgICAgdmFsdWU6IDEwMDAgKiA2MCAqIDYwICogMjQgKiAzMCxcbiAgICAgICAgZGlnaXRzOiBtb250aERpZ2l0cyxcbiAgICAgIH0sXG4gICAgICB7IGtleTogJ1dFRUsnLCBsYWJlbDogdHJhbnNsYXRpb25zWzJdLnRvTG9jYWxlVXBwZXJDYXNlKCksIHZhbHVlOiAxMDAwICogNjAgKiA2MCAqIDI0ICogNywgZGlnaXRzOiB3ZWVrRGlnaXRzIH0sXG4gICAgICB7IGtleTogJ0RBWScsIGxhYmVsOiB0cmFuc2xhdGlvbnNbM10udG9Mb2NhbGVVcHBlckNhc2UoKSwgdmFsdWU6IDEwMDAgKiA2MCAqIDYwICogMjQsIGRpZ2l0czogZGF5RGlnaXRzIH0sXG4gICAgICB7IGtleTogJ0hPVVInLCBsYWJlbDogdHJhbnNsYXRpb25zWzRdLnRvTG9jYWxlVXBwZXJDYXNlKCksIHZhbHVlOiAxMDAwICogNjAgKiA2MCwgZGlnaXRzOiBob3VyRGlnaXRzIH0sXG4gICAgICB7IGtleTogJ01JTlVURScsIGxhYmVsOiB0cmFuc2xhdGlvbnNbNV0udG9Mb2NhbGVVcHBlckNhc2UoKSwgdmFsdWU6IDEwMDAgKiA2MCwgZGlnaXRzOiBtaW51dGVEaWdpdHMgfSxcbiAgICAgIHsga2V5OiAnU0VDT05EJywgbGFiZWw6IHRyYW5zbGF0aW9uc1s2XS50b0xvY2FsZVVwcGVyQ2FzZSgpLCB2YWx1ZTogMTAwMCwgZGlnaXRzOiBzZWNvbmREaWdpdHMgfSxcbiAgICAgIHsga2V5OiAnTUlMTElTRUNPTkQnLCBsYWJlbDogdHJhbnNsYXRpb25zWzddLnRvTG9jYWxlVXBwZXJDYXNlKCksIHZhbHVlOiAxLCBkaWdpdHM6IG1pbGxpc2Vjb25kRGlnaXRzIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB1bml0cy5maW5kSW5kZXgoKHUpID0+IHUua2V5ID09PSBzdGFydFVuaXQudG9VcHBlckNhc2UoKSk7XG4gICAgY29uc3QgZW5kSW5kZXggPSB1bml0cy5maW5kSW5kZXgoKHUpID0+IHUua2V5ID09PSBlbmRVbml0LnRvVXBwZXJDYXNlKCkpO1xuXG4gICAgaWYgKHN0YXJ0SW5kZXggPT09IC0xIHx8IGVuZEluZGV4ID09PSAtMSB8fCBzdGFydEluZGV4ID4gZW5kSW5kZXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0aW1lIHVuaXQgcmFuZ2UnKTtcbiAgICB9XG5cbiAgICBjb25zdCBsaW1pdGVkVW5pdHMgPSB1bml0cy5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCArIDEpO1xuICAgIGxldCByZW1haW5pbmdNcyA9IG1zO1xuICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGltaXRlZFVuaXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB1bml0ID0gbGltaXRlZFVuaXRzW2ldO1xuICAgICAgY29uc3QgbWF4VmFsdWUgPSBNYXRoLnBvdygxMCwgdW5pdC5kaWdpdHMubGVuZ3RoKSAtIDE7XG5cbiAgICAgIGxldCB1bml0VmFsdWUgPSAwO1xuXG4gICAgICBpZiAocmVtYWluaW5nTXMgPj0gdW5pdC52YWx1ZSkge1xuICAgICAgICAvLyBDYWxjdWxhdGUgaG93IG11Y2ggb2YgdGhpcyB1bml0IHdlIGNhbiBmaWxsXG4gICAgICAgIHVuaXRWYWx1ZSA9IE1hdGgubWluKE1hdGguZmxvb3IocmVtYWluaW5nTXMgLyB1bml0LnZhbHVlKSwgbWF4VmFsdWUpO1xuICAgICAgICByZW1haW5pbmdNcyAtPSB1bml0VmFsdWUgKiB1bml0LnZhbHVlO1xuICAgICAgfVxuXG4gICAgICAvLyBBbHdheXMgYWRkIGFsbCB1bml0cyB0byByZXN1bHQsIGV2ZW4gaWYgdmFsdWUgaXMgemVyb1xuICAgICAgY29uc3QgZGlzcGxheVZhbHVlID0gbGFiZWxcbiAgICAgICAgPyBgJHtwYWRaZXJvID8gdW5pdFZhbHVlLnRvU3RyaW5nKCkucGFkU3RhcnQodW5pdC5kaWdpdHMubGVuZ3RoLCAnMCcpIDogdW5pdFZhbHVlfSAoJHt1bml0LmxhYmVsfSlgXG4gICAgICAgIDogYCR7cGFkWmVybyA/IHVuaXRWYWx1ZS50b1N0cmluZygpLnBhZFN0YXJ0KHVuaXQuZGlnaXRzLmxlbmd0aCwgJzAnKSA6IHVuaXRWYWx1ZX1gO1xuXG4gICAgICByZXN1bHQucHVzaChkaXNwbGF5VmFsdWUpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlcGFyYXRvciA9IGxhYmVsID8gJyA6ICcgOiAnOic7XG4gICAgY29uc3QgcmV2ZXJzZVNlcGFyYXRvciA9IGxhYmVsID8gJyA6ICcgOiAnOic7XG5cbiAgICBpZiAobGFiZWwpIHtcbiAgICAgIGlmICh0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5nZXRBY3RpdmVMYW5nKCkgPT09ICdmYS1JUicpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5yZXZlcnNlKCkuam9pbihyZXZlcnNlU2VwYXJhdG9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXN1bHQuam9pbihzZXBhcmF0b3IpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0LmpvaW4oc2VwYXJhdG9yKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","import { AXLocaleService } from '@acorex/core/locale';\nimport { Injectable, inject } from '@angular/core';\nimport { isNil } from 'lodash-es';\nimport { AXCalendarService } from '../calendar.service';\nimport * as i0 from \"@angular/core\";\nexport class AXTimeFormatter {\n constructor() {\n this.calendarService = inject(AXCalendarService);\n this.localeService = inject(AXLocaleService);\n }\n get name() {\n return 'time';\n }\n format(value, options) {\n if (isNil(value)) {\n return '';\n }\n //\n if (!this.calendarService.isValidDate(value))\n return 'Invalid date';\n //\n const effectiveOptions = typeof options == 'object'\n ? {\n format: options.format ?? 'short',\n locale: options.locale,\n calendar: options.calendar ?? this.calendarService.calendar.name(),\n }\n : {\n format: options,\n calendar: this.calendarService.calendar.name(),\n };\n //\n const formats = this.localeService.activeProfile().formats;\n const map = {\n short: formats.time.short,\n medium: formats.time.medium,\n long: formats.time.long,\n full: formats.time.full,\n };\n const format = map[effectiveOptions.format] ?? effectiveOptions.format ?? map['short'];\n //\n return this.calendarService\n .convert(value, effectiveOptions.calendar)\n .format(format, { locale: effectiveOptions.locale });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXTimeFormatter, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXTimeFormatter }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXTimeFormatter, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5mb3JtYXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL2RhdGUtdGltZS9zcmMvbGliL2Zvcm1hdHRlcnMvdGltZS5mb3JtYXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBS3hELE1BQU0sT0FBTyxlQUFlO0lBRDVCO1FBRVUsb0JBQWUsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM1QyxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztLQXNDakQ7SUFwQ0MsSUFBSSxJQUFJO1FBQ04sT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUEyQixFQUFFLE9BQTZDO1FBQy9FLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakIsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsRUFBRTtRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLGNBQWMsQ0FBQztRQUNwRSxFQUFFO1FBQ0YsTUFBTSxnQkFBZ0IsR0FDcEIsT0FBTyxPQUFPLElBQUksUUFBUTtZQUN4QixDQUFDLENBQUM7Z0JBQ0UsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTztnQkFDakMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO2dCQUN0QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUU7YUFDbkU7WUFDSCxDQUFDLENBQUM7Z0JBQ0UsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTthQUMvQyxDQUFDO1FBQ1IsRUFBRTtRQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQzNELE1BQU0sR0FBRyxHQUFHO1lBQ1YsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSztZQUN6QixNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQzNCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUk7WUFDdkIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSTtTQUN4QixDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQTBCLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNHLEVBQUU7UUFDRixPQUFPLElBQUksQ0FBQyxlQUFlO2FBQ3hCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsUUFBa0IsQ0FBQzthQUNuRCxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQzs4R0F2Q1UsZUFBZTtrSEFBZixlQUFlOzsyRkFBZixlQUFlO2tCQUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhGb3JtYXR0ZXIgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFYTG9jYWxlU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29yZS9sb2NhbGUnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBWENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uL2NhbGVuZGFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhWYWxpZERhdGVUaW1lVmFsdWUgfSBmcm9tICcuLi9kYXRldGltZS50eXBlcyc7XG5pbXBvcnQgeyBBWERhdGVUaW1lRm9ybWF0dGVyT3B0aW9ucyB9IGZyb20gJy4vZGF0ZXRpbWUuZm9ybWF0dGVyJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFYVGltZUZvcm1hdHRlciBpbXBsZW1lbnRzIEFYRm9ybWF0dGVyIHtcbiAgcHJpdmF0ZSBjYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuICBwcml2YXRlIGxvY2FsZVNlcnZpY2UgPSBpbmplY3QoQVhMb2NhbGVTZXJ2aWNlKTtcblxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAndGltZSc7XG4gIH1cblxuICBmb3JtYXQodmFsdWU6IEFYVmFsaWREYXRlVGltZVZhbHVlLCBvcHRpb25zPzogQVhEYXRlVGltZUZvcm1hdHRlck9wdGlvbnMgfCBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgLy9cbiAgICBpZiAoIXRoaXMuY2FsZW5kYXJTZXJ2aWNlLmlzVmFsaWREYXRlKHZhbHVlKSkgcmV0dXJuICdJbnZhbGlkIGRhdGUnO1xuICAgIC8vXG4gICAgY29uc3QgZWZmZWN0aXZlT3B0aW9ucyA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucyA9PSAnb2JqZWN0J1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIGZvcm1hdDogb3B0aW9ucy5mb3JtYXQgPz8gJ3Nob3J0JyxcbiAgICAgICAgICAgIGxvY2FsZTogb3B0aW9ucy5sb2NhbGUsXG4gICAgICAgICAgICBjYWxlbmRhcjogb3B0aW9ucy5jYWxlbmRhciA/PyB0aGlzLmNhbGVuZGFyU2VydmljZS5jYWxlbmRhci5uYW1lKCksXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIGZvcm1hdDogb3B0aW9ucyxcbiAgICAgICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyU2VydmljZS5jYWxlbmRhci5uYW1lKCksXG4gICAgICAgICAgfTtcbiAgICAvL1xuICAgIGNvbnN0IGZvcm1hdHMgPSB0aGlzLmxvY2FsZVNlcnZpY2UuYWN0aXZlUHJvZmlsZSgpLmZvcm1hdHM7XG4gICAgY29uc3QgbWFwID0ge1xuICAgICAgc2hvcnQ6IGZvcm1hdHMudGltZS5zaG9ydCxcbiAgICAgIG1lZGl1bTogZm9ybWF0cy50aW1lLm1lZGl1bSxcbiAgICAgIGxvbmc6IGZvcm1hdHMudGltZS5sb25nLFxuICAgICAgZnVsbDogZm9ybWF0cy50aW1lLmZ1bGwsXG4gICAgfTtcbiAgICBjb25zdCBmb3JtYXQgPSBtYXBbZWZmZWN0aXZlT3B0aW9ucy5mb3JtYXQgYXMga2V5b2YgdHlwZW9mIG1hcF0gPz8gZWZmZWN0aXZlT3B0aW9ucy5mb3JtYXQgPz8gbWFwWydzaG9ydCddO1xuICAgIC8vXG4gICAgcmV0dXJuIHRoaXMuY2FsZW5kYXJTZXJ2aWNlXG4gICAgICAuY29udmVydCh2YWx1ZSwgZWZmZWN0aXZlT3B0aW9ucy5jYWxlbmRhciBhcyBzdHJpbmcpXG4gICAgICAuZm9ybWF0KGZvcm1hdCwgeyBsb2NhbGU6IGVmZmVjdGl2ZU9wdGlvbnMubG9jYWxlIH0pO1xuICB9XG59XG4iXX0=","import { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\nimport { isDate, isNil } from 'lodash-es';\nimport * as i0 from \"@angular/core\";\nexport class AXTimeLeftFormatter {\n constructor() {\n this.translateService = inject(AXTranslationService);\n this.updateInterval = 1000; // Update every second\n }\n get name() {\n return 'timeleft';\n }\n format(value, options) {\n if (isNil(value)) {\n return '';\n }\n let valueNumber;\n if (isDate(value)) {\n valueNumber = value.getTime() - new Date().getTime();\n }\n else {\n valueNumber = Number(value);\n }\n const isPast = valueNumber < 0;\n const sign = this.translateService.translateSync(`@acorex:time.${valueNumber >= 0 ? 'left' : 'ago'}`);\n const milliseconds = Math.abs(valueNumber);\n const durationInSeconds = Math.round(milliseconds / 1000);\n let format = options?.format;\n // Determine the best format if format is null (following standard conventions)\n // Standard time thresholds based on common social media platforms\n if (isNil(format)) {\n if (durationInSeconds < 60)\n format = 'now'; // 0-10s: \"just now\"\n // else if (durationInSeconds < 60) format = 's'; // 10-60s: \"X seconds ago\"\n else if (durationInSeconds < 3600)\n format = 'm'; // 1-60 min: \"X minutes ago\"\n else if (durationInSeconds < 86400)\n format = 'h'; // 1-24 hours: \"X hours ago\"\n else if (durationInSeconds < 604800)\n format = 'd'; // 1-7 days: \"X days ago\"\n else if (durationInSeconds < 2592000)\n format = 'w'; // 1-4 weeks: \"X weeks ago\"\n else if (durationInSeconds < 31536000)\n format = 'M'; // 1-12 months: \"X months ago\"\n else\n format = 'y'; // 1+ years: \"X years ago\"\n }\n // Helper function for zero-padding\n const pad = (num) => num.toString().padStart(2, '0');\n const translate = (key, useSign = true) => {\n const translated = this.translateService.translateSync(`@acorex:time.${key}`);\n return useSign ? `${translated} ${sign}` : translated;\n };\n switch (format) {\n case 'now':\n // Just now (0-10 seconds) - Standard: immediate time\n if (isPast) {\n return translate('just-now', false);\n }\n return translate('right-now', false);\n case 's':\n // Seconds (10-59 seconds) - Standard: show exact seconds\n return `${durationInSeconds} ${translate(durationInSeconds === 1 ? 'second' : 'seconds')}`;\n case 'ss':\n return `${pad(durationInSeconds)} ${translate('seconds')}`;\n case 'm': {\n // Minutes (1-59 minutes) - Standard: show exact minutes\n const minutes = Math.round(durationInSeconds / 60);\n return `${minutes} ${translate(minutes === 1 ? 'minute' : 'minutes')}`;\n }\n case 'mm':\n return `${pad(Math.round(durationInSeconds / 60))} ${translate('minutes')}`;\n case 'h':\n case 'H': {\n // Hours (1-23 hours) - Standard: show exact hours\n const hours = Math.round(durationInSeconds / 3600);\n return `${hours} ${translate(hours === 1 ? 'hour' : 'hours')}`;\n }\n case 'hh':\n case 'HH':\n return `${pad(Math.round(durationInSeconds / 3600))} ${translate('hours')}`;\n case 'd':\n case 'D': {\n // Days (1-6 days) - Standard: show exact days\n const days = Math.round(durationInSeconds / 86400);\n return `${days} ${translate(days === 1 ? 'day' : 'days')}`;\n }\n case 'dd':\n case 'DD':\n return `${pad(Math.round(durationInSeconds / 86400))} ${translate('days')}`;\n case 'w':\n case 'W': {\n // Weeks (1-4 weeks) - Standard: show weeks for 7-30 days\n const weeks = Math.round(durationInSeconds / 604800);\n return `${weeks} ${translate(weeks === 1 ? 'week' : 'weeks')}`;\n }\n case 'ww':\n case 'WW':\n return `${pad(Math.round(durationInSeconds / 604800))} ${translate('weeks')}`;\n case 'M': {\n // Months (1-11 months) - Standard: show months\n const months = Math.round(durationInSeconds / 2592000);\n return `${months} ${translate(months === 1 ? 'month' : 'months')}`;\n }\n case 'MM':\n return `${pad(Math.round(durationInSeconds / 2592000))} ${translate('months')}`;\n case 'y':\n case 'Y': {\n // Years (1+ years) - Standard: show years\n const years = Math.round(durationInSeconds / 31536000);\n return `${years} ${translate(years === 1 ? 'year' : 'years')}`;\n }\n case 'yy':\n case 'YY':\n case 'yyyy':\n case 'YYYY':\n return `${pad(Math.round(durationInSeconds / 31536000))} ${translate('years')}`;\n default:\n console.error('Invalid format for timeleft formatter pipe');\n return 'Invalid format';\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXTimeLeftFormatter, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXTimeLeftFormatter }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXTimeLeftFormatter, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxlZnQuZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9kYXRlLXRpbWUvc3JjL2xpYi9mb3JtYXR0ZXJzL3RpbWVsZWZ0LmZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQzs7QUFhMUMsTUFBTSxPQUFPLG1CQUFtQjtJQURoQztRQUVVLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBTXhELG1CQUFjLEdBQUcsSUFBSSxDQUFDLENBQUMsc0JBQXNCO0tBa0g5QztJQXRIQyxJQUFJLElBQUk7UUFDTixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBSUQsTUFBTSxDQUFDLEtBQTZCLEVBQUUsT0FBb0M7UUFDeEUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqQixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxJQUFJLFdBQW1CLENBQUM7UUFDeEIsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsQixXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkQsQ0FBQzthQUFNLENBQUM7WUFDTixXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENB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SSxTQUFTLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2pFLENBQUM7WUFDRCxLQUFLLElBQUksQ0FBQztZQUNWLEtBQUssSUFBSSxDQUFDO1lBQ1YsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbEY7Z0JBQ0UsT0FBTyxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO2dCQUM1RCxPQUFPLGdCQUFnQixDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDOzhHQXhIVSxtQkFBbUI7a0hBQW5CLG1CQUFtQjs7MkZBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYRm9ybWF0T3B0aW9ucywgQVhGb3JtYXR0ZXIgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNEYXRlLCBpc05pbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhUaW1lTGVmdEZvcm1hdHRlck9wdGlvbnMgZXh0ZW5kcyBBWEZvcm1hdE9wdGlvbnMge1xuICBmb3JtYXQ6IHN0cmluZztcbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BhY29yZXgvY29yZS9mb3JtYXQnIHtcbiAgaW50ZXJmYWNlIEFYRm9ybWF0T3B0aW9uc01hcCB7XG4gICAgdGltZWxlZnQ6IEFYVGltZUxlZnRGb3JtYXR0ZXJPcHRpb25zO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBWFRpbWVMZWZ0Rm9ybWF0dGVyIGltcGxlbWVudHMgQVhGb3JtYXR0ZXIge1xuICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoQVhUcmFuc2xhdGlvblNlcnZpY2UpO1xuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICd0aW1lbGVmdCc7XG4gIH1cblxuICB1cGRhdGVJbnRlcnZhbCA9IDEwMDA7IC8vIFVwZGF0ZSBldmVyeSBzZWNvbmRcblxuICBmb3JtYXQodmFsdWU6IG51bWJlciB8IHN0cmluZyB8IERhdGUsIG9wdGlvbnM/OiBBWFRpbWVMZWZ0Rm9ybWF0dGVyT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBsZXQgdmFsdWVOdW1iZXI6IG51bWJlcjtcbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgdmFsdWVOdW1iZXIgPSB2YWx1ZS5nZXRUaW1lKCkgLSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWVOdW1iZXIgPSBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBpc1Bhc3QgPSB2YWx1ZU51bWJlciA8IDA7XG4gICAgY29uc3Qgc2lnbiA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVTeW5jKGBAYWNvcmV4OnRpbWUuJHt2YWx1ZU51bWJlciA+PSAwID8gJ2xlZnQnIDogJ2Fnbyd9YCk7XG4gICAgY29uc3QgbWlsbGlzZWNvbmRzID0gTWF0aC5hYnModmFsdWVOdW1iZXIpO1xuICAgIGNvbnN0IGR1cmF0aW9uSW5TZWNvbmRzID0gTWF0aC5yb3VuZChtaWxsaXNlY29uZHMgLyAxMDAwKTtcbiAgICBsZXQgZm9ybWF0ID0gb3B0aW9ucz8uZm9ybWF0O1xuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBiZXN0IGZvcm1hdCBpZiBmb3JtYXQgaXMgbnVsbCAoZm9sbG93aW5nIHN0YW5kYXJkIGNvbnZlbnRpb25zKVxuICAgIC8vIFN0YW5kYXJkIHRpbWUgdGhyZXNob2xkcyBiYXNlZCBvbiBjb21tb24gc29jaWFsIG1lZGlhIHBsYXRmb3Jtc1xuICAgIGlmIChpc05pbChmb3JtYXQpKSB7XG4gICAgICBpZiAoZHVyYXRpb25JblNlY29uZHMgPCA2MClcbiAgICAgICAgZm9ybWF0ID0gJ25vdyc7IC8vIDAtMTBzOiBcImp1c3Qgbm93XCJcbiAgICAgIC8vIGVsc2UgaWYgKGR1cmF0aW9uSW5TZWNvbmRzIDwgNjApIGZvcm1hdCA9ICdzJzsgICAgICAgIC8vIDEwLTYwczogXCJYIHNlY29uZHMgYWdvXCJcbiAgICAgIGVsc2UgaWYgKGR1cmF0aW9uSW5TZWNvbmRzIDwgMzYwMClcbiAgICAgICAgZm9ybWF0ID0gJ20nOyAvLyAxLTYwIG1pbjogXCJYIG1pbnV0ZXMgYWdvXCJcbiAgICAgIGVsc2UgaWYgKGR1cmF0aW9uSW5TZWNvbmRzIDwgODY0MDApXG4gICAgICAgIGZvcm1hdCA9ICdoJzsgLy8gMS0yNCBob3VyczogXCJYIGhvdXJzIGFnb1wiXG4gICAgICBlbHNlIGlmIChkdXJhdGlvbkluU2Vjb25kcyA8IDYwNDgwMClcbiAgICAgICAgZm9ybWF0ID0gJ2QnOyAvLyAxLTcgZGF5czogXCJYIGRheXMgYWdvXCJcbiAgICAgIGVsc2UgaWYgKGR1cmF0aW9uSW5TZWNvbmRzIDwgMjU5MjAwMClcbiAgICAgICAgZm9ybWF0ID0gJ3cnOyAvLyAxLTQgd2Vla3M6IFwiWCB3ZWVrcyBhZ29cIlxuICAgICAgZWxzZSBpZiAoZHVyYXRpb25JblNlY29uZHMgPCAzMTUzNjAwMClcbiAgICAgICAgZm9ybWF0ID0gJ00nOyAvLyAxLTEyIG1vbnRoczogXCJYIG1vbnRocyBhZ29cIlxuICAgICAgZWxzZSBmb3JtYXQgPSAneSc7IC8vIDErIHllYXJzOiBcIlggeWVhcnMgYWdvXCJcbiAgICB9XG5cbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHplcm8tcGFkZGluZ1xuICAgIGNvbnN0IHBhZCA9IChudW06IG51bWJlcikgPT4gbnVtLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcblxuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IChrZXk6IHN0cmluZywgdXNlU2lnbiA9IHRydWUpID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZWQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlU3luYyhgQGFjb3JleDp0aW1lLiR7a2V5fWApO1xuICAgICAgcmV0dXJuIHVzZVNpZ24gPyBgJHt0cmFuc2xhdGVkfSAke3NpZ259YCA6IHRyYW5zbGF0ZWQ7XG4gICAgfTtcblxuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlICdub3cnOlxuICAgICAgICAvLyBKdXN0IG5vdyAoMC0xMCBzZWNvbmRzKSAtIFN0YW5kYXJkOiBpbW1lZGlhdGUgdGltZVxuICAgICAgICBpZiAoaXNQYXN0KSB7XG4gICAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgnanVzdC1ub3cnLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZSgncmlnaHQtbm93JywgZmFsc2UpO1xuICAgICAgY2FzZSAncyc6XG4gICAgICAgIC8vIFNlY29uZHMgKDEwLTU5IHNlY29uZHMpIC0gU3RhbmRhcmQ6IHNob3cgZXhhY3Qgc2Vjb25kc1xuICAgICAgICByZXR1cm4gYCR7ZHVyYXRpb25JblNlY29uZHN9ICR7dHJhbnNsYXRlKGR1cmF0aW9uSW5TZWNvbmRzID09PSAxID8gJ3NlY29uZCcgOiAnc2Vjb25kcycpfWA7XG4gICAgICBjYXNlICdzcyc6XG4gICAgICAgIHJldHVybiBgJHtwYWQoZHVyYXRpb25JblNlY29uZHMpfSAke3RyYW5zbGF0ZSgnc2Vjb25kcycpfWA7XG4gICAgICBjYXNlICdtJzoge1xuICAgICAgICAvLyBNaW51dGVzICgxLTU5IG1pbnV0ZXMpIC0gU3RhbmRhcmQ6IHNob3cgZXhhY3QgbWludXRlc1xuICAgICAgICBjb25zdCBtaW51dGVzID0gTWF0aC5yb3VuZChkdXJhdGlvbkluU2Vjb25kcyAvIDYwKTtcbiAgICAgICAgcmV0dXJuIGAke21pbnV0ZXN9ICR7dHJhbnNsYXRlKG1pbnV0ZXMgPT09IDEgPyAnbWludXRlJyA6ICdtaW51dGVzJyl9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgcmV0dXJuIGAke3BhZChNYXRoLnJvdW5kKGR1cmF0aW9uSW5TZWNvbmRzIC8gNjApKX0gJHt0cmFuc2xhdGUoJ21pbnV0ZXMnKX1gO1xuICAgICAgY2FzZSAnaCc6XG4gICAgICBjYXNlICdIJzoge1xuICAgICAgICAvLyBIb3VycyAoMS0yMyBob3VycykgLSBTdGFuZGFyZDogc2hvdyBleGFjdCBob3Vyc1xuICAgICAgICBjb25zdCBob3VycyA9IE1hdGgucm91bmQoZHVyYXRpb25JblNlY29uZHMgLyAzNjAwKTtcbiAgICAgICAgcmV0dXJuIGAke2hvdXJzfSAke3RyYW5zbGF0ZShob3VycyA9PT0gMSA/ICdob3VyJyA6ICdob3VycycpfWA7XG4gICAgICB9XG4gICAgICBjYXNlICdoaCc6XG4gICAgICBjYXNlICdISCc6XG4gICAgICAgIHJldHVybiBgJHtwYWQoTWF0aC5yb3VuZChkdXJhdGlvbkluU2Vjb25kcyAvIDM2MDApKX0gJHt0cmFuc2xhdGUoJ2hvdXJzJyl9YDtcbiAgICAgIGNhc2UgJ2QnOlxuICAgICAgY2FzZSAnRCc6IHtcbiAgICAgICAgLy8gRGF5cyAoMS02IGRheXMpIC0gU3RhbmRhcmQ6IHNob3cgZXhhY3QgZGF5c1xuICAgICAgICBjb25zdCBkYXlzID0gTWF0aC5yb3VuZChkdXJhdGlvbkluU2Vjb25kcyAvIDg2NDAwKTtcbiAgICAgICAgcmV0dXJuIGAke2RheXN9ICR7dHJhbnNsYXRlKGRheXMgPT09IDEgPyAnZGF5JyA6ICdkYXlzJyl9YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2RkJzpcbiAgICAgIGNhc2UgJ0REJzpcbiAgICAgICAgcmV0dXJuIGAke3BhZChNYXRoLnJvdW5kKGR1cmF0aW9uSW5TZWNvbmRzIC8gODY0MDApKX0gJHt0cmFuc2xhdGUoJ2RheXMnKX1gO1xuICAgICAgY2FzZSAndyc6XG4gICAgICBjYXNlICdXJzoge1xuICAgICAgICAvLyBXZWVrcyAoMS00IHdlZWtzKSAtIFN0YW5kYXJkOiBzaG93IHdlZWtzIGZvciA3LTMwIGRheXNcbiAgICAgICAgY29uc3Qgd2Vla3MgPSBNYXRoLnJvdW5kKGR1cmF0aW9uSW5TZWNvbmRzIC8gNjA0ODAwKTtcbiAgICAgICAgcmV0dXJuIGAke3dlZWtzfSAke3RyYW5zbGF0ZSh3ZWVrcyA9PT0gMSA/ICd3ZWVrJyA6ICd3ZWVrcycpfWA7XG4gICAgICB9XG4gICAgICBjYXNlICd3dyc6XG4gICAgICBjYXNlICdXVyc6XG4gICAgICAgIHJldHVybiBgJHtwYWQoTWF0aC5yb3VuZChkdXJhdGlvbkluU2Vjb25kcyAvIDYwNDgwMCkpfSAke3RyYW5zbGF0ZSgnd2Vla3MnKX1gO1xuICAgICAgY2FzZSAnTSc6IHtcbiAgICAgICAgLy8gTW9udGhzICgxLTExIG1vbnRocykgLSBTdGFuZGFyZDogc2hvdyBtb250aHNcbiAgICAgICAgY29uc3QgbW9udGhzID0gTWF0aC5yb3VuZChkdXJhdGlvbkluU2Vjb25kcyAvIDI1OTIwMDApO1xuICAgICAgICByZXR1cm4gYCR7bW9udGhzfSAke3RyYW5zbGF0ZShtb250aHMgPT09IDEgPyAnbW9udGgnIDogJ21vbnRocycpfWA7XG4gICAgICB9XG4gICAgICBjYXNlICdNTSc6XG4gICAgICAgIHJldHVybiBgJHtwYWQoTWF0aC5yb3VuZChkdXJhdGlvbkluU2Vjb25kcyAvIDI1OTIwMDApKX0gJHt0cmFuc2xhdGUoJ21vbnRocycpfWA7XG4gICAgICBjYXNlICd5JzpcbiAgICAgIGNhc2UgJ1knOiB7XG4gICAgICAgIC8vIFllYXJzICgxKyB5ZWFycykgLSBTdGFuZGFyZDogc2hvdyB5ZWFyc1xuICAgICAgICBjb25zdCB5ZWFycyA9IE1hdGgucm91bmQoZHVyYXRpb25JblNlY29uZHMgLyAzMTUzNjAwMCk7XG4gICAgICAgIHJldHVybiBgJHt5ZWFyc30gJHt0cmFuc2xhdGUoeWVhcnMgPT09IDEgPyAneWVhcicgOiAneWVhcnMnKX1gO1xuICAgICAgfVxuICAgICAgY2FzZSAneXknOlxuICAgICAgY2FzZSAnWVknOlxuICAgICAgY2FzZSAneXl5eSc6XG4gICAgICBjYXNlICdZWVlZJzpcbiAgICAgICAgcmV0dXJuIGAke3BhZChNYXRoLnJvdW5kKGR1cmF0aW9uSW5TZWNvbmRzIC8gMzE1MzYwMDApKX0gJHt0cmFuc2xhdGUoJ3llYXJzJyl9YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgZm9ybWF0IGZvciB0aW1lbGVmdCBmb3JtYXR0ZXIgcGlwZScpO1xuICAgICAgICByZXR1cm4gJ0ludmFsaWQgZm9ybWF0JztcbiAgICB9XG4gIH1cbn1cbiJdfQ==","import { AXFormatModule } from '@acorex/core/format';\nimport { NgModule } from '@angular/core';\nimport { AXDateTimePipe } from './datetime.pipe';\nimport { AXDateFormatter } from './formatters/date.formatter';\nimport { AXDateTimeFormatter } from './formatters/datetime.formatter';\nimport { AXTimeDurationFormatter } from './formatters/time-duration.formatter';\nimport { AXTimeFormatter } from './formatters/time.formatter';\nimport { AXTimeLeftFormatter } from './formatters/timeleft.formatter';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/core/format\";\nexport class AXDateTimeModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDateTimeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDateTimeModule, imports: [i1.AXFormatModule, AXDateTimePipe], exports: [AXDateTimePipe] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDateTimeModule, imports: [AXFormatModule.forChild({\n formatters: [AXDateTimeFormatter, AXDateFormatter, AXTimeFormatter, AXTimeLeftFormatter, AXTimeDurationFormatter],\n })] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXDateTimeModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n AXFormatModule.forChild({\n formatters: [AXDateTimeFormatter, AXDateFormatter, AXTimeFormatter, AXTimeLeftFormatter, AXTimeDurationFormatter],\n }),\n AXDateTimePipe,\n ],\n exports: [AXDateTimePipe],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9kYXRlLXRpbWUvc3JjL2xpYi9kYXRldGltZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7OztBQVd0RSxNQUFNLE9BQU8sZ0JBQWdCOzhHQUFoQixnQkFBZ0I7K0dBQWhCLGdCQUFnQiwrQkFKekIsY0FBYyxhQUVOLGNBQWM7K0dBRWIsZ0JBQWdCLFlBUHpCLGNBQWMsQ0FBQyxRQUFRLENBQUM7Z0JBQ3RCLFVBQVUsRUFBRSxDQUFDLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsdUJBQXVCLENBQUM7YUFDbEgsQ0FBQzs7MkZBS08sZ0JBQWdCO2tCQVQ1QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxjQUFjLENBQUMsUUFBUSxDQUFDOzRCQUN0QixVQUFVLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLHVCQUF1QixDQUFDO3lCQUNsSCxDQUFDO3dCQUNGLGNBQWM7cUJBQ2Y7b0JBQ0QsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO2lCQUMxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYRm9ybWF0TW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2Zvcm1hdCc7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhEYXRlVGltZVBpcGUgfSBmcm9tICcuL2RhdGV0aW1lLnBpcGUnO1xuaW1wb3J0IHsgQVhEYXRlRm9ybWF0dGVyIH0gZnJvbSAnLi9mb3JtYXR0ZXJzL2RhdGUuZm9ybWF0dGVyJztcbmltcG9ydCB7IEFYRGF0ZVRpbWVGb3JtYXR0ZXIgfSBmcm9tICcuL2Zvcm1hdHRlcnMvZGF0ZXRpbWUuZm9ybWF0dGVyJztcbmltcG9ydCB7IEFYVGltZUR1cmF0aW9uRm9ybWF0dGVyIH0gZnJvbSAnLi9mb3JtYXR0ZXJzL3RpbWUtZHVyYXRpb24uZm9ybWF0dGVyJztcbmltcG9ydCB7IEFYVGltZUZvcm1hdHRlciB9IGZyb20gJy4vZm9ybWF0dGVycy90aW1lLmZvcm1hdHRlcic7XG5pbXBvcnQgeyBBWFRpbWVMZWZ0Rm9ybWF0dGVyIH0gZnJvbSAnLi9mb3JtYXR0ZXJzL3RpbWVsZWZ0LmZvcm1hdHRlcic7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBBWEZvcm1hdE1vZHVsZS5mb3JDaGlsZCh7XG4gICAgICBmb3JtYXR0ZXJzOiBbQVhEYXRlVGltZUZvcm1hdHRlciwgQVhEYXRlRm9ybWF0dGVyLCBBWFRpbWVGb3JtYXR0ZXIsIEFYVGltZUxlZnRGb3JtYXR0ZXIsIEFYVGltZUR1cmF0aW9uRm9ybWF0dGVyXSxcbiAgICB9KSxcbiAgICBBWERhdGVUaW1lUGlwZSxcbiAgXSxcbiAgZXhwb3J0czogW0FYRGF0ZVRpbWVQaXBlXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhEYXRlVGltZU1vZHVsZSB7fVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvcmUtZGF0ZS10aW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9kYXRlLXRpbWUvc3JjL2Fjb3JleC1jb3JlLWRhdGUtdGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-core-date-time.mjs","sources":["../../../../packages/core/date-time/src/lib/datetime.types.ts","../../../../packages/core/date-time/src/lib/gregorian.calendar.ts","../../../../packages/core/date-time/src/lib/holidays.loader.ts","../../../../packages/core/date-time/src/lib/solar-hijri.calendar.ts","../../../../packages/core/date-time/src/lib/calendar.service.ts","../../../../packages/core/date-time/src/lib/datetime.pipe.ts","../../../../packages/core/date-time/src/lib/formatters/date.formatter.ts","../../../../packages/core/date-time/src/lib/formatters/datetime.formatter.ts","../../../../packages/core/date-time/src/lib/formatters/time-duration.formatter.ts","../../../../packages/core/date-time/src/lib/formatters/time.formatter.ts","../../../../packages/core/date-time/src/lib/formatters/timeleft.formatter.ts","../../../../packages/core/date-time/src/lib/datetime.module.ts","../../../../packages/core/date-time/src/acorex-core-date-time.ts"],"sourcesContent":["import { isBrowser } from '@acorex/core/platform';\nimport { 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 day: 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 = {\n long: string;\n short: string;\n letter: string;\n}[];\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 AMPM: AXDateTimePart;\n};\n\nexport interface AXCalendarConfig {\n weekdays: number[];\n weekend: number[];\n}\n\nexport type AXValidDateTimeValue = AXDateTime | Date | string | AXDateValue;\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 /**\n * Updates week layout settings (column order and weekend days).\n */\n public applyWeekConfig(config: Partial<AXCalendarConfig>): void {\n this._config = { ...this._config, ...config };\n }\n\n /**\n * Returns the name of the calendar system.\n * @returns The calendar system name (e.g., 'gregorian', 'persian', 'islamic').\n */\n abstract name(): string;\n\n /**\n * Returns the day of the month for the given date.\n * @param date - The date to get the day of month from.\n * @returns The day of the month (1-31).\n */\n abstract dayOfMonth(date: Date): number;\n\n /**\n * Returns the day of the year for the given date.\n * @param date - The date to get the day of year from.\n * @returns The day of the year (1-365/366).\n */\n abstract dayOfYear(date: Date): number;\n\n /**\n * Returns the day of the week for the given date.\n * @param date - The date to get the day of week from.\n * @returns The day of the week (1-7).\n */\n abstract dayOfWeek(date: Date): number;\n\n /**\n * Returns the 0-based weekday index used for week layout (0 = Sunday … 6 = Saturday).\n */\n public weekdayIndex(date: Date): number {\n return this.dayOfWeek(date) - 1;\n }\n\n /**\n * Returns the month of the year for the given date.\n * @param date - The date to get the month from.\n * @returns The month of the year (1-12).\n */\n abstract monthOfYear(date: Date): number;\n\n /**\n * Returns the week of the year for the given date.\n * @param date - The date to get the week from.\n * @returns The week of the year (1-52/53).\n */\n abstract weekOfYear(date: Date): number;\n\n /**\n * Returns the year for the given date.\n * @param date - The date to get the year from.\n * @returns The year.\n */\n abstract year(date: Date): number;\n\n /**\n * Adds a specified amount of time units to the given date.\n * @param date - The base date.\n * @param unit - The time unit to add (day, month, year, etc.).\n * @param amount - The amount to add.\n * @returns A new AXDateTime instance with the added time.\n */\n abstract add(date: Date, unit: TimeUnit, amount: number): AXDateTime;\n\n /**\n * Sets a specific time unit to a given value.\n * @param date - The base date.\n * @param unit - The time unit to set (day, month, year, etc.).\n * @param value - The new value for the time unit.\n * @returns A new AXDateTime instance with the set time unit.\n */\n abstract set(date: Date, unit: TimeUnit, value: number): AXDateTime;\n\n /**\n * Returns the start of the specified time unit for the given date.\n * @param date - The base date.\n * @param unit - The time unit to get the start of (day, month, year, etc.).\n * @returns A new AXDateTime instance representing the start of the time unit.\n */\n abstract startOf(date: Date, unit: TimeUnit): AXDateTime;\n\n /**\n * Returns the end of the specified time unit for the given date.\n * @param date - The base date.\n * @param unit - The time unit to get the end of (day, month, year, etc.).\n * @returns A new AXDateTime instance representing the end of the time unit.\n */\n abstract endOf(date: Date, unit: TimeUnit): AXDateTime;\n\n /**\n * Creates a new AXDateTime instance from an AXDateValue object.\n * @param value - The date value object containing date information.\n * @returns A new AXDateTime instance.\n */\n abstract create(value: AXDateValue): AXDateTime;\n\n /**\n * Parses a date string and returns a new AXDateTime instance.\n * @param value - The date string to parse.\n * @returns A new AXDateTime instance.\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 weekdayIndex(): number {\n return this._calendar.weekdayIndex(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 // 0 1 ... 58 59\n s: () => this.date.getSeconds().toString(),\n // 00 01 ... 58 59\n ss: () => this.pad(this.date.getSeconds(), 2),\n\n // 0 1 ... 5 6 day of week ***\n d: () => (this.calendar.dayOfWeek(this.date) - 1).toString(),\n // Su Mo ... Fr Sa ***\n dd: () => translateSync(`@acorex:dateTime.weekdays.short.${this.weekdayIndex}`),\n ddd: () => translateSync(`@acorex:dateTime.weekdays.short.${this.weekdayIndex}`),\n // Sunday Monday ... Friday Saturday\n dddd: () => translateSync(`@acorex:dateTime.weekdays.long.${this.weekdayIndex}`),\n\n // 1 2 ... 30 31\n D: () => this.calendar.dayOfMonth(this.date).toString(),\n // 01 02 ... 30 31 day of month\n DD: () => this.pad(this.calendar.dayOfMonth(this.date), 2),\n // 1 2 ... 364 365\n DDD: () => this.calendar.dayOfYear(this.date).toString(),\n // 001 002 ... 364 365 day of year\n DDDD: () => this.pad(this.calendar.dayOfYear(this.date), 3),\n\n // 1 2 ... 52 53\n w: () => this.calendar.weekOfYear(this.date).toString(),\n // 01 02 ... 52 53\n ww: () => this.pad(this.calendar.weekOfYear(this.date), 2),\n\n // 1 2 ... 11 12\n M: () => this.calendar.monthOfYear(this.date).toString(),\n // 01 02 ... 11 12\n MM: () => this.pad(this.calendar.monthOfYear(this.date), 2),\n // Jan Feb ... Nov Dec\n MMM: () =>\n translateSync(\n `@acorex:dateTime.months.${this.calendar.name()}.short.${this.calendar.monthOfYear(this.date) - 1}`,\n ),\n // January February ... November December\n MMMM: () =>\n translateSync(`@acorex:dateTime.months.${this.calendar.name()}.long.${this.calendar.monthOfYear(this.date) - 1}`),\n\n // 1 2 ... 7\n E: () => this.calendar.dayOfWeek(this.date).toString(),\n // 01 02 ... 07\n EE: () => this.pad(this.calendar.dayOfWeek(this.date), 2),\n // Sun Mon ... Sat\n EEE: () => translateSync(`@acorex:dateTime.weekdays.short.${this.weekdayIndex}`),\n // Sunday Monday ... Saturday\n EEEE: () => translateSync(`@acorex:dateTime.weekdays.long.${this.weekdayIndex}`),\n\n // 1 2 ... 2020 ...\n y: () => this.calendar.year(this.date).toString(),\n // 70 71 ... 29 30\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 // 1970 1971 ... 2029 2030\n yyyy: () => this.pad(this.calendar.year(this.date), 4),\n YYYY: () => this.pad(this.calendar.year(this.date), 4),\n\n // 0 1 ... 58 59\n m: () => this.date.getMinutes().toString(),\n // 00 01 ... 58 59\n mm: () => this.pad(this.date.getMinutes(), 2),\n\n // 0 1 ... 11 12\n h: () => (this.date.getHours() % 12 || 12).toString(),\n // 00 01 ... 11 12\n hh: () => this.pad(this.date.getHours() % 12 || 12, 2),\n // 0 1 ... 23 24\n H: () => this.date.getHours().toString(),\n // 00 01 ... 23 24\n HH: () => this.pad(this.date.getHours(), 2),\n\n // TODO: i18n\n // AM PM\n A: () => (this.date.getHours() < 12 ? 'AM' : 'PM').toUpperCase(),\n // am pm\n a: () => (this.date.getHours() < 12 ? 'am' : 'pm').toLowerCase(),\n\n // TODO: review\n Z: () => '',\n ZZZZ: () => '',\n //\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 protected _language = () => (isBrowser() ? navigator.language : 'en-US');\n\n format(\n format: string = this.getDateTimeFormatByLocale(this._language(), 'shortDate'),\n options?: { locale?: string },\n ): string {\n const effectiveOptions = defaults({}, options, {\n locale: this._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 if (f && typeof f === 'function') {\n const r = f(effectiveOptions);\n return r;\n }\n return matched;\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 = {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n };\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 = {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n };\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 case 'ms':\n default:\n return func(this.date?.getTime(), val.date?.getTime());\n }\n }\n\n /**\n * Checks if the current date is after the provided date.\n * @param value The date to compare against.\n * @param unit The unit of measurement for comparison (e.g., 'day', 'hour'). Defaults to 'ms' for precise comparison.\n * @returns `true` if the current date is after the provided date, otherwise `false`.\n */\n isAfter(value: AXDateTime | Date, unit: TimeUnit = 'ms'): boolean {\n // A date is \"after\" if the comparison result is 1.\n return this.compare(value, unit) === 1;\n }\n\n /**\n * Checks if the current date is before the provided date.\n * @param value The date to compare against.\n * @param unit The unit of measurement for comparison (e.g., 'day', 'hour'). Defaults to 'ms' for precise comparison.\n * @returns `true` if the current date is before the provided date, otherwise `false`.\n */\n isBefore(value: AXDateTime | Date, unit: TimeUnit = 'ms'): boolean {\n // A date is \"before\" if the comparison result is -1.\n return this.compare(value, unit) === -1;\n }\n\n /**\n * Checks if the current date is the same as the provided date, up to a specified unit.\n * @param value The date to compare against.\n * @param unit The unit of measurement for comparison (e.g., 'day', 'hour'). Defaults to 'ms' for precise comparison.\n * @returns `true` if the dates are the same for the given unit, otherwise `false`.\n */\n isSame(value: AXDateTime | Date, unit: TimeUnit = 'ms'): boolean {\n // Dates are \"the same\" if the comparison result is 0.\n return this.compare(value, unit) === 0;\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 // NOTE: Calculating exact calendar months/years component is complex\n // from milliseconds alone. We'll set these to 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 // NOTE: total.months and total.years are approximate based on average lengths\n months: 0,\n years: 0,\n },\n };\n\n // Constants for time units in milliseconds\n const ONE_MILLISECOND = 1;\n const ONE_SECOND = 1000 * ONE_MILLISECOND;\n const ONE_MINUTE = 60 * ONE_SECOND;\n const ONE_HOUR = 60 * ONE_MINUTE;\n const ONE_DAY = 24 * ONE_HOUR;\n const ONE_WEEK = 7 * ONE_DAY;\n // Average lengths for approximate total months/years\n const ONE_YEAR_AVG = 365.25 * ONE_DAY;\n const ONE_MONTH_AVG = ONE_YEAR_AVG / 12;\n\n const startTime = this._startTime.date?.getTime();\n const endTime = this._endTime.date?.getTime();\n\n // Calculate the absolute difference in milliseconds\n const diff = Math.abs(endTime - startTime);\n\n // --- Calculate Total Durations ---\n result.total.miliseconds = diff;\n result.total.seconds = diff / ONE_SECOND;\n result.total.minutes = diff / ONE_MINUTE;\n result.total.hours = diff / ONE_HOUR;\n result.total.days = diff / ONE_DAY; // Includes fractional days\n result.total.weeks = diff / ONE_WEEK; // Includes fractional weeks\n result.total.months = diff / ONE_MONTH_AVG; // Approximate\n result.total.years = diff / ONE_YEAR_AVG; // Approximate\n\n // --- Calculate Component Parts ---\n let remainingMillis = diff;\n\n // Calculate full days and update remaining milliseconds\n result.days = Math.floor(remainingMillis / ONE_DAY);\n remainingMillis %= ONE_DAY; // Get the remainder milliseconds after taking out full days\n\n // Calculate full hours from the remainder\n result.hours = Math.floor(remainingMillis / ONE_HOUR);\n remainingMillis %= ONE_HOUR; // Get the remainder milliseconds after taking out full hours\n\n // Calculate full minutes from the remainder\n result.minutes = Math.floor(remainingMillis / ONE_MINUTE);\n remainingMillis %= ONE_MINUTE; // Get the remainder milliseconds after taking out full minutes\n\n // Calculate full seconds from the remainder\n result.seconds = Math.floor(remainingMillis / ONE_SECOND);\n remainingMillis %= ONE_SECOND; // Get the remainder milliseconds after taking out full seconds\n\n // The final remainder is the milliseconds component\n result.miliseconds = remainingMillis;\n\n // As noted above, setting month/year components to 0 as accurate\n // calendar-aware calculation is not implemented here.\n result.months = 0;\n result.years = 0;\n\n return result;\n }\n\n enumerate(unit: TimeUnit = 'day', amount = 1): AXDateTime[] {\n const result: AXDateTime[] = [];\n let item = this._startTime.clone();\n while (item.compare(this._endTime, unit) <= 0) {\n result.push(item);\n item = item.add(unit, amount);\n }\n return result;\n }\n}\n","import { AXCalendar, AXCalendarConfig, AXDateTime, AXDateValue, TimeUnit } from './datetime.types';\n\nexport class AXGregorianCalendar 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.day,\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 'gregorian';\n }\n\n dayOfMonth(date: Date): number {\n return date.getDate();\n }\n\n dayOfYear(date: Date): number {\n let result = 0;\n const 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(((date.getTime() - firstDay.date.getTime()) / 86400000 + firstDay.date.getDay() + 1) / 7);\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 currentDayOfWeek_0based = this.dayOfWeek(clone) - 1;\n const firstDayOfWeek_0based = this.weekdays[0];\n const daysToSubtract = (currentDayOfWeek_0based - firstDayOfWeek_0based + 7) % 7;\n clone.setDate(clone.getDate() - daysToSubtract);\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 const 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 { InjectionToken } from '@angular/core';\n\nexport interface AXHolidayDate {\n date: Date;\n title: string;\n cssClass?: 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>('AX_DATETIME_HOLIDAYS_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXHolidaysLoaderDefault();\n },\n});\n","import { AXCalendar, AXCalendarConfig, AXDateTime, AXDateValue, TimeUnit } from './datetime.types';\n\nexport class AXSolarHijriCalendar extends AXCalendar {\n /**\n * @ignore\n */\n constructor(config: AXCalendarConfig) {\n super(config);\n }\n\n /*\n SolarHijri 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, 3178,\n ];\n\n create(value: AXDateValue): AXDateTime {\n const a = this.toGregorian(value.year, value.month, value.day);\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 'solar-hijri';\n }\n\n dayOfMonth(date: Date): number {\n return this.toSolarHijri(date).day;\n }\n\n dayOfYear(date: Date): number {\n const j = this.toSolarHijri(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 override weekdayIndex(date: Date): number {\n const dow = this.dayOfWeek(date);\n return dow === 1 ? 6 : dow - 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(((date.getTime() - firstDay.date.getTime()) / 86400000 + firstDay.date.getDay() + 1) / 7);\n }\n\n year(date: Date): number {\n return this.toSolarHijri(date).year;\n }\n\n monthOfYear(date: Date): number {\n return this.toSolarHijri(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 const 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.SolarHijriMonthLength(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 const jd = this.dayOfMonth(date);\n const jm = this.monthOfYear(date);\n const 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.toSolarHijri(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 const currentDayOfWeek_0based = this.weekdayIndex(clone);\n const firstDayOfWeek_0based = this.weekdays[0];\n const daysToSubtract = (currentDayOfWeek_0based - firstDayOfWeek_0based + 7) % 7;\n return new AXDateTime(clone, this).add('day', -daysToSubtract).startOf('day');\n }\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.SolarHijriMonthLength(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.SolarHijriMonthLength(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 SolarHijri.\n*/\n toSolarHijri(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 SolarHijri 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 SolarHijri date is valid or not.\n */\n isValidSolarHijriDate(jy, jm, jd) {\n return jy >= -61 && jy <= 3177 && jm >= 1 && jm <= 12 && jd >= 1 && jd <= this.SolarHijriMonthLength(jy, jm);\n }\n\n /*\n Is this a leap year or not?\n */\n isLeapSolarHijriYear(jy) {\n return this.jalCalLeap(jy) === 0;\n }\n\n /*\n Number of days in a given month in a SolarHijri year.\n */\n SolarHijriMonthLength(jy, jm) {\n if (jm <= 6) return 31;\n if (jm <= 11) return 30;\n if (this.isLeapSolarHijriYear(jy)) return 30;\n return 29;\n }\n\n /*\n This determines if the SolarHijri (Persian) year is\n leap (366-day long) or is the common year (365 days)\n \n @param jy SolarHijri 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 const bl = this.breaks.length;\n let jp = this.breaks[0];\n let jm: number;\n let jump: number;\n let leap: number;\n let n: number;\n let i: number;\n\n if (jy < jp || jy >= this.breaks[bl - 1]) throw new Error('Invalid SolarHijri 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 const bl = this.breaks.length;\n const gy = jy + 621;\n let leapJ = -14;\n let jp = this.breaks[0];\n let jm: number;\n let jump: number;\n let leap: number;\n let n: number;\n let i: number;\n\n if (jy < jp || jy >= this.breaks[bl - 1]) throw new Error('Invalid SolarHijri year ' + jy);\n\n // Find the limiting years for the SolarHijri 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 SolarHijri 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 const 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 const 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 const 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 const gy = this.d2g(jdn).gy; // Calculate Gregorian year (gy).\n let jy = gy - 621;\n const r = this.jalCal(jy, false);\n const jdn1f = this.g2d(gy, 3, r.march);\n let jd: number;\n let jm: number;\n let k: number;\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 SolarHijri 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 = 4 * jdn + 139361631;\n j = 4 * jdn + 139361631 + this.div(this.div(4 * jdn + 183187720, 146097) * 3, 4) * 4 - 3908;\n const i = this.div(this.mod(j, 1461), 4) * 5 + 308;\n const gd = this.div(this.mod(i, 153), 5) + 1;\n const gm = this.mod(this.div(i, 153), 12) + 1;\n const gy = this.div(j, 1461) - 100100 + this.div(8 - gm, 6);\n\n return {\n gy: gy,\n gm: gm,\n gd: gd,\n };\n }\n\n private SolarHijriWeek(jy: number, jm: number, jd: number): { saturday: any; friday: any } {\n const dayOfWeek = this.SolarHijriToDateObject(jy, jm, jd, 0, 0, 0, 0).getDay();\n\n const startDayDifference = dayOfWeek == 6 ? 0 : -(dayOfWeek + 1);\n const 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 SolarHijriToDateObject(jy: number, jm: number, jd: number, h = 0, m = 0, s = 0, ms = 0) {\n const gregorianCalenderDate = this.toGregorian(jy, jm, jd);\n\n return new Date(\n gregorianCalenderDate.getFullYear(),\n gregorianCalenderDate.getMonth() - 1,\n\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 { AXEventService, AXSystemEvents } from '@acorex/core/events';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXLocaleProfile, AXLocaleService } from '@acorex/core/locale';\nimport { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { AXCalendar, AXCalendarConfig, AXDateTime, AXDateValue, AXValidDateTimeValue } from './datetime.types';\nimport { AXDateTimeFormatterOptions } from './formatters/datetime.formatter';\nimport { AXGregorianCalendar } from './gregorian.calendar';\nimport { AXHolidayDate, AXHolidaysLoaderOptions, AX_DATETIME_HOLIDAYS_LOADER } from './holidays.loader';\nimport { AXSolarHijriCalendar } from './solar-hijri.calendar';\n\n@Injectable({ providedIn: 'root' })\nexport class AXCalendarService {\n private _holidaysLoader = inject(AX_DATETIME_HOLIDAYS_LOADER);\n private eventService = inject(AXEventService);\n private formatService = inject(AXFormatService);\n private localeService = inject(AXLocaleService);\n\n private readonly calendars = new Map<string, AXCalendar>();\n\n public get calendar(): AXCalendar {\n return this.getActiveCalendar();\n }\n\n private activeCalendar!: BehaviorSubject<AXCalendar>;\n calendarChanges$!: Observable<AXCalendar>;\n\n public getDefaultCalendar(): AXCalendar {\n return this.resolveCalendar(this.localeService.activeProfile().calendar.system);\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.notifyCalendarChanged(calendar);\n }\n }\n\n private notifyCalendarChanged(calendar: AXCalendar): void {\n this.activeCalendar.next(calendar);\n this.eventService.emitEvent({\n type: AXSystemEvents.AXCalendarChanged,\n payload: calendar,\n });\n }\n\n private buildWeekConfig(profile: AXLocaleProfile): AXCalendarConfig {\n const weekdays = Array.from({ length: 7 }, (_, i) => (profile.calendar.week.startsOn + i) % 7);\n return {\n weekdays,\n weekend: profile.calendar.week.weekends,\n };\n }\n\n private registerCalendars(profile: AXLocaleProfile): void {\n const weekConfig = this.buildWeekConfig(profile);\n this.calendars.set('gregorian', new AXGregorianCalendar(weekConfig));\n this.calendars.set('solar-hijri', new AXSolarHijriCalendar(weekConfig));\n }\n\n private applyLocaleWeekSettings(locale: AXLocaleProfile): void {\n const weekConfig = this.buildWeekConfig(locale);\n this.calendars.forEach((calendar) => calendar.applyWeekConfig(weekConfig));\n this.notifyCalendarChanged(this.resolveCalendar(locale.calendar.system));\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 const profile = this.localeService.activeProfile();\n this.registerCalendars(profile);\n this.activeCalendar = new BehaviorSubject(this.resolveCalendar(profile.calendar.system));\n this.calendarChanges$ = this.activeCalendar.asObservable();\n\n this.loadHolidays();\n this.localeService.profileChanged$.subscribe((locale) => {\n if (locale?.calendar?.system) {\n this.applyLocaleWeekSettings(locale);\n }\n });\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 isValidDate(value: any): boolean {\n try {\n if (!value) {\n return false;\n }\n //\n if (value instanceof AXDateTime) {\n return true;\n }\n // Check if it's a Date object\n if (value instanceof Date) {\n return !isNaN(value.getTime());\n }\n // Check if it's a valid date string\n if (typeof value === 'string') {\n const parsed = new Date(value);\n return !isNaN(parsed.getTime());\n }\n // Check if it's an AXDateValue object\n if (typeof value === 'object') {\n return !!(\n value.year &&\n typeof value.month === 'number' &&\n value.month >= 1 &&\n value.month <= 12 &&\n value.year > 0\n );\n }\n return false;\n } catch (error) {\n return false;\n }\n }\n\n public create(value: AXDateValue, calendarName?: string): AXDateTime;\n public create(value: Date, calendarName?: string): AXDateTime;\n public create(value: string, calendarName?: string): AXDateTime;\n public create(value: AXDateTime): AXDateTime;\n public create(value: AXDateValue | Date | string | AXDateTime, calendarName?: string): AXDateTime {\n try {\n const calendar = calendarName ? this.resolveCalendar(calendarName) : this.calendar;\n\n if (!this.isValidDate(value)) {\n throw new Error(`Invalid Date value: ${value}`);\n }\n\n if (value instanceof AXDateTime) {\n return value;\n } else if (typeof value === 'string') {\n return new AXDateTime(new Date(value), calendar);\n } else 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 } catch (error) {\n console.error('Error creating date:', error);\n throw new Error(`Invalid Date value: ${value}`);\n }\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 calendar = this.calendars.get(name);\n if (!calendar) {\n return this.calendar;\n }\n return calendar;\n }\n\n public convert(value: AXValidDateTimeValue, 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 public format(value: AXValidDateTimeValue, format: string, options?: AXDateTimeFormatterOptions): string {\n const calendar = options?.calendar ? this.resolveCalendar(options.calendar) : this.calendar;\n\n return this.formatService.format(value, 'datetime', {\n format: format,\n calendar: calendar.name(),\n });\n }\n}\n","import { AXFormatService } from '@acorex/core/format';\nimport { Pipe, PipeTransform, inject } from '@angular/core';\nimport { AXCalendarService } from './calendar.service';\nimport { AXDateTime } from './datetime.types';\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 private formatService = inject(AXFormatService);\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 this.formatService.format(val, 'datetime', format as any);\n }\n}\n","import { AXFormatter } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { inject, Injectable } from '@angular/core';\nimport { isNil } from 'lodash-es';\nimport { AXCalendarService } from '../calendar.service';\nimport { AXValidDateTimeValue } from '../datetime.types';\nimport { AXDateTimeFormatterOptions } from './datetime.formatter';\n\n@Injectable()\nexport class AXDateFormatter implements AXFormatter {\n private calendarService = inject(AXCalendarService);\n private localeService = inject(AXLocaleService);\n\n get name(): string {\n return 'date';\n }\n\n format(value: AXValidDateTimeValue, options?: AXDateTimeFormatterOptions | string): string {\n if (isNil(value)) {\n return '';\n }\n //\n if (!this.calendarService.isValidDate(value)) return 'Invalid date';\n //\n const effectiveOptions =\n typeof options == 'object'\n ? {\n format: options.format ?? 'short',\n locale: options.locale,\n calendar: options.calendar ?? this.calendarService.calendar.name(),\n }\n : {\n format: options,\n calendar: this.calendarService.calendar.name(),\n };\n //\n const formats = this.localeService.activeProfile().formats;\n const map = {\n short: formats.date.short,\n medium: formats.date.medium,\n long: formats.date.long,\n full: formats.date.full,\n };\n const format = map[effectiveOptions.format as keyof typeof map] ?? effectiveOptions.format ?? map['short'];\n //\n return this.calendarService\n .convert(value, effectiveOptions.calendar as string)\n .format(format, { locale: effectiveOptions.locale });\n }\n}\n","import { AXFormatOptions, AXFormatter } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { Injectable, inject } from '@angular/core';\nimport { isNil } from 'lodash-es';\nimport { AXCalendarService } from '../calendar.service';\nimport { AXValidDateTimeValue } from '../datetime.types';\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@Injectable()\nexport class AXDateTimeFormatter implements AXFormatter {\n private localeService = inject(AXLocaleService);\n private calendarService = inject(AXCalendarService);\n\n get name(): string {\n return 'datetime';\n }\n\n format(value: AXValidDateTimeValue, options?: AXDateTimeFormatterOptions | string): string {\n if (isNil(value)) {\n return '';\n }\n //\n if (!this.calendarService.isValidDate(value)) return 'Invalid date';\n //\n const effectiveOptions =\n typeof options == 'object'\n ? {\n format: options.format ?? 'date',\n locale: options.locale,\n calendar: options.calendar ?? this.calendarService.calendar.name(),\n }\n : {\n format: options,\n calendar: this.calendarService.calendar.name(),\n };\n //\n const formats = this.localeService.activeProfile().formats;\n const map = {\n longDate: formats.date.long,\n shortDate: formats.date.short,\n mediumDate: formats.date.medium,\n date: formats.date.short,\n //\n longTime: formats.time.long,\n shortTime: formats.time.short,\n mediumTime: formats.time.medium,\n time: formats.time.short,\n //\n long: formats.datetime.long,\n short: formats.datetime.short,\n medium: formats.datetime.medium,\n full: formats.datetime.full,\n };\n const format = map[effectiveOptions.format as keyof typeof map] ?? effectiveOptions.format ?? map['date'];\n //\n return this.calendarService\n .convert(value, effectiveOptions.calendar as string)\n .format(format, { locale: effectiveOptions.locale });\n }\n}\n","import { AXFormatOptions, AXFormatter } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\n\nexport interface AXTimeDurationFormatterOptions extends AXFormatOptions {\n format: string;\n}\n\ndeclare module '@acorex/core/format' {\n interface AXFormatOptionsMap {\n duration: AXTimeDurationFormatterOptions;\n }\n}\n\ntype AXTimeDurationUnit = 'YEAR' | 'MONTH' | 'WEEK' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND' | 'MILLISECOND';\n\n@Injectable()\nexport class AXTimeDurationFormatter implements AXFormatter {\n get name(): string {\n return 'time-duration';\n }\n\n format(value: number, options?: AXTimeDurationFormatterOptions): string {\n const milliseconds = Number(value);\n if (milliseconds === null || isNaN(milliseconds)) {\n return '...';\n }\n\n // Convert milliseconds to various units\n const totalMilliseconds = milliseconds % 1000;\n const totalSeconds = Math.floor(milliseconds / 1000);\n const seconds = totalSeconds % 60;\n const totalMinutes = Math.floor(totalSeconds / 60);\n const minutes = totalMinutes % 60;\n const totalHours = Math.floor(totalMinutes / 60);\n\n // Helper function for zero-padding\n const pad = (num: number, length = 2) => num.toString().padStart(length, '0');\n\n // Default format if none provided\n const format = options?.format || (totalHours >= 0 ? 'HH:mm:ss' : 'mm:ss');\n\n const formattedTime = [];\n\n // Parse format and build the time string accordingly\n if (format.includes('HH') || format.includes('H')) {\n formattedTime.push(pad(totalHours));\n }\n if (format.includes('mm')) {\n formattedTime.push(pad(minutes));\n } else if (format.includes('m')) {\n formattedTime.push(minutes.toString());\n }\n if (format.includes('ss')) {\n formattedTime.push(pad(seconds));\n } else if (format.includes('s')) {\n formattedTime.push(seconds.toString());\n }\n if (format.includes('ms') || format.includes('MS')) {\n formattedTime.push(pad(totalMilliseconds, 3));\n }\n\n // Join the parts according to the format\n return formattedTime.join(format.includes('ms') || format.includes('MS') ? ':' : ':');\n }\n\n translationService: AXTranslationService = inject(AXTranslationService);\n\n async millisecondsToMask(\n ms: number,\n startUnit: AXTimeDurationUnit = 'YEAR',\n endUnit: AXTimeDurationUnit = 'MILLISECOND',\n label = false,\n maskDigits = '00:00:00:00:00:00:00:000',\n padZero = false,\n ): Promise<string> {\n if (ms <= 0) return '';\n\n const yearDigits = maskDigits.split(':')[0];\n const monthDigits = maskDigits.split(':')[1];\n const weekDigits = maskDigits.split(':')[2];\n const dayDigits = maskDigits.split(':')[3];\n const hourDigits = maskDigits.split(':')[4];\n const minuteDigits = maskDigits.split(':')[5];\n const secondDigits = maskDigits.split(':')[6];\n const millisecondDigits = maskDigits.split(':')[7];\n\n const translations = await Promise.all([\n this.translationService.translateAsync('@acorex:dateTime.units.year'),\n this.translationService.translateAsync('@acorex:dateTime.units.month'),\n this.translationService.translateAsync('@acorex:dateTime.units.week'),\n this.translationService.translateAsync('@acorex:dateTime.units.day'),\n this.translationService.translateAsync('@acorex:dateTime.units.hour'),\n this.translationService.translateAsync('@acorex:dateTime.units.minute'),\n this.translationService.translateAsync('@acorex:dateTime.units.second'),\n this.translationService.translateAsync('@acorex:dateTime.units.millisecond'),\n ]);\n\n const units = [\n { key: 'YEAR', label: translations[0].toLocaleUpperCase(), value: 1000 * 60 * 60 * 24 * 365, digits: yearDigits },\n {\n key: 'MONTH',\n label: translations[1].toLocaleUpperCase(),\n value: 1000 * 60 * 60 * 24 * 30,\n digits: monthDigits,\n },\n { key: 'WEEK', label: translations[2].toLocaleUpperCase(), value: 1000 * 60 * 60 * 24 * 7, digits: weekDigits },\n { key: 'DAY', label: translations[3].toLocaleUpperCase(), value: 1000 * 60 * 60 * 24, digits: dayDigits },\n { key: 'HOUR', label: translations[4].toLocaleUpperCase(), value: 1000 * 60 * 60, digits: hourDigits },\n { key: 'MINUTE', label: translations[5].toLocaleUpperCase(), value: 1000 * 60, digits: minuteDigits },\n { key: 'SECOND', label: translations[6].toLocaleUpperCase(), value: 1000, digits: secondDigits },\n { key: 'MILLISECOND', label: translations[7].toLocaleUpperCase(), value: 1, digits: millisecondDigits },\n ];\n\n const startIndex = units.findIndex((u) => u.key === startUnit.toUpperCase());\n const endIndex = units.findIndex((u) => u.key === endUnit.toUpperCase());\n\n if (startIndex === -1 || endIndex === -1 || startIndex > endIndex) {\n throw new Error('Invalid time unit range');\n }\n\n const limitedUnits = units.slice(startIndex, endIndex + 1);\n let remainingMs = ms;\n const result: string[] = [];\n\n for (let i = 0; i < limitedUnits.length; i++) {\n const unit = limitedUnits[i];\n const maxValue = Math.pow(10, unit.digits.length) - 1;\n\n let unitValue = 0;\n\n if (remainingMs >= unit.value) {\n // Calculate how much of this unit we can fill\n unitValue = Math.min(Math.floor(remainingMs / unit.value), maxValue);\n remainingMs -= unitValue * unit.value;\n }\n\n // Always add all units to result, even if value is zero\n const displayValue = label\n ? `${padZero ? unitValue.toString().padStart(unit.digits.length, '0') : unitValue} (${unit.label})`\n : `${padZero ? unitValue.toString().padStart(unit.digits.length, '0') : unitValue}`;\n\n result.push(displayValue);\n }\n\n const separator = label ? ' : ' : ':';\n const reverseSeparator = label ? ' : ' : ':';\n\n if (label) {\n if (this.translationService.getActiveLang() === 'fa-IR') {\n return result.reverse().join(reverseSeparator);\n } else {\n return result.join(separator);\n }\n } else {\n return result.join(separator);\n }\n }\n}\n","import { AXFormatter } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { Injectable, inject } from '@angular/core';\nimport { isNil } from 'lodash-es';\nimport { AXCalendarService } from '../calendar.service';\nimport { AXValidDateTimeValue } from '../datetime.types';\nimport { AXDateTimeFormatterOptions } from './datetime.formatter';\n\n@Injectable()\nexport class AXTimeFormatter implements AXFormatter {\n private calendarService = inject(AXCalendarService);\n private localeService = inject(AXLocaleService);\n\n get name(): string {\n return 'time';\n }\n\n format(value: AXValidDateTimeValue, options?: AXDateTimeFormatterOptions | string): string {\n if (isNil(value)) {\n return '';\n }\n //\n if (!this.calendarService.isValidDate(value)) return 'Invalid date';\n //\n const effectiveOptions =\n typeof options == 'object'\n ? {\n format: options.format ?? 'short',\n locale: options.locale,\n calendar: options.calendar ?? this.calendarService.calendar.name(),\n }\n : {\n format: options,\n calendar: this.calendarService.calendar.name(),\n };\n //\n const formats = this.localeService.activeProfile().formats;\n const map = {\n short: formats.time.short,\n medium: formats.time.medium,\n long: formats.time.long,\n full: formats.time.full,\n };\n const format = map[effectiveOptions.format as keyof typeof map] ?? effectiveOptions.format ?? map['short'];\n //\n return this.calendarService\n .convert(value, effectiveOptions.calendar as string)\n .format(format, { locale: effectiveOptions.locale });\n }\n}\n","import { AXFormatOptions, AXFormatter } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, inject } from '@angular/core';\nimport { isDate, isNil } from 'lodash-es';\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@Injectable()\nexport class AXTimeLeftFormatter implements AXFormatter {\n private translateService = inject(AXTranslationService);\n\n get name(): string {\n return 'timeleft';\n }\n\n updateInterval = 1000; // Update every second\n\n format(value: number | string | Date, options?: AXTimeLeftFormatterOptions): string {\n if (isNil(value)) {\n return '';\n }\n let valueNumber: number;\n if (isDate(value)) {\n valueNumber = value.getTime() - new Date().getTime();\n } else {\n valueNumber = Number(value);\n }\n const isPast = valueNumber < 0;\n const sign = this.translateService.translateSync(`@acorex:time.${valueNumber >= 0 ? 'left' : 'ago'}`);\n const milliseconds = Math.abs(valueNumber);\n const durationInSeconds = Math.round(milliseconds / 1000);\n let format = options?.format;\n\n // Determine the best format if format is null (following standard conventions)\n // Standard time thresholds based on common social media platforms\n if (isNil(format)) {\n if (durationInSeconds < 60)\n format = 'now'; // 0-10s: \"just now\"\n // else if (durationInSeconds < 60) format = 's'; // 10-60s: \"X seconds ago\"\n else if (durationInSeconds < 3600)\n format = 'm'; // 1-60 min: \"X minutes ago\"\n else if (durationInSeconds < 86400)\n format = 'h'; // 1-24 hours: \"X hours ago\"\n else if (durationInSeconds < 604800)\n format = 'd'; // 1-7 days: \"X days ago\"\n else if (durationInSeconds < 2592000)\n format = 'w'; // 1-4 weeks: \"X weeks ago\"\n else if (durationInSeconds < 31536000)\n format = 'M'; // 1-12 months: \"X months ago\"\n else format = 'y'; // 1+ years: \"X years ago\"\n }\n\n // Helper function for zero-padding\n const pad = (num: number) => num.toString().padStart(2, '0');\n\n const translate = (key: string, useSign = true) => {\n const translated = this.translateService.translateSync(`@acorex:time.${key}`);\n return useSign ? `${translated} ${sign}` : translated;\n };\n\n switch (format) {\n case 'now':\n // Just now (0-10 seconds) - Standard: immediate time\n if (isPast) {\n return translate('just-now', false);\n }\n return translate('right-now', false);\n case 's':\n // Seconds (10-59 seconds) - Standard: show exact seconds\n return `${durationInSeconds} ${translate(durationInSeconds === 1 ? 'second' : 'seconds')}`;\n case 'ss':\n return `${pad(durationInSeconds)} ${translate('seconds')}`;\n case 'm': {\n // Minutes (1-59 minutes) - Standard: show exact minutes\n const minutes = Math.round(durationInSeconds / 60);\n return `${minutes} ${translate(minutes === 1 ? 'minute' : 'minutes')}`;\n }\n case 'mm':\n return `${pad(Math.round(durationInSeconds / 60))} ${translate('minutes')}`;\n case 'h':\n case 'H': {\n // Hours (1-23 hours) - Standard: show exact hours\n const hours = Math.round(durationInSeconds / 3600);\n return `${hours} ${translate(hours === 1 ? 'hour' : 'hours')}`;\n }\n case 'hh':\n case 'HH':\n return `${pad(Math.round(durationInSeconds / 3600))} ${translate('hours')}`;\n case 'd':\n case 'D': {\n // Days (1-6 days) - Standard: show exact days\n const days = Math.round(durationInSeconds / 86400);\n return `${days} ${translate(days === 1 ? 'day' : 'days')}`;\n }\n case 'dd':\n case 'DD':\n return `${pad(Math.round(durationInSeconds / 86400))} ${translate('days')}`;\n case 'w':\n case 'W': {\n // Weeks (1-4 weeks) - Standard: show weeks for 7-30 days\n const weeks = Math.round(durationInSeconds / 604800);\n return `${weeks} ${translate(weeks === 1 ? 'week' : 'weeks')}`;\n }\n case 'ww':\n case 'WW':\n return `${pad(Math.round(durationInSeconds / 604800))} ${translate('weeks')}`;\n case 'M': {\n // Months (1-11 months) - Standard: show months\n const months = Math.round(durationInSeconds / 2592000);\n return `${months} ${translate(months === 1 ? 'month' : 'months')}`;\n }\n case 'MM':\n return `${pad(Math.round(durationInSeconds / 2592000))} ${translate('months')}`;\n case 'y':\n case 'Y': {\n // Years (1+ years) - Standard: show years\n const years = Math.round(durationInSeconds / 31536000);\n return `${years} ${translate(years === 1 ? 'year' : 'years')}`;\n }\n case 'yy':\n case 'YY':\n case 'yyyy':\n case 'YYYY':\n return `${pad(Math.round(durationInSeconds / 31536000))} ${translate('years')}`;\n default:\n console.error('Invalid format for timeleft formatter pipe');\n return 'Invalid format';\n }\n }\n}\n","import { AXFormatModule } from '@acorex/core/format';\nimport { NgModule } from '@angular/core';\nimport { AXDateTimePipe } from './datetime.pipe';\nimport { AXDateFormatter } from './formatters/date.formatter';\nimport { AXDateTimeFormatter } from './formatters/datetime.formatter';\nimport { AXTimeDurationFormatter } from './formatters/time-duration.formatter';\nimport { AXTimeFormatter } from './formatters/time.formatter';\nimport { AXTimeLeftFormatter } from './formatters/timeleft.formatter';\n\n@NgModule({\n imports: [\n AXFormatModule.forChild({\n formatters: [AXDateTimeFormatter, AXDateFormatter, AXTimeFormatter, AXTimeLeftFormatter, AXTimeDurationFormatter],\n }),\n AXDateTimePipe,\n ],\n exports: [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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"}
|