@acorex/core 21.0.1-next.7 → 21.0.1-next.71
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 +5 -5
- 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 +214 -3
- package/fesm2022/acorex-core-constants.mjs.map +1 -1
- package/fesm2022/acorex-core-date-time.mjs +30 -31
- 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 +10 -10
- 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 +16 -6
- 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 +10 -10
- package/fesm2022/acorex-core-locale.mjs.map +1 -1
- package/fesm2022/acorex-core-network.mjs +3 -3
- 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 +3 -3
- 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 +145 -63
- package/fesm2022/acorex-core-translation.mjs.map +1 -1
- package/fesm2022/acorex-core-utils.mjs +3 -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 +44 -0
- package/fesm2022/acorex-core-z-index.mjs.map +1 -0
- package/package.json +28 -26
- package/{components/index.d.ts → types/acorex-core-components.d.ts} +2 -2
- package/{constants/index.d.ts → types/acorex-core-constants.d.ts} +2 -1
- package/{format/index.d.ts → types/acorex-core-format.d.ts} +2 -2
- package/{full-screen/index.d.ts → types/acorex-core-full-screen.d.ts} +5 -0
- package/{translation/index.d.ts → types/acorex-core-translation.d.ts} +29 -4
- package/{validation/index.d.ts → types/acorex-core-validation.d.ts} +10 -10
- package/types/acorex-core-z-index.d.ts +20 -0
- package/z-index/README.md +3 -0
- /package/{config/index.d.ts → types/acorex-core-config.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/{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/{utils/index.d.ts → types/acorex-core-utils.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":["../../../../packages/core/date-time/src/lib/datetime.types.ts","../../../../packages/core/date-time/src/lib/gregorian.calendar.ts","../../../../packages/core/date-time/src/lib/solar-hijri.calendar.ts","../../../../packages/core/date-time/src/lib/dateTime.config.ts","../../../../packages/core/date-time/src/lib/holidays.loader.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 * 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 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 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: () =>\n translateSync(\n `@acorex:dateTime.weekdays.short.${this.calendar.weekdays[this.calendar.dayOfWeek(this.date) - 1]}`,\n ),\n ddd: () =>\n translateSync(\n `@acorex:dateTime.weekdays.short.${this.calendar.weekdays[this.calendar.dayOfWeek(this.date) - 1]}`,\n ),\n // Sunday Monday ... Friday Saturday\n dddd: () =>\n translateSync(`@acorex:dateTime.weekdays.long.${this.calendar.weekdays[this.calendar.dayOfWeek(this.date) - 1]}`),\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: () =>\n translateSync(\n `@acorex:dateTime.weekdays.short.${this.calendar.weekdays[this.calendar.dayOfWeek(this.date) - 1]}`,\n ),\n // Sunday Monday ... Saturday\n EEEE: () =>\n translateSync(`@acorex:dateTime.weekdays.long.${this.calendar.weekdays[this.calendar.dayOfWeek(this.date) - 1]}`),\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 { 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 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 return new AXDateTime(clone, this).add('day', -this.dayOfWeek(clone) + 1).startOf('day');\n case 'month': {\n const jy = this.year(date);\n const jm = this.monthOfYear(date);\n const gDate = this.toGregorian(jy, jm, 1);\n return new AXDateTime(gDate, this).startOf('day');\n }\n case 'year': {\n const jy = this.year(date);\n const gDate = this.toGregorian(jy, 1, 1);\n return new AXDateTime(gDate, this).startOf('day');\n }\n }\n }\n\n endOf(date: Date, unit: TimeUnit): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);\n return new AXDateTime(clone, this);\n case 'minute':\n clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);\n return new AXDateTime(clone, this);\n case 'hour':\n clone.setHours(clone.getHours(), 59, 59, 999);\n return new AXDateTime(clone, this);\n default:\n case 'day':\n clone.setHours(23, 59, 59, 999);\n return new AXDateTime(clone, this);\n case 'week': {\n return this.startOf(date, 'week').add('day', 6).endOf('day');\n }\n case 'month': {\n const jy = this.year(date);\n const jm = this.monthOfYear(date);\n const jd = this.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 { AX_GLOBAL_CONFIG } from '@acorex/core/config';\nimport { InjectionToken, inject } from '@angular/core';\nimport { set } from 'lodash-es';\nimport { AXCalendar } from './datetime.types';\nimport { AXGregorianCalendar } from './gregorian.calendar';\nimport { AXSolarHijriCalendar } from './solar-hijri.calendar';\n\nexport interface AXDateTimeConfig {\n calendar: string;\n calendars: {\n [key: string]: AXCalendar;\n };\n}\n\nexport const AX_DATETIME_CONFIG = new InjectionToken<AXDateTimeConfig>('AX_DATETIME_CONFIG', {\n providedIn: 'root',\n factory: () => {\n const global = inject(AX_GLOBAL_CONFIG);\n set(global, 'dateTime', AX_DATETIME_CONFIG);\n return AXDateTimeDefaultConfig;\n },\n});\n\nexport const AXDateTimeDefaultConfig: AXDateTimeConfig = {\n calendar: 'gregorian',\n calendars: {\n gregorian: new AXGregorianCalendar({\n weekdays: [0, 1, 2, 3, 4, 5, 6],\n weekend: [5, 6],\n }),\n 'solar-hijri': new AXSolarHijriCalendar({\n weekdays: [6, 0, 1, 2, 3, 4, 5],\n weekend: [6],\n }),\n },\n};\n\nexport type PartialDateTimeConfig = Partial<AXDateTimeConfig>;\n\nexport function dateTimeConfig(config: PartialDateTimeConfig = {}): AXDateTimeConfig {\n const result = {\n ...AXDateTimeDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface AXHolidayDate {\n date: Date;\n title: string;\n 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 { 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 { AXDateTimeConfig, AX_DATETIME_CONFIG } from './dateTime.config';\nimport { AXCalendar, AXDateTime, AXDateValue, AXValidDateTimeValue } from './datetime.types';\nimport { AXDateTimeFormatterOptions } from './formatters/datetime.formatter';\nimport { AXHolidayDate, AXHolidaysLoaderOptions, AX_DATETIME_HOLIDAYS_LOADER } from './holidays.loader';\n\n@Injectable({ providedIn: 'root' })\nexport class AXCalendarService {\n private config: AXDateTimeConfig = inject(AX_DATETIME_CONFIG);\n private _holidaysLoader = inject(AX_DATETIME_HOLIDAYS_LOADER);\n private eventService = inject(AXEventService);\n private formatService = inject(AXFormatService);\n private localeService = inject(AXLocaleService);\n\n public get calendar(): AXCalendar {\n return this.getActiveCalendar();\n }\n\n private activeCalendar = new BehaviorSubject<AXCalendar>(this.getDefaultCalendar());\n calendarChanges$ = this.activeCalendar.asObservable();\n\n public getDefaultCalendar(): AXCalendar {\n return this.config.calendars[this.config.calendar];\n }\n\n public getActiveCalendar(): AXCalendar {\n return this.activeCalendar.getValue();\n }\n\n public setActiveCalendar(name: string): void {\n if (name != this.calendar?.name()) {\n const calendar = this.resolveCalendar(name);\n this.activeCalendar.next(calendar);\n this.eventService.emitEvent({\n type: AXSystemEvents.AXCalendarChanged,\n payload: this.getActiveCalendar(),\n });\n }\n }\n\n public onHolidaysChanged: Subject<AXHolidayDate[]> = new Subject<AXHolidayDate[]>();\n private _holidays: AXHolidayDate[] = [];\n public get holidays(): AXHolidayDate[] {\n return this._holidays;\n }\n\n constructor() {\n this.loadHolidays();\n //\n this.localeService.profileChanged$.subscribe((locale) => {\n if (locale?.calendar?.system) {\n this.setActiveCalendar(locale.calendar.system);\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 c = this.config.calendars[name];\n if (!c) {\n return this.calendar;\n }\n return c;\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 < 10) format = 'now'; // 0-10s: \"just now\"\n else if (durationInSeconds < 60) format = 's'; // 10-60s: \"X seconds ago\"\n else if (durationInSeconds < 3600) format = 'm'; // 1-60 min: \"X minutes ago\"\n else if (durationInSeconds < 86400) format = 'h'; // 1-24 hours: \"X hours ago\"\n else if (durationInSeconds < 604800) format = 'd'; // 1-7 days: \"X days ago\"\n else if (durationInSeconds < 2592000) format = 'w'; // 1-4 weeks: \"X weeks ago\"\n else if (durationInSeconds < 31536000) 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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"}
|
|
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/solar-hijri.calendar.ts","../../../../packages/core/date-time/src/lib/dateTime.config.ts","../../../../packages/core/date-time/src/lib/holidays.loader.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 * 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 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 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: () =>\n translateSync(\n `@acorex:dateTime.weekdays.short.${this.calendar.weekdays[this.calendar.dayOfWeek(this.date) - 1]}`,\n ),\n ddd: () =>\n translateSync(\n `@acorex:dateTime.weekdays.short.${this.calendar.weekdays[this.calendar.dayOfWeek(this.date) - 1]}`,\n ),\n // Sunday Monday ... Friday Saturday\n dddd: () =>\n translateSync(`@acorex:dateTime.weekdays.long.${this.calendar.weekdays[this.calendar.dayOfWeek(this.date) - 1]}`),\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: () =>\n translateSync(\n `@acorex:dateTime.weekdays.short.${this.calendar.weekdays[this.calendar.dayOfWeek(this.date) - 1]}`,\n ),\n // Sunday Monday ... Saturday\n EEEE: () =>\n translateSync(`@acorex:dateTime.weekdays.long.${this.calendar.weekdays[this.calendar.dayOfWeek(this.date) - 1]}`),\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 { 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 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 return new AXDateTime(clone, this).add('day', -this.dayOfWeek(clone) + 1).startOf('day');\n case 'month': {\n const jy = this.year(date);\n const jm = this.monthOfYear(date);\n const gDate = this.toGregorian(jy, jm, 1);\n return new AXDateTime(gDate, this).startOf('day');\n }\n case 'year': {\n const jy = this.year(date);\n const gDate = this.toGregorian(jy, 1, 1);\n return new AXDateTime(gDate, this).startOf('day');\n }\n }\n }\n\n endOf(date: Date, unit: TimeUnit): AXDateTime {\n const clone = new Date(date.valueOf());\n switch (unit) {\n case 'second':\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);\n return new AXDateTime(clone, this);\n case 'minute':\n clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);\n return new AXDateTime(clone, this);\n case 'hour':\n clone.setHours(clone.getHours(), 59, 59, 999);\n return new AXDateTime(clone, this);\n default:\n case 'day':\n clone.setHours(23, 59, 59, 999);\n return new AXDateTime(clone, this);\n case 'week': {\n return this.startOf(date, 'week').add('day', 6).endOf('day');\n }\n case 'month': {\n const jy = this.year(date);\n const jm = this.monthOfYear(date);\n const jd = this.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 { AX_GLOBAL_CONFIG } from '@acorex/core/config';\nimport { InjectionToken, inject } from '@angular/core';\nimport { set } from 'lodash-es';\nimport { AXCalendar } from './datetime.types';\nimport { AXGregorianCalendar } from './gregorian.calendar';\nimport { AXSolarHijriCalendar } from './solar-hijri.calendar';\n\nexport interface AXDateTimeConfig {\n calendar: string;\n calendars: {\n [key: string]: AXCalendar;\n };\n}\n\nexport const AX_DATETIME_CONFIG = new InjectionToken<AXDateTimeConfig>('AX_DATETIME_CONFIG', {\n providedIn: 'root',\n factory: () => {\n const global = inject(AX_GLOBAL_CONFIG);\n set(global, 'dateTime', AX_DATETIME_CONFIG);\n return AXDateTimeDefaultConfig;\n },\n});\n\nexport const AXDateTimeDefaultConfig: AXDateTimeConfig = {\n calendar: 'gregorian',\n calendars: {\n gregorian: new AXGregorianCalendar({\n weekdays: [0, 1, 2, 3, 4, 5, 6],\n weekend: [5, 6],\n }),\n 'solar-hijri': new AXSolarHijriCalendar({\n weekdays: [6, 0, 1, 2, 3, 4, 5],\n weekend: [6],\n }),\n },\n};\n\nexport type PartialDateTimeConfig = Partial<AXDateTimeConfig>;\n\nexport function dateTimeConfig(config: PartialDateTimeConfig = {}): AXDateTimeConfig {\n const result = {\n ...AXDateTimeDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface AXHolidayDate {\n date: Date;\n title: string;\n 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 { 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 { AXDateTimeConfig, AX_DATETIME_CONFIG } from './dateTime.config';\nimport { AXCalendar, AXDateTime, AXDateValue, AXValidDateTimeValue } from './datetime.types';\nimport { AXDateTimeFormatterOptions } from './formatters/datetime.formatter';\nimport { AXHolidayDate, AXHolidaysLoaderOptions, AX_DATETIME_HOLIDAYS_LOADER } from './holidays.loader';\n\n@Injectable({ providedIn: 'root' })\nexport class AXCalendarService {\n private config: AXDateTimeConfig = inject(AX_DATETIME_CONFIG);\n private _holidaysLoader = inject(AX_DATETIME_HOLIDAYS_LOADER);\n private eventService = inject(AXEventService);\n private formatService = inject(AXFormatService);\n private localeService = inject(AXLocaleService);\n\n public get calendar(): AXCalendar {\n return this.getActiveCalendar();\n }\n\n private activeCalendar = new BehaviorSubject<AXCalendar>(this.getDefaultCalendar());\n calendarChanges$ = this.activeCalendar.asObservable();\n\n public getDefaultCalendar(): AXCalendar {\n return this.config.calendars[this.config.calendar];\n }\n\n public getActiveCalendar(): AXCalendar {\n return this.activeCalendar.getValue();\n }\n\n public setActiveCalendar(name: string): void {\n if (name != this.calendar?.name()) {\n const calendar = this.resolveCalendar(name);\n this.activeCalendar.next(calendar);\n this.eventService.emitEvent({\n type: AXSystemEvents.AXCalendarChanged,\n payload: this.getActiveCalendar(),\n });\n }\n }\n\n public onHolidaysChanged: Subject<AXHolidayDate[]> = new Subject<AXHolidayDate[]>();\n private _holidays: AXHolidayDate[] = [];\n public get holidays(): AXHolidayDate[] {\n return this._holidays;\n }\n\n constructor() {\n this.loadHolidays();\n //\n this.localeService.profileChanged$.subscribe((locale) => {\n if (locale?.calendar?.system) {\n this.setActiveCalendar(locale.calendar.system);\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 c = this.config.calendars[name];\n if (!c) {\n return this.calendar;\n }\n return c;\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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"}
|