ngx-kit 6.2.0 → 6.3.0
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/drawer-menu/README.md +125 -77
- package/fesm2022/ngx-kit-date-picker.mjs +10 -8
- package/fesm2022/ngx-kit-date-picker.mjs.map +1 -1
- package/fesm2022/ngx-kit-drawer-menu.mjs +302 -140
- package/fesm2022/ngx-kit-drawer-menu.mjs.map +1 -1
- package/fesm2022/ngx-kit-image-editor.mjs +2 -2
- package/fesm2022/ngx-kit-image-editor.mjs.map +1 -1
- package/fesm2022/ngx-kit-message.mjs +2 -2
- package/fesm2022/ngx-kit-message.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ngx-kit-date-picker.d.ts +2 -1
- package/types/ngx-kit-drawer-menu.d.ts +97 -86
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-kit-date-picker.mjs","sources":["../../../projects/libs/date-picker/components/config.ts","../../../projects/libs/date-picker/helpers/date.helper.ts","../../../projects/libs/date-picker/helpers/date-format.helper.ts","../../../projects/libs/date-picker/adapters/locales/gregorian.adapter.ts","../../../projects/libs/date-picker/adapters/converters/jalali-converter.helper.ts","../../../projects/libs/date-picker/adapters/locales/jalali-adapter.ts","../../../projects/libs/date-picker/adapters/converters/hijri-converter.helper.ts","../../../projects/libs/date-picker/adapters/locales/hijri-adapter.ts","../../../projects/libs/date-picker/adapters/converters/chinese-converter.helper.ts","../../../projects/libs/date-picker/adapters/locales/chinese.adapter.ts","../../../projects/libs/date-picker/adapters/consts.ts","../../../projects/libs/date-picker/adapters/date-adapter-registry.ts","../../../projects/libs/date-picker/helpers/time.helper.ts","../../../projects/libs/date-picker/components/ngx-date-picker-base.component.ts","../../../projects/libs/date-picker/tokens/localization.ts","../../../projects/libs/date-picker/components/datepicker/ngx-datepicker.component.ts","../../../projects/libs/date-picker/components/datepicker/ngx-datepicker.component.html","../../../projects/libs/date-picker/directives/ngx-datepicker.directive.ts","../../../projects/libs/date-picker/components/calendar/ngx-calendar.component.ts","../../../projects/libs/date-picker/components/calendar/ngx-calendar.component.html","../../../projects/libs/date-picker/provide-date-adapters.ts","../../../projects/libs/date-picker/models/range.ts","../../../projects/libs/date-picker/models/date.ts","../../../projects/libs/date-picker/helpers/date-range.helper.ts","../../../projects/libs/date-picker/components/date-range-picker/ngx-date-range-picker.component.ts","../../../projects/libs/date-picker/components/date-range-picker/ngx-date-range-picker.component.html","../../../projects/libs/date-picker/directives/ngx-date-range-picker.directive.ts","../../../projects/libs/date-picker/ngx-kit-date-picker.ts"],"sourcesContent":["import { TemplateRef } from '@angular/core';\n\nexport class NgxDatePickerConfig {\n previousButtonTemplate?: TemplateRef<any>;\n nextButtonTemplate?: TemplateRef<any>;\n caretDownIconTemplate?: TemplateRef<any>;\n\n todayButton = true;\n clearButton = true;\n}\n","/**\n * Matches strings that have the form of a valid RFC 3339 string\n * (https://tools.ietf.org/html/rfc3339). Note that the string may not actually be a valid date\n * because the regex will match strings an with out of bounds month, date, etc.\n */\nconst ISO_8601_REGEX =\n /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\n\nexport function deserialize(value: any): Date | null {\n if (typeof value === 'string') {\n if (!value) {\n return null;\n }\n // The `Date` constructor accepts formats other than ISO 8601, so we need to make sure the\n // string is the right format first.\n if (ISO_8601_REGEX.test(value)) {\n let date = new Date(value);\n if (isValid(date)) {\n return date;\n }\n }\n }\n if (isValid(value)) {\n return value;\n } else {\n return null;\n }\n}\n\nexport function isValid(obj: any) {\n return obj instanceof Date && !isNaN(obj.getTime());\n}\n\n/**\n * Checks if two dates are equal.\n * @param first The first date to check.\n * @param second The second date to check.\n * @returns Whether the two dates are equal.\n * Null dates are considered equal to other null dates.\n */\nexport function sameDate(first: Date | null, second: Date | null): boolean {\n if (first && second) {\n let firstValid = isValid(first);\n let secondValid = isValid(second);\n if (firstValid && secondValid) {\n return !compareDate(first, second);\n }\n return firstValid == secondValid;\n }\n return first == second;\n}\n\n/**\n * Compares two dates.\n * @param first The first date to compare.\n * @param second The second date to compare.\n * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,\n * a number greater than 0 if the first date is later.\n */\nexport function compareDate(first?: Date | null, second?: Date | null): number {\n if (!first || !second) return 0;\n return (\n first.getFullYear() - second.getFullYear() ||\n first.getMonth() - second.getMonth() ||\n first.getDate() - second.getDate()\n );\n}\n\n/**\n * Clamp the given date between min and max dates.\n * @param date The date to clamp.\n * @param min The minimum value to allow. If null or omitted no min is enforced.\n * @param max The maximum value to allow. If null or omitted no max is enforced.\n * @returns `min` if `date` is less than `min`, `max` if date is greater than `max`,\n * otherwise `date`.\n */\nexport function clampDate(date?: Date | null, min?: Date | null, max?: Date | null): number {\n if (min && compareDate(date, min) < 0) {\n return -1;\n }\n if (max && compareDate(date, max) > 0) {\n return 1;\n }\n return 0;\n}\n\n//------------------------------------------------------------------------------------------------------------\n/**\n * check only year and month\n */\nexport function compareMonth(first: Date, second: Date): number {\n return first.getFullYear() - second.getFullYear() || first.getMonth() - second.getMonth();\n}\nexport function clampMonth(date: Date, min?: Date | null, max?: Date | null): number {\n if (min && compareMonth(date, min) < 0) {\n return -1;\n }\n if (max && compareMonth(date, max) > 0) {\n return 1;\n }\n return 0;\n}\n//------------------------------------------------------------------------------------------------------------\n/**\n * check only year\n */\nexport function compareYear(first: Date, second: Date): number {\n return first.getFullYear() - second.getFullYear();\n}\nexport function clampYear(date: Date, min?: Date | null, max?: Date | null): number {\n if (min && compareYear(date, min) < 0) {\n return -1;\n }\n if (max && compareYear(date, max) > 0) {\n return 1;\n }\n return 0;\n}\n","// Date and Time Patterns\n\nimport { CalendarDate } from '../adapters/calendar-date';\n\n// yy = 2-digit year; yyyy = full year\n\n// M = digit month; MM = 2-digit month; MMM = short month name; MMMM = full month name\n\n// EEEE = full weekday name; EEE = short weekday name\n\n// d = digit day; dd = 2-digit day\n\n// h = hours am/pm; hh = 2-digit hours am/pm; H = hours; HH = 2-digit hours\n\n// m = minutes; mm = 2-digit minutes; aaa = AM/PM\n\n// s = seconds; ss = 2-digit seconds\n\n// S = miliseconds\n\nexport function genFormatDate(\n date: CalendarDate,\n pattern = 'M/d/yyyy',\n monthNames: string[],\n dayNames: string[],\n): string {\n if (!date) {\n return '';\n }\n\n const day = date.day ?? 0;\n const month = date.month ?? 0;\n const year = date.year ?? 0;\n const hour24 = date.hours ?? 0;\n const minute = date.minutes ?? 0;\n const second = date.seconds ?? 0;\n const ms = date.milliseconds ?? 0;\n const dayOfWeek = date.dayOfWeek ?? 0;\n\n const hour12 = hour24 % 12 || 12;\n\n const tokens: Record<string, string> = {\n yyyy: year.toString(),\n\n yy: year.toString().slice(-2),\n\n MMMM: monthNames[month] ?? '',\n\n MMM: (monthNames[month] ?? '').substring(0, 3),\n\n MM: twoDigitPad(month + 1),\n\n M: (month + 1).toString(),\n\n EEEE: dayNames[dayOfWeek] ?? '',\n\n EEE: (dayNames[dayOfWeek] ?? '').substring(0, 3),\n\n dd: twoDigitPad(day),\n\n d: day.toString(),\n\n HH: twoDigitPad(hour24),\n\n H: hour24.toString(),\n\n hh: twoDigitPad(hour12),\n\n h: hour12.toString(),\n\n mm: twoDigitPad(minute),\n\n m: minute.toString(),\n\n ss: twoDigitPad(second),\n\n s: second.toString(),\n\n S: ms.toString().padStart(3, '0'),\n\n aaa: hour24 < 12 ? 'AM' : 'PM',\n };\n\n return pattern.replace(\n /yyyy|yy|MMMM|MMM|MM|M|EEEE|EEE|dd|d|HH|H|hh|h|mm|m|ss|s|S|aaa/g,\n (token) => tokens[token],\n );\n}\n\nexport function twoDigitPad(num: number): string {\n return num.toString().padStart(2, '0');\n}\n\n// console.log(formatDate(new Date())); // 12/19/2022\n// console.log(formatDate(new Date(), 'dd-MMM-yyyy')); //OP's request 19-Dec-2022\n// console.log(formatDate(new Date(), 'EEEE, MMMM d, yyyy HH:mm:ss.S aaa')); // Monday, December 19, 2022 10:44:35.437 AM\n// console.log(formatDate(new Date(), 'EEE, MMM d, yyyy HH:mm')); //Mon, Dec 19, 2022 10:44\n// console.log(formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss.S')); //2022-12-19 10:44:35.438\n// console.log(formatDate(new Date(), 'M/dd/yyyy h:mmaaa')); //12/19/2022 10:44AM\n","import { genFormatDate } from '../../helpers/date-format.helper';\nimport { DatePickerView } from '../../models/view';\nimport { IDateAdapter } from '../IAdapter';\nimport { CalendarDate } from '../calendar-date';\n\nexport class GregorianAdapter implements IDateAdapter {\n startOfWeek = 0;\n weekStartDay = 0;\n get longMonths() {\n return [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n }\n get narrowDays() {\n return ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n }\n get shortDays() {\n return ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\n }\n get longDays() {\n return ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n }\n\n toLocale(date: Date): CalendarDate {\n const d = date;\n return {\n locale: 'en',\n day: d.getDate(),\n month: d.getMonth(),\n year: d.getFullYear(),\n date: d,\n hours: date.getHours(),\n minutes: date.getMinutes(),\n seconds: date.getSeconds(),\n milliseconds: date.getMilliseconds(),\n dayOfWeek: date.getDay(),\n };\n }\n today() {\n return this.toLocale(new Date());\n }\n\n /**\n * getting first day of month\n */\n firstDayofMonth(year: number, month: number) {\n return new Date(year, month, 1).getDay();\n }\n /**\n * getting last date of month\n */\n lastDateofMonth(year: number, month: number) {\n return new Date(year, month + 1, 0).getDate();\n }\n /**\n * getting last day of month\n */\n lastDayofMonth(year: number, month: number) {\n return new Date(year, month, this.lastDateofMonth(year, month)).getDay();\n }\n /**\n * getting last date of previous month\n */\n lastDateofLastMonth(year: number, month: number) {\n return new Date(year, month, 0).getDate();\n }\n\n // TODO\n /**\n * month start with zero\n * @param date\n * @returns\n */\n getDate(date: CalendarDate): Date {\n let str = date.year + '-' + (date.month ? date.month + 1 : 1) + '-' + (date.day ?? 1);\n str = str\n .split('-')\n .map((i) => {\n return i.length < 2 ? '0' + i : i;\n })\n .join('-');\n if (date.hours || date.minutes || date.seconds || date.milliseconds) {\n str +=\n ' ' +\n (date.hours ?? 0) +\n ':' +\n (date.minutes ?? 0) +\n ':' +\n (date.seconds ?? 0) +\n ':' +\n (date.milliseconds ?? 0);\n }\n return new Date(str);\n }\n\n formatDate(date: CalendarDate, format: string) {\n if (!date) {\n return '';\n }\n // let option: Intl.DateTimeFormatOptions = {\n // year: 'numeric',\n // month: '2-digit',\n // day: '2-digit'\n // };\n // if (format === 'full') {\n // option = {\n // year: 'numeric',\n // month: 'long',\n // day: '2-digit',\n // weekday: 'long'\n // };\n // }\n // return new Date(date).toLocaleDateString('en-US', option);\n return genFormatDate(date, format, this.longMonths, this.longDays);\n }\n getStartOfWeek(date: Date): Date {\n const d = new Date(date);\n d.setHours(0, 0, 0, 0);\n const delta = (d.getDay() - this.weekStartDay + 7) % 7;\n d.setDate(d.getDate() - delta);\n return d;\n }\n\n getEndOfWeek(date: Date): Date {\n const d = this.getStartOfWeek(date);\n d.setDate(d.getDate() + 6);\n d.setHours(23, 59, 59, 999);\n return d;\n }\n\n getStartOf(date: Date | null, t: DatePickerView) {\n if (!date) {\n return date;\n }\n switch (t) {\n case 'year':\n return new Date(date.getFullYear(), 0, 1);\n case 'month':\n return new Date(date.getFullYear(), date.getMonth(), 1);\n case 'day':\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n }\n }\n\n getLastOf(date: Date | null, t: DatePickerView) {\n if (!date) {\n return date;\n }\n switch (t) {\n case 'year':\n return new Date(date.getFullYear(), 12, 0);\n case 'month':\n return new Date(date.getFullYear(), date.getMonth() + 1, 0);\n case 'day':\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n }\n }\n}\n","export namespace Jalali {\r\n /*\r\n Jalaali years starting the 33-year rule.\r\n */\r\n export const breaks = [\r\n -61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394,\r\n 2456, 3178,\r\n ];\r\n\r\n /*\r\n Converts a Gregorian date to Jalaali.\r\n */\r\n export function toJalaali(date: Date) {\r\n // if (Object.prototype.toString.call(date) === '[object Date]') {\r\n let gd = date.getDate();\r\n let gm = date.getMonth() + 1;\r\n let gy = date.getFullYear();\r\n return d2j(g2d(gy, gm, gd));\r\n // }\r\n // return null;\r\n }\r\n\r\n /*\r\n Converts a Jalaali date to Gregorian.\r\n */\r\n export function toGregorian(jy: any, jm: any, jd: any) {\r\n return d2g(j2d(jy, jm, jd));\r\n }\r\n\r\n /*\r\n Checks whether a Jalaali date is valid or not.\r\n */\r\n export function isValidJalaaliDate(jy: number, jm: number, jd: number) {\r\n return (\r\n jy >= -61 && jy <= 3177 && jm >= 1 && jm <= 12 && jd >= 1 && jd <= jalaaliMonthLength(jy, jm)\r\n );\r\n }\r\n\r\n /*\r\n Is this a leap year or not?\r\n */\r\n export function isLeapJalaaliYear(jy: any) {\r\n return jalCalLeap(jy) === 0;\r\n }\r\n\r\n /*\r\n Number of days in a given month in a Jalaali year.\r\n */\r\n export function jalaaliMonthLength(jy: any, jm: number) {\r\n if (jm <= 6) return 31;\r\n if (jm <= 11) return 30;\r\n if (isLeapJalaaliYear(jy)) return 30;\r\n return 29;\r\n }\r\n\r\n /*\r\n This function determines if the Jalaali (Persian) year is\r\n leap (366-day long) or is the common year (365 days)\r\n @param jy Jalaali calendar year (-61 to 3177)\r\n @returns number of years since the last leap year (0 to 4)\r\n */\r\n export function jalCalLeap(jy: number) {\r\n var bl = breaks.length,\r\n jp = breaks[0],\r\n jm,\r\n jump = 0,\r\n leap,\r\n n,\r\n i;\r\n\r\n if (jy < jp || jy >= breaks[bl - 1]) throw new Error('Invalid Jalaali year ' + jy);\r\n\r\n for (i = 1; i < bl; i += 1) {\r\n jm = breaks[i];\r\n jump = jm - jp;\r\n if (jy < jm) break;\r\n jp = jm;\r\n }\r\n n = jy - jp;\r\n\r\n if (jump - n < 6) n = n - jump + div(jump + 4, 33) * 33;\r\n leap = mod(mod(n + 1, 33) - 1, 4);\r\n if (leap === -1) {\r\n leap = 4;\r\n }\r\n\r\n return leap;\r\n }\r\n\r\n /*\r\n This function determines if the Jalaali (Persian) year is\r\n leap (366-day long) or is the common year (365 days), and\r\n finds the day in March (Gregorian calendar) of the first\r\n day of the Jalaali year (jy).\r\n @param jy Jalaali calendar year (-61 to 3177)\r\n @param withoutLeap when don't need leap (true or false) default is false\r\n @return\r\n leap: number of years since the last leap year (0 to 4)\r\n gy: Gregorian year of the beginning of Jalaali year\r\n march: the March day of Farvardin the 1st (1st day of jy)\r\n @see: http://www.astro.uni.torun.pl/~kb/Papers/EMP/PersianC-EMP.htm\r\n @see: http://www.fourmilab.ch/documents/calendar/\r\n */\r\n export function jalCal(jy: number, withoutLeap: any) {\r\n var bl = breaks.length,\r\n gy = jy + 621,\r\n leapJ = -14,\r\n jp = breaks[0],\r\n jm,\r\n jump = 0,\r\n leap,\r\n leapG,\r\n march,\r\n n,\r\n i;\r\n\r\n if (jy < jp || jy >= breaks[bl - 1]) throw new Error('Invalid Jalaali year ' + jy);\r\n\r\n // Find the limiting years for the Jalaali year jy.\r\n for (i = 1; i < bl; i += 1) {\r\n jm = breaks[i];\r\n jump = jm - jp;\r\n if (jy < jm) break;\r\n leapJ = leapJ + div(jump, 33) * 8 + div(mod(jump, 33), 4);\r\n jp = jm;\r\n }\r\n n = jy - jp;\r\n\r\n // Find the number of leap years from AD 621 to the beginning\r\n // of the current Jalaali year in the Persian calendar.\r\n leapJ = leapJ + div(n, 33) * 8 + div(mod(n, 33) + 3, 4);\r\n if (mod(jump, 33) === 4 && jump - n === 4) leapJ += 1;\r\n\r\n // And the same in the Gregorian calendar (until the year gy).\r\n leapG = div(gy, 4) - div((div(gy, 100) + 1) * 3, 4) - 150;\r\n\r\n // Determine the Gregorian date of Farvardin the 1st.\r\n march = 20 + leapJ - leapG;\r\n\r\n // return with gy and march when we don't need leap\r\n if (withoutLeap) return { gy: gy, march: march };\r\n\r\n // Find how many years have passed since the last leap year.\r\n if (jump - n < 6) n = n - jump + div(jump + 4, 33) * 33;\r\n leap = mod(mod(n + 1, 33) - 1, 4);\r\n if (leap === -1) {\r\n leap = 4;\r\n }\r\n\r\n return {\r\n leap: leap,\r\n gy: gy,\r\n march: march,\r\n };\r\n }\r\n\r\n /*\r\n Converts a date of the Jalaali calendar to the Julian Day number.\r\n @param jy Jalaali year (1 to 3100)\r\n @param jm Jalaali month (1 to 12)\r\n @param jd Jalaali day (1 to 29/31)\r\n @return Julian Day number\r\n */\r\n export function j2d(jy: any, jm: number, jd: number) {\r\n var r = jalCal(jy, true);\r\n return g2d(r.gy, 3, r.march) + (jm - 1) * 31 - div(jm, 7) * (jm - 7) + jd - 1;\r\n }\r\n\r\n /*\r\n Converts the Julian Day number to a date in the Jalaali calendar.\r\n @param jdn Julian Day number\r\n @return\r\n jy: Jalaali year (1 to 3100)\r\n jm: Jalaali month (1 to 12)\r\n jd: Jalaali day (1 to 29/31)\r\n */\r\n export function d2j(jdn: number) {\r\n var gy = d2g(jdn).gy, // Calculate Gregorian year (gy).\r\n jy = gy - 621,\r\n r = jalCal(jy, false),\r\n jdn1f = g2d(gy, 3, r.march),\r\n jd,\r\n jm,\r\n k;\r\n\r\n // Find number of days that passed since 1 Farvardin.\r\n k = jdn - jdn1f;\r\n if (k >= 0) {\r\n if (k <= 185) {\r\n // The first 6 months.\r\n jm = 1 + div(k, 31);\r\n jd = mod(k, 31) + 1;\r\n return {\r\n jy: jy,\r\n jm: jm,\r\n jd: jd,\r\n };\r\n } else {\r\n // The remaining months.\r\n k -= 186;\r\n }\r\n } else {\r\n // Previous Jalaali year.\r\n jy -= 1;\r\n k += 179;\r\n if (r.leap === 1) k += 1;\r\n }\r\n jm = 7 + div(k, 30);\r\n jd = mod(k, 30) + 1;\r\n return {\r\n jy: jy,\r\n jm: jm,\r\n jd: jd,\r\n };\r\n }\r\n\r\n /*\r\n Calculates the Julian Day number from Gregorian or Julian\r\n calendar dates. This integer number corresponds to the noon of\r\n the date (i.e. 12 hours of Universal Time).\r\n The procedure was tested to be good since 1 March, -100100 (of both\r\n calendars) up to a few million years into the future.\r\n @param gy Calendar year (years BC numbered 0, -1, -2, ...)\r\n @param gm Calendar month (1 to 12)\r\n @param gd Calendar day of the month (1 to 28/29/30/31)\r\n @return Julian Day number\r\n */\r\n export function g2d(gy: number, gm: number, gd: any) {\r\n var d =\r\n div((gy + div(gm - 8, 6) + 100100) * 1461, 4) +\r\n div(153 * mod(gm + 9, 12) + 2, 5) +\r\n gd -\r\n 34840408;\r\n d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752;\r\n return d;\r\n }\r\n\r\n /*\r\n Calculates Gregorian and Julian calendar dates from the Julian Day number\r\n (jdn) for the period since jdn=-34839655 (i.e. the year -100100 of both\r\n calendars) to some millions years ahead of the present.\r\n @param jdn Julian Day number\r\n @return\r\n gy: Calendar year (years BC numbered 0, -1, -2, ...)\r\n gm: Calendar month (1 to 12)\r\n gd: Calendar day of the month M (1 to 28/29/30/31)\r\n */\r\n export function d2g(jdn: number) {\r\n var j, i, gd, gm, gy;\r\n j = 4 * jdn + 139361631;\r\n j = j + div(div(4 * jdn + 183187720, 146097) * 3, 4) * 4 - 3908;\r\n i = div(mod(j, 1461), 4) * 5 + 308;\r\n gd = div(mod(i, 153), 5) + 1;\r\n gm = mod(div(i, 153), 12) + 1;\r\n gy = div(j, 1461) - 100100 + div(8 - gm, 6);\r\n return {\r\n gy: gy,\r\n gm: gm,\r\n gd: gd,\r\n };\r\n }\r\n\r\n /**\r\n * Return Saturday and Friday day of current week(week start in Saturday)\r\n * @param {number} jy jalaali year\r\n * @param {number} jm jalaali month\r\n * @param {number} jd jalaali day\r\n * @returns Saturday and Friday of current week\r\n */\r\n export function jalaaliWeek(jy: any, jm: any, jd: number) {\r\n var dayOfWeek = jalaaliToDateObject(jy, jm, jd).getDay();\r\n\r\n var startDayDifference = dayOfWeek == 6 ? 0 : -(dayOfWeek + 1);\r\n var endDayDifference = 6 + startDayDifference;\r\n\r\n return {\r\n saturday: d2j(j2d(jy, jm, jd + startDayDifference)),\r\n friday: d2j(j2d(jy, jm, jd + endDayDifference)),\r\n };\r\n }\r\n\r\n /**\r\n * Convert Jalaali calendar dates to javascript Date object\r\n * @param {number} jy jalaali year\r\n * @param {number} jm jalaali month\r\n * @param {number} jd jalaali day\r\n * @param {number} [h] hours\r\n * @param {number} [m] minutes\r\n * @param {number} [s] seconds\r\n * @param {number} [ms] milliseconds\r\n * @returns Date object of the jalaali calendar dates\r\n */\r\n export function jalaaliToDateObject(\r\n jy: any,\r\n jm: any,\r\n jd: any,\r\n h?: any,\r\n m?: any,\r\n s?: any,\r\n ms?: any,\r\n ) {\r\n var gregorianCalenderDate = toGregorian(jy, jm, jd);\r\n\r\n return new Date(\r\n gregorianCalenderDate.gy,\r\n gregorianCalenderDate.gm - 1,\r\n gregorianCalenderDate.gd,\r\n h || 3,\r\n m || 30,\r\n s || 0,\r\n ms || 0,\r\n );\r\n }\r\n\r\n /*\r\n Utility helper functions.\r\n */\r\n\r\n export function div(a: number, b: number) {\r\n return ~~(a / b);\r\n }\r\n\r\n export function mod(a: number, b: number) {\r\n return a - ~~(a / b) * b;\r\n }\r\n}\r\n","import { genFormatDate } from '../../helpers/date-format.helper';\nimport { Jalali } from '../converters/jalali-converter.helper';\nimport { DatePickerView } from '../../models/view';\nimport { IDateAdapter } from '../IAdapter';\nimport { CalendarDate } from '../calendar-date';\n\nexport class JalaliAdapter implements IDateAdapter {\n // shanbeh\n startOfWeek = 1;\n weekStartDay = 6;\n\n dariMonth = false;\n\n get longMonths() {\n return [\n 'فروردین',\n 'اردیبهشت',\n 'خرداد',\n 'تیر',\n 'مرداد',\n 'شهریور',\n 'مهر',\n 'آبان',\n 'آذر',\n 'دی',\n 'بهمن',\n 'اسفند',\n ];\n }\n get narrowDays() {\n return ['شنبه', 'یک', 'دو', 'سه', 'چهار', 'پنج', 'جمعه'];\n }\n get shortDays() {\n return ['ش', 'ی', 'د', 'س', 'چ', 'پ', 'ج'];\n }\n get longDays() {\n return ['شنبه', 'یک شنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنج شنبه', 'جمعه'];\n }\n\n constructor() {}\n\n toLocale(date: Date): CalendarDate {\n let jd = Jalali.toJalaali(date);\n return {\n locale: 'fa',\n day: jd.jd,\n month: jd.jm - 1,\n year: jd.jy,\n date,\n hours: date.getHours(),\n minutes: date.getMinutes(),\n seconds: date.getSeconds(),\n milliseconds: date.getMilliseconds(),\n dayOfWeek: (date.getDay() + this.startOfWeek) % 7,\n };\n }\n today() {\n return this.toLocale(new Date());\n }\n /**\n * getting first day of month\n */\n firstDayofMonth(year: number, month: number) {\n let gDate = Jalali.jalaaliToDateObject(year, month + 1, 1);\n let day = gDate.getDay() + this.startOfWeek;\n return day > 6 ? 0 : day;\n }\n /**\n * getting last date of month\n */\n lastDateofMonth(year: number, month: number) {\n const monthLengths = [\n 31,\n 31,\n 31,\n 31,\n 31,\n 31,\n 30,\n 30,\n 30,\n 30,\n 30,\n Jalali.isLeapJalaaliYear(year) ? 30 : 29,\n ];\n return monthLengths[month];\n }\n /**\n * getting last day of month\n */\n lastDayofMonth(year: number, month: number) {\n let gDate = Jalali.jalaaliToDateObject(year, month + 1, this.lastDateofMonth(year, month));\n let day = gDate.getDay() + this.startOfWeek;\n return day > 6 ? 0 : day;\n }\n /**\n * getting last date of previous month\n */\n lastDateofLastMonth(year: number, month: number) {\n month--;\n if (month < 0) {\n month = 11;\n year--;\n }\n const monthLengths = [\n 31,\n 31,\n 31,\n 31,\n 31,\n 31,\n 30,\n 30,\n 30,\n 30,\n 30,\n Jalali.isLeapJalaaliYear(year) ? 30 : 29,\n ];\n return monthLengths[month];\n }\n /**\n * تبدیل تاریخ جلالی به میلادی برای نمایش\n * month start with zero\n * @param date\n * @returns\n */\n getDate(date: CalendarDate): Date {\n let d = Jalali.jalaaliToDateObject(\n date.year,\n date.month ? date.month + 1 : 1,\n date.day ?? 1,\n date.hours ?? 0,\n date.minutes ?? 0,\n date.seconds ?? 0,\n date.milliseconds ?? 0,\n );\n\n // {\n // locale: 'fa',\n // year: d.getFullYear(),\n // month: d.getMonth(),\n // day: d.getDate(),\n // hours: d.getHours(),\n // minutes: d.getMinutes(),\n // seconds: d.getSeconds(),\n // milliseconds: d.getMilliseconds(),\n // dayOfWeek: d.getDay() + this.startOfWeek,\n // }\n return d;\n }\n\n formatDate(date: CalendarDate, format: string) {\n if (!date) {\n return '';\n }\n // let option: Intl.DateTimeFormatOptions = {\n // year: 'numeric',\n // month: '2-digit',\n // day: '2-digit'\n // };\n // if (format === 'full') {\n // option = {\n // year: 'numeric',\n // month: 'long',\n // day: '2-digit',\n // weekday: 'long'\n // };\n // }\n // return new Date(date).toLocaleDateString('fa-IR-u-nu-latn', option);\n return genFormatDate(date, format, this.longMonths, this.longDays);\n }\n // _______________________________________________________________________________________\n\n getStartOfWeek(date: Date): Date {\n const d = new Date(date);\n d.setHours(0, 0, 0, 0);\n const delta = (d.getDay() - this.weekStartDay + 7) % 7;\n d.setDate(d.getDate() - delta);\n return d;\n }\n\n getEndOfWeek(date: Date): Date {\n const d = this.getStartOfWeek(date);\n d.setDate(d.getDate() + 6);\n d.setHours(23, 59, 59, 999);\n return d;\n }\n\n getStartOf(date: Date | null, t: DatePickerView) {\n if (!date) {\n return date;\n }\n let jDate = Jalali.toJalaali(date);\n switch (t) {\n case 'year':\n return Jalali.jalaaliToDateObject(jDate.jy, 1, 1);\n case 'month':\n // console.log(jDate.jy, '-', jDate.jm, '-', 1);\n return Jalali.jalaaliToDateObject(jDate.jy, jDate.jm, 1);\n case 'day':\n return Jalali.jalaaliToDateObject(jDate.jy, jDate.jm, jDate.jd);\n }\n }\n\n getLastOf(date: Date | null, t: DatePickerView) {\n if (!date) {\n return date;\n }\n let jDate = Jalali.toJalaali(date);\n switch (t) {\n case 'year':\n return Jalali.jalaaliToDateObject(jDate.jy, 12, 0);\n case 'month':\n // console.log(jDate.jy, '-', jDate.jm, '-', this.lastDateofMonth(jDate.jy, jDate.jm));\n return Jalali.jalaaliToDateObject(\n jDate.jy,\n jDate.jm,\n this.lastDateofMonth(jDate.jy, jDate.jm),\n );\n case 'day':\n return Jalali.jalaaliToDateObject(jDate.jy, jDate.jm, jDate.jd);\n }\n }\n}\n","/**\r\n * منطق تبدیل تاریخ هجری قمری (Umm al-Qura) <-> میلادی\r\n * جدا از آداپتر، تا قابل تست و استفادهی مستقل باشد.\r\n */\r\nconst HIJRI_LOCALE = 'ar-SA-u-ca-islamic-umalqura';\r\nconst ONE_DAY_MS = 86400000;\r\n\r\nexport namespace HijriConverter {\r\n export interface HijriDate {\r\n day: number;\r\n month: number; // صفر-پایه: محرم = 0\r\n year: number;\r\n }\r\n\r\n const parser = new Intl.DateTimeFormat(HIJRI_LOCALE, {\r\n day: 'numeric',\r\n month: 'numeric',\r\n year: 'numeric',\r\n });\r\n\r\n /** تبدیل اعداد عربی/فارسی به لاتین */\r\n function toLatinDigits(str: string): string {\r\n return str\r\n .replace(/[٠١٢٣٤٥٦٧٨٩]/g, (d) => '0123456789'['٠١٢٣٤٥٦٧٨٩'.indexOf(d)])\r\n .replace(/[۰۱۲۳۴۵۶۷۸۹]/g, (d) => '0123456789'['۰۱۲۳۴۵۶۷۸۹'.indexOf(d)]);\r\n }\r\n\r\n /** استخراج تاریخ هجری از یک Date میلادی */\r\n export function parse(date: Date): HijriDate {\r\n const parts = parser.formatToParts(date);\r\n return {\r\n day: parseInt(toLatinDigits(parts.find((p) => p.type === 'day')!.value), 10),\r\n month: parseInt(toLatinDigits(parts.find((p) => p.type === 'month')!.value), 10) - 1,\r\n year: parseInt(toLatinDigits(parts.find((p) => p.type === 'year')!.value), 10),\r\n };\r\n }\r\n\r\n /**\r\n * پیدا کردن آخرین «روز اول ماه هجری» که در همان روز seed یا\r\n * قبل از آن باشد (جستجوی فقط روبهعقب، حداکثر 35 روز).\r\n *\r\n * نکتهی مهم: این جستجو باید فقط روبهعقب باشد، نه «نزدیکترین\r\n * در هر دو جهت». جستجوی دوجهته باعث میشد وقتی الگوریتم میخواهد\r\n * یک قدم به عقب برود (-5 روز)، چون فاصلهی جلو هنوز کمتر بود،\r\n * دوباره به همان ماهِ قبلی برگردد و لوپ هیچوقت واقعاً عقب نرود.\r\n */\r\n function firstOfMonthAtOrBefore(seed: Date): Date {\r\n for (let i = 0; i <= 35; i++) {\r\n const test = new Date(seed);\r\n test.setDate(test.getDate() - i);\r\n if (parse(test).day === 1) {\r\n return test;\r\n }\r\n }\r\n // عملاً نباید به اینجا برسیم\r\n return seed;\r\n }\r\n\r\n /**\r\n * پیدا کردن JS Date معادل «روز اول» یک ماه هجری دلخواه.\r\n *\r\n * بهجای تکیه به یک فرمولِ تخمینیِ سال میلادی (که میتواند تا یک\r\n * سال کامل خطا داشته باشد و جستجوی محدودِ ±35 روزه را شکست بدهد —\r\n * همان باگی که باعث میشد lastDateofMonth عدد ۳۱ بهجای ۲۹ بدهد)،\r\n * از «امروز» -که همیشه با Intl بهدرستی قابلخواندن است- بهعنوان\r\n * لنگر شروع میکنیم و ماهبهماه جلو/عقب میرویم. هر قدم (چه\r\n * `+30` چه `-5`) probe را به داخلِ بدنهی ماهِ هدف میبرد (نه قبل\r\n * از آن)، پس جستجوی «آخرین day1 در همان روز یا قبلتر» همیشه\r\n * دقیقاً day1 همان ماه هدف را پیدا میکند.\r\n */\r\n // نتیجهی firstDayOfMonth فقط تابعی از (year, month) هست و در طول عمر\r\n // صفحه هیچوقت عوض نمیشه، پس کشکردنش کاملاً امنه. اهمیتش اینجاست که\r\n // renderCalendar (در ngx-date-picker-base.component) برای هر سلولِ روزِ\r\n // نمایشدادهشده در گرید ماه (~۳۰ تا ۴۲ تا) یکبار adapter.getDate() صدا\r\n // میزنه، و هرکدوم به toGregorian() → firstDayOfMonth() ختم میشه — یعنی\r\n // بدون کش، این جستوجوی نسبتاً سنگین (که خودش میتونه تا حدود ۱۲۰۰ بار\r\n // تکرار داخلی و هر بار تا ۳۵ فراخوانی Intl.DateTimeFormat داشته باشه) به\r\n // ازای هر بار رندر یک ماه، دهها بار برای همون (year, month) تکرار میشد —\r\n // مخصوصاً وقتی کاربر به سالهای دور از «امروز» ناوبری میکنه، محسوس کند بود.\r\n const firstDayOfMonthCache = new Map<string, Date>();\r\n\r\n export function firstDayOfMonth(year: number, month: number): Date {\r\n const cacheKey = `${year}-${month}`;\r\n const cached = firstDayOfMonthCache.get(cacheKey);\r\n if (cached) return new Date(cached);\r\n\r\n let anchorDate = firstOfMonthAtOrBefore(new Date());\r\n let h = parse(anchorDate);\r\n\r\n // سقف ایمنی برای جلوگیری از لوپ بینهایت (≈ 100 سال هجری)\r\n let guard = 0;\r\n while ((h.year !== year || h.month !== month) && guard < 1200) {\r\n const targetIsLater = year > h.year || (year === h.year && month > h.month);\r\n const probe = new Date(anchorDate);\r\n // طول هر ماه هجری 29 یا 30 روز است؛ +30 همیشه به داخل ماه\r\n // بعد میرسد و -5 همیشه داخل بدنهی ماه قبل میماند.\r\n probe.setDate(probe.getDate() + (targetIsLater ? 30 : -5));\r\n anchorDate = firstOfMonthAtOrBefore(probe);\r\n h = parse(anchorDate);\r\n guard++;\r\n }\r\n firstDayOfMonthCache.set(cacheKey, anchorDate);\r\n return anchorDate;\r\n }\r\n\r\n /** تبدیل سال/ماه/روز هجری به Date میلادی */\r\n export function toGregorian(year: number, month: number, day: number): Date {\r\n const first = firstDayOfMonth(year, month);\r\n const result = new Date(first);\r\n result.setDate(result.getDate() + (day - 1));\r\n return result;\r\n }\r\n\r\n /**\r\n * تعداد واقعیِ روزهای یک ماه هجری.\r\n *\r\n * نکتهی مهم (باگ قبلی): نباید از `Date.getDate()` روی «روز قبل از\r\n * شروع ماه بعد» استفاده کرد، چون آن عدد، شمارهی روز در تقویم\r\n * میلادیِ همان Date است، نه طول ماه هجری.\r\n * روش درست: فاصلهی روزها بین «اول این ماه» و «اول ماه بعد».\r\n */\r\n export function daysInMonth(year: number, month: number): number {\r\n const nextMonth = (month + 1) % 12;\r\n const nextYear = month === 11 ? year + 1 : year;\r\n\r\n const first = firstDayOfMonth(year, month);\r\n const nextFirst = firstDayOfMonth(nextYear, nextMonth);\r\n\r\n const diffMs = nextFirst.getTime() - first.getTime();\r\n return Math.round(diffMs / ONE_DAY_MS);\r\n }\r\n}\r\n","import { DatePickerView } from '../../models/view';\nimport { CalendarDate } from '../calendar-date';\nimport { HijriConverter } from '../converters/hijri-converter.helper';\nimport { IDateAdapter } from '../IAdapter';\n\n/**\n * تقویم هجری قمری - Umm al-Qura (تقویم رسمی عربستان)\n * نیاز به ICU ≥ 56 دارد (تمام مرورگرهای مدرن)\n *\n * منطق تبدیل تاریخ در HijriConverter (helpers/hijri-converter.helper.ts) است.\n */\nexport class HijriAdapter implements IDateAdapter {\n /** یکشنبه = 0 (همخوان با تقویم میلادی برای سادگی) */\n startOfWeek = 0;\n weekStartDay = 0;\n\n get longMonths(): string[] {\n return [\n 'محرم',\n 'صفر',\n 'ربيع الأول',\n 'ربيع الثاني',\n 'جمادى الأولى',\n 'جمادى الثانية',\n 'رجب',\n 'شعبان',\n 'رمضان',\n 'شوال',\n 'ذو القعدة',\n 'ذو الحجة',\n ];\n }\n\n get narrowDays(): string[] {\n return ['أحد', 'إثن', 'ثلا', 'أرب', 'خمي', 'جمع', 'سبت'];\n }\n\n get shortDays(): string[] {\n return ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'];\n }\n\n get longDays(): string[] {\n return ['الأحد', 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'];\n }\n\n toLocale(date: Date): CalendarDate {\n const h = HijriConverter.parse(date);\n return {\n locale: 'ar',\n day: h.day,\n month: h.month,\n year: h.year,\n date,\n hours: date.getHours(),\n minutes: date.getMinutes(),\n seconds: date.getSeconds(),\n milliseconds: date.getMilliseconds(),\n dayOfWeek: date.getDay(),\n };\n }\n\n today() {\n return this.toLocale(new Date());\n }\n\n firstDayofMonth(year: number, month: number): number {\n return HijriConverter.firstDayOfMonth(year, month).getDay();\n }\n\n lastDateofMonth(year: number, month: number): number {\n return HijriConverter.daysInMonth(year, month);\n }\n\n lastDayofMonth(year: number, month: number): number {\n const lastDate = this.lastDateofMonth(year, month);\n return HijriConverter.toGregorian(year, month, lastDate).getDay();\n }\n\n lastDateofLastMonth(year: number, month: number): number {\n const prevMonth = month === 0 ? 11 : month - 1;\n const prevYear = month === 0 ? year - 1 : year;\n return this.lastDateofMonth(prevYear, prevMonth);\n }\n\n /** month start with zero */\n getDate(date: CalendarDate): Date {\n const jsDate = HijriConverter.toGregorian(date.year, date.month ?? 0, date.day ?? 1);\n if (date.hours !== undefined) jsDate.setHours(date.hours);\n if (date.minutes !== undefined) jsDate.setMinutes(date.minutes);\n if (date.seconds !== undefined) jsDate.setSeconds(date.seconds);\n if (date.milliseconds !== undefined) jsDate.setMilliseconds(date.milliseconds);\n return jsDate;\n }\n\n formatDate(date: CalendarDate, format: string): string | null {\n if (!date) return null;\n\n const jsDate = this.getDate(date);\n const options: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n };\n\n if (format === 'full') {\n options.weekday = 'long';\n }\n\n return new Intl.DateTimeFormat('ar-SA-u-ca-islamic-umalqura', options).format(jsDate);\n }\n\n getStartOfWeek(date: Date): Date {\n const d = new Date(date);\n d.setHours(0, 0, 0, 0);\n const delta = (d.getDay() - this.weekStartDay + 7) % 7;\n d.setDate(d.getDate() - delta);\n return d;\n }\n\n getEndOfWeek(date: Date): Date {\n const d = this.getStartOfWeek(date);\n d.setDate(d.getDate() + 6);\n d.setHours(23, 59, 59, 999);\n return d;\n }\n\n getStartOf(date: Date | null, t: DatePickerView): Date | null {\n if (!date) return date;\n const h = HijriConverter.parse(date);\n\n switch (t) {\n case 'year':\n return HijriConverter.toGregorian(h.year, 0, 1);\n case 'month':\n return HijriConverter.toGregorian(h.year, h.month, 1);\n case 'day':\n return HijriConverter.toGregorian(h.year, h.month, h.day);\n }\n }\n\n getLastOf(date: Date | null, t: DatePickerView): Date | null {\n if (!date) return date;\n const h = HijriConverter.parse(date);\n\n switch (t) {\n case 'year':\n return HijriConverter.toGregorian(h.year, 11, HijriConverter.daysInMonth(h.year, 11));\n case 'month':\n return HijriConverter.toGregorian(\n h.year,\n h.month,\n HijriConverter.daysInMonth(h.year, h.month),\n );\n case 'day':\n return HijriConverter.toGregorian(h.year, h.month, h.day);\n }\n }\n}\n","/**\r\n * منطق تبدیل تاریخ سنتی چینی (农历) <-> میلادی\r\n * جدا از آداپتر، تا قابل تست و استفادهی مستقل باشد.\r\n *\r\n * ⚠️ محدودیت شناختهشده: ماههای کبیسه (闰)\r\n * در تقویم چینی، یک ماه کبیسه همان شمارهی ماه عادیِ قبل از خودش را\r\n * دارد (مثلاً «闰七月» هم month=6 میشود، دقیقاً مثل «七月» عادی).\r\n * چون CalendarDate در این پروژه فیلدی برای isLeapMonth ندارد، این\r\n * پیادهسازی -مثل نسخهی قبلی- در سالهای کبیسه، ماه کبیسه را به ماه\r\n * عادیِ همنام نگاشت میکند و کاربر نمیتواند مستقیماً وارد ماه کبیسه\r\n * شود. این یک محدودیتِ آگاهانه است، نه باگ سهوی؛ برای رفع کامل باید\r\n * فیلد isLeapMonth به CalendarDate اضافه و در همهجا (toLocale,\r\n */\r\nconst CHINESE_LOCALE = 'zh-CN-u-ca-chinese';\r\n\r\n/**\r\n * نام ماه چینی -> شماره (صفر-پایه)\r\n * ماههای عادی: 正月(0) .. 腊月(11)\r\n *\r\n * نکتهی مهمِ این باگ: Intl برای ماه یازدهم رشتهی «十一月» را\r\n * برمیگرداند، نه «冬月» (که فقط یک نام جایگزینِ ادبی/سنتی است و\r\n * توسط Intl.DateTimeFormat تولید نمیشود). نسخهی قبلی این نقشه\r\n * فقط «冬月» را داشت، پس برای هر آذر/دیماهی mismatch رخ میداد و\r\n * شمارهی ماه بهاشتباه با مقدار پیشفرض `?? 0` صفر میشد. همین\r\n * باعث میشد طول ماههای اطراف آن بازه کاملاً غلط محاسبه شود.\r\n *\r\n * ماههای کبیسه روی همان شمارهی ماه عادیِ همنام نگاشت میشوند\r\n * (به توضیح بالای فایل مراجعه کنید).\r\n */\r\nconst CHINESE_MONTH_MAP: Record<string, number> = {\r\n 正月: 0,\r\n 二月: 1,\r\n 三月: 2,\r\n 四月: 3,\r\n 五月: 4,\r\n 六月: 5,\r\n 七月: 6,\r\n 八月: 7,\r\n 九月: 8,\r\n 十月: 9,\r\n 十一月: 10,\r\n 腊月: 11,\r\n 闰正月: 0,\r\n 闰二月: 1,\r\n 闰三月: 2,\r\n 闰四月: 3,\r\n 闰五月: 4,\r\n 闰六月: 5,\r\n 闰七月: 6,\r\n 闰八月: 7,\r\n 闰九月: 8,\r\n 闰十月: 9,\r\n 闰十一月: 10,\r\n 闰腊月: 11,\r\n};\r\n\r\nexport namespace ChineseConverter {\r\n export interface ChineseDate {\r\n day: number;\r\n month: number; // صفر-پایه\r\n year: number;\r\n isLeapMonth: boolean;\r\n }\r\n\r\n const parser = new Intl.DateTimeFormat(CHINESE_LOCALE, {\r\n day: 'numeric',\r\n month: 'numeric',\r\n year: 'numeric',\r\n });\r\n\r\n /** تبدیل ارقام تمامعرض/فولویدث به لاتین */\r\n function toLatinDigits(str: string): string {\r\n return str.replace(/[0-9]/g, (d) => String.fromCharCode(d.charCodeAt(0) - 0xfee0));\r\n }\r\n\r\n /** استخراج تاریخ چینی از یک Date میلادی - با تشخیص ماه کبیسه */\r\n export function parse(date: Date): ChineseDate {\r\n const parts = parser.formatToParts(date);\r\n\r\n const dayPart = parts.find((p) => p.type === 'day')!;\r\n const monthPart = parts.find((p) => p.type === 'month')!;\r\n const yearPart = parts.find((p) => p.type === 'year' || p.type === ('relatedYear' as any))!;\r\n\r\n const day = parseInt(toLatinDigits(dayPart.value), 10);\r\n const isLeapMonth = monthPart.value.includes('闰');\r\n const month = CHINESE_MONTH_MAP[monthPart.value] ?? 0;\r\n const year = parseInt(toLatinDigits(yearPart.value), 10);\r\n\r\n return { day, month, year, isLeapMonth };\r\n }\r\n\r\n /**\r\n * پیدا کردن آخرین «روز اول ماهِ چینیِ غیرکبیسه» که در همان روز\r\n * seed یا قبل از آن باشد (جستجوی فقط روبهعقب، حداکثر 45 روز).\r\n *\r\n * نکتهی مهم: این جستجو باید فقط روبهعقب باشد، نه «نزدیکترین\r\n * در هر دو جهت». نسخهی قبلی نزدیکترین day1 را در هر دو جهت\r\n * برمیگرداند که باعث میشد وقتی الگوریتم میخواهد یک قدم به\r\n * عقب برود (-5 روز)، چون فاصلهی جلو هنوز کمتر بود، دوباره به\r\n * همان ماهِ قبلی برگردد و لوپ هیچوقت واقعاً عقب نرود (لوپ\r\n * بینهایت/گیر کردن روی یک ماه ثابت).\r\n */\r\n function firstOfMonthAtOrBefore(seed: Date): Date {\r\n for (let i = 0; i <= 65; i++) {\r\n const test = new Date(seed);\r\n test.setDate(test.getDate() - i);\r\n const c = parse(test);\r\n if (c.day === 1 && !c.isLeapMonth) {\r\n return test;\r\n }\r\n }\r\n // عملاً نباید به اینجا برسیم\r\n return seed;\r\n }\r\n\r\n /**\r\n * پیدا کردن JS Date معادل «روز اول» یک ماه چینیِ غیرکبیسهی دلخواه.\r\n *\r\n * نسخهی قبلی فرض میکرد فیلد `year` بازگشتی از Intl برای\r\n * `zh-CN-u-ca-chinese` همان شمارهی سال در دورهی ۶۰ساله است\r\n * (epoch هوانگدی)، در حالیکه در عمل همان سال میلادی برمیگردد\r\n * (مثلاً 2026). با فرمول `year - 2697` این عدد منفی و کاملاً\r\n * نادرست میشد (مثلاً -671) و جستجوی ±45 روزه همیشه شکست\r\n * میخورد و روی fallback (یک تاریخ کاملاً غلط) میافتاد —\r\n * همان باگی که باعث میشد طول ماه فقط چند روز نمایش داده شود.\r\n *\r\n * راهحل: مثل آداپتر هجری، از «امروز» -که همیشه با Intl بهدرستی\r\n * قابلخواندن است- بهعنوان لنگر شروع میکنیم و ماهبهماه\r\n * جلو/عقب میرویم.\r\n *\r\n * نکتهی اضافیِ مخصوص تقویم چینی: بر خلاف هجری، اینجا «ماه\r\n * کبیسه» هم وجود دارد. وقتی دقیقاً بین دو ماهِ عادیِ متوالی یک\r\n * ماه کبیسه فاصله افتاده باشد (مثلاً 五月 عادی -> 闰五月 -> 五月\r\n * بعدی، یعنی واقعاً ماه پنجم بعدی)، فاصلهی واقعی حدود 59 روز\r\n * میشود نه ~30 روز، و یک قدمِ ثابتِ `+30` فقط وسطِ همان ماه\r\n * کبیسه میافتد؛ چون جستجوی عقب ماه کبیسه را نادیده میگیرد،\r\n * به همان ماهِ عادیِ قبلی برمیگردد و پیشرفتی حاصل نمیشود.\r\n * برای همین، اگر یک قدم هیچ پیشرفتی نداشت (anchor عوض نشد)،\r\n * قدم را بزرگتر میکنیم تا از روی ماه کبیسهی احتمالی بپرد.\r\n */\r\n // نتیجهی firstDayOfMonth فقط تابعی از (year, month) هست، پس کشکردنش\r\n // امنه. دلیل اهمیتش دقیقاً مثل نسخهی هجریه: renderCalendar برای هر\r\n // سلولِ روزِ گرید ماه یکبار adapter.getDate() صدا میزنه که به\r\n // toGregorian() → firstDayOfMonth() ختم میشه؛ بدون کش، این جستوجوی\r\n // نسبتاً سنگین (که با وجود ماههای کبیسه میتونه چند برابر هجری هم سنگینتر\r\n // باشه) به ازای هر رندر ماه، دهها بار برای همون (year, month) تکرار میشد.\r\n const firstDayOfMonthCache = new Map<string, Date>();\r\n\r\n export function firstDayOfMonth(year: number, month: number): Date {\r\n const cacheKey = `${year}-${month}`;\r\n const cached = firstDayOfMonthCache.get(cacheKey);\r\n if (cached) return new Date(cached);\r\n\r\n let anchorDate = firstOfMonthAtOrBefore(new Date());\r\n let c = parse(anchorDate);\r\n\r\n // سقف ایمنی برای جلوگیری از لوپ بینهایت (≈ 100 سال چینی)\r\n let guard = 0;\r\n while ((c.year !== year || c.month !== month) && guard < 1300) {\r\n const targetIsLater = year > c.year || (year === c.year && month > c.month);\r\n\r\n let newAnchor = anchorDate;\r\n // طول هر ماه عادی 29 یا 30 روز است؛ اما اگر بینِ این ماه و\r\n // ماهِ بعد/قبل یک ماه کبیسه فاصله افتاده باشد، باید قدم را\r\n // بزرگتر کنیم (به اندازهی حداکثر یک ماهِ کبیسهی اضافه).\r\n for (const step of targetIsLater ? [30, 60, 90] : [-5, -35, -65]) {\r\n const probe = new Date(anchorDate);\r\n probe.setDate(probe.getDate() + step);\r\n newAnchor = firstOfMonthAtOrBefore(probe);\r\n if (newAnchor.getTime() !== anchorDate.getTime()) {\r\n break;\r\n }\r\n }\r\n\r\n anchorDate = newAnchor;\r\n c = parse(anchorDate);\r\n guard++;\r\n }\r\n firstDayOfMonthCache.set(cacheKey, anchorDate);\r\n return anchorDate;\r\n }\r\n\r\n /** تبدیل سال/ماه/روز چینی به Date میلادی */\r\n export function toGregorian(year: number, month: number, day: number): Date {\r\n const first = firstDayOfMonth(year, month);\r\n const result = new Date(first);\r\n result.setDate(result.getDate() + (day - 1));\r\n return result;\r\n }\r\n\r\n /**\r\n * تعداد واقعیِ روزهای یک ماه چینی (۲۹ یا ۳۰).\r\n *\r\n * نکته: بر خلاف نسخهی هجری، اینجا از شمارهی روزِ خروجیِ خودِ\r\n * تقویم چینی (`parse(test).day`) استفاده میکنیم نه از\r\n * `Date.getDate()` میلادی، چون آن مقدار به اشتباه طول ماه را\r\n * بر اساس تقویم میلادی محاسبه میکرد.\r\n */\r\n const daysInMonthCache = new Map<string, number>();\r\n\r\n export function daysInMonth(year: number, month: number): number {\r\n const cacheKey = `${year}-${month}`;\r\n const cached = daysInMonthCache.get(cacheKey);\r\n if (cached !== undefined) return cached;\r\n\r\n const first = firstDayOfMonth(year, month);\r\n\r\n for (let i = 1; i <= 31; i++) {\r\n const test = new Date(first);\r\n test.setDate(test.getDate() + i);\r\n const c = parse(test);\r\n if (c.year !== year || c.month !== month || c.isLeapMonth) {\r\n const last = new Date(test);\r\n last.setDate(last.getDate() - 1);\r\n const result = parse(last).day;\r\n daysInMonthCache.set(cacheKey, result);\r\n return result;\r\n }\r\n }\r\n return 29; // fallback ایمن\r\n }\r\n}\r\n","import { DatePickerView } from '../../models/view';\nimport { CalendarDate } from '../calendar-date';\nimport { ChineseConverter } from '../converters/chinese-converter.helper';\nimport { IDateAdapter } from '../IAdapter';\n\n/**\n * تقویم سنتی چینی (农历)\n * منطق تبدیل تاریخ در ChineseConverter (helpers/chinese-converter.helper.ts) است.\n *\n * ⚠️ محدودیت شناختهشده: ماههای کبیسه (闰) فعلاً به ماه عادیِ همنام\n * نگاشت میشوند؛ جزئیات در chinese-converter.helper.ts.\n */\nexport class ChineseAdapter implements IDateAdapter {\n /** یکشنبه = 0 */\n startOfWeek = 0;\n weekStartDay = 0;\n\n get longMonths(): string[] {\n return [\n '正月',\n '二月',\n '三月',\n '四月',\n '五月',\n '六月',\n '七月',\n '八月',\n '九月',\n '十月',\n '冬月',\n '腊月',\n ];\n }\n\n get narrowDays(): string[] {\n return ['日', '一', '二', '三', '四', '五', '六'];\n }\n\n get shortDays(): string[] {\n return ['日', '一', '二', '三', '四', '五', '六'];\n }\n\n get longDays(): string[] {\n return ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];\n }\n\n toLocale(date: Date): CalendarDate {\n const c = ChineseConverter.parse(date);\n return {\n locale: 'zh',\n day: c.day,\n month: c.month,\n year: c.year,\n date,\n hours: date.getHours(),\n minutes: date.getMinutes(),\n seconds: date.getSeconds(),\n milliseconds: date.getMilliseconds(),\n dayOfWeek: date.getDay(),\n };\n }\n\n today() {\n return this.toLocale(new Date());\n }\n\n firstDayofMonth(year: number, month: number): number {\n return ChineseConverter.firstDayOfMonth(year, month).getDay();\n }\n\n lastDateofMonth(year: number, month: number): number {\n return ChineseConverter.daysInMonth(year, month);\n }\n\n lastDayofMonth(year: number, month: number): number {\n const lastDate = this.lastDateofMonth(year, month);\n return ChineseConverter.toGregorian(year, month, lastDate).getDay();\n }\n\n /**\n * روز آخر ماه قبل - با یک ترفند ساده:\n * روز قبل از روز اول ماه فعلی، حتماً آخرین روز ماه قبل است.\n */\n lastDateofLastMonth(year: number, month: number): number {\n const firstOfThis = ChineseConverter.firstDayOfMonth(year, month);\n const lastOfPrev = new Date(firstOfThis);\n lastOfPrev.setDate(lastOfPrev.getDate() - 1);\n return ChineseConverter.parse(lastOfPrev).day;\n }\n\n /** month start with zero */\n getDate(date: CalendarDate): Date {\n const jsDate = ChineseConverter.toGregorian(date.year, date.month ?? 0, date.day ?? 1);\n if (date.hours !== undefined) jsDate.setHours(date.hours);\n if (date.minutes !== undefined) jsDate.setMinutes(date.minutes);\n if (date.seconds !== undefined) jsDate.setSeconds(date.seconds);\n if (date.milliseconds !== undefined) jsDate.setMilliseconds(date.milliseconds);\n return jsDate;\n }\n\n formatDate(date: CalendarDate, format: string): string | null {\n if (!date) return null;\n\n const jsDate = this.getDate(date);\n const options: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n };\n\n if (format === 'full') {\n options.weekday = 'long';\n }\n\n return new Intl.DateTimeFormat('zh-CN-u-ca-chinese', options).format(jsDate);\n }\n\n getStartOfWeek(date: Date): Date {\n const d = new Date(date);\n d.setHours(0, 0, 0, 0);\n const delta = (d.getDay() - this.weekStartDay + 7) % 7;\n d.setDate(d.getDate() - delta);\n return d;\n }\n\n getEndOfWeek(date: Date): Date {\n const d = this.getStartOfWeek(date);\n d.setDate(d.getDate() + 6);\n d.setHours(23, 59, 59, 999);\n return d;\n }\n\n getStartOf(date: Date | null, t: DatePickerView): Date | null {\n if (!date) return date;\n const c = ChineseConverter.parse(date);\n\n switch (t) {\n case 'year':\n return ChineseConverter.firstDayOfMonth(c.year, 0);\n case 'month':\n return ChineseConverter.firstDayOfMonth(c.year, c.month);\n case 'day':\n return ChineseConverter.toGregorian(c.year, c.month, c.day);\n }\n }\n\n getLastOf(date: Date | null, t: DatePickerView): Date | null {\n if (!date) return date;\n const c = ChineseConverter.parse(date);\n\n switch (t) {\n case 'year':\n return ChineseConverter.toGregorian(c.year, 11, ChineseConverter.daysInMonth(c.year, 11));\n case 'month':\n return ChineseConverter.toGregorian(\n c.year,\n c.month,\n ChineseConverter.daysInMonth(c.year, c.month),\n );\n case 'day':\n return ChineseConverter.toGregorian(c.year, c.month, c.day);\n }\n }\n}\n","import { inject, InjectionToken, Type } from '@angular/core';\nimport { IDateAdapter } from './IAdapter';\nimport { GregorianAdapter } from './locales/gregorian.adapter';\nimport { JalaliAdapter } from './locales/jalali-adapter';\nimport { HijriAdapter } from './locales/hijri-adapter';\nimport { ChineseAdapter } from './locales/chinese.adapter';\n\nexport const DATE_ADAPTERS = new InjectionToken<DateAdapterRegistration[]>('DATE_ADAPTERS');\n\nexport interface DateAdapterRegistration {\n locale: string;\n\n useClass: Type<IDateAdapter>;\n}\n\nexport const DEFAULT_DATE_ADAPTERS: readonly DateAdapterRegistration[] = Object.freeze([\n { locale: 'en', useClass: GregorianAdapter },\n { locale: 'fa', useClass: JalaliAdapter },\n { locale: 'hi', useClass: HijriAdapter },\n { locale: 'zh', useClass: ChineseAdapter },\n]);\n\nexport function getLocals(): string[] {\n const adapters = inject<DateAdapterRegistration[]>(DATE_ADAPTERS);\n\n return adapters.map((m) => m.locale);\n}\n","import { inject, Injectable } from '@angular/core';\nimport { DATE_ADAPTERS, DateAdapterRegistration } from './consts';\nimport { GregorianAdapter } from './locales/gregorian.adapter';\n\n@Injectable()\nexport class DateAdapterRegistry {\n adapters = inject<DateAdapterRegistration[]>(DATE_ADAPTERS);\n\n resolve(locale: string) {\n const type = this.adapters?.find((x) => x.locale == locale)?.useClass;\n if (!type) {\n console.warn(`Date adapter \"${locale}\" not registred!`);\n return new GregorianAdapter();\n } else {\n return new type();\n }\n }\n}\n","/**\n * convert 300s to 5:00\n */\nexport function convertSecondsToTime(givenSeconds: number): string {\n const dateObj = new Date(givenSeconds * 1000);\n const hours = dateObj.getUTCHours();\n const minutes = dateObj.getUTCMinutes();\n const seconds = dateObj.getSeconds();\n const h = hours > 0 ? hours.toString().padStart(2, '0') + ':' : '';\n const timeString =\n h + minutes.toString().padStart(2, '0') + ':' + seconds.toString().padStart(2, '0');\n\n return timeString;\n}\n/**\n * convert 0 to 00:00 , 1 to 01:00 , 1.5 => 01:30\n */\nexport function convertNumberToTime(num: number): string {\n const hour = Math.floor(num);\n const min = 60 * (num - hour);\n\n const t = `${hour.toString().padStart(2, '0')}:${min.toString().padStart(2, '0')}`;\n return t;\n}\n","import { clampDate, clampMonth, clampYear, compareDate } from '../helpers/date.helper';\nimport { IDateAdapter } from '../adapters/IAdapter';\nimport { CalendarDate } from '../adapters/calendar-date';\nimport { MsEvents, MsEventViewer } from '../models/events';\nimport { DateAdapterRegistry } from '../adapters/date-adapter-registry';\nimport { inject } from '@angular/core';\nimport { CalendarView, DatePickerView } from '../models/view';\nimport { DateViewDay, DateViewMonth, DateViewWeek, DateViewYear } from '../models/date';\nimport { convertNumberToTime } from '../helpers/time.helper';\n\nexport abstract class NgxDatePickerBase {\n protected _locale = 'en';\n protected dateAdapterRegistry = inject(DateAdapterRegistry);\n adapter: IDateAdapter = this.dateAdapterRegistry.resolve(this._locale);\n\n currYear!: number;\n currMonth!: number;\n currentWeek!: number;\n\n months: string[] = [];\n weeks: string[] = [];\n viewDays: DateViewDay[] = [];\n viewMonths: DateViewMonth[] = [];\n viewYears: DateViewYear[] = [];\n viewWeeks: DateViewWeek[] = [];\n displayMonth = '';\n\n minDate: Date | null = null;\n maxDate: Date | null = null;\n\n renderCalendar(\n view: CalendarView,\n selected?: CalendarDate,\n events?: MsEvents[],\n callback?: Function,\n ) {\n switch (view) {\n case 'month':\n this.renderDay(selected, events);\n break;\n case 'week':\n this.renderWeek();\n break;\n case 'day':\n this.renderWeek();\n break;\n }\n\n this.displayMonth = this.months[this.currMonth] ?? '';\n\n if (callback) callback();\n }\n renderِDatePicker(\n view: DatePickerView,\n selected?: CalendarDate,\n events?: MsEvents[],\n callback?: Function,\n ) {\n switch (view) {\n case 'day':\n this.renderDay(selected, events);\n break;\n case 'month':\n this.renderMonth();\n break;\n case 'year':\n this.renderYear();\n break;\n }\n\n this.displayMonth = this.months[this.currMonth] ?? '';\n\n if (callback) callback();\n }\n\n renderYear() {\n this.viewYears = [];\n const s = this.currYear - 10;\n const e = this.currYear + 10;\n\n for (let i = s; i < e; i++) {\n this.viewYears.push({\n year: i,\n selected: i === this.currYear,\n active: this.checkActiveYear(i),\n });\n }\n }\n\n renderMonth() {\n this.viewMonths = [];\n\n for (let i = 0; i < this.months.length; i++) {\n this.viewMonths.push({\n month: i,\n displayMonth: this.months[i],\n selected: i === this.currMonth,\n active: this.checkActiveMonth(this.currYear, i),\n });\n }\n }\n\n renderWeek(anchorDate?: Date) {\n this.viewWeeks = [];\n for (let t = 0; t < 24; t += 0.5) {\n this.viewWeeks.push({\n time: t,\n displayTime: convertNumberToTime(t),\n weeks: this.weeks,\n active: true,\n selected: false,\n });\n }\n }\n\n /** Returns the seven real dates belonging to the locale's week. */\n getWeekDates(anchor: Date): Date[] {\n const start = this.adapter.getStartOfWeek(anchor);\n return Array.from({ length: 7 }, (_, index) => {\n const d = new Date(start);\n d.setDate(start.getDate() + index);\n d.setHours(0, 0, 0, 0);\n return d;\n });\n }\n\n getEventsForDate(date: Date, events?: MsEvents[]): MsEventViewer[] {\n return this.getEvents(date, events);\n }\n\n protected normalizeEvent(event: MsEvents): { event: MsEvents; start: Date; end: Date } {\n const start =\n event.start instanceof Date ? new Date(event.start) : new Date(event.start as any);\n const rawEnd = event.end\n ? event.end instanceof Date\n ? new Date(event.end)\n : new Date(event.end as any)\n : new Date(start);\n\n if (Number.isNaN(start.getTime())) return { event, start: new Date(NaN), end: new Date(NaN) };\n\n // Day-calendar events use an inclusive end date. For timed events, the actual\n // end instant is respected. An omitted end means a one-day event.\n const end = Number.isNaN(rawEnd.getTime()) ? new Date(start) : rawEnd;\n return { event, start, end: end < start ? new Date(start) : end };\n }\n\n /**\n * Renders a 6-row month grid and attaches events to every visible day.\n *\n * The event list is normalized to MsEventViewer so the template can draw\n * continuation edges similar to FullCalendar's month view.\n */\n renderDay(selected?: CalendarDate, events?: MsEvents[]) {\n this.viewDays = [];\n\n const firstDayOfMonth = this.adapter.firstDayofMonth(this.currYear, this.currMonth);\n const lastDateOfMonth = this.adapter.lastDateofMonth(this.currYear, this.currMonth);\n const lastDayOfMonth = this.adapter.lastDayofMonth(this.currYear, this.currMonth);\n const lastDateOfLastMonth = this.adapter.lastDateofLastMonth(this.currYear, this.currMonth);\n\n for (let i = firstDayOfMonth; i > 0; i--) {\n const day = lastDateOfLastMonth - i + 1;\n const date = this.adapter.getDate({\n locale: this._locale,\n year: this.currYear,\n month: this.currMonth - 1,\n day,\n });\n\n this.viewDays.push({\n day,\n active: false,\n isToday: false,\n selected: false,\n date,\n events: this.getEvents(date, events),\n });\n }\n\n for (let day = 1; day <= lastDateOfMonth; day++) {\n const today = this.adapter.today();\n const isToday =\n day === today.day && this.currMonth === today.month && this.currYear === today.year;\n\n const date = this.adapter.getDate({\n locale: this._locale,\n year: this.currYear,\n month: this.currMonth,\n day,\n });\n\n this.viewDays.push({\n day,\n active: this.checkActiveDate(date),\n isToday,\n selected:\n day === selected?.day &&\n selected.month === this.currMonth &&\n selected.year === this.currYear,\n date,\n events: this.getEvents(date, events),\n });\n }\n\n for (let i = lastDayOfMonth; i < 6; i++) {\n const day = i - lastDayOfMonth + 1;\n const date = this.adapter.getDate({\n locale: this._locale,\n year: this.currYear,\n month: this.currMonth + 1,\n day,\n });\n\n this.viewDays.push({\n day,\n active: false,\n isToday: false,\n selected: false,\n date,\n events: this.getEvents(date, events),\n });\n }\n }\n\n checkActiveDate(date: Date) {\n const c = clampDate(date, this.minDate, this.maxDate);\n return c === 0;\n }\n\n checkActiveMonth(year: number, month: number) {\n const fd = this.adapter.getDate({ locale: this._locale, year, month, day: 1 });\n const ld = this.adapter.getDate({\n locale: this._locale,\n year,\n month,\n day: this.adapter.lastDateofMonth(year, month),\n });\n\n const min = this.adapter.getStartOf(this.minDate, 'month');\n const max = this.adapter.getLastOf(this.maxDate, 'month');\n\n return clampMonth(fd, min, max) === 0 && clampMonth(ld, min, max) === 0;\n }\n\n checkActiveYear(year: number) {\n const d = this.adapter.getDate({ locale: this._locale, year, month: 1, day: 1 });\n return clampYear(d, this.minDate, this.maxDate) === 0;\n }\n\n protected getEvents(date: Date, events?: MsEvents[]): MsEventViewer[] {\n if (!events?.length) return [];\n\n return events\n .filter((event) => {\n const start = event.start instanceof Date ? event.start : new Date(event.start as any);\n const end = event.end\n ? event.end instanceof Date\n ? event.end\n : new Date(event.end as any)\n : start;\n\n return compareDate(date, start) >= 0 && compareDate(date, end) <= 0;\n })\n .map((event) => {\n const start = event.start instanceof Date ? event.start : new Date(event.start as any);\n const end = event.end\n ? event.end instanceof Date\n ? event.end\n : new Date(event.end as any)\n : start;\n\n return {\n ...event,\n continuesBefore: compareDate(start, date) < 0,\n continuesAfter: compareDate(end, date) > 0,\n isStart: compareDate(start, date) === 0,\n isEnd: compareDate(end, date) === 0,\n };\n });\n }\n}\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport const NGX_CALENDAR_LOCALIZATION = new InjectionToken<NgxCalendarLocalization>(\r\n 'ngx-calendar-localization',\r\n {\r\n factory: () => DEFAULT_NGX_CALENDAR_LOCALIZATION,\r\n },\r\n);\r\n\r\nexport class NgxCalendarLocalization {\r\n clear = 'Clear';\r\n today = 'Today';\r\n\r\n /** Range picker labels. */\r\n rangeStart = 'Start date';\r\n rangeEnd = 'End date';\r\n\r\n day = 'Day';\r\n month = 'Month';\r\n week = 'Week';\r\n year = 'Year';\r\n event = 'Event';\r\n}\r\nexport const DEFAULT_NGX_CALENDAR_LOCALIZATION = new NgxCalendarLocalization();\r\n","import {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n inject,\r\n input,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport { clampDate, deserialize, isValid, sameDate } from '../../helpers/date.helper';\r\nimport { NgxDatePickerConfig } from '../config';\r\nimport { NgxDatePickerBase } from '../ngx-date-picker-base.component';\r\nimport { DatePickerView } from '../../models/view';\r\nimport { CalendarDate } from '../../adapters/calendar-date';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n Validator,\r\n} from '@angular/forms';\r\nimport { DateAdapterRegistry } from '../../adapters/date-adapter-registry';\r\nimport { DateViewDay, DateViewMonth, DateViewYear } from '../../models/date';\r\nimport { NGX_CALENDAR_LOCALIZATION, type NgxCalendarLocalization } from '../../tokens/localization';\r\n\r\n@Component({\r\n selector: 'ngx-date-picker',\r\n templateUrl: './ngx-datepicker.component.html',\r\n styleUrls: ['./ngx-datepicker.component.scss'],\r\n imports: [CommonModule],\r\n providers: [\r\n DateAdapterRegistry,\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => NgxInputDatePickerComponent),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => NgxInputDatePickerComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class NgxInputDatePickerComponent\r\n extends NgxDatePickerBase\r\n implements ControlValueAccessor, Validator, OnInit\r\n{\r\n defaultLocalization = inject(NGX_CALENDAR_LOCALIZATION);\r\n localize = input<NgxCalendarLocalization>(this.defaultLocalization);\r\n config = new NgxDatePickerConfig();\r\n @Input('config') set setConfig(val: NgxDatePickerConfig) {\r\n this.config = { ...new NgxDatePickerConfig(), ...val };\r\n }\r\n\r\n @Input() set locale(val: string) {\r\n this._locale = val;\r\n this.adapter = this.dateAdapterRegistry.resolve(this._locale);\r\n this.init();\r\n }\r\n /** The minimum valid date. */\r\n @Input('min') set setMin(value: Date | null | undefined) {\r\n const validValue = deserialize(value);\r\n if (!sameDate(validValue, this.minDate)) {\r\n this.minDate = validValue;\r\n this._validatorOnChange();\r\n this.init();\r\n }\r\n }\r\n\r\n /** The maximum valid date. */\r\n @Input('max') set setMax(value: Date | null | undefined) {\r\n const validValue = deserialize(value);\r\n if (!sameDate(validValue, this.maxDate)) {\r\n this.maxDate = validValue;\r\n this._validatorOnChange();\r\n this.init();\r\n }\r\n }\r\n\r\n @Input() view: DatePickerView = 'day';\r\n\r\n @Output() change = new EventEmitter<Date | null>();\r\n\r\n selected?: CalendarDate;\r\n\r\n calendarHeader = '';\r\n isDisabled = false;\r\n\r\n weekDays: { min: string; name: string }[] = [];\r\n protected _onChange = (value: Date) => {};\r\n protected _onTouched = () => {};\r\n protected _validatorOnChange = () => {};\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.init();\r\n }\r\n updateConfig(val: NgxDatePickerConfig) {\r\n this.config = { ...new NgxDatePickerConfig(), ...val };\r\n }\r\n init() {\r\n this.months = this.adapter.longMonths;\r\n let sDays = this.adapter.shortDays;\r\n let lDays = this.adapter.longDays;\r\n this.weekDays = sDays.map((m, i) => ({ min: m, name: lDays[i] }));\r\n\r\n if (!this.selected?.date) {\r\n this.gotoToday();\r\n } else {\r\n let l = this.adapter.toLocale(this.selected.date);\r\n this.currYear = l.year;\r\n this.currMonth = l.month ?? 1;\r\n this.renderِDatePicker(this.view);\r\n }\r\n }\r\n writeValue(value: any): void {\r\n const validValue = deserialize(value);\r\n if (validValue) {\r\n this.selected = this.adapter.toLocale(validValue);\r\n } else {\r\n this.selected = undefined;\r\n }\r\n this.init();\r\n }\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n if (this.selected?.date) {\r\n if (!isValid(this.selected.date)) {\r\n return {\r\n invalid: true,\r\n };\r\n }\r\n let c = clampDate(this.selected?.date, this.minDate, this.maxDate);\r\n if (c < 0) {\r\n return {\r\n invalid: true,\r\n min: this.minDate,\r\n };\r\n } else if (c > 0) {\r\n return {\r\n invalid: true,\r\n max: this.maxDate,\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n registerOnChange(fn: any): void {\r\n this._onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this._onTouched = fn;\r\n }\r\n registerOnValidatorChange?(fn: () => void): void {\r\n this._validatorOnChange = fn;\r\n }\r\n setDisabledState(disabled: boolean): void {\r\n this.isDisabled = disabled;\r\n }\r\n\r\n override renderِDatePicker(view: DatePickerView) {\r\n super.renderِDatePicker(view, this.selected, [], () => {\r\n let d = this.selected?.date;\r\n this.calendarHeader =\r\n (d && this.adapter.formatDate(this.adapter.toLocale(d), 'EEEE - d MMMM, yyyy')) ?? '';\r\n });\r\n }\r\n\r\n gotoToday() {\r\n let today = this.adapter.today();\r\n this.selected = today;\r\n this.currYear = today.year;\r\n this.currMonth = today.month ?? 1;\r\n this.calendarHeader = this.adapter.formatDate(today, 'EEEE, d MMMM, yyyy') ?? '';\r\n this.changeView('day');\r\n }\r\n\r\n changeView(v: DatePickerView) {\r\n this.view = v;\r\n this.renderِDatePicker(this.view);\r\n }\r\n\r\n next() {\r\n if (this.view === 'year') {\r\n this.currYear += 20;\r\n } else if (this.view === 'month') {\r\n this.currYear++;\r\n } else {\r\n this.currMonth++;\r\n }\r\n if (this.currMonth < 0 || this.currMonth > 11) {\r\n let date = new Date(this.currYear, this.currMonth);\r\n this.currYear = date.getFullYear();\r\n this.currMonth = date.getMonth();\r\n }\r\n\r\n this.renderِDatePicker(this.view);\r\n }\r\n\r\n previous() {\r\n if (this.view === 'year') {\r\n this.currYear -= 20;\r\n } else if (this.view === 'month') {\r\n this.currYear--;\r\n } else {\r\n this.currMonth--;\r\n }\r\n if (this.currMonth < 0 || this.currMonth > 11) {\r\n let date = new Date(this.currYear, this.currMonth);\r\n this.currYear = date.getFullYear();\r\n this.currMonth = date.getMonth();\r\n }\r\n\r\n this.renderِDatePicker(this.view);\r\n }\r\n\r\n selectDay(ev: Event, item: DateViewDay) {\r\n ev.stopPropagation();\r\n if (item.active) {\r\n this.selected = {\r\n locale: this._locale,\r\n year: this.currYear,\r\n month: this.currMonth,\r\n day: item.day,\r\n date: item.date,\r\n };\r\n this.change.emit(this.selected.date);\r\n }\r\n }\r\n selectMonth(ev: Event, item: DateViewMonth) {\r\n ev.stopPropagation();\r\n if (item.active) {\r\n this.currMonth = item.month;\r\n this.changeView('day');\r\n }\r\n }\r\n selectYear(ev: Event, item: DateViewYear) {\r\n ev.stopPropagation();\r\n if (item.active) {\r\n this.currYear = item.year;\r\n this.changeView('month');\r\n }\r\n }\r\n\r\n clear() {\r\n this.selected = undefined;\r\n this.change.emit(null);\r\n }\r\n stopPagination(ev: Event) {\r\n ev.stopPropagation();\r\n }\r\n}\r\n","<div class=\"wrapper\" #datepickerWrapper (click)=\"stopPagination($event)\">\r\n <div class=\"header\">\r\n <svg\r\n class=\"calendar-icon\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M16 2V6M8 2V6\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M13 4H11C7.22876 4 5.34315 4 4.17157 5.17157C3 6.34315 3 8.22876 3 12V14C3 17.7712 3 19.6569 4.17157 20.8284C5.34315 22 7.22876 22 11 22H13C16.7712 22 18.6569 22 19.8284 20.8284C21 19.6569 21 17.7712 21 14V12C21 8.22876 21 6.34315 19.8284 5.17157C18.6569 4 16.7712 4 13 4Z\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M3 10H21\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M11.9955 14H12.0045M11.9955 18H12.0045M15.991 14H16M8 14H8.00897M8 18H8.00897\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n {{ calendarHeader }}\r\n </div>\r\n <div class=\"sub-header\">\r\n <div class=\"icons\">\r\n <span id=\"prev\" (click)=\"previous()\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"\r\n config.previousButtonTemplate || defaultPreviousBTNTemplate\r\n \"></ng-template>\r\n </span>\r\n </div>\r\n <span class=\"current-date\">\r\n <span (click)=\"changeView('year')\">\r\n {{ currYear }}\r\n <ng-template\r\n [ngTemplateOutlet]=\"config.caretDownIconTemplate || defaultCaretDownIcon\"></ng-template>\r\n </span>\r\n <span (click)=\"changeView('month')\">\r\n {{ displayMonth }}\r\n <ng-template\r\n [ngTemplateOutlet]=\"config.caretDownIconTemplate || defaultCaretDownIcon\"></ng-template>\r\n </span>\r\n </span>\r\n <div class=\"icons\">\r\n <span id=\"next\" (click)=\"next()\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"config.nextButtonTemplate || defaultNextBTNTemplate\"></ng-template>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"calendar\">\r\n @if (view === 'day') {\r\n <ul class=\"weeks\">\r\n @for (w of weekDays; track $index) {\r\n <li [title]=\"w.name\">\r\n {{ w.min }}\r\n </li>\r\n }\r\n </ul>\r\n <ul class=\"days\">\r\n @for (item of viewDays; track $index) {\r\n <li\r\n [class.de-active]=\"!item.active\"\r\n [class.today]=\"item.isToday\"\r\n [class.selected]=\"item.selected\"\r\n (click)=\"selectDay($event, item)\">\r\n {{ item.day }}\r\n </li>\r\n }\r\n </ul>\r\n } @else if (view === 'month') {\r\n <ul class=\"months\">\r\n @for (item of viewMonths; track $index; let i = $index) {\r\n <li\r\n [class.de-active]=\"!item.active\"\r\n [class.today]=\"item.isToday\"\r\n [class.selected]=\"item.selected\"\r\n (click)=\"selectMonth($event, item)\">\r\n {{ i + 1 }}.{{ item.displayMonth }}\r\n </li>\r\n }\r\n </ul>\r\n } @else if (view === 'year') {\r\n <ul class=\"years\">\r\n @for (item of viewYears; track $index) {\r\n <li\r\n [class.de-active]=\"!item.active\"\r\n [class.today]=\"item.isToday\"\r\n [class.selected]=\"item.selected\"\r\n (click)=\"selectYear($event, item)\">\r\n {{ item.year }}\r\n </li>\r\n }\r\n </ul>\r\n }\r\n <!-- <pre>\r\n currYear={{currYear}}\r\n currMonth={{currMonth}}\r\n {{selected|json}}\r\n </pre> -->\r\n <div class=\"calendar-footer\">\r\n @if (config.clearButton) {\r\n <button (click)=\"clear()\">\r\n {{ localize().clear }}\r\n </button>\r\n }\r\n @if (config.todayButton) {\r\n <button (click)=\"gotoToday()\">\r\n {{ localize().today }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #defaultPreviousBTNTemplate>\r\n <svg width=\"15px\" height=\"40px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M224 480c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l169.4 169.4c12.5 12.5 12.5 32.75 0 45.25C240.4 476.9 232.2 480 224 480z\" />\r\n </svg>\r\n</ng-template>\r\n\r\n<ng-template #defaultNextBTNTemplate>\r\n <svg width=\"15px\" height=\"40px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\" />\r\n </svg>\r\n</ng-template>\r\n\r\n<ng-template #defaultCaretDownIcon>\r\n <svg width=\"10px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M310.6 246.6l-127.1 128C176.4 380.9 168.2 384 160 384s-16.38-3.125-22.63-9.375l-127.1-128C.2244 237.5-2.516 223.7 2.438 211.8S19.07 192 32 192h255.1c12.94 0 24.62 7.781 29.58 19.75S319.8 237.5 310.6 246.6z\" />\r\n </svg>\r\n</ng-template>\r\n","import {\r\n Directive,\r\n effect,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n HostListener,\r\n inject,\r\n input,\r\n Input,\r\n Output,\r\n Renderer2,\r\n signal,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n Validator,\r\n} from '@angular/forms';\r\nimport { NgxInputDatePickerComponent } from '../components/datepicker/ngx-datepicker.component';\r\nimport { clampDate, deserialize, isValid, sameDate } from '../helpers/date.helper';\r\nimport { OverlayRef, OverlayService } from 'ngx-kit/shared';\r\nimport { IDateAdapter } from '../adapters/IAdapter';\r\nimport { NgxDatePickerConfig } from '../components/config';\r\nimport { DateAdapterRegistry } from '../adapters/date-adapter-registry';\r\n\r\n@Directive({\r\n selector: '[ngxInputDatePicker]',\r\n exportAs: 'ngxInputDatePicker',\r\n host: {\r\n class: 'ngx-datepicker-input',\r\n '[attr.readOnly]': 'true',\r\n },\r\n providers: [\r\n DateAdapterRegistry,\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => NgxInputDatePicker),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => NgxInputDatePicker),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class NgxInputDatePicker implements ControlValueAccessor, Validator {\r\n protected readonly dateAdapterRegistry = inject(DateAdapterRegistry);\r\n\r\n openOnCLick = input<boolean>(true);\r\n\r\n @Output() change = new EventEmitter<Date>();\r\n private value?: Date | null;\r\n private pickerRef?: OverlayRef<NgxInputDatePickerComponent>;\r\n adapter!: IDateAdapter;\r\n private _locale: string = 'en';\r\n @Input() set locale(val: string) {\r\n this._locale = val;\r\n this.adapter = this.dateAdapterRegistry.resolve(this._locale);\r\n }\r\n\r\n protected _onChange = (value: Date | null | undefined) => {};\r\n protected _onTouched = () => {};\r\n protected _validatorOnChange = () => {};\r\n\r\n /**\r\n * display format in input\r\n */\r\n @Input() displayFormat: string = 'yyyy/MM/dd';\r\n\r\n private min: Date | null = null;\r\n /** The minimum valid date. */\r\n @Input('min') set setMin(value: Date | null | undefined) {\r\n const validValue = deserialize(value);\r\n if (!sameDate(validValue, this.min)) {\r\n this.min = validValue;\r\n this._validatorOnChange();\r\n }\r\n }\r\n\r\n private max: Date | null = null;\r\n /** The maximum valid date. */\r\n @Input('max') set setMax(value: Date | null | undefined) {\r\n const validValue = deserialize(value);\r\n if (!sameDate(validValue, this.max)) {\r\n this.max = validValue;\r\n this._validatorOnChange();\r\n }\r\n }\r\n\r\n config = new NgxDatePickerConfig();\r\n @Input('config') set setConfig(val: NgxDatePickerConfig) {\r\n this.config = { ...new NgxDatePickerConfig(), ...val };\r\n }\r\n\r\n private isDisabled = false;\r\n\r\n private readonly overlayService = inject(OverlayService);\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n private readonly renderer = inject(Renderer2);\r\n constructor(private el: ElementRef<HTMLInputElement>) {}\r\n\r\n updateConfig(val: NgxDatePickerConfig) {\r\n this.config = { ...new NgxDatePickerConfig(), ...val };\r\n if (this.pickerRef && this.pickerRef.componentRef) {\r\n this.pickerRef.componentRef.instance.updateConfig(this.config);\r\n }\r\n }\r\n ngOnDestroy(): void {\r\n this.destroyDatePicker();\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(ev: Event) {\r\n if (this.openOnCLick() && !this.isDisabled) {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n this.toggle();\r\n }\r\n }\r\n\r\n @HostListener('input', ['$event'])\r\n onInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n const validValue = deserialize(input.value);\r\n this.value = validValue;\r\n this._formatValue(this.value);\r\n this._onChange(this.value);\r\n }\r\n\r\n @HostListener('blur')\r\n onBlur() {\r\n this._onTouched();\r\n }\r\n\r\n writeValue(value: any): void {\r\n const validValue = deserialize(value);\r\n this.value = validValue;\r\n this._formatValue(this.value);\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this._onTouched = fn;\r\n }\r\n registerOnValidatorChange?(fn: () => void): void {\r\n this._validatorOnChange = fn;\r\n }\r\n setDisabledState(disabled: boolean): void {\r\n this.isDisabled = disabled;\r\n if (disabled) {\r\n this.renderer.setProperty(this.el.nativeElement, 'disabled', disabled);\r\n } else {\r\n this.renderer.removeAttribute(this.el.nativeElement, 'disabled');\r\n }\r\n }\r\n\r\n public toggle() {\r\n if (this.pickerRef || this.isDisabled) {\r\n this.destroyDatePicker();\r\n return;\r\n }\r\n\r\n this.pickerRef = this.overlayService.open({\r\n anchor: this.el.nativeElement,\r\n component: NgxInputDatePickerComponent,\r\n viewContainerRef: this.viewContainerRef,\r\n alignment: 'center',\r\n placement: 'bottom',\r\n margin: 2,\r\n configure: (instance, ref) => {\r\n instance.locale = this._locale;\r\n instance.minDate = this.min;\r\n instance.maxDate = this.max;\r\n instance.updateConfig(this.config);\r\n instance.writeValue(this.value);\r\n\r\n instance.change.subscribe((c: Date) => {\r\n this.value = c;\r\n this.emitChange(c);\r\n this.destroyDatePicker();\r\n });\r\n\r\n // instance.closed.subscribe(() => ref.close());\r\n },\r\n onClosed: () => {\r\n this.pickerRef = undefined;\r\n },\r\n });\r\n }\r\n\r\n private destroyDatePicker() {\r\n this.pickerRef?.close();\r\n this.pickerRef = undefined;\r\n }\r\n private async emitChange(c: Date) {\r\n this._formatValue(c);\r\n this._onChange(c);\r\n this.change.emit(c);\r\n this._onTouched();\r\n }\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n if (this.value) {\r\n if (!isValid(this.value)) {\r\n return {\r\n invalid: true,\r\n };\r\n }\r\n let c = clampDate(this.value, this.min, this.max);\r\n if (c < 0) {\r\n return {\r\n invalid: true,\r\n min: this.min,\r\n };\r\n } else if (c > 0) {\r\n return {\r\n invalid: true,\r\n max: this.max,\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /** Formats a value and sets it on the input element. */\r\n protected _formatValue(value: Date | null, setChange = false) {\r\n let val = '';\r\n if (value && this.adapter) {\r\n let o = this.adapter.toLocale(value);\r\n val = (value && this.adapter.formatDate(o, this.displayFormat)) ?? '';\r\n }\r\n this.renderer.setProperty(this.el.nativeElement, 'value', val);\r\n\r\n if (setChange) {\r\n this._onChange(this.value);\r\n }\r\n }\r\n}\r\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Output,\n inject,\n input,\n viewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgxDatePickerConfig } from '../config';\nimport { NgxDatePickerBase } from '../ngx-date-picker-base.component';\nimport { MsEvents, MsEventViewer } from '../../models/events';\nimport {\n CalendarDayColumn,\n CalendarMonthEventSegment,\n CalendarTimedEvent,\n DateViewDay,\n} from '../../models/date';\nimport { CalendarView } from '../../models/view';\nimport { ISelectedEvent } from '../../models/selected-event';\nimport {\n CalendarEventChange,\n CalendarEventInteractionType,\n} from '../../models/calendar-event-interaction';\nimport { deserialize, sameDate, compareDate } from '../../helpers/date.helper';\nimport { DateAdapterRegistry } from '../../adapters/date-adapter-registry';\nimport { NGX_CALENDAR_LOCALIZATION, NgxCalendarLocalization } from '../../tokens/localization';\n\nconst HOUR_HEIGHT = 64;\nconst HALF_HOUR_HEIGHT = HOUR_HEIGHT / 2;\nconst MIN_EVENT_MINUTES = 30;\nconst MONTH_ROW_COUNT = 6;\nconst MONTH_COLUMN_COUNT = 7;\n\ninterface NormalizedCalendarEvent {\n source: MsEvents;\n start: Date;\n end: Date;\n}\n\ninterface EventInteractionState {\n type: CalendarEventInteractionType;\n source: MsEvents;\n previousEvent: MsEvents;\n pointerId: number;\n startX: number;\n startY: number;\n originColumn: number;\n originRow: number;\n preview: MsEvents;\n deltaDays: number;\n deltaMinutes: number;\n active: boolean;\n surface: 'month' | 'timed' | 'all-day';\n}\n\n@Component({\n selector: 'ngx-calendar',\n templateUrl: './ngx-calendar.component.html',\n styleUrls: ['./ngx-calendar.component.scss'],\n imports: [CommonModule],\n providers: [DateAdapterRegistry],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgxCalendarComponent extends NgxDatePickerBase implements OnInit {\n defaultLocalization = inject(NGX_CALENDAR_LOCALIZATION);\n localize = input<NgxCalendarLocalization>(this.defaultLocalization);\n\n _config = new NgxDatePickerConfig();\n @Input() set config(val: NgxDatePickerConfig) {\n this._config = { ...new NgxDatePickerConfig(), ...val };\n }\n\n @Input() set locale(val: string) {\n this._locale = val;\n this.adapter = this.dateAdapterRegistry.resolve(this._locale);\n if (this.currYear !== undefined) this.syncAnchorToLocale();\n this.renderCalendar(this.view);\n }\n\n @Input('min') set setMin(value: Date | null | undefined) {\n const validValue = deserialize(value);\n if (!sameDate(validValue, this.minDate)) {\n this.minDate = validValue;\n this.renderCalendar(this.view);\n }\n }\n\n @Input('max') set setMax(value: Date | null | undefined) {\n const validValue = deserialize(value);\n if (!sameDate(validValue, this.maxDate)) {\n this.maxDate = validValue;\n this.renderCalendar(this.view);\n }\n }\n\n @Input() view: CalendarView = 'month';\n\n private _events: MsEvents[] = [];\n @Input() set events(val: MsEvents[]) {\n this._events = Array.isArray(val) ? val : [];\n if (this.anchorDate) this.renderCalendar(this.view);\n }\n get events(): MsEvents[] {\n return this._events;\n }\n\n @Output() dateChange = new EventEmitter<DateViewDay>();\n @Output() selectEvent = new EventEmitter<ISelectedEvent>();\n @Output() eventChange = new EventEmitter<CalendarEventChange>();\n @Output() eventsChange = new EventEmitter<MsEvents[]>();\n\n selected?: Date;\n anchorDate!: Date;\n\n eventViewItems: { event: MsEventViewer; start: Date; end: Date }[] = [];\n monthEventSegments: CalendarMonthEventSegment[] = [];\n monthEventRows: CalendarMonthEventSegment[][] = Array.from({ length: MONTH_ROW_COUNT }, () => []);\n\n weekDays: CalendarDayColumn[] = [];\n allDayByColumn: CalendarTimedEvent[][] = [];\n timeSlots = Array.from({ length: 48 }, (_, i) => i * 30);\n readonly hourHeight = HOUR_HEIGHT;\n readonly timeColumnWidth = 64;\n\n calendarWrapper = viewChild<ElementRef<HTMLElement>>('calendarWrapper');\n\n protected interaction: EventInteractionState | null = null;\n\n constructor() {\n super();\n }\n\n ngOnInit(): void {\n this.months = this.adapter.longMonths;\n this.weeks = this.adapter.longDays;\n this.anchorDate = this.selected\n ? new Date(this.selected)\n : this.adapter.getDate(this.adapter.today());\n this.syncAnchorToLocale();\n this.renderCalendar(this.view);\n }\n\n @HostListener('window:resize')\n onResize() {\n this.calcCellSize();\n }\n\n @HostListener('document:pointermove', ['$event'])\n onDocumentPointerMove(event: PointerEvent) {\n if (!this.interaction || event.pointerId !== this.interaction.pointerId) return;\n this.updateEventInteraction(event);\n }\n\n @HostListener('document:pointerup', ['$event'])\n onDocumentPointerUp(event: PointerEvent) {\n if (!this.interaction || event.pointerId !== this.interaction.pointerId) return;\n this.finishEventInteraction(event, false);\n }\n\n @HostListener('document:pointercancel', ['$event'])\n onDocumentPointerCancel(event: PointerEvent) {\n if (!this.interaction || event.pointerId !== this.interaction.pointerId) return;\n this.finishEventInteraction(event, true);\n }\n\n calcCellSize() {\n const fullWidth = this.calendarWrapper()?.nativeElement?.clientWidth ?? 0;\n this.minHeight = fullWidth > this.defaultHeight ? this.defaultHeight : Math.max(fullWidth, 320);\n this.weeks = fullWidth <= 500 ? this.adapter.shortDays : this.adapter.longDays;\n }\n\n override renderCalendar(view: CalendarView) {\n if (!this.anchorDate) return;\n\n this.syncAnchorToLocale();\n\n switch (view) {\n case 'month':\n super.renderCalendar('month', undefined, this.renderEvents);\n this.buildMonthEventSegments();\n break;\n case 'week':\n case 'day':\n this.renderTimedView();\n break;\n case 'event':\n this.renderEventView();\n break;\n }\n\n this.displayMonth = this.months[this.currMonth] ?? '';\n queueMicrotask(() => this.calcCellSize());\n }\n\n private get renderEvents(): MsEvents[] {\n return this._events;\n }\n\n private syncAnchorToLocale() {\n const localeDate = this.adapter.toLocale(this.anchorDate);\n this.currYear = localeDate.year;\n this.currMonth = localeDate.month ?? 0;\n this.months = this.adapter.longMonths;\n this.weeks = this.adapter.longDays;\n }\n\n private renderTimedView() {\n const dates = this.getWeekDates(this.anchorDate);\n const visibleDates = this.view === 'day' ? [new Date(this.startOfDay(this.anchorDate))] : dates;\n\n this.weekDays = visibleDates.map((date, column) => ({\n date,\n label: this.adapter.formatDate(this.adapter.toLocale(date), 'full') ?? '',\n dayNumber: String(this.adapter.toLocale(date).day),\n isToday: sameDate(date, this.adapter.getDate(this.adapter.today())),\n events: this.buildTimedEventsForDay(date, column, visibleDates.length),\n }));\n\n this.allDayByColumn = this.weekDays.map((day, column) =>\n this.buildAllDayEventsForDay(day.date, column),\n );\n\n this.viewWeeks = this.timeSlots.map((minutes) => ({\n time: minutes / 60,\n displayTime: this.formatTime(minutes),\n weeks: visibleDates.map(() => ''),\n active: true,\n selected: false,\n }));\n }\n\n /**\n * Builds a collision layout per overlap cluster. Each cluster gets its own\n * column count, which prevents a short 09:00 event from being unnecessarily\n * squeezed because another event overlaps at 15:00.\n */\n private buildTimedEventsForDay(\n date: Date,\n column: number,\n columnCount: number,\n ): CalendarTimedEvent[] {\n const dayStart = this.startOfDay(date);\n const dayEnd = this.endOfDay(date);\n\n const candidates = this.normalizedEvents()\n .filter(\n ({ start, end, source }) =>\n !source.allDay &&\n !Number.isNaN(start.getTime()) &&\n end.getTime() >= dayStart.getTime() &&\n start.getTime() <= dayEnd.getTime(),\n )\n .map(({ source, start, end }) => {\n const segmentStart = new Date(Math.max(start.getTime(), dayStart.getTime()));\n const segmentEnd = new Date(Math.min(end.getTime(), dayEnd.getTime()));\n return {\n ...source,\n start,\n end,\n segmentStart,\n segmentEnd,\n allDay: false,\n continuesBefore: start.getTime() < dayStart.getTime(),\n continuesAfter: end.getTime() > dayEnd.getTime(),\n isStart: start.getTime() >= dayStart.getTime() && start.getTime() <= dayEnd.getTime(),\n isEnd: end.getTime() >= dayStart.getTime() && end.getTime() <= dayEnd.getTime(),\n column,\n columnCount,\n } as CalendarTimedEvent & { segmentStart: Date; segmentEnd: Date };\n })\n .sort(\n (a, b) =>\n a.segmentStart.getTime() - b.segmentStart.getTime() ||\n b.segmentEnd.getTime() - a.segmentEnd.getTime(),\n );\n\n type Positioned = CalendarTimedEvent & { segmentStart: Date; segmentEnd: Date; lane: number };\n const result: Positioned[] = [];\n let cluster: Positioned[] = [];\n let clusterLanes: Positioned[][] = [];\n let clusterEnd = -Infinity;\n\n const flushCluster = () => {\n if (!cluster.length) return;\n const laneCount = clusterLanes.length;\n for (const item of cluster) {\n item.columnCount = laneCount;\n }\n result.push(...cluster);\n cluster = [];\n clusterLanes = [];\n clusterEnd = -Infinity;\n };\n\n for (const e of candidates) {\n const start = e.segmentStart.getTime();\n if (cluster.length && start > clusterEnd) flushCluster();\n\n let lane = clusterLanes.findIndex((items) => {\n const last = items[items.length - 1];\n return last.segmentEnd.getTime() <= start;\n });\n if (lane < 0) {\n lane = clusterLanes.length;\n clusterLanes.push([]);\n }\n\n const positioned = { ...e, lane, column: lane } as Positioned;\n clusterLanes[lane].push(positioned);\n cluster.push(positioned);\n clusterEnd = Math.max(clusterEnd, e.segmentEnd.getTime());\n\n const startMinutes = e.segmentStart.getHours() * 60 + e.segmentStart.getMinutes();\n const endMinutes = e.segmentEnd.getHours() * 60 + e.segmentEnd.getMinutes();\n const effectiveEnd = Math.max(endMinutes, startMinutes + MIN_EVENT_MINUTES);\n positioned.top = (startMinutes / 60) * HOUR_HEIGHT;\n positioned.height = Math.max(((effectiveEnd - startMinutes) / 60) * HOUR_HEIGHT, 28);\n }\n flushCluster();\n\n return result\n .concat(cluster)\n .map(({ lane, segmentStart, segmentEnd, ...event }) => event as CalendarTimedEvent);\n }\n\n private buildAllDayEventsForDay(date: Date, column: number): CalendarTimedEvent[] {\n const dayStart = this.startOfDay(date);\n const dayEnd = this.endOfDay(date);\n\n return this.normalizedEvents()\n .filter(\n ({ source, start, end }) =>\n !!source.allDay &&\n !Number.isNaN(start.getTime()) &&\n end.getTime() >= dayStart.getTime() &&\n start.getTime() <= dayEnd.getTime(),\n )\n .map(({ source, start, end }) => ({\n ...source,\n start,\n end,\n top: 0,\n height: 24,\n allDay: true,\n column,\n columnCount: 1,\n continuesBefore: start.getTime() < dayStart.getTime(),\n continuesAfter: end.getTime() > dayEnd.getTime(),\n isStart: start.getTime() >= dayStart.getTime() && start.getTime() <= dayEnd.getTime(),\n isEnd: end.getTime() >= dayStart.getTime() && end.getTime() <= dayEnd.getTime(),\n }));\n }\n\n /** Creates FullCalendar-style horizontal segments for the six visible month rows. */\n private buildMonthEventSegments() {\n const visibleDays = this.viewDays;\n if (!visibleDays.length) {\n this.monthEventSegments = [];\n this.monthEventRows = Array.from({ length: MONTH_ROW_COUNT }, () => []);\n return;\n }\n\n const gridStart = this.startOfDay(visibleDays[0].date!);\n const gridEnd = this.endOfDay(visibleDays[visibleDays.length - 1].date!);\n const segments: CalendarMonthEventSegment[] = [];\n\n for (const { source, start, end } of this.normalizedEvents()) {\n if (\n Number.isNaN(start.getTime()) ||\n end.getTime() < gridStart.getTime() ||\n start.getTime() > gridEnd.getTime()\n )\n continue;\n\n const clippedStart = new Date(Math.max(start.getTime(), gridStart.getTime()));\n const clippedEnd = new Date(Math.min(end.getTime(), gridEnd.getTime()));\n const firstIndex = this.dayIndexInMonthGrid(clippedStart, gridStart);\n const lastIndex = this.dayIndexInMonthGrid(clippedEnd, gridStart);\n\n for (\n let index = Math.max(0, firstIndex);\n index <= Math.min(visibleDays.length - 1, lastIndex);\n ) {\n const row = Math.floor(index / MONTH_COLUMN_COUNT);\n const rowEndIndex = Math.min((row + 1) * MONTH_COLUMN_COUNT - 1, lastIndex);\n const startColumn = index % MONTH_COLUMN_COUNT;\n const endColumn = rowEndIndex % MONTH_COLUMN_COUNT;\n const segmentStart = new Date(visibleDays[index].date!);\n const segmentEnd = this.endOfDay(visibleDays[rowEndIndex].date!);\n\n segments.push({\n ...source,\n start,\n end,\n row,\n startColumn,\n endColumn,\n continuesBefore: start.getTime() < segmentStart.getTime(),\n continuesAfter: end.getTime() > segmentEnd.getTime(),\n isStart:\n start.getTime() >= segmentStart.getTime() && start.getTime() <= segmentEnd.getTime(),\n isEnd: end.getTime() >= segmentStart.getTime() && end.getTime() <= segmentEnd.getTime(),\n lane: 0,\n });\n\n index = rowEndIndex + 1;\n }\n }\n\n // Stable ordering makes the same events keep the same visual lane while navigating.\n segments.sort(\n (a, b) =>\n a.row - b.row ||\n a.startColumn - b.startColumn ||\n a.start.getTime() - b.start.getTime() ||\n String(a.title ?? '').localeCompare(String(b.title ?? '')),\n );\n\n // Assign lanes independently inside every week row.\n const lanesByRow = new Map<number, CalendarMonthEventSegment[][]>();\n for (const segment of segments) {\n const lanes = lanesByRow.get(segment.row) ?? [];\n let lane = lanes.findIndex((items) =>\n items.every((item) => item.endColumn < segment.startColumn),\n );\n if (lane < 0) {\n lane = lanes.length;\n lanes.push([]);\n }\n (segment as CalendarMonthEventSegment & { lane: number }).lane = lane;\n lanes[lane].push(segment);\n lanesByRow.set(segment.row, lanes);\n }\n\n this.monthEventSegments = segments;\n this.monthEventRows = Array.from({ length: MONTH_ROW_COUNT }, () => []);\n for (const segment of segments) this.monthEventRows[segment.row].push(segment);\n }\n\n private dayIndexInMonthGrid(date: Date, gridStart: Date): number {\n const a = this.startOfDay(date);\n const b = this.startOfDay(gridStart);\n const aUtc = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());\n const bUtc = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());\n return Math.round((aUtc - bUtc) / 86_400_000);\n }\n\n private normalizedEvents(): NormalizedCalendarEvent[] {\n return this.renderEventSources().map((source) => {\n const normalized = this.normalizeEvent(source);\n return { source, start: normalized.start, end: normalized.end };\n });\n }\n\n private renderEventSources(): MsEvents[] {\n if (!this.interaction?.active) return this._events;\n return this._events.map((event) =>\n this.sameEvent(event, this.interaction!.source) ? this.interaction!.preview : event,\n );\n }\n\n private renderEventView() {\n const monthStart = this.adapter.getDate({\n locale: this._locale,\n year: this.currYear,\n month: this.currMonth,\n day: 1,\n });\n const monthEnd = this.adapter.getDate({\n locale: this._locale,\n year: this.currYear,\n month: this.currMonth,\n day: this.adapter.lastDateofMonth(this.currYear, this.currMonth),\n });\n\n this.eventViewItems = this.renderEventSources()\n .map((event) => {\n const n = this.normalizeEvent(event);\n return { event: event as MsEventViewer, start: n.start, end: n.end };\n })\n .filter(\n ({ start, end }) => compareDate(end, monthStart) >= 0 && compareDate(start, monthEnd) <= 0,\n )\n .sort((a, b) => a.start.getTime() - b.start.getTime());\n }\n\n get headerText(): string {\n if (!this.anchorDate) return '';\n\n if (this.view === 'day') {\n return this.adapter.formatDate(this.adapter.toLocale(this.anchorDate), 'full') ?? '';\n }\n\n if (this.view === 'week') {\n const days = this.getWeekDates(this.anchorDate);\n return this.formatDateRange(days[0], days[6]);\n }\n\n return `${this.displayMonth} ${this.currYear}`;\n }\n\n formatDateRange(start: Date, end: Date): string {\n const s = this.adapter.toLocale(start);\n const e = this.adapter.toLocale(end);\n const startText = this.adapter.formatDate(s, 'd MMMM') ?? '';\n const endText = this.adapter.formatDate(e, 'd MMMM') ?? '';\n return s.year === e.year\n ? `${startText} – ${endText}, ${s.year}`\n : `${startText}, ${s.year} – ${endText}, ${e.year}`;\n }\n\n formatEventDate(date: Date): string {\n return this.adapter.formatDate(this.adapter.toLocale(date), 'd MMMM, yyyy') ?? '';\n }\n\n formatTime(minutes: number): string {\n return `${String(Math.floor(minutes / 60)).padStart(2, '0')}:${String(minutes % 60).padStart(2, '0')}`;\n }\n\n changeView(v: CalendarView) {\n this.cancelEventInteraction();\n this.view = v;\n this.renderCalendar(v);\n }\n\n gotoToday() {\n this.cancelEventInteraction();\n this.anchorDate = this.adapter.getDate(this.adapter.today());\n this.selected = new Date(this.anchorDate);\n this.syncAnchorToLocale();\n this.renderCalendar(this.view);\n }\n\n selectDay(ev: Event, item: DateViewDay) {\n ev.stopPropagation();\n if (item.active) {\n this.selected = item.date;\n this.anchorDate = new Date(item.date!);\n this.dateChange.emit(item);\n this.renderCalendar(this.view);\n }\n }\n\n next() {\n this.navigate(1);\n }\n previous() {\n this.navigate(-1);\n }\n\n private navigate(direction: 1 | -1) {\n const d = new Date(this.anchorDate);\n if (this.view === 'month' || this.view === 'event') {\n const locale = this.adapter.toLocale(d);\n this.anchorDate = this.adapter.getDate({\n locale: this._locale,\n year: locale.year,\n month: locale.month! + direction,\n day: 1,\n });\n } else {\n d.setDate(d.getDate() + direction * (this.view === 'week' ? 7 : 1));\n this.anchorDate = d;\n }\n this.syncAnchorToLocale();\n this.renderCalendar(this.view);\n }\n\n onclickEvent(ev: Event, item: DateViewDay, event: MsEvents) {\n ev.stopPropagation();\n this.selectEvent.emit({ date: item.date!, event });\n }\n\n onTimedEventClick(ev: Event, event: MsEvents, date: Date) {\n ev.stopPropagation();\n if (this.interaction?.active) return;\n this.selectEvent.emit({ date, event });\n }\n\n startMonthEventInteraction(\n ev: PointerEvent,\n segment: CalendarMonthEventSegment,\n type: CalendarEventInteractionType = 'move',\n ) {\n if (ev.button !== 0) return;\n ev.preventDefault();\n ev.stopPropagation();\n this.beginInteraction(ev, segment, type, 'month');\n }\n\n startTimedEventInteraction(\n ev: PointerEvent,\n event: CalendarTimedEvent,\n type: CalendarEventInteractionType = 'move',\n ) {\n if (ev.button !== 0) return;\n ev.preventDefault();\n ev.stopPropagation();\n this.beginInteraction(ev, event, type, event.allDay ? 'all-day' : 'timed');\n }\n\n private beginInteraction(\n ev: PointerEvent,\n event: MsEvents,\n type: CalendarEventInteractionType,\n _surface: 'month' | 'timed' | 'all-day',\n ) {\n const source = this._events.find((candidate) => this.sameEvent(candidate, event));\n if (!source) return;\n this.interaction = {\n type,\n source,\n previousEvent: { ...source },\n pointerId: ev.pointerId,\n startX: ev.clientX,\n startY: ev.clientY,\n originColumn: 0,\n originRow: 0,\n preview: { ...source },\n deltaDays: 0,\n deltaMinutes: 0,\n active: true,\n surface: _surface,\n };\n }\n\n private updateEventInteraction(ev: PointerEvent) {\n const state = this.interaction;\n if (!state) return;\n\n const monthMetrics = state.surface === 'month' ? this.monthPointerDelta(ev) : null;\n const timedMetrics = state.surface === 'timed' ? this.timedPointerDelta(ev) : null;\n const allDayMetrics = state.surface === 'all-day' ? this.allDayPointerDelta(ev) : null;\n let deltaDays = monthMetrics?.days ?? timedMetrics?.days ?? allDayMetrics?.days ?? 0;\n let deltaMinutes = timedMetrics?.minutes ?? 0;\n\n const preview = this.applyEventDelta(state.source, state.type, deltaDays, deltaMinutes);\n if (!this.isWithinBounds(preview)) return;\n\n state.preview = preview;\n state.deltaDays = deltaDays;\n state.deltaMinutes = deltaMinutes;\n this.renderCalendar(this.view);\n }\n\n private finishEventInteraction(ev: PointerEvent, cancelled: boolean) {\n const state = this.interaction;\n if (!state) return;\n if (!cancelled) this.updateEventInteraction(ev);\n\n const changed = !this.sameEventValue(state.source, state.preview);\n this.interaction = null;\n\n if (!cancelled && changed) {\n const updated = this._events.map((event) =>\n this.sameEvent(event, state.source) ? state.preview : event,\n );\n this._events = updated;\n this.eventChange.emit({\n event: state.preview,\n previousEvent: state.previousEvent,\n interaction: state.type,\n deltaDays: state.deltaDays,\n deltaMinutes: state.deltaMinutes,\n });\n this.eventsChange.emit(updated);\n }\n\n this.renderCalendar(this.view);\n }\n\n private cancelEventInteraction() {\n if (!this.interaction) return;\n this.interaction = null;\n }\n\n private monthPointerDelta(ev: PointerEvent): { days: number } | null {\n if (!this.interaction || this.view !== 'month') return null;\n const root = this.calendarWrapper()?.nativeElement.querySelector<HTMLElement>('.days');\n if (!root) return null;\n const rect = root.getBoundingClientRect();\n const cellWidth = rect.width / MONTH_COLUMN_COUNT;\n const cellHeight = rect.height / MONTH_ROW_COUNT;\n const startColumn = Math.max(\n 0,\n Math.min(\n MONTH_COLUMN_COUNT - 1,\n Math.floor((this.interaction.startX - rect.left) / cellWidth),\n ),\n );\n const currentColumn = Math.max(\n 0,\n Math.min(MONTH_COLUMN_COUNT - 1, Math.floor((ev.clientX - rect.left) / cellWidth)),\n );\n const startRow = Math.max(\n 0,\n Math.min(MONTH_ROW_COUNT - 1, Math.floor((this.interaction.startY - rect.top) / cellHeight)),\n );\n const currentRow = Math.max(\n 0,\n Math.min(MONTH_ROW_COUNT - 1, Math.floor((ev.clientY - rect.top) / cellHeight)),\n );\n return { days: (currentRow - startRow) * 7 + (currentColumn - startColumn) };\n }\n\n private allDayPointerDelta(ev: PointerEvent): { days: number } | null {\n if (!this.interaction || this.view === 'month' || this.view === 'event') return null;\n const root = this.calendarWrapper()?.nativeElement.querySelector<HTMLElement>('.all-day-row');\n if (!root) return null;\n const columns = Array.from(root.querySelectorAll('.all-day-cell')) as HTMLElement[];\n if (!columns.length) return null;\n const indexAt = (x: number) => {\n const index = columns.findIndex((column) => {\n const rect = column.getBoundingClientRect();\n return x >= rect.left && x <= rect.right;\n });\n return index < 0 ? 0 : index;\n };\n return { days: indexAt(ev.clientX) - indexAt(this.interaction.startX) };\n }\n\n private timedPointerDelta(ev: PointerEvent): { days: number; minutes: number } | null {\n if (!this.interaction || (this.view !== 'day' && this.view !== 'week')) return null;\n const root = this.calendarWrapper()?.nativeElement.querySelector<HTMLElement>('.time-grid');\n if (!root) return null;\n const columns = Array.from(root.querySelectorAll('.day-column')) as HTMLElement[];\n if (!columns.length) return null;\n\n const startColumn = this.columnAtPoint(\n columns,\n this.interaction.startX,\n this.interaction.startY,\n );\n const currentColumn = this.columnAtPoint(columns, ev.clientX, ev.clientY);\n const startIndex = startColumn ?? 0;\n const currentIndex = currentColumn ?? startIndex;\n const rect = (columns[currentIndex] ?? columns[0]).getBoundingClientRect();\n const startRect = (columns[startIndex] ?? columns[0]).getBoundingClientRect();\n const startMinute = this.snapMinutes(\n ((this.interaction.startY - startRect.top) / HALF_HOUR_HEIGHT) * 30,\n );\n const currentMinute = this.snapMinutes(((ev.clientY - rect.top) / HALF_HOUR_HEIGHT) * 30);\n return { days: currentIndex - startIndex, minutes: currentMinute - startMinute };\n }\n\n private columnAtPoint(columns: HTMLElement[], x: number, y: number): number | null {\n const index = columns.findIndex((column) => {\n const rect = column.getBoundingClientRect();\n return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n });\n return index < 0 ? null : index;\n }\n\n private snapMinutes(minutes: number): number {\n return Math.max(0, Math.min(24 * 60, Math.round(minutes / 30) * 30));\n }\n\n private applyEventDelta(\n source: MsEvents,\n type: CalendarEventInteractionType,\n deltaDays: number,\n deltaMinutes: number,\n ): MsEvents {\n const normalized = this.normalizeEvent(source);\n let start = new Date(normalized.start);\n let end = new Date(normalized.end);\n\n if (type === 'move') {\n start = this.addMinutes(this.addDays(start, deltaDays), deltaMinutes);\n end = this.addMinutes(this.addDays(end, deltaDays), deltaMinutes);\n } else if (type === 'resize-start') {\n start = this.addMinutes(this.addDays(start, deltaDays), deltaMinutes);\n if (start.getTime() > end.getTime() - MIN_EVENT_MINUTES * 60_000) {\n start = new Date(end.getTime() - MIN_EVENT_MINUTES * 60_000);\n }\n } else {\n end = this.addMinutes(this.addDays(end, deltaDays), deltaMinutes);\n if (end.getTime() < start.getTime() + MIN_EVENT_MINUTES * 60_000) {\n end = new Date(start.getTime() + MIN_EVENT_MINUTES * 60_000);\n }\n }\n\n return { ...source, start, end };\n }\n\n private addDays(date: Date, days: number): Date {\n const d = new Date(date);\n d.setDate(d.getDate() + days);\n return d;\n }\n\n private addMinutes(date: Date, minutes: number): Date {\n return new Date(date.getTime() + minutes * 60_000);\n }\n\n private isWithinBounds(event: MsEvents): boolean {\n const n = this.normalizeEvent(event);\n if (this.minDate && compareDate(n.start, this.minDate) < 0) return false;\n if (this.maxDate && compareDate(n.end, this.maxDate) > 0) return false;\n return true;\n }\n\n private sameEvent(a: MsEvents, b: MsEvents): boolean {\n return a.id != null && b.id != null ? a.id === b.id : a === b;\n }\n\n private sameEventValue(a: MsEvents, b: MsEvents): boolean {\n const aa = this.normalizeEvent(a);\n const bb = this.normalizeEvent(b);\n return aa.start.getTime() === bb.start.getTime() && aa.end.getTime() === bb.end.getTime();\n }\n\n private startOfDay(date: Date): Date {\n const d = new Date(date);\n d.setHours(0, 0, 0, 0);\n return d;\n }\n\n private endOfDay(date: Date): Date {\n const d = new Date(date);\n d.setHours(23, 59, 59, 999);\n return d;\n }\n\n private readonly defaultHeight = 600;\n minHeight = this.defaultHeight;\n}\n","<div class=\"wrapper\" [class.is-interacting]=\"!!interaction\">\n <div class=\"header\">\n <div class=\"nxt-prv-buttons\">\n <button type=\"button\" class=\"previous dtp-btn\" (click)=\"previous()\" title=\"Previous\">\n <ng-template\n [ngTemplateOutlet]=\"\n _config.previousButtonTemplate || defaultPreviousBTNTemplate\n \"></ng-template>\n </button>\n @if (_config.todayButton) {\n <button type=\"button\" class=\"today dtp-btn\" (click)=\"gotoToday()\">\n {{ localize().today }}\n </button>\n }\n <button type=\"button\" class=\"next dtp-btn\" (click)=\"next()\" title=\"Next\">\n <ng-template\n [ngTemplateOutlet]=\"_config.nextButtonTemplate || defaultNextBTNTemplate\"></ng-template>\n </button>\n </div>\n\n <div class=\"current-date\" aria-live=\"polite\">{{ headerText }}</div>\n\n <div class=\"view-mode\">\n <button\n type=\"button\"\n class=\"dtp-btn\"\n (click)=\"changeView('month')\"\n [class.active]=\"view === 'month'\">\n {{ localize().month }}\n </button>\n <button\n type=\"button\"\n class=\"dtp-btn\"\n (click)=\"changeView('week')\"\n [class.active]=\"view === 'week'\">\n {{ localize().week }}\n </button>\n <button\n type=\"button\"\n class=\"dtp-btn\"\n (click)=\"changeView('day')\"\n [class.active]=\"view === 'day'\">\n {{ localize().day }}\n </button>\n <button\n type=\"button\"\n class=\"dtp-btn\"\n (click)=\"changeView('event')\"\n [class.active]=\"view === 'event'\">\n {{ localize().event }}\n </button>\n </div>\n </div>\n\n <div class=\"calendar\" #calendarWrapper>\n @switch (view) {\n @case ('month') {\n <ul class=\"weeks\">\n @for (w of weeks; track $index) {\n <li>{{ w }}</li>\n }\n </ul>\n\n <div class=\"month-grid\" [style.minHeight.px]=\"minHeight\">\n @for (row of monthEventRows; track $index; let rowIndex = $index) {\n <div class=\"month-row\">\n @for (\n item of viewDays.slice(rowIndex * 7, rowIndex * 7 + 7);\n track item.date?.getTime() ?? $index\n ) {\n <button\n type=\"button\"\n class=\"month-day\"\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectDay($event, item)\">\n <span class=\"day-number\">{{ item.day }}</span>\n </button>\n }\n\n <div class=\"month-event-layer\" aria-live=\"polite\">\n @for (event of row; track event.id ?? event.start.getTime() ?? $index) {\n <button\n type=\"button\"\n class=\"month-event\"\n [class.continues-before]=\"event.continuesBefore\"\n [class.continues-after]=\"event.continuesAfter\"\n [class.event-start]=\"event.isStart\"\n [class.event-end]=\"event.isEnd\"\n [class.is-dragging]=\"\n interaction?.source === event ||\n (interaction?.source?.id != null && interaction?.source?.id === event.id)\n \"\n [style.gridColumn]=\"event.startColumn + 1 + ' / ' + (event.endColumn + 2)\"\n [style.gridRow]=\"event.lane + 1\"\n [style.background]=\"event.backgroundColor || event.color || null\"\n [style.borderColor]=\"event.borderColor || event.color || null\"\n [style.color]=\"event.textColor || null\"\n [title]=\"event.title || ''\"\n (pointerdown)=\"startMonthEventInteraction($event, event)\"\n (click)=\"\n onclickEvent($event, { date: event.start, day: 0, active: true }, event)\n \">\n @if (event.isStart) {\n <span class=\"event-title\">{{ event.title || 'Untitled event' }}</span>\n } @else {\n <span class=\"event-title continuation-title\">{{ event.title || '' }}</span>\n }\n\n @if (event.isStart) {\n <span\n class=\"resize-handle resize-start\"\n title=\"Resize start\"\n (pointerdown)=\"\n startMonthEventInteraction($event, event, 'resize-start')\n \"></span>\n }\n @if (event.isEnd) {\n <span\n class=\"resize-handle resize-end\"\n title=\"Resize end\"\n (pointerdown)=\"\n startMonthEventInteraction($event, event, 'resize-end')\n \"></span>\n }\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n\n @case ('week') {\n <ng-container [ngTemplateOutlet]=\"timedCalendar\"></ng-container>\n }\n\n @case ('day') {\n <ng-container [ngTemplateOutlet]=\"timedCalendar\"></ng-container>\n }\n\n @case ('event') {\n <div class=\"event-list\">\n @if (eventViewItems.length) {\n @for (item of eventViewItems; track item.event.id ?? item.start.getTime()) {\n <button\n type=\"button\"\n class=\"event-list-item\"\n (click)=\"\n onclickEvent($event, { date: item.start, day: 0, active: true }, item.event)\n \">\n <span\n class=\"event-dot\"\n [style.background]=\"\n item.event.backgroundColor || item.event.color || null\n \"></span>\n <span class=\"event-copy\">\n <strong>{{ item.event.title || 'Untitled event' }}</strong>\n <small>\n {{ formatEventDate(item.start) }}\n @if (item.end.getTime() !== item.start.getTime()) {\n – {{ formatEventDate(item.end) }}\n }\n </small>\n </span>\n </button>\n }\n } @else {\n <div class=\"empty-events\">No events for this month.</div>\n }\n </div>\n }\n }\n </div>\n</div>\n\n<ng-template #timedCalendar>\n <div class=\"timed-calendar\">\n <div\n class=\"timed-header\"\n [style.gridTemplateColumns]=\"'64px repeat(' + weekDays.length + ', minmax(0, 1fr))'\">\n <div class=\"corner\"></div>\n @for (day of weekDays; track day.date.getTime()) {\n <button\n type=\"button\"\n class=\"day-header\"\n [class.today]=\"day.isToday\"\n (click)=\"selectDay($event, { date: day.date, day: 0, active: true })\">\n <span>{{ day.label }}</span>\n <strong>{{ day.dayNumber }}</strong>\n </button>\n }\n </div>\n\n <div\n class=\"all-day-row\"\n [style.gridTemplateColumns]=\"'64px repeat(' + weekDays.length + ', minmax(0, 1fr))'\">\n <div class=\"all-day-label\">All day</div>\n @for (day of weekDays; track day.date.getTime(); let i = $index) {\n <div class=\"all-day-cell\">\n @for (\n event of allDayByColumn[i];\n track event.id ?? event.title ?? event.start.getTime()\n ) {\n <button\n type=\"button\"\n class=\"timed-event all-day-event\"\n [class.continues-before]=\"event.continuesBefore\"\n [class.continues-after]=\"event.continuesAfter\"\n [style.background]=\"event.backgroundColor || event.color || null\"\n [style.borderColor]=\"event.borderColor || event.color || null\"\n [style.color]=\"event.textColor || null\"\n [title]=\"event.title || ''\"\n (pointerdown)=\"startTimedEventInteraction($event, event)\"\n (click)=\"onTimedEventClick($event, event, day.date)\">\n <span>{{ event.title || 'Untitled event' }}</span>\n @if (event.isStart) {\n <span\n class=\"resize-handle resize-start\"\n (pointerdown)=\"startTimedEventInteraction($event, event, 'resize-start')\"></span>\n }\n @if (event.isEnd) {\n <span\n class=\"resize-handle resize-end\"\n (pointerdown)=\"startTimedEventInteraction($event, event, 'resize-end')\"></span>\n }\n </button>\n }\n </div>\n }\n </div>\n\n <div\n class=\"time-grid\"\n [style.gridTemplateColumns]=\"'64px repeat(' + weekDays.length + ', minmax(0, 1fr))'\">\n <div class=\"time-axis\">\n @for (minutes of timeSlots; track minutes) {\n <div class=\"time-label\" [style.top.px]=\"(minutes / 60) * hourHeight\">\n @if (minutes % 60 === 0) {\n {{ formatTime(minutes) }}\n }\n </div>\n }\n </div>\n\n @for (day of weekDays; track day.date.getTime()) {\n <div class=\"day-column\">\n @for (minutes of timeSlots; track minutes) {\n <div class=\"time-slot\" [class.hour]=\"minutes % 60 === 0\"></div>\n }\n\n @for (event of day.events; track event.id ?? event.title ?? event.start.getTime()) {\n <button\n type=\"button\"\n class=\"timed-event\"\n [class.continues-before]=\"event.continuesBefore\"\n [class.continues-after]=\"event.continuesAfter\"\n [style.top.px]=\"event.top\"\n [style.height.px]=\"event.height\"\n [style.insetInlineStart.%]=\"event.column * (100 / event.columnCount)\"\n [style.width.%]=\"100 / event.columnCount - 1\"\n [style.background]=\"event.backgroundColor || event.color || null\"\n [style.borderColor]=\"event.borderColor || event.color || null\"\n [style.color]=\"event.textColor || null\"\n [title]=\"event.title || ''\"\n (pointerdown)=\"startTimedEventInteraction($event, event)\"\n (click)=\"onTimedEventClick($event, event, day.date)\">\n <strong>{{ event.title || 'Untitled event' }}</strong>\n @if (event.height >= 42) {\n <small>\n {{ formatTime(event.start.getHours() * 60 + event.start.getMinutes()) }}\n </small>\n }\n @if (event.isStart) {\n <span\n class=\"resize-handle resize-start\"\n (pointerdown)=\"startTimedEventInteraction($event, event, 'resize-start')\"></span>\n }\n @if (event.isEnd) {\n <span\n class=\"resize-handle resize-end\"\n (pointerdown)=\"startTimedEventInteraction($event, event, 'resize-end')\"></span>\n }\n </button>\n }\n </div>\n }\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultPreviousBTNTemplate>\n <svg width=\"15px\" height=\"30px\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M224 480c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l169.4 169.4c12.5 12.5 12.5 32.75 0 45.25C240.4 476.9 232.2 480 224 480z\" />\n </svg>\n</ng-template>\n\n<ng-template #defaultNextBTNTemplate>\n <svg width=\"15px\" height=\"30px\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\" />\n </svg>\n</ng-template>\n","import { Provider } from '@angular/core';\nimport { DATE_ADAPTERS, DateAdapterRegistration, DEFAULT_DATE_ADAPTERS } from './adapters/consts';\n\nfunction dedupeAdapters(adapters: DateAdapterRegistration[]): DateAdapterRegistration[] {\n return Array.from(new Map(adapters.map((a) => [a.locale, a])).values());\n}\n\nexport function provideDateAdapters(...additional: DateAdapterRegistration[]): Provider[] {\n const all = dedupeAdapters([...DEFAULT_DATE_ADAPTERS, ...additional]);\n return all.map((adapter) => ({\n provide: DATE_ADAPTERS,\n multi: true,\n useValue: adapter,\n }));\n}\n","/**\n * A date range used by ngx-kit date range picker.\n *\n * `end` is null while the user is selecting the second date.\n */\nexport interface NgxDateRange<T = Date> {\n start: T | null;\n end: T | null;\n}\n\nexport function createDateRange<T = Date>(\n start: T | null = null,\n end: T | null = null,\n): NgxDateRange<T> {\n return { start, end };\n}\n","import { MsEventViewer } from './events';\n\nexport class DateModel<InputDate = Date> {\n date?: InputDate;\n active?: boolean;\n isToday?: boolean;\n selected?: boolean;\n}\n\nexport class DateViewYear extends DateModel {\n year!: number;\n}\n\nexport class DateViewMonth extends DateModel {\n month!: number;\n displayMonth!: string;\n}\n\nexport class DateViewDay extends DateModel {\n day!: number;\n events?: MsEventViewer[];\n inRange?: boolean;\n rangeStart?: boolean;\n rangeEnd?: boolean;\n inRangePreview?: boolean;\n}\n\nexport class DateViewWeek extends DateModel {\n time!: number;\n weeks: string[] = [];\n displayTime!: string;\n}\n\nexport interface CalendarMonthEventSegment extends MsEventViewer {\n start: Date;\n end: Date;\n row: number;\n startColumn: number;\n endColumn: number;\n lane: number;\n continuesBefore: boolean;\n continuesAfter: boolean;\n isStart: boolean;\n isEnd: boolean;\n}\n\nexport interface CalendarDayColumn {\n date: Date;\n label: string;\n dayNumber: string;\n isToday: boolean;\n events: CalendarTimedEvent[];\n}\n\nexport interface CalendarTimedEvent extends MsEventViewer {\n start: Date;\n end: Date;\n top: number;\n height: number;\n allDay: boolean;\n column: number;\n columnCount: number;\n}\n","import { compareDate, deserialize, isValid } from './date.helper';\nimport { NgxDateRange } from '../models/range';\n\nexport function normalizeDateRange(\n value: NgxDateRange<Date> | readonly [Date | null, Date | null] | null | undefined,\n): NgxDateRange<Date> {\n if (Array.isArray(value)) {\n return normalizeDateRange({ start: value[0], end: value[1] });\n }\n\n const start = deserialize((value as any)?.start);\n const end = deserialize((value as any)?.end);\n\n if (start && end && compareDate(start, end) > 0) {\n return { start: end, end: start };\n }\n\n return { start, end };\n}\n\nexport function isCompleteDateRange(range: NgxDateRange<Date>): boolean {\n return !!range.start && !!range.end && isValid(range.start) && isValid(range.end);\n}\n\nexport function isDateInRange(date: Date, range: NgxDateRange<Date>): boolean {\n if (!range.start || !range.end) return false;\n return compareDate(date, range.start) >= 0 && compareDate(date, range.end) <= 0;\n}\n\nexport function isDateInPreviewRange(\n date: Date,\n start: Date | null,\n previewEnd: Date | null,\n): boolean {\n if (!start || !previewEnd) return false;\n\n const from = compareDate(start, previewEnd) <= 0 ? start : previewEnd;\n const to = compareDate(start, previewEnd) <= 0 ? previewEnd : start;\n\n return compareDate(date, from) >= 0 && compareDate(date, to) <= 0;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n forwardRef,\n inject,\n input,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { DateAdapterRegistry } from '../../adapters/date-adapter-registry';\nimport { compareDate, deserialize, isValid, sameDate } from '../../helpers/date.helper';\nimport {\n isCompleteDateRange,\n isDateInPreviewRange,\n isDateInRange,\n normalizeDateRange,\n} from '../../helpers/date-range.helper';\nimport { DateViewDay, DateViewMonth, DateViewYear } from '../../models/date';\nimport { DatePickerView } from '../../models/view';\nimport { NgxDateRange } from '../../models/range';\nimport { NgxDatePickerConfig } from '../config';\nimport { NgxDatePickerBase } from '../ngx-date-picker-base.component';\nimport { NGX_CALENDAR_LOCALIZATION, NgxCalendarLocalization } from '../../tokens/localization';\n\n@Component({\n selector: 'ngx-date-range-picker',\n standalone: true,\n templateUrl: './ngx-date-range-picker.component.html',\n styleUrls: ['./ngx-date-range-picker.component.scss'],\n imports: [CommonModule],\n providers: [\n DateAdapterRegistry,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxDateRangePickerComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => NgxDateRangePickerComponent),\n multi: true,\n },\n ],\n})\nexport class NgxDateRangePickerComponent\n extends NgxDatePickerBase\n implements ControlValueAccessor, Validator, OnInit\n{\n defaultLocalization = inject(NGX_CALENDAR_LOCALIZATION);\n localize = input<NgxCalendarLocalization>(this.defaultLocalization);\n config = new NgxDatePickerConfig();\n\n @Input() set locale(value: string) {\n this._locale = value || 'en';\n this.adapter = this.dateAdapterRegistry.resolve(this._locale);\n this.init();\n }\n\n @Input() set min(value: Date | null | undefined) {\n const next = deserialize(value);\n if (!sameDate(next, this.minDate)) {\n this.minDate = next;\n this._validatorOnChange();\n this.renderِDatePicker(this.view);\n }\n }\n\n @Input() set max(value: Date | null | undefined) {\n const next = deserialize(value);\n if (!sameDate(next, this.maxDate)) {\n this.maxDate = next;\n this._validatorOnChange();\n this.renderِDatePicker(this.view);\n }\n }\n\n @Input() view: DatePickerView = 'day';\n\n @Output() rangeChange = new EventEmitter<NgxDateRange<Date>>();\n @Output() change = new EventEmitter<NgxDateRange<Date>>();\n\n range: NgxDateRange<Date> = { start: null, end: null };\n hoverDate: Date | null = null;\n\n weekDays: { min: string; name: string }[] = [];\n calendarHeader = '';\n\n protected _onChange = (_value: NgxDateRange<Date>) => {};\n protected _onTouched = () => {};\n protected _validatorOnChange = () => {};\n isDisabled = false;\n\n ngOnInit(): void {\n this.init();\n }\n\n updateConfig(value: NgxDatePickerConfig) {\n this.config = { ...new NgxDatePickerConfig(), ...value };\n }\n\n writeValue(value: NgxDateRange<Date> | readonly [Date | null, Date | null] | null): void {\n this.range = normalizeDateRange(value);\n this.init();\n }\n\n registerOnChange(fn: (value: NgxDateRange<Date>) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this.isDisabled = disabled;\n }\n\n validate(_control: AbstractControl): ValidationErrors | null {\n const { start, end } = this.range;\n\n if (start && !isValid(start)) return { invalid: true };\n if (end && !isValid(end)) return { invalid: true };\n\n if (start && this.minDate && compareDate(start, this.minDate) < 0) {\n return { min: this.minDate };\n }\n if (start && this.maxDate && compareDate(start, this.maxDate) > 0) {\n return { max: this.maxDate };\n }\n if (end && this.minDate && compareDate(end, this.minDate) < 0) {\n return { min: this.minDate };\n }\n if (end && this.maxDate && compareDate(end, this.maxDate) > 0) {\n return { max: this.maxDate };\n }\n if (start && end && compareDate(start, end) > 0) {\n return { range: true };\n }\n\n return null;\n }\n\n override renderِDatePicker(view: DatePickerView) {\n super.renderِDatePicker(view, undefined, [], () => {\n this.applyRangeState();\n const start = this.range.start;\n const end = this.range.end;\n const startText = start\n ? this.adapter.formatDate(this.adapter.toLocale(start), 'EEEE, d MMMM, yyyy')\n : '';\n const endText = end\n ? this.adapter.formatDate(this.adapter.toLocale(end), 'EEEE, d MMMM, yyyy')\n : '';\n\n this.calendarHeader = endText\n ? `${startText} – ${endText}`\n : startText || 'Select date range';\n });\n }\n\n private init() {\n this.months = this.adapter.longMonths;\n const shortDays = this.adapter.shortDays;\n const longDays = this.adapter.longDays;\n this.weekDays = shortDays.map((min, i) => ({ min, name: longDays[i] }));\n\n const anchor = this.range.end || this.range.start || this.adapter.getDate(this.adapter.today());\n const locale = this.adapter.toLocale(anchor);\n this.currYear = locale.year;\n this.currMonth = locale.month ?? 0;\n this.renderِDatePicker(this.view);\n }\n\n changeView(view: DatePickerView) {\n this.view = view;\n this.renderِDatePicker(view);\n }\n\n gotoToday() {\n const today = this.adapter.today();\n const date = today.date ?? this.adapter.getDate(today);\n this.currYear = today.year;\n this.currMonth = today.month ?? 0;\n\n // Keep an existing completed range; today is only a navigation shortcut.\n if (!this.range.start || this.range.end) {\n this.range = { start: date, end: null };\n this.emitValue();\n }\n\n this.changeView('day');\n }\n next() {\n if (this.view === 'year') {\n this.currYear += 20;\n } else if (this.view === 'month') {\n this.currYear++;\n } else {\n this.currMonth++;\n }\n if (this.currMonth < 0 || this.currMonth > 11) {\n let date = new Date(this.currYear, this.currMonth);\n this.currYear = date.getFullYear();\n this.currMonth = date.getMonth();\n }\n\n this.renderِDatePicker(this.view);\n }\n\n previous() {\n if (this.view === 'year') {\n this.currYear -= 20;\n } else if (this.view === 'month') {\n this.currYear--;\n } else {\n this.currMonth--;\n }\n if (this.currMonth < 0 || this.currMonth > 11) {\n let date = new Date(this.currYear, this.currMonth);\n this.currYear = date.getFullYear();\n this.currMonth = date.getMonth();\n }\n\n this.renderِDatePicker(this.view);\n }\n selectDay(event: Event, item: DateViewDay) {\n event.stopPropagation();\n if (!item.active || !item.date || this.isDisabled) return;\n\n const date = item.date;\n\n if (!this.range.start || this.range.end) {\n this.range = { start: date, end: null };\n } else {\n this.range =\n compareDate(date, this.range.start) < 0\n ? { start: date, end: this.range.start }\n : { start: this.range.start, end: date };\n\n this.hoverDate = null;\n }\n\n this.applyRangeState();\n this.emitValue();\n\n if (isCompleteDateRange(this.range)) {\n this._onTouched();\n }\n }\n\n selectMonth(event: Event, item: DateViewMonth) {\n event.stopPropagation();\n if (item.active) {\n this.currMonth = item.month;\n this.changeView('day');\n }\n }\n\n selectYear(event: Event, item: DateViewYear) {\n event.stopPropagation();\n if (item.active) {\n this.currYear = item.year;\n this.changeView('month');\n }\n }\n\n onDayEnter(item: DateViewDay) {\n if (this.range.start && !this.range.end && item.active) {\n this.hoverDate = item.date ?? null;\n this.applyRangeState();\n }\n }\n\n onDayLeave() {\n if (this.hoverDate) {\n this.hoverDate = null;\n this.applyRangeState();\n }\n }\n\n clear() {\n this.range = { start: null, end: null };\n this.hoverDate = null;\n this.applyRangeState();\n this.emitValue();\n this._onTouched();\n }\n\n private applyRangeState() {\n for (const item of this.viewDays) {\n if (!item.date) continue;\n\n item.rangeStart = !!this.range.start && sameDate(item.date, this.range.start);\n item.rangeEnd = !!this.range.end && sameDate(item.date, this.range.end);\n item.inRange = isDateInRange(item.date, this.range);\n item.inRangePreview =\n !this.range.end && isDateInPreviewRange(item.date, this.range.start, this.hoverDate);\n\n item.selected = !!item.rangeStart || !!item.rangeEnd;\n }\n }\n\n private emitValue() {\n const value = { ...this.range };\n this._onChange(value);\n this.rangeChange.emit(value);\n this.change.emit(value);\n }\n\n stopPagination(event: Event) {\n event.stopPropagation();\n }\n}\n","<div class=\"wrapper\" (click)=\"stopPagination($event)\">\n <div class=\"header\">\n <div class=\"calendar-icon\" aria-hidden=\"true\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M16 2V6M8 2V6\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n <path\n d=\"M13 4H11C7.22876 4 5.34315 4 4.17157 5.17157C3 6.34315 3 8.22876 3 12V14C3 17.7712 3 19.6569 4.17157 20.8284C5 22 7.22876 22 11 22H13C16.7712 22 18.6569 22 19.8284 20.8284C21 17.7712 21 14V12C21 8.22876 19.8284 5.17157 19.8284 5.17157C4 4 13 4 13 4Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\" />\n <path d=\"M3 10H21\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n </svg>\n </div>\n <div class=\"header-copy\">\n <div class=\"header-title\">Date range</div>\n <div class=\"header-value\">{{ calendarHeader }}</div>\n </div>\n </div>\n\n <div class=\"sub-header\">\n <button type=\"button\" class=\"nav-button\" id=\"prev\" (click)=\"previous()\" aria-label=\"Previous\">\n <ng-template\n [ngTemplateOutlet]=\"\n config.previousButtonTemplate || defaultPreviousBTNTemplate\n \"></ng-template>\n </button>\n\n <button type=\"button\" class=\"current-date\" (click)=\"changeView('month')\">\n <span>{{ displayMonth }}</span>\n <span>{{ currYear }}</span>\n </button>\n\n <button type=\"button\" class=\"nav-button\" id=\"next\" (click)=\"next()\" aria-label=\"Next\">\n <ng-template\n [ngTemplateOutlet]=\"config.nextButtonTemplate || defaultNextBTNTemplate\"></ng-template>\n </button>\n </div>\n\n <div class=\"calendar\">\n @if (view === 'day') {\n <ul class=\"weeks\">\n @for (w of weekDays; track $index) {\n <li [title]=\"w.name\">{{ w.min }}</li>\n }\n </ul>\n\n <ul class=\"days\">\n @for (item of viewDays; track $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.in-range]=\"item.inRange\"\n [class.in-range-preview]=\"item.inRangePreview\"\n [class.range-start]=\"item.rangeStart\"\n [class.range-end]=\"item.rangeEnd\"\n [class.range-single]=\"item.rangeStart && item.rangeEnd\"\n (mouseenter)=\"onDayEnter(item)\"\n (mouseleave)=\"onDayLeave()\"\n (click)=\"selectDay($event, item)\"\n [attr.aria-selected]=\"\n item.rangeStart || item.rangeEnd || item.inRange || item.inRangePreview\n \">\n <span class=\"day-number\">{{ item.day }}</span>\n </li>\n }\n </ul>\n } @else if (view === 'month') {\n <ul class=\"months\">\n @for (item of viewMonths; track $index; let i = $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectMonth($event, item)\">\n {{ i + 1 }}.{{ item.displayMonth }}\n </li>\n }\n </ul>\n } @else {\n <ul class=\"years\">\n @for (item of viewYears; track $index) {\n <li\n [class.de-active]=\"!item.active\"\n [class.today]=\"item.isToday\"\n [class.selected]=\"item.selected\"\n (click)=\"selectYear($event, item)\">\n {{ item.year }}\n </li>\n }\n </ul>\n }\n\n <div class=\"calendar-footer\">\n @if (config.clearButton) {\n <button type=\"button\" (click)=\"clear()\">{{ localize().clear }}</button>\n }\n @if (config.todayButton) {\n <button type=\"button\" (click)=\"gotoToday()\">{{ localize().today }}</button>\n }\n </div>\n </div>\n</div>\n\n<ng-template #defaultPreviousBTNTemplate>\n <svg width=\"14\" height=\"28\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M224 480c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l169.4 169.4c12.5 12.5 12.5 32.75 0 45.25C240.4 476.9 232.2 480 224 480z\" />\n </svg>\n</ng-template>\n\n<ng-template #defaultNextBTNTemplate>\n <svg width=\"14\" height=\"28\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\" />\n </svg>\n</ng-template>\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n inject,\n Input,\n Output,\n Renderer2,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n} from '@angular/forms';\nimport { OverlayRef, OverlayService } from 'ngx-kit/shared';\nimport { DateAdapterRegistry } from '../adapters/date-adapter-registry';\nimport { NgxDateRange } from '../models/range';\nimport { NgxDatePickerConfig } from '../components/config';\nimport { NgxDateRangePickerComponent } from '../components/date-range-picker/ngx-date-range-picker.component';\nimport { compareDate, deserialize } from '../helpers/date.helper';\nimport { normalizeDateRange } from '../helpers/date-range.helper';\nimport { IDateAdapter } from '../adapters/IAdapter';\n\n@Directive({\n selector: 'input[ngxInputDateRangePicker]',\n exportAs: 'ngxInputDateRangePicker',\n host: {\n class: 'ngx-datepicker-input',\n '[attr.readOnly]': 'true',\n },\n providers: [\n DateAdapterRegistry,\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxInputDateRangePicker),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => NgxInputDateRangePicker),\n multi: true,\n },\n ],\n})\nexport class NgxInputDateRangePicker implements ControlValueAccessor, Validator {\n protected readonly dateAdapterRegistry = inject(DateAdapterRegistry);\n protected readonly overlayService = inject(OverlayService);\n protected readonly viewContainerRef = inject(ViewContainerRef);\n protected readonly renderer = inject(Renderer2);\n\n @Input() openOnClick = true;\n @Input() displayFormat = 'yyyy/MM/dd';\n @Input() rangeSeparator = ' – ';\n private _locale = 'en';\n @Input()\n set locale(value: string) {\n this._locale = value || 'en';\n this.adapter = this.dateAdapterRegistry.resolve(this._locale);\n this.formatValue();\n }\n get locale() {\n return this._locale;\n }\n\n @Input('min') set setMin(value: Date | null | undefined) {\n this.min = deserialize(value);\n this._validatorOnChange();\n }\n\n @Input('max') set setMax(value: Date | null | undefined) {\n this.max = deserialize(value);\n this._validatorOnChange();\n }\n\n @Input() config = new NgxDatePickerConfig();\n @Output() change = new EventEmitter<NgxDateRange<Date>>();\n\n private min: Date | null = null;\n private max: Date | null = null;\n private value: NgxDateRange<Date> = { start: null, end: null };\n private pickerRef?: OverlayRef<NgxDateRangePickerComponent>;\n private isDisabled = false;\n private adapter!: IDateAdapter;\n\n private _onChange = (_value: NgxDateRange<Date>) => {};\n private _onTouched = () => {};\n private _validatorOnChange = () => {};\n\n constructor(private readonly el: ElementRef<HTMLInputElement>) {\n this.adapter = this.dateAdapterRegistry.resolve(this.locale);\n }\n\n ngOnChanges(): void {\n this.adapter = this.dateAdapterRegistry.resolve(this.locale);\n this.formatValue();\n }\n\n @HostListener('click', ['$event'])\n onClick(event: Event) {\n if (!this.openOnClick || this.isDisabled) return;\n event.preventDefault();\n event.stopPropagation();\n this.toggle();\n }\n\n @HostListener('blur')\n onBlur() {\n this._onTouched();\n }\n\n writeValue(value: NgxDateRange<Date> | readonly [Date | null, Date | null] | null): void {\n this.value = normalizeDateRange(value);\n this.formatValue();\n }\n\n registerOnChange(fn: (value: NgxDateRange<Date>) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this.isDisabled = disabled;\n this.renderer.setProperty(this.el.nativeElement, 'disabled', disabled);\n }\n\n toggle() {\n if (this.isDisabled) return;\n\n if (this.pickerRef) {\n this.destroyDatePicker();\n return;\n }\n\n this.adapter = this.dateAdapterRegistry.resolve(this.locale);\n\n this.pickerRef = this.overlayService.open({\n anchor: this.el.nativeElement,\n component: NgxDateRangePickerComponent,\n viewContainerRef: this.viewContainerRef,\n alignment: 'center',\n placement: 'bottom',\n margin: 4,\n configure: (instance) => {\n instance.locale = this.locale;\n instance.min = this.min;\n instance.max = this.max;\n instance.updateConfig(this.config);\n instance.writeValue(this.value);\n\n instance.rangeChange.subscribe((value) => {\n this.value = normalizeDateRange(value);\n this.formatValue();\n this._onChange(this.value);\n this.change.emit(this.value);\n\n if (this.value.start && this.value.end) {\n this._onTouched();\n this.destroyDatePicker();\n }\n });\n },\n onClosed: () => {\n this.pickerRef = undefined;\n },\n });\n }\n\n validate(_control: AbstractControl): ValidationErrors | null {\n const { start, end } = this.value;\n\n if (start && this.min && compareDate(start, this.min) < 0) {\n return { min: this.min };\n }\n if (end && this.max && compareDate(end, this.max) > 0) {\n return { max: this.max };\n }\n if (start && end && compareDate(start, end) > 0) {\n return { range: true };\n }\n\n return null;\n }\n\n private formatValue() {\n const start = this.value.start;\n const end = this.value.end;\n\n const format = (value: Date | null) => {\n if (!value) return '';\n const locale = this.adapter.toLocale(value);\n return this.adapter.formatDate(locale, this.displayFormat) ?? '';\n };\n\n const startText = format(start);\n const endText = format(end);\n const value = startText && endText\n ? `${startText}${this.rangeSeparator}${endText}`\n : startText;\n\n this.renderer.setProperty(this.el.nativeElement, 'value', value);\n }\n\n private destroyDatePicker() {\n this.pickerRef?.close();\n this.pickerRef = undefined;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;MAEa,mBAAmB,CAAA;AAC9B,IAAA,sBAAsB;AACtB,IAAA,kBAAkB;AAClB,IAAA,qBAAqB;IAErB,WAAW,GAAG,IAAI;IAClB,WAAW,GAAG,IAAI;AACnB;;ACTD;;;;AAIG;AACH,MAAM,cAAc,GAClB,oFAAoF;AAEhF,SAAU,WAAW,CAAC,KAAU,EAAA;AACpC,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI;QACb;;;AAGA,QAAA,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC9B,YAAA,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,OAAO,IAAI;YACb;QACF;IACF;AACA,IAAA,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;AAClB,QAAA,OAAO,KAAK;IACd;SAAO;AACL,QAAA,OAAO,IAAI;IACb;AACF;AAEM,SAAU,OAAO,CAAC,GAAQ,EAAA;AAC9B,IAAA,OAAO,GAAG,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;AACrD;AAEA;;;;;;AAMG;AACG,SAAU,QAAQ,CAAC,KAAkB,EAAE,MAAmB,EAAA;AAC9D,IAAA,IAAI,KAAK,IAAI,MAAM,EAAE;AACnB,QAAA,IAAI,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;AACjC,QAAA,IAAI,UAAU,IAAI,WAAW,EAAE;AAC7B,YAAA,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC;QACpC;QACA,OAAO,UAAU,IAAI,WAAW;IAClC;IACA,OAAO,KAAK,IAAI,MAAM;AACxB;AAEA;;;;;;AAMG;AACG,SAAU,WAAW,CAAC,KAAmB,EAAE,MAAoB,EAAA;AACnE,IAAA,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,CAAC;IAC/B,QACE,KAAK,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE;AAC1C,QAAA,KAAK,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE;QACpC,KAAK,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE;AAEtC;AAEA;;;;;;;AAOG;SACa,SAAS,CAAC,IAAkB,EAAE,GAAiB,EAAE,GAAiB,EAAA;IAChF,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;QACrC,OAAO,CAAC,CAAC;IACX;IACA,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;AACrC,QAAA,OAAO,CAAC;IACV;AACA,IAAA,OAAO,CAAC;AACV;AAEA;AACA;;AAEG;AACG,SAAU,YAAY,CAAC,KAAW,EAAE,MAAY,EAAA;AACpD,IAAA,OAAO,KAAK,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE;AAC3F;SACgB,UAAU,CAAC,IAAU,EAAE,GAAiB,EAAE,GAAiB,EAAA;IACzE,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;QACtC,OAAO,CAAC,CAAC;IACX;IACA,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;AACtC,QAAA,OAAO,CAAC;IACV;AACA,IAAA,OAAO,CAAC;AACV;AACA;AACA;;AAEG;AACG,SAAU,WAAW,CAAC,KAAW,EAAE,MAAY,EAAA;IACnD,OAAO,KAAK,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE;AACnD;SACgB,SAAS,CAAC,IAAU,EAAE,GAAiB,EAAE,GAAiB,EAAA;IACxE,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;QACrC,OAAO,CAAC,CAAC;IACX;IACA,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;AACrC,QAAA,OAAO,CAAC;IACV;AACA,IAAA,OAAO,CAAC;AACV;;ACrHA;AAIA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEM,SAAU,aAAa,CAC3B,IAAkB,EAClB,OAAO,GAAG,UAAU,EACpB,UAAoB,EACpB,QAAkB,EAAA;IAElB,IAAI,CAAC,IAAI,EAAE;AACT,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AACzB,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;AAC7B,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC;AAC3B,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;AAC9B,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC;AAChC,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC;AAChC,IAAA,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC;AACjC,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC;AAErC,IAAA,MAAM,MAAM,GAAG,MAAM,GAAG,EAAE,IAAI,EAAE;AAEhC,IAAA,MAAM,MAAM,GAA2B;AACrC,QAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;QAErB,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE7B,QAAA,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE;AAE7B,QAAA,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AAE9C,QAAA,EAAE,EAAE,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC;QAE1B,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAE;AAEzB,QAAA,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE;AAE/B,QAAA,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AAEhD,QAAA,EAAE,EAAE,WAAW,CAAC,GAAG,CAAC;AAEpB,QAAA,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE;AAEjB,QAAA,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC;AAEvB,QAAA,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE;AAEpB,QAAA,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC;AAEvB,QAAA,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE;AAEpB,QAAA,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC;AAEvB,QAAA,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE;AAEpB,QAAA,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC;AAEvB,QAAA,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE;QAEpB,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QAEjC,GAAG,EAAE,MAAM,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;KAC/B;AAED,IAAA,OAAO,OAAO,CAAC,OAAO,CACpB,gEAAgE,EAChE,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CACzB;AACH;AAEM,SAAU,WAAW,CAAC,GAAW,EAAA;IACrC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACxC;AAEA;AACA;AACA;AACA;AACA;AACA;;MC7Fa,gBAAgB,CAAA;IAC3B,WAAW,GAAG,CAAC;IACf,YAAY,GAAG,CAAC;AAChB,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO;YACL,SAAS;YACT,UAAU;YACV,OAAO;YACP,OAAO;YACP,KAAK;YACL,MAAM;YACN,MAAM;YACN,QAAQ;YACR,WAAW;YACX,SAAS;YACT,UAAU;YACV,UAAU;SACX;IACH;AACA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IAC1D;AACA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAC5C;AACA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC;IACvF;AAEA,IAAA,QAAQ,CAAC,IAAU,EAAA;QACjB,MAAM,CAAC,GAAG,IAAI;QACd,OAAO;AACL,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE;AAChB,YAAA,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE;AACnB,YAAA,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;AACrB,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE;AACtB,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;AAC1B,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;AAC1B,YAAA,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE;AACpC,YAAA,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;SACzB;IACH;IACA,KAAK,GAAA;QACH,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;IAClC;AAEA;;AAEG;IACH,eAAe,CAAC,IAAY,EAAE,KAAa,EAAA;AACzC,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE;IAC1C;AACA;;AAEG;IACH,eAAe,CAAC,IAAY,EAAE,KAAa,EAAA;AACzC,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;IAC/C;AACA;;AAEG;IACH,cAAc,CAAC,IAAY,EAAE,KAAa,EAAA;AACxC,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE;IAC1E;AACA;;AAEG;IACH,mBAAmB,CAAC,IAAY,EAAE,KAAa,EAAA;AAC7C,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;IAC3C;;AAGA;;;;AAIG;AACH,IAAA,OAAO,CAAC,IAAkB,EAAA;AACxB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AACrF,QAAA,GAAG,GAAG;aACH,KAAK,CAAC,GAAG;AACT,aAAA,GAAG,CAAC,CAAC,CAAC,KAAI;AACT,YAAA,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AACnC,QAAA,CAAC;aACA,IAAI,CAAC,GAAG,CAAC;AACZ,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,EAAE;YACnE,GAAG;gBACD,GAAG;AACH,qBAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;oBACjB,GAAG;AACH,qBAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;oBACnB,GAAG;AACH,qBAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;oBACnB,GAAG;AACH,qBAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;QAC5B;AACA,QAAA,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC;IACtB;IAEA,UAAU,CAAC,IAAkB,EAAE,MAAc,EAAA;QAC3C,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,EAAE;QACX;;;;;;;;;;;;;;;AAeA,QAAA,OAAO,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;IACpE;AACA,IAAA,cAAc,CAAC,IAAU,EAAA;AACvB,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;QACxB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtB,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC;QACtD,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC;AAC9B,QAAA,OAAO,CAAC;IACV;AAEA,IAAA,YAAY,CAAC,IAAU,EAAA;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QACnC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC1B,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAC3B,QAAA,OAAO,CAAC;IACV;IAEA,UAAU,CAAC,IAAiB,EAAE,CAAiB,EAAA;QAC7C,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,IAAI;QACb;QACA,QAAQ,CAAC;AACP,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAC3C,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACzD,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;;IAE1E;IAEA,SAAS,CAAC,IAAiB,EAAE,CAAiB,EAAA;QAC5C,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,IAAI;QACb;QACA,QAAQ,CAAC;AACP,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAC5C,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAC7D,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;;IAE1E;AACD;;ACxKK,IAAW,MAAM;AAAvB,CAAA,UAAiB,MAAM,EAAA;AACrB;;AAEE;AACW,IAAA,MAAA,CAAA,MAAM,GAAG;AACpB,QAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAC/F,QAAA,IAAI,EAAE,IAAI;KACX;AAED;;AAEE;IACF,SAAgB,SAAS,CAAC,IAAU,EAAA;;AAElC,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;QACvB,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC5B,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;QAC3B,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;;;IAG7B;AARgB,IAAA,MAAA,CAAA,SAAS,YAQxB;AAED;;AAEI;AACJ,IAAA,SAAgB,WAAW,CAAC,EAAO,EAAE,EAAO,EAAE,EAAO,EAAA;QACnD,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7B;AAFgB,IAAA,MAAA,CAAA,WAAW,cAE1B;AAED;;AAEI;AACJ,IAAA,SAAgB,kBAAkB,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAA;AACnE,QAAA,QACE,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,kBAAkB,CAAC,EAAE,EAAE,EAAE,CAAC;IAEjG;AAJgB,IAAA,MAAA,CAAA,kBAAkB,qBAIjC;AAED;;AAEI;IACJ,SAAgB,iBAAiB,CAAC,EAAO,EAAA;AACvC,QAAA,OAAO,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC;IAC7B;AAFgB,IAAA,MAAA,CAAA,iBAAiB,oBAEhC;AAED;;AAEI;AACJ,IAAA,SAAgB,kBAAkB,CAAC,EAAO,EAAE,EAAU,EAAA;QACpD,IAAI,EAAE,IAAI,CAAC;AAAE,YAAA,OAAO,EAAE;QACtB,IAAI,EAAE,IAAI,EAAE;AAAE,YAAA,OAAO,EAAE;QACvB,IAAI,iBAAiB,CAAC,EAAE,CAAC;AAAE,YAAA,OAAO,EAAE;AACpC,QAAA,OAAO,EAAE;IACX;AALgB,IAAA,MAAA,CAAA,kBAAkB,qBAKjC;AAED;;;;;AAKK;IACL,SAAgB,UAAU,CAAC,EAAU,EAAA;QACnC,IAAI,EAAE,GAAG,MAAA,CAAA,MAAM,CAAC,MAAM,EACpB,EAAE,GAAG,MAAA,CAAA,MAAM,CAAC,CAAC,CAAC,EACd,EAAE,EACF,IAAI,GAAG,CAAC,EACR,IAAI,EACJ,CAAC,EACD,CAAC;AAEH,QAAA,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,MAAA,CAAA,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC;AAElF,QAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;AAC1B,YAAA,EAAE,GAAG,MAAA,CAAA,MAAM,CAAC,CAAC,CAAC;AACd,YAAA,IAAI,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,EAAE;gBAAE;YACb,EAAE,GAAG,EAAE;QACT;AACA,QAAA,CAAC,GAAG,EAAE,GAAG,EAAE;AAEX,QAAA,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC;AAAE,YAAA,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE;AACvD,QAAA,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACjC,QAAA,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;YACf,IAAI,GAAG,CAAC;QACV;AAEA,QAAA,OAAO,IAAI;IACb;AA1BgB,IAAA,MAAA,CAAA,UAAU,aA0BzB;AAED;;;;;;;;;;;;;AAaI;AACJ,IAAA,SAAgB,MAAM,CAAC,EAAU,EAAE,WAAgB,EAAA;AACjD,QAAA,IAAI,EAAE,GAAG,MAAA,CAAA,MAAM,CAAC,MAAM,EACpB,EAAE,GAAG,EAAE,GAAG,GAAG,EACb,KAAK,GAAG,CAAC,EAAE,EACX,EAAE,GAAG,MAAA,CAAA,MAAM,CAAC,CAAC,CAAC,EACd,EAAE,EACF,IAAI,GAAG,CAAC,EACR,IAAI,EACJ,KAAK,EACL,KAAK,EACL,CAAC,EACD,CAAC;AAEH,QAAA,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,MAAA,CAAA,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC;;AAGlF,QAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;AAC1B,YAAA,EAAE,GAAG,MAAA,CAAA,MAAM,CAAC,CAAC,CAAC;AACd,YAAA,IAAI,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,EAAE;gBAAE;YACb,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YACzD,EAAE,GAAG,EAAE;QACT;AACA,QAAA,CAAC,GAAG,EAAE,GAAG,EAAE;;;QAIX,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACvD,QAAA,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC;YAAE,KAAK,IAAI,CAAC;;QAGrD,KAAK,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG;;AAGzD,QAAA,KAAK,GAAG,EAAE,GAAG,KAAK,GAAG,KAAK;;AAG1B,QAAA,IAAI,WAAW;YAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;;AAGhD,QAAA,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC;AAAE,YAAA,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE;AACvD,QAAA,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACjC,QAAA,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;YACf,IAAI,GAAG,CAAC;QACV;QAEA,OAAO;AACL,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,KAAK,EAAE,KAAK;SACb;IACH;AAnDgB,IAAA,MAAA,CAAA,MAAM,SAmDrB;AAED;;;;;;AAMI;AACJ,IAAA,SAAgB,GAAG,CAAC,EAAO,EAAE,EAAU,EAAE,EAAU,EAAA;QACjD,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC;AACxB,QAAA,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;IAC/E;AAHgB,IAAA,MAAA,CAAA,GAAG,MAGlB;AAED;;;;;;;AAOI;IACJ,SAAgB,GAAG,CAAC,GAAW,EAAA;QAC7B,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;AAClB,QAAA,EAAE,GAAG,EAAE,GAAG,GAAG,EACb,CAAC,GAAG,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,EACrB,KAAK,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAC3B,EAAE,EACF,EAAE,EACF,CAAC;;AAGH,QAAA,CAAC,GAAG,GAAG,GAAG,KAAK;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE;AACV,YAAA,IAAI,CAAC,IAAI,GAAG,EAAE;;gBAEZ,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;gBACnB,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;gBACnB,OAAO;AACL,oBAAA,EAAE,EAAE,EAAE;AACN,oBAAA,EAAE,EAAE,EAAE;AACN,oBAAA,EAAE,EAAE,EAAE;iBACP;YACH;iBAAO;;gBAEL,CAAC,IAAI,GAAG;YACV;QACF;aAAO;;YAEL,EAAE,IAAI,CAAC;YACP,CAAC,IAAI,GAAG;AACR,YAAA,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;gBAAE,CAAC,IAAI,CAAC;QAC1B;QACA,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;QACnB,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;QACnB,OAAO;AACL,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,EAAE,EAAE,EAAE;SACP;IACH;AAtCgB,IAAA,MAAA,CAAA,GAAG,MAsClB;AAED;;;;;;;;;;AAUI;AACJ,IAAA,SAAgB,GAAG,CAAC,EAAU,EAAE,EAAU,EAAE,EAAO,EAAA;QACjD,IAAI,CAAC,GACH,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;AAC7C,YAAA,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjC,EAAE;AACF,YAAA,QAAQ;AACV,QAAA,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG;AAChE,QAAA,OAAO,CAAC;IACV;AARgB,IAAA,MAAA,CAAA,GAAG,MAQlB;AAED;;;;;;;;;AASI;IACJ,SAAgB,GAAG,CAAC,GAAW,EAAA;QAC7B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACpB,QAAA,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,SAAS;QACvB,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;AAC/D,QAAA,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG;AAClC,QAAA,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;AAC5B,QAAA,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;AAC7B,QAAA,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC3C,OAAO;AACL,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,EAAE,EAAE,EAAE;SACP;IACH;AAbgB,IAAA,MAAA,CAAA,GAAG,MAalB;AAED;;;;;;AAMG;AACH,IAAA,SAAgB,WAAW,CAAC,EAAO,EAAE,EAAO,EAAE,EAAU,EAAA;AACtD,QAAA,IAAI,SAAS,GAAG,mBAAmB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;AAExD,QAAA,IAAI,kBAAkB,GAAG,SAAS,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,GAAG,CAAC,CAAC;AAC9D,QAAA,IAAI,gBAAgB,GAAG,CAAC,GAAG,kBAAkB;QAE7C,OAAO;AACL,YAAA,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,kBAAkB,CAAC,CAAC;AACnD,YAAA,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,CAAC;SAChD;IACH;AAVgB,IAAA,MAAA,CAAA,WAAW,cAU1B;AAED;;;;;;;;;;AAUG;AACH,IAAA,SAAgB,mBAAmB,CACjC,EAAO,EACP,EAAO,EACP,EAAO,EACP,CAAO,EACP,CAAO,EACP,CAAO,EACP,EAAQ,EAAA;QAER,IAAI,qBAAqB,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAEnD,QAAA,OAAO,IAAI,IAAI,CACb,qBAAqB,CAAC,EAAE,EACxB,qBAAqB,CAAC,EAAE,GAAG,CAAC,EAC5B,qBAAqB,CAAC,EAAE,EACxB,CAAC,IAAI,CAAC,EACN,CAAC,IAAI,EAAE,EACP,CAAC,IAAI,CAAC,EACN,EAAE,IAAI,CAAC,CACR;IACH;AApBgB,IAAA,MAAA,CAAA,mBAAmB,sBAoBlC;AAED;;AAEI;AAEJ,IAAA,SAAgB,GAAG,CAAC,CAAS,EAAE,CAAS,EAAA;AACtC,QAAA,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAClB;AAFgB,IAAA,MAAA,CAAA,GAAG,MAElB;AAED,IAAA,SAAgB,GAAG,CAAC,CAAS,EAAE,CAAS,EAAA;QACtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;IAC1B;AAFgB,IAAA,MAAA,CAAA,GAAG,MAElB;AACH,CAAC,EArUgB,MAAM,KAAN,MAAM,GAAA,EAAA,CAAA,CAAA;;MCMV,aAAa,CAAA;;IAExB,WAAW,GAAG,CAAC;IACf,YAAY,GAAG,CAAC;IAEhB,SAAS,GAAG,KAAK;AAEjB,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO;YACL,SAAS;YACT,UAAU;YACV,OAAO;YACP,KAAK;YACL,OAAO;YACP,QAAQ;YACR,KAAK;YACL,MAAM;YACN,KAAK;YACL,IAAI;YACJ,MAAM;YACN,OAAO;SACR;IACH;AACA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;IAC1D;AACA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAC5C;AACA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC;IACjF;AAEA,IAAA,WAAA,GAAA,EAAe;AAEf,IAAA,QAAQ,CAAC,IAAU,EAAA;QACjB,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAC/B,OAAO;AACL,YAAA,MAAM,EAAE,IAAI;YACZ,GAAG,EAAE,EAAE,CAAC,EAAE;AACV,YAAA,KAAK,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;YAChB,IAAI,EAAE,EAAE,CAAC,EAAE;YACX,IAAI;AACJ,YAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE;AACtB,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;AAC1B,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;AAC1B,YAAA,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE;AACpC,YAAA,SAAS,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC;SAClD;IACH;IACA,KAAK,GAAA;QACH,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;IAClC;AACA;;AAEG;IACH,eAAe,CAAC,IAAY,EAAE,KAAa,EAAA;AACzC,QAAA,IAAI,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW;QAC3C,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG;IAC1B;AACA;;AAEG;IACH,eAAe,CAAC,IAAY,EAAE,KAAa,EAAA;AACzC,QAAA,MAAM,YAAY,GAAG;YACnB,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;AACF,YAAA,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;SACzC;AACD,QAAA,OAAO,YAAY,CAAC,KAAK,CAAC;IAC5B;AACA;;AAEG;IACH,cAAc,CAAC,IAAY,EAAE,KAAa,EAAA;QACxC,IAAI,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1F,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW;QAC3C,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG;IAC1B;AACA;;AAEG;IACH,mBAAmB,CAAC,IAAY,EAAE,KAAa,EAAA;AAC7C,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;YACb,KAAK,GAAG,EAAE;AACV,YAAA,IAAI,EAAE;QACR;AACA,QAAA,MAAM,YAAY,GAAG;YACnB,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;YACF,EAAE;AACF,YAAA,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;SACzC;AACD,QAAA,OAAO,YAAY,CAAC,KAAK,CAAC;IAC5B;AACA;;;;;AAKG;AACH,IAAA,OAAO,CAAC,IAAkB,EAAA;QACxB,IAAI,CAAC,GAAG,MAAM,CAAC,mBAAmB,CAChC,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,EAC/B,IAAI,CAAC,GAAG,IAAI,CAAC,EACb,IAAI,CAAC,KAAK,IAAI,CAAC,EACf,IAAI,CAAC,OAAO,IAAI,CAAC,EACjB,IAAI,CAAC,OAAO,IAAI,CAAC,EACjB,IAAI,CAAC,YAAY,IAAI,CAAC,CACvB;;;;;;;;;;;;AAaD,QAAA,OAAO,CAAC;IACV;IAEA,UAAU,CAAC,IAAkB,EAAE,MAAc,EAAA;QAC3C,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,EAAE;QACX;;;;;;;;;;;;;;;AAeA,QAAA,OAAO,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;IACpE;;AAGA,IAAA,cAAc,CAAC,IAAU,EAAA;AACvB,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;QACxB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtB,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC;QACtD,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC;AAC9B,QAAA,OAAO,CAAC;IACV;AAEA,IAAA,YAAY,CAAC,IAAU,EAAA;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QACnC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC1B,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAC3B,QAAA,OAAO,CAAC;IACV;IAEA,UAAU,CAAC,IAAiB,EAAE,CAAiB,EAAA;QAC7C,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,IAAI;QACb;QACA,IAAI,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAClC,QAAQ,CAAC;AACP,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AACnD,YAAA,KAAK,OAAO;;AAEV,gBAAA,OAAO,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1D,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC;;IAErE;IAEA,SAAS,CAAC,IAAiB,EAAE,CAAiB,EAAA;QAC5C,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,IAAI;QACb;QACA,IAAI,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QAClC,QAAQ,CAAC;AACP,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AACpD,YAAA,KAAK,OAAO;;gBAEV,OAAO,MAAM,CAAC,mBAAmB,CAC/B,KAAK,CAAC,EAAE,EACR,KAAK,CAAC,EAAE,EACR,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CACzC;AACH,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC;;IAErE;AACD;;AC/ND;;;AAGG;AACH,MAAM,YAAY,GAAG,6BAA6B;AAClD,MAAM,UAAU,GAAG,QAAQ;AAErB,IAAW,cAAc;AAA/B,CAAA,UAAiB,cAAc,EAAA;IAO7B,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AACnD,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,IAAI,EAAE,SAAS;AAChB,KAAA,CAAC;;IAGF,SAAS,aAAa,CAAC,GAAW,EAAA;AAChC,QAAA,OAAO;AACJ,aAAA,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACrE,aAAA,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E;;IAGA,SAAgB,KAAK,CAAC,IAAU,EAAA;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;QACxC,OAAO;YACL,GAAG,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YAC5E,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,CAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;YACpF,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,CAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;SAC/E;IACH;AAPgB,IAAA,cAAA,CAAA,KAAK,QAOpB;AAED;;;;;;;;AAQG;IACH,SAAS,sBAAsB,CAAC,IAAU,EAAA;AACxC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;AAC5B,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAChC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE;AACzB,gBAAA,OAAO,IAAI;YACb;QACF;;AAEA,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;;;;;;AAWG;;;;;;;;;;AAUH,IAAA,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAgB;AAEpD,IAAA,SAAgB,eAAe,CAAC,IAAY,EAAE,KAAa,EAAA;AACzD,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,EAAE;QACnC,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACjD,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC;QAEnC,IAAI,UAAU,GAAG,sBAAsB,CAAC,IAAI,IAAI,EAAE,CAAC;AACnD,QAAA,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;;QAGzB,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,IAAI,EAAE;YAC7D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;AAC3E,YAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC;;;YAGlC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,aAAa,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1D,YAAA,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC;AAC1C,YAAA,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;AACrB,YAAA,KAAK,EAAE;QACT;AACA,QAAA,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC;AAC9C,QAAA,OAAO,UAAU;IACnB;AAtBgB,IAAA,cAAA,CAAA,eAAe,kBAsB9B;;AAGD,IAAA,SAAgB,WAAW,CAAC,IAAY,EAAE,KAAa,EAAE,GAAW,EAAA;QAClE,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC;AAC1C,QAAA,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;AAC9B,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;AAC5C,QAAA,OAAO,MAAM;IACf;AALgB,IAAA,cAAA,CAAA,WAAW,cAK1B;AAED;;;;;;;AAOG;AACH,IAAA,SAAgB,WAAW,CAAC,IAAY,EAAE,KAAa,EAAA;QACrD,MAAM,SAAS,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE;AAClC,QAAA,MAAM,QAAQ,GAAG,KAAK,KAAK,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI;QAE/C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC;QAC1C,MAAM,SAAS,GAAG,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC;QAEtD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;IACxC;AATgB,IAAA,cAAA,CAAA,WAAW,cAS1B;AACH,CAAC,EA5HgB,cAAc,KAAd,cAAc,GAAA,EAAA,CAAA,CAAA;;ACF/B;;;;;AAKG;MACU,YAAY,CAAA;;IAEvB,WAAW,GAAG,CAAC;IACf,YAAY,GAAG,CAAC;AAEhB,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO;YACL,MAAM;YACN,KAAK;YACL,YAAY;YACZ,aAAa;YACb,cAAc;YACd,eAAe;YACf,KAAK;YACL,OAAO;YACP,OAAO;YACP,MAAM;YACN,WAAW;YACX,UAAU;SACX;IACH;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IAC1D;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAC5C;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;IAClF;AAEA,IAAA,QAAQ,CAAC,IAAU,EAAA;QACjB,MAAM,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;QACpC,OAAO;AACL,YAAA,MAAM,EAAE,IAAI;YACZ,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI;AACJ,YAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE;AACtB,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;AAC1B,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;AAC1B,YAAA,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE;AACpC,YAAA,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;SACzB;IACH;IAEA,KAAK,GAAA;QACH,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;IAClC;IAEA,eAAe,CAAC,IAAY,EAAE,KAAa,EAAA;QACzC,OAAO,cAAc,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE;IAC7D;IAEA,eAAe,CAAC,IAAY,EAAE,KAAa,EAAA;QACzC,OAAO,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;IAChD;IAEA,cAAc,CAAC,IAAY,EAAE,KAAa,EAAA;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC;AAClD,QAAA,OAAO,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE;IACnE;IAEA,mBAAmB,CAAC,IAAY,EAAE,KAAa,EAAA;AAC7C,QAAA,MAAM,SAAS,GAAG,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;AAC9C,QAAA,MAAM,QAAQ,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI;QAC9C,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC;IAClD;;AAGA,IAAA,OAAO,CAAC,IAAkB,EAAA;QACxB,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AACpF,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACzD,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;AAAE,YAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/D,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;AAAE,YAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/D,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;AAAE,YAAA,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;AAC9E,QAAA,OAAO,MAAM;IACf;IAEA,UAAU,CAAC,IAAkB,EAAE,MAAc,EAAA;AAC3C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;QAEtB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACjC,QAAA,MAAM,OAAO,GAA+B;AAC1C,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,GAAG,EAAE,SAAS;SACf;AAED,QAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AACrB,YAAA,OAAO,CAAC,OAAO,GAAG,MAAM;QAC1B;AAEA,QAAA,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IACvF;AAEA,IAAA,cAAc,CAAC,IAAU,EAAA;AACvB,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;QACxB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtB,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC;QACtD,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC;AAC9B,QAAA,OAAO,CAAC;IACV;AAEA,IAAA,YAAY,CAAC,IAAU,EAAA;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QACnC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC1B,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAC3B,QAAA,OAAO,CAAC;IACV;IAEA,UAAU,CAAC,IAAiB,EAAE,CAAiB,EAAA;AAC7C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;QACtB,MAAM,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;QAEpC,QAAQ,CAAC;AACP,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AACjD,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AACvD,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC;;IAE/D;IAEA,SAAS,CAAC,IAAiB,EAAE,CAAiB,EAAA;AAC5C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;QACtB,MAAM,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;QAEpC,QAAQ,CAAC;AACP,YAAA,KAAK,MAAM;gBACT,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACvF,YAAA,KAAK,OAAO;gBACV,OAAO,cAAc,CAAC,WAAW,CAC/B,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,KAAK,EACP,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAC5C;AACH,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC;;IAE/D;AACD;;AC7JD;;;;;;;;;;;;AAYG;AACH,MAAM,cAAc,GAAG,oBAAoB;AAE3C;;;;;;;;;;;;;AAaG;AACH,MAAM,iBAAiB,GAA2B;AAChD,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,EAAE,EAAE,EAAE;AACN,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,GAAG,EAAE,EAAE;CACR;AAEK,IAAW,gBAAgB;AAAjC,CAAA,UAAiB,gBAAgB,EAAA;IAQ/B,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE;AACrD,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,IAAI,EAAE,SAAS;AAChB,KAAA,CAAC;;IAGF,SAAS,aAAa,CAAC,GAAW,EAAA;QAChC,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IACpF;;IAGA,SAAgB,KAAK,CAAC,IAAU,EAAA;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;AAExC,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAE;AACpD,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,CAAE;QACxD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAM,aAAqB,CAAE;AAE3F,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QACtD,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QACjD,MAAM,KAAK,GAAG,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;AACrD,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QAExD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE;IAC1C;AAbgB,IAAA,gBAAA,CAAA,KAAK,QAapB;AAED;;;;;;;;;;AAUG;IACH,SAAS,sBAAsB,CAAC,IAAU,EAAA;AACxC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;AAC5B,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAChC,YAAA,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;YACrB,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE;AACjC,gBAAA,OAAO,IAAI;YACb;QACF;;AAEA,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;;;;;;;AAOH,IAAA,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAgB;AAEpD,IAAA,SAAgB,eAAe,CAAC,IAAY,EAAE,KAAa,EAAA;AACzD,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,EAAE;QACnC,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACjD,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC;QAEnC,IAAI,UAAU,GAAG,sBAAsB,CAAC,IAAI,IAAI,EAAE,CAAC;AACnD,QAAA,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;;QAGzB,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,IAAI,EAAE;YAC7D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;YAE3E,IAAI,SAAS,GAAG,UAAU;;;;AAI1B,YAAA,KAAK,MAAM,IAAI,IAAI,aAAa,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;AAChE,gBAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC;gBAClC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;AACrC,gBAAA,SAAS,GAAG,sBAAsB,CAAC,KAAK,CAAC;gBACzC,IAAI,SAAS,CAAC,OAAO,EAAE,KAAK,UAAU,CAAC,OAAO,EAAE,EAAE;oBAChD;gBACF;YACF;YAEA,UAAU,GAAG,SAAS;AACtB,YAAA,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;AACrB,YAAA,KAAK,EAAE;QACT;AACA,QAAA,oBAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC;AAC9C,QAAA,OAAO,UAAU;IACnB;AAhCgB,IAAA,gBAAA,CAAA,eAAe,kBAgC9B;;AAGD,IAAA,SAAgB,WAAW,CAAC,IAAY,EAAE,KAAa,EAAE,GAAW,EAAA;QAClE,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC;AAC1C,QAAA,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;AAC9B,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;AAC5C,QAAA,OAAO,MAAM;IACf;AALgB,IAAA,gBAAA,CAAA,WAAW,cAK1B;AAED;;;;;;;AAOG;AACH,IAAA,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB;AAElD,IAAA,SAAgB,WAAW,CAAC,IAAY,EAAE,KAAa,EAAA;AACrD,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,EAAE;QACnC,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC7C,IAAI,MAAM,KAAK,SAAS;AAAE,YAAA,OAAO,MAAM;QAEvC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC;AAE1C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE;AAC5B,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAChC,YAAA,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;AACrB,YAAA,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,WAAW,EAAE;AACzD,gBAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;gBAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBAChC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG;AAC9B,gBAAA,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;AACtC,gBAAA,OAAO,MAAM;YACf;QACF;QACA,OAAO,EAAE,CAAC;IACZ;AApBgB,IAAA,gBAAA,CAAA,WAAW,cAoB1B;AACH,CAAC,EArKgB,gBAAgB,KAAhB,gBAAgB,GAAA,EAAA,CAAA,CAAA;;ACnDjC;;;;;;AAMG;MACU,cAAc,CAAA;;IAEzB,WAAW,GAAG,CAAC;IACf,YAAY,GAAG,CAAC;AAEhB,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO;YACL,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;SACL;IACH;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAC5C;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAC5C;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IAC1D;AAEA,IAAA,QAAQ,CAAC,IAAU,EAAA;QACjB,MAAM,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;QACtC,OAAO;AACL,YAAA,MAAM,EAAE,IAAI;YACZ,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI;AACJ,YAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE;AACtB,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;AAC1B,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;AAC1B,YAAA,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE;AACpC,YAAA,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;SACzB;IACH;IAEA,KAAK,GAAA;QACH,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;IAClC;IAEA,eAAe,CAAC,IAAY,EAAE,KAAa,EAAA;QACzC,OAAO,gBAAgB,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE;IAC/D;IAEA,eAAe,CAAC,IAAY,EAAE,KAAa,EAAA;QACzC,OAAO,gBAAgB,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;IAClD;IAEA,cAAc,CAAC,IAAY,EAAE,KAAa,EAAA;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC;AAClD,QAAA,OAAO,gBAAgB,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE;IACrE;AAEA;;;AAGG;IACH,mBAAmB,CAAC,IAAY,EAAE,KAAa,EAAA;QAC7C,MAAM,WAAW,GAAG,gBAAgB,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC;AACjE,QAAA,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC;QACxC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5C,OAAO,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG;IAC/C;;AAGA,IAAA,OAAO,CAAC,IAAkB,EAAA;QACxB,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AACtF,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACzD,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;AAAE,YAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/D,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;AAAE,YAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/D,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;AAAE,YAAA,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;AAC9E,QAAA,OAAO,MAAM;IACf;IAEA,UAAU,CAAC,IAAkB,EAAE,MAAc,EAAA;AAC3C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;QAEtB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACjC,QAAA,MAAM,OAAO,GAA+B;AAC1C,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,GAAG,EAAE,SAAS;SACf;AAED,QAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AACrB,YAAA,OAAO,CAAC,OAAO,GAAG,MAAM;QAC1B;AAEA,QAAA,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9E;AAEA,IAAA,cAAc,CAAC,IAAU,EAAA;AACvB,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;QACxB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtB,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC;QACtD,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC;AAC9B,QAAA,OAAO,CAAC;IACV;AAEA,IAAA,YAAY,CAAC,IAAU,EAAA;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QACnC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC1B,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAC3B,QAAA,OAAO,CAAC;IACV;IAEA,UAAU,CAAC,IAAiB,EAAE,CAAiB,EAAA;AAC7C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;QACtB,MAAM,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;QAEtC,QAAQ,CAAC;AACP,YAAA,KAAK,MAAM;gBACT,OAAO,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACpD,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;AAC1D,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC;;IAEjE;IAEA,SAAS,CAAC,IAAiB,EAAE,CAAiB,EAAA;AAC5C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;QACtB,MAAM,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;QAEtC,QAAQ,CAAC;AACP,YAAA,KAAK,MAAM;gBACT,OAAO,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC3F,YAAA,KAAK,OAAO;gBACV,OAAO,gBAAgB,CAAC,WAAW,CACjC,CAAC,CAAC,IAAI,EACN,CAAC,CAAC,KAAK,EACP,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAC9C;AACH,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC;;IAEjE;AACD;;MC5JY,aAAa,GAAG,IAAI,cAAc,CAA4B,eAAe;AAQnF,MAAM,qBAAqB,GAAuC,MAAM,CAAC,MAAM,CAAC;AACrF,IAAA,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE;AAC5C,IAAA,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE;AACzC,IAAA,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE;AACxC,IAAA,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE;AAC3C,CAAA;SAEe,SAAS,GAAA;AACvB,IAAA,MAAM,QAAQ,GAAG,MAAM,CAA4B,aAAa,CAAC;AAEjE,IAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AACtC;;MCrBa,mBAAmB,CAAA;AAC9B,IAAA,QAAQ,GAAG,MAAM,CAA4B,aAAa,CAAC;AAE3D,IAAA,OAAO,CAAC,MAAc,EAAA;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,QAAQ;QACrE,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAA,gBAAA,CAAkB,CAAC;YACvD,OAAO,IAAI,gBAAgB,EAAE;QAC/B;aAAO;YACL,OAAO,IAAI,IAAI,EAAE;QACnB;IACF;uGAXW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAnB,mBAAmB,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;;ACJD;;AAEG;AACG,SAAU,oBAAoB,CAAC,YAAoB,EAAA;IACvD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAC7C,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE;AACnC,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE;AACvC,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE;IACpC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE;AAClE,IAAA,MAAM,UAAU,GACd,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAErF,IAAA,OAAO,UAAU;AACnB;AACA;;AAEG;AACG,SAAU,mBAAmB,CAAC,GAAW,EAAA;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IAC5B,MAAM,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC;IAE7B,MAAM,CAAC,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAE;AAClF,IAAA,OAAO,CAAC;AACV;;MCbsB,iBAAiB,CAAA;IAC3B,OAAO,GAAG,IAAI;AACd,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAC3D,OAAO,GAAiB,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;AAEtE,IAAA,QAAQ;AACR,IAAA,SAAS;AACT,IAAA,WAAW;IAEX,MAAM,GAAa,EAAE;IACrB,KAAK,GAAa,EAAE;IACpB,QAAQ,GAAkB,EAAE;IAC5B,UAAU,GAAoB,EAAE;IAChC,SAAS,GAAmB,EAAE;IAC9B,SAAS,GAAmB,EAAE;IAC9B,YAAY,GAAG,EAAE;IAEjB,OAAO,GAAgB,IAAI;IAC3B,OAAO,GAAgB,IAAI;AAE3B,IAAA,cAAc,CACZ,IAAkB,EAClB,QAAuB,EACvB,MAAmB,EACnB,QAAmB,EAAA;QAEnB,QAAQ,IAAI;AACV,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAChC;AACF,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,UAAU,EAAE;gBACjB;AACF,YAAA,KAAK,KAAK;gBACR,IAAI,CAAC,UAAU,EAAE;gBACjB;;AAGJ,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AAErD,QAAA,IAAI,QAAQ;AAAE,YAAA,QAAQ,EAAE;IAC1B;AACA,IAAA,iBAAiB,CACf,IAAoB,EACpB,QAAuB,EACvB,MAAmB,EACnB,QAAmB,EAAA;QAEnB,QAAQ,IAAI;AACV,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAChC;AACF,YAAA,KAAK,OAAO;gBACV,IAAI,CAAC,WAAW,EAAE;gBAClB;AACF,YAAA,KAAK,MAAM;gBACT,IAAI,CAAC,UAAU,EAAE;gBACjB;;AAGJ,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AAErD,QAAA,IAAI,QAAQ;AAAE,YAAA,QAAQ,EAAE;IAC1B;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE;AAC5B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE;AAE5B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAClB,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,QAAQ;AAC7B,gBAAA,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AAChC,aAAA,CAAC;QACJ;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AAEpB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACnB,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5B,gBAAA,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS;gBAC9B,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChD,aAAA,CAAC;QACJ;IACF;AAEA,IAAA,UAAU,CAAC,UAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE;AAChC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAClB,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC;gBACnC,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,QAAQ,EAAE,KAAK;AAChB,aAAA,CAAC;QACJ;IACF;;AAGA,IAAA,YAAY,CAAC,MAAY,EAAA;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC;AACjD,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAI;AAC5C,YAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;YACzB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC;YAClC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtB,YAAA,OAAO,CAAC;AACV,QAAA,CAAC,CAAC;IACJ;IAEA,gBAAgB,CAAC,IAAU,EAAE,MAAmB,EAAA;QAC9C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;IACrC;AAEU,IAAA,cAAc,CAAC,KAAe,EAAA;QACtC,MAAM,KAAK,GACT,KAAK,CAAC,KAAK,YAAY,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAY,CAAC;AACpF,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC;AACnB,cAAE,KAAK,CAAC,GAAG,YAAY;AACrB,kBAAE,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG;AACpB,kBAAE,IAAI,IAAI,CAAC,KAAK,CAAC,GAAU;AAC7B,cAAE,IAAI,IAAI,CAAC,KAAK,CAAC;QAEnB,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AAAE,YAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE;;;QAI7F,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM;QACrE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE;IACnE;AAEA;;;;;AAKG;IACH,SAAS,CAAC,QAAuB,EAAE,MAAmB,EAAA;AACpD,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAElB,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AACnF,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AACnF,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AACjF,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AAE3F,QAAA,KAAK,IAAI,CAAC,GAAG,eAAe,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,MAAM,GAAG,GAAG,mBAAmB,GAAG,CAAC,GAAG,CAAC;AACvC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;gBAChC,MAAM,EAAE,IAAI,CAAC,OAAO;gBACpB,IAAI,EAAE,IAAI,CAAC,QAAQ;AACnB,gBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC;gBACzB,GAAG;AACJ,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjB,GAAG;AACH,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,QAAQ,EAAE,KAAK;gBACf,IAAI;gBACJ,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;AACrC,aAAA,CAAC;QACJ;AAEA,QAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,eAAe,EAAE,GAAG,EAAE,EAAE;YAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAClC,MAAM,OAAO,GACX,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,IAAI;AAErF,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;gBAChC,MAAM,EAAE,IAAI,CAAC,OAAO;gBACpB,IAAI,EAAE,IAAI,CAAC,QAAQ;gBACnB,KAAK,EAAE,IAAI,CAAC,SAAS;gBACrB,GAAG;AACJ,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjB,GAAG;AACH,gBAAA,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;gBAClC,OAAO;AACP,gBAAA,QAAQ,EACN,GAAG,KAAK,QAAQ,EAAE,GAAG;AACrB,oBAAA,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS;AACjC,oBAAA,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ;gBACjC,IAAI;gBACJ,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;AACrC,aAAA,CAAC;QACJ;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,cAAc,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACvC,YAAA,MAAM,GAAG,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC;AAClC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;gBAChC,MAAM,EAAE,IAAI,CAAC,OAAO;gBACpB,IAAI,EAAE,IAAI,CAAC,QAAQ;AACnB,gBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC;gBACzB,GAAG;AACJ,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjB,GAAG;AACH,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,QAAQ,EAAE,KAAK;gBACf,IAAI;gBACJ,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;AACrC,aAAA,CAAC;QACJ;IACF;AAEA,IAAA,eAAe,CAAC,IAAU,EAAA;AACxB,QAAA,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC;IAChB;IAEA,gBAAgB,CAAC,IAAY,EAAE,KAAa,EAAA;QAC1C,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAC9E,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAC9B,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,IAAI;YACJ,KAAK;YACL,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC;AAC/C,SAAA,CAAC;AAEF,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;AAC1D,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;QAEzD,OAAO,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;IACzE;AAEA,IAAA,eAAe,CAAC,IAAY,EAAA;QAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAChF,QAAA,OAAO,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IACvD;IAEU,SAAS,CAAC,IAAU,EAAE,MAAmB,EAAA;QACjD,IAAI,CAAC,MAAM,EAAE,MAAM;AAAE,YAAA,OAAO,EAAE;AAE9B,QAAA,OAAO;AACJ,aAAA,MAAM,CAAC,CAAC,KAAK,KAAI;YAChB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,YAAY,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAY,CAAC;AACtF,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC;AAChB,kBAAE,KAAK,CAAC,GAAG,YAAY;sBACnB,KAAK,CAAC;AACR,sBAAE,IAAI,IAAI,CAAC,KAAK,CAAC,GAAU;kBAC3B,KAAK;AAET,YAAA,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;AACrE,QAAA,CAAC;AACA,aAAA,GAAG,CAAC,CAAC,KAAK,KAAI;YACb,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,YAAY,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAY,CAAC;AACtF,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC;AAChB,kBAAE,KAAK,CAAC,GAAG,YAAY;sBACnB,KAAK,CAAC;AACR,sBAAE,IAAI,IAAI,CAAC,KAAK,CAAC,GAAU;kBAC3B,KAAK;YAET,OAAO;AACL,gBAAA,GAAG,KAAK;gBACR,eAAe,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC;gBAC7C,cAAc,EAAE,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;gBAC1C,OAAO,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;gBACvC,KAAK,EAAE,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC;aACpC;AACH,QAAA,CAAC,CAAC;IACN;AACD;;ACvRM,MAAM,yBAAyB,GAAG,IAAI,cAAc,CACzD,2BAA2B,EAC3B;AACE,IAAA,OAAO,EAAE,MAAM,iCAAiC;AACjD,CAAA,CACF;MAEY,uBAAuB,CAAA;IAClC,KAAK,GAAG,OAAO;IACf,KAAK,GAAG,OAAO;;IAGf,UAAU,GAAG,YAAY;IACzB,QAAQ,GAAG,UAAU;IAErB,GAAG,GAAG,KAAK;IACX,KAAK,GAAG,OAAO;IACf,IAAI,GAAG,MAAM;IACb,IAAI,GAAG,MAAM;IACb,KAAK,GAAG,OAAO;AAChB;AACM,MAAM,iCAAiC,GAAG,IAAI,uBAAuB,EAAE;;ACwBxE,MAAO,2BACX,SAAQ,iBAAiB,CAAA;AAGzB,IAAA,mBAAmB,GAAG,MAAM,CAAC,yBAAyB,CAAC;AACvD,IAAA,QAAQ,GAAG,KAAK,CAA0B,IAAI,CAAC,mBAAmB;iFAAC;AACnE,IAAA,MAAM,GAAG,IAAI,mBAAmB,EAAE;IAClC,IAAqB,SAAS,CAAC,GAAwB,EAAA;AACrD,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,mBAAmB,EAAE,EAAE,GAAG,GAAG,EAAE;IACxD;IAEA,IAAa,MAAM,CAAC,GAAW,EAAA;AAC7B,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7D,IAAI,CAAC,IAAI,EAAE;IACb;;IAEA,IAAkB,MAAM,CAAC,KAA8B,EAAA;AACrD,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,OAAO,GAAG,UAAU;YACzB,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,IAAI,EAAE;QACb;IACF;;IAGA,IAAkB,MAAM,CAAC,KAA8B,EAAA;AACrD,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,OAAO,GAAG,UAAU;YACzB,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,IAAI,EAAE;QACb;IACF;IAES,IAAI,GAAmB,KAAK;AAE3B,IAAA,MAAM,GAAG,IAAI,YAAY,EAAe;AAElD,IAAA,QAAQ;IAER,cAAc,GAAG,EAAE;IACnB,UAAU,GAAG,KAAK;IAElB,QAAQ,GAAoC,EAAE;AACpC,IAAA,SAAS,GAAG,CAAC,KAAW,KAAI,EAAE,CAAC;AAC/B,IAAA,UAAU,GAAG,MAAK,EAAE,CAAC;AACrB,IAAA,kBAAkB,GAAG,MAAK,EAAE,CAAC;AACvC,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;IACT;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,EAAE;IACb;AACA,IAAA,YAAY,CAAC,GAAwB,EAAA;AACnC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,mBAAmB,EAAE,EAAE,GAAG,GAAG,EAAE;IACxD;IACA,IAAI,GAAA;QACF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU;AACrC,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS;AAClC,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAEjE,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE;YACxB,IAAI,CAAC,SAAS,EAAE;QAClB;aAAO;AACL,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACjD,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI;YACtB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC;AAC7B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QACnC;IACF;AACA,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC;QACrC,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;QACnD;aAAO;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;QAC3B;QACA,IAAI,CAAC,IAAI,EAAE;IACb;AACA,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE;YACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBAChC,OAAO;AACL,oBAAA,OAAO,EAAE,IAAI;iBACd;YACH;AACA,YAAA,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;AAClE,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE;gBACT,OAAO;AACL,oBAAA,OAAO,EAAE,IAAI;oBACb,GAAG,EAAE,IAAI,CAAC,OAAO;iBAClB;YACH;AAAO,iBAAA,IAAI,CAAC,GAAG,CAAC,EAAE;gBAChB,OAAO;AACL,oBAAA,OAAO,EAAE,IAAI;oBACb,GAAG,EAAE,IAAI,CAAC,OAAO;iBAClB;YACH;QACF;AACA,QAAA,OAAO,IAAI;IACb;AACA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AACA,IAAA,yBAAyB,CAAE,EAAc,EAAA;AACvC,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;IAC9B;AACA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ;IAC5B;AAES,IAAA,iBAAiB,CAAC,IAAoB,EAAA;AAC7C,QAAA,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAK;AACpD,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI;AAC3B,YAAA,IAAI,CAAC,cAAc;gBACjB,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,KAAK,EAAE;AACzF,QAAA,CAAC,CAAC;IACJ;IAEA,SAAS,GAAA;QACP,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI;QAC1B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC;AACjC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,oBAAoB,CAAC,IAAI,EAAE;AAChF,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IACxB;AAEA,IAAA,UAAU,CAAC,CAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IACnC;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,QAAQ,IAAI,EAAE;QACrB;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YAChC,IAAI,CAAC,QAAQ,EAAE;QACjB;aAAO;YACL,IAAI,CAAC,SAAS,EAAE;QAClB;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,EAAE,EAAE;AAC7C,YAAA,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AAClD,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;AAClC,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE;QAClC;AAEA,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IACnC;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,QAAQ,IAAI,EAAE;QACrB;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YAChC,IAAI,CAAC,QAAQ,EAAE;QACjB;aAAO;YACL,IAAI,CAAC,SAAS,EAAE;QAClB;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,EAAE,EAAE;AAC7C,YAAA,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AAClD,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;AAClC,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE;QAClC;AAEA,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IACnC;IAEA,SAAS,CAAC,EAAS,EAAE,IAAiB,EAAA;QACpC,EAAE,CAAC,eAAe,EAAE;AACpB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,QAAQ,GAAG;gBACd,MAAM,EAAE,IAAI,CAAC,OAAO;gBACpB,IAAI,EAAE,IAAI,CAAC,QAAQ;gBACnB,KAAK,EAAE,IAAI,CAAC,SAAS;gBACrB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtC;IACF;IACA,WAAW,CAAC,EAAS,EAAE,IAAmB,EAAA;QACxC,EAAE,CAAC,eAAe,EAAE;AACpB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;AAC3B,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACxB;IACF;IACA,UAAU,CAAC,EAAS,EAAE,IAAkB,EAAA;QACtC,EAAE,CAAC,eAAe,EAAE;AACpB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAC1B;IACF;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB;AACA,IAAA,cAAc,CAAC,EAAS,EAAA;QACtB,EAAE,CAAC,eAAe,EAAE;IACtB;uGAhNW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAd3B;YACT,mBAAmB;AACnB,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC1D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC1D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7CH,wrLAwJA,0tHDxHY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAeX,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAnBvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,OAAA,EAGlB,CAAC,YAAY,CAAC,EAAA,SAAA,EACZ;wBACT,mBAAmB;AACnB,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC1D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC1D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,wrLAAA,EAAA,MAAA,EAAA,CAAA,mqHAAA,CAAA,EAAA;;sBASA,KAAK;uBAAC,QAAQ;;sBAId;;sBAMA,KAAK;uBAAC,KAAK;;sBAUX,KAAK;uBAAC,KAAK;;sBASX;;sBAEA;;;MElCU,kBAAkB,CAAA;AAsDT,IAAA,EAAA;AArDD,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAEpE,WAAW,GAAG,KAAK,CAAU,IAAI;oFAAC;AAExB,IAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;AACnC,IAAA,KAAK;AACL,IAAA,SAAS;AACjB,IAAA,OAAO;IACC,OAAO,GAAW,IAAI;IAC9B,IAAa,MAAM,CAAC,GAAW,EAAA;AAC7B,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;IAC/D;AAEU,IAAA,SAAS,GAAG,CAAC,KAA8B,KAAI,EAAE,CAAC;AAClD,IAAA,UAAU,GAAG,MAAK,EAAE,CAAC;AACrB,IAAA,kBAAkB,GAAG,MAAK,EAAE,CAAC;AAEvC;;AAEG;IACM,aAAa,GAAW,YAAY;IAErC,GAAG,GAAgB,IAAI;;IAE/B,IAAkB,MAAM,CAAC,KAA8B,EAAA;AACrD,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,GAAG,GAAG,UAAU;YACrB,IAAI,CAAC,kBAAkB,EAAE;QAC3B;IACF;IAEQ,GAAG,GAAgB,IAAI;;IAE/B,IAAkB,MAAM,CAAC,KAA8B,EAAA;AACrD,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,GAAG,GAAG,UAAU;YACrB,IAAI,CAAC,kBAAkB,EAAE;QAC3B;IACF;AAEA,IAAA,MAAM,GAAG,IAAI,mBAAmB,EAAE;IAClC,IAAqB,SAAS,CAAC,GAAwB,EAAA;AACrD,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,mBAAmB,EAAE,EAAE,GAAG,GAAG,EAAE;IACxD;IAEQ,UAAU,GAAG,KAAK;AAET,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7C,IAAA,WAAA,CAAoB,EAAgC,EAAA;QAAhC,IAAA,CAAA,EAAE,GAAF,EAAE;IAAiC;AAEvD,IAAA,YAAY,CAAC,GAAwB,EAAA;AACnC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,mBAAmB,EAAE,EAAE,GAAG,GAAG,EAAE;QACtD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;AACjD,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;QAChE;IACF;IACA,WAAW,GAAA;QACT,IAAI,CAAC,iBAAiB,EAAE;IAC1B;AAGA,IAAA,OAAO,CAAC,EAAS,EAAA;QACf,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAC1C,EAAE,CAAC,eAAe,EAAE;YACpB,EAAE,CAAC,cAAc,EAAE;YACnB,IAAI,CAAC,MAAM,EAAE;QACf;IACF;AAGA,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;QAC9C,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;AAC3C,QAAA,IAAI,CAAC,KAAK,GAAG,UAAU;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5B;IAGA,MAAM,GAAA;QACJ,IAAI,CAAC,UAAU,EAAE;IACnB;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,KAAK,GAAG,UAAU;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;AAEA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AACA,IAAA,yBAAyB,CAAE,EAAc,EAAA;AACvC,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;IAC9B;AACA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ;QAC1B,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC;QACxE;aAAO;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC;QAClE;IACF;IAEO,MAAM,GAAA;QACX,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;YACrC,IAAI,CAAC,iBAAiB,EAAE;YACxB;QACF;QAEA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa;AAC7B,YAAA,SAAS,EAAE,2BAA2B;YACtC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;AACvC,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,SAAS,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAI;AAC3B,gBAAA,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO;AAC9B,gBAAA,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;AAC3B,gBAAA,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;AAC3B,gBAAA,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;AAClC,gBAAA,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;gBAE/B,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAO,KAAI;AACpC,oBAAA,IAAI,CAAC,KAAK,GAAG,CAAC;AACd,oBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;oBAClB,IAAI,CAAC,iBAAiB,EAAE;AAC1B,gBAAA,CAAC,CAAC;;YAGJ,CAAC;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,SAAS,GAAG,SAAS;YAC5B,CAAC;AACF,SAAA,CAAC;IACJ;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;IAC5B;IACQ,MAAM,UAAU,CAAC,CAAO,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,UAAU,EAAE;IACnB;AAEA,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACxB,OAAO;AACL,oBAAA,OAAO,EAAE,IAAI;iBACd;YACH;AACA,YAAA,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;AACjD,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE;gBACT,OAAO;AACL,oBAAA,OAAO,EAAE,IAAI;oBACb,GAAG,EAAE,IAAI,CAAC,GAAG;iBACd;YACH;AAAO,iBAAA,IAAI,CAAC,GAAG,CAAC,EAAE;gBAChB,OAAO;AACL,oBAAA,OAAO,EAAE,IAAI;oBACb,GAAG,EAAE,IAAI,CAAC,GAAG;iBACd;YACH;QACF;AACA,QAAA,OAAO,IAAI;IACb;;AAGU,IAAA,YAAY,CAAC,KAAkB,EAAE,SAAS,GAAG,KAAK,EAAA;QAC1D,IAAI,GAAG,GAAG,EAAE;AACZ,QAAA,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE;YACzB,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpC,YAAA,GAAG,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;QACvE;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,CAAC;QAE9D,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5B;IACF;uGAjMW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,EAAA,SAAA,EAdlB;YACT,mBAAmB;AACnB,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC;AACjD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC;AACjD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAEU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBArB9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,sBAAsB;AAC7B,wBAAA,iBAAiB,EAAE,MAAM;AAC1B,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACT,mBAAmB;AACnB,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,wBAAwB,CAAC;AACjD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,wBAAwB,CAAC;AACjD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACF,iBAAA;;sBAME;;sBAKA;;sBAYA;;sBAIA,KAAK;uBAAC,KAAK;;sBAUX,KAAK;uBAAC,KAAK;;sBASX,KAAK;uBAAC,QAAQ;;sBAqBd,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;sBAShC,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;sBAShC,YAAY;uBAAC,MAAM;;;ACtGtB,MAAM,WAAW,GAAG,EAAE;AACtB,MAAM,gBAAgB,GAAG,WAAW,GAAG,CAAC;AACxC,MAAM,iBAAiB,GAAG,EAAE;AAC5B,MAAM,eAAe,GAAG,CAAC;AACzB,MAAM,kBAAkB,GAAG,CAAC;AAgCtB,MAAO,oBAAqB,SAAQ,iBAAiB,CAAA;AACzD,IAAA,mBAAmB,GAAG,MAAM,CAAC,yBAAyB,CAAC;AACvD,IAAA,QAAQ,GAAG,KAAK,CAA0B,IAAI,CAAC,mBAAmB;iFAAC;AAEnE,IAAA,OAAO,GAAG,IAAI,mBAAmB,EAAE;IACnC,IAAa,MAAM,CAAC,GAAwB,EAAA;AAC1C,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,mBAAmB,EAAE,EAAE,GAAG,GAAG,EAAE;IACzD;IAEA,IAAa,MAAM,CAAC,GAAW,EAAA;AAC7B,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7D,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,IAAI,CAAC,kBAAkB,EAAE;AAC1D,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;IAEA,IAAkB,MAAM,CAAC,KAA8B,EAAA;AACrD,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,OAAO,GAAG,UAAU;AACzB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAChC;IACF;IAEA,IAAkB,MAAM,CAAC,KAA8B,EAAA;AACrD,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,OAAO,GAAG,UAAU;AACzB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAChC;IACF;IAES,IAAI,GAAiB,OAAO;IAE7B,OAAO,GAAe,EAAE;IAChC,IAAa,MAAM,CAAC,GAAe,EAAA;AACjC,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE;QAC5C,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IACrD;AACA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;AAEU,IAAA,UAAU,GAAG,IAAI,YAAY,EAAe;AAC5C,IAAA,WAAW,GAAG,IAAI,YAAY,EAAkB;AAChD,IAAA,WAAW,GAAG,IAAI,YAAY,EAAuB;AACrD,IAAA,YAAY,GAAG,IAAI,YAAY,EAAc;AAEvD,IAAA,QAAQ;AACR,IAAA,UAAU;IAEV,cAAc,GAAuD,EAAE;IACvE,kBAAkB,GAAgC,EAAE;AACpD,IAAA,cAAc,GAAkC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC;IAEjG,QAAQ,GAAwB,EAAE;IAClC,cAAc,GAA2B,EAAE;IAC3C,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IAC/C,UAAU,GAAG,WAAW;IACxB,eAAe,GAAG,EAAE;IAE7B,eAAe,GAAG,SAAS,CAA0B,iBAAiB;wFAAC;IAE7D,WAAW,GAAiC,IAAI;AAE1D,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;IACT;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU;QACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACrB,cAAE,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;AACxB,cAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC9C,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;IAGA,QAAQ,GAAA;QACN,IAAI,CAAC,YAAY,EAAE;IACrB;AAGA,IAAA,qBAAqB,CAAC,KAAmB,EAAA;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,WAAW,CAAC,SAAS;YAAE;AACzE,QAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;IACpC;AAGA,IAAA,mBAAmB,CAAC,KAAmB,EAAA;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,WAAW,CAAC,SAAS;YAAE;AACzE,QAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC;IAC3C;AAGA,IAAA,uBAAuB,CAAC,KAAmB,EAAA;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,WAAW,CAAC,SAAS;YAAE;AACzE,QAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC;IAC1C;IAEA,YAAY,GAAA;AACV,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa,EAAE,WAAW,IAAI,CAAC;QACzE,IAAI,CAAC,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC;QAC/F,IAAI,CAAC,KAAK,GAAG,SAAS,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ;IAChF;AAES,IAAA,cAAc,CAAC,IAAkB,EAAA;QACxC,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;QAEtB,IAAI,CAAC,kBAAkB,EAAE;QAEzB,QAAQ,IAAI;AACV,YAAA,KAAK,OAAO;gBACV,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC;gBAC3D,IAAI,CAAC,uBAAuB,EAAE;gBAC9B;AACF,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,KAAK;gBACR,IAAI,CAAC,eAAe,EAAE;gBACtB;AACF,YAAA,KAAK,OAAO;gBACV,IAAI,CAAC,eAAe,EAAE;gBACtB;;AAGJ,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACrD,cAAc,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IAC3C;AAEA,IAAA,IAAY,YAAY,GAAA;QACtB,OAAO,IAAI,CAAC,OAAO;IACrB;IAEQ,kBAAkB,GAAA;AACxB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;AACzD,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI;QAC/B,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,KAAK,IAAI,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU;QACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ;IACpC;IAEQ,eAAe,GAAA;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAChD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK;AAE/F,QAAA,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,MAAM;YAClD,IAAI;AACJ,YAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE;AACzE,YAAA,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;AAClD,YAAA,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AACnE,YAAA,MAAM,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC;AACvE,SAAA,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,KAClD,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAC/C;AAED,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,MAAM;YAChD,IAAI,EAAE,OAAO,GAAG,EAAE;AAClB,YAAA,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YACrC,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;AACjC,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,QAAQ,EAAE,KAAK;AAChB,SAAA,CAAC,CAAC;IACL;AAEA;;;;AAIG;AACK,IAAA,sBAAsB,CAC5B,IAAU,EACV,MAAc,EACd,WAAmB,EAAA;QAEnB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAElC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB;AACrC,aAAA,MAAM,CACL,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,KACrB,CAAC,MAAM,CAAC,MAAM;YACd,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AAC9B,YAAA,GAAG,CAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,OAAO,EAAE;YACnC,KAAK,CAAC,OAAO,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE;aAEtC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAI;YAC9B,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5E,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YACtE,OAAO;AACL,gBAAA,GAAG,MAAM;gBACT,KAAK;gBACL,GAAG;gBACH,YAAY;gBACZ,UAAU;AACV,gBAAA,MAAM,EAAE,KAAK;gBACb,eAAe,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE;gBACrD,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE;AAChD,gBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE;AACrF,gBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE;gBAC/E,MAAM;gBACN,WAAW;aACqD;AACpE,QAAA,CAAC;aACA,IAAI,CACH,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE;AACnD,YAAA,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,CAClD;QAGH,MAAM,MAAM,GAAiB,EAAE;QAC/B,IAAI,OAAO,GAAiB,EAAE;QAC9B,IAAI,YAAY,GAAmB,EAAE;AACrC,QAAA,IAAI,UAAU,GAAG,CAAC,QAAQ;QAE1B,MAAM,YAAY,GAAG,MAAK;YACxB,IAAI,CAAC,OAAO,CAAC,MAAM;gBAAE;AACrB,YAAA,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM;AACrC,YAAA,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE;AAC1B,gBAAA,IAAI,CAAC,WAAW,GAAG,SAAS;YAC9B;AACA,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;YACvB,OAAO,GAAG,EAAE;YACZ,YAAY,GAAG,EAAE;YACjB,UAAU,GAAG,CAAC,QAAQ;AACxB,QAAA,CAAC;AAED,QAAA,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE;YAC1B,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE;AACtC,YAAA,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK,GAAG,UAAU;AAAE,gBAAA,YAAY,EAAE;YAExD,IAAI,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;gBAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBACpC,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,KAAK;AAC3C,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,IAAI,GAAG,CAAC,EAAE;AACZ,gBAAA,IAAI,GAAG,YAAY,CAAC,MAAM;AAC1B,gBAAA,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB;AAEA,YAAA,MAAM,UAAU,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAgB;YAC7D,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AACnC,YAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;AACxB,YAAA,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AAEzD,YAAA,MAAM,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE;AACjF,YAAA,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,UAAU,EAAE;AAC3E,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,GAAG,iBAAiB,CAAC;YAC3E,UAAU,CAAC,GAAG,GAAG,CAAC,YAAY,GAAG,EAAE,IAAI,WAAW;YAClD,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,GAAG,YAAY,IAAI,EAAE,IAAI,WAAW,EAAE,EAAE,CAAC;QACtF;AACA,QAAA,YAAY,EAAE;AAEd,QAAA,OAAO;aACJ,MAAM,CAAC,OAAO;AACd,aAAA,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,KAAK,KAA2B,CAAC;IACvF;IAEQ,uBAAuB,CAAC,IAAU,EAAE,MAAc,EAAA;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAElC,OAAO,IAAI,CAAC,gBAAgB;AACzB,aAAA,MAAM,CACL,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KACrB,CAAC,CAAC,MAAM,CAAC,MAAM;YACf,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AAC9B,YAAA,GAAG,CAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,OAAO,EAAE;YACnC,KAAK,CAAC,OAAO,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE;AAEtC,aAAA,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM;AAChC,YAAA,GAAG,MAAM;YACT,KAAK;YACL,GAAG;AACH,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,MAAM,EAAE,IAAI;YACZ,MAAM;AACN,YAAA,WAAW,EAAE,CAAC;YACd,eAAe,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE;YACrD,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE;AAChD,YAAA,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE;AACrF,YAAA,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE;AAChF,SAAA,CAAC,CAAC;IACP;;IAGQ,uBAAuB,GAAA;AAC7B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC5B,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC;YACvE;QACF;AAEA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAK,CAAC;AACvD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAK,CAAC;QACxE,MAAM,QAAQ,GAAgC,EAAE;AAEhD,QAAA,KAAK,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAC5D,IACE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AAC7B,gBAAA,GAAG,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE;AACnC,gBAAA,KAAK,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE;gBAEnC;YAEF,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7E,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YACvE,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,SAAS,CAAC;YACpE,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,SAAS,CAAC;YAEjE,KACE,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,EACnC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,SAAS,CAAC,GACpD;gBACA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,kBAAkB,CAAC;AAClD,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,kBAAkB,GAAG,CAAC,EAAE,SAAS,CAAC;AAC3E,gBAAA,MAAM,WAAW,GAAG,KAAK,GAAG,kBAAkB;AAC9C,gBAAA,MAAM,SAAS,GAAG,WAAW,GAAG,kBAAkB;AAClD,gBAAA,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAK,CAAC;AACvD,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,IAAK,CAAC;gBAEhE,QAAQ,CAAC,IAAI,CAAC;AACZ,oBAAA,GAAG,MAAM;oBACT,KAAK;oBACL,GAAG;oBACH,GAAG;oBACH,WAAW;oBACX,SAAS;oBACT,eAAe,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC,OAAO,EAAE;oBACzD,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE;AACpD,oBAAA,OAAO,EACL,KAAK,CAAC,OAAO,EAAE,IAAI,YAAY,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,UAAU,CAAC,OAAO,EAAE;AACtF,oBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,YAAY,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,UAAU,CAAC,OAAO,EAAE;AACvF,oBAAA,IAAI,EAAE,CAAC;AACR,iBAAA,CAAC;AAEF,gBAAA,KAAK,GAAG,WAAW,GAAG,CAAC;YACzB;QACF;;AAGA,QAAA,QAAQ,CAAC,IAAI,CACX,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG;AACb,YAAA,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW;YAC7B,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE;YACrC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAC7D;;AAGD,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAyC;AACnE,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC9B,YAAA,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE;AAC/C,YAAA,IAAI,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,KAC/B,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAC5D;AACD,YAAA,IAAI,IAAI,GAAG,CAAC,EAAE;AACZ,gBAAA,IAAI,GAAG,KAAK,CAAC,MAAM;AACnB,gBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAChB;AACC,YAAA,OAAwD,CAAC,IAAI,GAAG,IAAI;YACrE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YACzB,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;QACpC;AAEA,QAAA,IAAI,CAAC,kBAAkB,GAAG,QAAQ;AAClC,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC;QACvE,KAAK,MAAM,OAAO,IAAI,QAAQ;AAAE,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;IAChF;IAEQ,mBAAmB,CAAC,IAAU,EAAE,SAAe,EAAA;QACrD,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;AACjE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,IAAI,UAAU,CAAC;IAC/C;IAEQ,gBAAgB,GAAA;QACtB,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;YAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAC9C,YAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE;AACjE,QAAA,CAAC,CAAC;IACJ;IAEQ,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM;YAAE,OAAO,IAAI,CAAC,OAAO;AAClD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAC5B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,WAAY,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAY,CAAC,OAAO,GAAG,KAAK,CACpF;IACH;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YACtC,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,KAAK,EAAE,IAAI,CAAC,SAAS;AACrB,YAAA,GAAG,EAAE,CAAC;AACP,SAAA,CAAC;AACF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YACpC,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,KAAK,EAAE,IAAI,CAAC,SAAS;AACrB,YAAA,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AACjE,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB;AAC1C,aAAA,GAAG,CAAC,CAAC,KAAK,KAAI;YACb,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AACpC,YAAA,OAAO,EAAE,KAAK,EAAE,KAAsB,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE;AACtE,QAAA,CAAC;aACA,MAAM,CACL,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC;aAE3F,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC1D;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,EAAE;AAE/B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;YACvB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE;QACtF;AAEA,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAC/C,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C;QAEA,OAAO,CAAA,EAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAA,CAAE;IAChD;IAEA,eAAe,CAAC,KAAW,EAAE,GAAS,EAAA;QACpC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;AACpC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE;AAC5D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE;AAC1D,QAAA,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;cAChB,GAAG,SAAS,CAAA,GAAA,EAAM,OAAO,CAAA,EAAA,EAAK,CAAC,CAAC,IAAI,CAAA;AACtC,cAAE,CAAA,EAAG,SAAS,CAAA,EAAA,EAAK,CAAC,CAAC,IAAI,CAAA,GAAA,EAAM,OAAO,CAAA,EAAA,EAAK,CAAC,CAAC,IAAI,EAAE;IACvD;AAEA,IAAA,eAAe,CAAC,IAAU,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,IAAI,EAAE;IACnF;AAEA,IAAA,UAAU,CAAC,OAAe,EAAA;AACxB,QAAA,OAAO,CAAA,EAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;IACxG;AAEA,IAAA,UAAU,CAAC,CAAe,EAAA;QACxB,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IACxB;IAEA,SAAS,GAAA;QACP,IAAI,CAAC,sBAAsB,EAAE;AAC7B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC5D,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QACzC,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;IAEA,SAAS,CAAC,EAAS,EAAE,IAAiB,EAAA;QACpC,EAAE,CAAC,eAAe,EAAE;AACpB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI;YACzB,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAK,CAAC;AACtC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAChC;IACF;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClB;IACA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnB;AAEQ,IAAA,QAAQ,CAAC,SAAiB,EAAA;QAChC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACnC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YAClD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;gBACrC,MAAM,EAAE,IAAI,CAAC,OAAO;gBACpB,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,gBAAA,KAAK,EAAE,MAAM,CAAC,KAAM,GAAG,SAAS;AAChC,gBAAA,GAAG,EAAE,CAAC;AACP,aAAA,CAAC;QACJ;aAAO;YACL,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC;QACrB;QACA,IAAI,CAAC,kBAAkB,EAAE;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;AAEA,IAAA,YAAY,CAAC,EAAS,EAAE,IAAiB,EAAE,KAAe,EAAA;QACxD,EAAE,CAAC,eAAe,EAAE;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAK,EAAE,KAAK,EAAE,CAAC;IACpD;AAEA,IAAA,iBAAiB,CAAC,EAAS,EAAE,KAAe,EAAE,IAAU,EAAA;QACtD,EAAE,CAAC,eAAe,EAAE;AACpB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM;YAAE;QAC9B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACxC;AAEA,IAAA,0BAA0B,CACxB,EAAgB,EAChB,OAAkC,EAClC,OAAqC,MAAM,EAAA;AAE3C,QAAA,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE;QACrB,EAAE,CAAC,cAAc,EAAE;QACnB,EAAE,CAAC,eAAe,EAAE;QACpB,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC;IACnD;AAEA,IAAA,0BAA0B,CACxB,EAAgB,EAChB,KAAyB,EACzB,OAAqC,MAAM,EAAA;AAE3C,QAAA,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE;QACrB,EAAE,CAAC,cAAc,EAAE;QACnB,EAAE,CAAC,eAAe,EAAE;QACpB,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAC5E;AAEQ,IAAA,gBAAgB,CACtB,EAAgB,EAChB,KAAe,EACf,IAAkC,EAClC,QAAuC,EAAA;QAEvC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACjF,QAAA,IAAI,CAAC,MAAM;YAAE;QACb,IAAI,CAAC,WAAW,GAAG;YACjB,IAAI;YACJ,MAAM;AACN,YAAA,aAAa,EAAE,EAAE,GAAG,MAAM,EAAE;YAC5B,SAAS,EAAE,EAAE,CAAC,SAAS;YACvB,MAAM,EAAE,EAAE,CAAC,OAAO;YAClB,MAAM,EAAE,EAAE,CAAC,OAAO;AAClB,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE;AACtB,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,OAAO,EAAE,QAAQ;SAClB;IACH;AAEQ,IAAA,sBAAsB,CAAC,EAAgB,EAAA;AAC7C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW;AAC9B,QAAA,IAAI,CAAC,KAAK;YAAE;QAEZ,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,KAAK,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,GAAG,IAAI;QAClF,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,KAAK,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,GAAG,IAAI;QAClF,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,GAAG,IAAI;AACtF,QAAA,IAAI,SAAS,GAAG,YAAY,EAAE,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,aAAa,EAAE,IAAI,IAAI,CAAC;AACpF,QAAA,IAAI,YAAY,GAAG,YAAY,EAAE,OAAO,IAAI,CAAC;AAE7C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC;AACvF,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YAAE;AAEnC,QAAA,KAAK,CAAC,OAAO,GAAG,OAAO;AACvB,QAAA,KAAK,CAAC,SAAS,GAAG,SAAS;AAC3B,QAAA,KAAK,CAAC,YAAY,GAAG,YAAY;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;IAEQ,sBAAsB,CAAC,EAAgB,EAAE,SAAkB,EAAA;AACjE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW;AAC9B,QAAA,IAAI,CAAC,KAAK;YAAE;AACZ,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC;AAE/C,QAAA,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;AACjE,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AAEvB,QAAA,IAAI,CAAC,SAAS,IAAI,OAAO,EAAE;AACzB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KACrC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAC5D;AACD,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;gBACpB,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,WAAW,EAAE,KAAK,CAAC,IAAI;gBACvB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,YAAY,EAAE,KAAK,CAAC,YAAY;AACjC,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;QACjC;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;IAEQ,sBAAsB,GAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;IACzB;AAEQ,IAAA,iBAAiB,CAAC,EAAgB,EAAA;QACxC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;AAAE,YAAA,OAAO,IAAI;AAC3D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa,CAAC,aAAa,CAAc,OAAO,CAAC;AACtF,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;AACtB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE;AACzC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,GAAG,kBAAkB;AACjD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,eAAe;AAChD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,CAAC,EACD,IAAI,CAAC,GAAG,CACN,kBAAkB,GAAG,CAAC,EACtB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,CAC9D,CACF;AACD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAC5B,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,CACnF;AACD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,CAC7F;AACD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,CAChF;AACD,QAAA,OAAO,EAAE,IAAI,EAAE,CAAC,UAAU,GAAG,QAAQ,IAAI,CAAC,IAAI,aAAa,GAAG,WAAW,CAAC,EAAE;IAC9E;AAEQ,IAAA,kBAAkB,CAAC,EAAgB,EAAA;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;AAAE,YAAA,OAAO,IAAI;AACpF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa,CAAC,aAAa,CAAc,cAAc,CAAC;AAC7F,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;AACtB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAkB;QACnF,IAAI,CAAC,OAAO,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;AAChC,QAAA,MAAM,OAAO,GAAG,CAAC,CAAS,KAAI;YAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AACzC,gBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;gBAC3C,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;AAC1C,YAAA,CAAC,CAAC;YACF,OAAO,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK;AAC9B,QAAA,CAAC;AACD,QAAA,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;IACzE;AAEQ,IAAA,iBAAiB,CAAC,EAAgB,EAAA;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;AAAE,YAAA,OAAO,IAAI;AACnF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa,CAAC,aAAa,CAAc,YAAY,CAAC;AAC3F,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;AACtB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAkB;QACjF,IAAI,CAAC,OAAO,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;QAEhC,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CACpC,OAAO,EACP,IAAI,CAAC,WAAW,CAAC,MAAM,EACvB,IAAI,CAAC,WAAW,CAAC,MAAM,CACxB;AACD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;AACzE,QAAA,MAAM,UAAU,GAAG,WAAW,IAAI,CAAC;AACnC,QAAA,MAAM,YAAY,GAAG,aAAa,IAAI,UAAU;AAChD,QAAA,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE;AAC1E,QAAA,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE;QAC7E,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAClC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI,gBAAgB,IAAI,EAAE,CACpE;QACD,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,gBAAgB,IAAI,EAAE,CAAC;AACzF,QAAA,OAAO,EAAE,IAAI,EAAE,YAAY,GAAG,UAAU,EAAE,OAAO,EAAE,aAAa,GAAG,WAAW,EAAE;IAClF;AAEQ,IAAA,aAAa,CAAC,OAAsB,EAAE,CAAS,EAAE,CAAS,EAAA;QAChE,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AACzC,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;YAC3C,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;AAC/E,QAAA,CAAC,CAAC;QACF,OAAO,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK;IACjC;AAEQ,IAAA,WAAW,CAAC,OAAe,EAAA;QACjC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACtE;AAEQ,IAAA,eAAe,CACrB,MAAgB,EAChB,IAAkC,EAClC,SAAiB,EACjB,YAAoB,EAAA;QAEpB,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;QAC9C,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACtC,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AAElC,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACnB,YAAA,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,YAAY,CAAC;AACrE,YAAA,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,YAAY,CAAC;QACnE;AAAO,aAAA,IAAI,IAAI,KAAK,cAAc,EAAE;AAClC,YAAA,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,YAAY,CAAC;AACrE,YAAA,IAAI,KAAK,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,iBAAiB,GAAG,MAAM,EAAE;AAChE,gBAAA,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,iBAAiB,GAAG,MAAM,CAAC;YAC9D;QACF;aAAO;AACL,YAAA,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,YAAY,CAAC;AACjE,YAAA,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,iBAAiB,GAAG,MAAM,EAAE;AAChE,gBAAA,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,iBAAiB,GAAG,MAAM,CAAC;YAC9D;QACF;QAEA,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE;IAClC;IAEQ,OAAO,CAAC,IAAU,EAAE,IAAY,EAAA;AACtC,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;QACxB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;AAC7B,QAAA,OAAO,CAAC;IACV;IAEQ,UAAU,CAAC,IAAU,EAAE,OAAe,EAAA;AAC5C,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,GAAG,MAAM,CAAC;IACpD;AAEQ,IAAA,cAAc,CAAC,KAAe,EAAA;QACpC,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,KAAK;AACxE,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,KAAK;AACtE,QAAA,OAAO,IAAI;IACb;IAEQ,SAAS,CAAC,CAAW,EAAE,CAAW,EAAA;QACxC,OAAO,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC;IAC/D;IAEQ,cAAc,CAAC,CAAW,EAAE,CAAW,EAAA;QAC7C,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QACjC,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE;IAC3F;AAEQ,IAAA,UAAU,CAAC,IAAU,EAAA;AAC3B,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;QACxB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtB,QAAA,OAAO,CAAC;IACV;AAEQ,IAAA,QAAQ,CAAC,IAAU,EAAA;AACzB,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;QACxB,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAC3B,QAAA,OAAO,CAAC;IACV;IAEiB,aAAa,GAAG,GAAG;AACpC,IAAA,SAAS,GAAG,IAAI,CAAC,aAAa;uGA1vBnB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,owCAHpB,CAAC,mBAAmB,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClElC,6qYAmTA,i+PDlPY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;+BACE,cAAc,EAAA,OAAA,EAGf,CAAC,YAAY,CAAC,EAAA,SAAA,EACZ,CAAC,mBAAmB,CAAC,EAAA,eAAA,EACf,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,6qYAAA,EAAA,MAAA,EAAA,CAAA,06PAAA,CAAA,EAAA;;sBAO9C;;sBAIA;;sBAOA,KAAK;uBAAC,KAAK;;sBAQX,KAAK;uBAAC,KAAK;;sBAQX;;sBAGA;;sBAQA;;sBACA;;sBACA;;sBACA;+DAeoD,iBAAiB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA;sBAkBrE,YAAY;uBAAC,eAAe;;sBAK5B,YAAY;uBAAC,sBAAsB,EAAE,CAAC,QAAQ,CAAC;;sBAM/C,YAAY;uBAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC;;sBAM7C,YAAY;uBAAC,wBAAwB,EAAE,CAAC,QAAQ,CAAC;;;AElKpD,SAAS,cAAc,CAAC,QAAmC,EAAA;AACzD,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AACzE;AAEM,SAAU,mBAAmB,CAAC,GAAG,UAAqC,EAAA;AAC1E,IAAA,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,GAAG,qBAAqB,EAAE,GAAG,UAAU,CAAC,CAAC;IACrE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,MAAM;AAC3B,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,QAAQ,EAAE,OAAO;AAClB,KAAA,CAAC,CAAC;AACL;;SCJgB,eAAe,CAC7B,QAAkB,IAAI,EACtB,MAAgB,IAAI,EAAA;AAEpB,IAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;AACvB;;MCba,SAAS,CAAA;AACpB,IAAA,IAAI;AACJ,IAAA,MAAM;AACN,IAAA,OAAO;AACP,IAAA,QAAQ;AACT;AAEK,MAAO,YAAa,SAAQ,SAAS,CAAA;AACzC,IAAA,IAAI;AACL;AAEK,MAAO,aAAc,SAAQ,SAAS,CAAA;AAC1C,IAAA,KAAK;AACL,IAAA,YAAY;AACb;AAEK,MAAO,WAAY,SAAQ,SAAS,CAAA;AACxC,IAAA,GAAG;AACH,IAAA,MAAM;AACN,IAAA,OAAO;AACP,IAAA,UAAU;AACV,IAAA,QAAQ;AACR,IAAA,cAAc;AACf;AAEK,MAAO,YAAa,SAAQ,SAAS,CAAA;AACzC,IAAA,IAAI;IACJ,KAAK,GAAa,EAAE;AACpB,IAAA,WAAW;AACZ;;AC5BK,SAAU,kBAAkB,CAChC,KAAkF,EAAA;AAElF,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,QAAA,OAAO,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D;IAEA,MAAM,KAAK,GAAG,WAAW,CAAE,KAAa,EAAE,KAAK,CAAC;IAChD,MAAM,GAAG,GAAG,WAAW,CAAE,KAAa,EAAE,GAAG,CAAC;AAE5C,IAAA,IAAI,KAAK,IAAI,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;QAC/C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;IACnC;AAEA,IAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;AACvB;AAEM,SAAU,mBAAmB,CAAC,KAAyB,EAAA;IAC3D,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AACnF;AAEM,SAAU,aAAa,CAAC,IAAU,EAAE,KAAyB,EAAA;IACjE,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG;AAAE,QAAA,OAAO,KAAK;IAC5C,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACjF;SAEgB,oBAAoB,CAClC,IAAU,EACV,KAAkB,EAClB,UAAuB,EAAA;AAEvB,IAAA,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU;AAAE,QAAA,OAAO,KAAK;AAEvC,IAAA,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,UAAU;AACrE,IAAA,MAAM,EAAE,GAAG,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,GAAG,KAAK;AAEnE,IAAA,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;AACnE;;ACcM,MAAO,2BACX,SAAQ,iBAAiB,CAAA;AAGzB,IAAA,mBAAmB,GAAG,MAAM,CAAC,yBAAyB,CAAC;AACvD,IAAA,QAAQ,GAAG,KAAK,CAA0B,IAAI,CAAC,mBAAmB;iFAAC;AACnE,IAAA,MAAM,GAAG,IAAI,mBAAmB,EAAE;IAElC,IAAa,MAAM,CAAC,KAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,IAAI,IAAI;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7D,IAAI,CAAC,IAAI,EAAE;IACb;IAEA,IAAa,GAAG,CAAC,KAA8B,EAAA;AAC7C,QAAA,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QACnC;IACF;IAEA,IAAa,GAAG,CAAC,KAA8B,EAAA;AAC7C,QAAA,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QACnC;IACF;IAES,IAAI,GAAmB,KAAK;AAE3B,IAAA,WAAW,GAAG,IAAI,YAAY,EAAsB;AACpD,IAAA,MAAM,GAAG,IAAI,YAAY,EAAsB;IAEzD,KAAK,GAAuB,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;IACtD,SAAS,GAAgB,IAAI;IAE7B,QAAQ,GAAoC,EAAE;IAC9C,cAAc,GAAG,EAAE;AAET,IAAA,SAAS,GAAG,CAAC,MAA0B,KAAI,EAAE,CAAC;AAC9C,IAAA,UAAU,GAAG,MAAK,EAAE,CAAC;AACrB,IAAA,kBAAkB,GAAG,MAAK,EAAE,CAAC;IACvC,UAAU,GAAG,KAAK;IAElB,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,EAAE;IACb;AAEA,IAAA,YAAY,CAAC,KAA0B,EAAA;AACrC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,mBAAmB,EAAE,EAAE,GAAG,KAAK,EAAE;IAC1D;AAEA,IAAA,UAAU,CAAC,KAAsE,EAAA;AAC/E,QAAA,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE;IACb;AAEA,IAAA,gBAAgB,CAAC,EAAuC,EAAA;AACtD,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AAEA,IAAA,yBAAyB,CAAC,EAAc,EAAA;AACtC,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;IAC9B;AAEA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ;IAC5B;AAEA,IAAA,QAAQ,CAAC,QAAyB,EAAA;QAChC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK;AAEjC,QAAA,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AACtD,QAAA,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAElD,QAAA,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACjE,YAAA,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE;QAC9B;AACA,QAAA,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACjE,YAAA,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE;QAC9B;AACA,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAC7D,YAAA,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE;QAC9B;AACA,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAC7D,YAAA,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE;QAC9B;AACA,QAAA,IAAI,KAAK,IAAI,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;AAC/C,YAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;QACxB;AAEA,QAAA,OAAO,IAAI;IACb;AAES,IAAA,iBAAiB,CAAC,IAAoB,EAAA;QAC7C,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,MAAK;YAChD,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;AAC9B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG;YAC1B,MAAM,SAAS,GAAG;AAChB,kBAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,oBAAoB;kBAC1E,EAAE;YACN,MAAM,OAAO,GAAG;AACd,kBAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,oBAAoB;kBACxE,EAAE;YAEN,IAAI,CAAC,cAAc,GAAG;AACpB,kBAAE,CAAA,EAAG,SAAS,CAAA,GAAA,EAAM,OAAO,CAAA;AAC3B,kBAAE,SAAS,IAAI,mBAAmB;AACtC,QAAA,CAAC,CAAC;IACJ;IAEQ,IAAI,GAAA;QACV,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU;AACrC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS;AACxC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ;QACtC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAEvE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC/F,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC5C,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI;QAC3B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC;AAClC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IACnC;AAEA,IAAA,UAAU,CAAC,IAAoB,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;IAC9B;IAEA,SAAS,GAAA;QACP,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAClC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;AACtD,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI;QAC1B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC;;AAGjC,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;AACvC,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;YACvC,IAAI,CAAC,SAAS,EAAE;QAClB;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IACxB;IACA,IAAI,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,QAAQ,IAAI,EAAE;QACrB;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YAChC,IAAI,CAAC,QAAQ,EAAE;QACjB;aAAO;YACL,IAAI,CAAC,SAAS,EAAE;QAClB;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,EAAE,EAAE;AAC7C,YAAA,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AAClD,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;AAClC,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE;QAClC;AAEA,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IACnC;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,QAAQ,IAAI,EAAE;QACrB;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YAChC,IAAI,CAAC,QAAQ,EAAE;QACjB;aAAO;YACL,IAAI,CAAC,SAAS,EAAE;QAClB;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,EAAE,EAAE;AAC7C,YAAA,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AAClD,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;AAClC,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE;QAClC;AAEA,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IACnC;IACA,SAAS,CAAC,KAAY,EAAE,IAAiB,EAAA;QACvC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU;YAAE;AAEnD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AAEtB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;AACvC,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;QACzC;aAAO;AACL,YAAA,IAAI,CAAC,KAAK;gBACR,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG;AACpC,sBAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;AACtC,sBAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE;AAE5C,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACvB;QAEA,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,SAAS,EAAE;AAEhB,QAAA,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACnC,IAAI,CAAC,UAAU,EAAE;QACnB;IACF;IAEA,WAAW,CAAC,KAAY,EAAE,IAAmB,EAAA;QAC3C,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;AAC3B,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACxB;IACF;IAEA,UAAU,CAAC,KAAY,EAAE,IAAkB,EAAA;QACzC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI;AACzB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAC1B;IACF;AAEA,IAAA,UAAU,CAAC,IAAiB,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE;YACtD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI;YAClC,IAAI,CAAC,eAAe,EAAE;QACxB;IACF;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;YACrB,IAAI,CAAC,eAAe,EAAE;QACxB;IACF;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;AACvC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,UAAU,EAAE;IACnB;IAEQ,eAAe,GAAA;AACrB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;YAChC,IAAI,CAAC,IAAI,CAAC,IAAI;gBAAE;YAEhB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAC7E,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACvE,YAAA,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;AACnD,YAAA,IAAI,CAAC,cAAc;gBACjB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC;AAEtF,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ;QACtD;IACF;IAEQ,SAAS,GAAA;QACf,MAAM,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;AAC/B,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB;AAEA,IAAA,cAAc,CAAC,KAAY,EAAA;QACzB,KAAK,CAAC,eAAe,EAAE;IACzB;uGA/QW,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAd3B;YACT,mBAAmB;AACnB,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC1D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC1D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpDH,kiJAqHA,61ID9EY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAeX,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBApBvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,cACrB,IAAI,EAAA,OAAA,EAGP,CAAC,YAAY,CAAC,EAAA,SAAA,EACZ;wBACT,mBAAmB;AACnB,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC1D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC1D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,kiJAAA,EAAA,MAAA,EAAA,CAAA,syIAAA,CAAA,EAAA;;sBAUA;;sBAMA;;sBASA;;sBASA;;sBAEA;;sBACA;;;MEvCU,uBAAuB,CAAA;AA4CL,IAAA,EAAA;AA3CV,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;IAEtC,WAAW,GAAG,IAAI;IAClB,aAAa,GAAG,YAAY;IAC5B,cAAc,GAAG,KAAK;IACvB,OAAO,GAAG,IAAI;IACtB,IACI,MAAM,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,IAAI,IAAI;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7D,IAAI,CAAC,WAAW,EAAE;IACpB;AACA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;IAEA,IAAkB,MAAM,CAAC,KAA8B,EAAA;AACrD,QAAA,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC;QAC7B,IAAI,CAAC,kBAAkB,EAAE;IAC3B;IAEA,IAAkB,MAAM,CAAC,KAA8B,EAAA;AACrD,QAAA,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC;QAC7B,IAAI,CAAC,kBAAkB,EAAE;IAC3B;AAES,IAAA,MAAM,GAAG,IAAI,mBAAmB,EAAE;AACjC,IAAA,MAAM,GAAG,IAAI,YAAY,EAAsB;IAEjD,GAAG,GAAgB,IAAI;IACvB,GAAG,GAAgB,IAAI;IACvB,KAAK,GAAuB,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;AACtD,IAAA,SAAS;IACT,UAAU,GAAG,KAAK;AAClB,IAAA,OAAO;AAEP,IAAA,SAAS,GAAG,CAAC,MAA0B,KAAI,EAAE,CAAC;AAC9C,IAAA,UAAU,GAAG,MAAK,EAAE,CAAC;AACrB,IAAA,kBAAkB,GAAG,MAAK,EAAE,CAAC;AAErC,IAAA,WAAA,CAA6B,EAAgC,EAAA;QAAhC,IAAA,CAAA,EAAE,GAAF,EAAE;AAC7B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9D;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QAC5D,IAAI,CAAC,WAAW,EAAE;IACpB;AAGA,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU;YAAE;QAC1C,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,MAAM,EAAE;IACf;IAGA,MAAM,GAAA;QACJ,IAAI,CAAC,UAAU,EAAE;IACnB;AAEA,IAAA,UAAU,CAAC,KAAsE,EAAA;AAC/E,QAAA,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC;QACtC,IAAI,CAAC,WAAW,EAAE;IACpB;AAEA,IAAA,gBAAgB,CAAC,EAAuC,EAAA;AACtD,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AAEA,IAAA,yBAAyB,CAAC,EAAc,EAAA;AACtC,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;IAC9B;AAEA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC;IACxE;IAEA,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,UAAU;YAAE;AAErB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,iBAAiB,EAAE;YACxB;QACF;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QAE5D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa;AAC7B,YAAA,SAAS,EAAE,2BAA2B;YACtC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;AACvC,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,SAAS,EAAE,CAAC,QAAQ,KAAI;AACtB,gBAAA,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAC7B,gBAAA,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;AACvB,gBAAA,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;AACvB,gBAAA,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;AAClC,gBAAA,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;gBAE/B,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACvC,oBAAA,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC;oBACtC,IAAI,CAAC,WAAW,EAAE;AAClB,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;oBAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAE5B,oBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;wBACtC,IAAI,CAAC,UAAU,EAAE;wBACjB,IAAI,CAAC,iBAAiB,EAAE;oBAC1B;AACF,gBAAA,CAAC,CAAC;YACJ,CAAC;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,IAAI,CAAC,SAAS,GAAG,SAAS;YAC5B,CAAC;AACF,SAAA,CAAC;IACJ;AAEA,IAAA,QAAQ,CAAC,QAAyB,EAAA;QAChC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK;AAEjC,QAAA,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACzD,YAAA,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;QAC1B;AACA,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACrD,YAAA,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;QAC1B;AACA,QAAA,IAAI,KAAK,IAAI,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;AAC/C,YAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;QACxB;AAEA,QAAA,OAAO,IAAI;IACb;IAEQ,WAAW,GAAA;AACjB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;AAC9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG;AAE1B,QAAA,MAAM,MAAM,GAAG,CAAC,KAAkB,KAAI;AACpC,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,OAAO,EAAE;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC3C,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;AAClE,QAAA,CAAC;AAED,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;AAC/B,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;AAC3B,QAAA,MAAM,KAAK,GAAG,SAAS,IAAI;cACvB,GAAG,SAAS,CAAA,EAAG,IAAI,CAAC,cAAc,CAAA,EAAG,OAAO,CAAA;cAC5C,SAAS;AAEb,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC;IAClE;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;IAC5B;uGAxKW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,QAAA,CAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,QAAA,CAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,EAAA,SAAA,EAdvB;YACT,mBAAmB;AACnB,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC;AACtD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC;AACtD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAEU,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBArBnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gCAAgC;AAC1C,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,sBAAsB;AAC7B,wBAAA,iBAAiB,EAAE,MAAM;AAC1B,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACT,mBAAmB;AACnB,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,6BAA6B,CAAC;AACtD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,6BAA6B,CAAC;AACtD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACF,iBAAA;;sBAOE;;sBACA;;sBACA;;sBAEA;;sBAUA,KAAK;uBAAC,KAAK;;sBAKX,KAAK;uBAAC,KAAK;;sBAKX;;sBACA;;sBAsBA,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;sBAQhC,YAAY;uBAAC,MAAM;;;AC/GtB;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"ngx-kit-date-picker.mjs","sources":["../../../projects/libs/date-picker/components/config.ts","../../../projects/libs/date-picker/helpers/date.helper.ts","../../../projects/libs/date-picker/helpers/date-format.helper.ts","../../../projects/libs/date-picker/adapters/locales/gregorian.adapter.ts","../../../projects/libs/date-picker/adapters/converters/jalali-converter.helper.ts","../../../projects/libs/date-picker/adapters/locales/jalali-adapter.ts","../../../projects/libs/date-picker/adapters/converters/hijri-converter.helper.ts","../../../projects/libs/date-picker/adapters/locales/hijri-adapter.ts","../../../projects/libs/date-picker/adapters/converters/chinese-converter.helper.ts","../../../projects/libs/date-picker/adapters/locales/chinese.adapter.ts","../../../projects/libs/date-picker/adapters/consts.ts","../../../projects/libs/date-picker/adapters/date-adapter-registry.ts","../../../projects/libs/date-picker/helpers/time.helper.ts","../../../projects/libs/date-picker/components/ngx-date-picker-base.component.ts","../../../projects/libs/date-picker/tokens/localization.ts","../../../projects/libs/date-picker/components/datepicker/ngx-datepicker.component.ts","../../../projects/libs/date-picker/components/datepicker/ngx-datepicker.component.html","../../../projects/libs/date-picker/directives/ngx-datepicker.directive.ts","../../../projects/libs/date-picker/components/calendar/ngx-calendar.component.ts","../../../projects/libs/date-picker/components/calendar/ngx-calendar.component.html","../../../projects/libs/date-picker/provide-date-adapters.ts","../../../projects/libs/date-picker/models/range.ts","../../../projects/libs/date-picker/models/date.ts","../../../projects/libs/date-picker/helpers/date-range.helper.ts","../../../projects/libs/date-picker/components/date-range-picker/ngx-date-range-picker.component.ts","../../../projects/libs/date-picker/components/date-range-picker/ngx-date-range-picker.component.html","../../../projects/libs/date-picker/directives/ngx-date-range-picker.directive.ts","../../../projects/libs/date-picker/ngx-kit-date-picker.ts"],"sourcesContent":["import { TemplateRef } from '@angular/core';\r\n\r\nexport class NgxDatePickerConfig {\r\n previousButtonTemplate?: TemplateRef<any>;\r\n nextButtonTemplate?: TemplateRef<any>;\r\n caretDownIconTemplate?: TemplateRef<any>;\r\n\r\n todayButton = true;\r\n clearButton = true;\r\n}\r\n","/**\n * Matches strings that have the form of a valid RFC 3339 string\n * (https://tools.ietf.org/html/rfc3339). Note that the string may not actually be a valid date\n * because the regex will match strings an with out of bounds month, date, etc.\n */\nconst ISO_8601_REGEX =\n /^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|(?:(?:\\+|-)\\d{2}:\\d{2}))?)?$/;\n\nexport function deserialize(value: any): Date | null {\n if (typeof value === 'string') {\n if (!value) {\n return null;\n }\n // The `Date` constructor accepts formats other than ISO 8601, so we need to make sure the\n // string is the right format first.\n if (ISO_8601_REGEX.test(value)) {\n let date = new Date(value);\n if (isValid(date)) {\n return date;\n }\n }\n }\n if (isValid(value)) {\n return value;\n } else {\n return null;\n }\n}\n\nexport function isValid(obj: any) {\n return obj instanceof Date && !isNaN(obj.getTime());\n}\n\n/**\n * Checks if two dates are equal.\n * @param first The first date to check.\n * @param second The second date to check.\n * @returns Whether the two dates are equal.\n * Null dates are considered equal to other null dates.\n */\nexport function sameDate(first: Date | null, second: Date | null): boolean {\n if (first && second) {\n let firstValid = isValid(first);\n let secondValid = isValid(second);\n if (firstValid && secondValid) {\n return !compareDate(first, second);\n }\n return firstValid == secondValid;\n }\n return first == second;\n}\n\n/**\n * Compares two dates.\n * @param first The first date to compare.\n * @param second The second date to compare.\n * @returns 0 if the dates are equal, a number less than 0 if the first date is earlier,\n * a number greater than 0 if the first date is later.\n */\nexport function compareDate(first?: Date | null, second?: Date | null): number {\n if (!first || !second) return 0;\n return (\n first.getFullYear() - second.getFullYear() ||\n first.getMonth() - second.getMonth() ||\n first.getDate() - second.getDate()\n );\n}\n\n/**\n * Clamp the given date between min and max dates.\n * @param date The date to clamp.\n * @param min The minimum value to allow. If null or omitted no min is enforced.\n * @param max The maximum value to allow. If null or omitted no max is enforced.\n * @returns `min` if `date` is less than `min`, `max` if date is greater than `max`,\n * otherwise `date`.\n */\nexport function clampDate(date?: Date | null, min?: Date | null, max?: Date | null): number {\n if (min && compareDate(date, min) < 0) {\n return -1;\n }\n if (max && compareDate(date, max) > 0) {\n return 1;\n }\n return 0;\n}\n\n//------------------------------------------------------------------------------------------------------------\n/**\n * check only year and month\n */\nexport function compareMonth(first: Date, second: Date): number {\n return first.getFullYear() - second.getFullYear() || first.getMonth() - second.getMonth();\n}\nexport function clampMonth(date: Date, min?: Date | null, max?: Date | null): number {\n if (min && compareMonth(date, min) < 0) {\n return -1;\n }\n if (max && compareMonth(date, max) > 0) {\n return 1;\n }\n return 0;\n}\n//------------------------------------------------------------------------------------------------------------\n/**\n * check only year\n */\nexport function compareYear(first: Date, second: Date): number {\n return first.getFullYear() - second.getFullYear();\n}\nexport function clampYear(date: Date, min?: Date | null, max?: Date | null): number {\n if (min && compareYear(date, min) < 0) {\n return -1;\n }\n if (max && compareYear(date, max) > 0) {\n return 1;\n }\n return 0;\n}\n","// Date and Time Patterns\n\nimport { CalendarDate } from '../adapters/calendar-date';\n\n// yy = 2-digit year; yyyy = full year\n\n// M = digit month; MM = 2-digit month; MMM = short month name; MMMM = full month name\n\n// EEEE = full weekday name; EEE = short weekday name\n\n// d = digit day; dd = 2-digit day\n\n// h = hours am/pm; hh = 2-digit hours am/pm; H = hours; HH = 2-digit hours\n\n// m = minutes; mm = 2-digit minutes; aaa = AM/PM\n\n// s = seconds; ss = 2-digit seconds\n\n// S = miliseconds\n\nexport function genFormatDate(\n date: CalendarDate,\n pattern = 'M/d/yyyy',\n monthNames: string[],\n dayNames: string[],\n): string {\n if (!date) {\n return '';\n }\n\n const day = date.day ?? 0;\n const month = date.month ?? 0;\n const year = date.year ?? 0;\n const hour24 = date.hours ?? 0;\n const minute = date.minutes ?? 0;\n const second = date.seconds ?? 0;\n const ms = date.milliseconds ?? 0;\n const dayOfWeek = date.dayOfWeek ?? 0;\n\n const hour12 = hour24 % 12 || 12;\n\n const tokens: Record<string, string> = {\n yyyy: year.toString(),\n\n yy: year.toString().slice(-2),\n\n MMMM: monthNames[month] ?? '',\n\n MMM: (monthNames[month] ?? '').substring(0, 3),\n\n MM: twoDigitPad(month + 1),\n\n M: (month + 1).toString(),\n\n EEEE: dayNames[dayOfWeek] ?? '',\n\n EEE: (dayNames[dayOfWeek] ?? '').substring(0, 3),\n\n dd: twoDigitPad(day),\n\n d: day.toString(),\n\n HH: twoDigitPad(hour24),\n\n H: hour24.toString(),\n\n hh: twoDigitPad(hour12),\n\n h: hour12.toString(),\n\n mm: twoDigitPad(minute),\n\n m: minute.toString(),\n\n ss: twoDigitPad(second),\n\n s: second.toString(),\n\n S: ms.toString().padStart(3, '0'),\n\n aaa: hour24 < 12 ? 'AM' : 'PM',\n };\n\n return pattern.replace(\n /yyyy|yy|MMMM|MMM|MM|M|EEEE|EEE|dd|d|HH|H|hh|h|mm|m|ss|s|S|aaa/g,\n (token) => tokens[token],\n );\n}\n\nexport function twoDigitPad(num: number): string {\n return num.toString().padStart(2, '0');\n}\n\n// console.log(formatDate(new Date())); // 12/19/2022\n// console.log(formatDate(new Date(), 'dd-MMM-yyyy')); //OP's request 19-Dec-2022\n// console.log(formatDate(new Date(), 'EEEE, MMMM d, yyyy HH:mm:ss.S aaa')); // Monday, December 19, 2022 10:44:35.437 AM\n// console.log(formatDate(new Date(), 'EEE, MMM d, yyyy HH:mm')); //Mon, Dec 19, 2022 10:44\n// console.log(formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss.S')); //2022-12-19 10:44:35.438\n// console.log(formatDate(new Date(), 'M/dd/yyyy h:mmaaa')); //12/19/2022 10:44AM\n","import { genFormatDate } from '../../helpers/date-format.helper';\r\nimport { DatePickerView } from '../../models/view';\r\nimport { IDateAdapter } from '../IAdapter';\r\nimport { CalendarDate } from '../calendar-date';\r\n\r\nexport class GregorianAdapter implements IDateAdapter {\r\n startOfWeek = 0;\r\n weekStartDay = 0;\r\n get longMonths() {\r\n return [\r\n 'January',\r\n 'February',\r\n 'March',\r\n 'April',\r\n 'May',\r\n 'June',\r\n 'July',\r\n 'August',\r\n 'September',\r\n 'October',\r\n 'November',\r\n 'December',\r\n ];\r\n }\r\n get narrowDays() {\r\n return ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\r\n }\r\n get shortDays() {\r\n return ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\r\n }\r\n get longDays() {\r\n return ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\r\n }\r\n\r\n toLocale(date: Date): CalendarDate {\r\n const d = date;\r\n return {\r\n locale: 'en',\r\n day: d.getDate(),\r\n month: d.getMonth(),\r\n year: d.getFullYear(),\r\n date: d,\r\n hours: date.getHours(),\r\n minutes: date.getMinutes(),\r\n seconds: date.getSeconds(),\r\n milliseconds: date.getMilliseconds(),\r\n dayOfWeek: date.getDay(),\r\n };\r\n }\r\n today() {\r\n return this.toLocale(new Date());\r\n }\r\n\r\n /**\r\n * getting first day of month\r\n */\r\n firstDayofMonth(year: number, month: number) {\r\n return new Date(year, month, 1).getDay();\r\n }\r\n /**\r\n * getting last date of month\r\n */\r\n lastDateofMonth(year: number, month: number) {\r\n return new Date(year, month + 1, 0).getDate();\r\n }\r\n /**\r\n * getting last day of month\r\n */\r\n lastDayofMonth(year: number, month: number) {\r\n return new Date(year, month, this.lastDateofMonth(year, month)).getDay();\r\n }\r\n /**\r\n * getting last date of previous month\r\n */\r\n lastDateofLastMonth(year: number, month: number) {\r\n return new Date(year, month, 0).getDate();\r\n }\r\n\r\n // TODO\r\n /**\r\n * month start with zero\r\n * @param date\r\n * @returns\r\n */\r\n getDate(date: CalendarDate): Date {\r\n let str = date.year + '-' + (date.month ? date.month + 1 : 1) + '-' + (date.day ?? 1);\r\n str = str\r\n .split('-')\r\n .map((i) => {\r\n return i.length < 2 ? '0' + i : i;\r\n })\r\n .join('-');\r\n if (date.hours || date.minutes || date.seconds || date.milliseconds) {\r\n str +=\r\n ' ' +\r\n (date.hours ?? 0) +\r\n ':' +\r\n (date.minutes ?? 0) +\r\n ':' +\r\n (date.seconds ?? 0) +\r\n ':' +\r\n (date.milliseconds ?? 0);\r\n }\r\n return new Date(str);\r\n }\r\n\r\n formatDate(date: CalendarDate, format: string) {\r\n if (!date) {\r\n return '';\r\n }\r\n // let option: Intl.DateTimeFormatOptions = {\r\n // year: 'numeric',\r\n // month: '2-digit',\r\n // day: '2-digit'\r\n // };\r\n // if (format === 'full') {\r\n // option = {\r\n // year: 'numeric',\r\n // month: 'long',\r\n // day: '2-digit',\r\n // weekday: 'long'\r\n // };\r\n // }\r\n // return new Date(date).toLocaleDateString('en-US', option);\r\n return genFormatDate(date, format, this.longMonths, this.longDays);\r\n }\r\n getStartOfWeek(date: Date): Date {\r\n const d = new Date(date);\r\n d.setHours(0, 0, 0, 0);\r\n const delta = (d.getDay() - this.weekStartDay + 7) % 7;\r\n d.setDate(d.getDate() - delta);\r\n return d;\r\n }\r\n\r\n getEndOfWeek(date: Date): Date {\r\n const d = this.getStartOfWeek(date);\r\n d.setDate(d.getDate() + 6);\r\n d.setHours(23, 59, 59, 999);\r\n return d;\r\n }\r\n\r\n getStartOf(date: Date | null, t: DatePickerView) {\r\n if (!date) {\r\n return date;\r\n }\r\n switch (t) {\r\n case 'year':\r\n return new Date(date.getFullYear(), 0, 1);\r\n case 'month':\r\n return new Date(date.getFullYear(), date.getMonth(), 1);\r\n case 'day':\r\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n }\r\n }\r\n\r\n getLastOf(date: Date | null, t: DatePickerView) {\r\n if (!date) {\r\n return date;\r\n }\r\n switch (t) {\r\n case 'year':\r\n return new Date(date.getFullYear(), 12, 0);\r\n case 'month':\r\n return new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n case 'day':\r\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n }\r\n }\r\n}\r\n","export namespace Jalali {\r\n /*\r\n Jalaali years starting the 33-year rule.\r\n */\r\n export const breaks = [\r\n -61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394,\r\n 2456, 3178,\r\n ];\r\n\r\n /*\r\n Converts a Gregorian date to Jalaali.\r\n */\r\n export function toJalaali(date: Date) {\r\n // if (Object.prototype.toString.call(date) === '[object Date]') {\r\n let gd = date.getDate();\r\n let gm = date.getMonth() + 1;\r\n let gy = date.getFullYear();\r\n return d2j(g2d(gy, gm, gd));\r\n // }\r\n // return null;\r\n }\r\n\r\n /*\r\n Converts a Jalaali date to Gregorian.\r\n */\r\n export function toGregorian(jy: any, jm: any, jd: any) {\r\n return d2g(j2d(jy, jm, jd));\r\n }\r\n\r\n /*\r\n Checks whether a Jalaali date is valid or not.\r\n */\r\n export function isValidJalaaliDate(jy: number, jm: number, jd: number) {\r\n return (\r\n jy >= -61 && jy <= 3177 && jm >= 1 && jm <= 12 && jd >= 1 && jd <= jalaaliMonthLength(jy, jm)\r\n );\r\n }\r\n\r\n /*\r\n Is this a leap year or not?\r\n */\r\n export function isLeapJalaaliYear(jy: any) {\r\n return jalCalLeap(jy) === 0;\r\n }\r\n\r\n /*\r\n Number of days in a given month in a Jalaali year.\r\n */\r\n export function jalaaliMonthLength(jy: any, jm: number) {\r\n if (jm <= 6) return 31;\r\n if (jm <= 11) return 30;\r\n if (isLeapJalaaliYear(jy)) return 30;\r\n return 29;\r\n }\r\n\r\n /*\r\n This function determines if the Jalaali (Persian) year is\r\n leap (366-day long) or is the common year (365 days)\r\n @param jy Jalaali calendar year (-61 to 3177)\r\n @returns number of years since the last leap year (0 to 4)\r\n */\r\n export function jalCalLeap(jy: number) {\r\n var bl = breaks.length,\r\n jp = breaks[0],\r\n jm,\r\n jump = 0,\r\n leap,\r\n n,\r\n i;\r\n\r\n if (jy < jp || jy >= breaks[bl - 1]) throw new Error('Invalid Jalaali year ' + jy);\r\n\r\n for (i = 1; i < bl; i += 1) {\r\n jm = breaks[i];\r\n jump = jm - jp;\r\n if (jy < jm) break;\r\n jp = jm;\r\n }\r\n n = jy - jp;\r\n\r\n if (jump - n < 6) n = n - jump + div(jump + 4, 33) * 33;\r\n leap = mod(mod(n + 1, 33) - 1, 4);\r\n if (leap === -1) {\r\n leap = 4;\r\n }\r\n\r\n return leap;\r\n }\r\n\r\n /*\r\n This function determines if the Jalaali (Persian) year is\r\n leap (366-day long) or is the common year (365 days), and\r\n finds the day in March (Gregorian calendar) of the first\r\n day of the Jalaali year (jy).\r\n @param jy Jalaali calendar year (-61 to 3177)\r\n @param withoutLeap when don't need leap (true or false) default is false\r\n @return\r\n leap: number of years since the last leap year (0 to 4)\r\n gy: Gregorian year of the beginning of Jalaali year\r\n march: the March day of Farvardin the 1st (1st day of jy)\r\n @see: http://www.astro.uni.torun.pl/~kb/Papers/EMP/PersianC-EMP.htm\r\n @see: http://www.fourmilab.ch/documents/calendar/\r\n */\r\n export function jalCal(jy: number, withoutLeap: any) {\r\n var bl = breaks.length,\r\n gy = jy + 621,\r\n leapJ = -14,\r\n jp = breaks[0],\r\n jm,\r\n jump = 0,\r\n leap,\r\n leapG,\r\n march,\r\n n,\r\n i;\r\n\r\n if (jy < jp || jy >= breaks[bl - 1]) throw new Error('Invalid Jalaali year ' + jy);\r\n\r\n // Find the limiting years for the Jalaali year jy.\r\n for (i = 1; i < bl; i += 1) {\r\n jm = breaks[i];\r\n jump = jm - jp;\r\n if (jy < jm) break;\r\n leapJ = leapJ + div(jump, 33) * 8 + div(mod(jump, 33), 4);\r\n jp = jm;\r\n }\r\n n = jy - jp;\r\n\r\n // Find the number of leap years from AD 621 to the beginning\r\n // of the current Jalaali year in the Persian calendar.\r\n leapJ = leapJ + div(n, 33) * 8 + div(mod(n, 33) + 3, 4);\r\n if (mod(jump, 33) === 4 && jump - n === 4) leapJ += 1;\r\n\r\n // And the same in the Gregorian calendar (until the year gy).\r\n leapG = div(gy, 4) - div((div(gy, 100) + 1) * 3, 4) - 150;\r\n\r\n // Determine the Gregorian date of Farvardin the 1st.\r\n march = 20 + leapJ - leapG;\r\n\r\n // return with gy and march when we don't need leap\r\n if (withoutLeap) return { gy: gy, march: march };\r\n\r\n // Find how many years have passed since the last leap year.\r\n if (jump - n < 6) n = n - jump + div(jump + 4, 33) * 33;\r\n leap = mod(mod(n + 1, 33) - 1, 4);\r\n if (leap === -1) {\r\n leap = 4;\r\n }\r\n\r\n return {\r\n leap: leap,\r\n gy: gy,\r\n march: march,\r\n };\r\n }\r\n\r\n /*\r\n Converts a date of the Jalaali calendar to the Julian Day number.\r\n @param jy Jalaali year (1 to 3100)\r\n @param jm Jalaali month (1 to 12)\r\n @param jd Jalaali day (1 to 29/31)\r\n @return Julian Day number\r\n */\r\n export function j2d(jy: any, jm: number, jd: number) {\r\n var r = jalCal(jy, true);\r\n return g2d(r.gy, 3, r.march) + (jm - 1) * 31 - div(jm, 7) * (jm - 7) + jd - 1;\r\n }\r\n\r\n /*\r\n Converts the Julian Day number to a date in the Jalaali calendar.\r\n @param jdn Julian Day number\r\n @return\r\n jy: Jalaali year (1 to 3100)\r\n jm: Jalaali month (1 to 12)\r\n jd: Jalaali day (1 to 29/31)\r\n */\r\n export function d2j(jdn: number) {\r\n var gy = d2g(jdn).gy, // Calculate Gregorian year (gy).\r\n jy = gy - 621,\r\n r = jalCal(jy, false),\r\n jdn1f = g2d(gy, 3, r.march),\r\n jd,\r\n jm,\r\n k;\r\n\r\n // Find number of days that passed since 1 Farvardin.\r\n k = jdn - jdn1f;\r\n if (k >= 0) {\r\n if (k <= 185) {\r\n // The first 6 months.\r\n jm = 1 + div(k, 31);\r\n jd = mod(k, 31) + 1;\r\n return {\r\n jy: jy,\r\n jm: jm,\r\n jd: jd,\r\n };\r\n } else {\r\n // The remaining months.\r\n k -= 186;\r\n }\r\n } else {\r\n // Previous Jalaali year.\r\n jy -= 1;\r\n k += 179;\r\n if (r.leap === 1) k += 1;\r\n }\r\n jm = 7 + div(k, 30);\r\n jd = mod(k, 30) + 1;\r\n return {\r\n jy: jy,\r\n jm: jm,\r\n jd: jd,\r\n };\r\n }\r\n\r\n /*\r\n Calculates the Julian Day number from Gregorian or Julian\r\n calendar dates. This integer number corresponds to the noon of\r\n the date (i.e. 12 hours of Universal Time).\r\n The procedure was tested to be good since 1 March, -100100 (of both\r\n calendars) up to a few million years into the future.\r\n @param gy Calendar year (years BC numbered 0, -1, -2, ...)\r\n @param gm Calendar month (1 to 12)\r\n @param gd Calendar day of the month (1 to 28/29/30/31)\r\n @return Julian Day number\r\n */\r\n export function g2d(gy: number, gm: number, gd: any) {\r\n var d =\r\n div((gy + div(gm - 8, 6) + 100100) * 1461, 4) +\r\n div(153 * mod(gm + 9, 12) + 2, 5) +\r\n gd -\r\n 34840408;\r\n d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752;\r\n return d;\r\n }\r\n\r\n /*\r\n Calculates Gregorian and Julian calendar dates from the Julian Day number\r\n (jdn) for the period since jdn=-34839655 (i.e. the year -100100 of both\r\n calendars) to some millions years ahead of the present.\r\n @param jdn Julian Day number\r\n @return\r\n gy: Calendar year (years BC numbered 0, -1, -2, ...)\r\n gm: Calendar month (1 to 12)\r\n gd: Calendar day of the month M (1 to 28/29/30/31)\r\n */\r\n export function d2g(jdn: number) {\r\n var j, i, gd, gm, gy;\r\n j = 4 * jdn + 139361631;\r\n j = j + div(div(4 * jdn + 183187720, 146097) * 3, 4) * 4 - 3908;\r\n i = div(mod(j, 1461), 4) * 5 + 308;\r\n gd = div(mod(i, 153), 5) + 1;\r\n gm = mod(div(i, 153), 12) + 1;\r\n gy = div(j, 1461) - 100100 + div(8 - gm, 6);\r\n return {\r\n gy: gy,\r\n gm: gm,\r\n gd: gd,\r\n };\r\n }\r\n\r\n /**\r\n * Return Saturday and Friday day of current week(week start in Saturday)\r\n * @param {number} jy jalaali year\r\n * @param {number} jm jalaali month\r\n * @param {number} jd jalaali day\r\n * @returns Saturday and Friday of current week\r\n */\r\n export function jalaaliWeek(jy: any, jm: any, jd: number) {\r\n var dayOfWeek = jalaaliToDateObject(jy, jm, jd).getDay();\r\n\r\n var startDayDifference = dayOfWeek == 6 ? 0 : -(dayOfWeek + 1);\r\n var endDayDifference = 6 + startDayDifference;\r\n\r\n return {\r\n saturday: d2j(j2d(jy, jm, jd + startDayDifference)),\r\n friday: d2j(j2d(jy, jm, jd + endDayDifference)),\r\n };\r\n }\r\n\r\n /**\r\n * Convert Jalaali calendar dates to javascript Date object\r\n * @param {number} jy jalaali year\r\n * @param {number} jm jalaali month\r\n * @param {number} jd jalaali day\r\n * @param {number} [h] hours\r\n * @param {number} [m] minutes\r\n * @param {number} [s] seconds\r\n * @param {number} [ms] milliseconds\r\n * @returns Date object of the jalaali calendar dates\r\n */\r\n export function jalaaliToDateObject(\r\n jy: any,\r\n jm: any,\r\n jd: any,\r\n h?: any,\r\n m?: any,\r\n s?: any,\r\n ms?: any,\r\n ) {\r\n var gregorianCalenderDate = toGregorian(jy, jm, jd);\r\n\r\n return new Date(\r\n gregorianCalenderDate.gy,\r\n gregorianCalenderDate.gm - 1,\r\n gregorianCalenderDate.gd,\r\n h || 3,\r\n m || 30,\r\n s || 0,\r\n ms || 0,\r\n );\r\n }\r\n\r\n /*\r\n Utility helper functions.\r\n */\r\n\r\n export function div(a: number, b: number) {\r\n return ~~(a / b);\r\n }\r\n\r\n export function mod(a: number, b: number) {\r\n return a - ~~(a / b) * b;\r\n }\r\n}\r\n","import { genFormatDate } from '../../helpers/date-format.helper';\r\nimport { Jalali } from '../converters/jalali-converter.helper';\r\nimport { DatePickerView } from '../../models/view';\r\nimport { IDateAdapter } from '../IAdapter';\r\nimport { CalendarDate } from '../calendar-date';\r\n\r\nexport class JalaliAdapter implements IDateAdapter {\r\n // shanbeh\r\n startOfWeek = 1;\r\n weekStartDay = 6;\r\n\r\n dariMonth = false;\r\n\r\n get longMonths() {\r\n return [\r\n 'فروردین',\r\n 'اردیبهشت',\r\n 'خرداد',\r\n 'تیر',\r\n 'مرداد',\r\n 'شهریور',\r\n 'مهر',\r\n 'آبان',\r\n 'آذر',\r\n 'دی',\r\n 'بهمن',\r\n 'اسفند',\r\n ];\r\n }\r\n get narrowDays() {\r\n return ['شنبه', 'یک', 'دو', 'سه', 'چهار', 'پنج', 'جمعه'];\r\n }\r\n get shortDays() {\r\n return ['ش', 'ی', 'د', 'س', 'چ', 'پ', 'ج'];\r\n }\r\n get longDays() {\r\n return ['شنبه', 'یک شنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنج شنبه', 'جمعه'];\r\n }\r\n\r\n constructor() {}\r\n\r\n toLocale(date: Date): CalendarDate {\r\n let jd = Jalali.toJalaali(date);\r\n return {\r\n locale: 'fa',\r\n day: jd.jd,\r\n month: jd.jm - 1,\r\n year: jd.jy,\r\n date,\r\n hours: date.getHours(),\r\n minutes: date.getMinutes(),\r\n seconds: date.getSeconds(),\r\n milliseconds: date.getMilliseconds(),\r\n dayOfWeek: (date.getDay() + this.startOfWeek) % 7,\r\n };\r\n }\r\n today() {\r\n return this.toLocale(new Date());\r\n }\r\n /**\r\n * getting first day of month\r\n */\r\n firstDayofMonth(year: number, month: number) {\r\n let gDate = Jalali.jalaaliToDateObject(year, month + 1, 1);\r\n let day = gDate.getDay() + this.startOfWeek;\r\n return day > 6 ? 0 : day;\r\n }\r\n /**\r\n * getting last date of month\r\n */\r\n lastDateofMonth(year: number, month: number) {\r\n const monthLengths = [\r\n 31,\r\n 31,\r\n 31,\r\n 31,\r\n 31,\r\n 31,\r\n 30,\r\n 30,\r\n 30,\r\n 30,\r\n 30,\r\n Jalali.isLeapJalaaliYear(year) ? 30 : 29,\r\n ];\r\n return monthLengths[month];\r\n }\r\n /**\r\n * getting last day of month\r\n */\r\n lastDayofMonth(year: number, month: number) {\r\n let gDate = Jalali.jalaaliToDateObject(year, month + 1, this.lastDateofMonth(year, month));\r\n let day = gDate.getDay() + this.startOfWeek;\r\n return day > 6 ? 0 : day;\r\n }\r\n /**\r\n * getting last date of previous month\r\n */\r\n lastDateofLastMonth(year: number, month: number) {\r\n month--;\r\n if (month < 0) {\r\n month = 11;\r\n year--;\r\n }\r\n const monthLengths = [\r\n 31,\r\n 31,\r\n 31,\r\n 31,\r\n 31,\r\n 31,\r\n 30,\r\n 30,\r\n 30,\r\n 30,\r\n 30,\r\n Jalali.isLeapJalaaliYear(year) ? 30 : 29,\r\n ];\r\n return monthLengths[month];\r\n }\r\n /**\r\n * تبدیل تاریخ جلالی به میلادی برای نمایش\r\n * month start with zero\r\n * @param date\r\n * @returns\r\n */\r\n getDate(date: CalendarDate): Date {\r\n let d = Jalali.jalaaliToDateObject(\r\n date.year,\r\n date.month ? date.month + 1 : 1,\r\n date.day ?? 1,\r\n date.hours ?? 0,\r\n date.minutes ?? 0,\r\n date.seconds ?? 0,\r\n date.milliseconds ?? 0,\r\n );\r\n\r\n // {\r\n // locale: 'fa',\r\n // year: d.getFullYear(),\r\n // month: d.getMonth(),\r\n // day: d.getDate(),\r\n // hours: d.getHours(),\r\n // minutes: d.getMinutes(),\r\n // seconds: d.getSeconds(),\r\n // milliseconds: d.getMilliseconds(),\r\n // dayOfWeek: d.getDay() + this.startOfWeek,\r\n // }\r\n return d;\r\n }\r\n\r\n formatDate(date: CalendarDate, format: string) {\r\n if (!date) {\r\n return '';\r\n }\r\n // let option: Intl.DateTimeFormatOptions = {\r\n // year: 'numeric',\r\n // month: '2-digit',\r\n // day: '2-digit'\r\n // };\r\n // if (format === 'full') {\r\n // option = {\r\n // year: 'numeric',\r\n // month: 'long',\r\n // day: '2-digit',\r\n // weekday: 'long'\r\n // };\r\n // }\r\n // return new Date(date).toLocaleDateString('fa-IR-u-nu-latn', option);\r\n return genFormatDate(date, format, this.longMonths, this.longDays);\r\n }\r\n // _______________________________________________________________________________________\r\n\r\n getStartOfWeek(date: Date): Date {\r\n const d = new Date(date);\r\n d.setHours(0, 0, 0, 0);\r\n const delta = (d.getDay() - this.weekStartDay + 7) % 7;\r\n d.setDate(d.getDate() - delta);\r\n return d;\r\n }\r\n\r\n getEndOfWeek(date: Date): Date {\r\n const d = this.getStartOfWeek(date);\r\n d.setDate(d.getDate() + 6);\r\n d.setHours(23, 59, 59, 999);\r\n return d;\r\n }\r\n\r\n getStartOf(date: Date | null, t: DatePickerView) {\r\n if (!date) {\r\n return date;\r\n }\r\n let jDate = Jalali.toJalaali(date);\r\n switch (t) {\r\n case 'year':\r\n return Jalali.jalaaliToDateObject(jDate.jy, 1, 1);\r\n case 'month':\r\n // console.log(jDate.jy, '-', jDate.jm, '-', 1);\r\n return Jalali.jalaaliToDateObject(jDate.jy, jDate.jm, 1);\r\n case 'day':\r\n return Jalali.jalaaliToDateObject(jDate.jy, jDate.jm, jDate.jd);\r\n }\r\n }\r\n\r\n getLastOf(date: Date | null, t: DatePickerView) {\r\n if (!date) {\r\n return date;\r\n }\r\n let jDate = Jalali.toJalaali(date);\r\n switch (t) {\r\n case 'year':\r\n return Jalali.jalaaliToDateObject(jDate.jy, 12, 0);\r\n case 'month':\r\n // console.log(jDate.jy, '-', jDate.jm, '-', this.lastDateofMonth(jDate.jy, jDate.jm));\r\n return Jalali.jalaaliToDateObject(\r\n jDate.jy,\r\n jDate.jm,\r\n this.lastDateofMonth(jDate.jy, jDate.jm),\r\n );\r\n case 'day':\r\n return Jalali.jalaaliToDateObject(jDate.jy, jDate.jm, jDate.jd);\r\n }\r\n }\r\n}\r\n","/**\r\n * منطق تبدیل تاریخ هجری قمری (Umm al-Qura) <-> میلادی\r\n * جدا از آداپتر، تا قابل تست و استفادهی مستقل باشد.\r\n */\r\nconst HIJRI_LOCALE = 'ar-SA-u-ca-islamic-umalqura';\r\nconst ONE_DAY_MS = 86400000;\r\n\r\nexport namespace HijriConverter {\r\n export interface HijriDate {\r\n day: number;\r\n month: number; // صفر-پایه: محرم = 0\r\n year: number;\r\n }\r\n\r\n const parser = new Intl.DateTimeFormat(HIJRI_LOCALE, {\r\n day: 'numeric',\r\n month: 'numeric',\r\n year: 'numeric',\r\n });\r\n\r\n /** تبدیل اعداد عربی/فارسی به لاتین */\r\n function toLatinDigits(str: string): string {\r\n return str\r\n .replace(/[٠١٢٣٤٥٦٧٨٩]/g, (d) => '0123456789'['٠١٢٣٤٥٦٧٨٩'.indexOf(d)])\r\n .replace(/[۰۱۲۳۴۵۶۷۸۹]/g, (d) => '0123456789'['۰۱۲۳۴۵۶۷۸۹'.indexOf(d)]);\r\n }\r\n\r\n /** استخراج تاریخ هجری از یک Date میلادی */\r\n export function parse(date: Date): HijriDate {\r\n const parts = parser.formatToParts(date);\r\n return {\r\n day: parseInt(toLatinDigits(parts.find((p) => p.type === 'day')!.value), 10),\r\n month: parseInt(toLatinDigits(parts.find((p) => p.type === 'month')!.value), 10) - 1,\r\n year: parseInt(toLatinDigits(parts.find((p) => p.type === 'year')!.value), 10),\r\n };\r\n }\r\n\r\n /**\r\n * پیدا کردن آخرین «روز اول ماه هجری» که در همان روز seed یا\r\n * قبل از آن باشد (جستجوی فقط روبهعقب، حداکثر 35 روز).\r\n *\r\n * نکتهی مهم: این جستجو باید فقط روبهعقب باشد، نه «نزدیکترین\r\n * در هر دو جهت». جستجوی دوجهته باعث میشد وقتی الگوریتم میخواهد\r\n * یک قدم به عقب برود (-5 روز)، چون فاصلهی جلو هنوز کمتر بود،\r\n * دوباره به همان ماهِ قبلی برگردد و لوپ هیچوقت واقعاً عقب نرود.\r\n */\r\n function firstOfMonthAtOrBefore(seed: Date): Date {\r\n for (let i = 0; i <= 35; i++) {\r\n const test = new Date(seed);\r\n test.setDate(test.getDate() - i);\r\n if (parse(test).day === 1) {\r\n return test;\r\n }\r\n }\r\n // عملاً نباید به اینجا برسیم\r\n return seed;\r\n }\r\n\r\n /**\r\n * پیدا کردن JS Date معادل «روز اول» یک ماه هجری دلخواه.\r\n *\r\n * بهجای تکیه به یک فرمولِ تخمینیِ سال میلادی (که میتواند تا یک\r\n * سال کامل خطا داشته باشد و جستجوی محدودِ ±35 روزه را شکست بدهد —\r\n * همان باگی که باعث میشد lastDateofMonth عدد ۳۱ بهجای ۲۹ بدهد)،\r\n * از «امروز» -که همیشه با Intl بهدرستی قابلخواندن است- بهعنوان\r\n * لنگر شروع میکنیم و ماهبهماه جلو/عقب میرویم. هر قدم (چه\r\n * `+30` چه `-5`) probe را به داخلِ بدنهی ماهِ هدف میبرد (نه قبل\r\n * از آن)، پس جستجوی «آخرین day1 در همان روز یا قبلتر» همیشه\r\n * دقیقاً day1 همان ماه هدف را پیدا میکند.\r\n */\r\n // نتیجهی firstDayOfMonth فقط تابعی از (year, month) هست و در طول عمر\r\n // صفحه هیچوقت عوض نمیشه، پس کشکردنش کاملاً امنه. اهمیتش اینجاست که\r\n // renderCalendar (در ngx-date-picker-base.component) برای هر سلولِ روزِ\r\n // نمایشدادهشده در گرید ماه (~۳۰ تا ۴۲ تا) یکبار adapter.getDate() صدا\r\n // میزنه، و هرکدوم به toGregorian() → firstDayOfMonth() ختم میشه — یعنی\r\n // بدون کش، این جستوجوی نسبتاً سنگین (که خودش میتونه تا حدود ۱۲۰۰ بار\r\n // تکرار داخلی و هر بار تا ۳۵ فراخوانی Intl.DateTimeFormat داشته باشه) به\r\n // ازای هر بار رندر یک ماه، دهها بار برای همون (year, month) تکرار میشد —\r\n // مخصوصاً وقتی کاربر به سالهای دور از «امروز» ناوبری میکنه، محسوس کند بود.\r\n const firstDayOfMonthCache = new Map<string, Date>();\r\n\r\n export function firstDayOfMonth(year: number, month: number): Date {\r\n const cacheKey = `${year}-${month}`;\r\n const cached = firstDayOfMonthCache.get(cacheKey);\r\n if (cached) return new Date(cached);\r\n\r\n let anchorDate = firstOfMonthAtOrBefore(new Date());\r\n let h = parse(anchorDate);\r\n\r\n // سقف ایمنی برای جلوگیری از لوپ بینهایت (≈ 100 سال هجری)\r\n let guard = 0;\r\n while ((h.year !== year || h.month !== month) && guard < 1200) {\r\n const targetIsLater = year > h.year || (year === h.year && month > h.month);\r\n const probe = new Date(anchorDate);\r\n // طول هر ماه هجری 29 یا 30 روز است؛ +30 همیشه به داخل ماه\r\n // بعد میرسد و -5 همیشه داخل بدنهی ماه قبل میماند.\r\n probe.setDate(probe.getDate() + (targetIsLater ? 30 : -5));\r\n anchorDate = firstOfMonthAtOrBefore(probe);\r\n h = parse(anchorDate);\r\n guard++;\r\n }\r\n firstDayOfMonthCache.set(cacheKey, anchorDate);\r\n return anchorDate;\r\n }\r\n\r\n /** تبدیل سال/ماه/روز هجری به Date میلادی */\r\n export function toGregorian(year: number, month: number, day: number): Date {\r\n const first = firstDayOfMonth(year, month);\r\n const result = new Date(first);\r\n result.setDate(result.getDate() + (day - 1));\r\n return result;\r\n }\r\n\r\n /**\r\n * تعداد واقعیِ روزهای یک ماه هجری.\r\n *\r\n * نکتهی مهم (باگ قبلی): نباید از `Date.getDate()` روی «روز قبل از\r\n * شروع ماه بعد» استفاده کرد، چون آن عدد، شمارهی روز در تقویم\r\n * میلادیِ همان Date است، نه طول ماه هجری.\r\n * روش درست: فاصلهی روزها بین «اول این ماه» و «اول ماه بعد».\r\n */\r\n export function daysInMonth(year: number, month: number): number {\r\n const nextMonth = (month + 1) % 12;\r\n const nextYear = month === 11 ? year + 1 : year;\r\n\r\n const first = firstDayOfMonth(year, month);\r\n const nextFirst = firstDayOfMonth(nextYear, nextMonth);\r\n\r\n const diffMs = nextFirst.getTime() - first.getTime();\r\n return Math.round(diffMs / ONE_DAY_MS);\r\n }\r\n}\r\n","import { DatePickerView } from '../../models/view';\r\nimport { CalendarDate } from '../calendar-date';\r\nimport { HijriConverter } from '../converters/hijri-converter.helper';\r\nimport { IDateAdapter } from '../IAdapter';\r\n\r\n/**\r\n * تقویم هجری قمری - Umm al-Qura (تقویم رسمی عربستان)\r\n * نیاز به ICU ≥ 56 دارد (تمام مرورگرهای مدرن)\r\n *\r\n * منطق تبدیل تاریخ در HijriConverter (helpers/hijri-converter.helper.ts) است.\r\n */\r\nexport class HijriAdapter implements IDateAdapter {\r\n /** یکشنبه = 0 (همخوان با تقویم میلادی برای سادگی) */\r\n startOfWeek = 0;\r\n weekStartDay = 0;\r\n\r\n get longMonths(): string[] {\r\n return [\r\n 'محرم',\r\n 'صفر',\r\n 'ربيع الأول',\r\n 'ربيع الثاني',\r\n 'جمادى الأولى',\r\n 'جمادى الثانية',\r\n 'رجب',\r\n 'شعبان',\r\n 'رمضان',\r\n 'شوال',\r\n 'ذو القعدة',\r\n 'ذو الحجة',\r\n ];\r\n }\r\n\r\n get narrowDays(): string[] {\r\n return ['أحد', 'إثن', 'ثلا', 'أرب', 'خمي', 'جمع', 'سبت'];\r\n }\r\n\r\n get shortDays(): string[] {\r\n return ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'];\r\n }\r\n\r\n get longDays(): string[] {\r\n return ['الأحد', 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'];\r\n }\r\n\r\n toLocale(date: Date): CalendarDate {\r\n const h = HijriConverter.parse(date);\r\n return {\r\n locale: 'ar',\r\n day: h.day,\r\n month: h.month,\r\n year: h.year,\r\n date,\r\n hours: date.getHours(),\r\n minutes: date.getMinutes(),\r\n seconds: date.getSeconds(),\r\n milliseconds: date.getMilliseconds(),\r\n dayOfWeek: date.getDay(),\r\n };\r\n }\r\n\r\n today() {\r\n return this.toLocale(new Date());\r\n }\r\n\r\n firstDayofMonth(year: number, month: number): number {\r\n return HijriConverter.firstDayOfMonth(year, month).getDay();\r\n }\r\n\r\n lastDateofMonth(year: number, month: number): number {\r\n return HijriConverter.daysInMonth(year, month);\r\n }\r\n\r\n lastDayofMonth(year: number, month: number): number {\r\n const lastDate = this.lastDateofMonth(year, month);\r\n return HijriConverter.toGregorian(year, month, lastDate).getDay();\r\n }\r\n\r\n lastDateofLastMonth(year: number, month: number): number {\r\n const prevMonth = month === 0 ? 11 : month - 1;\r\n const prevYear = month === 0 ? year - 1 : year;\r\n return this.lastDateofMonth(prevYear, prevMonth);\r\n }\r\n\r\n /** month start with zero */\r\n getDate(date: CalendarDate): Date {\r\n const jsDate = HijriConverter.toGregorian(date.year, date.month ?? 0, date.day ?? 1);\r\n if (date.hours !== undefined) jsDate.setHours(date.hours);\r\n if (date.minutes !== undefined) jsDate.setMinutes(date.minutes);\r\n if (date.seconds !== undefined) jsDate.setSeconds(date.seconds);\r\n if (date.milliseconds !== undefined) jsDate.setMilliseconds(date.milliseconds);\r\n return jsDate;\r\n }\r\n\r\n formatDate(date: CalendarDate, format: string): string | null {\r\n if (!date) return null;\r\n\r\n const jsDate = this.getDate(date);\r\n const options: Intl.DateTimeFormatOptions = {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n };\r\n\r\n if (format === 'full') {\r\n options.weekday = 'long';\r\n }\r\n\r\n return new Intl.DateTimeFormat('ar-SA-u-ca-islamic-umalqura', options).format(jsDate);\r\n }\r\n\r\n getStartOfWeek(date: Date): Date {\r\n const d = new Date(date);\r\n d.setHours(0, 0, 0, 0);\r\n const delta = (d.getDay() - this.weekStartDay + 7) % 7;\r\n d.setDate(d.getDate() - delta);\r\n return d;\r\n }\r\n\r\n getEndOfWeek(date: Date): Date {\r\n const d = this.getStartOfWeek(date);\r\n d.setDate(d.getDate() + 6);\r\n d.setHours(23, 59, 59, 999);\r\n return d;\r\n }\r\n\r\n getStartOf(date: Date | null, t: DatePickerView): Date | null {\r\n if (!date) return date;\r\n const h = HijriConverter.parse(date);\r\n\r\n switch (t) {\r\n case 'year':\r\n return HijriConverter.toGregorian(h.year, 0, 1);\r\n case 'month':\r\n return HijriConverter.toGregorian(h.year, h.month, 1);\r\n case 'day':\r\n return HijriConverter.toGregorian(h.year, h.month, h.day);\r\n }\r\n }\r\n\r\n getLastOf(date: Date | null, t: DatePickerView): Date | null {\r\n if (!date) return date;\r\n const h = HijriConverter.parse(date);\r\n\r\n switch (t) {\r\n case 'year':\r\n return HijriConverter.toGregorian(h.year, 11, HijriConverter.daysInMonth(h.year, 11));\r\n case 'month':\r\n return HijriConverter.toGregorian(\r\n h.year,\r\n h.month,\r\n HijriConverter.daysInMonth(h.year, h.month),\r\n );\r\n case 'day':\r\n return HijriConverter.toGregorian(h.year, h.month, h.day);\r\n }\r\n }\r\n}\r\n","/**\r\n * منطق تبدیل تاریخ سنتی چینی (农历) <-> میلادی\r\n * جدا از آداپتر، تا قابل تست و استفادهی مستقل باشد.\r\n *\r\n * ⚠️ محدودیت شناختهشده: ماههای کبیسه (闰)\r\n * در تقویم چینی، یک ماه کبیسه همان شمارهی ماه عادیِ قبل از خودش را\r\n * دارد (مثلاً «闰七月» هم month=6 میشود، دقیقاً مثل «七月» عادی).\r\n * چون CalendarDate در این پروژه فیلدی برای isLeapMonth ندارد، این\r\n * پیادهسازی -مثل نسخهی قبلی- در سالهای کبیسه، ماه کبیسه را به ماه\r\n * عادیِ همنام نگاشت میکند و کاربر نمیتواند مستقیماً وارد ماه کبیسه\r\n * شود. این یک محدودیتِ آگاهانه است، نه باگ سهوی؛ برای رفع کامل باید\r\n * فیلد isLeapMonth به CalendarDate اضافه و در همهجا (toLocale,\r\n */\r\nconst CHINESE_LOCALE = 'zh-CN-u-ca-chinese';\r\n\r\n/**\r\n * نام ماه چینی -> شماره (صفر-پایه)\r\n * ماههای عادی: 正月(0) .. 腊月(11)\r\n *\r\n * نکتهی مهمِ این باگ: Intl برای ماه یازدهم رشتهی «十一月» را\r\n * برمیگرداند، نه «冬月» (که فقط یک نام جایگزینِ ادبی/سنتی است و\r\n * توسط Intl.DateTimeFormat تولید نمیشود). نسخهی قبلی این نقشه\r\n * فقط «冬月» را داشت، پس برای هر آذر/دیماهی mismatch رخ میداد و\r\n * شمارهی ماه بهاشتباه با مقدار پیشفرض `?? 0` صفر میشد. همین\r\n * باعث میشد طول ماههای اطراف آن بازه کاملاً غلط محاسبه شود.\r\n *\r\n * ماههای کبیسه روی همان شمارهی ماه عادیِ همنام نگاشت میشوند\r\n * (به توضیح بالای فایل مراجعه کنید).\r\n */\r\nconst CHINESE_MONTH_MAP: Record<string, number> = {\r\n 正月: 0,\r\n 二月: 1,\r\n 三月: 2,\r\n 四月: 3,\r\n 五月: 4,\r\n 六月: 5,\r\n 七月: 6,\r\n 八月: 7,\r\n 九月: 8,\r\n 十月: 9,\r\n 十一月: 10,\r\n 腊月: 11,\r\n 闰正月: 0,\r\n 闰二月: 1,\r\n 闰三月: 2,\r\n 闰四月: 3,\r\n 闰五月: 4,\r\n 闰六月: 5,\r\n 闰七月: 6,\r\n 闰八月: 7,\r\n 闰九月: 8,\r\n 闰十月: 9,\r\n 闰十一月: 10,\r\n 闰腊月: 11,\r\n};\r\n\r\nexport namespace ChineseConverter {\r\n export interface ChineseDate {\r\n day: number;\r\n month: number; // صفر-پایه\r\n year: number;\r\n isLeapMonth: boolean;\r\n }\r\n\r\n const parser = new Intl.DateTimeFormat(CHINESE_LOCALE, {\r\n day: 'numeric',\r\n month: 'numeric',\r\n year: 'numeric',\r\n });\r\n\r\n /** تبدیل ارقام تمامعرض/فولویدث به لاتین */\r\n function toLatinDigits(str: string): string {\r\n return str.replace(/[0-9]/g, (d) => String.fromCharCode(d.charCodeAt(0) - 0xfee0));\r\n }\r\n\r\n /** استخراج تاریخ چینی از یک Date میلادی - با تشخیص ماه کبیسه */\r\n export function parse(date: Date): ChineseDate {\r\n const parts = parser.formatToParts(date);\r\n\r\n const dayPart = parts.find((p) => p.type === 'day')!;\r\n const monthPart = parts.find((p) => p.type === 'month')!;\r\n const yearPart = parts.find((p) => p.type === 'year' || p.type === ('relatedYear' as any))!;\r\n\r\n const day = parseInt(toLatinDigits(dayPart.value), 10);\r\n const isLeapMonth = monthPart.value.includes('闰');\r\n const month = CHINESE_MONTH_MAP[monthPart.value] ?? 0;\r\n const year = parseInt(toLatinDigits(yearPart.value), 10);\r\n\r\n return { day, month, year, isLeapMonth };\r\n }\r\n\r\n /**\r\n * پیدا کردن آخرین «روز اول ماهِ چینیِ غیرکبیسه» که در همان روز\r\n * seed یا قبل از آن باشد (جستجوی فقط روبهعقب، حداکثر 45 روز).\r\n *\r\n * نکتهی مهم: این جستجو باید فقط روبهعقب باشد، نه «نزدیکترین\r\n * در هر دو جهت». نسخهی قبلی نزدیکترین day1 را در هر دو جهت\r\n * برمیگرداند که باعث میشد وقتی الگوریتم میخواهد یک قدم به\r\n * عقب برود (-5 روز)، چون فاصلهی جلو هنوز کمتر بود، دوباره به\r\n * همان ماهِ قبلی برگردد و لوپ هیچوقت واقعاً عقب نرود (لوپ\r\n * بینهایت/گیر کردن روی یک ماه ثابت).\r\n */\r\n function firstOfMonthAtOrBefore(seed: Date): Date {\r\n for (let i = 0; i <= 65; i++) {\r\n const test = new Date(seed);\r\n test.setDate(test.getDate() - i);\r\n const c = parse(test);\r\n if (c.day === 1 && !c.isLeapMonth) {\r\n return test;\r\n }\r\n }\r\n // عملاً نباید به اینجا برسیم\r\n return seed;\r\n }\r\n\r\n /**\r\n * پیدا کردن JS Date معادل «روز اول» یک ماه چینیِ غیرکبیسهی دلخواه.\r\n *\r\n * نسخهی قبلی فرض میکرد فیلد `year` بازگشتی از Intl برای\r\n * `zh-CN-u-ca-chinese` همان شمارهی سال در دورهی ۶۰ساله است\r\n * (epoch هوانگدی)، در حالیکه در عمل همان سال میلادی برمیگردد\r\n * (مثلاً 2026). با فرمول `year - 2697` این عدد منفی و کاملاً\r\n * نادرست میشد (مثلاً -671) و جستجوی ±45 روزه همیشه شکست\r\n * میخورد و روی fallback (یک تاریخ کاملاً غلط) میافتاد —\r\n * همان باگی که باعث میشد طول ماه فقط چند روز نمایش داده شود.\r\n *\r\n * راهحل: مثل آداپتر هجری، از «امروز» -که همیشه با Intl بهدرستی\r\n * قابلخواندن است- بهعنوان لنگر شروع میکنیم و ماهبهماه\r\n * جلو/عقب میرویم.\r\n *\r\n * نکتهی اضافیِ مخصوص تقویم چینی: بر خلاف هجری، اینجا «ماه\r\n * کبیسه» هم وجود دارد. وقتی دقیقاً بین دو ماهِ عادیِ متوالی یک\r\n * ماه کبیسه فاصله افتاده باشد (مثلاً 五月 عادی -> 闰五月 -> 五月\r\n * بعدی، یعنی واقعاً ماه پنجم بعدی)، فاصلهی واقعی حدود 59 روز\r\n * میشود نه ~30 روز، و یک قدمِ ثابتِ `+30` فقط وسطِ همان ماه\r\n * کبیسه میافتد؛ چون جستجوی عقب ماه کبیسه را نادیده میگیرد،\r\n * به همان ماهِ عادیِ قبلی برمیگردد و پیشرفتی حاصل نمیشود.\r\n * برای همین، اگر یک قدم هیچ پیشرفتی نداشت (anchor عوض نشد)،\r\n * قدم را بزرگتر میکنیم تا از روی ماه کبیسهی احتمالی بپرد.\r\n */\r\n // نتیجهی firstDayOfMonth فقط تابعی از (year, month) هست، پس کشکردنش\r\n // امنه. دلیل اهمیتش دقیقاً مثل نسخهی هجریه: renderCalendar برای هر\r\n // سلولِ روزِ گرید ماه یکبار adapter.getDate() صدا میزنه که به\r\n // toGregorian() → firstDayOfMonth() ختم میشه؛ بدون کش، این جستوجوی\r\n // نسبتاً سنگین (که با وجود ماههای کبیسه میتونه چند برابر هجری هم سنگینتر\r\n // باشه) به ازای هر رندر ماه، دهها بار برای همون (year, month) تکرار میشد.\r\n const firstDayOfMonthCache = new Map<string, Date>();\r\n\r\n export function firstDayOfMonth(year: number, month: number): Date {\r\n const cacheKey = `${year}-${month}`;\r\n const cached = firstDayOfMonthCache.get(cacheKey);\r\n if (cached) return new Date(cached);\r\n\r\n let anchorDate = firstOfMonthAtOrBefore(new Date());\r\n let c = parse(anchorDate);\r\n\r\n // سقف ایمنی برای جلوگیری از لوپ بینهایت (≈ 100 سال چینی)\r\n let guard = 0;\r\n while ((c.year !== year || c.month !== month) && guard < 1300) {\r\n const targetIsLater = year > c.year || (year === c.year && month > c.month);\r\n\r\n let newAnchor = anchorDate;\r\n // طول هر ماه عادی 29 یا 30 روز است؛ اما اگر بینِ این ماه و\r\n // ماهِ بعد/قبل یک ماه کبیسه فاصله افتاده باشد، باید قدم را\r\n // بزرگتر کنیم (به اندازهی حداکثر یک ماهِ کبیسهی اضافه).\r\n for (const step of targetIsLater ? [30, 60, 90] : [-5, -35, -65]) {\r\n const probe = new Date(anchorDate);\r\n probe.setDate(probe.getDate() + step);\r\n newAnchor = firstOfMonthAtOrBefore(probe);\r\n if (newAnchor.getTime() !== anchorDate.getTime()) {\r\n break;\r\n }\r\n }\r\n\r\n anchorDate = newAnchor;\r\n c = parse(anchorDate);\r\n guard++;\r\n }\r\n firstDayOfMonthCache.set(cacheKey, anchorDate);\r\n return anchorDate;\r\n }\r\n\r\n /** تبدیل سال/ماه/روز چینی به Date میلادی */\r\n export function toGregorian(year: number, month: number, day: number): Date {\r\n const first = firstDayOfMonth(year, month);\r\n const result = new Date(first);\r\n result.setDate(result.getDate() + (day - 1));\r\n return result;\r\n }\r\n\r\n /**\r\n * تعداد واقعیِ روزهای یک ماه چینی (۲۹ یا ۳۰).\r\n *\r\n * نکته: بر خلاف نسخهی هجری، اینجا از شمارهی روزِ خروجیِ خودِ\r\n * تقویم چینی (`parse(test).day`) استفاده میکنیم نه از\r\n * `Date.getDate()` میلادی، چون آن مقدار به اشتباه طول ماه را\r\n * بر اساس تقویم میلادی محاسبه میکرد.\r\n */\r\n const daysInMonthCache = new Map<string, number>();\r\n\r\n export function daysInMonth(year: number, month: number): number {\r\n const cacheKey = `${year}-${month}`;\r\n const cached = daysInMonthCache.get(cacheKey);\r\n if (cached !== undefined) return cached;\r\n\r\n const first = firstDayOfMonth(year, month);\r\n\r\n for (let i = 1; i <= 31; i++) {\r\n const test = new Date(first);\r\n test.setDate(test.getDate() + i);\r\n const c = parse(test);\r\n if (c.year !== year || c.month !== month || c.isLeapMonth) {\r\n const last = new Date(test);\r\n last.setDate(last.getDate() - 1);\r\n const result = parse(last).day;\r\n daysInMonthCache.set(cacheKey, result);\r\n return result;\r\n }\r\n }\r\n return 29; // fallback ایمن\r\n }\r\n}\r\n","import { DatePickerView } from '../../models/view';\r\nimport { CalendarDate } from '../calendar-date';\r\nimport { ChineseConverter } from '../converters/chinese-converter.helper';\r\nimport { IDateAdapter } from '../IAdapter';\r\n\r\n/**\r\n * تقویم سنتی چینی (农历)\r\n * منطق تبدیل تاریخ در ChineseConverter (helpers/chinese-converter.helper.ts) است.\r\n *\r\n * ⚠️ محدودیت شناختهشده: ماههای کبیسه (闰) فعلاً به ماه عادیِ همنام\r\n * نگاشت میشوند؛ جزئیات در chinese-converter.helper.ts.\r\n */\r\nexport class ChineseAdapter implements IDateAdapter {\r\n /** یکشنبه = 0 */\r\n startOfWeek = 0;\r\n weekStartDay = 0;\r\n\r\n get longMonths(): string[] {\r\n return [\r\n '正月',\r\n '二月',\r\n '三月',\r\n '四月',\r\n '五月',\r\n '六月',\r\n '七月',\r\n '八月',\r\n '九月',\r\n '十月',\r\n '冬月',\r\n '腊月',\r\n ];\r\n }\r\n\r\n get narrowDays(): string[] {\r\n return ['日', '一', '二', '三', '四', '五', '六'];\r\n }\r\n\r\n get shortDays(): string[] {\r\n return ['日', '一', '二', '三', '四', '五', '六'];\r\n }\r\n\r\n get longDays(): string[] {\r\n return ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];\r\n }\r\n\r\n toLocale(date: Date): CalendarDate {\r\n const c = ChineseConverter.parse(date);\r\n return {\r\n locale: 'zh',\r\n day: c.day,\r\n month: c.month,\r\n year: c.year,\r\n date,\r\n hours: date.getHours(),\r\n minutes: date.getMinutes(),\r\n seconds: date.getSeconds(),\r\n milliseconds: date.getMilliseconds(),\r\n dayOfWeek: date.getDay(),\r\n };\r\n }\r\n\r\n today() {\r\n return this.toLocale(new Date());\r\n }\r\n\r\n firstDayofMonth(year: number, month: number): number {\r\n return ChineseConverter.firstDayOfMonth(year, month).getDay();\r\n }\r\n\r\n lastDateofMonth(year: number, month: number): number {\r\n return ChineseConverter.daysInMonth(year, month);\r\n }\r\n\r\n lastDayofMonth(year: number, month: number): number {\r\n const lastDate = this.lastDateofMonth(year, month);\r\n return ChineseConverter.toGregorian(year, month, lastDate).getDay();\r\n }\r\n\r\n /**\r\n * روز آخر ماه قبل - با یک ترفند ساده:\r\n * روز قبل از روز اول ماه فعلی، حتماً آخرین روز ماه قبل است.\r\n */\r\n lastDateofLastMonth(year: number, month: number): number {\r\n const firstOfThis = ChineseConverter.firstDayOfMonth(year, month);\r\n const lastOfPrev = new Date(firstOfThis);\r\n lastOfPrev.setDate(lastOfPrev.getDate() - 1);\r\n return ChineseConverter.parse(lastOfPrev).day;\r\n }\r\n\r\n /** month start with zero */\r\n getDate(date: CalendarDate): Date {\r\n const jsDate = ChineseConverter.toGregorian(date.year, date.month ?? 0, date.day ?? 1);\r\n if (date.hours !== undefined) jsDate.setHours(date.hours);\r\n if (date.minutes !== undefined) jsDate.setMinutes(date.minutes);\r\n if (date.seconds !== undefined) jsDate.setSeconds(date.seconds);\r\n if (date.milliseconds !== undefined) jsDate.setMilliseconds(date.milliseconds);\r\n return jsDate;\r\n }\r\n\r\n formatDate(date: CalendarDate, format: string): string | null {\r\n if (!date) return null;\r\n\r\n const jsDate = this.getDate(date);\r\n const options: Intl.DateTimeFormatOptions = {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n };\r\n\r\n if (format === 'full') {\r\n options.weekday = 'long';\r\n }\r\n\r\n return new Intl.DateTimeFormat('zh-CN-u-ca-chinese', options).format(jsDate);\r\n }\r\n\r\n getStartOfWeek(date: Date): Date {\r\n const d = new Date(date);\r\n d.setHours(0, 0, 0, 0);\r\n const delta = (d.getDay() - this.weekStartDay + 7) % 7;\r\n d.setDate(d.getDate() - delta);\r\n return d;\r\n }\r\n\r\n getEndOfWeek(date: Date): Date {\r\n const d = this.getStartOfWeek(date);\r\n d.setDate(d.getDate() + 6);\r\n d.setHours(23, 59, 59, 999);\r\n return d;\r\n }\r\n\r\n getStartOf(date: Date | null, t: DatePickerView): Date | null {\r\n if (!date) return date;\r\n const c = ChineseConverter.parse(date);\r\n\r\n switch (t) {\r\n case 'year':\r\n return ChineseConverter.firstDayOfMonth(c.year, 0);\r\n case 'month':\r\n return ChineseConverter.firstDayOfMonth(c.year, c.month);\r\n case 'day':\r\n return ChineseConverter.toGregorian(c.year, c.month, c.day);\r\n }\r\n }\r\n\r\n getLastOf(date: Date | null, t: DatePickerView): Date | null {\r\n if (!date) return date;\r\n const c = ChineseConverter.parse(date);\r\n\r\n switch (t) {\r\n case 'year':\r\n return ChineseConverter.toGregorian(c.year, 11, ChineseConverter.daysInMonth(c.year, 11));\r\n case 'month':\r\n return ChineseConverter.toGregorian(\r\n c.year,\r\n c.month,\r\n ChineseConverter.daysInMonth(c.year, c.month),\r\n );\r\n case 'day':\r\n return ChineseConverter.toGregorian(c.year, c.month, c.day);\r\n }\r\n }\r\n}\r\n","import { inject, InjectionToken, Type } from '@angular/core';\nimport { IDateAdapter } from './IAdapter';\nimport { GregorianAdapter } from './locales/gregorian.adapter';\nimport { JalaliAdapter } from './locales/jalali-adapter';\nimport { HijriAdapter } from './locales/hijri-adapter';\nimport { ChineseAdapter } from './locales/chinese.adapter';\n\nexport const DATE_ADAPTERS = new InjectionToken<DateAdapterRegistration[]>('DATE_ADAPTERS');\n\nexport interface DateAdapterRegistration {\n locale: string;\n\n useClass: Type<IDateAdapter>;\n}\n\nexport const DEFAULT_DATE_ADAPTERS: readonly DateAdapterRegistration[] = Object.freeze([\n { locale: 'en', useClass: GregorianAdapter },\n { locale: 'fa', useClass: JalaliAdapter },\n { locale: 'hi', useClass: HijriAdapter },\n { locale: 'zh', useClass: ChineseAdapter },\n]);\n\nexport function getLocals(): string[] {\n const adapters = inject<DateAdapterRegistration[]>(DATE_ADAPTERS);\n\n return adapters.map((m) => m.locale);\n}\n","import { inject, Injectable } from '@angular/core';\nimport { DATE_ADAPTERS, DateAdapterRegistration } from './consts';\nimport { GregorianAdapter } from './locales/gregorian.adapter';\n\n@Injectable()\nexport class DateAdapterRegistry {\n adapters = inject<DateAdapterRegistration[]>(DATE_ADAPTERS);\n\n resolve(locale: string) {\n const type = this.adapters?.find((x) => x.locale == locale)?.useClass;\n if (!type) {\n console.warn(`Date adapter \"${locale}\" not registred!`);\n return new GregorianAdapter();\n } else {\n return new type();\n }\n }\n}\n","/**\n * convert 300s to 5:00\n */\nexport function convertSecondsToTime(givenSeconds: number): string {\n const dateObj = new Date(givenSeconds * 1000);\n const hours = dateObj.getUTCHours();\n const minutes = dateObj.getUTCMinutes();\n const seconds = dateObj.getSeconds();\n const h = hours > 0 ? hours.toString().padStart(2, '0') + ':' : '';\n const timeString =\n h + minutes.toString().padStart(2, '0') + ':' + seconds.toString().padStart(2, '0');\n\n return timeString;\n}\n/**\n * convert 0 to 00:00 , 1 to 01:00 , 1.5 => 01:30\n */\nexport function convertNumberToTime(num: number): string {\n const hour = Math.floor(num);\n const min = 60 * (num - hour);\n\n const t = `${hour.toString().padStart(2, '0')}:${min.toString().padStart(2, '0')}`;\n return t;\n}\n","import { clampDate, clampMonth, clampYear, compareDate } from '../helpers/date.helper';\r\nimport { IDateAdapter } from '../adapters/IAdapter';\r\nimport { CalendarDate } from '../adapters/calendar-date';\r\nimport { MsEvents, MsEventViewer } from '../models/events';\r\nimport { DateAdapterRegistry } from '../adapters/date-adapter-registry';\r\nimport { inject } from '@angular/core';\r\nimport { CalendarView, DatePickerView } from '../models/view';\r\nimport { DateViewDay, DateViewMonth, DateViewWeek, DateViewYear } from '../models/date';\r\nimport { convertNumberToTime } from '../helpers/time.helper';\r\n\r\nexport abstract class NgxDatePickerBase {\r\n protected _locale = 'en';\r\n protected dateAdapterRegistry = inject(DateAdapterRegistry);\r\n adapter: IDateAdapter = this.dateAdapterRegistry.resolve(this._locale);\r\n\r\n currYear!: number;\r\n currMonth!: number;\r\n currentWeek!: number;\r\n\r\n months: string[] = [];\r\n weeks: string[] = [];\r\n viewDays: DateViewDay[] = [];\r\n viewMonths: DateViewMonth[] = [];\r\n viewYears: DateViewYear[] = [];\r\n viewWeeks: DateViewWeek[] = [];\r\n displayMonth = '';\r\n\r\n minDate: Date | null = null;\r\n maxDate: Date | null = null;\r\n\r\n renderCalendar(\r\n view: CalendarView,\r\n selected?: CalendarDate,\r\n events?: MsEvents[],\r\n callback?: Function,\r\n ) {\r\n switch (view) {\r\n case 'month':\r\n this.renderDay(selected, events);\r\n break;\r\n case 'week':\r\n this.renderWeek();\r\n break;\r\n case 'day':\r\n this.renderWeek();\r\n break;\r\n }\r\n\r\n this.displayMonth = this.months[this.currMonth] ?? '';\r\n\r\n if (callback) callback();\r\n }\r\n renderِDatePicker(\r\n view: DatePickerView,\r\n selected?: CalendarDate,\r\n events?: MsEvents[],\r\n callback?: Function,\r\n ) {\r\n switch (view) {\r\n case 'day':\r\n this.renderDay(selected, events);\r\n break;\r\n case 'month':\r\n this.renderMonth();\r\n break;\r\n case 'year':\r\n this.renderYear();\r\n break;\r\n }\r\n\r\n this.displayMonth = this.months[this.currMonth] ?? '';\r\n\r\n if (callback) callback();\r\n }\r\n\r\n renderYear() {\r\n this.viewYears = [];\r\n const s = this.currYear - 10;\r\n const e = this.currYear + 10;\r\n\r\n for (let i = s; i < e; i++) {\r\n this.viewYears.push({\r\n year: i,\r\n selected: i === this.currYear,\r\n active: this.checkActiveYear(i),\r\n });\r\n }\r\n }\r\n\r\n renderMonth() {\r\n this.viewMonths = [];\r\n\r\n for (let i = 0; i < this.months.length; i++) {\r\n this.viewMonths.push({\r\n month: i,\r\n displayMonth: this.months[i],\r\n selected: i === this.currMonth,\r\n active: this.checkActiveMonth(this.currYear, i),\r\n });\r\n }\r\n }\r\n\r\n renderWeek(anchorDate?: Date) {\r\n this.viewWeeks = [];\r\n for (let t = 0; t < 24; t += 0.5) {\r\n this.viewWeeks.push({\r\n time: t,\r\n displayTime: convertNumberToTime(t),\r\n weeks: this.weeks,\r\n active: true,\r\n selected: false,\r\n });\r\n }\r\n }\r\n\r\n /** Returns the seven real dates belonging to the locale's week. */\r\n getWeekDates(anchor: Date): Date[] {\r\n const start = this.adapter.getStartOfWeek(anchor);\r\n return Array.from({ length: 7 }, (_, index) => {\r\n const d = new Date(start);\r\n d.setDate(start.getDate() + index);\r\n d.setHours(0, 0, 0, 0);\r\n return d;\r\n });\r\n }\r\n\r\n getEventsForDate(date: Date, events?: MsEvents[]): MsEventViewer[] {\r\n return this.getEvents(date, events);\r\n }\r\n\r\n protected normalizeEvent(event: MsEvents): { event: MsEvents; start: Date; end: Date } {\r\n const start =\r\n event.start instanceof Date ? new Date(event.start) : new Date(event.start as any);\r\n const rawEnd = event.end\r\n ? event.end instanceof Date\r\n ? new Date(event.end)\r\n : new Date(event.end as any)\r\n : new Date(start);\r\n\r\n if (Number.isNaN(start.getTime())) return { event, start: new Date(NaN), end: new Date(NaN) };\r\n\r\n // Day-calendar events use an inclusive end date. For timed events, the actual\r\n // end instant is respected. An omitted end means a one-day event.\r\n const end = Number.isNaN(rawEnd.getTime()) ? new Date(start) : rawEnd;\r\n return { event, start, end: end < start ? new Date(start) : end };\r\n }\r\n\r\n /**\r\n * Renders a 6-row month grid and attaches events to every visible day.\r\n *\r\n * The event list is normalized to MsEventViewer so the template can draw\r\n * continuation edges similar to FullCalendar's month view.\r\n */\r\n renderDay(selected?: CalendarDate, events?: MsEvents[]) {\r\n this.viewDays = [];\r\n\r\n const firstDayOfMonth = this.adapter.firstDayofMonth(this.currYear, this.currMonth);\r\n const lastDateOfMonth = this.adapter.lastDateofMonth(this.currYear, this.currMonth);\r\n const lastDayOfMonth = this.adapter.lastDayofMonth(this.currYear, this.currMonth);\r\n const lastDateOfLastMonth = this.adapter.lastDateofLastMonth(this.currYear, this.currMonth);\r\n\r\n for (let i = firstDayOfMonth; i > 0; i--) {\r\n const day = lastDateOfLastMonth - i + 1;\r\n const date = this.adapter.getDate({\r\n locale: this._locale,\r\n year: this.currYear,\r\n month: this.currMonth - 1,\r\n day,\r\n });\r\n\r\n this.viewDays.push({\r\n day,\r\n active: false,\r\n isToday: false,\r\n selected: false,\r\n date,\r\n events: this.getEvents(date, events),\r\n });\r\n }\r\n\r\n for (let day = 1; day <= lastDateOfMonth; day++) {\r\n const today = this.adapter.today();\r\n const isToday =\r\n day === today.day && this.currMonth === today.month && this.currYear === today.year;\r\n\r\n const date = this.adapter.getDate({\r\n locale: this._locale,\r\n year: this.currYear,\r\n month: this.currMonth,\r\n day,\r\n });\r\n\r\n this.viewDays.push({\r\n day,\r\n active: this.checkActiveDate(date),\r\n isToday,\r\n selected:\r\n day === selected?.day &&\r\n selected.month === this.currMonth &&\r\n selected.year === this.currYear,\r\n date,\r\n events: this.getEvents(date, events),\r\n });\r\n }\r\n\r\n for (let i = lastDayOfMonth; i < 6; i++) {\r\n const day = i - lastDayOfMonth + 1;\r\n const date = this.adapter.getDate({\r\n locale: this._locale,\r\n year: this.currYear,\r\n month: this.currMonth + 1,\r\n day,\r\n });\r\n\r\n this.viewDays.push({\r\n day,\r\n active: false,\r\n isToday: false,\r\n selected: false,\r\n date,\r\n events: this.getEvents(date, events),\r\n });\r\n }\r\n }\r\n\r\n checkActiveDate(date: Date) {\r\n const c = clampDate(date, this.minDate, this.maxDate);\r\n return c === 0;\r\n }\r\n\r\n checkActiveMonth(year: number, month: number) {\r\n const fd = this.adapter.getDate({ locale: this._locale, year, month, day: 1 });\r\n const ld = this.adapter.getDate({\r\n locale: this._locale,\r\n year,\r\n month,\r\n day: this.adapter.lastDateofMonth(year, month),\r\n });\r\n\r\n const min = this.adapter.getStartOf(this.minDate, 'month');\r\n const max = this.adapter.getLastOf(this.maxDate, 'month');\r\n\r\n return clampMonth(fd, min, max) === 0 && clampMonth(ld, min, max) === 0;\r\n }\r\n\r\n checkActiveYear(year: number) {\r\n const d = this.adapter.getDate({ locale: this._locale, year, month: 1, day: 1 });\r\n return clampYear(d, this.minDate, this.maxDate) === 0;\r\n }\r\n\r\n protected getEvents(date: Date, events?: MsEvents[]): MsEventViewer[] {\r\n if (!events?.length) return [];\r\n\r\n return events\r\n .filter((event) => {\r\n const start = event.start instanceof Date ? event.start : new Date(event.start as any);\r\n const end = event.end\r\n ? event.end instanceof Date\r\n ? event.end\r\n : new Date(event.end as any)\r\n : start;\r\n\r\n return compareDate(date, start) >= 0 && compareDate(date, end) <= 0;\r\n })\r\n .map((event) => {\r\n const start = event.start instanceof Date ? event.start : new Date(event.start as any);\r\n const end = event.end\r\n ? event.end instanceof Date\r\n ? event.end\r\n : new Date(event.end as any)\r\n : start;\r\n\r\n return {\r\n ...event,\r\n continuesBefore: compareDate(start, date) < 0,\r\n continuesAfter: compareDate(end, date) > 0,\r\n isStart: compareDate(start, date) === 0,\r\n isEnd: compareDate(end, date) === 0,\r\n };\r\n });\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport const NGX_CALENDAR_LOCALIZATION = new InjectionToken<NgxCalendarLocalization>(\r\n 'ngx-calendar-localization',\r\n {\r\n factory: () => DEFAULT_NGX_CALENDAR_LOCALIZATION,\r\n },\r\n);\r\n\r\nexport class NgxCalendarLocalization {\r\n clear = 'Clear';\r\n today = 'Today';\r\n\r\n /** Range picker labels. */\r\n rangeStart = 'Start date';\r\n rangeEnd = 'End date';\r\n\r\n day = 'Day';\r\n month = 'Month';\r\n week = 'Week';\r\n year = 'Year';\r\n event = 'Event';\r\n}\r\nexport const DEFAULT_NGX_CALENDAR_LOCALIZATION = new NgxCalendarLocalization();\r\n","import {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n inject,\r\n input,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport { clampDate, deserialize, isValid, sameDate } from '../../helpers/date.helper';\r\nimport { NgxDatePickerConfig } from '../config';\r\nimport { NgxDatePickerBase } from '../ngx-date-picker-base.component';\r\nimport { DatePickerView } from '../../models/view';\r\nimport { CalendarDate } from '../../adapters/calendar-date';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n Validator,\r\n} from '@angular/forms';\r\nimport { DateAdapterRegistry } from '../../adapters/date-adapter-registry';\r\nimport { DateViewDay, DateViewMonth, DateViewYear } from '../../models/date';\r\nimport { NGX_CALENDAR_LOCALIZATION, type NgxCalendarLocalization } from '../../tokens/localization';\r\n\r\n@Component({\r\n selector: 'ngx-date-picker',\r\n templateUrl: './ngx-datepicker.component.html',\r\n styleUrls: ['./ngx-datepicker.component.scss'],\r\n imports: [CommonModule],\r\n providers: [\r\n DateAdapterRegistry,\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => NgxInputDatePickerComponent),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => NgxInputDatePickerComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class NgxInputDatePickerComponent\r\n extends NgxDatePickerBase\r\n implements ControlValueAccessor, Validator, OnInit\r\n{\r\n defaultLocalization = inject(NGX_CALENDAR_LOCALIZATION);\r\n localize = input<NgxCalendarLocalization>(this.defaultLocalization);\r\n config = new NgxDatePickerConfig();\r\n @Input('config') set setConfig(val: NgxDatePickerConfig) {\r\n this.config = { ...new NgxDatePickerConfig(), ...val };\r\n }\r\n\r\n @Input() set locale(val: string) {\r\n this._locale = val;\r\n this.adapter = this.dateAdapterRegistry.resolve(this._locale);\r\n this.init();\r\n }\r\n /** The minimum valid date. */\r\n @Input('min') set setMin(value: Date | null | undefined) {\r\n const validValue = deserialize(value);\r\n if (!sameDate(validValue, this.minDate)) {\r\n this.minDate = validValue;\r\n this._validatorOnChange();\r\n this.init();\r\n }\r\n }\r\n\r\n /** The maximum valid date. */\r\n @Input('max') set setMax(value: Date | null | undefined) {\r\n const validValue = deserialize(value);\r\n if (!sameDate(validValue, this.maxDate)) {\r\n this.maxDate = validValue;\r\n this._validatorOnChange();\r\n this.init();\r\n }\r\n }\r\n\r\n @Input() view: DatePickerView = 'day';\r\n\r\n @Output() change = new EventEmitter<Date | null>();\r\n\r\n selected?: CalendarDate;\r\n\r\n calendarHeader = '';\r\n isDisabled = false;\r\n\r\n weekDays: { min: string; name: string }[] = [];\r\n protected _onChange = (value: Date) => {};\r\n protected _onTouched = () => {};\r\n protected _validatorOnChange = () => {};\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.init();\r\n }\r\n updateConfig(val: NgxDatePickerConfig) {\r\n this.config = { ...new NgxDatePickerConfig(), ...val };\r\n }\r\n init() {\r\n this.months = this.adapter.longMonths;\r\n let sDays = this.adapter.shortDays;\r\n let lDays = this.adapter.longDays;\r\n this.weekDays = sDays.map((m, i) => ({ min: m, name: lDays[i] }));\r\n\r\n if (!this.selected?.date) {\r\n this.gotoToday();\r\n } else {\r\n let l = this.adapter.toLocale(this.selected.date);\r\n this.currYear = l.year;\r\n this.currMonth = l.month ?? 1;\r\n this.renderِDatePicker(this.view);\r\n }\r\n }\r\n writeValue(value: any): void {\r\n const validValue = deserialize(value);\r\n if (validValue) {\r\n this.selected = this.adapter.toLocale(validValue);\r\n } else {\r\n this.selected = undefined;\r\n }\r\n this.init();\r\n }\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n if (this.selected?.date) {\r\n if (!isValid(this.selected.date)) {\r\n return {\r\n invalid: true,\r\n };\r\n }\r\n let c = clampDate(this.selected?.date, this.minDate, this.maxDate);\r\n if (c < 0) {\r\n return {\r\n invalid: true,\r\n min: this.minDate,\r\n };\r\n } else if (c > 0) {\r\n return {\r\n invalid: true,\r\n max: this.maxDate,\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n registerOnChange(fn: any): void {\r\n this._onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this._onTouched = fn;\r\n }\r\n registerOnValidatorChange?(fn: () => void): void {\r\n this._validatorOnChange = fn;\r\n }\r\n setDisabledState(disabled: boolean): void {\r\n this.isDisabled = disabled;\r\n }\r\n\r\n override renderِDatePicker(view: DatePickerView) {\r\n super.renderِDatePicker(view, this.selected, [], () => {\r\n let d = this.selected?.date;\r\n this.calendarHeader =\r\n (d && this.adapter.formatDate(this.adapter.toLocale(d), 'EEEE - d MMMM, yyyy')) ?? '';\r\n });\r\n }\r\n\r\n gotoToday() {\r\n let today = this.adapter.today();\r\n this.selected = today;\r\n this.currYear = today.year;\r\n this.currMonth = today.month ?? 1;\r\n this.calendarHeader = this.adapter.formatDate(today, 'EEEE, d MMMM, yyyy') ?? '';\r\n this.changeView('day');\r\n }\r\n\r\n changeView(v: DatePickerView) {\r\n this.view = v;\r\n this.renderِDatePicker(this.view);\r\n }\r\n\r\n next() {\r\n if (this.view === 'year') {\r\n this.currYear += 20;\r\n } else if (this.view === 'month') {\r\n this.currYear++;\r\n } else {\r\n this.currMonth++;\r\n }\r\n if (this.currMonth < 0 || this.currMonth > 11) {\r\n let date = new Date(this.currYear, this.currMonth);\r\n this.currYear = date.getFullYear();\r\n this.currMonth = date.getMonth();\r\n }\r\n\r\n this.renderِDatePicker(this.view);\r\n }\r\n\r\n previous() {\r\n if (this.view === 'year') {\r\n this.currYear -= 20;\r\n } else if (this.view === 'month') {\r\n this.currYear--;\r\n } else {\r\n this.currMonth--;\r\n }\r\n if (this.currMonth < 0 || this.currMonth > 11) {\r\n let date = new Date(this.currYear, this.currMonth);\r\n this.currYear = date.getFullYear();\r\n this.currMonth = date.getMonth();\r\n }\r\n\r\n this.renderِDatePicker(this.view);\r\n }\r\n\r\n selectDay(ev: Event, item: DateViewDay) {\r\n ev.stopPropagation();\r\n if (item.active) {\r\n this.selected = {\r\n locale: this._locale,\r\n year: this.currYear,\r\n month: this.currMonth,\r\n day: item.day,\r\n date: item.date,\r\n };\r\n this.change.emit(this.selected.date);\r\n }\r\n }\r\n selectMonth(ev: Event, item: DateViewMonth) {\r\n ev.stopPropagation();\r\n if (item.active) {\r\n this.currMonth = item.month;\r\n this.changeView('day');\r\n }\r\n }\r\n selectYear(ev: Event, item: DateViewYear) {\r\n ev.stopPropagation();\r\n if (item.active) {\r\n this.currYear = item.year;\r\n this.changeView('month');\r\n }\r\n }\r\n\r\n clear() {\r\n this.selected = undefined;\r\n this.change.emit(null);\r\n }\r\n stopPagination(ev: Event) {\r\n ev.stopPropagation();\r\n }\r\n}\r\n","<div class=\"wrapper\" #datepickerWrapper (click)=\"stopPagination($event)\">\r\n <div class=\"header\">\r\n <svg\r\n class=\"calendar-icon\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M16 2V6M8 2V6\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M13 4H11C7.22876 4 5.34315 4 4.17157 5.17157C3 6.34315 3 8.22876 3 12V14C3 17.7712 3 19.6569 4.17157 20.8284C5.34315 22 7.22876 22 11 22H13C16.7712 22 18.6569 22 19.8284 20.8284C21 19.6569 21 17.7712 21 14V12C21 8.22876 21 6.34315 19.8284 5.17157C18.6569 4 16.7712 4 13 4Z\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M3 10H21\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M11.9955 14H12.0045M11.9955 18H12.0045M15.991 14H16M8 14H8.00897M8 18H8.00897\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n {{ calendarHeader }}\r\n </div>\r\n <div class=\"sub-header\">\r\n <div class=\"icons\">\r\n <span id=\"prev\" (click)=\"previous()\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"\r\n config.previousButtonTemplate || defaultPreviousBTNTemplate\r\n \"></ng-template>\r\n </span>\r\n </div>\r\n <span class=\"current-date\">\r\n <span (click)=\"changeView('year')\">\r\n {{ currYear }}\r\n <ng-template\r\n [ngTemplateOutlet]=\"config.caretDownIconTemplate || defaultCaretDownIcon\"></ng-template>\r\n </span>\r\n <span (click)=\"changeView('month')\">\r\n {{ displayMonth }}\r\n <ng-template\r\n [ngTemplateOutlet]=\"config.caretDownIconTemplate || defaultCaretDownIcon\"></ng-template>\r\n </span>\r\n </span>\r\n <div class=\"icons\">\r\n <span id=\"next\" (click)=\"next()\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"config.nextButtonTemplate || defaultNextBTNTemplate\"></ng-template>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"calendar\">\r\n @if (view === 'day') {\r\n <ul class=\"weeks\">\r\n @for (w of weekDays; track $index) {\r\n <li [title]=\"w.name\">\r\n {{ w.min }}\r\n </li>\r\n }\r\n </ul>\r\n <ul class=\"days\">\r\n @for (item of viewDays; track $index) {\r\n <li\r\n [class.de-active]=\"!item.active\"\r\n [class.today]=\"item.isToday\"\r\n [class.selected]=\"item.selected\"\r\n (click)=\"selectDay($event, item)\">\r\n {{ item.day }}\r\n </li>\r\n }\r\n </ul>\r\n } @else if (view === 'month') {\r\n <ul class=\"months\">\r\n @for (item of viewMonths; track $index; let i = $index) {\r\n <li\r\n [class.de-active]=\"!item.active\"\r\n [class.today]=\"item.isToday\"\r\n [class.selected]=\"item.selected\"\r\n (click)=\"selectMonth($event, item)\">\r\n {{ i + 1 }}.{{ item.displayMonth }}\r\n </li>\r\n }\r\n </ul>\r\n } @else if (view === 'year') {\r\n <ul class=\"years\">\r\n @for (item of viewYears; track $index) {\r\n <li\r\n [class.de-active]=\"!item.active\"\r\n [class.today]=\"item.isToday\"\r\n [class.selected]=\"item.selected\"\r\n (click)=\"selectYear($event, item)\">\r\n {{ item.year }}\r\n </li>\r\n }\r\n </ul>\r\n }\r\n <!-- <pre>\r\n currYear={{currYear}}\r\n currMonth={{currMonth}}\r\n {{selected|json}}\r\n </pre> -->\r\n <div class=\"calendar-footer\">\r\n @if (config.clearButton) {\r\n <button (click)=\"clear()\">\r\n {{ localize().clear }}\r\n </button>\r\n }\r\n @if (config.todayButton) {\r\n <button (click)=\"gotoToday()\">\r\n {{ localize().today }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #defaultPreviousBTNTemplate>\r\n <svg width=\"15px\" height=\"40px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M224 480c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l169.4 169.4c12.5 12.5 12.5 32.75 0 45.25C240.4 476.9 232.2 480 224 480z\" />\r\n </svg>\r\n</ng-template>\r\n\r\n<ng-template #defaultNextBTNTemplate>\r\n <svg width=\"15px\" height=\"40px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\" />\r\n </svg>\r\n</ng-template>\r\n\r\n<ng-template #defaultCaretDownIcon>\r\n <svg width=\"10px\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M310.6 246.6l-127.1 128C176.4 380.9 168.2 384 160 384s-16.38-3.125-22.63-9.375l-127.1-128C.2244 237.5-2.516 223.7 2.438 211.8S19.07 192 32 192h255.1c12.94 0 24.62 7.781 29.58 19.75S319.8 237.5 310.6 246.6z\" />\r\n </svg>\r\n</ng-template>\r\n","import {\r\n Directive,\r\n effect,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n HostListener,\r\n inject,\r\n input,\r\n Input,\r\n Output,\r\n Renderer2,\r\n signal,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n Validator,\r\n} from '@angular/forms';\r\nimport { NgxInputDatePickerComponent } from '../components/datepicker/ngx-datepicker.component';\r\nimport { clampDate, deserialize, isValid, sameDate } from '../helpers/date.helper';\r\nimport { OverlayRef, OverlayService } from 'ngx-kit/shared';\r\nimport { IDateAdapter } from '../adapters/IAdapter';\r\nimport { NgxDatePickerConfig } from '../components/config';\r\nimport { DateAdapterRegistry } from '../adapters/date-adapter-registry';\r\n\r\n@Directive({\r\n selector: '[ngxInputDatePicker]',\r\n exportAs: 'ngxInputDatePicker',\r\n host: {\r\n class: 'ngx-datepicker-input',\r\n '[attr.readOnly]': 'true',\r\n },\r\n providers: [\r\n DateAdapterRegistry,\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => NgxInputDatePicker),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => NgxInputDatePicker),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class NgxInputDatePicker implements ControlValueAccessor, Validator {\r\n protected readonly dateAdapterRegistry = inject(DateAdapterRegistry);\r\n\r\n openOnCLick = input<boolean>(true);\r\n\r\n @Output() change = new EventEmitter<Date>();\r\n private value?: Date | null;\r\n private pickerRef?: OverlayRef<NgxInputDatePickerComponent>;\r\n adapter!: IDateAdapter;\r\n private _locale: string = 'en';\r\n @Input() set locale(val: string) {\r\n this._locale = val;\r\n this.adapter = this.dateAdapterRegistry.resolve(this._locale);\r\n }\r\n\r\n protected _onChange = (value: Date | null | undefined) => {};\r\n protected _onTouched = () => {};\r\n protected _validatorOnChange = () => {};\r\n\r\n /**\r\n * display format in input\r\n */\r\n @Input() displayFormat: string = 'yyyy/MM/dd';\r\n\r\n private min: Date | null = null;\r\n /** The minimum valid date. */\r\n @Input('min') set setMin(value: Date | null | undefined) {\r\n const validValue = deserialize(value);\r\n if (!sameDate(validValue, this.min)) {\r\n this.min = validValue;\r\n this._validatorOnChange();\r\n }\r\n }\r\n\r\n private max: Date | null = null;\r\n /** The maximum valid date. */\r\n @Input('max') set setMax(value: Date | null | undefined) {\r\n const validValue = deserialize(value);\r\n if (!sameDate(validValue, this.max)) {\r\n this.max = validValue;\r\n this._validatorOnChange();\r\n }\r\n }\r\n\r\n config = new NgxDatePickerConfig();\r\n @Input('config') set setConfig(val: NgxDatePickerConfig) {\r\n this.config = { ...new NgxDatePickerConfig(), ...val };\r\n }\r\n\r\n private isDisabled = false;\r\n\r\n private readonly overlayService = inject(OverlayService);\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n private readonly renderer = inject(Renderer2);\r\n constructor(private el: ElementRef<HTMLInputElement>) {}\r\n\r\n updateConfig(val: NgxDatePickerConfig) {\r\n this.config = { ...new NgxDatePickerConfig(), ...val };\r\n if (this.pickerRef && this.pickerRef.componentRef) {\r\n this.pickerRef.componentRef.instance.updateConfig(this.config);\r\n }\r\n }\r\n ngOnDestroy(): void {\r\n this.destroyDatePicker();\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(ev: Event) {\r\n if (this.openOnCLick() && !this.isDisabled) {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n this.toggle();\r\n }\r\n }\r\n\r\n @HostListener('input', ['$event'])\r\n onInput(event: Event) {\r\n const input = event.target as HTMLInputElement;\r\n const validValue = deserialize(input.value);\r\n this.value = validValue;\r\n this._formatValue(this.value);\r\n this._onChange(this.value);\r\n }\r\n\r\n @HostListener('blur')\r\n onBlur() {\r\n this._onTouched();\r\n }\r\n\r\n writeValue(value: any): void {\r\n const validValue = deserialize(value);\r\n this.value = validValue;\r\n this._formatValue(this.value);\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this._onTouched = fn;\r\n }\r\n registerOnValidatorChange?(fn: () => void): void {\r\n this._validatorOnChange = fn;\r\n }\r\n setDisabledState(disabled: boolean): void {\r\n this.isDisabled = disabled;\r\n if (disabled) {\r\n this.renderer.setProperty(this.el.nativeElement, 'disabled', disabled);\r\n } else {\r\n this.renderer.removeAttribute(this.el.nativeElement, 'disabled');\r\n }\r\n }\r\n\r\n public toggle() {\r\n if (this.pickerRef || this.isDisabled) {\r\n this.destroyDatePicker();\r\n return;\r\n }\r\n\r\n this.pickerRef = this.overlayService.open({\r\n anchor: this.el.nativeElement,\r\n component: NgxInputDatePickerComponent,\r\n viewContainerRef: this.viewContainerRef,\r\n alignment: 'center',\r\n placement: 'bottom',\r\n margin: 2,\r\n configure: (instance, ref) => {\r\n instance.locale = this._locale;\r\n instance.minDate = this.min;\r\n instance.maxDate = this.max;\r\n instance.updateConfig(this.config);\r\n instance.writeValue(this.value);\r\n\r\n instance.change.subscribe((c: Date) => {\r\n this.value = c;\r\n this.emitChange(c);\r\n this.destroyDatePicker();\r\n });\r\n\r\n // instance.closed.subscribe(() => ref.close());\r\n },\r\n onClosed: () => {\r\n this.pickerRef = undefined;\r\n },\r\n });\r\n }\r\n\r\n private destroyDatePicker() {\r\n this.pickerRef?.close();\r\n this.pickerRef = undefined;\r\n }\r\n private async emitChange(c: Date) {\r\n this._formatValue(c);\r\n this._onChange(c);\r\n this.change.emit(c);\r\n this._onTouched();\r\n }\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n if (this.value) {\r\n if (!isValid(this.value)) {\r\n return {\r\n invalid: true,\r\n };\r\n }\r\n let c = clampDate(this.value, this.min, this.max);\r\n if (c < 0) {\r\n return {\r\n invalid: true,\r\n min: this.min,\r\n };\r\n } else if (c > 0) {\r\n return {\r\n invalid: true,\r\n max: this.max,\r\n };\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /** Formats a value and sets it on the input element. */\r\n protected _formatValue(value: Date | null, setChange = false) {\r\n let val = '';\r\n if (value && this.adapter) {\r\n let o = this.adapter.toLocale(value);\r\n val = (value && this.adapter.formatDate(o, this.displayFormat)) ?? '';\r\n }\r\n this.renderer.setProperty(this.el.nativeElement, 'value', val);\r\n\r\n if (setChange) {\r\n this._onChange(this.value);\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Input,\r\n OnInit,\r\n Output,\r\n inject,\r\n input,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgxDatePickerConfig } from '../config';\r\nimport { NgxDatePickerBase } from '../ngx-date-picker-base.component';\r\nimport { MsEvents, MsEventViewer } from '../../models/events';\r\nimport {\r\n CalendarDayColumn,\r\n CalendarMonthEventSegment,\r\n CalendarTimedEvent,\r\n DateViewDay,\r\n} from '../../models/date';\r\nimport { CalendarView } from '../../models/view';\r\nimport { ISelectedEvent } from '../../models/selected-event';\r\nimport {\r\n CalendarEventChange,\r\n CalendarEventInteractionType,\r\n} from '../../models/calendar-event-interaction';\r\nimport { deserialize, sameDate, compareDate } from '../../helpers/date.helper';\r\nimport { DateAdapterRegistry } from '../../adapters/date-adapter-registry';\r\nimport { NGX_CALENDAR_LOCALIZATION, NgxCalendarLocalization } from '../../tokens/localization';\r\n\r\nconst HOUR_HEIGHT = 64;\r\nconst HALF_HOUR_HEIGHT = HOUR_HEIGHT / 2;\r\nconst MIN_EVENT_MINUTES = 30;\r\nconst MONTH_ROW_COUNT = 6;\r\nconst MONTH_COLUMN_COUNT = 7;\r\n\r\ninterface NormalizedCalendarEvent {\r\n source: MsEvents;\r\n start: Date;\r\n end: Date;\r\n}\r\n\r\ninterface EventInteractionState {\r\n type: CalendarEventInteractionType;\r\n source: MsEvents;\r\n previousEvent: MsEvents;\r\n pointerId: number;\r\n startX: number;\r\n startY: number;\r\n originColumn: number;\r\n originRow: number;\r\n preview: MsEvents;\r\n deltaDays: number;\r\n deltaMinutes: number;\r\n active: boolean;\r\n surface: 'month' | 'timed' | 'all-day';\r\n}\r\n\r\n@Component({\r\n selector: 'ngx-calendar',\r\n templateUrl: './ngx-calendar.component.html',\r\n styleUrls: ['./ngx-calendar.component.scss'],\r\n imports: [CommonModule],\r\n providers: [DateAdapterRegistry],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgxCalendarComponent extends NgxDatePickerBase implements OnInit {\r\n defaultLocalization = inject(NGX_CALENDAR_LOCALIZATION);\r\n localize = input<NgxCalendarLocalization>(this.defaultLocalization);\r\n resizeAndMovable = input<boolean>(false);\r\n\r\n _config = new NgxDatePickerConfig();\r\n @Input() set config(val: NgxDatePickerConfig) {\r\n this._config = { ...new NgxDatePickerConfig(), ...val };\r\n }\r\n\r\n @Input() set locale(val: string) {\r\n this._locale = val;\r\n this.adapter = this.dateAdapterRegistry.resolve(this._locale);\r\n if (this.currYear !== undefined) this.syncAnchorToLocale();\r\n this.renderCalendar(this.view);\r\n }\r\n\r\n @Input('min') set setMin(value: Date | null | undefined) {\r\n const validValue = deserialize(value);\r\n if (!sameDate(validValue, this.minDate)) {\r\n this.minDate = validValue;\r\n this.renderCalendar(this.view);\r\n }\r\n }\r\n\r\n @Input('max') set setMax(value: Date | null | undefined) {\r\n const validValue = deserialize(value);\r\n if (!sameDate(validValue, this.maxDate)) {\r\n this.maxDate = validValue;\r\n this.renderCalendar(this.view);\r\n }\r\n }\r\n\r\n @Input() view: CalendarView = 'month';\r\n\r\n private _events: MsEvents[] = [];\r\n @Input() set events(val: MsEvents[]) {\r\n this._events = Array.isArray(val) ? val : [];\r\n if (this.anchorDate) this.renderCalendar(this.view);\r\n }\r\n get events(): MsEvents[] {\r\n return this._events;\r\n }\r\n\r\n @Output() dateChange = new EventEmitter<DateViewDay>();\r\n @Output() selectEvent = new EventEmitter<ISelectedEvent>();\r\n @Output() eventChange = new EventEmitter<CalendarEventChange>();\r\n @Output() eventsChange = new EventEmitter<MsEvents[]>();\r\n\r\n selected?: Date;\r\n anchorDate!: Date;\r\n\r\n eventViewItems: { event: MsEventViewer; start: Date; end: Date }[] = [];\r\n monthEventSegments: CalendarMonthEventSegment[] = [];\r\n monthEventRows: CalendarMonthEventSegment[][] = Array.from({ length: MONTH_ROW_COUNT }, () => []);\r\n\r\n weekDays: CalendarDayColumn[] = [];\r\n allDayByColumn: CalendarTimedEvent[][] = [];\r\n timeSlots = Array.from({ length: 48 }, (_, i) => i * 30);\r\n readonly hourHeight = HOUR_HEIGHT;\r\n readonly timeColumnWidth = 64;\r\n\r\n calendarWrapper = viewChild<ElementRef<HTMLElement>>('calendarWrapper');\r\n\r\n protected interaction: EventInteractionState | null = null;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.months = this.adapter.longMonths;\r\n this.weeks = this.adapter.longDays;\r\n this.anchorDate = this.selected\r\n ? new Date(this.selected)\r\n : this.adapter.getDate(this.adapter.today());\r\n this.syncAnchorToLocale();\r\n this.renderCalendar(this.view);\r\n }\r\n\r\n @HostListener('window:resize')\r\n onResize() {\r\n this.calcCellSize();\r\n }\r\n\r\n @HostListener('document:pointermove', ['$event'])\r\n onDocumentPointerMove(event: PointerEvent) {\r\n if (!this.interaction || event.pointerId !== this.interaction.pointerId) return;\r\n this.updateEventInteraction(event);\r\n }\r\n\r\n @HostListener('document:pointerup', ['$event'])\r\n onDocumentPointerUp(event: PointerEvent) {\r\n if (!this.interaction || event.pointerId !== this.interaction.pointerId) return;\r\n this.finishEventInteraction(event, false);\r\n }\r\n\r\n @HostListener('document:pointercancel', ['$event'])\r\n onDocumentPointerCancel(event: PointerEvent) {\r\n if (!this.interaction || event.pointerId !== this.interaction.pointerId) return;\r\n this.finishEventInteraction(event, true);\r\n }\r\n\r\n calcCellSize() {\r\n const fullWidth = this.calendarWrapper()?.nativeElement?.clientWidth ?? 0;\r\n this.minHeight = fullWidth > this.defaultHeight ? this.defaultHeight : Math.max(fullWidth, 320);\r\n this.weeks = fullWidth <= 500 ? this.adapter.shortDays : this.adapter.longDays;\r\n }\r\n\r\n override renderCalendar(view: CalendarView) {\r\n if (!this.anchorDate) return;\r\n\r\n this.syncAnchorToLocale();\r\n\r\n switch (view) {\r\n case 'month':\r\n super.renderCalendar('month', undefined, this.renderEvents);\r\n this.buildMonthEventSegments();\r\n break;\r\n case 'week':\r\n case 'day':\r\n this.renderTimedView();\r\n break;\r\n case 'event':\r\n this.renderEventView();\r\n break;\r\n }\r\n\r\n this.displayMonth = this.months[this.currMonth] ?? '';\r\n queueMicrotask(() => this.calcCellSize());\r\n }\r\n\r\n private get renderEvents(): MsEvents[] {\r\n return this._events;\r\n }\r\n\r\n private syncAnchorToLocale() {\r\n const localeDate = this.adapter.toLocale(this.anchorDate);\r\n this.currYear = localeDate.year;\r\n this.currMonth = localeDate.month ?? 0;\r\n this.months = this.adapter.longMonths;\r\n this.weeks = this.adapter.longDays;\r\n }\r\n\r\n private renderTimedView() {\r\n const dates = this.getWeekDates(this.anchorDate);\r\n const visibleDates = this.view === 'day' ? [new Date(this.startOfDay(this.anchorDate))] : dates;\r\n\r\n this.weekDays = visibleDates.map((date, column) => ({\r\n date,\r\n label: this.adapter.formatDate(this.adapter.toLocale(date), 'full') ?? '',\r\n dayNumber: String(this.adapter.toLocale(date).day),\r\n isToday: sameDate(date, this.adapter.getDate(this.adapter.today())),\r\n events: this.buildTimedEventsForDay(date, column, visibleDates.length),\r\n }));\r\n\r\n this.allDayByColumn = this.weekDays.map((day, column) =>\r\n this.buildAllDayEventsForDay(day.date, column),\r\n );\r\n\r\n this.viewWeeks = this.timeSlots.map((minutes) => ({\r\n time: minutes / 60,\r\n displayTime: this.formatTime(minutes),\r\n weeks: visibleDates.map(() => ''),\r\n active: true,\r\n selected: false,\r\n }));\r\n }\r\n\r\n /**\r\n * Builds a collision layout per overlap cluster. Each cluster gets its own\r\n * column count, which prevents a short 09:00 event from being unnecessarily\r\n * squeezed because another event overlaps at 15:00.\r\n */\r\n private buildTimedEventsForDay(\r\n date: Date,\r\n column: number,\r\n columnCount: number,\r\n ): CalendarTimedEvent[] {\r\n const dayStart = this.startOfDay(date);\r\n const dayEnd = this.endOfDay(date);\r\n\r\n const candidates = this.normalizedEvents()\r\n .filter(\r\n ({ start, end, source }) =>\r\n !source.allDay &&\r\n !Number.isNaN(start.getTime()) &&\r\n end.getTime() >= dayStart.getTime() &&\r\n start.getTime() <= dayEnd.getTime(),\r\n )\r\n .map(({ source, start, end }) => {\r\n const segmentStart = new Date(Math.max(start.getTime(), dayStart.getTime()));\r\n const segmentEnd = new Date(Math.min(end.getTime(), dayEnd.getTime()));\r\n return {\r\n ...source,\r\n start,\r\n end,\r\n segmentStart,\r\n segmentEnd,\r\n allDay: false,\r\n continuesBefore: start.getTime() < dayStart.getTime(),\r\n continuesAfter: end.getTime() > dayEnd.getTime(),\r\n isStart: start.getTime() >= dayStart.getTime() && start.getTime() <= dayEnd.getTime(),\r\n isEnd: end.getTime() >= dayStart.getTime() && end.getTime() <= dayEnd.getTime(),\r\n column,\r\n columnCount,\r\n } as CalendarTimedEvent & { segmentStart: Date; segmentEnd: Date };\r\n })\r\n .sort(\r\n (a, b) =>\r\n a.segmentStart.getTime() - b.segmentStart.getTime() ||\r\n b.segmentEnd.getTime() - a.segmentEnd.getTime(),\r\n );\r\n\r\n type Positioned = CalendarTimedEvent & { segmentStart: Date; segmentEnd: Date; lane: number };\r\n const result: Positioned[] = [];\r\n let cluster: Positioned[] = [];\r\n let clusterLanes: Positioned[][] = [];\r\n let clusterEnd = -Infinity;\r\n\r\n const flushCluster = () => {\r\n if (!cluster.length) return;\r\n const laneCount = clusterLanes.length;\r\n for (const item of cluster) {\r\n item.columnCount = laneCount;\r\n }\r\n result.push(...cluster);\r\n cluster = [];\r\n clusterLanes = [];\r\n clusterEnd = -Infinity;\r\n };\r\n\r\n for (const e of candidates) {\r\n const start = e.segmentStart.getTime();\r\n if (cluster.length && start > clusterEnd) flushCluster();\r\n\r\n let lane = clusterLanes.findIndex((items) => {\r\n const last = items[items.length - 1];\r\n return last.segmentEnd.getTime() <= start;\r\n });\r\n if (lane < 0) {\r\n lane = clusterLanes.length;\r\n clusterLanes.push([]);\r\n }\r\n\r\n const positioned = { ...e, lane, column: lane } as Positioned;\r\n clusterLanes[lane].push(positioned);\r\n cluster.push(positioned);\r\n clusterEnd = Math.max(clusterEnd, e.segmentEnd.getTime());\r\n\r\n const startMinutes = e.segmentStart.getHours() * 60 + e.segmentStart.getMinutes();\r\n const endMinutes = e.segmentEnd.getHours() * 60 + e.segmentEnd.getMinutes();\r\n const effectiveEnd = Math.max(endMinutes, startMinutes + MIN_EVENT_MINUTES);\r\n positioned.top = (startMinutes / 60) * HOUR_HEIGHT;\r\n positioned.height = Math.max(((effectiveEnd - startMinutes) / 60) * HOUR_HEIGHT, 28);\r\n }\r\n flushCluster();\r\n\r\n return result\r\n .concat(cluster)\r\n .map(({ lane, segmentStart, segmentEnd, ...event }) => event as CalendarTimedEvent);\r\n }\r\n\r\n private buildAllDayEventsForDay(date: Date, column: number): CalendarTimedEvent[] {\r\n const dayStart = this.startOfDay(date);\r\n const dayEnd = this.endOfDay(date);\r\n\r\n return this.normalizedEvents()\r\n .filter(\r\n ({ source, start, end }) =>\r\n !!source.allDay &&\r\n !Number.isNaN(start.getTime()) &&\r\n end.getTime() >= dayStart.getTime() &&\r\n start.getTime() <= dayEnd.getTime(),\r\n )\r\n .map(({ source, start, end }) => ({\r\n ...source,\r\n start,\r\n end,\r\n top: 0,\r\n height: 24,\r\n allDay: true,\r\n column,\r\n columnCount: 1,\r\n continuesBefore: start.getTime() < dayStart.getTime(),\r\n continuesAfter: end.getTime() > dayEnd.getTime(),\r\n isStart: start.getTime() >= dayStart.getTime() && start.getTime() <= dayEnd.getTime(),\r\n isEnd: end.getTime() >= dayStart.getTime() && end.getTime() <= dayEnd.getTime(),\r\n }));\r\n }\r\n\r\n /** Creates FullCalendar-style horizontal segments for the six visible month rows. */\r\n private buildMonthEventSegments() {\r\n const visibleDays = this.viewDays;\r\n if (!visibleDays.length) {\r\n this.monthEventSegments = [];\r\n this.monthEventRows = Array.from({ length: MONTH_ROW_COUNT }, () => []);\r\n return;\r\n }\r\n\r\n const gridStart = this.startOfDay(visibleDays[0].date!);\r\n const gridEnd = this.endOfDay(visibleDays[visibleDays.length - 1].date!);\r\n const segments: CalendarMonthEventSegment[] = [];\r\n\r\n for (const { source, start, end } of this.normalizedEvents()) {\r\n if (\r\n Number.isNaN(start.getTime()) ||\r\n end.getTime() < gridStart.getTime() ||\r\n start.getTime() > gridEnd.getTime()\r\n )\r\n continue;\r\n\r\n const clippedStart = new Date(Math.max(start.getTime(), gridStart.getTime()));\r\n const clippedEnd = new Date(Math.min(end.getTime(), gridEnd.getTime()));\r\n const firstIndex = this.dayIndexInMonthGrid(clippedStart, gridStart);\r\n const lastIndex = this.dayIndexInMonthGrid(clippedEnd, gridStart);\r\n\r\n for (\r\n let index = Math.max(0, firstIndex);\r\n index <= Math.min(visibleDays.length - 1, lastIndex);\r\n ) {\r\n const row = Math.floor(index / MONTH_COLUMN_COUNT);\r\n const rowEndIndex = Math.min((row + 1) * MONTH_COLUMN_COUNT - 1, lastIndex);\r\n const startColumn = index % MONTH_COLUMN_COUNT;\r\n const endColumn = rowEndIndex % MONTH_COLUMN_COUNT;\r\n const segmentStart = new Date(visibleDays[index].date!);\r\n const segmentEnd = this.endOfDay(visibleDays[rowEndIndex].date!);\r\n\r\n segments.push({\r\n ...source,\r\n start,\r\n end,\r\n row,\r\n startColumn,\r\n endColumn,\r\n continuesBefore: start.getTime() < segmentStart.getTime(),\r\n continuesAfter: end.getTime() > segmentEnd.getTime(),\r\n isStart:\r\n start.getTime() >= segmentStart.getTime() && start.getTime() <= segmentEnd.getTime(),\r\n isEnd: end.getTime() >= segmentStart.getTime() && end.getTime() <= segmentEnd.getTime(),\r\n lane: 0,\r\n });\r\n\r\n index = rowEndIndex + 1;\r\n }\r\n }\r\n\r\n // Stable ordering makes the same events keep the same visual lane while navigating.\r\n segments.sort(\r\n (a, b) =>\r\n a.row - b.row ||\r\n a.startColumn - b.startColumn ||\r\n a.start.getTime() - b.start.getTime() ||\r\n String(a.title ?? '').localeCompare(String(b.title ?? '')),\r\n );\r\n\r\n // Assign lanes independently inside every week row.\r\n const lanesByRow = new Map<number, CalendarMonthEventSegment[][]>();\r\n for (const segment of segments) {\r\n const lanes = lanesByRow.get(segment.row) ?? [];\r\n let lane = lanes.findIndex((items) =>\r\n items.every((item) => item.endColumn < segment.startColumn),\r\n );\r\n if (lane < 0) {\r\n lane = lanes.length;\r\n lanes.push([]);\r\n }\r\n (segment as CalendarMonthEventSegment & { lane: number }).lane = lane;\r\n lanes[lane].push(segment);\r\n lanesByRow.set(segment.row, lanes);\r\n }\r\n\r\n this.monthEventSegments = segments;\r\n this.monthEventRows = Array.from({ length: MONTH_ROW_COUNT }, () => []);\r\n for (const segment of segments) this.monthEventRows[segment.row].push(segment);\r\n }\r\n\r\n private dayIndexInMonthGrid(date: Date, gridStart: Date): number {\r\n const a = this.startOfDay(date);\r\n const b = this.startOfDay(gridStart);\r\n const aUtc = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());\r\n const bUtc = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());\r\n return Math.round((aUtc - bUtc) / 86_400_000);\r\n }\r\n\r\n private normalizedEvents(): NormalizedCalendarEvent[] {\r\n return this.renderEventSources().map((source) => {\r\n const normalized = this.normalizeEvent(source);\r\n return { source, start: normalized.start, end: normalized.end };\r\n });\r\n }\r\n\r\n private renderEventSources(): MsEvents[] {\r\n if (!this.interaction?.active) return this._events;\r\n return this._events.map((event) =>\r\n this.sameEvent(event, this.interaction!.source) ? this.interaction!.preview : event,\r\n );\r\n }\r\n\r\n private renderEventView() {\r\n const monthStart = this.adapter.getDate({\r\n locale: this._locale,\r\n year: this.currYear,\r\n month: this.currMonth,\r\n day: 1,\r\n });\r\n const monthEnd = this.adapter.getDate({\r\n locale: this._locale,\r\n year: this.currYear,\r\n month: this.currMonth,\r\n day: this.adapter.lastDateofMonth(this.currYear, this.currMonth),\r\n });\r\n\r\n this.eventViewItems = this.renderEventSources()\r\n .map((event) => {\r\n const n = this.normalizeEvent(event);\r\n return { event: event as MsEventViewer, start: n.start, end: n.end };\r\n })\r\n .filter(\r\n ({ start, end }) => compareDate(end, monthStart) >= 0 && compareDate(start, monthEnd) <= 0,\r\n )\r\n .sort((a, b) => a.start.getTime() - b.start.getTime());\r\n }\r\n\r\n get headerText(): string {\r\n if (!this.anchorDate) return '';\r\n\r\n if (this.view === 'day') {\r\n return this.adapter.formatDate(this.adapter.toLocale(this.anchorDate), 'full') ?? '';\r\n }\r\n\r\n if (this.view === 'week') {\r\n const days = this.getWeekDates(this.anchorDate);\r\n return this.formatDateRange(days[0], days[6]);\r\n }\r\n\r\n return `${this.displayMonth} ${this.currYear}`;\r\n }\r\n\r\n formatDateRange(start: Date, end: Date): string {\r\n const s = this.adapter.toLocale(start);\r\n const e = this.adapter.toLocale(end);\r\n const startText = this.adapter.formatDate(s, 'd MMMM') ?? '';\r\n const endText = this.adapter.formatDate(e, 'd MMMM') ?? '';\r\n return s.year === e.year\r\n ? `${startText} – ${endText}, ${s.year}`\r\n : `${startText}, ${s.year} – ${endText}, ${e.year}`;\r\n }\r\n\r\n formatEventDate(date: Date): string {\r\n return this.adapter.formatDate(this.adapter.toLocale(date), 'd MMMM, yyyy') ?? '';\r\n }\r\n\r\n formatTime(minutes: number): string {\r\n return `${String(Math.floor(minutes / 60)).padStart(2, '0')}:${String(minutes % 60).padStart(2, '0')}`;\r\n }\r\n\r\n changeView(v: CalendarView) {\r\n this.cancelEventInteraction();\r\n this.view = v;\r\n this.renderCalendar(v);\r\n }\r\n\r\n gotoToday() {\r\n this.cancelEventInteraction();\r\n this.anchorDate = this.adapter.getDate(this.adapter.today());\r\n this.selected = new Date(this.anchorDate);\r\n this.syncAnchorToLocale();\r\n this.renderCalendar(this.view);\r\n }\r\n\r\n selectDay(ev: Event, item: DateViewDay) {\r\n ev.stopPropagation();\r\n if (item.active) {\r\n this.selected = item.date;\r\n this.anchorDate = new Date(item.date!);\r\n this.dateChange.emit(item);\r\n this.renderCalendar(this.view);\r\n }\r\n }\r\n\r\n next() {\r\n this.navigate(1);\r\n }\r\n previous() {\r\n this.navigate(-1);\r\n }\r\n\r\n private navigate(direction: 1 | -1) {\r\n const d = new Date(this.anchorDate);\r\n if (this.view === 'month' || this.view === 'event') {\r\n const locale = this.adapter.toLocale(d);\r\n this.anchorDate = this.adapter.getDate({\r\n locale: this._locale,\r\n year: locale.year,\r\n month: locale.month! + direction,\r\n day: 1,\r\n });\r\n } else {\r\n d.setDate(d.getDate() + direction * (this.view === 'week' ? 7 : 1));\r\n this.anchorDate = d;\r\n }\r\n this.syncAnchorToLocale();\r\n this.renderCalendar(this.view);\r\n }\r\n\r\n onclickEvent(ev: Event, item: DateViewDay, event: MsEvents) {\r\n ev.stopPropagation();\r\n this.selectEvent.emit({ date: item.date!, event });\r\n }\r\n\r\n onTimedEventClick(ev: Event, event: MsEvents, date: Date) {\r\n ev.stopPropagation();\r\n if (this.interaction?.active) return;\r\n this.selectEvent.emit({ date, event });\r\n }\r\n\r\n startMonthEventInteraction(\r\n ev: PointerEvent,\r\n segment: CalendarMonthEventSegment,\r\n type: CalendarEventInteractionType = 'move',\r\n ) {\r\n if (ev.button !== 0 || !this.resizeAndMovable()) return;\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n this.beginInteraction(ev, segment, type, 'month');\r\n }\r\n\r\n startTimedEventInteraction(\r\n ev: PointerEvent,\r\n event: CalendarTimedEvent,\r\n type: CalendarEventInteractionType = 'move',\r\n ) {\r\n if (ev.button !== 0 || !this.resizeAndMovable()) return;\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n this.beginInteraction(ev, event, type, event.allDay ? 'all-day' : 'timed');\r\n }\r\n\r\n private beginInteraction(\r\n ev: PointerEvent,\r\n event: MsEvents,\r\n type: CalendarEventInteractionType,\r\n _surface: 'month' | 'timed' | 'all-day',\r\n ) {\r\n const source = this._events.find((candidate) => this.sameEvent(candidate, event));\r\n if (!source) return;\r\n this.interaction = {\r\n type,\r\n source,\r\n previousEvent: { ...source },\r\n pointerId: ev.pointerId,\r\n startX: ev.clientX,\r\n startY: ev.clientY,\r\n originColumn: 0,\r\n originRow: 0,\r\n preview: { ...source },\r\n deltaDays: 0,\r\n deltaMinutes: 0,\r\n active: true,\r\n surface: _surface,\r\n };\r\n }\r\n\r\n private updateEventInteraction(ev: PointerEvent) {\r\n const state = this.interaction;\r\n if (!state) return;\r\n const monthMetrics = state.surface === 'month' ? this.monthPointerDelta(ev) : null;\r\n const timedMetrics = state.surface === 'timed' ? this.timedPointerDelta(ev) : null;\r\n const allDayMetrics = state.surface === 'all-day' ? this.allDayPointerDelta(ev) : null;\r\n let deltaDays = monthMetrics?.days ?? timedMetrics?.days ?? allDayMetrics?.days ?? 0;\r\n let deltaMinutes = timedMetrics?.minutes ?? 0;\r\n\r\n const preview = this.applyEventDelta(state.source, state.type, deltaDays, deltaMinutes);\r\n if (!this.isWithinBounds(preview)) return;\r\n\r\n state.preview = preview;\r\n state.deltaDays = deltaDays;\r\n state.deltaMinutes = deltaMinutes;\r\n this.renderCalendar(this.view);\r\n }\r\n\r\n private finishEventInteraction(ev: PointerEvent, cancelled: boolean) {\r\n const state = this.interaction;\r\n if (!state) return;\r\n if (!cancelled) this.updateEventInteraction(ev);\r\n\r\n const changed = !this.sameEventValue(state.source, state.preview);\r\n this.interaction = null;\r\n\r\n if (!cancelled && changed) {\r\n const updated = this._events.map((event) =>\r\n this.sameEvent(event, state.source) ? state.preview : event,\r\n );\r\n this._events = updated;\r\n this.eventChange.emit({\r\n event: state.preview,\r\n previousEvent: state.previousEvent,\r\n interaction: state.type,\r\n deltaDays: state.deltaDays,\r\n deltaMinutes: state.deltaMinutes,\r\n });\r\n this.eventsChange.emit(updated);\r\n }\r\n\r\n this.renderCalendar(this.view);\r\n }\r\n\r\n private cancelEventInteraction() {\r\n if (!this.interaction) return;\r\n this.interaction = null;\r\n }\r\n\r\n private monthPointerDelta(ev: PointerEvent): { days: number } | null {\r\n if (!this.interaction || this.view !== 'month') return null;\r\n const root = this.calendarWrapper()?.nativeElement.querySelector<HTMLElement>('.month-grid');\r\n if (!root) return null;\r\n const rect = root.getBoundingClientRect();\r\n const cellWidth = rect.width / MONTH_COLUMN_COUNT;\r\n const cellHeight = rect.height / MONTH_ROW_COUNT;\r\n const startColumn = Math.max(\r\n 0,\r\n Math.min(\r\n MONTH_COLUMN_COUNT - 1,\r\n Math.floor((this.interaction.startX - rect.left) / cellWidth),\r\n ),\r\n );\r\n const currentColumn = Math.max(\r\n 0,\r\n Math.min(MONTH_COLUMN_COUNT - 1, Math.floor((ev.clientX - rect.left) / cellWidth)),\r\n );\r\n const startRow = Math.max(\r\n 0,\r\n Math.min(MONTH_ROW_COUNT - 1, Math.floor((this.interaction.startY - rect.top) / cellHeight)),\r\n );\r\n const currentRow = Math.max(\r\n 0,\r\n Math.min(MONTH_ROW_COUNT - 1, Math.floor((ev.clientY - rect.top) / cellHeight)),\r\n );\r\n return { days: (currentRow - startRow) * 7 + (currentColumn - startColumn) };\r\n }\r\n\r\n private allDayPointerDelta(ev: PointerEvent): { days: number } | null {\r\n if (!this.interaction || this.view === 'month' || this.view === 'event') return null;\r\n const root = this.calendarWrapper()?.nativeElement.querySelector<HTMLElement>('.all-day-row');\r\n if (!root) return null;\r\n const columns = Array.from(root.querySelectorAll('.all-day-cell')) as HTMLElement[];\r\n if (!columns.length) return null;\r\n const indexAt = (x: number) => {\r\n const index = columns.findIndex((column) => {\r\n const rect = column.getBoundingClientRect();\r\n return x >= rect.left && x <= rect.right;\r\n });\r\n return index < 0 ? 0 : index;\r\n };\r\n return { days: indexAt(ev.clientX) - indexAt(this.interaction.startX) };\r\n }\r\n\r\n private timedPointerDelta(ev: PointerEvent): { days: number; minutes: number } | null {\r\n if (!this.interaction || (this.view !== 'day' && this.view !== 'week')) return null;\r\n const root = this.calendarWrapper()?.nativeElement.querySelector<HTMLElement>('.time-grid');\r\n if (!root) return null;\r\n const columns = Array.from(root.querySelectorAll('.day-column')) as HTMLElement[];\r\n if (!columns.length) return null;\r\n\r\n const startColumn = this.columnAtPoint(\r\n columns,\r\n this.interaction.startX,\r\n this.interaction.startY,\r\n );\r\n const currentColumn = this.columnAtPoint(columns, ev.clientX, ev.clientY);\r\n const startIndex = startColumn ?? 0;\r\n const currentIndex = currentColumn ?? startIndex;\r\n const rect = (columns[currentIndex] ?? columns[0]).getBoundingClientRect();\r\n const startRect = (columns[startIndex] ?? columns[0]).getBoundingClientRect();\r\n const startMinute = this.snapMinutes(\r\n ((this.interaction.startY - startRect.top) / HALF_HOUR_HEIGHT) * 30,\r\n );\r\n const currentMinute = this.snapMinutes(((ev.clientY - rect.top) / HALF_HOUR_HEIGHT) * 30);\r\n return { days: currentIndex - startIndex, minutes: currentMinute - startMinute };\r\n }\r\n\r\n private columnAtPoint(columns: HTMLElement[], x: number, y: number): number | null {\r\n const index = columns.findIndex((column) => {\r\n const rect = column.getBoundingClientRect();\r\n return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\r\n });\r\n return index < 0 ? null : index;\r\n }\r\n\r\n private snapMinutes(minutes: number): number {\r\n return Math.max(0, Math.min(24 * 60, Math.round(minutes / 30) * 30));\r\n }\r\n\r\n private applyEventDelta(\r\n source: MsEvents,\r\n type: CalendarEventInteractionType,\r\n deltaDays: number,\r\n deltaMinutes: number,\r\n ): MsEvents {\r\n const normalized = this.normalizeEvent(source);\r\n let start = new Date(normalized.start);\r\n let end = new Date(normalized.end);\r\n\r\n if (type === 'move') {\r\n start = this.addMinutes(this.addDays(start, deltaDays), deltaMinutes);\r\n end = this.addMinutes(this.addDays(end, deltaDays), deltaMinutes);\r\n } else if (type === 'resize-start') {\r\n start = this.addMinutes(this.addDays(start, deltaDays), deltaMinutes);\r\n if (start.getTime() > end.getTime() - MIN_EVENT_MINUTES * 60_000) {\r\n start = new Date(end.getTime() - MIN_EVENT_MINUTES * 60_000);\r\n }\r\n } else {\r\n end = this.addMinutes(this.addDays(end, deltaDays), deltaMinutes);\r\n if (end.getTime() < start.getTime() + MIN_EVENT_MINUTES * 60_000) {\r\n end = new Date(start.getTime() + MIN_EVENT_MINUTES * 60_000);\r\n }\r\n }\r\n\r\n return { ...source, start, end };\r\n }\r\n\r\n private addDays(date: Date, days: number): Date {\r\n const d = new Date(date);\r\n d.setDate(d.getDate() + days);\r\n return d;\r\n }\r\n\r\n private addMinutes(date: Date, minutes: number): Date {\r\n return new Date(date.getTime() + minutes * 60_000);\r\n }\r\n\r\n private isWithinBounds(event: MsEvents): boolean {\r\n const n = this.normalizeEvent(event);\r\n if (this.minDate && compareDate(n.start, this.minDate) < 0) return false;\r\n if (this.maxDate && compareDate(n.end, this.maxDate) > 0) return false;\r\n return true;\r\n }\r\n\r\n private sameEvent(a: MsEvents, b: MsEvents): boolean {\r\n return a.id != null && b.id != null ? a.id === b.id : a === b;\r\n }\r\n\r\n private sameEventValue(a: MsEvents, b: MsEvents): boolean {\r\n const aa = this.normalizeEvent(a);\r\n const bb = this.normalizeEvent(b);\r\n return aa.start.getTime() === bb.start.getTime() && aa.end.getTime() === bb.end.getTime();\r\n }\r\n\r\n private startOfDay(date: Date): Date {\r\n const d = new Date(date);\r\n d.setHours(0, 0, 0, 0);\r\n return d;\r\n }\r\n\r\n private endOfDay(date: Date): Date {\r\n const d = new Date(date);\r\n d.setHours(23, 59, 59, 999);\r\n return d;\r\n }\r\n\r\n private readonly defaultHeight = 600;\r\n minHeight = this.defaultHeight;\r\n}\r\n","<div class=\"wrapper\" [class.is-interacting]=\"!!interaction\">\r\n <div class=\"header\">\r\n <div class=\"nxt-prv-buttons\">\r\n <button type=\"button\" class=\"previous dtp-btn\" (click)=\"previous()\" title=\"Previous\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"\r\n _config.previousButtonTemplate || defaultPreviousBTNTemplate\r\n \"></ng-template>\r\n </button>\r\n @if (_config.todayButton) {\r\n <button type=\"button\" class=\"today dtp-btn\" (click)=\"gotoToday()\">\r\n {{ localize().today }}\r\n </button>\r\n }\r\n <button type=\"button\" class=\"next dtp-btn\" (click)=\"next()\" title=\"Next\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"_config.nextButtonTemplate || defaultNextBTNTemplate\"></ng-template>\r\n </button>\r\n </div>\r\n\r\n <div class=\"current-date\" aria-live=\"polite\">{{ headerText }}</div>\r\n\r\n <div class=\"view-mode\">\r\n <button\r\n type=\"button\"\r\n class=\"dtp-btn\"\r\n (click)=\"changeView('month')\"\r\n [class.active]=\"view === 'month'\">\r\n {{ localize().month }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"dtp-btn\"\r\n (click)=\"changeView('week')\"\r\n [class.active]=\"view === 'week'\">\r\n {{ localize().week }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"dtp-btn\"\r\n (click)=\"changeView('day')\"\r\n [class.active]=\"view === 'day'\">\r\n {{ localize().day }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"dtp-btn\"\r\n (click)=\"changeView('event')\"\r\n [class.active]=\"view === 'event'\">\r\n {{ localize().event }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"calendar\" #calendarWrapper>\r\n @switch (view) {\r\n @case ('month') {\r\n <ul class=\"weeks\">\r\n @for (w of weeks; track $index) {\r\n <li>{{ w }}</li>\r\n }\r\n </ul>\r\n\r\n <div class=\"month-grid\" [style.minHeight.px]=\"minHeight\">\r\n @for (row of monthEventRows; track $index; let rowIndex = $index) {\r\n <div class=\"month-row\">\r\n @for (\r\n item of viewDays.slice(rowIndex * 7, rowIndex * 7 + 7);\r\n track item.date?.getTime() ?? $index\r\n ) {\r\n <button\r\n type=\"button\"\r\n class=\"month-day\"\r\n [class.de-active]=\"!item.active\"\r\n [class.today]=\"item.isToday\"\r\n [class.selected]=\"item.selected\"\r\n (click)=\"selectDay($event, item)\">\r\n <span class=\"day-number\">{{ item.day }}</span>\r\n </button>\r\n }\r\n\r\n <div class=\"month-event-layer\" aria-live=\"polite\">\r\n @for (event of row; track event.id ?? event.start.getTime() ?? $index) {\r\n <button\r\n type=\"button\"\r\n class=\"month-event\"\r\n [class.continues-before]=\"event.continuesBefore\"\r\n [class.continues-after]=\"event.continuesAfter\"\r\n [class.event-start]=\"event.isStart\"\r\n [class.event-end]=\"event.isEnd\"\r\n [class.is-dragging]=\"\r\n interaction?.source === event ||\r\n (interaction?.source?.id != null && interaction?.source?.id === event.id)\r\n \"\r\n [style.gridColumn]=\"event.startColumn + 1 + ' / ' + (event.endColumn + 2)\"\r\n [style.gridRow]=\"event.lane + 1\"\r\n [style.background]=\"event.backgroundColor || event.color || null\"\r\n [style.borderColor]=\"event.borderColor || event.color || null\"\r\n [style.color]=\"event.textColor || null\"\r\n [title]=\"event.title || ''\"\r\n (pointerdown)=\"startMonthEventInteraction($event, event)\"\r\n (click)=\"\r\n onclickEvent($event, { date: event.start, day: 0, active: true }, event)\r\n \">\r\n @if (event.isStart) {\r\n <span class=\"event-title\">{{ event.title || 'Untitled event' }}</span>\r\n } @else {\r\n <span class=\"event-title continuation-title\">{{ event.title || '' }}</span>\r\n }\r\n @if (resizeAndMovable()) {\r\n @if (event.isStart) {\r\n <span\r\n class=\"resize-handle resize-handle-h resize-start\"\r\n title=\"Resize start\"\r\n (pointerdown)=\"\r\n startMonthEventInteraction($event, event, 'resize-start')\r\n \"></span>\r\n }\r\n @if (event.isEnd) {\r\n <span\r\n class=\"resize-handle resize-handle-h resize-end\"\r\n title=\"Resize end\"\r\n (pointerdown)=\"\r\n startMonthEventInteraction($event, event, 'resize-end')\r\n \"></span>\r\n }\r\n }\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @case ('week') {\r\n <ng-container [ngTemplateOutlet]=\"timedCalendar\"></ng-container>\r\n }\r\n\r\n @case ('day') {\r\n <ng-container [ngTemplateOutlet]=\"timedCalendar\"></ng-container>\r\n }\r\n\r\n @case ('event') {\r\n <div class=\"event-list\">\r\n @if (eventViewItems.length) {\r\n @for (item of eventViewItems; track item.event.id ?? item.start.getTime()) {\r\n <button\r\n type=\"button\"\r\n class=\"event-list-item\"\r\n (click)=\"\r\n onclickEvent($event, { date: item.start, day: 0, active: true }, item.event)\r\n \">\r\n <span\r\n class=\"event-dot\"\r\n [style.background]=\"\r\n item.event.backgroundColor || item.event.color || null\r\n \"></span>\r\n <span class=\"event-copy\">\r\n <strong>{{ item.event.title || 'Untitled event' }}</strong>\r\n <small>\r\n {{ formatEventDate(item.start) }}\r\n @if (item.end.getTime() !== item.start.getTime()) {\r\n – {{ formatEventDate(item.end) }}\r\n }\r\n </small>\r\n </span>\r\n </button>\r\n }\r\n } @else {\r\n <div class=\"empty-events\">No events for this month.</div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n\r\n<ng-template #timedCalendar>\r\n <div class=\"timed-calendar\">\r\n <div\r\n class=\"timed-header\"\r\n [style.gridTemplateColumns]=\"'64px repeat(' + weekDays.length + ', minmax(0, 1fr))'\">\r\n <div class=\"corner\"></div>\r\n @for (day of weekDays; track day.date.getTime()) {\r\n <button\r\n type=\"button\"\r\n class=\"day-header\"\r\n [class.today]=\"day.isToday\"\r\n (click)=\"selectDay($event, { date: day.date, day: 0, active: true })\">\r\n <span>{{ day.label }}</span>\r\n <strong>{{ day.dayNumber }}</strong>\r\n </button>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"all-day-row\"\r\n [style.gridTemplateColumns]=\"'64px repeat(' + weekDays.length + ', minmax(0, 1fr))'\">\r\n <div class=\"all-day-label\">All day</div>\r\n @for (day of weekDays; track day.date.getTime(); let i = $index) {\r\n <div class=\"all-day-cell\">\r\n @for (\r\n event of allDayByColumn[i];\r\n track event.id ?? event.title ?? event.start.getTime()\r\n ) {\r\n <button\r\n type=\"button\"\r\n class=\"timed-event all-day-event\"\r\n [class.continues-before]=\"event.continuesBefore\"\r\n [class.continues-after]=\"event.continuesAfter\"\r\n [style.background]=\"event.backgroundColor || event.color || null\"\r\n [style.borderColor]=\"event.borderColor || event.color || null\"\r\n [style.color]=\"event.textColor || null\"\r\n [title]=\"event.title || ''\"\r\n (pointerdown)=\"startTimedEventInteraction($event, event)\"\r\n (click)=\"onTimedEventClick($event, event, day.date)\">\r\n <span>{{ event.title || 'Untitled event' }}</span>\r\n @if (resizeAndMovable()) {\r\n @if (event.isStart) {\r\n <span\r\n class=\"resize-handle resize-handle-h resize-start\"\r\n title=\"Resize start\"\r\n (pointerdown)=\"\r\n startTimedEventInteraction($event, event, 'resize-start')\r\n \"></span>\r\n }\r\n @if (event.isEnd) {\r\n <span\r\n class=\"resize-handle resize-handle-h resize-end\"\r\n title=\"Resize end\"\r\n (pointerdown)=\"startTimedEventInteraction($event, event, 'resize-end')\"></span>\r\n }\r\n }\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"time-grid\"\r\n [style.gridTemplateColumns]=\"'64px repeat(' + weekDays.length + ', minmax(0, 1fr))'\">\r\n <div class=\"time-axis\">\r\n @for (minutes of timeSlots; track minutes) {\r\n <div class=\"time-label\" [style.top.px]=\"(minutes / 60) * hourHeight\">\r\n @if (minutes % 60 === 0) {\r\n {{ formatTime(minutes) }}\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n @for (day of weekDays; track day.date.getTime()) {\r\n <div class=\"day-column\">\r\n @for (minutes of timeSlots; track minutes) {\r\n <div class=\"time-slot\" [class.hour]=\"minutes % 60 === 0\"></div>\r\n }\r\n\r\n @for (event of day.events; track event.id ?? event.title ?? event.start.getTime()) {\r\n <button\r\n type=\"button\"\r\n class=\"timed-event\"\r\n [class.continues-before]=\"event.continuesBefore\"\r\n [class.continues-after]=\"event.continuesAfter\"\r\n [style.top.px]=\"event.top\"\r\n [style.height.px]=\"event.height\"\r\n [style.insetInlineStart.%]=\"event.column * (100 / event.columnCount)\"\r\n [style.width.%]=\"100 / event.columnCount - 1\"\r\n [style.background]=\"event.backgroundColor || event.color || null\"\r\n [style.borderColor]=\"event.borderColor || event.color || null\"\r\n [style.color]=\"event.textColor || null\"\r\n [title]=\"event.title || ''\"\r\n (pointerdown)=\"startTimedEventInteraction($event, event)\"\r\n (click)=\"onTimedEventClick($event, event, day.date)\">\r\n <strong>{{ event.title || 'Untitled event' }}</strong>\r\n @if (event.height >= 42) {\r\n <small>\r\n {{ formatTime(event.start.getHours() * 60 + event.start.getMinutes()) }}\r\n </small>\r\n }\r\n @if (resizeAndMovable()) {\r\n @if (event.isStart) {\r\n <span\r\n class=\"resize-handle resize-handle-v resize-start\"\r\n title=\"Resize start\"\r\n (pointerdown)=\"\r\n startTimedEventInteraction($event, event, 'resize-start')\r\n \"></span>\r\n }\r\n @if (event.isEnd) {\r\n <span\r\n class=\"resize-handle resize-handle-v resize-end\"\r\n title=\"Resize end\"\r\n (pointerdown)=\"startTimedEventInteraction($event, event, 'resize-end')\"></span>\r\n }\r\n }\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultPreviousBTNTemplate>\r\n <svg width=\"15px\" height=\"30px\" viewBox=\"0 0 320 512\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M224 480c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l169.4 169.4c12.5 12.5 12.5 32.75 0 45.25C240.4 476.9 232.2 480 224 480z\" />\r\n </svg>\r\n</ng-template>\r\n\r\n<ng-template #defaultNextBTNTemplate>\r\n <svg width=\"15px\" height=\"30px\" viewBox=\"0 0 320 512\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L242.8 256L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\" />\r\n </svg>\r\n</ng-template>\r\n","import { Provider } from '@angular/core';\nimport { DATE_ADAPTERS, DateAdapterRegistration, DEFAULT_DATE_ADAPTERS } from './adapters/consts';\n\nfunction dedupeAdapters(adapters: DateAdapterRegistration[]): DateAdapterRegistration[] {\n return Array.from(new Map(adapters.map((a) => [a.locale, a])).values());\n}\n\nexport function provideDateAdapters(...additional: DateAdapterRegistration[]): Provider[] {\n const all = dedupeAdapters([...DEFAULT_DATE_ADAPTERS, ...additional]);\n return all.map((adapter) => ({\n provide: DATE_ADAPTERS,\n multi: true,\n useValue: adapter,\n }));\n}\n","/**\r\n * A date range used by ngx-kit date range picker.\r\n *\r\n * `end` is null while the user is selecting the second date.\r\n */\r\nexport interface NgxDateRange<T = Date> {\r\n start: T | null;\r\n end: T | null;\r\n}\r\n\r\nexport function createDateRange<T = Date>(\r\n start: T | null = null,\r\n end: T | null = null,\r\n): NgxDateRange<T> {\r\n return { start, end };\r\n}\r\n","import { MsEventViewer } from './events';\r\n\r\nexport class DateModel<InputDate = Date> {\r\n date?: InputDate;\r\n active?: boolean;\r\n isToday?: boolean;\r\n selected?: boolean;\r\n}\r\n\r\nexport class DateViewYear extends DateModel {\r\n year!: number;\r\n}\r\n\r\nexport class DateViewMonth extends DateModel {\r\n month!: number;\r\n displayMonth!: string;\r\n}\r\n\r\nexport class DateViewDay extends DateModel {\r\n day!: number;\r\n events?: MsEventViewer[];\r\n inRange?: boolean;\r\n rangeStart?: boolean;\r\n rangeEnd?: boolean;\r\n inRangePreview?: boolean;\r\n}\r\n\r\nexport class DateViewWeek extends DateModel {\r\n time!: number;\r\n weeks: string[] = [];\r\n displayTime!: string;\r\n}\r\n\r\nexport interface CalendarMonthEventSegment extends MsEventViewer {\r\n start: Date;\r\n end: Date;\r\n row: number;\r\n startColumn: number;\r\n endColumn: number;\r\n lane: number;\r\n continuesBefore: boolean;\r\n continuesAfter: boolean;\r\n isStart: boolean;\r\n isEnd: boolean;\r\n}\r\n\r\nexport interface CalendarDayColumn {\r\n date: Date;\r\n label: string;\r\n dayNumber: string;\r\n isToday: boolean;\r\n events: CalendarTimedEvent[];\r\n}\r\n\r\nexport interface CalendarTimedEvent extends MsEventViewer {\r\n start: Date;\r\n end: Date;\r\n top: number;\r\n height: number;\r\n allDay: boolean;\r\n column: number;\r\n columnCount: number;\r\n}\r\n","import { compareDate, deserialize, isValid } from './date.helper';\r\nimport { NgxDateRange } from '../models/range';\r\n\r\nexport function normalizeDateRange(\r\n value: NgxDateRange<Date> | readonly [Date | null, Date | null] | null | undefined,\r\n): NgxDateRange<Date> {\r\n if (Array.isArray(value)) {\r\n return normalizeDateRange({ start: value[0], end: value[1] });\r\n }\r\n\r\n const start = deserialize((value as any)?.start);\r\n const end = deserialize((value as any)?.end);\r\n\r\n if (start && end && compareDate(start, end) > 0) {\r\n return { start: end, end: start };\r\n }\r\n\r\n return { start, end };\r\n}\r\n\r\nexport function isCompleteDateRange(range: NgxDateRange<Date>): boolean {\r\n return !!range.start && !!range.end && isValid(range.start) && isValid(range.end);\r\n}\r\n\r\nexport function isDateInRange(date: Date, range: NgxDateRange<Date>): boolean {\r\n if (!range.start || !range.end) return false;\r\n return compareDate(date, range.start) >= 0 && compareDate(date, range.end) <= 0;\r\n}\r\n\r\nexport function isDateInPreviewRange(\r\n date: Date,\r\n start: Date | null,\r\n previewEnd: Date | null,\r\n): boolean {\r\n if (!start || !previewEnd) return false;\r\n\r\n const from = compareDate(start, previewEnd) <= 0 ? start : previewEnd;\r\n const to = compareDate(start, previewEnd) <= 0 ? previewEnd : start;\r\n\r\n return compareDate(date, from) >= 0 && compareDate(date, to) <= 0;\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n inject,\r\n input,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n Validator,\r\n} from '@angular/forms';\r\nimport { DateAdapterRegistry } from '../../adapters/date-adapter-registry';\r\nimport { compareDate, deserialize, isValid, sameDate } from '../../helpers/date.helper';\r\nimport {\r\n isCompleteDateRange,\r\n isDateInPreviewRange,\r\n isDateInRange,\r\n normalizeDateRange,\r\n} from '../../helpers/date-range.helper';\r\nimport { DateViewDay, DateViewMonth, DateViewYear } from '../../models/date';\r\nimport { DatePickerView } from '../../models/view';\r\nimport { NgxDateRange } from '../../models/range';\r\nimport { NgxDatePickerConfig } from '../config';\r\nimport { NgxDatePickerBase } from '../ngx-date-picker-base.component';\r\nimport { NGX_CALENDAR_LOCALIZATION, NgxCalendarLocalization } from '../../tokens/localization';\r\n\r\n@Component({\r\n selector: 'ngx-date-range-picker',\r\n standalone: true,\r\n templateUrl: './ngx-date-range-picker.component.html',\r\n styleUrls: ['./ngx-date-range-picker.component.scss'],\r\n imports: [CommonModule],\r\n providers: [\r\n DateAdapterRegistry,\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => NgxDateRangePickerComponent),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => NgxDateRangePickerComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class NgxDateRangePickerComponent\r\n extends NgxDatePickerBase\r\n implements ControlValueAccessor, Validator, OnInit\r\n{\r\n defaultLocalization = inject(NGX_CALENDAR_LOCALIZATION);\r\n localize = input<NgxCalendarLocalization>(this.defaultLocalization);\r\n config = new NgxDatePickerConfig();\r\n\r\n @Input() set locale(value: string) {\r\n this._locale = value || 'en';\r\n this.adapter = this.dateAdapterRegistry.resolve(this._locale);\r\n this.init();\r\n }\r\n\r\n @Input() set min(value: Date | null | undefined) {\r\n const next = deserialize(value);\r\n if (!sameDate(next, this.minDate)) {\r\n this.minDate = next;\r\n this._validatorOnChange();\r\n this.renderِDatePicker(this.view);\r\n }\r\n }\r\n\r\n @Input() set max(value: Date | null | undefined) {\r\n const next = deserialize(value);\r\n if (!sameDate(next, this.maxDate)) {\r\n this.maxDate = next;\r\n this._validatorOnChange();\r\n this.renderِDatePicker(this.view);\r\n }\r\n }\r\n\r\n @Input() view: DatePickerView = 'day';\r\n\r\n @Output() rangeChange = new EventEmitter<NgxDateRange<Date>>();\r\n @Output() change = new EventEmitter<NgxDateRange<Date>>();\r\n\r\n range: NgxDateRange<Date> = { start: null, end: null };\r\n hoverDate: Date | null = null;\r\n\r\n weekDays: { min: string; name: string }[] = [];\r\n calendarHeader = '';\r\n\r\n protected _onChange = (_value: NgxDateRange<Date>) => {};\r\n protected _onTouched = () => {};\r\n protected _validatorOnChange = () => {};\r\n isDisabled = false;\r\n\r\n ngOnInit(): void {\r\n this.init();\r\n }\r\n\r\n updateConfig(value: NgxDatePickerConfig) {\r\n this.config = { ...new NgxDatePickerConfig(), ...value };\r\n }\r\n\r\n writeValue(value: NgxDateRange<Date> | readonly [Date | null, Date | null] | null): void {\r\n this.range = normalizeDateRange(value);\r\n this.init();\r\n }\r\n\r\n registerOnChange(fn: (value: NgxDateRange<Date>) => void): void {\r\n this._onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this._validatorOnChange = fn;\r\n }\r\n\r\n setDisabledState(disabled: boolean): void {\r\n this.isDisabled = disabled;\r\n }\r\n\r\n validate(_control: AbstractControl): ValidationErrors | null {\r\n const { start, end } = this.range;\r\n\r\n if (start && !isValid(start)) return { invalid: true };\r\n if (end && !isValid(end)) return { invalid: true };\r\n\r\n if (start && this.minDate && compareDate(start, this.minDate) < 0) {\r\n return { min: this.minDate };\r\n }\r\n if (start && this.maxDate && compareDate(start, this.maxDate) > 0) {\r\n return { max: this.maxDate };\r\n }\r\n if (end && this.minDate && compareDate(end, this.minDate) < 0) {\r\n return { min: this.minDate };\r\n }\r\n if (end && this.maxDate && compareDate(end, this.maxDate) > 0) {\r\n return { max: this.maxDate };\r\n }\r\n if (start && end && compareDate(start, end) > 0) {\r\n return { range: true };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n override renderِDatePicker(view: DatePickerView) {\r\n super.renderِDatePicker(view, undefined, [], () => {\r\n this.applyRangeState();\r\n const start = this.range.start;\r\n const end = this.range.end;\r\n const startText = start\r\n ? this.adapter.formatDate(this.adapter.toLocale(start), 'EEEE, d MMMM, yyyy')\r\n : '';\r\n const endText = end\r\n ? this.adapter.formatDate(this.adapter.toLocale(end), 'EEEE, d MMMM, yyyy')\r\n : '';\r\n\r\n this.calendarHeader = endText\r\n ? `${startText} – ${endText}`\r\n : startText || 'Select date range';\r\n });\r\n }\r\n\r\n private init() {\r\n this.months = this.adapter.longMonths;\r\n const shortDays = this.adapter.shortDays;\r\n const longDays = this.adapter.longDays;\r\n this.weekDays = shortDays.map((min, i) => ({ min, name: longDays[i] }));\r\n\r\n const anchor = this.range.end || this.range.start || this.adapter.getDate(this.adapter.today());\r\n const locale = this.adapter.toLocale(anchor);\r\n this.currYear = locale.year;\r\n this.currMonth = locale.month ?? 0;\r\n this.renderِDatePicker(this.view);\r\n }\r\n\r\n changeView(view: DatePickerView) {\r\n this.view = view;\r\n this.renderِDatePicker(view);\r\n }\r\n\r\n gotoToday() {\r\n const today = this.adapter.today();\r\n const date = today.date ?? this.adapter.getDate(today);\r\n this.currYear = today.year;\r\n this.currMonth = today.month ?? 0;\r\n\r\n // Keep an existing completed range; today is only a navigation shortcut.\r\n if (!this.range.start || this.range.end) {\r\n this.range = { start: date, end: null };\r\n this.emitValue();\r\n }\r\n\r\n this.changeView('day');\r\n }\r\n next() {\r\n if (this.view === 'year') {\r\n this.currYear += 20;\r\n } else if (this.view === 'month') {\r\n this.currYear++;\r\n } else {\r\n this.currMonth++;\r\n }\r\n if (this.currMonth < 0 || this.currMonth > 11) {\r\n let date = new Date(this.currYear, this.currMonth);\r\n this.currYear = date.getFullYear();\r\n this.currMonth = date.getMonth();\r\n }\r\n\r\n this.renderِDatePicker(this.view);\r\n }\r\n\r\n previous() {\r\n if (this.view === 'year') {\r\n this.currYear -= 20;\r\n } else if (this.view === 'month') {\r\n this.currYear--;\r\n } else {\r\n this.currMonth--;\r\n }\r\n if (this.currMonth < 0 || this.currMonth > 11) {\r\n let date = new Date(this.currYear, this.currMonth);\r\n this.currYear = date.getFullYear();\r\n this.currMonth = date.getMonth();\r\n }\r\n\r\n this.renderِDatePicker(this.view);\r\n }\r\n selectDay(event: Event, item: DateViewDay) {\r\n event.stopPropagation();\r\n if (!item.active || !item.date || this.isDisabled) return;\r\n\r\n const date = item.date;\r\n\r\n if (!this.range.start || this.range.end) {\r\n this.range = { start: date, end: null };\r\n } else {\r\n this.range =\r\n compareDate(date, this.range.start) < 0\r\n ? { start: date, end: this.range.start }\r\n : { start: this.range.start, end: date };\r\n\r\n this.hoverDate = null;\r\n }\r\n\r\n this.applyRangeState();\r\n this.emitValue();\r\n\r\n if (isCompleteDateRange(this.range)) {\r\n this._onTouched();\r\n }\r\n }\r\n\r\n selectMonth(event: Event, item: DateViewMonth) {\r\n event.stopPropagation();\r\n if (item.active) {\r\n this.currMonth = item.month;\r\n this.changeView('day');\r\n }\r\n }\r\n\r\n selectYear(event: Event, item: DateViewYear) {\r\n event.stopPropagation();\r\n if (item.active) {\r\n this.currYear = item.year;\r\n this.changeView('month');\r\n }\r\n }\r\n\r\n onDayEnter(item: DateViewDay) {\r\n if (this.range.start && !this.range.end && item.active) {\r\n this.hoverDate = item.date ?? null;\r\n this.applyRangeState();\r\n }\r\n }\r\n\r\n onDayLeave() {\r\n if (this.hoverDate) {\r\n this.hoverDate = null;\r\n this.applyRangeState();\r\n }\r\n }\r\n\r\n clear() {\r\n this.range = { start: null, end: null };\r\n this.hoverDate = null;\r\n this.applyRangeState();\r\n this.emitValue();\r\n this._onTouched();\r\n }\r\n\r\n private applyRangeState() {\r\n for (const item of this.viewDays) {\r\n if (!item.date) continue;\r\n\r\n item.rangeStart = !!this.range.start && sameDate(item.date, this.range.start);\r\n item.rangeEnd = !!this.range.end && sameDate(item.date, this.range.end);\r\n item.inRange = isDateInRange(item.date, this.range);\r\n item.inRangePreview =\r\n !this.range.end && isDateInPreviewRange(item.date, this.range.start, this.hoverDate);\r\n\r\n item.selected = !!item.rangeStart || !!item.rangeEnd;\r\n }\r\n }\r\n\r\n private emitValue() {\r\n const value = { ...this.range };\r\n this._onChange(value);\r\n this.rangeChange.emit(value);\r\n this.change.emit(value);\r\n }\r\n\r\n stopPagination(event: Event) {\r\n event.stopPropagation();\r\n }\r\n}\r\n","<div class=\"wrapper\" (click)=\"stopPagination($event)\">\r\n <div class=\"header\">\r\n <div class=\"calendar-icon\" aria-hidden=\"true\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M16 2V6M8 2V6\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\r\n <path\r\n d=\"M13 4H11C7.22876 4 5.34315 4 4.17157 5.17157C3 6.34315 3 8.22876 3 12V14C3 17.7712 3 19.6569 4.17157 20.8284C5 22 7.22876 22 11 22H13C16.7712 22 18.6569 22 19.8284 20.8284C21 17.7712 21 14V12C21 8.22876 19.8284 5.17157 19.8284 5.17157C4 4 13 4 13 4Z\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\" />\r\n <path d=\"M3 10H21\" stroke=\"currentColor\" stroke-width=\"1.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"header-copy\">\r\n <div class=\"header-title\">Date range</div>\r\n <div class=\"header-value\">{{ calendarHeader }}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"sub-header\">\r\n <button type=\"button\" class=\"nav-button\" id=\"prev\" (click)=\"previous()\" aria-label=\"Previous\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"\r\n config.previousButtonTemplate || defaultPreviousBTNTemplate\r\n \"></ng-template>\r\n </button>\r\n\r\n <button type=\"button\" class=\"current-date\" (click)=\"changeView('month')\">\r\n <span>{{ displayMonth }}</span>\r\n <span>{{ currYear }}</span>\r\n </button>\r\n\r\n <button type=\"button\" class=\"nav-button\" id=\"next\" (click)=\"next()\" aria-label=\"Next\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"config.nextButtonTemplate || defaultNextBTNTemplate\"></ng-template>\r\n </button>\r\n </div>\r\n\r\n <div class=\"calendar\">\r\n @if (view === 'day') {\r\n <ul class=\"weeks\">\r\n @for (w of weekDays; track $index) {\r\n <li [title]=\"w.name\">{{ w.min }}</li>\r\n }\r\n </ul>\r\n\r\n <ul class=\"days\">\r\n @for (item of viewDays; track $index) {\r\n <li\r\n [class.de-active]=\"!item.active\"\r\n [class.today]=\"item.isToday\"\r\n [class.in-range]=\"item.inRange\"\r\n [class.in-range-preview]=\"item.inRangePreview\"\r\n [class.range-start]=\"item.rangeStart\"\r\n [class.range-end]=\"item.rangeEnd\"\r\n [class.range-single]=\"item.rangeStart && item.rangeEnd\"\r\n (mouseenter)=\"onDayEnter(item)\"\r\n (mouseleave)=\"onDayLeave()\"\r\n (click)=\"selectDay($event, item)\"\r\n [attr.aria-selected]=\"\r\n item.rangeStart || item.rangeEnd || item.inRange || item.inRangePreview\r\n \">\r\n <span class=\"day-number\">{{ item.day }}</span>\r\n </li>\r\n }\r\n </ul>\r\n } @else if (view === 'month') {\r\n <ul class=\"months\">\r\n @for (item of viewMonths; track $index; let i = $index) {\r\n <li\r\n [class.de-active]=\"!item.active\"\r\n [class.today]=\"item.isToday\"\r\n [class.selected]=\"item.selected\"\r\n (click)=\"selectMonth($event, item)\">\r\n {{ i + 1 }}.{{ item.displayMonth }}\r\n </li>\r\n }\r\n </ul>\r\n } @else {\r\n <ul class=\"years\">\r\n @for (item of viewYears; track $index) {\r\n <li\r\n [class.de-active]=\"!item.active\"\r\n [class.today]=\"item.isToday\"\r\n [class.selected]=\"item.selected\"\r\n (click)=\"selectYear($event, item)\">\r\n {{ item.year }}\r\n </li>\r\n }\r\n </ul>\r\n }\r\n\r\n <div class=\"calendar-footer\">\r\n @if (config.clearButton) {\r\n <button type=\"button\" (click)=\"clear()\">{{ localize().clear }}</button>\r\n }\r\n @if (config.todayButton) {\r\n <button type=\"button\" (click)=\"gotoToday()\">{{ localize().today }}</button>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #defaultPreviousBTNTemplate>\r\n <svg width=\"14\" height=\"28\" viewBox=\"0 0 320 512\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M224 480c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25l192-192c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25L77.25 256l169.4 169.4c12.5 12.5 12.5 32.75 0 45.25C240.4 476.9 232.2 480 224 480z\" />\r\n </svg>\r\n</ng-template>\r\n\r\n<ng-template #defaultNextBTNTemplate>\r\n <svg width=\"14\" height=\"28\" viewBox=\"0 0 320 512\">\r\n <path\r\n fill=\"currentColor\"\r\n d=\"M96 480c-8.188 0-16.38-3.125-22.62-9.375L73.38 86.63c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l192 192c12.5 12.5 12.5 32.75 0 45.25l-192 192C112.4 476.9 104.2 480 96 480z\" />\r\n </svg>\r\n</ng-template>\r\n","import {\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n HostListener,\r\n inject,\r\n Input,\r\n Output,\r\n Renderer2,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n NG_VALIDATORS,\r\n NG_VALUE_ACCESSOR,\r\n ValidationErrors,\r\n Validator,\r\n} from '@angular/forms';\r\nimport { OverlayRef, OverlayService } from 'ngx-kit/shared';\r\nimport { DateAdapterRegistry } from '../adapters/date-adapter-registry';\r\nimport { NgxDateRange } from '../models/range';\r\nimport { NgxDatePickerConfig } from '../components/config';\r\nimport { NgxDateRangePickerComponent } from '../components/date-range-picker/ngx-date-range-picker.component';\r\nimport { compareDate, deserialize } from '../helpers/date.helper';\r\nimport { normalizeDateRange } from '../helpers/date-range.helper';\r\nimport { IDateAdapter } from '../adapters/IAdapter';\r\n\r\n@Directive({\r\n selector: 'input[ngxInputDateRangePicker]',\r\n exportAs: 'ngxInputDateRangePicker',\r\n host: {\r\n class: 'ngx-datepicker-input',\r\n '[attr.readOnly]': 'true',\r\n },\r\n providers: [\r\n DateAdapterRegistry,\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => NgxInputDateRangePicker),\r\n multi: true,\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => NgxInputDateRangePicker),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class NgxInputDateRangePicker implements ControlValueAccessor, Validator {\r\n protected readonly dateAdapterRegistry = inject(DateAdapterRegistry);\r\n protected readonly overlayService = inject(OverlayService);\r\n protected readonly viewContainerRef = inject(ViewContainerRef);\r\n protected readonly renderer = inject(Renderer2);\r\n\r\n @Input() openOnClick = true;\r\n @Input() displayFormat = 'yyyy/MM/dd';\r\n @Input() rangeSeparator = ' – ';\r\n private _locale = 'en';\r\n @Input()\r\n set locale(value: string) {\r\n this._locale = value || 'en';\r\n this.adapter = this.dateAdapterRegistry.resolve(this._locale);\r\n this.formatValue();\r\n }\r\n get locale() {\r\n return this._locale;\r\n }\r\n\r\n @Input('min') set setMin(value: Date | null | undefined) {\r\n this.min = deserialize(value);\r\n this._validatorOnChange();\r\n }\r\n\r\n @Input('max') set setMax(value: Date | null | undefined) {\r\n this.max = deserialize(value);\r\n this._validatorOnChange();\r\n }\r\n\r\n @Input() config = new NgxDatePickerConfig();\r\n @Output() change = new EventEmitter<NgxDateRange<Date>>();\r\n\r\n private min: Date | null = null;\r\n private max: Date | null = null;\r\n private value: NgxDateRange<Date> = { start: null, end: null };\r\n private pickerRef?: OverlayRef<NgxDateRangePickerComponent>;\r\n private isDisabled = false;\r\n private adapter!: IDateAdapter;\r\n\r\n private _onChange = (_value: NgxDateRange<Date>) => {};\r\n private _onTouched = () => {};\r\n private _validatorOnChange = () => {};\r\n\r\n constructor(private readonly el: ElementRef<HTMLInputElement>) {\r\n this.adapter = this.dateAdapterRegistry.resolve(this.locale);\r\n }\r\n\r\n ngOnChanges(): void {\r\n this.adapter = this.dateAdapterRegistry.resolve(this.locale);\r\n this.formatValue();\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(event: Event) {\r\n if (!this.openOnClick || this.isDisabled) return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.toggle();\r\n }\r\n\r\n @HostListener('blur')\r\n onBlur() {\r\n this._onTouched();\r\n }\r\n\r\n writeValue(value: NgxDateRange<Date> | readonly [Date | null, Date | null] | null): void {\r\n this.value = normalizeDateRange(value);\r\n this.formatValue();\r\n }\r\n\r\n registerOnChange(fn: (value: NgxDateRange<Date>) => void): void {\r\n this._onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this._validatorOnChange = fn;\r\n }\r\n\r\n setDisabledState(disabled: boolean): void {\r\n this.isDisabled = disabled;\r\n this.renderer.setProperty(this.el.nativeElement, 'disabled', disabled);\r\n }\r\n\r\n toggle() {\r\n if (this.isDisabled) return;\r\n\r\n if (this.pickerRef) {\r\n this.destroyDatePicker();\r\n return;\r\n }\r\n\r\n this.adapter = this.dateAdapterRegistry.resolve(this.locale);\r\n\r\n this.pickerRef = this.overlayService.open({\r\n anchor: this.el.nativeElement,\r\n component: NgxDateRangePickerComponent,\r\n viewContainerRef: this.viewContainerRef,\r\n alignment: 'center',\r\n placement: 'bottom',\r\n margin: 4,\r\n configure: (instance) => {\r\n instance.locale = this.locale;\r\n instance.min = this.min;\r\n instance.max = this.max;\r\n instance.updateConfig(this.config);\r\n instance.writeValue(this.value);\r\n\r\n instance.rangeChange.subscribe((value) => {\r\n this.value = normalizeDateRange(value);\r\n this.formatValue();\r\n this._onChange(this.value);\r\n this.change.emit(this.value);\r\n\r\n if (this.value.start && this.value.end) {\r\n this._onTouched();\r\n this.destroyDatePicker();\r\n }\r\n });\r\n },\r\n onClosed: () => {\r\n this.pickerRef = undefined;\r\n },\r\n });\r\n }\r\n\r\n validate(_control: AbstractControl): ValidationErrors | null {\r\n const { start, end } = this.value;\r\n\r\n if (start && this.min && compareDate(start, this.min) < 0) {\r\n return { min: this.min };\r\n }\r\n if (end && this.max && compareDate(end, this.max) > 0) {\r\n return { max: this.max };\r\n }\r\n if (start && end && compareDate(start, end) > 0) {\r\n return { range: true };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private formatValue() {\r\n const start = this.value.start;\r\n const end = this.value.end;\r\n\r\n const format = (value: Date | null) => {\r\n if (!value) return '';\r\n const locale = this.adapter.toLocale(value);\r\n return this.adapter.formatDate(locale, this.displayFormat) ?? '';\r\n };\r\n\r\n const startText = format(start);\r\n const endText = format(end);\r\n const value = startText && endText\r\n ? `${startText}${this.rangeSeparator}${endText}`\r\n : startText;\r\n\r\n this.renderer.setProperty(this.el.nativeElement, 'value', value);\r\n }\r\n\r\n private destroyDatePicker() {\r\n this.pickerRef?.close();\r\n this.pickerRef = undefined;\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|