nxt-pick-datetime 21.0.0 → 22.0.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.
@@ -1 +1 @@
1
- {"version":3,"file":"nxt-pick-datetime.mjs","sources":["../../../packages/pick-datetime/src/lib/class/date-time-adapter.class.ts","../../../packages/pick-datetime/src/lib/class/date-time-format.class.ts","../../../packages/pick-datetime/src/lib/date-time/calendar-body/calendar-body.component.ts","../../../packages/pick-datetime/src/lib/date-time/calendar-body/calendar-body.component.html","../../../packages/pick-datetime/src/lib/date-time/calendar-month-view/calendar-month-view.component.ts","../../../packages/pick-datetime/src/lib/date-time/calendar-month-view/calendar-month-view.component.html","../../../packages/pick-datetime/src/lib/date-time/date-time-picker-intl.service.ts","../../../packages/pick-datetime/src/lib/date-time/calendar-multi-year-view/calendar-multi-year-view.component.ts","../../../packages/pick-datetime/src/lib/date-time/calendar-multi-year-view/calendar-multi-year-view.component.html","../../../packages/pick-datetime/src/lib/date-time/calendar-year-view/calendar-year-view.component.ts","../../../packages/pick-datetime/src/lib/date-time/calendar-year-view/calendar-year-view.component.html","../../../packages/pick-datetime/src/lib/date-time/calendar/calendar.component.ts","../../../packages/pick-datetime/src/lib/date-time/calendar/calendar.component.html","../../../packages/pick-datetime/src/lib/class/date-time.class.ts","../../../packages/pick-datetime/src/lib/date-time/number-fixed-len.pipe.ts","../../../packages/pick-datetime/src/lib/date-time/timer-box/timer-box.component.ts","../../../packages/pick-datetime/src/lib/date-time/timer-box/timer-box.component.html","../../../packages/pick-datetime/src/lib/date-time/timer/timer.component.ts","../../../packages/pick-datetime/src/lib/date-time/timer/timer.component.html","../../../packages/pick-datetime/src/lib/date-time/date-time-picker-container/date-time-picker-container.animations.ts","../../../packages/pick-datetime/src/lib/date-time/date-time-picker-container/date-time-picker-container.component.ts","../../../packages/pick-datetime/src/lib/date-time/date-time-picker-container/date-time-picker-container.component.html","../../../packages/pick-datetime/src/lib/date-time/date-time-inline/date-time-inline.component.ts","../../../packages/pick-datetime/src/lib/date-time/date-time-inline/date-time-inline.component.html","../../../packages/pick-datetime/src/lib/date-time/date-time-picker-input.directive.ts","../../../packages/pick-datetime/src/lib/date-time/date-time-picker-trigger.directive.ts","../../../packages/pick-datetime/src/lib/class/dialog-config.class.ts","../../../packages/pick-datetime/src/lib/class/dialog-ref.class.ts","../../../packages/pick-datetime/src/lib/utils/object.ts","../../../packages/pick-datetime/src/lib/dialog/dialog-container/dialog-container.component.ts","../../../packages/pick-datetime/src/lib/dialog/dialog-container/dialog-container.component.html","../../../packages/pick-datetime/src/lib/dialog/dialog.service.ts","../../../packages/pick-datetime/src/lib/date-time/date-time-picker/date-time-picker.component.ts","../../../packages/pick-datetime/src/lib/date-time/date-time-picker/date-time-picker.component.html","../../../packages/pick-datetime/src/lib/date-time/date-time.module.ts","../../../packages/pick-datetime/src/nxt-pick-datetime.ts"],"sourcesContent":["import { signal } from '@angular/core'\r\n\r\nexport abstract class DateTimeAdapter<T> {\r\n /** The locale to use for all dates */\r\n protected readonly locale = signal<any>(undefined)\r\n\r\n /** total milliseconds in a day */\r\n protected readonly millisecondsInDay = 86400000\r\n\r\n /** total milliseconds in a minute */\r\n protected readonly milliseondsInMinute = 60000\r\n\r\n /**\r\n * Get the year of the given date\r\n */\r\n abstract getYear(date?: T): number\r\n\r\n /**\r\n * Get the month of the given date\r\n * 0 -- January\r\n * 11 -- December\r\n * */\r\n abstract getMonth(date?: T): number\r\n\r\n /**\r\n * Get the day of the week of the given date\r\n * 0 -- Sunday\r\n * 6 -- Saturday\r\n * */\r\n abstract getDay(date?: T): number\r\n\r\n /**\r\n * Get the day num of the given date\r\n */\r\n abstract getDate(date?: T): number\r\n\r\n /**\r\n * Get the hours of the given date\r\n */\r\n abstract getHours(date?: T): number\r\n\r\n /**\r\n * Get the minutes of the given date\r\n */\r\n abstract getMinutes(date?: T): number\r\n\r\n /**\r\n * Get the seconds of the given date\r\n */\r\n abstract getSeconds(date?: T): number\r\n\r\n /**\r\n * Get the milliseconds timestamp of the given date\r\n */\r\n abstract getTime(date?: T): number\r\n\r\n /**\r\n * Gets the number of days in the month of the given date.\r\n */\r\n abstract getNumDaysInMonth(date?: T): number\r\n\r\n /**\r\n * Get the number of calendar days between the given dates.\r\n * If dateLeft is before dateRight, it would return positive value\r\n * If dateLeft is after dateRight, it would return negative value\r\n */\r\n abstract differenceInCalendarDays(dateLeft?: T, dateRight?: T): number | undefined\r\n\r\n /**\r\n * Gets the name for the year of the given date.\r\n */\r\n abstract getYearName(date?: T): string\r\n\r\n /**\r\n * Get a list of month names\r\n */\r\n abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[]\r\n\r\n /**\r\n * Get a list of week names\r\n */\r\n abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[]\r\n\r\n /**\r\n * Gets a list of names for the dates of the month.\r\n */\r\n abstract getDateNames(): string[]\r\n\r\n /**\r\n * Return a Date object as a string, using the ISO standard\r\n */\r\n abstract toIso8601(date: T): string\r\n\r\n /**\r\n * Check if the give dates are equal\r\n */\r\n abstract isEqual(dateLeft?: T, dateRight?: T): boolean\r\n\r\n /**\r\n * Check if the give dates are the same day\r\n */\r\n abstract isSameDay(dateLeft?: T, dateRight?: T): boolean\r\n\r\n /**\r\n * Checks whether the given date is valid.\r\n */\r\n abstract isValid(date?: T): boolean\r\n\r\n /**\r\n * Gets date instance that is not valid.\r\n */\r\n abstract invalid(): T\r\n\r\n /**\r\n * Checks whether the given object is considered a date instance by this DateTimeAdapter.\r\n */\r\n abstract isDateInstance(obj: any): boolean\r\n\r\n /**\r\n * Add the specified number of years to the given date\r\n */\r\n abstract addCalendarYears(date: T | undefined, amount: number): T\r\n\r\n /**\r\n * Add the specified number of months to the given date\r\n */\r\n abstract addCalendarMonths(date: T | undefined, amount: number): T\r\n\r\n /**\r\n * Add the specified number of days to the given date\r\n */\r\n abstract addCalendarDays(date: T | undefined, amount: number): T\r\n\r\n /**\r\n * Set the hours to the given date.\r\n */\r\n abstract setHours(date: T | undefined, amount: number): T\r\n\r\n /**\r\n * Set the minutes to the given date.\r\n */\r\n abstract setMinutes(date: T | undefined, amount: number): T\r\n\r\n /**\r\n * Set the seconds to the given date.\r\n */\r\n abstract setSeconds(date: T | undefined, amount: number): T\r\n\r\n /**\r\n * Creates a date with the given year, month, date, hour, minute and second. Does not allow over/under-flow of the\r\n * month and date.\r\n */\r\n abstract createDate(year: number, month: number, date: number): T\r\n abstract createDate(\r\n year: number,\r\n month: number,\r\n date: number,\r\n hours: number,\r\n minutes: number,\r\n seconds: number\r\n ): T\r\n\r\n /**\r\n * Clone the given date\r\n */\r\n abstract clone(date?: T): T\r\n\r\n /**\r\n * Get a new moment\r\n * */\r\n abstract now(): T\r\n\r\n /**\r\n * Formats a date as a string according to the given format.\r\n */\r\n abstract format(date: T | undefined, displayFormat: any): string\r\n\r\n /**\r\n * Parse a user-provided value to a Date Object\r\n */\r\n abstract parse(value: any, parseFormat: any): T | undefined\r\n\r\n /**\r\n * Compare two given dates\r\n * 1 if the first date is after the second,\r\n * -1 if the first date is before the second\r\n * 0 if dates are equal.\r\n * */\r\n compare(first?: T, second?: T): number {\r\n if (!this.isValid(first) || !this.isValid(second)) {\r\n throw Error('JSNativeDate: Cannot compare invalid dates.')\r\n }\r\n\r\n const dateFirst = this.clone(first)\r\n const dateSecond = this.clone(second)\r\n\r\n const diff = this.getTime(dateFirst) - this.getTime(dateSecond)\r\n\r\n if (diff < 0) {\r\n return -1\r\n } else if (diff > 0) {\r\n return 1\r\n } else {\r\n // Return 0 if diff is 0; return NaN if diff is NaN\r\n return diff\r\n }\r\n }\r\n\r\n /**\r\n * Check if two given dates are in the same year\r\n * 1 if the first date's year is after the second,\r\n * -1 if the first date's year is before the second\r\n * 0 if two given dates are in the same year\r\n * */\r\n compareYear(first?: T, second?: T): number {\r\n if (!this.isValid(first) || !this.isValid(second)) {\r\n throw Error('JSNativeDate: Cannot compare invalid dates.')\r\n }\r\n\r\n const yearLeft = this.getYear(first)\r\n const yearRight = this.getYear(second)\r\n\r\n const diff = yearLeft - yearRight\r\n\r\n if (diff < 0) {\r\n return -1\r\n } else if (diff > 0) {\r\n return 1\r\n } else {\r\n return 0\r\n }\r\n }\r\n\r\n /**\r\n * Attempts to deserialize a value to a valid date object. This is different from parsing in that\r\n * deserialize should only accept non-ambiguous, locale-independent formats (e.g. a ISO 8601\r\n * string). The default implementation does not allow any deserialization, it simply checks that\r\n * the given value is already a valid date object or null. The `<mat-datepicker>` will call this\r\n * method on all of it's `input` properties that accept dates. It is therefore possible to\r\n * support passing values from your backend directly to these properties by overriding this method\r\n * to also deserialize the format used by your backend.\r\n */\r\n deserialize(value: any): T | undefined {\r\n if (\r\n value == null || value == undefined ||\r\n (this.isDateInstance(value) && this.isValid(value))\r\n ) {\r\n return value\r\n }\r\n return this.invalid()\r\n }\r\n\r\n /**\r\n * Sets the locale used for all dates.\r\n */\r\n setLocale(locale: any) {\r\n this.locale.set(locale)\r\n }\r\n\r\n /**\r\n * Clamp the given date between min and max dates.\r\n */\r\n clampDate(date: T, min?: T, max?: T): T {\r\n if (min && this.compare(date, min) < 0) {\r\n return min\r\n }\r\n if (max && this.compare(date, max) > 0) {\r\n return max\r\n }\r\n return date\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core'\r\n\r\nexport interface DateTimeFormats {\r\n parseInput: any\r\n fullPickerInput: any\r\n datePickerInput: any\r\n timePickerInput: any\r\n monthYearLabel: any\r\n dateA11yLabel: any\r\n monthYearA11yLabel: any\r\n}\r\n\r\n/** InjectionToken for date time picker that can be used to override default format */\r\nexport const NXT_DATE_TIME_FORMATS = new InjectionToken<DateTimeFormats>('NXT_DATE_TIME_FORMATS')\r\n","import { Component, ElementRef, NgZone, computed, input, output, inject } from '@angular/core'\r\nimport { take } from 'rxjs/operators'\r\nimport { SelectMode } from '../../class/date-time.class'\r\n\r\nexport class CalendarCell {\r\n constructor(\r\n public value: number,\r\n public displayValue: string,\r\n public ariaLabel: string,\r\n public enabled: boolean,\r\n public out: boolean = false,\r\n public cellClass: string = ''\r\n ) { }\r\n}\r\n\r\n/** @internal */\r\n@Component({\r\n // eslint-disable-next-line @angular-eslint/component-selector\r\n selector: '[nxtDateTimeCalendarBody]',\r\n exportAs: 'nxtDateTimeCalendarBody',\r\n templateUrl: './calendar-body.component.html',\r\n styleUrls: ['./calendar-body.component.scss'],\r\n preserveWhitespaces: false,\r\n host: {\r\n '[class.nxt-dt-calendar-body]': 'true'\r\n }\r\n\r\n})\r\nexport class CalendarBodyComponent {\r\n private readonly elmRef = inject<ElementRef<HTMLElement>>(ElementRef)\r\n private readonly ngZone = inject(NgZone)\r\n\r\n /**\r\n * The cell number of the active cell in the table.\r\n */\r\n readonly activeCell = input<number>(0)\r\n\r\n /**\r\n * The cells to display in the table.\r\n */\r\n readonly rows = input<CalendarCell[][]>()\r\n\r\n /**\r\n * The number of columns in the table.\r\n */\r\n readonly numCols = input<number>(7)\r\n\r\n /**\r\n * The ratio (width / height) to use for the cells in the table.\r\n */\r\n readonly cellRatio = input<number>(1)\r\n\r\n /**\r\n * The value in the table that corresponds to today.\r\n */\r\n readonly todayValue = input<number>()\r\n\r\n /**\r\n * The value in the table that is currently selected.\r\n */\r\n readonly selectedValues = input<Array<number | undefined>>()\r\n\r\n /**\r\n * Current picker select mode\r\n */\r\n readonly selectMode = input<SelectMode>()\r\n\r\n /**\r\n * Emit when a calendar cell is selected\r\n */\r\n readonly select = output<CalendarCell>()\r\n\r\n readonly isInSingleMode = computed(() => this.selectMode() === 'single')\r\n\r\n readonly isInRangeMode = computed(() => {\r\n const selectMode = this.selectMode()\r\n return (\r\n selectMode === 'range' ||\r\n selectMode === 'rangeFrom' ||\r\n selectMode === 'rangeTo'\r\n )\r\n })\r\n\r\n selectCell(cell: CalendarCell): void {\r\n this.select.emit(cell)\r\n }\r\n\r\n isActiveCell(rowIndex: number, colIndex: number): boolean {\r\n const cellNumber = rowIndex * this.numCols() + colIndex\r\n return cellNumber === this.activeCell()\r\n }\r\n\r\n /**\r\n * Check if the cell is selected\r\n */\r\n isSelected(value: number): boolean {\r\n const selectedValues = this.selectedValues()\r\n if (!selectedValues || selectedValues.length === 0) {\r\n return false\r\n }\r\n\r\n if (this.isInSingleMode()) {\r\n return value === selectedValues[0]\r\n }\r\n\r\n if (this.isInRangeMode()) {\r\n const fromValue = selectedValues[0]\r\n const toValue = selectedValues[1]\r\n\r\n return value === fromValue || value === toValue\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * Check if the cell in the range\r\n */\r\n isInRange(value: number): boolean {\r\n if (this.isInRangeMode()) {\r\n const selectedValues = this.selectedValues()\r\n const fromValue = selectedValues?.[0]\r\n const toValue = selectedValues?.[1]\r\n\r\n if (fromValue !== undefined && toValue !== undefined) {\r\n return value >= fromValue && value <= toValue\r\n } else {\r\n return value === fromValue || value === toValue\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * Check if the cell is the range from\r\n */\r\n isRangeFrom(value: number): boolean {\r\n if (this.isInRangeMode()) {\r\n const fromValue = this.selectedValues()?.[0]\r\n return fromValue !== undefined && value === fromValue\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * Check if the cell is the range to\r\n */\r\n isRangeTo(value: number): boolean {\r\n if (this.isInRangeMode()) {\r\n const toValue = this.selectedValues()?.[1]\r\n return toValue !== undefined && value === toValue\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * Focus to a active cell\r\n */\r\n focusActiveCell(): void {\r\n this.ngZone.runOutsideAngular(() => {\r\n this.ngZone.onStable\r\n .asObservable()\r\n .pipe(take(1))\r\n .subscribe(() => {\r\n this.elmRef.nativeElement\r\n ?.querySelector<HTMLElement>('.nxt-dt-calendar-cell-active')\r\n ?.focus()\r\n })\r\n })\r\n }\r\n}\r\n","@for (row of rows(); track rowIndex; let rowIndex = $index) {\r\n<tr role=\"row\">\r\n @for (item of row; track colIndex; let colIndex = $index) {\r\n <td class=\"nxt-dt-calendar-cell {{item.cellClass}}\"\r\n [tabindex]=\"isActiveCell(rowIndex, colIndex) ? 0 : -1\"\r\n [class.nxt-dt-calendar-cell-active]=\"isActiveCell(rowIndex, colIndex)\"\r\n [class.nxt-dt-calendar-cell-disabled]=\"!item.enabled\"\r\n [class.nxt-dt-calendar-cell-in-range]=\"isInRange(item.value)\"\r\n [class.nxt-dt-calendar-cell-range-from]=\"isRangeFrom(item.value)\"\r\n [class.nxt-dt-calendar-cell-range-from-long]=\"isInRange(item.value + 7)\"\r\n [class.nxt-dt-calendar-cell-range-to]=\"isRangeTo(item.value)\"\r\n [class.nxt-dt-calendar-cell-range-to-long]=\"isInRange(item.value - 7)\"\r\n [attr.aria-label]=\"item.ariaLabel\"\r\n [attr.aria-disabled]=\"!item.enabled || null\"\r\n [style.width.%]=\"100 / numCols()\"\r\n [style.paddingTop.%]=\"50 * cellRatio() / numCols()\"\r\n [style.paddingBottom.%]=\"50 * cellRatio() / numCols()\"\r\n (click)=\"selectCell(item)\">\r\n <span class=\"nxt-dt-calendar-cell-content\"\r\n [class]=\"{\r\n 'nxt-dt-calendar-cell-out': item.out,\r\n 'nxt-dt-calendar-cell-today': item.value === todayValue(),\r\n 'nxt-dt-calendar-cell-selected': isSelected(item.value)\r\n }\">\r\n {{item.displayValue}}\r\n </span>\r\n </td>\r\n }\r\n</tr>\r\n}\r\n","import { Component, input, viewChild, output, linkedSignal, computed, inject } from '@angular/core'\r\nimport { DateTimeAdapter } from '../../class/date-time-adapter.class'\r\nimport { DateTimeFormats, NXT_DATE_TIME_FORMATS } from '../../class/date-time-format.class'\r\nimport { DateFilter, SelectMode } from '../../class/date-time.class'\r\nimport { CalendarBodyComponent, CalendarCell } from '../calendar-body/calendar-body.component'\r\n\r\n/** @internal */\r\nconst DAYS_PER_WEEK = 7\r\n\r\n/** @internal */\r\nconst WEEKS_PER_VIEW = 6\r\n\r\n@Component({\r\n selector: 'nxt-date-time-month-view',\r\n templateUrl: './calendar-month-view.component.html',\r\n styleUrls: ['./calendar-month-view.component.scss'],\r\n preserveWhitespaces: false,\r\n imports: [\r\n CalendarBodyComponent\r\n ],\r\n host: {\r\n '[class.nxt-dt-calendar-view]': 'true'\r\n }\r\n})\r\nexport class MonthViewComponent<T> {\r\n private readonly dateTimeAdapter = inject<DateTimeAdapter<T>>(DateTimeAdapter)\r\n private readonly dateTimeFormats = inject<DateTimeFormats>(NXT_DATE_TIME_FORMATS)\r\n\r\n /**\r\n * Whether to hide dates in other months at the start or end of the current month\r\n */\r\n readonly hideOtherMonths = input<boolean>(false)\r\n\r\n private _firstDayOfWeek = 0\r\n /**\r\n * Define the first day of a week\r\n * Sunday: 0 ~ Saturday: 6\r\n */\r\n readonly firstDayOfWeek = input<number, number>(this._firstDayOfWeek, {\r\n transform: (val) => {\r\n if (val >= 0 && val <= 6 && val !== this._firstDayOfWeek) {\r\n return this._firstDayOfWeek = val\r\n }\r\n return this._firstDayOfWeek\r\n }\r\n })\r\n\r\n /**\r\n * The select mode of the picker;\r\n */\r\n readonly selectMode = input<SelectMode>('single')\r\n\r\n /** The currently selected date */\r\n readonly selected = input<T | undefined, T | undefined>(undefined, {\r\n transform: value => {\r\n value = this.dateTimeAdapter.deserialize(value)\r\n return this.getValidDate(value)\r\n }\r\n })\r\n\r\n readonly selecteds = input<Array<T | undefined>, Array<T | undefined>>([], {\r\n transform: values => values.map(v => {\r\n v = this.dateTimeAdapter.deserialize(v)\r\n return this.getValidDate(v)\r\n })\r\n })\r\n\r\n readonly pickerMoment = input<T | undefined, T | undefined>(undefined, {\r\n transform: value => {\r\n value = this.dateTimeAdapter.deserialize(value)\r\n return this.getValidDate(value) || this.dateTimeAdapter.now()\r\n }\r\n })\r\n\r\n /**\r\n * A function used to filter which dates are selectable\r\n */\r\n readonly dateTimeFilter = input<DateFilter<T>>()\r\n\r\n /** The minimum selectable date */\r\n readonly min = input<T | undefined, T | undefined>(undefined, {\r\n transform: value => {\r\n value = this.dateTimeAdapter.deserialize(value)\r\n return this.getValidDate(value)\r\n }\r\n })\r\n\r\n /** The maximum selectable date */\r\n readonly max = input<T | undefined, T | undefined>(undefined, {\r\n transform: value => {\r\n value = this.dateTimeAdapter.deserialize(value)\r\n return this.getValidDate(value)\r\n }\r\n })\r\n\r\n readonly weekdays = computed(() => {\r\n const longWeekdays = this.dateTimeAdapter.getDayOfWeekNames('long')\r\n const shortWeekdays = this.dateTimeAdapter.getDayOfWeekNames('short')\r\n const narrowWeekdays = this.dateTimeAdapter.getDayOfWeekNames('narrow')\r\n const firstDayOfWeek = this.firstDayOfWeek()\r\n\r\n const weekdays = longWeekdays.map((long, i) => ({ long, short: shortWeekdays[i], narrow: narrowWeekdays[i] }))\r\n\r\n return weekdays\r\n .slice(firstDayOfWeek)\r\n .concat(weekdays.slice(0, firstDayOfWeek))\r\n })\r\n\r\n readonly _daysData = computed(() => {\r\n if (!this.pickerMoment()) {\r\n return\r\n }\r\n\r\n let todayDate: number | undefined\r\n\r\n // the first weekday of the month\r\n const startWeekdayOfMonth = this.dateTimeAdapter.getDay(\r\n this.firstDateOfMonth()\r\n )\r\n const firstDayOfWeek = this.firstDayOfWeek()\r\n\r\n // the amount of days from the first date of the month\r\n // if it is < 0, it means the date is in previous month\r\n let daysDiff =\r\n 0 -\r\n ((startWeekdayOfMonth + (DAYS_PER_WEEK - firstDayOfWeek)) %\r\n DAYS_PER_WEEK)\r\n\r\n // the index of cell that contains the first date of the month\r\n const firstRowOffset = Math.abs(daysDiff)\r\n\r\n const days: CalendarCell[][] = []\r\n for (let i = 0; i < WEEKS_PER_VIEW; i++) {\r\n const week = []\r\n for (let j = 0; j < DAYS_PER_WEEK; j++) {\r\n const date = this.dateTimeAdapter.addCalendarDays(\r\n this.firstDateOfMonth(),\r\n daysDiff\r\n )\r\n const dateCell = this.createDateCell(date, daysDiff)\r\n\r\n // check if the date is today\r\n if (\r\n this.dateTimeAdapter.isSameDay(\r\n this.dateTimeAdapter.now(),\r\n date\r\n )\r\n ) {\r\n todayDate = daysDiff + 1\r\n }\r\n\r\n week.push(dateCell)\r\n daysDiff += 1\r\n }\r\n days.push(week)\r\n }\r\n return {\r\n days,\r\n todayDate,\r\n firstRowOffset\r\n }\r\n })\r\n\r\n private _days?: CalendarCell[][]\r\n readonly days = computed(() => {\r\n const days = this._daysData()?.days\r\n if (days != undefined)\r\n return this._days = days\r\n return this._days\r\n })\r\n\r\n readonly activeCell = computed(() => {\r\n if (this.pickerMoment()) {\r\n return (\r\n this.dateTimeAdapter.getDate(this.pickerMoment()) +\r\n this.firstRowOffset() -\r\n 1\r\n )\r\n }\r\n return\r\n })\r\n\r\n readonly isInSingleMode = computed(() => this.selectMode() === 'single')\r\n\r\n readonly isInRangeMode = computed(() => (\r\n this.selectMode() === 'range' ||\r\n this.selectMode() === 'rangeFrom' ||\r\n this.selectMode() === 'rangeTo'\r\n ))\r\n\r\n private firstDateOfMonth = linkedSignal({\r\n source: () => this.pickerMoment(),\r\n computation: (val) => this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(val),\r\n this.dateTimeAdapter.getMonth(val),\r\n 1\r\n )\r\n })\r\n\r\n private _todayDate?: number\r\n /**\r\n * The date of the month that today falls on.\r\n */\r\n readonly todayDate = computed(() => {\r\n const todayDate = this._daysData()?.todayDate\r\n if (todayDate != undefined)\r\n return this._todayDate = todayDate\r\n return this._todayDate\r\n })\r\n\r\n private _selectedDates?: Array<number | undefined>\r\n /**\r\n * An array to hold all selectedDates' value\r\n * the value is the day number in current month\r\n */\r\n readonly selectedDates = computed(() => {\r\n /**\r\n * Set the selectedDates value.\r\n * In single mode, it has only one value which represent the selected date\r\n * In range mode, it would has two values, one for the fromValue and the other for the toValue\r\n */\r\n let selectedDates = new Array<number | undefined>()\r\n\r\n if (!this.firstDateOfMonth()) {\r\n return this._selectedDates\r\n }\r\n\r\n if (this.isInSingleMode() && this.selected()) {\r\n const dayDiff = this.dateTimeAdapter.differenceInCalendarDays(\r\n this.selected(),\r\n this.firstDateOfMonth()\r\n ) ?? 0\r\n selectedDates[0] = dayDiff + 1\r\n return this._selectedDates = selectedDates\r\n }\r\n\r\n if (this.isInRangeMode() && this.selecteds()) {\r\n selectedDates = this.selecteds().map(selected => {\r\n if (this.dateTimeAdapter.isValid(selected)) {\r\n const dayDiff = this.dateTimeAdapter.differenceInCalendarDays(\r\n selected,\r\n this.firstDateOfMonth()\r\n ) ?? 0\r\n return dayDiff + 1\r\n }\r\n return\r\n })\r\n }\r\n return this._selectedDates = selectedDates\r\n })\r\n\r\n private _firstRowOffset = 0\r\n // the index of cell that contains the first date of the month\r\n readonly firstRowOffset = computed(() => {\r\n const firstRowOffset = this._daysData()?.firstRowOffset\r\n if (firstRowOffset != undefined)\r\n return this._firstRowOffset = firstRowOffset\r\n return this._firstRowOffset\r\n })\r\n\r\n /**\r\n * Callback to invoke when a new date is selected\r\n */\r\n readonly selectedChange = output<T | undefined>()\r\n\r\n /**\r\n * Callback to invoke when any date is selected.\r\n */\r\n readonly userSelection = output<void>()\r\n\r\n /** Emits when any date is activated */\r\n readonly pickerMomentChange = output<T>()\r\n\r\n /** The body of calendar table */\r\n private readonly calendarBodyElm = viewChild(CalendarBodyComponent)\r\n\r\n /**\r\n * Handle a calendarCell selected\r\n */\r\n selectCalendarCell(cell: CalendarCell): void {\r\n // Cases in which the date would not be selected\r\n // 1, the calendar cell is NOT enabled (is NOT valid)\r\n // 2, the selected date is NOT in current picker's month and the hideOtherMonths is enabled\r\n if (!cell.enabled || (this.hideOtherMonths() && cell.out)) {\r\n return\r\n }\r\n\r\n this.selectDate(cell.value)\r\n }\r\n\r\n /**\r\n * Handle a new date selected\r\n */\r\n private selectDate(date: number): void {\r\n const daysDiff = date - 1\r\n const selected = this.dateTimeAdapter.addCalendarDays(\r\n this.firstDateOfMonth(),\r\n daysDiff\r\n )\r\n\r\n this.selectedChange.emit(selected)\r\n this.userSelection.emit(undefined)\r\n }\r\n\r\n /**\r\n * Handle keydown event on calendar body\r\n */\r\n handleCalendarKeydown(event: KeyboardEvent): void {\r\n let moment\r\n switch (event.code.toLowerCase()) {\r\n // minus 1 day\r\n case 'arrowleft':\r\n moment = this.dateTimeAdapter.addCalendarDays(\r\n this.pickerMoment(),\r\n -1\r\n )\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // add 1 day\r\n case 'arrowright':\r\n moment = this.dateTimeAdapter.addCalendarDays(\r\n this.pickerMoment(),\r\n 1\r\n )\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // minus 1 week\r\n case 'arrowup':\r\n moment = this.dateTimeAdapter.addCalendarDays(\r\n this.pickerMoment(),\r\n -7\r\n )\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // add 1 week\r\n case 'arrowdown':\r\n moment = this.dateTimeAdapter.addCalendarDays(\r\n this.pickerMoment(),\r\n 7\r\n )\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // move to first day of current month\r\n case 'home':\r\n moment = this.dateTimeAdapter.addCalendarDays(\r\n this.pickerMoment(),\r\n 1 - this.dateTimeAdapter.getDate(this.pickerMoment())\r\n )\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // move to last day of current month\r\n case 'end':\r\n moment = this.dateTimeAdapter.addCalendarDays(\r\n this.pickerMoment(),\r\n this.dateTimeAdapter.getNumDaysInMonth(this.pickerMoment()) -\r\n this.dateTimeAdapter.getDate(this.pickerMoment())\r\n )\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // minus 1 month (or 1 year)\r\n case 'pageup':\r\n moment = event.altKey\r\n ? this.dateTimeAdapter.addCalendarYears(\r\n this.pickerMoment(),\r\n -1\r\n )\r\n : this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerMoment(),\r\n -1\r\n )\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // add 1 month (or 1 year)\r\n case 'pagedown':\r\n moment = event.altKey\r\n ? this.dateTimeAdapter.addCalendarYears(\r\n this.pickerMoment(),\r\n 1\r\n )\r\n : this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerMoment(),\r\n 1\r\n )\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // select the pickerMoment\r\n case 'enter':\r\n if (!this.dateTimeFilter() || this.dateTimeFilter()!(this.pickerMoment(), 'date')) {\r\n this.selectDate(\r\n this.dateTimeAdapter.getDate(this.pickerMoment())\r\n )\r\n }\r\n break\r\n default:\r\n return\r\n }\r\n\r\n this.focusActiveCell()\r\n event.preventDefault()\r\n }\r\n\r\n /**\r\n * Creates CalendarCell for days.\r\n */\r\n private createDateCell(date: T, daysDiff: number): CalendarCell {\r\n // total days of the month\r\n const daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(\r\n this.pickerMoment()\r\n )\r\n const dateNum = this.dateTimeAdapter.getDate(date)\r\n // const dateName = this.dateNames[dateNum - 1];\r\n const dateName = dateNum.toString()\r\n const ariaLabel = this.dateTimeAdapter.format(\r\n date,\r\n this.dateTimeFormats.dateA11yLabel\r\n )\r\n\r\n // check if the date if selectable\r\n const enabled = this.isDateEnabled(date)\r\n\r\n // check if date is not in current month\r\n const dayValue = daysDiff + 1\r\n const out = dayValue < 1 || dayValue > daysInMonth\r\n const cellClass = 'nxt-dt-day-' + this.dateTimeAdapter.getDay(date)\r\n\r\n return new CalendarCell(\r\n dayValue,\r\n dateName,\r\n ariaLabel,\r\n enabled,\r\n out,\r\n cellClass\r\n )\r\n }\r\n\r\n /**\r\n * Check if the date is valid\r\n */\r\n private isDateEnabled(date: T): boolean {\r\n return (\r\n !!date &&\r\n (!this.dateTimeFilter() || this.dateTimeFilter()!(date, 'date')) &&\r\n (!this.min() ||\r\n this.dateTimeAdapter.compare(date, this.min()) >= 0) &&\r\n (!this.max() ||\r\n this.dateTimeAdapter.compare(date, this.max()) <= 0)\r\n )\r\n }\r\n\r\n /**\r\n * Get a valid date object\r\n */\r\n private getValidDate(obj: any): T | undefined {\r\n return this.dateTimeAdapter.isDateInstance(obj) &&\r\n this.dateTimeAdapter.isValid(obj)\r\n ? obj\r\n : undefined\r\n }\r\n\r\n /**\r\n * Check if the give dates are defined and in the same month\r\n */\r\n isSameMonth(dateLeft?: T, dateRight?: T): boolean {\r\n return !!(\r\n dateLeft &&\r\n dateRight &&\r\n this.dateTimeAdapter.isValid(dateLeft) &&\r\n this.dateTimeAdapter.isValid(dateRight) &&\r\n this.dateTimeAdapter.getYear(dateLeft) ===\r\n this.dateTimeAdapter.getYear(dateRight) &&\r\n this.dateTimeAdapter.getMonth(dateLeft) ===\r\n this.dateTimeAdapter.getMonth(dateRight)\r\n )\r\n }\r\n\r\n private focusActiveCell() {\r\n this.calendarBodyElm()?.focusActiveCell()\r\n }\r\n}\r\n","<table class=\"nxt-dt-calendar-table nxt-dt-calendar-month-table\"\r\n [class.nxt-dt-calendar-only-current-month]=\"hideOtherMonths()\">\r\n <thead class=\"nxt-dt-calendar-header\">\r\n <tr class=\"nxt-dt-weekdays\">\r\n @for (weekday of weekdays(); track weekday.long) {\r\n <th [attr.aria-label]=\"weekday.long\"\r\n class=\"nxt-dt-weekday\"\r\n scope=\"col\">\r\n <span>{{weekday.short}}</span>\r\n </th>\r\n }\r\n </tr>\r\n <tr>\r\n <th class=\"nxt-dt-calendar-table-divider\"\r\n aria-hidden=\"true\"\r\n colspan=\"7\"></th>\r\n </tr>\r\n </thead>\r\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n <tbody nxtDateTimeCalendarBody\r\n role=\"grid\"\r\n [rows]=\"days()\"\r\n [todayValue]=\"todayDate()\"\r\n [selectedValues]=\"selectedDates()\"\r\n [selectMode]=\"selectMode()\"\r\n [activeCell]=\"activeCell() ?? 0\"\r\n (keydown)=\"handleCalendarKeydown($event)\"\r\n (select)=\"selectCalendarCell($event)\">\r\n </tbody>\r\n</table>\r\n","import { Injectable, signal } from '@angular/core'\r\nimport { LocalizeFn } from '@angular/localize/init'\r\n\r\n/** @internal */\r\ndeclare const $localize: LocalizeFn\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DateTimeIntl {\r\n\r\n /** A label for the up second button (used by screen readers). */\r\n readonly upSecondLabel = signal($localize`:@@nxt-pick-datetime.up-second:Add a second`)\r\n\r\n /** A label for the down second button (used by screen readers). */\r\n readonly downSecondLabel = signal($localize`:@@nxt-pick-datetime.down-second:Minus a second`)\r\n\r\n /** A label for the up minute button (used by screen readers). */\r\n readonly upMinuteLabel = signal($localize`:@@nxt-pick-datetime.up-minute:Add a minute`)\r\n\r\n /** A label for the down minute button (used by screen readers). */\r\n readonly downMinuteLabel = signal($localize`:@@nxt-pick-datetime.down-minute:Minus a minute`)\r\n\r\n /** A label for the up hour button (used by screen readers). */\r\n readonly upHourLabel = signal($localize`:@@nxt-pick-datetime.up-hour:Add a hour`)\r\n\r\n /** A label for the down hour button (used by screen readers). */\r\n readonly downHourLabel = signal($localize`:@@nxt-pick-datetime.down-hour:Minus a hour`)\r\n\r\n /** A label for the previous month button (used by screen readers) */\r\n readonly prevMonthLabel = signal($localize`:@@nxt-pick-datetime.prev-month:Previous month`)\r\n\r\n /** A label for the next month button (used by screen readers) */\r\n readonly nextMonthLabel = signal($localize`:@@nxt-pick-datetime.next-month:Next month`)\r\n\r\n /** A label for the previous year button (used by screen readers) */\r\n readonly prevYearLabel = signal($localize`:@@nxt-pick-datetime.prev-year:Previous year`)\r\n\r\n /** A label for the next year button (used by screen readers) */\r\n readonly nextYearLabel = signal($localize`:@@nxt-pick-datetime.next-year:Next year`)\r\n\r\n /** A label for the previous multi-year button (used by screen readers) */\r\n readonly prevMultiYearLabel = signal($localize`:@@nxt-pick-datetime.prev-multi-year:Previous 21 years`)\r\n\r\n /** A label for the next multi-year button (used by screen readers) */\r\n readonly nextMultiYearLabel = signal($localize`:@@nxt-pick-datetime.next-multi-year:Next 21 years`)\r\n\r\n /** A label for the 'switch to month view' button (used by screen readers) */\r\n readonly switchToMonthViewLabel = signal($localize`:@@nxt-pick-datetime.switch-to-month:Change to month view`)\r\n\r\n /** A label for the 'switch to year view' button (used by screen readers) */\r\n readonly switchToMultiYearViewLabel = signal($localize`:@@nxt-pick-datetime.switch-to-year-month:Choose month and year`)\r\n\r\n /** A label for the cancel button */\r\n readonly cancelBtnLabel = signal($localize`:@@nxt-pick-datetime.cancel:Cancel`)\r\n\r\n /** A label for the set button */\r\n readonly setBtnLabel = signal($localize`:@@nxt-pick-datetime.set:Set`)\r\n\r\n /** A label for the range 'from' in picker info */\r\n readonly rangeFromLabel = signal($localize`:@@nxt-pick-datetime.from:From`)\r\n\r\n /** A label for the range 'to' in picker info */\r\n readonly rangeToLabel = signal($localize`:@@nxt-pick-datetime.to:To`)\r\n\r\n /** A label for the hour12 button (AM) */\r\n readonly hour12AMLabel = signal($localize`:@@nxt-pick-datetime.time-am:AM`)\r\n\r\n /** A label for the hour12 button (PM) */\r\n readonly hour12PMLabel = signal($localize`:@@nxt-pick-datetime.time-pm:PM`)\r\n}\r\n","import { Component, viewChild, output, input, computed, linkedSignal, inject } from '@angular/core'\r\nimport { DateTimeAdapter } from '../../class/date-time-adapter.class'\r\nimport { DateFilter, SelectMode } from '../../class/date-time.class'\r\nimport { CalendarBodyComponent, CalendarCell } from '../calendar-body/calendar-body.component'\r\nimport { DateTimeIntl } from '../date-time-picker-intl.service'\r\n\r\n/** @internal */\r\nexport const YEARS_PER_ROW = 3\r\n\r\n/** @internal */\r\nexport const YEAR_ROWS = 7\r\n\r\n@Component({\r\n selector: 'nxt-date-time-multi-year-view',\r\n templateUrl: './calendar-multi-year-view.component.html',\r\n styleUrls: ['./calendar-multi-year-view.component.scss'],\r\n preserveWhitespaces: false,\r\n imports: [\r\n CalendarBodyComponent\r\n ],\r\n host: {\r\n '[class.nxt-dt-calendar-view]': 'true',\r\n '[class.nxt-dt-calendar-multi-year-view]': 'true'\r\n }\r\n})\r\n\r\nexport class MultiYearViewComponent<T> {\r\n private readonly pickerIntl = inject(DateTimeIntl)\r\n private readonly dateTimeAdapter = inject<DateTimeAdapter<T>>(DateTimeAdapter)\r\n\r\n /**\r\n * The select mode of the picker;\r\n */\r\n readonly selectMode = input<SelectMode>('single')\r\n\r\n /** The currently selected date */\r\n readonly selected = input<T | undefined, T | undefined>(undefined, {\r\n transform: value => {\r\n value = this.dateTimeAdapter.deserialize(value)\r\n return this.getValidDate(value)\r\n }\r\n })\r\n\r\n readonly selecteds = input<Array<T | undefined>, Array<T | undefined>>([], {\r\n transform: values => values.map(v => {\r\n v = this.dateTimeAdapter.deserialize(v)\r\n return this.getValidDate(v)\r\n })\r\n })\r\n\r\n /** Settable signal for pickerMoment */\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n readonly _pickerMomentInput = input<T | undefined>(undefined, { alias: 'pickerMoment' })\r\n\r\n private readonly _pickerMoment = linkedSignal({\r\n source: () => this._pickerMomentInput(),\r\n computation: v => v\r\n })\r\n readonly pickerMoment = computed(() => {\r\n const value = this.dateTimeAdapter.deserialize(this._pickerMoment())\r\n return this.getValidDate(value) || this.dateTimeAdapter.now()\r\n })\r\n\r\n /**\r\n * A function used to filter which dates are selectable\r\n */\r\n readonly dateTimeFilter = input<DateFilter<T>>()\r\n\r\n /** The minimum selectable date */\r\n readonly min = input<T | undefined, T | undefined>(undefined, {\r\n transform: value => {\r\n value = this.dateTimeAdapter.deserialize(value)\r\n return this.getValidDate(value)\r\n }\r\n })\r\n\r\n /** The maximum selectable date */\r\n readonly max = input<T | undefined, T | undefined>(undefined, {\r\n transform: value => {\r\n value = this.dateTimeAdapter.deserialize(value)\r\n return this.getValidDate(value)\r\n }\r\n })\r\n\r\n private readonly yearsData = computed(() => {\r\n const todayYear = this.dateTimeAdapter.getYear(this.dateTimeAdapter.now())\r\n\r\n const years: CalendarCell[][] = []\r\n\r\n const pickerMomentYear = this.dateTimeAdapter.getYear(this.pickerMoment())\r\n const offset = pickerMomentYear % (YEARS_PER_ROW * YEAR_ROWS)\r\n\r\n for (let i = 0; i < YEAR_ROWS; i++) {\r\n const row = []\r\n\r\n for (let j = 0; j < YEARS_PER_ROW; j++) {\r\n const year = pickerMomentYear - offset + (j + i * YEARS_PER_ROW)\r\n const yearCell = this.createYearCell(year)\r\n row.push(yearCell)\r\n }\r\n\r\n years.push(row)\r\n }\r\n\r\n return {\r\n years,\r\n todayYear\r\n }\r\n })\r\n\r\n readonly years = computed(() => this.yearsData().years)\r\n\r\n readonly todayYear = computed(() => this.yearsData().todayYear)\r\n\r\n readonly isInSingleMode = computed(() => this.selectMode() === 'single')\r\n\r\n readonly isInRangeMode = computed(() => (\r\n this.selectMode() === 'range' ||\r\n this.selectMode() === 'rangeFrom' ||\r\n this.selectMode() === 'rangeTo'\r\n ))\r\n\r\n readonly selectedYears = computed(() => {\r\n let selectedYears = new Array<number | undefined>()\r\n\r\n if (this.isInSingleMode() && this.selected()) {\r\n selectedYears[0] = this.dateTimeAdapter.getYear(this.selected())\r\n }\r\n\r\n if (this.isInRangeMode() && this.selecteds()) {\r\n selectedYears = this.selecteds().map((selected) => {\r\n if (this.dateTimeAdapter.isValid(selected)) {\r\n return this.dateTimeAdapter.getYear(selected)\r\n }\r\n return\r\n })\r\n }\r\n return selectedYears\r\n })\r\n\r\n readonly activeCell = computed(() => {\r\n if (this.pickerMoment()) {\r\n return this.dateTimeAdapter.getYear(this.pickerMoment()) % (YEARS_PER_ROW * YEAR_ROWS)\r\n }\r\n return\r\n })\r\n\r\n readonly tableHeader = computed(() => {\r\n const years = this.years()\r\n if (years && years.length > 0) {\r\n return `${years[0][0].displayValue} ~ ${years[YEAR_ROWS - 1][YEARS_PER_ROW - 1].displayValue}`\r\n }\r\n return\r\n })\r\n\r\n readonly prevButtonLabel = this.pickerIntl.prevMultiYearLabel.asReadonly()\r\n\r\n readonly nextButtonLabel = this.pickerIntl.nextMultiYearLabel.asReadonly()\r\n\r\n /**\r\n * Callback to invoke when a new month is selected\r\n */\r\n\r\n readonly change = output<T>()\r\n\r\n /**\r\n * Emits the selected year\r\n *\r\n * This doesn't imply a change on the selected date.\r\n */\r\n readonly yearSelected = output<T>()\r\n\r\n /** Emits when any date is activated */\r\n readonly pickerMomentChange = output<T>()\r\n\r\n /** Emits when use keyboard enter to select a calendar cell */\r\n readonly keyboardEnter = output<void>()\r\n\r\n /** The body of calendar table */\r\n private readonly calendarBodyElm = viewChild(CalendarBodyComponent)\r\n\r\n /**\r\n * Handle a calendarCell selected\r\n */\r\n selectCalendarCell(cell: CalendarCell): void {\r\n this.selectYear(cell.value)\r\n }\r\n\r\n private selectYear(year: number): void {\r\n this.yearSelected.emit(this.dateTimeAdapter.createDate(year, 0, 1))\r\n const firstDateOfMonth = this.dateTimeAdapter.createDate(\r\n year,\r\n this.dateTimeAdapter.getMonth(this.pickerMoment()),\r\n 1\r\n )\r\n const daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(firstDateOfMonth)\r\n const selected = this.dateTimeAdapter.createDate(\r\n year,\r\n this.dateTimeAdapter.getMonth(this.pickerMoment()),\r\n Math.min(daysInMonth, this.dateTimeAdapter.getDate(this.pickerMoment())),\r\n this.dateTimeAdapter.getHours(this.pickerMoment()),\r\n this.dateTimeAdapter.getMinutes(this.pickerMoment()),\r\n this.dateTimeAdapter.getSeconds(this.pickerMoment())\r\n )\r\n\r\n this.change.emit(selected)\r\n }\r\n\r\n /**\r\n * Generate the previous year list\r\n */\r\n prevYearList(event: any): void {\r\n this._pickerMoment.set(this.dateTimeAdapter.addCalendarYears(this.pickerMoment(), -1 * YEAR_ROWS * YEARS_PER_ROW))\r\n event.preventDefault()\r\n }\r\n\r\n /**\r\n * Generate the next year list\r\n */\r\n nextYearList(event: any): void {\r\n this._pickerMoment.set(this.dateTimeAdapter.addCalendarYears(this.pickerMoment(), YEAR_ROWS * YEARS_PER_ROW))\r\n event.preventDefault()\r\n }\r\n\r\n /** Whether the previous period button is enabled */\r\n previousEnabled(): boolean {\r\n if (!this.min()) {\r\n return true\r\n }\r\n return !this.min() || !this.isSameYearList(this.pickerMoment(), this.min())\r\n }\r\n\r\n /** Whether the next period button is enabled */\r\n nextEnabled(): boolean {\r\n return !this.max() || !this.isSameYearList(this.pickerMoment(), this.max())\r\n }\r\n\r\n handleCalendarKeydown(event: KeyboardEvent): void {\r\n let moment\r\n switch (event.code.toLowerCase()) {\r\n // minus 1 year\r\n case 'arrowleft':\r\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment(), -1)\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // add 1 year\r\n case 'arrowright':\r\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment(), 1)\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // minus 3 years\r\n case 'arrowup':\r\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment(), -1 * YEARS_PER_ROW)\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // add 3 years\r\n case 'arrowdown':\r\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment(), YEARS_PER_ROW)\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // go to the first year of the year page\r\n case 'home':\r\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment(),\r\n -this.dateTimeAdapter.getYear(this.pickerMoment()) % (YEARS_PER_ROW * YEAR_ROWS))\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // go to the last year of the year page\r\n case 'end':\r\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment(),\r\n (YEARS_PER_ROW * YEAR_ROWS) - this.dateTimeAdapter.getYear(this.pickerMoment()) % (YEARS_PER_ROW * YEAR_ROWS) - 1)\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // minus 1 year page (or 10 year pages)\r\n case 'pageup':\r\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment(), event.altKey ? -10 * (YEARS_PER_ROW * YEAR_ROWS) : -1 * (YEARS_PER_ROW * YEAR_ROWS))\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // add 1 year page (or 10 year pages)\r\n case 'pagedown':\r\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment(), event.altKey ? 10 * (YEARS_PER_ROW * YEAR_ROWS) : (YEARS_PER_ROW * YEAR_ROWS))\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n case 'enter':\r\n this.selectYear(this.dateTimeAdapter.getYear(this.pickerMoment()))\r\n this.keyboardEnter.emit(undefined)\r\n break\r\n\r\n default:\r\n return\r\n }\r\n\r\n this.focusActiveCell()\r\n event.preventDefault()\r\n }\r\n\r\n /**\r\n * Creates an CalendarCell for the given year.\r\n */\r\n private createYearCell(year: number): CalendarCell {\r\n const startDateOfYear = this.dateTimeAdapter.createDate(year, 0, 1)\r\n const ariaLabel = this.dateTimeAdapter.getYearName(startDateOfYear)\r\n const cellClass = 'nxt-dt-year-' + year\r\n return new CalendarCell(year, year.toString(), ariaLabel, this.isYearEnabled(year), false, cellClass)\r\n }\r\n\r\n /** Whether the given year is enabled */\r\n private isYearEnabled(year: number) {\r\n\r\n const firstOfYear = this.dateTimeAdapter.createDate(year, 0, 1)\r\n\r\n // If any date in the year is enabled count the year as enabled.\r\n for (let date = firstOfYear;\r\n this.dateTimeAdapter.getYear(date) == year;\r\n date = this.dateTimeAdapter.addCalendarDays(date, 1)\r\n ) {\r\n if (\r\n !!date &&\r\n (!this.dateTimeFilter() || this.dateTimeFilter()!(date, 'year')) &&\r\n (!this.min() ||\r\n this.dateTimeAdapter.compare(date, this.min()) >= 0) &&\r\n (!this.max() ||\r\n this.dateTimeAdapter.compare(date, this.max()) <= 0)\r\n ) {\r\n return true\r\n }\r\n }\r\n\r\n return false\r\n }\r\n\r\n private isSameYearList(date1?: T, date2?: T): boolean {\r\n return Math.floor(this.dateTimeAdapter.getYear(date1) / (YEARS_PER_ROW * YEAR_ROWS)) ===\r\n Math.floor(this.dateTimeAdapter.getYear(date2) / (YEARS_PER_ROW * YEAR_ROWS))\r\n }\r\n\r\n /**\r\n * Get a valid date object\r\n */\r\n private getValidDate(obj: any): T | undefined {\r\n return (this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj))\r\n ? obj\r\n : undefined\r\n }\r\n\r\n private focusActiveCell() {\r\n this.calendarBodyElm()?.focusActiveCell()\r\n }\r\n}\r\n","<button class=\"nxt-dt-control-button nxt-dt-control-arrow-button\"\r\n [disabled]=\"!previousEnabled()\"\r\n [attr.aria-label]=\"prevButtonLabel()\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"prevYearList($event)\">\r\n <span class=\"nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG Arrow Left\"> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n version=\"1.1\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 250.738 250.738\"\r\n style=\"enable-background:new 0 0 250.738 250.738;\"\r\n xml:space=\"preserve\"\r\n width=\"100%\"\r\n height=\"100%\">\r\n <path style=\"fill-rule: evenodd; clip-rule: evenodd;\"\r\n d=\"M96.633,125.369l95.053-94.533c7.101-7.055,7.101-18.492,0-25.546 c-7.1-7.054-18.613-7.054-25.714,0L58.989,111.689c-3.784,3.759-5.487,8.759-5.238,13.68c-0.249,4.922,1.454,9.921,5.238,13.681 l106.983,106.398c7.101,7.055,18.613,7.055,25.714,0c7.101-7.054,7.101-18.491,0-25.544L96.633,125.369z\" />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n</button>\r\n<table class=\"nxt-dt-calendar-table nxt-dt-calendar-multi-year-table\">\r\n <thead class=\"nxt-dt-calendar-header\">\r\n <tr>\r\n <th colspan=\"3\">{{tableHeader()}}</th>\r\n </tr>\r\n </thead>\r\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n <tbody nxtDateTimeCalendarBody\r\n role=\"grid\"\r\n [rows]=\"years()\"\r\n [numCols]=\"3\"\r\n [cellRatio]=\"3 / 7\"\r\n [activeCell]=\"activeCell() ?? 0\"\r\n [todayValue]=\"todayYear()\"\r\n [selectedValues]=\"selectedYears()\"\r\n [selectMode]=\"selectMode()\"\r\n (keydown)=\"handleCalendarKeydown($event)\"\r\n (select)=\"selectCalendarCell($event)\"></tbody>\r\n</table>\r\n<button class=\"nxt-dt-control-button nxt-dt-control-arrow-button\"\r\n [disabled]=\"!nextEnabled()\"\r\n [attr.aria-label]=\"nextButtonLabel()\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"nextYearList($event)\">\r\n <span class=\"nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG Arrow Right\"> -->\r\n <svg version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 250.738 250.738\"\r\n style=\"enable-background:new 0 0 250.738 250.738;\"\r\n xml:space=\"preserve\">\r\n <path style=\"fill-rule:evenodd;clip-rule:evenodd;\"\r\n d=\"M191.75,111.689L84.766,5.291c-7.1-7.055-18.613-7.055-25.713,0\r\n c-7.101,7.054-7.101,18.49,0,25.544l95.053,94.534l-95.053,94.533c-7.101,7.054-7.101,18.491,0,25.545\r\n c7.1,7.054,18.613,7.054,25.713,0L191.75,139.05c3.784-3.759,5.487-8.759,5.238-13.681\r\n C197.237,120.447,195.534,115.448,191.75,111.689z\" />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n</button>\r\n","import { Component, viewChild, output, input, computed, inject } from '@angular/core'\r\nimport { DateTimeAdapter } from '../../class/date-time-adapter.class'\r\nimport { DateTimeFormats, NXT_DATE_TIME_FORMATS } from '../../class/date-time-format.class'\r\nimport { DateFilter, SelectMode } from '../../class/date-time.class'\r\nimport { CalendarBodyComponent, CalendarCell } from '../calendar-body/calendar-body.component'\r\n\r\n/** @internal */\r\nconst MONTHS_PER_YEAR = 12\r\n\r\n/** @internal */\r\nconst MONTHS_PER_ROW = 3\r\n\r\n@Component({\r\n selector: 'nxt-date-time-year-view',\r\n templateUrl: './calendar-year-view.component.html',\r\n styleUrls: ['./calendar-year-view.component.scss'],\r\n preserveWhitespaces: false,\r\n imports: [\r\n CalendarBodyComponent\r\n ],\r\n host: {\r\n '[class.nxt-dt-calendar-view]': 'true'\r\n }\r\n})\r\nexport class YearViewComponent<T> {\r\n private readonly dateTimeAdapter = inject<DateTimeAdapter<T>>(DateTimeAdapter)\r\n private readonly dateTimeFormats = inject<DateTimeFormats>(NXT_DATE_TIME_FORMATS)\r\n\r\n /**\r\n * The select mode of the picker;\r\n */\r\n readonly selectMode = input<SelectMode>('single')\r\n\r\n /** The currently selected date */\r\n readonly selected = input<T | undefined, T | undefined>(undefined, {\r\n transform: value => {\r\n value = this.dateTimeAdapter.deserialize(value)\r\n return this.getValidDate(value)\r\n }\r\n })\r\n\r\n readonly selecteds = input<Array<T | undefined>, Array<T | undefined>>([], {\r\n transform: values => values.map(v => {\r\n v = this.dateTimeAdapter.deserialize(v)\r\n return this.getValidDate(v)\r\n })\r\n })\r\n\r\n readonly pickerMoment = input<T | undefined, T | undefined>(undefined, {\r\n transform: value => {\r\n value = this.dateTimeAdapter.deserialize(value)\r\n return this.getValidDate(value) || this.dateTimeAdapter.now()\r\n }\r\n })\r\n\r\n /**\r\n * A function used to filter which dates are selectable\r\n */\r\n readonly dateTimeFilter = input<DateFilter<T>>()\r\n\r\n /** The minimum selectable date */\r\n readonly min = input<T | undefined, T | undefined>(undefined, {\r\n transform: value => {\r\n value = this.dateTimeAdapter.deserialize(value)\r\n return this.getValidDate(value)\r\n }\r\n })\r\n\r\n /** The maximum selectable date */\r\n readonly max = input<T | undefined, T | undefined>(undefined, {\r\n transform: value => {\r\n value = this.dateTimeAdapter.deserialize(value)\r\n return this.getValidDate(value)\r\n }\r\n })\r\n\r\n private readonly monthNames = this.dateTimeAdapter.getMonthNames('short')\r\n\r\n private readonly monthsData = computed(() => {\r\n if (!this.pickerMoment()) {\r\n return\r\n }\r\n\r\n const todayMonth = this.getMonthInCurrentYear(\r\n this.dateTimeAdapter.now()\r\n )\r\n\r\n const months: CalendarCell[][] = []\r\n for (let i = 0; i < MONTHS_PER_YEAR / MONTHS_PER_ROW; i++) {\r\n const row = []\r\n\r\n for (let j = 0; j < MONTHS_PER_ROW; j++) {\r\n const month = j + i * MONTHS_PER_ROW\r\n const monthCell = this.createMonthCell(month)\r\n row.push(monthCell)\r\n }\r\n\r\n months.push(row)\r\n }\r\n\r\n return {\r\n months,\r\n todayMonth\r\n }\r\n })\r\n\r\n private _months?: CalendarCell[][]\r\n readonly months = computed(() => {\r\n const months = this.monthsData()?.months\r\n if (months != undefined)\r\n return this._months = months\r\n return this._months\r\n })\r\n\r\n readonly activeCell = computed(() => {\r\n if (this.pickerMoment()) {\r\n return this.dateTimeAdapter.getMonth(this.pickerMoment())\r\n }\r\n return\r\n })\r\n\r\n readonly isInSingleMode = computed(() => this.selectMode() === 'single')\r\n\r\n readonly isInRangeMode = computed(() => (\r\n this.selectMode() === 'range' ||\r\n this.selectMode() === 'rangeFrom' ||\r\n this.selectMode() === 'rangeTo'\r\n ))\r\n\r\n private _todayMonth?: number\r\n readonly todayMonth = computed(() => {\r\n const todayMonth = this.monthsData()?.todayMonth\r\n if (todayMonth != undefined)\r\n return this._todayMonth = todayMonth\r\n return this._todayMonth\r\n })\r\n\r\n /**\r\n * An array to hold all selectedDates' month value\r\n * the value is the month number in current year\r\n */\r\n readonly selectedMonths = computed(() => {\r\n /**\r\n * Set the selectedMonths value\r\n * In single mode, it has only one value which represent the month the selected date in\r\n * In range mode, it would has two values, one for the month the fromValue in and the other for the month the toValue in\r\n */\r\n const selectedMonths: Array<number | undefined> = []\r\n if (this.isInSingleMode() && this.selected()) {\r\n selectedMonths[0] = this.getMonthInCurrentYear(this.selected())\r\n }\r\n\r\n if (this.isInRangeMode() && this.selecteds()) {\r\n selectedMonths[0] = this.getMonthInCurrentYear(\r\n this.selecteds()[0]\r\n )\r\n selectedMonths[1] = this.getMonthInCurrentYear(\r\n this.selecteds()[1]\r\n )\r\n }\r\n return selectedMonths\r\n })\r\n\r\n /**\r\n * Callback to invoke when a new month is selected\r\n */\r\n readonly change = output<T>()\r\n\r\n /**\r\n * Emits the selected year\r\n *\r\n * This doesn't imply a change on the selected date.\r\n */\r\n readonly monthSelected = output<T>()\r\n\r\n /** Emits when any date is activated */\r\n readonly pickerMomentChange = output<T>()\r\n\r\n /** Emits when use keyboard enter to select a calendar cell */\r\n readonly keyboardEnter = output<void>()\r\n\r\n /** The body of calendar table */\r\n private readonly calendarBodyElm = viewChild(CalendarBodyComponent)\r\n\r\n /**\r\n * Handle a calendarCell selected\r\n */\r\n selectCalendarCell(cell: CalendarCell): void {\r\n this.selectMonth(cell.value)\r\n }\r\n\r\n /**\r\n * Handle a new month selected\r\n */\r\n private selectMonth(month: number): void {\r\n const firstDateOfMonth = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(this.pickerMoment()),\r\n month,\r\n 1\r\n )\r\n\r\n this.monthSelected.emit(firstDateOfMonth)\r\n\r\n const daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(\r\n firstDateOfMonth\r\n )\r\n const result = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(this.pickerMoment()),\r\n month,\r\n Math.min(\r\n daysInMonth,\r\n this.dateTimeAdapter.getDate(this.pickerMoment())\r\n ),\r\n this.dateTimeAdapter.getHours(this.pickerMoment()),\r\n this.dateTimeAdapter.getMinutes(this.pickerMoment()),\r\n this.dateTimeAdapter.getSeconds(this.pickerMoment())\r\n )\r\n\r\n this.change.emit(result)\r\n }\r\n\r\n /**\r\n * Handle keydown event on calendar body\r\n */\r\n handleCalendarKeydown(event: KeyboardEvent): void {\r\n let moment\r\n switch (event.code.toLowerCase()) {\r\n // minus 1 month\r\n case 'arrowleft':\r\n moment = this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerMoment(),\r\n -1\r\n )\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // add 1 month\r\n case 'arrowright':\r\n moment = this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerMoment(),\r\n 1\r\n )\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // minus 3 months\r\n case 'arrowup':\r\n moment = this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerMoment(),\r\n -3\r\n )\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // add 3 months\r\n case 'arrowdown':\r\n moment = this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerMoment(),\r\n 3\r\n )\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // move to first month of current year\r\n case 'home':\r\n moment = this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerMoment(),\r\n -this.dateTimeAdapter.getMonth(this.pickerMoment())\r\n )\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // move to last month of current year\r\n case 'end':\r\n moment = this.dateTimeAdapter.addCalendarMonths(\r\n this.pickerMoment(),\r\n 11 - this.dateTimeAdapter.getMonth(this.pickerMoment())\r\n )\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // minus 1 year (or 10 year)\r\n case 'pageup':\r\n moment = this.dateTimeAdapter.addCalendarYears(\r\n this.pickerMoment(),\r\n event.altKey ? -10 : -1\r\n )\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // add 1 year (or 10 year)\r\n case 'pagedown':\r\n moment = this.dateTimeAdapter.addCalendarYears(\r\n this.pickerMoment(),\r\n event.altKey ? 10 : 1\r\n )\r\n this.pickerMomentChange.emit(moment)\r\n break\r\n\r\n // Select current month\r\n case 'enter':\r\n this.selectMonth(\r\n this.dateTimeAdapter.getMonth(this.pickerMoment())\r\n )\r\n this.keyboardEnter.emit(undefined)\r\n break\r\n default:\r\n return\r\n }\r\n\r\n this.focusActiveCell()\r\n event.preventDefault()\r\n }\r\n\r\n /**\r\n * Creates an CalendarCell for the given month.\r\n */\r\n private createMonthCell(month: number): CalendarCell {\r\n const startDateOfMonth = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(this.pickerMoment()),\r\n month,\r\n 1\r\n )\r\n const ariaLabel = this.dateTimeAdapter.format(\r\n startDateOfMonth,\r\n this.dateTimeFormats.monthYearA11yLabel\r\n )\r\n const cellClass = 'nxt-dt-month-' + month\r\n return new CalendarCell(\r\n month,\r\n this.monthNames[month],\r\n ariaLabel,\r\n this.isMonthEnabled(month),\r\n false,\r\n cellClass\r\n )\r\n }\r\n\r\n /**\r\n * Check if the given month is enable\r\n */\r\n private isMonthEnabled(month: number): boolean {\r\n const firstDateOfMonth = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(this.pickerMoment()),\r\n month,\r\n 1\r\n )\r\n\r\n // If any date in the month is selectable,\r\n // we count the month as enable\r\n for (\r\n let date = firstDateOfMonth;\r\n this.dateTimeAdapter.getMonth(date) === month;\r\n date = this.dateTimeAdapter.addCalendarDays(date, 1)\r\n ) {\r\n if (\r\n !!date &&\r\n (!this.dateTimeFilter() || this.dateTimeFilter()!(date, 'month')) &&\r\n (!this.min() ||\r\n this.dateTimeAdapter.compare(date, this.min()) >= 0) &&\r\n (!this.max() ||\r\n this.dateTimeAdapter.compare(date, this.max()) <= 0)\r\n ) {\r\n return true\r\n }\r\n }\r\n\r\n return false\r\n }\r\n\r\n /**\r\n * Gets the month in this year that the given Date falls on.\r\n * Returns undefined if the given Date is in another year.\r\n */\r\n private getMonthInCurrentYear(date?: T): number | undefined {\r\n if (this.getValidDate(date) && this.getValidDate(this.pickerMoment())) {\r\n const result = this.dateTimeAdapter.compareYear(\r\n date,\r\n this.pickerMoment()\r\n )\r\n\r\n // < 0 : the given date's year is before pickerMoment's year, we return -1 as selected month value.\r\n // > 0 : the given date's year is after pickerMoment's year, we return 12 as selected month value.\r\n // 0 : the give date's year is same as the pickerMoment's year, we return the actual month value.\r\n if (result < 0) {\r\n return -1\r\n } else if (result > 0) {\r\n return 12\r\n } else {\r\n return this.dateTimeAdapter.getMonth(date)\r\n }\r\n }\r\n return\r\n }\r\n\r\n /**\r\n * Check the given dates are in the same year\r\n */\r\n private hasSameYear(dateLeft?: T, dateRight?: T) {\r\n return !!(\r\n dateLeft &&\r\n dateRight &&\r\n this.dateTimeAdapter.getYear(dateLeft) ===\r\n this.dateTimeAdapter.getYear(dateRight)\r\n )\r\n }\r\n\r\n /**\r\n * Get a valid date object\r\n */\r\n private getValidDate(obj: any): T | undefined {\r\n return this.dateTimeAdapter.isDateInstance(obj) &&\r\n this.dateTimeAdapter.isValid(obj)\r\n ? obj\r\n : undefined\r\n }\r\n\r\n private focusActiveCell() {\r\n this.calendarBodyElm()?.focusActiveCell()\r\n }\r\n}\r\n","<table class=\"nxt-dt-calendar-table nxt-dt-calendar-year-table\">\r\n <thead class=\"nxt-dt-calendar-header\">\r\n <tr>\r\n <th class=\"nxt-dt-calendar-table-divider\"\r\n aria-hidden=\"true\"\r\n colspan=\"3\"></th>\r\n </tr>\r\n </thead>\r\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n <tbody nxtDateTimeCalendarBody\r\n role=\"grid\"\r\n [rows]=\"months()\"\r\n [numCols]=\"3\"\r\n [cellRatio]=\"3 / 7\"\r\n [activeCell]=\"activeCell() ?? 0\"\r\n [todayValue]=\"todayMonth()\"\r\n [selectedValues]=\"selectedMonths()\"\r\n [selectMode]=\"selectMode()\"\r\n (keydown)=\"handleCalendarKeydown($event)\"\r\n (select)=\"selectCalendarCell($event)\">\r\n </tbody>\r\n</table>\r\n","import { Component, ElementRef, NgZone, afterRenderEffect, computed, input, linkedSignal, output, inject } from '@angular/core'\r\nimport { take } from 'rxjs/operators'\r\nimport { CdkMonitorFocus } from '@angular/cdk/a11y'\r\nimport { DateTimeAdapter } from '../../class/date-time-adapter.class'\r\nimport { DateTimeFormats, NXT_DATE_TIME_FORMATS } from '../../class/date-time-format.class'\r\nimport { DateFilter, SelectMode } from '../../class/date-time.class'\r\nimport { DateTimeIntl } from '../date-time-picker-intl.service'\r\nimport { MonthViewComponent } from '../calendar-month-view/calendar-month-view.component'\r\nimport { YearViewComponent } from '../calendar-year-view/calendar-year-view.component'\r\nimport { MultiYearViewComponent } from '../calendar-multi-year-view/calendar-multi-year-view.component'\r\n\r\n@Component({\r\n selector: 'nxt-date-time-calendar',\r\n templateUrl: './calendar.component.html',\r\n styleUrls: ['./calendar.component.scss'],\r\n preserveWhitespaces: false,\r\n imports: [\r\n CdkMonitorFocus,\r\n MonthViewComponent,\r\n YearViewComponent,\r\n MultiYearViewComponent\r\n ],\r\n host: {\r\n '[class.nxt-dt-calendar]': 'true'\r\n }\r\n})\r\nexport class CalendarComponent<T> {\r\n private readonly elmRef = inject<ElementRef<HTMLElement>>(ElementRef)\r\n private readonly pickerIntl = inject(DateTimeIntl)\r\n private readonly ngZone = inject(NgZone)\r\n private readonly dateTimeAdapter = inject<DateTimeAdapter<T>>(DateTimeAdapter)\r\n private readonly dateTimeFormats = inject<DateTimeFormats>(NXT_DATE_TIME_FORMATS)\r\n\r\n /**\r\n * Date filter for the month and year view\r\n */\r\n readonly dateTimeFilter = input<DateFilter<T>>()\r\n\r\n /**\r\n * Set the first day of week\r\n */\r\n readonly firstDayOfWeek = input<number>(0)\r\n\r\n /** The minimum selectable date */\r\n readonly min = input<T | undefined, T | undefined>(undefined, {\r\n transform: (value) => {\r\n value = this.dateTimeAdapter.deserialize(value)\r\n value = this.getValidDate(value)\r\n\r\n return value\r\n ? this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(value),\r\n this.dateTimeAdapter.getMonth(value),\r\n this.dateTimeAdapter.getDate(value)\r\n )\r\n : undefined\r\n }\r\n })\r\n\r\n /** The maximum selectable date */\r\n readonly max = input<T | undefined, T | undefined>(undefined, {\r\n transform: (value) => {\r\n value = this.dateTimeAdapter.deserialize(value)\r\n value = this.getValidDate(value)\r\n\r\n return value\r\n ? this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(value),\r\n this.dateTimeAdapter.getMonth(value),\r\n this.dateTimeAdapter.getDate(value)\r\n )\r\n : undefined\r\n }\r\n })\r\n\r\n /** The current picker moment */\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n readonly _pickerMomentInput = input<T | undefined>(undefined, { alias: 'pickerMoment' })\r\n\r\n /** Settable signal for pickerMoment */\r\n private readonly _pickerMoment = linkedSignal({\r\n source: () => this._pickerMomentInput(),\r\n computation: v => v\r\n })\r\n readonly pickerMoment = computed(() => {\r\n const value = this.dateTimeAdapter.deserialize(this._pickerMoment())\r\n return this.getValidDate(value) || this.dateTimeAdapter.now()\r\n })\r\n\r\n readonly selectMode = input<SelectMode>()\r\n\r\n /** The currently selected moment */\r\n readonly selected = input<T | undefined, T | undefined>(undefined, {\r\n transform: (value) => {\r\n value = this.dateTimeAdapter.deserialize(value)\r\n return this.getValidDate(value)\r\n }\r\n })\r\n\r\n readonly selecteds = input<Array<T | undefined>, Array<T | undefined>>([], {\r\n transform: (values) => values.map(v => {\r\n v = this.dateTimeAdapter.deserialize(v)\r\n return this.getValidDate(v)\r\n })\r\n })\r\n\r\n /**\r\n * The view that the calendar should start in\r\n */\r\n readonly startView = input<'month' | 'year' | 'multi-years'>('month')\r\n\r\n /**\r\n * Whether to hide dates in other months at the start or end of the current month\r\n */\r\n readonly hideOtherMonths = input<boolean>(false)\r\n\r\n /** Emits when the currently picker moment changes */\r\n readonly pickerMomentChange = output<T>()\r\n\r\n /** Emits when the currently selected date changes */\r\n readonly selectedChange = output<T | undefined>()\r\n\r\n /** Emits when any date is selected */\r\n readonly userSelection = output<void>()\r\n\r\n /**\r\n * Emits the selected year\r\n *\r\n * This doesn't imply a change on the selected date.\r\n */\r\n readonly yearSelected = output<T>()\r\n\r\n /**\r\n * Emits the selected month\r\n *\r\n * This doesn't imply a change on the selected date.\r\n */\r\n readonly monthSelected = output<T>()\r\n\r\n readonly periodButtonText = computed(() => this.isMonthView()\r\n ? this.dateTimeAdapter.format(\r\n this.pickerMoment(),\r\n this.dateTimeFormats.monthYearLabel\r\n )\r\n : this.dateTimeAdapter.getYearName(this.pickerMoment()))\r\n\r\n readonly periodButtonLabel = computed(() => this.isMonthView()\r\n ? this.pickerIntl.switchToMultiYearViewLabel()\r\n : this.pickerIntl.switchToMonthViewLabel())\r\n\r\n readonly prevButtonLabel = computed(() => {\r\n const currentView = this.currentView()\r\n if (currentView === 'month') {\r\n return this.pickerIntl.prevMonthLabel()\r\n } else if (currentView === 'year') {\r\n return this.pickerIntl.prevYearLabel()\r\n }\r\n return\r\n })\r\n\r\n readonly nextButtonLabel = computed(() => {\r\n const currentView = this.currentView()\r\n if (currentView === 'month') {\r\n return this.pickerIntl.nextMonthLabel()\r\n } else if (currentView === 'year') {\r\n return this.pickerIntl.nextYearLabel()\r\n }\r\n return\r\n })\r\n\r\n readonly currentView = linkedSignal({\r\n source: () => this.startView(),\r\n computation: v => v\r\n })\r\n\r\n readonly isInSingleMode = computed(() => this.selectMode() === 'single')\r\n\r\n readonly isInRangeMode = computed(() => {\r\n const selectMode = this.selectMode()\r\n return (\r\n selectMode === 'range' ||\r\n selectMode === 'rangeFrom' ||\r\n selectMode === 'rangeTo'\r\n )\r\n })\r\n\r\n readonly showControlArrows = computed(() => this.currentView() !== 'multi-years')\r\n\r\n readonly isMonthView = computed(() => this.currentView() === 'month')\r\n\r\n /**\r\n * Date filter for the month and year view\r\n */\r\n dateTimeFilterForViews = (date?: T) => {\r\n const dateTimeFilter = this.dateTimeFilter()\r\n return (\r\n !!date &&\r\n (!dateTimeFilter || dateTimeFilter(date, 'date')) &&\r\n (!this.min() ||\r\n this.dateTimeAdapter.compare(date, this.min()) >= 0) &&\r\n (!this.max() ||\r\n this.dateTimeAdapter.compare(date, this.max()) <= 0)\r\n )\r\n }\r\n\r\n constructor() {\r\n afterRenderEffect(() => {\r\n this.currentView()\r\n this.focusActiveCell()\r\n /*this.ngZone.runOutsideAngular(() => {\r\n this.elmRef.nativeElement\r\n ?.querySelector<HTMLElement>('.nxt-dt-calendar-cell-active')\r\n ?.focus()\r\n })*/\r\n })\r\n }\r\n\r\n /**\r\n * Toggle between month view and year view\r\n */\r\n toggleViews(): void {\r\n this.currentView.set(\r\n this.currentView() == 'month' ? 'multi-years' : 'month')\r\n }\r\n\r\n /**\r\n * Handles user clicks on the previous button.\r\n */\r\n previousClicked(): void {\r\n const newVal = this.isMonthView()\r\n ? this.dateTimeAdapter.addCalendarMonths(this.pickerMoment(), -1)\r\n : this.dateTimeAdapter.addCalendarYears(this.pickerMoment(), -1)\r\n this._pickerMoment.set(newVal)\r\n\r\n this.pickerMomentChange.emit(newVal)\r\n }\r\n\r\n /**\r\n * Handles user clicks on the next button.\r\n */\r\n nextClicked(): void {\r\n const newVal = this.isMonthView()\r\n ? this.dateTimeAdapter.addCalendarMonths(this.pickerMoment(), 1)\r\n : this.dateTimeAdapter.addCalendarYears(this.pickerMoment(), 1)\r\n this._pickerMoment.set(newVal)\r\n\r\n this.pickerMomentChange.emit(newVal)\r\n }\r\n\r\n dateSelected(date?: T): void {\r\n if (!this.dateTimeFilterForViews(date)) {\r\n return\r\n }\r\n\r\n this.selectedChange.emit(date)\r\n\r\n /*if ((this.isInSingleMode && !this.dateTimeAdapter.isSameDay(date, this.selected)) ||\r\n this.isInRangeMode) {\r\n this.selectedChange.emit(date);\r\n }*/\r\n }\r\n\r\n /**\r\n * Change the pickerMoment value and switch to a specific view\r\n */\r\n goToDateInView(\r\n date: T,\r\n view: 'month' | 'year' | 'multi-years'\r\n ): void {\r\n this.handlePickerMomentChange(date)\r\n this.currentView.set(view)\r\n return\r\n }\r\n\r\n /**\r\n * Change the pickerMoment value\r\n */\r\n handlePickerMomentChange(date: T): void {\r\n const newVal = this.dateTimeAdapter.clampDate(\r\n date,\r\n this.min(),\r\n this.max()\r\n )\r\n this._pickerMoment.set(newVal)\r\n this.pickerMomentChange.emit(newVal)\r\n }\r\n\r\n userSelected(): void {\r\n this.userSelection.emit(undefined)\r\n }\r\n\r\n /**\r\n * Whether the previous period button is enabled.\r\n */\r\n prevButtonEnabled(): boolean {\r\n return (\r\n !this.min() || !this.isSameView(this.pickerMoment(), this.min())\r\n )\r\n }\r\n\r\n /**\r\n * Whether the next period button is enabled.\r\n */\r\n nextButtonEnabled(): boolean {\r\n return (\r\n !this.max || !this.isSameView(this.pickerMoment(), this.max())\r\n )\r\n }\r\n\r\n /**\r\n * Focus to the host element\r\n */\r\n focusActiveCell() {\r\n this.ngZone.runOutsideAngular(() => {\r\n this.ngZone.onStable\r\n .asObservable()\r\n .pipe(take(1))\r\n .subscribe(() => {\r\n this.elmRef.nativeElement\r\n ?.querySelector<HTMLElement>('.nxt-dt-calendar-cell-active')\r\n ?.focus()\r\n })\r\n })\r\n }\r\n\r\n selectYearInMultiYearView(normalizedYear: T): void {\r\n this.yearSelected.emit(normalizedYear)\r\n }\r\n\r\n selectMonthInYearView(normalizedMonth: T): void {\r\n this.monthSelected.emit(normalizedMonth)\r\n }\r\n\r\n /**\r\n * Whether the two dates represent the same view in the current view mode (month or year).\r\n */\r\n private isSameView(date1?: T, date2?: T): boolean {\r\n if (this.currentView() === 'month') {\r\n return !!(\r\n date1 &&\r\n date2 &&\r\n this.dateTimeAdapter.getYear(date1) ===\r\n this.dateTimeAdapter.getYear(date2) &&\r\n this.dateTimeAdapter.getMonth(date1) ===\r\n this.dateTimeAdapter.getMonth(date2)\r\n )\r\n } else if (this.currentView() === 'year') {\r\n return !!(\r\n date1 &&\r\n date2 &&\r\n this.dateTimeAdapter.getYear(date1) ===\r\n this.dateTimeAdapter.getYear(date2)\r\n )\r\n } else {\r\n return false\r\n }\r\n }\r\n\r\n /**\r\n * Get a valid date object\r\n */\r\n private getValidDate(obj: any): T | undefined {\r\n return this.dateTimeAdapter.isDateInstance(obj) &&\r\n this.dateTimeAdapter.isValid(obj)\r\n ? obj\r\n : undefined\r\n }\r\n}\r\n","<div class=\"nxt-dt-calendar-control\">\r\n <!-- focus when keyboard tab (http://kizu.ru/en/blog/keyboard-only-focus/#x) -->\r\n <button class=\"nxt-dt-control nxt-dt-control-button nxt-dt-control-arrow-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n [style.visibility]=\"showControlArrows()? 'visible': 'hidden'\"\r\n [disabled]=\"!prevButtonEnabled()\"\r\n [attr.aria-label]=\"prevButtonLabel()\"\r\n (click)=\"previousClicked()\">\r\n <span class=\"nxt-dt-control-content nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG Arrow Left\"> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n version=\"1.1\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 250.738 250.738\"\r\n style=\"enable-background:new 0 0 250.738 250.738;\"\r\n xml:space=\"preserve\"\r\n width=\"100%\"\r\n height=\"100%\">\r\n <path style=\"fill-rule: evenodd; clip-rule: evenodd;\"\r\n d=\"M96.633,125.369l95.053-94.533c7.101-7.055,7.101-18.492,0-25.546 c-7.1-7.054-18.613-7.054-25.714,0L58.989,111.689c-3.784,3.759-5.487,8.759-5.238,13.68c-0.249,4.922,1.454,9.921,5.238,13.681 l106.983,106.398c7.101,7.055,18.613,7.055,25.714,0c7.101-7.054,7.101-18.491,0-25.544L96.633,125.369z\" />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n </button>\r\n <div class=\"nxt-dt-calendar-control-content\">\r\n <button class=\"nxt-dt-control nxt-dt-control-button nxt-dt-control-period-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n [attr.aria-label]=\"periodButtonLabel()\"\r\n (click)=\"toggleViews()\">\r\n <span class=\"nxt-dt-control-content nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n {{periodButtonText()}}\r\n\r\n <span class=\"nxt-dt-control-button-arrow\"\r\n [style.transform]=\"'rotate(' + (isMonthView()? 0 : 180) +'deg)'\">\r\n <!-- <editor-fold desc=\"SVG Arrow\"> -->\r\n <svg version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n width=\"50%\"\r\n height=\"50%\"\r\n viewBox=\"0 0 292.362 292.362\"\r\n style=\"enable-background:new 0 0 292.362 292.362;\"\r\n xml:space=\"preserve\">\r\n <g>\r\n <path d=\"M286.935,69.377c-3.614-3.617-7.898-5.424-12.848-5.424H18.274c-4.952,0-9.233,1.807-12.85,5.424\r\n C1.807,72.998,0,77.279,0,82.228c0,4.948,1.807,9.229,5.424,12.847l127.907,127.907c3.621,3.617,7.902,5.428,12.85,5.428\r\n s9.233-1.811,12.847-5.428L286.935,95.074c3.613-3.617,5.427-7.898,5.427-12.847C292.362,77.279,290.548,72.998,286.935,69.377z\" />\r\n </g>\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n </span>\r\n </button>\r\n </div>\r\n <button class=\"nxt-dt-control nxt-dt-control-button nxt-dt-control-arrow-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n [style.visibility]=\"showControlArrows()? 'visible': 'hidden'\"\r\n [disabled]=\"!nextButtonEnabled()\"\r\n [attr.aria-label]=\"nextButtonLabel()\"\r\n (click)=\"nextClicked()\">\r\n <span class=\"nxt-dt-control-content nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG Arrow Right\"> -->\r\n <svg version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 250.738 250.738\"\r\n style=\"enable-background:new 0 0 250.738 250.738;\"\r\n xml:space=\"preserve\">\r\n <path style=\"fill-rule:evenodd;clip-rule:evenodd;\"\r\n d=\"M191.75,111.689L84.766,5.291c-7.1-7.055-18.613-7.055-25.713,0\r\n c-7.101,7.054-7.101,18.49,0,25.544l95.053,94.534l-95.053,94.533c-7.101,7.054-7.101,18.491,0,25.545\r\n c7.1,7.054,18.613,7.054,25.713,0L191.75,139.05c3.784-3.759,5.487-8.759,5.238-13.681\r\n C197.237,120.447,195.534,115.448,191.75,111.689z\" />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n </button>\r\n</div>\r\n<div class=\"nxt-dt-calendar-main\"\r\n cdkMonitorSubtreeFocus\r\n tabindex=\"-1\">\r\n @switch (currentView()) {\r\n @case ('month') {\r\n <nxt-date-time-month-view [pickerMoment]=\"pickerMoment()\"\r\n [firstDayOfWeek]=\"firstDayOfWeek()\"\r\n [selected]=\"selected()\"\r\n [selecteds]=\"selecteds()\"\r\n [selectMode]=\"selectMode() ?? 'single'\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [dateTimeFilter]=\"dateTimeFilter()\"\r\n [hideOtherMonths]=\"hideOtherMonths()\"\r\n (pickerMomentChange)=\"handlePickerMomentChange($event)\"\r\n (selectedChange)=\"dateSelected($event)\"\r\n (userSelection)=\"userSelected()\" />\r\n }\r\n @case ('year') {\r\n <nxt-date-time-year-view [pickerMoment]=\"pickerMoment()\"\r\n [selected]=\"selected()\"\r\n [selecteds]=\"selecteds()\"\r\n [selectMode]=\"selectMode() ?? 'single'\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [dateTimeFilter]=\"dateTimeFilter()\"\r\n (keyboardEnter)=\"focusActiveCell()\"\r\n (pickerMomentChange)=\"handlePickerMomentChange($event)\"\r\n (monthSelected)=\"selectMonthInYearView($event)\"\r\n (change)=\"goToDateInView($event, 'month')\" />\r\n }\r\n @case ('multi-years') {\r\n <nxt-date-time-multi-year-view [pickerMoment]=\"pickerMoment()\"\r\n [selected]=\"selected()\"\r\n [selecteds]=\"selecteds()\"\r\n [selectMode]=\"selectMode() ?? 'single'\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [dateTimeFilter]=\"dateTimeFilter()\"\r\n (keyboardEnter)=\"focusActiveCell()\"\r\n (pickerMomentChange)=\"handlePickerMomentChange($event)\"\r\n (yearSelected)=\"selectYearInMultiYearView($event)\"\r\n (change)=\"goToDateInView($event, 'year')\" />\r\n }\r\n }\r\n</div>\r\n","import { Directive, OutputEmitterRef, input, Signal, computed, signal, inject } from '@angular/core'\r\nimport { DateTimeAdapter } from './date-time-adapter.class'\r\nimport { DateTimeFormats, NXT_DATE_TIME_FORMATS } from './date-time-format.class'\r\n\r\n/** @internal */\r\nlet nextUniqueId = 0\r\n\r\nexport type PickerType = 'both' | 'calendar' | 'timer'\r\n\r\nexport type PickerMode = 'popup' | 'dialog' | 'inline'\r\n\r\nexport type SelectMode = 'single' | 'range' | 'rangeFrom' | 'rangeTo'\r\n\r\nexport type RenderItem = 'year' | 'month' | 'date'\r\n\r\nexport type ViewType = 'month' | 'year' | 'multi-years'\r\n\r\nexport type DateFilter<T> = (date?: T, forRender?: RenderItem) => boolean\r\n\r\n@Directive()\r\nexport abstract class DateTimeDirective<T> {\r\n protected readonly dateTimeAdapter = inject<DateTimeAdapter<T>>(DateTimeAdapter)\r\n protected readonly dateTimeFormats = inject<DateTimeFormats>(NXT_DATE_TIME_FORMATS)\r\n\r\n /**\r\n * When true, shows a timer to configure the seconds value\r\n */\r\n readonly showSecondsTimer = input<boolean>(false)\r\n\r\n /**\r\n * When true, the timer will be in 12-hour format mode\r\n */\r\n readonly hour12Timer = input<boolean>(false)\r\n\r\n /**\r\n * The view that the calendar should start on\r\n */\r\n readonly startView = input<ViewType>('month')\r\n\r\n /**\r\n * Hours to change per step\r\n */\r\n readonly stepHour = input<number>(1)\r\n\r\n /**\r\n * Minutes to change per step\r\n */\r\n readonly stepMinute = input<number>(1)\r\n\r\n /**\r\n * Seconds to change per step\r\n */\r\n readonly stepSecond = input<number>(1)\r\n\r\n /**\r\n * Set the first day of week\r\n *\r\n * Valid values are from 0 [Sunday] to 6 [Saturday]\r\n */\r\n readonly firstDayOfWeek = input<number>(0)\r\n\r\n /**\r\n * If true, don't show dates from preious / next month on the calendar month view\r\n */\r\n readonly hideOtherMonths = input<boolean>(false)\r\n\r\n readonly id = `nxt-dt-picker-${nextUniqueId++}`\r\n\r\n abstract selected: Signal<T | undefined>\r\n\r\n abstract selecteds: Signal<Array<T | undefined>>\r\n\r\n abstract dateTimeFilter: Signal<DateFilter<T> | undefined>\r\n\r\n abstract max: Signal<T | undefined>\r\n\r\n abstract min: Signal<T | undefined>\r\n\r\n abstract selectMode: Signal<SelectMode | undefined>\r\n\r\n abstract startAt: Signal<T | undefined>\r\n\r\n abstract isOpen: Signal<boolean>\r\n\r\n abstract pickerMode: Signal<PickerMode>\r\n\r\n abstract pickerType: Signal<PickerType>\r\n\r\n abstract isInSingleMode: Signal<boolean>\r\n\r\n abstract isInRangeMode: Signal<boolean>\r\n\r\n abstract disabled: Signal<boolean>\r\n\r\n abstract select(date: T | Array<T | undefined>): void\r\n\r\n abstract yearSelected: OutputEmitterRef<T>\r\n\r\n abstract monthSelected: OutputEmitterRef<T>\r\n\r\n abstract selectYear(normalizedYear: T): void\r\n\r\n abstract selectMonth(normalizedMonth: T): void\r\n\r\n readonly formatString = computed(() => this.pickerType() === 'both'\r\n ? this.dateTimeFormats.fullPickerInput\r\n : this.pickerType() === 'calendar'\r\n ? this.dateTimeFormats.datePickerInput\r\n : this.dateTimeFormats.timePickerInput)\r\n\r\n /**\r\n * Date Time Checker to check if the give dateTime is selectable\r\n */\r\n readonly dateTimeChecker = signal((dateTime: T | undefined) => (\r\n !!dateTime &&\r\n (!this.dateTimeFilter() || this.dateTimeFilter()!(dateTime)) &&\r\n (!this.min() || this.dateTimeAdapter.compare(dateTime, this.min()) >= 0) &&\r\n (!this.max() || this.dateTimeAdapter.compare(dateTime, this.max()) <= 0)\r\n ))\r\n\r\n protected getValidDate(obj: any): T | undefined {\r\n return this.dateTimeAdapter.isDateInstance(obj) &&\r\n this.dateTimeAdapter.isValid(obj)\r\n ? obj\r\n : undefined\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core'\r\n\r\n/** @internal */\r\n@Pipe({\r\n name: 'numberFixedLen'\r\n})\r\nexport class NumberFixedLenPipe implements PipeTransform {\r\n transform(num: number | undefined, len: number | undefined) {\r\n if (num == undefined || !Number.isFinite(num))\r\n return undefined\r\n\r\n const number = Math.floor(num)\r\n\r\n if (len == undefined || !Number.isFinite(len))\r\n return number\r\n\r\n return number.toFixed(0).padStart(Math.floor(len), '0')\r\n }\r\n}\r\n","import { coerceNumberProperty } from '@angular/cdk/coercion'\r\nimport { Component, OnDestroy, OnInit, computed, input, output } from '@angular/core'\r\nimport { Subject, Subscription } from 'rxjs'\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators'\r\nimport { NumberFixedLenPipe } from '../number-fixed-len.pipe'\r\n\r\n/** @internal */\r\n@Component({\r\n selector: 'nxt-date-time-timer-box',\r\n templateUrl: './timer-box.component.html',\r\n styleUrls: ['./timer-box.component.scss'],\r\n preserveWhitespaces: false,\r\n imports: [\r\n NumberFixedLenPipe\r\n ],\r\n host: {\r\n '[class.nxt-dt-timer-box]': 'true'\r\n }\r\n})\r\n\r\nexport class TimerBoxComponent implements OnInit, OnDestroy {\r\n\r\n readonly showDivider = input<boolean>(false)\r\n\r\n readonly upBtnAriaLabel = input<string>()\r\n\r\n readonly upBtnDisabled = input<boolean>(false)\r\n\r\n readonly downBtnAriaLabel = input<string>()\r\n\r\n readonly downBtnDisabled = input<boolean>(false)\r\n\r\n /**\r\n * Value would be displayed in the box\r\n * If it is undefiend, the box would display [value]\r\n */\r\n readonly boxValue = input<number>()\r\n\r\n readonly value = input<number>(0)\r\n\r\n readonly min = input<number>(0)\r\n\r\n readonly max = input<number>(0)\r\n\r\n readonly step = input<number>(1)\r\n\r\n readonly inputLabel = input<string>()\r\n\r\n readonly valueChange = output<number>()\r\n\r\n readonly inputChange = output<number>()\r\n\r\n private inputStream = new Subject<string>()\r\n\r\n private inputStreamSub?: Subscription\r\n\r\n readonly displayValue = computed(() => this.boxValue() || this.value())\r\n\r\n ngOnInit() {\r\n this.inputStreamSub = this.inputStream.pipe(\r\n debounceTime(500),\r\n distinctUntilChanged()\r\n ).subscribe((val: string) => {\r\n if (val) {\r\n const inputValue = coerceNumberProperty(val, 0)\r\n this.updateValueViaInput(inputValue)\r\n }\r\n })\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.inputStreamSub?.unsubscribe()\r\n this.inputStreamSub = undefined\r\n }\r\n\r\n upBtnClicked(): void {\r\n this.updateValue(this.value() + this.step())\r\n }\r\n\r\n downBtnClicked(): void {\r\n this.updateValue(this.value() - this.step())\r\n }\r\n\r\n handleInputChange(val: string): void {\r\n this.inputStream.next(val)\r\n }\r\n\r\n private updateValue(value: number): void {\r\n this.valueChange.emit(value)\r\n }\r\n\r\n private updateValueViaInput(value: number): void {\r\n if (value > this.max() || value < this.min()) {\r\n return\r\n }\r\n this.inputChange.emit(value)\r\n }\r\n}\r\n","@if (showDivider()) {\r\n<div class=\"nxt-dt-timer-divider\"\r\n aria-hidden=\"true\"></div>\r\n}\r\n<button class=\"nxt-dt-control-button nxt-dt-control-arrow-button\"\r\n type=\"button\"\r\n tabindex=\"-1\"\r\n [disabled]=\"upBtnDisabled()\"\r\n [attr.aria-label]=\"upBtnAriaLabel()\"\r\n (click)=\"upBtnClicked()\">\r\n <span class=\"nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG Arrow Up\"> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n version=\"1.1\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 451.847 451.846\"\r\n style=\"enable-background:new 0 0 451.847 451.846;\"\r\n xml:space=\"preserve\"\r\n width=\"100%\"\r\n height=\"100%\">\r\n <path d=\"M248.292,106.406l194.281,194.29c12.365,12.359,12.365,32.391,0,44.744c-12.354,12.354-32.391,12.354-44.744,0\r\n L225.923,173.529L54.018,345.44c-12.36,12.354-32.395,12.354-44.748,0c-12.359-12.354-12.359-32.391,0-44.75L203.554,106.4\r\n c6.18-6.174,14.271-9.259,22.369-9.259C234.018,97.141,242.115,100.232,248.292,106.406z\" />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n</button>\r\n<label class=\"nxt-dt-timer-content\">\r\n <input class=\"nxt-dt-timer-input\"\r\n maxlength=\"2\"\r\n [value]=\"displayValue() | numberFixedLen : 2\"\r\n (input)=\"handleInputChange(valueInput.value)\"\r\n #valueInput>\r\n <span class=\"nxt-hidden-accessible\">{{inputLabel()}}</span>\r\n</label>\r\n<button class=\"nxt-dt-control-button nxt-dt-control-arrow-button\"\r\n type=\"button\"\r\n tabindex=\"-1\"\r\n [disabled]=\"downBtnDisabled()\"\r\n [attr.aria-label]=\"downBtnAriaLabel()\"\r\n (click)=\"downBtnClicked()\">\r\n <span class=\"nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG Arrow Down\"> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n version=\"1.1\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 451.847 451.846\"\r\n style=\"enable-background:new 0 0 451.847 451.846;\"\r\n xml:space=\"preserve\"\r\n width=\"100%\"\r\n height=\"100%\">\r\n <path d=\"M225.923,354.706c-8.098,0-16.195-3.092-22.369-9.263L9.27,151.157c-12.359-12.359-12.359-32.397,0-44.751\r\n c12.354-12.354,32.388-12.354,44.748,0l171.905,171.915l171.906-171.909c12.359-12.354,32.391-12.354,44.744,0\r\n c12.365,12.354,12.365,32.392,0,44.751L248.292,345.449C242.115,351.621,234.018,354.706,225.923,354.706z\" />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n</button>\r\n","import { Component, ElementRef, NgZone, computed, input, linkedSignal, output, inject } from '@angular/core'\r\nimport { take } from 'rxjs/operators'\r\nimport { DateTimeAdapter } from '../../class/date-time-adapter.class'\r\nimport { DateTimeIntl } from '../date-time-picker-intl.service'\r\nimport { TimerBoxComponent } from '../timer-box/timer-box.component'\r\n\r\n@Component({\r\n selector: 'nxt-date-time-timer',\r\n templateUrl: './timer.component.html',\r\n styleUrls: ['./timer.component.scss'],\r\n preserveWhitespaces: false,\r\n imports: [\r\n TimerBoxComponent\r\n ],\r\n host: {\r\n '[class.nxt-dt-timer]': 'true',\r\n '[attr.tabindex]': '-1'\r\n }\r\n})\r\nexport class TimerComponent<T> {\r\n private readonly ngZone = inject(NgZone)\r\n private readonly elmRef = inject<ElementRef<HTMLElement>>(ElementRef)\r\n private readonly pickerIntl = inject(DateTimeIntl)\r\n private readonly dateTimeAdapter = inject<DateTimeAdapter<T>>(DateTimeAdapter)\r\n\r\n /** The current picker moment */\r\n readonly pickerMoment = input<T | undefined, T | undefined>(undefined, {\r\n transform: value => {\r\n value = this.dateTimeAdapter.deserialize(value)\r\n return this.getValidDate(value) || this.dateTimeAdapter.now()\r\n }\r\n })\r\n\r\n /** The minimum selectable date time */\r\n readonly min = input<T | undefined, T | undefined>(undefined, {\r\n transform: value => {\r\n value = this.dateTimeAdapter.deserialize(value)\r\n return this.getValidDate(value)\r\n }\r\n })\r\n\r\n /** The maximum selectable date time */\r\n readonly max = input<T | undefined, T | undefined>(undefined, {\r\n transform: value => {\r\n value = this.dateTimeAdapter.deserialize(value)\r\n return this.getValidDate(value)\r\n }\r\n })\r\n\r\n /**\r\n * Whether to show the second's timer\r\n */\r\n readonly showSecondsTimer = input<boolean>(false)\r\n\r\n /**\r\n * Whether the timer is in hour12 format\r\n */\r\n readonly hour12Timer = input<boolean>(false)\r\n\r\n /**\r\n * Hours to change per step\r\n */\r\n readonly stepHour = input<number>(1)\r\n\r\n /**\r\n * Minutes to change per step\r\n */\r\n readonly stepMinute = input<number>(1)\r\n\r\n /**\r\n * Seconds to change per step\r\n */\r\n readonly stepSecond = input<number>(1)\r\n\r\n readonly hourValue = computed(() => this.dateTimeAdapter.getHours(this.pickerMoment()))\r\n private readonly hoursWithPM = computed(() => {\r\n let hours = this.hourValue()\r\n\r\n let isPM: boolean | undefined\r\n\r\n if (!this.hour12Timer()) {\r\n return { hours, isPM }\r\n } else {\r\n if (hours === 0) {\r\n hours = 12\r\n isPM = false\r\n } else if (hours > 0 && hours < 12) {\r\n isPM = false\r\n } else if (hours === 12) {\r\n isPM = true\r\n } else if (hours > 12 && hours < 24) {\r\n hours = hours - 12\r\n isPM = true\r\n }\r\n\r\n return { hours, isPM }\r\n }\r\n })\r\n\r\n private _isPM = false\r\n // a flag indicates the current timer moment is in PM or AM\r\n private readonly isPM = linkedSignal({\r\n source: () => this.hoursWithPM().isPM,\r\n computation: (v) => {\r\n if (v != undefined)\r\n return this._isPM = v\r\n return this._isPM\r\n }\r\n })\r\n\r\n /**\r\n * The value would be displayed in hourBox.\r\n * We need this because the value displayed in hourBox it not\r\n * the same as the hourValue when the timer is in hour12Timer mode.\r\n */\r\n readonly hourBoxValue = computed(() => this.hoursWithPM().hours)\r\n\r\n readonly minuteValue = computed(() => this.dateTimeAdapter.getMinutes(this.pickerMoment()))\r\n\r\n readonly secondValue = computed(() => this.dateTimeAdapter.getSeconds(this.pickerMoment()))\r\n\r\n readonly upHourButtonLabel = this.pickerIntl.upHourLabel.asReadonly()\r\n\r\n readonly downHourButtonLabel = this.pickerIntl.downHourLabel.asReadonly()\r\n\r\n readonly upMinuteButtonLabel = this.pickerIntl.upMinuteLabel.asReadonly()\r\n\r\n readonly downMinuteButtonLabel = this.pickerIntl.downMinuteLabel.asReadonly()\r\n\r\n readonly upSecondButtonLabel = this.pickerIntl.upSecondLabel.asReadonly()\r\n\r\n readonly downSecondButtonLabel = this.pickerIntl.downSecondLabel.asReadonly()\r\n\r\n readonly hour12ButtonLabel = computed(() => this.isPM()\r\n ? this.pickerIntl.hour12PMLabel()\r\n : this.pickerIntl.hour12AMLabel())\r\n\r\n readonly selectedChange = output<T>()\r\n\r\n /**\r\n * Focus to the host element\r\n */\r\n focus() {\r\n this.ngZone.runOutsideAngular(() => {\r\n this.ngZone.onStable\r\n .asObservable()\r\n .pipe(take(1))\r\n .subscribe(() => {\r\n this.elmRef.nativeElement.focus()\r\n })\r\n })\r\n }\r\n\r\n /**\r\n * Set the hour value via typing into timer box input\r\n * We need this to handle the hour value when the timer is in hour12 mode\r\n */\r\n setHourValueViaInput(hours: number): void {\r\n const hour12Timer = this.hour12Timer()\r\n if (hour12Timer && this.isPM() && hours >= 1 && hours <= 11) {\r\n hours = hours + 12\r\n } else if (hour12Timer && !this.isPM() && hours === 12) {\r\n hours = 0\r\n }\r\n\r\n this.setHourValue(hours)\r\n }\r\n\r\n setHourValue(hours: number): void {\r\n const m = this.dateTimeAdapter.setHours(this.pickerMoment(), hours)\r\n this.selectedChange.emit(m)\r\n }\r\n\r\n setMinuteValue(minutes: number): void {\r\n const m = this.dateTimeAdapter.setMinutes(this.pickerMoment(), minutes)\r\n this.selectedChange.emit(m)\r\n }\r\n\r\n setSecondValue(seconds: number): void {\r\n const m = this.dateTimeAdapter.setSeconds(this.pickerMoment(), seconds)\r\n this.selectedChange.emit(m)\r\n }\r\n\r\n setMeridiem(event: any): void {\r\n this.isPM.set(!this.isPM())\r\n\r\n let hours = this.hourValue()\r\n if (this.isPM()) {\r\n hours = hours + 12\r\n } else {\r\n hours = hours - 12\r\n }\r\n\r\n if (hours >= 0 && hours <= 23) {\r\n this.setHourValue(hours)\r\n }\r\n\r\n event.preventDefault()\r\n }\r\n\r\n /**\r\n * Check if the up hour button is enabled\r\n */\r\n readonly upHourEnabled = computed(() => (\r\n !this.max() ||\r\n this.compareHours(this.stepHour(), this.max()!) < 1\r\n ))\r\n /**\r\n * Check if the down hour button is enabled\r\n */\r\n readonly downHourEnabled = computed(() => (\r\n !this.min() ||\r\n this.compareHours(-this.stepHour(), this.min()!) > -1\r\n ))\r\n\r\n /**\r\n * Check if the up minute button is enabled\r\n */\r\n readonly upMinuteEnabled = computed(() => (\r\n !this.max() ||\r\n this.compareMinutes(this.stepMinute(), this.max()!) < 1\r\n ))\r\n\r\n /**\r\n * Check if the down minute button is enabled\r\n */\r\n readonly downMinuteEnabled = computed(() => (\r\n !this.min() ||\r\n this.compareMinutes(-this.stepMinute(), this.min()!) > -1\r\n ))\r\n\r\n /**\r\n * Check if the up second button is enabled\r\n */\r\n readonly upSecondEnabled = computed(() => (\r\n !this.max() ||\r\n this.compareSeconds(this.stepSecond(), this.max()!) < 1\r\n ))\r\n\r\n /**\r\n * Check if the down second button is enabled\r\n */\r\n readonly downSecondEnabled = computed(() => (\r\n !this.min() ||\r\n this.compareSeconds(-this.stepSecond(), this.min()!) > -1\r\n ))\r\n\r\n /**\r\n * PickerMoment's hour value +/- certain amount and compare it to the give date\r\n * 1 is after the comparedDate\r\n * -1 is before the comparedDate\r\n * 0 is equal the comparedDate\r\n */\r\n private compareHours(amount: number, comparedDate: T): number {\r\n const hours = this.dateTimeAdapter.getHours(this.pickerMoment()) + amount\r\n const result = this.dateTimeAdapter.setHours(this.pickerMoment(), hours)\r\n return this.dateTimeAdapter.compare(result, comparedDate)\r\n }\r\n\r\n /**\r\n * PickerMoment's minute value +/- certain amount and compare it to the give date\r\n * 1 is after the comparedDate\r\n * -1 is before the comparedDate\r\n * 0 is equal the comparedDate\r\n */\r\n private compareMinutes(amount: number, comparedDate: T): number {\r\n const minutes =\r\n this.dateTimeAdapter.getMinutes(this.pickerMoment()) + amount\r\n const result = this.dateTimeAdapter.setMinutes(\r\n this.pickerMoment(),\r\n minutes\r\n )\r\n return this.dateTimeAdapter.compare(result, comparedDate)\r\n }\r\n\r\n /**\r\n * PickerMoment's second value +/- certain amount and compare it to the give date\r\n * 1 is after the comparedDate\r\n * -1 is before the comparedDate\r\n * 0 is equal the comparedDate\r\n */\r\n private compareSeconds(amount: number, comparedDate: T): number {\r\n const seconds =\r\n this.dateTimeAdapter.getSeconds(this.pickerMoment()) + amount\r\n const result = this.dateTimeAdapter.setSeconds(\r\n this.pickerMoment(),\r\n seconds\r\n )\r\n return this.dateTimeAdapter.compare(result, comparedDate)\r\n }\r\n\r\n /**\r\n * Get a valid date object\r\n */\r\n private getValidDate(obj: any): T | undefined {\r\n return this.dateTimeAdapter.isDateInstance(obj) &&\r\n this.dateTimeAdapter.isValid(obj)\r\n ? obj\r\n : undefined\r\n }\r\n}\r\n","<nxt-date-time-timer-box [upBtnAriaLabel]=\"upHourButtonLabel()\"\r\n [downBtnAriaLabel]=\"downHourButtonLabel()\"\r\n [upBtnDisabled]=\"!upHourEnabled()\"\r\n [downBtnDisabled]=\"!downHourEnabled()\"\r\n [boxValue]=\"hourBoxValue()\"\r\n [value]=\"hourValue()\"\r\n [min]=\"0\"\r\n [max]=\"23\"\r\n [step]=\"stepHour()\"\r\n inputLabel=\"Hour\"\r\n (inputChange)=\"setHourValueViaInput($event)\"\r\n (valueChange)=\"setHourValue($event)\" />\r\n<nxt-date-time-timer-box [showDivider]=\"true\"\r\n [upBtnAriaLabel]=\"upMinuteButtonLabel()\"\r\n [downBtnAriaLabel]=\"downMinuteButtonLabel()\"\r\n [upBtnDisabled]=\"!upMinuteEnabled()\"\r\n [downBtnDisabled]=\"!downMinuteEnabled()\"\r\n [value]=\"minuteValue()\"\r\n [min]=\"0\"\r\n [max]=\"59\"\r\n [step]=\"stepMinute()\"\r\n inputLabel=\"Minute\"\r\n (inputChange)=\"setMinuteValue($event)\"\r\n (valueChange)=\"setMinuteValue($event)\" />\r\n@if (showSecondsTimer()) {\r\n<nxt-date-time-timer-box [showDivider]=\"true\"\r\n [upBtnAriaLabel]=\"upSecondButtonLabel()\"\r\n [downBtnAriaLabel]=\"downSecondButtonLabel()\"\r\n [upBtnDisabled]=\"!upSecondEnabled()\"\r\n [downBtnDisabled]=\"!downSecondEnabled()\"\r\n [value]=\"secondValue()\"\r\n [min]=\"0\"\r\n [max]=\"59\"\r\n [step]=\"stepSecond()\"\r\n inputLabel=\"Second\"\r\n (inputChange)=\"setSecondValue($event)\"\r\n (valueChange)=\"setSecondValue($event)\" />\r\n}\r\n\r\n@if (hour12Timer()) {\r\n<div class=\"nxt-dt-timer-hour12\">\r\n <button class=\"nxt-dt-control-button nxt-dt-timer-hour12-box\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"setMeridiem($event)\">\r\n <span class=\"nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n {{hour12ButtonLabel()}}\r\n </span>\r\n </button>\r\n</div>\r\n}\r\n","import { animate, animateChild, AnimationTriggerMetadata, group, query, state, style, transition, trigger } from '@angular/animations'\r\n\r\n/** @internal */\r\nexport const dateTimePickerAnimations: {\r\n readonly transformPicker: AnimationTriggerMetadata\r\n readonly fadeInPicker: AnimationTriggerMetadata\r\n} = {\r\n\r\n transformPicker: trigger('transformPicker', [\r\n state('void', style({ opacity: 0, transform: 'scale(1, 0)' })),\r\n state('enter', style({ opacity: 1, transform: 'scale(1, 1)' })),\r\n transition('void => enter', group([\r\n query('@fadeInPicker', animateChild(), { optional: true }),\r\n animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)')\r\n ])),\r\n transition('enter => void', animate('100ms linear', style({ opacity: 0 })))\r\n ]),\r\n\r\n fadeInPicker: trigger('fadeInPicker', [\r\n state('enter', style({ opacity: 1 })),\r\n state('void', style({ opacity: 0 })),\r\n transition('void => enter', animate('400ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)'))\r\n ])\r\n}\r\n","import { AnimationEvent } from '@angular/animations'\r\nimport { CdkTrapFocus } from '@angular/cdk/a11y'\r\nimport { AfterContentInit, AfterViewInit, Component, computed, ElementRef, signal, viewChild, inject } from '@angular/core'\r\nimport { Subject } from 'rxjs'\r\nimport { DateTimeAdapter } from '../../class/date-time-adapter.class'\r\nimport { DateTimeDirective } from '../../class/date-time.class'\r\nimport { CalendarComponent } from '../calendar/calendar.component'\r\nimport { DateTimeIntl } from '../date-time-picker-intl.service'\r\nimport { TimerComponent } from '../timer/timer.component'\r\nimport { dateTimePickerAnimations } from './date-time-picker-container.animations'\r\n\r\n/** @internal */\r\n@Component({\r\n selector: 'nxt-date-time-container',\r\n templateUrl: './date-time-picker-container.component.html',\r\n styleUrls: ['./date-time-picker-container.component.scss'],\r\n preserveWhitespaces: false,\r\n animations: [\r\n dateTimePickerAnimations.transformPicker,\r\n dateTimePickerAnimations.fadeInPicker\r\n ],\r\n imports: [\r\n CdkTrapFocus,\r\n CalendarComponent,\r\n TimerComponent\r\n ],\r\n host: {\r\n '[class.nxt-dt-container]': 'true',\r\n '[class.nxt-dt-popup-container]': \"pickerMode() === 'popup'\",\r\n '[class.nxt-dt-dialog-container]': \"pickerMode() === 'dialog'\",\r\n '[class.nxt-dt-inline-container]': \"pickerMode() === 'inline'\",\r\n '[class.nxt-dt-container-disabled]': 'disabled()',\r\n '[attr.id]': 'picker()?.id',\r\n '[@transformPicker]': \"pickerMode() === 'inline' ? '' : 'enter'\",\r\n '(@transformPicker.done)': 'handleContainerAnimationDone($event)'\r\n }\r\n})\r\nexport class DateTimeContainerComponent<T> implements AfterContentInit, AfterViewInit {\r\n private readonly elmRef = inject<ElementRef<HTMLElement>>(ElementRef)\r\n private readonly pickerIntl = inject(DateTimeIntl)\r\n private readonly dateTimeAdapter = inject<DateTimeAdapter<T>>(DateTimeAdapter)\r\n\r\n readonly calendar = viewChild(CalendarComponent)\r\n\r\n readonly timer = viewChild(TimerComponent)\r\n\r\n readonly picker = signal<DateTimeDirective<T> | undefined>(undefined)\r\n readonly activeSelectedIndex = signal(0) // The current active SelectedIndex in range select mode (0: 'from', 1: 'to')\r\n\r\n /**\r\n * Stream emits when try to hide picker\r\n */\r\n private readonly hidePicker$ = new Subject<void>()\r\n\r\n readonly hidePickerStream = this.hidePicker$.asObservable()\r\n\r\n /**\r\n * Stream emits when try to confirm the selected value\r\n */\r\n private readonly confirmSelected$ = new Subject<Event>()\r\n\r\n readonly confirmSelectedStream = this.confirmSelected$.asObservable()\r\n\r\n private readonly pickerOpened$ = new Subject<void>()\r\n\r\n readonly pickerOpenedStream = this.pickerOpened$.asObservable()\r\n\r\n /**\r\n * The current picker moment. This determines which time period is shown and which date is\r\n * highlighted when using keyboard navigation.\r\n */\r\n private readonly _clamPickerMoment = signal<T | undefined>(undefined)\r\n\r\n get pickerMoment() {\r\n return this._clamPickerMoment()\r\n }\r\n\r\n set pickerMoment(value: T | undefined) {\r\n if (value) {\r\n this._clamPickerMoment.set(this.dateTimeAdapter.clampDate(\r\n value,\r\n this.min(),\r\n this.max()\r\n ))\r\n }\r\n }\r\n\r\n readonly pickerType = computed(() => this.picker()?.pickerType())\r\n readonly pickerMode = computed(() => this.picker()?.pickerMode())\r\n readonly min = computed(() => this.picker()?.min())\r\n readonly max = computed(() => this.picker()?.max())\r\n readonly selected = computed(() => this.picker()?.selected())\r\n readonly selecteds = computed(() => this.picker()?.selecteds())\r\n readonly selectMode = computed(() => this.picker()?.selectMode())\r\n readonly isInRangeMode = computed(() => this.picker()?.isInRangeMode())\r\n readonly firstDayOfWeek = computed(() => this.picker()?.firstDayOfWeek())\r\n readonly dateTimeFilter = computed(() => this.picker()?.dateTimeFilter())\r\n readonly startView = computed(() => this.picker()?.startView())\r\n readonly hideOtherMonths = computed(() => this.picker()?.hideOtherMonths())\r\n readonly showSecondsTimer = computed(() => this.picker()?.showSecondsTimer())\r\n readonly hour12Timer = computed(() => this.picker()?.hour12Timer())\r\n readonly stepHour = computed(() => this.picker()?.stepHour())\r\n readonly stepMinute = computed(() => this.picker()?.stepMinute())\r\n readonly stepSecond = computed(() => this.picker()?.stepSecond())\r\n readonly disabled = computed(() => this.picker()?.disabled())\r\n\r\n private readonly formatString = computed(() => this.picker()?.formatString())\r\n private readonly startAt = computed(() => this.picker()?.startAt())\r\n private readonly dateTimeChecker = computed(() => this.picker()?.dateTimeChecker())\r\n\r\n readonly cancelLabel = this.pickerIntl.cancelBtnLabel.asReadonly()\r\n\r\n readonly setLabel = this.pickerIntl.setBtnLabel.asReadonly()\r\n\r\n /**\r\n * The range 'from' label\r\n */\r\n readonly fromLabel = this.pickerIntl.rangeFromLabel.asReadonly()\r\n\r\n /**\r\n * The range 'to' label\r\n */\r\n readonly toLabel = this.pickerIntl.rangeToLabel.asReadonly()\r\n\r\n /**\r\n * The range 'from' formatted value\r\n */\r\n readonly fromFormattedValue = computed(() => {\r\n const value = this.selecteds()?.[0]\r\n return value\r\n ? this.dateTimeAdapter.format(value, this.formatString())\r\n : ''\r\n })\r\n\r\n /**\r\n * The range 'to' formatted value\r\n */\r\n readonly toFormattedValue = computed(() => {\r\n const value = this.selecteds()?.[1]\r\n return value\r\n ? this.dateTimeAdapter.format(value, this.formatString())\r\n : ''\r\n })\r\n\r\n /**\r\n * Cases in which the control buttons show in the picker\r\n * 1) picker mode is 'dialog'\r\n * 2) picker type is NOT 'calendar' and the picker mode is NOT 'inline'\r\n */\r\n readonly showControlButtons = computed(() => {\r\n const pickerMode = this.pickerMode()\r\n const pickerType = this.pickerType()\r\n return (\r\n pickerMode === 'dialog' ||\r\n (pickerType !== 'calendar' &&\r\n pickerMode !== 'inline')\r\n )\r\n })\r\n\r\n get containerElm(): HTMLElement {\r\n return this.elmRef.nativeElement\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.initPicker()\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.focusPicker()\r\n }\r\n\r\n handleContainerAnimationDone(event: AnimationEvent): void {\r\n const toState = event.toState\r\n if (toState === 'enter') {\r\n this.pickerOpened$.next()\r\n }\r\n }\r\n\r\n dateSelected(date?: T): void {\r\n let result\r\n\r\n const picker = this.picker()\r\n\r\n if (picker?.isInSingleMode()) {\r\n result = this.dateSelectedInSingleMode(date)\r\n if (result) {\r\n this.pickerMoment = result\r\n picker.select(result)\r\n } else {\r\n // we close the picker when result is undefined and pickerType is calendar.\r\n if (this.pickerType() === 'calendar') {\r\n this.hidePicker$.next()\r\n }\r\n }\r\n return\r\n }\r\n\r\n if (picker?.isInRangeMode()) {\r\n result = this.dateSelectedInRangeMode(date)\r\n if (result) {\r\n this.pickerMoment = result[this.activeSelectedIndex()]\r\n picker.select(result)\r\n }\r\n }\r\n }\r\n\r\n timeSelected(time?: T): void {\r\n this.pickerMoment = this.dateTimeAdapter.clone(time)\r\n\r\n const picker = this.picker()\r\n\r\n if (!picker?.dateTimeChecker()?.(this.pickerMoment)) {\r\n return\r\n }\r\n\r\n if (picker.isInSingleMode()) {\r\n picker.select(this.pickerMoment)\r\n return\r\n }\r\n\r\n if (this.isInRangeMode()) {\r\n const selecteds = [...this.selecteds() || []]\r\n\r\n // check if the 'from' is after 'to' or 'to'is before 'from'\r\n // In this case, we set both the 'from' and 'to' the same value\r\n if (\r\n (this.activeSelectedIndex() === 0 &&\r\n selecteds[1] &&\r\n this.dateTimeAdapter.compare(\r\n this.pickerMoment,\r\n selecteds[1]\r\n ) === 1) ||\r\n (this.activeSelectedIndex() === 1 &&\r\n selecteds[0] &&\r\n this.dateTimeAdapter.compare(\r\n this.pickerMoment,\r\n selecteds[0]\r\n ) === -1)\r\n ) {\r\n selecteds[0] = this.pickerMoment\r\n selecteds[1] = this.pickerMoment\r\n } else {\r\n selecteds[this.activeSelectedIndex()] = this.pickerMoment\r\n }\r\n\r\n picker.select(selecteds)\r\n }\r\n }\r\n\r\n /**\r\n * Handle click on cancel button\r\n */\r\n onCancelClicked(event: Event): void {\r\n this.hidePicker$.next()\r\n event.preventDefault()\r\n return\r\n }\r\n\r\n /**\r\n * Handle click on set button\r\n */\r\n onSetClicked(event: Event): void {\r\n if (!this.dateTimeChecker()?.(this.pickerMoment)) {\r\n this.hidePicker$.next()\r\n event.preventDefault()\r\n return\r\n }\r\n\r\n this.confirmSelected$.next(event)\r\n event.preventDefault()\r\n return\r\n }\r\n\r\n /**\r\n * Handle click on inform radio group\r\n */\r\n handleClickOnInfoGroup(event: any, index: number): void {\r\n this.setActiveSelectedIndex(index)\r\n event.preventDefault()\r\n event.stopPropagation()\r\n }\r\n\r\n /**\r\n * Handle click on inform radio group\r\n */\r\n handleKeydownOnInfoGroup(\r\n event: any,\r\n next: any,\r\n index: number\r\n ): void {\r\n switch (event.keyCode) {\r\n case 'ArrowDown':\r\n case 'ArrowRight':\r\n case 'ArrowUp':\r\n case 'ArrowLeft':\r\n next.focus()\r\n this.setActiveSelectedIndex(index === 0 ? 1 : 0)\r\n event.preventDefault()\r\n event.stopPropagation()\r\n break\r\n\r\n case 'Space':\r\n this.setActiveSelectedIndex(index)\r\n event.preventDefault()\r\n event.stopPropagation()\r\n break\r\n\r\n default:\r\n return\r\n }\r\n }\r\n\r\n /**\r\n * Set the value of activeSelectedIndex\r\n */\r\n private setActiveSelectedIndex(index: number): void {\r\n if (\r\n this.selectMode() === 'range' &&\r\n this.activeSelectedIndex() !== index\r\n ) {\r\n this.activeSelectedIndex.set(index)\r\n\r\n const selected = this.selecteds()?.[this.activeSelectedIndex()]\r\n if (this.selecteds() && selected) {\r\n this.pickerMoment = this.dateTimeAdapter.clone(selected)\r\n }\r\n }\r\n return\r\n }\r\n\r\n private initPicker(): void {\r\n this.pickerMoment = this.startAt() || this.dateTimeAdapter.now()\r\n this.activeSelectedIndex.set(this.selectMode() === 'rangeTo' ? 1 : 0)\r\n }\r\n\r\n /**\r\n * Select calendar date in single mode,\r\n * it returns undefined when date is not selected.\r\n */\r\n private dateSelectedInSingleMode(date?: T): T | undefined {\r\n if (this.dateTimeAdapter.isSameDay(date, this.selected())) {\r\n return undefined\r\n }\r\n\r\n return this.updateAndCheckCalendarDate(date)\r\n }\r\n\r\n /**\r\n * Select dates in range Mode\r\n */\r\n private dateSelectedInRangeMode(date?: T): Array<T | undefined> | undefined {\r\n let from = this.selecteds()?.[0]\r\n let to = this.selecteds()?.[1]\r\n\r\n const result = this.updateAndCheckCalendarDate(date)\r\n\r\n if (!result) {\r\n return\r\n }\r\n\r\n // if the given calendar day is after or equal to 'from',\r\n // set ths given date as 'to'\r\n // otherwise, set it as 'from' and set 'to' to undefined\r\n if (this.selectMode() === 'range') {\r\n if (\r\n this.selecteds()?.length &&\r\n !to &&\r\n from &&\r\n (this.dateTimeAdapter.differenceInCalendarDays(result, from) ?? 0) >= 0\r\n ) {\r\n to = result\r\n this.activeSelectedIndex.set(1)\r\n } else {\r\n from = result\r\n to = undefined\r\n this.activeSelectedIndex.set(0)\r\n }\r\n } else if (this.selectMode() === 'rangeFrom') {\r\n from = result\r\n\r\n // if the from value is after the to value, set the to value as undefined\r\n if (to && this.dateTimeAdapter.compare(from, to) > 0) {\r\n to = undefined\r\n }\r\n } else if (this.selectMode() === 'rangeTo') {\r\n to = result\r\n\r\n // if the from value is after the to value, set the from value as undefined\r\n if (from && this.dateTimeAdapter.compare(from, to) > 0) {\r\n from = undefined\r\n }\r\n }\r\n\r\n return [from, to]\r\n }\r\n\r\n /**\r\n * Update the given calendar date's time and check if it is valid\r\n * Because the calendar date has 00:00:00 as default time, if the picker type is 'both',\r\n * we need to update the given calendar date's time before selecting it.\r\n * if it is valid, return the updated dateTime\r\n * if it is not valid, return undefined\r\n */\r\n private updateAndCheckCalendarDate(date?: T): T | undefined {\r\n let result\r\n\r\n // if the picker is 'both', update the calendar date's time value\r\n if (this.pickerType() === 'both') {\r\n result = this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(date),\r\n this.dateTimeAdapter.getMonth(date),\r\n this.dateTimeAdapter.getDate(date),\r\n this.dateTimeAdapter.getHours(this.pickerMoment),\r\n this.dateTimeAdapter.getMinutes(this.pickerMoment),\r\n this.dateTimeAdapter.getSeconds(this.pickerMoment)\r\n )\r\n result = this.dateTimeAdapter.clampDate(\r\n result,\r\n this.min(),\r\n this.max()\r\n )\r\n } else {\r\n result = this.dateTimeAdapter.clone(date)\r\n }\r\n\r\n // check the updated dateTime\r\n return this.dateTimeChecker()?.(result) ? result : undefined\r\n }\r\n\r\n /**\r\n * Focus to the picker\r\n */\r\n private focusPicker(): void {\r\n if (this.pickerMode() === 'inline') {\r\n return\r\n }\r\n\r\n const calendar = this.calendar()\r\n const timer = this.timer()\r\n if (calendar) {\r\n calendar.focusActiveCell()\r\n } else if (timer) {\r\n timer.focus()\r\n }\r\n }\r\n}\r\n","<div [cdkTrapFocus]=\"pickerMode() !== 'inline'\"\r\n [@fadeInPicker]=\"pickerMode() === 'inline'? '' : 'enter'\"\r\n class=\"nxt-dt-container-inner\">\r\n\r\n @if (pickerType() === 'both' || pickerType() === 'calendar') {\r\n <nxt-date-time-calendar class=\"nxt-dt-container-row\"\r\n [firstDayOfWeek]=\"firstDayOfWeek() ?? 0\"\r\n [(pickerMoment)]=\"pickerMoment\"\r\n [selected]=\"selected()\"\r\n [selecteds]=\"selecteds() ?? []\"\r\n [selectMode]=\"selectMode()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [dateTimeFilter]=\"dateTimeFilter()\"\r\n [startView]=\"startView() ?? 'month'\"\r\n [hideOtherMonths]=\"!!hideOtherMonths()\"\r\n (yearSelected)=\"picker()?.selectYear($event)\"\r\n (monthSelected)=\"picker()?.selectMonth($event)\"\r\n (selectedChange)=\"dateSelected($event)\" />\r\n }\r\n\r\n @if (pickerType() === 'both' || pickerType() === 'timer') {\r\n <nxt-date-time-timer class=\"nxt-dt-container-row\"\r\n [pickerMoment]=\"pickerMoment\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [showSecondsTimer]=\"!!showSecondsTimer()\"\r\n [hour12Timer]=\"!!hour12Timer()\"\r\n [stepHour]=\"stepHour() ?? 1\"\r\n [stepMinute]=\"stepMinute() ?? 1\"\r\n [stepSecond]=\"stepSecond() ?? 1\"\r\n (selectedChange)=\"timeSelected($event)\" />\r\n }\r\n\r\n @if (isInRangeMode()) {\r\n <div role=\"radiogroup\"\r\n class=\"nxt-dt-container-info nxt-dt-container-row\">\r\n <div role=\"radio\"\r\n [tabindex]=\"activeSelectedIndex() === 0 ? 0 : -1\"\r\n [attr.aria-checked]=\"activeSelectedIndex() === 0\"\r\n class=\"nxt-dt-control nxt-dt-container-range nxt-dt-container-from\"\r\n [class.nxt-dt-container-info-active]=\"activeSelectedIndex() === 0\"\r\n (click)=\"handleClickOnInfoGroup($event, 0)\"\r\n (keydown)=\"handleKeydownOnInfoGroup($event, to, 0)\"\r\n #from>\r\n <span class=\"nxt-dt-control-content nxt-dt-container-range-content\"\r\n tabindex=\"-1\">\r\n <span class=\"nxt-dt-container-info-label\">{{fromLabel()}}:</span>\r\n <span class=\"nxt-dt-container-info-value\">{{fromFormattedValue()}}</span>\r\n </span>\r\n </div>\r\n <div role=\"radio\"\r\n [tabindex]=\"activeSelectedIndex() === 1 ? 0 : -1\"\r\n [attr.aria-checked]=\"activeSelectedIndex() === 1\"\r\n class=\"nxt-dt-control nxt-dt-container-range nxt-dt-container-to\"\r\n [class.nxt-dt-container-info-active]=\"activeSelectedIndex() === 1\"\r\n (click)=\"handleClickOnInfoGroup($event, 1)\"\r\n (keydown)=\"handleKeydownOnInfoGroup($event, from, 1)\"\r\n #to>\r\n <span class=\"nxt-dt-control-content nxt-dt-container-range-content\"\r\n tabindex=\"-1\">\r\n <span class=\"nxt-dt-container-info-label\">{{toLabel()}}:</span>\r\n <span class=\"nxt-dt-container-info-value\">{{toFormattedValue()}}</span>\r\n </span>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (showControlButtons()) {\r\n <div class=\"nxt-dt-container-buttons nxt-dt-container-row\">\r\n <button class=\"nxt-dt-control nxt-dt-control-button nxt-dt-container-control-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"onCancelClicked($event)\">\r\n <span class=\"nxt-dt-control-content nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n {{cancelLabel()}}\r\n </span>\r\n </button>\r\n <button class=\"nxt-dt-control nxt-dt-control-button nxt-dt-container-control-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"onSetClicked($event)\">\r\n <span class=\"nxt-dt-control-content nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n {{setLabel()}}\r\n </span>\r\n </button>\r\n </div>\r\n }\r\n</div>\r\n","import { Component, forwardRef, OnInit, Provider, viewChild, output, input, computed, linkedSignal, signal } from '@angular/core'\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\r\nimport { DateFilter, DateTimeDirective, PickerMode, PickerType, SelectMode } from '../../class/date-time.class'\r\nimport { DateTimeContainerComponent } from '../date-time-picker-container/date-time-picker-container.component'\r\n\r\n/** @internal */\r\nexport const NXT_DATETIME_VALUE_ACCESSOR: Provider = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DateTimeInlineComponent),\r\n multi: true\r\n}\r\n\r\n@Component({\r\n selector: 'nxt-date-time-inline',\r\n templateUrl: './date-time-inline.component.html',\r\n styleUrls: ['./date-time-inline.component.scss'],\r\n preserveWhitespaces: false,\r\n providers: [NXT_DATETIME_VALUE_ACCESSOR],\r\n imports: [\r\n DateTimeContainerComponent\r\n ],\r\n host: {\r\n '[class.nxt-dt-inline]': 'true'\r\n }\r\n})\r\nexport class DateTimeInlineComponent<T> extends DateTimeDirective<T> implements OnInit, ControlValueAccessor {\r\n\r\n private readonly container = viewChild(DateTimeContainerComponent)\r\n\r\n /**\r\n * Set the type of the dateTime picker\r\n *\r\n * - `'both'` - show both calendar and timer\r\n * - `'calendar'` - show only calendar\r\n * - `'timer'` - show only timer\r\n */\r\n readonly pickerType = input<PickerType>('both')\r\n\r\n /** Whether the date time picker should be disabled */\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n readonly _disabled = input<boolean>(false, { alias: 'disabled' })\r\n readonly disabled = linkedSignal({\r\n source: () => this._disabled(),\r\n computation: v => v\r\n })\r\n\r\n /**\r\n * The picker select mode\r\n *\r\n * - `'single'` - select a single date\r\n * - `'range'` - select a range [from, to]\r\n * - `'rangeFrom'` - an open range with a fixed start date\r\n * - `'rangeTo'` - an open range with a fixed end date\r\n */\r\n readonly selectMode = input<SelectMode>('single')\r\n\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n readonly _valueInput = input<T | undefined>(undefined, { alias: 'value' })\r\n private readonly _value = linkedSignal({\r\n source: () => this._valueInput(),\r\n computation: v => v\r\n })\r\n readonly value = computed(() => {\r\n let value = this._value()\r\n value = this.dateTimeAdapter.deserialize(value)\r\n value = this.getValidDate(value)\r\n return value\r\n })\r\n\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n readonly _valuesInput = input<Array<T | undefined> | undefined>(undefined, { alias: 'values' })\r\n private readonly _values = linkedSignal({\r\n source: () => this._valuesInput(),\r\n computation: v => v\r\n })\r\n readonly values = computed(() => {\r\n let values = this._values()\r\n if (values && values.length > 0) {\r\n values = values.map(v => {\r\n v = this.dateTimeAdapter.deserialize(v)\r\n v = this.getValidDate(v)\r\n return (v && this.dateTimeAdapter.clone(v))\r\n })\r\n return [...values]\r\n } else {\r\n return []\r\n }\r\n })\r\n\r\n /**\r\n * The date to show when picker opens\r\n *\r\n * Defaults to selected date (if available) or current date.\r\n */\r\n readonly _startAt = input<T | undefined, T | undefined>(undefined, {\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n alias: 'startAt',\r\n transform: date => this.getValidDate(\r\n this.dateTimeAdapter.deserialize(date)\r\n )\r\n })\r\n readonly startAt = computed(() => {\r\n const startAt = this._startAt()\r\n if (startAt) {\r\n return startAt\r\n }\r\n\r\n const selectMode = this.selectMode()\r\n\r\n if (selectMode === 'single') {\r\n return this.value()\r\n } else if (\r\n selectMode === 'range' ||\r\n selectMode === 'rangeFrom'\r\n ) {\r\n return this.values()?.[0]\r\n } else if (selectMode === 'rangeTo') {\r\n return this.values()?.[1]\r\n } else {\r\n return\r\n }\r\n })\r\n\r\n /** A function to filter available date & time */\r\n readonly dateTimeFilter = input<DateFilter<T>>()\r\n\r\n /** The minimum valid date */\r\n readonly min = input<T | undefined, T | undefined>(undefined, {\r\n transform: value => {\r\n value = this.dateTimeAdapter.deserialize(value)\r\n return this.getValidDate(value)\r\n }\r\n })\r\n\r\n /** The maximum valid date */\r\n readonly max = input<T | undefined, T | undefined>(undefined, {\r\n transform: value => {\r\n value = this.dateTimeAdapter.deserialize(value)\r\n return this.getValidDate(value)\r\n }\r\n })\r\n\r\n /**\r\n * Emits selected year in multi-year view\r\n *\r\n * This doesn't imply a change on the selected date.\r\n */\r\n readonly yearSelected = output<T>()\r\n\r\n /**\r\n * Emits selected month in year view\r\n *\r\n * This doesn't imply a change on the selected date.\r\n */\r\n readonly monthSelected = output<T>()\r\n\r\n readonly selected = linkedSignal({\r\n source: () => this.value(),\r\n computation: v => v\r\n })\r\n\r\n readonly selecteds = linkedSignal({\r\n source: () => this.values(),\r\n computation: v => v || []\r\n })\r\n\r\n readonly isOpen = signal(true).asReadonly()\r\n\r\n readonly pickerMode = signal<PickerMode>('inline').asReadonly()\r\n\r\n readonly isInSingleMode = computed(() => this.selectMode() === 'single')\r\n\r\n readonly isInRangeMode = computed(() => (\r\n this.selectMode() === 'range' ||\r\n this.selectMode() === 'rangeFrom' ||\r\n this.selectMode() === 'rangeTo'\r\n ))\r\n\r\n private onModelChange?: (date: T | T[]) => void\r\n private onModelTouched?: () => void\r\n\r\n ngOnInit() {\r\n const container = this.container()\r\n if (container)\r\n container.picker.set(this)\r\n }\r\n\r\n writeValue(value: any): void {\r\n value = value ?? undefined\r\n if (this.isInSingleMode()) {\r\n this._value.set(value)\r\n const container = this.container()\r\n if (container)\r\n container.pickerMoment = value\r\n } else {\r\n this._values.set(value)\r\n const container = this.container()\r\n if (container)\r\n container.pickerMoment = this.values()?.[\r\n container.activeSelectedIndex()\r\n ]\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onModelChange = fn\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onModelTouched = fn\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled)\r\n }\r\n\r\n select(date: T[] | T): void {\r\n if (this.disabled()) {\r\n return\r\n }\r\n\r\n if (Array.isArray(date)) {\r\n this._values.set([...date])\r\n } else {\r\n this._value.set(date)\r\n }\r\n this.onModelChange?.(date)\r\n this.onModelTouched?.()\r\n }\r\n\r\n /**\r\n * Emits the selected year in multi-year view\r\n */\r\n selectYear(normalizedYear: T): void {\r\n this.yearSelected.emit(normalizedYear)\r\n }\r\n\r\n /**\r\n * Emits selected month in year view\r\n */\r\n selectMonth(normalizedMonth: T): void {\r\n this.monthSelected.emit(normalizedMonth)\r\n }\r\n}\r\n","<nxt-date-time-container />\r\n","import { AfterContentInit, Directive, ElementRef, forwardRef, OnDestroy, OnInit, Provider, Renderer2, input, output, OutputRefSubscription, signal, computed, linkedSignal, effect, inject } from '@angular/core'\r\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, ValidatorFn, Validators } from '@angular/forms'\r\nimport { DateTimeAdapter } from '../class/date-time-adapter.class'\r\nimport { DateTimeFormats, NXT_DATE_TIME_FORMATS } from '../class/date-time-format.class'\r\nimport { DateFilter, SelectMode } from '../class/date-time.class'\r\nimport { DateTimeComponent } from './date-time-picker/date-time-picker.component'\r\n\r\n/** @internal */\r\nexport const NXT_DATETIME_VALUE_ACCESSOR: Provider = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DateTimeInputDirective),\r\n multi: true\r\n}\r\n\r\n/** @internal */\r\nexport const NXT_DATETIME_VALIDATORS: Provider = {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => DateTimeInputDirective),\r\n multi: true\r\n}\r\n\r\nexport interface DateTimeInputEvent<T> {\r\n source: DateTimeInputDirective<T>\r\n value?: T | Array<T | undefined>\r\n input: HTMLInputElement\r\n}\r\n\r\n@Directive({\r\n selector: 'input[nxtDateTime]',\r\n exportAs: 'nxtDateTimeInput',\r\n providers: [\r\n NXT_DATETIME_VALUE_ACCESSOR,\r\n NXT_DATETIME_VALIDATORS\r\n ],\r\n host: {\r\n '[attr.aria-haspopup]': 'true',\r\n '[attr.aria-owns]': 'inputAriaOwns()',\r\n '[attr.min]': 'minIso8601()',\r\n '[attr.max]': 'maxIso8601()',\r\n '[disabled]': 'disabled()',\r\n '(keydown)': 'handleKeydownOnHost($event)',\r\n '(blur)': 'handleBlurOnHost($event)',\r\n '(input)': 'handleInputOnHost($event)',\r\n '(change)': 'handleChangeOnHost($event)'\r\n }\r\n})\r\nexport class DateTimeInputDirective<T> implements OnInit, AfterContentInit, OnDestroy, ControlValueAccessor, Validator {\r\n private readonly elmRef = inject<ElementRef<HTMLInputElement>>(ElementRef)\r\n private readonly renderer = inject(Renderer2)\r\n private readonly dateTimeAdapter = inject<DateTimeAdapter<T>>(DateTimeAdapter)\r\n private readonly dateTimeFormats = inject<DateTimeFormats>(NXT_DATE_TIME_FORMATS)\r\n\r\n /**\r\n * The date & time picker this input is associated with\r\n */\r\n readonly dateTime = input<DateTimeComponent<T>>(undefined, { alias: 'nxtDateTime' })\r\n\r\n /**\r\n * A function to filter available date & time\r\n */\r\n readonly dateTimeFilter = input<DateFilter<T>>()\r\n\r\n /** Whether the date & time picker input is disabled */\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n readonly _disabled = input<boolean>(false, { alias: 'disabled' })\r\n readonly disabled = linkedSignal({\r\n source: () => this._disabled(),\r\n computation: v => v\r\n })\r\n\r\n /** The minimum valid date */\r\n readonly min = input<T | undefined, T | undefined>(undefined, {\r\n transform: value => this.getValidDate(this.dateTimeAdapter.deserialize(value))\r\n })\r\n\r\n /** The maximum valid date */\r\n readonly max = input<T | undefined, T | undefined>(undefined, {\r\n transform: value => this.getValidDate(this.dateTimeAdapter.deserialize(value))\r\n })\r\n\r\n /**\r\n * The picker select mode\r\n *\r\n * - `'single'` - select a single date\r\n * - `'range'` - select a range [from, to]\r\n * - `'rangeFrom'` - an open range with a fixed start date\r\n * - `'rangeTo'` - an open range with a fixed end date\r\n */\r\n readonly selectMode = input<SelectMode>('single')\r\n\r\n /**\r\n * The character to separate the 'from' and 'to' in input value\r\n */\r\n readonly rangeSeparator = input<string>('~')\r\n\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n readonly _valueInput = input<T>(undefined, { alias: 'value' })\r\n private readonly _value = linkedSignal({\r\n source: () => this._valueInput(),\r\n computation: v => v\r\n })\r\n\r\n private readonly valueValidity = computed(() => {\r\n let value = this._value()\r\n value = this.dateTimeAdapter.deserialize(value)\r\n const lastValueValid = !value || !!this.dateTimeAdapter.isValid(value)\r\n return {\r\n value,\r\n lastValueValid\r\n }\r\n }, {\r\n equal: (a, b) => a.lastValueValid == b.lastValueValid && this.dateTimeAdapter.isEqual(a.value, b.value)\r\n })\r\n\r\n private readonly parsedValue = linkedSignal(() => this.valueValidity().value)\r\n readonly value = this.parsedValue.asReadonly()\r\n\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n readonly _valuesInput = input<Array<T | undefined>>(new Array<T | undefined>(), { alias: 'values' })\r\n private readonly _values = linkedSignal({\r\n source: () => this._valuesInput(),\r\n computation: v => v\r\n })\r\n\r\n private readonly valuesValidity = computed(() => {\r\n let values = this._values()\r\n\r\n let lastValueValid: boolean\r\n\r\n if (values && values.length > 0) {\r\n values = values.map(v => {\r\n v = this.dateTimeAdapter.deserialize(v)\r\n return this.getValidDate(v)\r\n })\r\n lastValueValid = ((!values[0] ||\r\n this.dateTimeAdapter.isValid(values[0])) &&\r\n (!values[1] ||\r\n this.dateTimeAdapter.isValid(values[1]))\r\n )\r\n } else {\r\n values = []\r\n lastValueValid = true\r\n }\r\n\r\n return {\r\n values,\r\n lastValueValid\r\n }\r\n }, {\r\n equal: (a, b) => a.lastValueValid == b.lastValueValid && this.dateTimeAdapter.isEqual(a.values[0], b.values[0]) && this.dateTimeAdapter.isEqual(a.values[1], b.values[1])\r\n })\r\n\r\n private readonly parsedValues = linkedSignal(() => this.valuesValidity().values)\r\n readonly values = this.parsedValues.asReadonly()\r\n\r\n private readonly nativeElementValue = computed(() => {\r\n /**\r\n * Define the native input property 'value'\r\n */\r\n if (this.isInSingleMode()) {\r\n const value = this.value()\r\n return value\r\n ? this.dateTimeAdapter.format(\r\n value,\r\n this.dtPicker()?.formatString()\r\n )\r\n : undefined\r\n } else if (this.isInRangeMode()) {\r\n const values = this.values()\r\n if (values && values.length > 0) {\r\n const from = values[0]\r\n const to = values[1]\r\n\r\n const fromFormatted = from\r\n ? this.dateTimeAdapter.format(\r\n from,\r\n this.dtPicker()?.formatString()\r\n )\r\n : ''\r\n const toFormatted = to\r\n ? this.dateTimeAdapter.format(\r\n to,\r\n this.dtPicker()?.formatString()\r\n )\r\n : ''\r\n\r\n if (!fromFormatted && !toFormatted) {\r\n return undefined\r\n } else {\r\n if (this.selectMode() === 'range') {\r\n return (\r\n fromFormatted +\r\n ' ' +\r\n this.rangeSeparator() +\r\n ' ' +\r\n toFormatted\r\n )\r\n } else if (this.selectMode() === 'rangeFrom') {\r\n return (\r\n fromFormatted\r\n )\r\n } else if (this.selectMode() === 'rangeTo') {\r\n return (\r\n this.elmRef.nativeElement,\r\n 'value',\r\n toFormatted\r\n )\r\n }\r\n }\r\n } else {\r\n return undefined\r\n }\r\n }\r\n\r\n return undefined\r\n })\r\n\r\n /**\r\n * Callback to invoke when `change` event is fired on this `<input>`\r\n */\r\n readonly dateTimeChange = output<DateTimeInputEvent<T>>()\r\n\r\n /**\r\n * Callback to invoke when an `input` event is fired on this `<input>`.\r\n */\r\n readonly dateTimeInput = output<DateTimeInputEvent<T>>()\r\n\r\n get elementRef() {\r\n return this.elmRef\r\n }\r\n\r\n readonly isInSingleMode = computed(() => this.selectMode() === 'single')\r\n\r\n readonly isInRangeMode = computed(() => {\r\n const selectMode = this.selectMode()\r\n return (\r\n selectMode === 'range' ||\r\n selectMode === 'rangeFrom' ||\r\n selectMode === 'rangeTo'\r\n )\r\n })\r\n\r\n /** The date-time-picker that this input is associated with */\r\n readonly dtPicker = signal<DateTimeComponent<T> | undefined>(undefined)\r\n\r\n private dtPickerSub?: OutputRefSubscription\r\n\r\n private readonly lastValueValid = linkedSignal({\r\n source: () => this.valueValidity().lastValueValid && this.valuesValidity().lastValueValid,\r\n computation: v => v\r\n })\r\n\r\n private onModelChange?: (date: T | Array<T | undefined> | undefined) => void\r\n private onModelTouched?: () => void\r\n private validatorOnChange?: () => void\r\n\r\n /** The form control validator for whether the input parses */\r\n private readonly parseValidator = computed<ValidatorFn>(() => {\r\n const lastValueValid = this.lastValueValid()\r\n return () => lastValueValid\r\n ? null\r\n : { dateTimeParse: { text: this.elmRef.nativeElement.value } }\r\n })\r\n\r\n /** The form control validator for the min date */\r\n private readonly minValidator = computed<ValidatorFn>(() => {\r\n const min = this.min()\r\n const isInSingleMode = this.isInSingleMode()\r\n const isInRangeMode = this.isInRangeMode()\r\n return (\r\n control\r\n ) => {\r\n if (isInSingleMode) {\r\n const controlValue = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value)\r\n )\r\n return !min ||\r\n !controlValue ||\r\n this.dateTimeAdapter.compare(min, controlValue) <= 0\r\n ? null\r\n : { dateTimeMin: { min, actual: controlValue } }\r\n } else if (isInRangeMode && control.value) {\r\n const controlValueFrom = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[0])\r\n )\r\n const controlValueTo = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[1])\r\n )\r\n return !min ||\r\n !controlValueFrom ||\r\n !controlValueTo ||\r\n this.dateTimeAdapter.compare(min, controlValueFrom) <= 0\r\n ? null\r\n : {\r\n dateTimeMin: {\r\n min,\r\n actual: [controlValueFrom, controlValueTo]\r\n }\r\n }\r\n }\r\n return null\r\n }\r\n })\r\n\r\n /** The form control validator for the max date */\r\n private readonly maxValidator = computed<ValidatorFn>(() => {\r\n const max = this.max()\r\n const isInSingleMode = this.isInSingleMode()\r\n const isInRangeMode = this.isInRangeMode()\r\n return (\r\n control\r\n ) => {\r\n if (isInSingleMode) {\r\n const controlValue = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value)\r\n )\r\n return !max ||\r\n !controlValue ||\r\n this.dateTimeAdapter.compare(max, controlValue) >= 0\r\n ? null\r\n : { dateTimeMax: { max, actual: controlValue } }\r\n } else if (isInRangeMode && control.value) {\r\n const controlValueFrom = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[0])\r\n )\r\n const controlValueTo = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[1])\r\n )\r\n return !max ||\r\n !controlValueFrom ||\r\n !controlValueTo ||\r\n this.dateTimeAdapter.compare(max, controlValueTo) >= 0\r\n ? null\r\n : {\r\n dateTimeMax: {\r\n max,\r\n actual: [controlValueFrom, controlValueTo]\r\n }\r\n }\r\n }\r\n return null\r\n }\r\n })\r\n\r\n /** The form control validator for the date filter */\r\n private readonly filterValidator = computed<ValidatorFn>(() => {\r\n const dateTimeFilter = this.dateTimeFilter()\r\n return (\r\n control: AbstractControl\r\n ): ValidationErrors | null => {\r\n const controlValue = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value)\r\n )\r\n return !dateTimeFilter ||\r\n !controlValue ||\r\n dateTimeFilter(controlValue)\r\n ? null\r\n : { dateTimeFilter: true }\r\n }\r\n })\r\n\r\n /**\r\n * The form control validator for the range.\r\n * Check whether the 'before' value is before the 'to' value\r\n */\r\n private readonly rangeValidator = computed<ValidatorFn>(() => {\r\n const isInSingleMode = this.isInSingleMode()\r\n return (\r\n control\r\n ) => {\r\n if (isInSingleMode || !control.value) {\r\n return null\r\n }\r\n\r\n const controlValueFrom = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[0])\r\n )\r\n const controlValueTo = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[1])\r\n )\r\n\r\n return !controlValueFrom ||\r\n !controlValueTo ||\r\n this.dateTimeAdapter.compare(controlValueFrom, controlValueTo) <= 0\r\n ? null\r\n : { dateTimeRange: true }\r\n }\r\n })\r\n\r\n /** The combined form control validator for this input */\r\n private readonly validator = computed(() => Validators.compose([\r\n this.parseValidator(),\r\n this.minValidator(),\r\n this.maxValidator(),\r\n this.filterValidator(),\r\n this.rangeValidator()\r\n ]))\r\n\r\n /** Emits when the value changes (either due to user input or programmatic change) */\r\n readonly valueChange = output<Array<T | undefined> | T | undefined>()\r\n\r\n /** Emits when the disabled state has changed */\r\n readonly disabledChange = output<boolean>()\r\n\r\n /** @internal */\r\n readonly inputAriaOwns = computed(() => (this.dtPicker()?.isOpen() && this.dtPicker()!.id) || undefined)\r\n\r\n /** @internal */\r\n readonly minIso8601 = computed(() => this.min() ? this.dateTimeAdapter.toIso8601(this.min()!) : undefined)\r\n\r\n /** @internal */\r\n readonly maxIso8601 = computed(() => this.max() ? this.dateTimeAdapter.toIso8601(this.max()!) : undefined)\r\n\r\n constructor() {\r\n let picker: DateTimeComponent<T> | undefined\r\n effect(() => {\r\n /**\r\n * Register the relationship between this input and its picker component\r\n */\r\n const _picker = this.dateTime()\r\n if (_picker && picker !== _picker) {\r\n picker = _picker\r\n this.dtPicker.set(picker)\r\n picker.registerInput(this)\r\n }\r\n })\r\n\r\n effect(() => {\r\n const value = this.nativeElementValue()\r\n if (value != undefined) {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n value\r\n )\r\n }\r\n })\r\n\r\n effect(() => {\r\n this.validator()\r\n this.validatorOnChange?.()\r\n })\r\n\r\n effect(() => {\r\n this.valueChange.emit(this.parsedValue())\r\n })\r\n\r\n effect(() => {\r\n this.valueChange.emit(this.parsedValues())\r\n })\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.dtPicker) {\r\n throw Error(\r\n 'DateTimePicker: the picker input doesn\\'t have any associated nxt-date-time component'\r\n )\r\n }\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.dtPickerSub = this.dtPicker()?.confirmSelectedChange.subscribe(\r\n (selecteds) => {\r\n if (Array.isArray(selecteds)) {\r\n this._values.set(selecteds)\r\n } else {\r\n this._value.set(selecteds)\r\n }\r\n\r\n this.onModelChange?.(selecteds)\r\n this.onModelTouched?.()\r\n this.dateTimeChange.emit({\r\n source: this,\r\n value: selecteds,\r\n input: this.elmRef.nativeElement\r\n })\r\n this.dateTimeInput.emit({\r\n source: this,\r\n value: selecteds,\r\n input: this.elmRef.nativeElement\r\n })\r\n }\r\n )\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.dtPickerSub?.unsubscribe()\r\n this.dtPickerSub = undefined\r\n }\r\n\r\n writeValue(value: any): void {\r\n value = value ?? undefined\r\n if (this.isInSingleMode()) {\r\n this._value.set(value)\r\n } else {\r\n this._values.set(value)\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onModelChange = fn\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onModelTouched = fn\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled)\r\n }\r\n\r\n validate(c: AbstractControl) {\r\n const validator = this.validator()\r\n return validator ? validator(c) : null\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this.validatorOnChange = fn\r\n }\r\n\r\n /**\r\n * Open the picker when user hold alt + ArrowDown\r\n */\r\n handleKeydownOnHost(event: KeyboardEvent): void {\r\n if (event.altKey && event.code.toLowerCase() === 'arrowdown') {\r\n this.dtPicker()?.open()\r\n event.preventDefault()\r\n }\r\n }\r\n\r\n handleBlurOnHost(_event: Event): void {\r\n this.onModelTouched?.()\r\n }\r\n\r\n handleInputOnHost(event: any): void {\r\n const value = event.target.value\r\n if (this.selectMode() === 'single') {\r\n this.changeInputInSingleMode(value)\r\n } else if (this.selectMode() === 'range') {\r\n this.changeInputInRangeMode(value)\r\n } else {\r\n this.changeInputInRangeFromToMode(value)\r\n }\r\n }\r\n\r\n handleChangeOnHost(_event: any): void {\r\n let v\r\n if (this.isInSingleMode()) {\r\n v = this.value()\r\n } else if (this.isInRangeMode()) {\r\n v = this.values()\r\n }\r\n\r\n this.dateTimeChange.emit({\r\n source: this,\r\n value: v,\r\n input: this.elmRef.nativeElement\r\n })\r\n }\r\n\r\n /**\r\n * Set the native input property 'value'\r\n */\r\n /* formatNativeInputValue(): void {\r\n if (this.isInSingleMode()) {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n this._value\r\n ? this.dateTimeAdapter.format(\r\n this._value,\r\n this.dtPicker()?.formatString()\r\n )\r\n : ''\r\n )\r\n } else if (this.isInRangeMode()) {\r\n if (this._values && this.values.length > 0) {\r\n const from = this._values[0]\r\n const to = this._values[1]\r\n\r\n const fromFormatted = from\r\n ? this.dateTimeAdapter.format(\r\n from,\r\n this.dtPicker()?.formatString()\r\n )\r\n : ''\r\n const toFormatted = to\r\n ? this.dateTimeAdapter.format(\r\n to,\r\n this.dtPicker()?.formatString()\r\n )\r\n : ''\r\n\r\n if (!fromFormatted && !toFormatted) {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n undefined\r\n )\r\n } else {\r\n if (this.selectMode() === 'range') {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n fromFormatted +\r\n ' ' +\r\n this.rangeSeparator() +\r\n ' ' +\r\n toFormatted\r\n )\r\n } else if (this.selectMode() === 'rangeFrom') {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n fromFormatted\r\n )\r\n } else if (this.selectMode() === 'rangeTo') {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n toFormatted\r\n )\r\n }\r\n }\r\n } else {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n ''\r\n )\r\n }\r\n }\r\n\r\n return\r\n }*/\r\n\r\n /**\r\n * Convert a given obj to a valid date object\r\n */\r\n private getValidDate(obj: any): T | undefined {\r\n return this.dateTimeAdapter.isDateInstance(obj) &&\r\n this.dateTimeAdapter.isValid(obj)\r\n ? obj\r\n : undefined\r\n }\r\n\r\n /**\r\n * Convert a time string to a date-time string\r\n * When pickerType is 'timer', the value in the picker's input is a time string.\r\n * The dateTimeAdapter parse fn could not parse a time string to a Date Object.\r\n * Therefore we need this fn to convert a time string to a date-time string.\r\n */\r\n private convertTimeStringToDateTimeString(\r\n timeString?: string,\r\n dateTime?: T\r\n ) {\r\n if (timeString) {\r\n const v = dateTime || this.dateTimeAdapter.now()\r\n const dateString = this.dateTimeAdapter.format(\r\n v,\r\n this.dateTimeFormats.datePickerInput\r\n )\r\n return dateString + ' ' + timeString\r\n }\r\n return undefined\r\n }\r\n\r\n /**\r\n * Handle input change in single mode\r\n */\r\n private changeInputInSingleMode(inputValue: string): void {\r\n let value: string | undefined = inputValue\r\n if (this.dtPicker()?.pickerType() === 'timer') {\r\n value = this.convertTimeStringToDateTimeString(value, this.value())\r\n }\r\n\r\n let result = this.dateTimeAdapter.parse(\r\n value,\r\n this.dateTimeFormats.parseInput\r\n )\r\n this.lastValueValid.set(!result || this.dateTimeAdapter.isValid(result))\r\n result = this.getValidDate(result)\r\n\r\n // if the newValue is the same as the oldValue, we intend to not fire the valueChange event\r\n // result equals to undefined means there is input event, but the input value is invalid\r\n if (!this.isSameValue(result, this.value()) || result === undefined) {\r\n this.parsedValue.set(result)\r\n //this.valueChange.emit(result)\r\n this.onModelChange?.(result)\r\n this.dateTimeInput.emit({\r\n source: this,\r\n value: result,\r\n input: this.elmRef.nativeElement\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Handle input change in rangeFrom or rangeTo mode\r\n */\r\n private changeInputInRangeFromToMode(inputValue?: string): void {\r\n const originalValue =\r\n this.selectMode() === 'rangeFrom'\r\n ? this.values()[0]\r\n : this.values()[1]\r\n\r\n if (this.dtPicker()?.pickerType() === 'timer') {\r\n inputValue = this.convertTimeStringToDateTimeString(\r\n inputValue,\r\n originalValue\r\n )\r\n }\r\n\r\n let result = this.dateTimeAdapter.parse(\r\n inputValue,\r\n this.dateTimeFormats.parseInput\r\n )\r\n this.lastValueValid.set(!result || this.dateTimeAdapter.isValid(result))\r\n result = this.getValidDate(result)\r\n\r\n // if the newValue is the same as the oldValue, we intend to not fire the valueChange event\r\n if (\r\n (this.selectMode() === 'rangeFrom' &&\r\n this.isSameValue(result, this.values()[0]) &&\r\n result) ||\r\n (this.selectMode() === 'rangeTo' &&\r\n this.isSameValue(result, this.values()[1]) &&\r\n result)\r\n ) {\r\n return\r\n }\r\n\r\n this.parsedValues.set(\r\n this.selectMode() === 'rangeFrom'\r\n ? [result, this.values()[1]]\r\n : [this.values()[0], result]\r\n )\r\n // this.valueChange.emit(this.values())\r\n this.onModelChange?.(this.parsedValues())\r\n this.dateTimeInput.emit({\r\n source: this,\r\n value: this.parsedValues(),\r\n input: this.elmRef.nativeElement\r\n })\r\n }\r\n\r\n /**\r\n * Handle input change in range mode\r\n */\r\n private changeInputInRangeMode(inputValue: string): void {\r\n const selecteds = inputValue.split(this.rangeSeparator())\r\n let fromString: string | undefined = selecteds[0]\r\n let toString: string | undefined = selecteds[1]\r\n\r\n if (this.dtPicker()?.pickerType() === 'timer') {\r\n fromString = this.convertTimeStringToDateTimeString(\r\n fromString,\r\n this.values()[0]\r\n )\r\n toString = this.convertTimeStringToDateTimeString(\r\n toString,\r\n this.values()[1]\r\n )\r\n }\r\n\r\n let from = this.dateTimeAdapter.parse(\r\n fromString,\r\n this.dateTimeFormats.parseInput\r\n )\r\n let to = this.dateTimeAdapter.parse(\r\n toString,\r\n this.dateTimeFormats.parseInput\r\n )\r\n this.lastValueValid.set((!from || this.dateTimeAdapter.isValid(from)) &&\r\n (!to || this.dateTimeAdapter.isValid(to)))\r\n from = this.getValidDate(from)\r\n to = this.getValidDate(to)\r\n\r\n // if the newValue is the same as the oldValue, we intend to not fire the valueChange event\r\n if (\r\n !this.isSameValue(from, this.values()[0]) ||\r\n !this.isSameValue(to, this.values()[1]) ||\r\n (!from && !to)\r\n ) {\r\n this.parsedValues.set([from, to])\r\n //this.valueChange.emit(this.values())\r\n this.onModelChange?.(this.parsedValues())\r\n this.dateTimeInput.emit({\r\n source: this,\r\n value: this.parsedValues(),\r\n input: this.elmRef.nativeElement\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Check if the two value is the same\r\n */\r\n private isSameValue(first?: T, second?: T): boolean {\r\n if (first && second) {\r\n return this.dateTimeAdapter.compare(first, second) === 0\r\n }\r\n\r\n return first == second\r\n }\r\n}\r\n","import { Directive, computed, input } from '@angular/core'\r\nimport { DateTimeComponent } from './date-time-picker/date-time-picker.component'\r\n\r\n@Directive({\r\n selector: '[nxtDateTimeTrigger]',\r\n host: {\r\n '[class.nxt-dt-trigger-disabled]': 'disabled()',\r\n '(click)': 'handleClickOnHost($event)'\r\n }\r\n})\r\nexport class DateTimeTriggerDirective<T> {\r\n readonly dtPicker = input<DateTimeComponent<T>>(undefined, { alias: 'nxtDateTimeTrigger' })\r\n\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n readonly _disabled = input<boolean>(undefined, { alias: 'disabled' })\r\n readonly disabled = computed(() => this._disabled() ?? !!this.dtPicker()?.disabled())\r\n\r\n handleClickOnHost(event: Event): void {\r\n const dtPicker = this.dtPicker()\r\n if (dtPicker) {\r\n dtPicker.open()\r\n event.stopPropagation()\r\n }\r\n }\r\n}\r\n","import { NoopScrollStrategy, ScrollStrategy } from '@angular/cdk/overlay'\r\nimport { ViewContainerRef } from '@angular/core'\r\n\r\n/** @internal */\r\nlet uniqueId = 0\r\n\r\n/** Possible overrides for a dialog's position */\r\nexport interface DialogPosition {\r\n /** Override for the dialog's top position */\r\n top?: string\r\n\r\n /** Override for the dialog's bottom position */\r\n bottom?: string\r\n\r\n /** Override for the dialog's left position */\r\n left?: string\r\n\r\n /** Override for the dialog's right position */\r\n right?: string\r\n}\r\n\r\nexport class DialogConfig {\r\n /**\r\n * ID of the element that describes the dialog.\r\n */\r\n ariaDescribedBy?: string\r\n\r\n /**\r\n * Whether to focus the dialog when the dialog is isOpen\r\n */\r\n autoFocus = true\r\n\r\n /** Whether the dialog has a backdrop */\r\n hasBackdrop? = true\r\n\r\n /**\r\n * Custom style for the backdrop\r\n */\r\n backdropStyle?: any\r\n\r\n /** Data being injected into the child component */\r\n data?: any\r\n\r\n /** Whether the user can use escape or clicking outside to close a modal */\r\n disableClose? = false\r\n\r\n /**\r\n * ID for the modal. If omitted, a unique one will be generated.\r\n */\r\n id?: string\r\n\r\n /**\r\n * The ARIA role of the dialog element.\r\n */\r\n role?: 'dialog' | 'alertdialog' = 'dialog'\r\n\r\n /**\r\n * Custom class for the pane\r\n */\r\n paneClass?: string | string[] = ''\r\n\r\n /**\r\n * Mouse Event\r\n */\r\n event?: MouseEvent\r\n\r\n /**\r\n * Custom class for the backdrop\r\n */\r\n backdropClass?: string | string[] = ''\r\n\r\n /**\r\n * Whether the dialog should close when the user goes backwards/forwards in history.\r\n */\r\n closeOnNavigation?: boolean = true\r\n\r\n /** Width of the dialog */\r\n width?: string = ''\r\n\r\n /** Height of the dialog */\r\n height?: string = ''\r\n\r\n /**\r\n * The min-width of the overlay panel.\r\n * If a number is provided, pixel units are assumed.\r\n */\r\n minWidth?: number | string\r\n\r\n /**\r\n * The min-height of the overlay panel.\r\n * If a number is provided, pixel units are assumed.\r\n */\r\n minHeight?: number | string\r\n\r\n /**\r\n * The max-width of the overlay panel.\r\n * If a number is provided, pixel units are assumed.\r\n */\r\n maxWidth?: number | string = '85vw'\r\n\r\n /**\r\n * The max-height of the overlay panel.\r\n * If a number is provided, pixel units are assumed.\r\n */\r\n maxHeight?: number | string\r\n\r\n /** Position overrides */\r\n position?: DialogPosition\r\n\r\n /**\r\n * The scroll strategy when the dialog is open\r\n * Learn more this from https://material.angular.io/cdk/overlay/overview#scroll-strategies\r\n */\r\n scrollStrategy?: ScrollStrategy = new NoopScrollStrategy()\r\n\r\n viewContainerRef?: ViewContainerRef\r\n\r\n constructor() {\r\n this.id = `nxt-dialog-${uniqueId++}`\r\n }\r\n}\r\n","import { GlobalPositionStrategy, OverlayRef } from '@angular/cdk/overlay'\r\nimport { Location } from '@angular/common'\r\nimport { Subject, SubscriptionLike as ISubscription } from 'rxjs'\r\nimport { filter, take } from 'rxjs/operators'\r\nimport { outputToObservable } from '@angular/core/rxjs-interop'\r\nimport { DialogContainerComponent } from '../dialog/dialog-container/dialog-container.component'\r\nimport { DialogPosition } from './dialog-config.class'\r\n\r\nexport class DialogRef<T> {\r\n\r\n readonly isAnimating = this.container.isAnimating\r\n\r\n private result: any\r\n\r\n private readonly _beforeClose$ = new Subject<void>()\r\n\r\n private readonly _afterOpen$ = new Subject<void>()\r\n\r\n private readonly _afterClosed$ = new Subject<void>()\r\n\r\n /** Subscription to changes in the user's location */\r\n private locationChanged?: ISubscription\r\n\r\n /**\r\n * The instance of component isOpen into modal\r\n */\r\n componentInstance?: T\r\n\r\n /** Whether the user is allowed to close the dialog */\r\n disableClose = !!this.container.config()?.disableClose\r\n\r\n constructor(\r\n private readonly overlayRef: OverlayRef,\r\n private readonly container: DialogContainerComponent,\r\n readonly id?: string,\r\n location?: Location\r\n ) {\r\n outputToObservable(this.container.animationStateChanged)\r\n .pipe(\r\n filter((event) => event.phaseName === 'done' && event.toState === 'enter'),\r\n take(1)\r\n )\r\n .subscribe(() => {\r\n this._afterOpen$.next(undefined)\r\n this._afterOpen$.complete()\r\n })\r\n\r\n outputToObservable(this.container.animationStateChanged)\r\n .pipe(\r\n filter((event) => event.phaseName === 'done' && event.toState === 'exit'),\r\n take(1)\r\n )\r\n .subscribe(() => {\r\n this.overlayRef.dispose()\r\n this.locationChanged?.unsubscribe()\r\n this.locationChanged = undefined\r\n this._afterClosed$.next(this.result)\r\n this._afterClosed$.complete()\r\n this.componentInstance = undefined\r\n })\r\n\r\n this.overlayRef.keydownEvents()\r\n .pipe(filter(event => event.code.toLowerCase() === 'escape' && !this.disableClose))\r\n .subscribe(() => this.close())\r\n\r\n if (location) {\r\n this.locationChanged = location.subscribe(() => {\r\n if (this.container.config()?.closeOnNavigation) {\r\n this.close()\r\n }\r\n })\r\n }\r\n }\r\n\r\n close(dialogResult?: any) {\r\n this.result = dialogResult\r\n\r\n outputToObservable(this.container.animationStateChanged)\r\n .pipe(\r\n filter((event) => event.phaseName === 'start'),\r\n take(1)\r\n )\r\n .subscribe(() => {\r\n this._beforeClose$.next(dialogResult)\r\n this._beforeClose$.complete()\r\n this.overlayRef.detachBackdrop()\r\n })\r\n\r\n this.container.startExitAnimation()\r\n }\r\n\r\n /**\r\n * Gets an observable that emits when the overlay's backdrop has been clicked.\r\n */\r\n backdropClick() {\r\n return this.overlayRef.backdropClick()\r\n }\r\n\r\n /**\r\n * Gets an observable that emits when keydown events are targeted on the overlay.\r\n */\r\n keydownEvents() {\r\n return this.overlayRef.keydownEvents()\r\n }\r\n\r\n /**\r\n * Updates the dialog's position.\r\n *\r\n * @param position New dialog position.\r\n */\r\n updatePosition(position?: DialogPosition): this {\r\n const strategy = this.getPositionStrategy()\r\n\r\n if (position && (position.left || position.right)) {\r\n if (position.left)\r\n strategy.left(position.left)\r\n else\r\n strategy.right(position.right)\r\n } else {\r\n strategy.centerHorizontally()\r\n }\r\n\r\n if (position && (position.top || position.bottom)) {\r\n if (position.top)\r\n strategy.top(position.top)\r\n else\r\n strategy.bottom(position.bottom)\r\n } else {\r\n strategy.centerVertically()\r\n }\r\n\r\n this.overlayRef.updatePosition()\r\n\r\n return this\r\n }\r\n\r\n /**\r\n * Updates the dialog's width and height.\r\n *\r\n * @param width New width of the dialog.\r\n * @param height New height of the dialog.\r\n */\r\n updateSize(width: string = 'auto', height: string = 'auto'): this {\r\n this.overlayRef.updateSize({ width, height })\r\n this.overlayRef.updatePosition()\r\n return this\r\n }\r\n\r\n afterOpen() {\r\n return this._afterOpen$.asObservable()\r\n }\r\n\r\n beforeClose() {\r\n return this._beforeClose$.asObservable()\r\n }\r\n\r\n afterClosed() {\r\n return this._afterClosed$.asObservable()\r\n }\r\n\r\n /** Fetches the position strategy object from the overlay ref */\r\n private getPositionStrategy(): GlobalPositionStrategy {\r\n return this.overlayRef.getConfig().positionStrategy as GlobalPositionStrategy\r\n }\r\n}\r\n","/**\r\n * Extends an object with the *enumerable* and *own* properties of one or more source objects,\r\n * similar to Object.assign.\r\n *\r\n * @param dest The object which will have properties copied to it.\r\n * @param sources The source objects from which properties will be copied.\r\n * @internal\r\n */\r\nexport function extendObject(dest: any, ...sources: any[]): any {\r\n if (dest == null || dest == undefined) {\r\n throw TypeError('Cannot convert undefined or null to object')\r\n }\r\n\r\n for (const source of sources) {\r\n if (source != null && source != undefined) {\r\n for (const key in source) {\r\n if (source.hasOwnProperty(key)) {\r\n dest[key] = source[key]\r\n }\r\n }\r\n }\r\n }\r\n\r\n return dest\r\n}\r\n","import { animate, animateChild, AnimationEvent, keyframes, style, transition, trigger } from '@angular/animations'\r\nimport { ConfigurableFocusTrap, ConfigurableFocusTrapFactory } from '@angular/cdk/a11y'\r\nimport { BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal } from '@angular/cdk/portal'\r\nimport { Component, ComponentRef, ElementRef, EmbeddedViewRef, DOCUMENT, viewChild, output, signal, computed, inject } from '@angular/core'\r\nimport { DialogConfig } from '../../class/dialog-config.class'\r\n\r\n/** @internal */\r\nexport type DialogContainerState = 'void' | 'enter' | 'exit'\r\n\r\n/** @internal */\r\nconst zoomFadeIn = {\r\n opacity: 0,\r\n transform: 'translateX({{ x }}) translateY({{ y }}) scale({{scale}})'\r\n}\r\n\r\n/** @internal */\r\nconst zoomFadeInFrom = {\r\n opacity: 0,\r\n transform: 'translateX({{ x }}) translateY({{ y }}) scale({{scale}})',\r\n transformOrigin: '{{ ox }} {{ oy }}'\r\n}\r\n\r\n/** @internal */\r\n@Component({\r\n selector: 'nxt-dialog-container',\r\n templateUrl: './dialog-container.component.html',\r\n animations: [\r\n trigger('slideModal', [\r\n transition('void => enter', [\r\n style(zoomFadeInFrom),\r\n animate('300ms cubic-bezier(0.35, 0, 0.25, 1)', style('*')),\r\n animate('150ms', keyframes([\r\n style({ transform: 'scale(1)', offset: 0 }),\r\n style({ transform: 'scale(1.05)', offset: 0.3 }),\r\n style({ transform: 'scale(.95)', offset: 0.8 }),\r\n style({ transform: 'scale(1)', offset: 1.0 })\r\n ])),\r\n animateChild()\r\n ], {\r\n params: {\r\n x: '0px',\r\n y: '0px',\r\n ox: '50%',\r\n oy: '50%',\r\n scale: 1\r\n }\r\n }),\r\n transition('enter => exit', [animateChild(), animate(200, style(zoomFadeIn))], { params: { x: '0px', y: '0px', ox: '50%', oy: '50%' } })\r\n ])\r\n ],\r\n imports: [\r\n CdkPortalOutlet\r\n ],\r\n host: {\r\n '[class.nxt-dialog-container]': 'true',\r\n '[attr.tabindex]': '-1',\r\n '[attr.aria-labelledby]': 'ariaLabelledBy()',\r\n '[attr.id]': 'config()?.id',\r\n '[attr.role]': 'config()?.role',\r\n '[attr.aria-describedby]': 'config()?.ariaDescribedBy',\r\n '[@slideModal]': 'dialogContainerAnimation()',\r\n '(@slideModal.start)': 'onAnimationStart($event)',\r\n '(@slideModal.done)': 'onAnimationDone($event)'\r\n }\r\n})\r\nexport class DialogContainerComponent extends BasePortalOutlet {\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef)\r\n private readonly focusTrapFactory = inject(ConfigurableFocusTrapFactory)\r\n private readonly document = inject<Document>(DOCUMENT, { optional: true })\r\n\r\n readonly portalOutlet = viewChild(CdkPortalOutlet)\r\n\r\n /** The class that traps and manages focus within the dialog */\r\n private readonly focusTrap = signal<ConfigurableFocusTrap | undefined>(undefined)\r\n\r\n /** ID of the element that should be considered as the dialog's label */\r\n readonly ariaLabelledBy = signal<string | undefined>(undefined)\r\n\r\n /** Emits when an animation state changes */\r\n readonly animationStateChanged = output<AnimationEvent>()\r\n\r\n readonly isAnimating = signal(false)\r\n\r\n private readonly _config = signal<DialogConfig | undefined>(undefined)\r\n readonly config = this._config.asReadonly()\r\n\r\n private readonly state = signal<DialogContainerState>('enter')\r\n\r\n // for animation purpose\r\n private readonly params = signal({\r\n x: '0px',\r\n y: '0px',\r\n ox: '50%',\r\n oy: '50%',\r\n scale: 0\r\n })\r\n\r\n // A variable to hold the focused element before the dialog was open.\r\n // This would help us to refocus back to element when the dialog was closed.\r\n private elementFocusedBeforeDialogWasOpened?: HTMLElement\r\n\r\n /** @internal */\r\n readonly dialogContainerAnimation = computed(() => ({ value: this.state(), params: this.params() }))\r\n\r\n /**\r\n * Attach a ComponentPortal as content to this dialog container.\r\n */\r\n attachComponentPortal<T>(\r\n portal: ComponentPortal<T>\r\n ): ComponentRef<T> {\r\n const portalOutlet = this.portalOutlet()\r\n if (portalOutlet?.hasAttached()) {\r\n throw Error(\r\n 'Attempting to attach dialog content after content is already attached'\r\n )\r\n }\r\n\r\n this.savePreviouslyFocusedElement()\r\n return portalOutlet!.attachComponentPortal(portal)\r\n }\r\n\r\n attachTemplatePortal<C>(\r\n _portal: TemplatePortal<C>\r\n ): EmbeddedViewRef<C> {\r\n throw new Error('Method not implemented.')\r\n }\r\n\r\n setConfig(config: DialogConfig): void {\r\n this._config.set(config)\r\n\r\n if (config.event) {\r\n this.calculateZoomOrigin(config.event)\r\n }\r\n }\r\n\r\n onAnimationStart(event: AnimationEvent): void {\r\n this.isAnimating.set(true)\r\n this.animationStateChanged.emit(event)\r\n }\r\n\r\n onAnimationDone(event: AnimationEvent): void {\r\n if (event.toState === 'enter') {\r\n this.trapFocus()\r\n } else if (event.toState === 'exit') {\r\n this.restoreFocus()\r\n }\r\n\r\n this.animationStateChanged.emit(event)\r\n this.isAnimating.set(false)\r\n }\r\n\r\n startExitAnimation() {\r\n this.state.set('exit')\r\n }\r\n\r\n /**\r\n * Calculate origin used in the `zoomFadeInFrom()`\r\n * for animation purpose\r\n */\r\n private calculateZoomOrigin(event: MouseEvent): void {\r\n const clientX = event.clientX\r\n const clientY = event.clientY\r\n\r\n const wh = window.innerWidth / 2\r\n const hh = window.innerHeight / 2\r\n const x = clientX - wh\r\n const y = clientY - hh\r\n const ox = clientX / window.innerWidth\r\n const oy = clientY / window.innerHeight\r\n\r\n this.params.set({\r\n x: `${x}px`,\r\n y: `${y}px`,\r\n ox: `${ox * 100}%`,\r\n oy: `${oy * 100}%`,\r\n scale: 0\r\n })\r\n }\r\n\r\n /**\r\n * Save the focused element before dialog was open\r\n */\r\n private savePreviouslyFocusedElement(): void {\r\n if (this.document) {\r\n this.elementFocusedBeforeDialogWasOpened = this.document\r\n .activeElement as HTMLElement\r\n\r\n Promise.resolve().then(() => this.elementRef.nativeElement.focus()).catch(() => { })\r\n }\r\n }\r\n\r\n private trapFocus(): void {\r\n if (!this.focusTrap()) {\r\n this.focusTrap.set(this.focusTrapFactory.create(\r\n this.elementRef.nativeElement\r\n ))\r\n }\r\n\r\n if (this._config()?.autoFocus) {\r\n this.focusTrap()?.focusInitialElementWhenReady().catch(() => { })\r\n }\r\n }\r\n\r\n private restoreFocus(): void {\r\n const toFocus = this.elementFocusedBeforeDialogWasOpened\r\n\r\n if (toFocus && typeof toFocus.focus === 'function') {\r\n toFocus.focus()\r\n }\r\n\r\n if (this.focusTrap()) {\r\n this.focusTrap()!.destroy()\r\n this.focusTrap.set(undefined)\r\n }\r\n }\r\n}\r\n","<ng-template cdkPortalOutlet />\r\n","import { Overlay, OverlayConfig, OverlayContainer, OverlayRef, ScrollStrategy } from '@angular/cdk/overlay'\r\nimport { ComponentPortal, ComponentType } from '@angular/cdk/portal'\r\nimport { Location } from '@angular/common'\r\nimport { ComponentRef, Injectable, InjectionToken, Injector, TemplateRef, inject } from '@angular/core'\r\nimport { defer, of, Subject } from 'rxjs'\r\nimport { concatAll } from 'rxjs/operators'\r\nimport { DialogConfig } from '../class/dialog-config.class'\r\nimport { DialogRef } from '../class/dialog-ref.class'\r\nimport { extendObject } from '../utils/object'\r\nimport { DialogContainerComponent } from './dialog-container/dialog-container.component'\r\n\r\n/** @internal */\r\nexport const NXT_DIALOG_DATA = new InjectionToken<any>('NXT_DIALOG_DATA')\r\n\r\n/**\r\n * Injection token that determines the scroll handling while the dialog is open.\r\n *\r\n * @internal\r\n */\r\nexport const NXT_DIALOG_SCROLL_STRATEGY = new InjectionToken<\r\n () => ScrollStrategy\r\n>('NXT_DIALOG_SCROLL_STRATEGY')\r\n\r\n/**\r\n * Injection token that can be used to specify default dialog options.\r\n *\r\n * @internal\r\n */\r\nexport const NXT_DIALOG_DEFAULT_OPTIONS = new InjectionToken<DialogConfig>(\r\n 'NXT_DIALOG_DEFAULT_OPTIONS'\r\n)\r\n\r\n/** @internal */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DialogService {\r\n private readonly overlay = inject(Overlay)\r\n private readonly injector = inject(Injector)\r\n private readonly location = inject<Location>(Location, { optional: true }) ?? undefined\r\n private readonly defaultOptions = inject<DialogConfig>(NXT_DIALOG_DEFAULT_OPTIONS, { optional: true }) ?? undefined\r\n private readonly parentDialog = inject<DialogService>(DialogService, { optional: true, skipSelf: true })\r\n private readonly overlayContainer = inject(OverlayContainer)\r\n\r\n private readonly ariaHiddenElements = new Map<Element, string | null>()\r\n\r\n private readonly _openDialogsAtThisLevel: Array<DialogRef<any>> = []\r\n private readonly _afterOpenAtThisLevel = new Subject<DialogRef<any>>()\r\n private readonly _afterAllClosedAtThisLevel = new Subject<void>()\r\n\r\n /** Keeps track of the currently-open dialogs */\r\n get openDialogs(): Array<DialogRef<any>> {\r\n return this.parentDialog\r\n ? this.parentDialog.openDialogs\r\n : this._openDialogsAtThisLevel\r\n }\r\n\r\n /** Stream that emits when a dialog has been isOpen */\r\n get afterOpen(): Subject<DialogRef<any>> {\r\n return this.parentDialog\r\n ? this.parentDialog.afterOpen\r\n : this._afterOpenAtThisLevel\r\n }\r\n\r\n get _afterAllClosed(): Subject<void> {\r\n const parent = this.parentDialog\r\n return parent\r\n ? parent._afterAllClosed\r\n : this._afterAllClosedAtThisLevel\r\n }\r\n\r\n /**\r\n * Stream that emits when all open dialog have finished closing.\r\n * Will emit on subscribe if there are no open dialogs to begin with.\r\n */\r\n\r\n readonly afterAllClosed = defer(\r\n () =>\r\n this._openDialogsAtThisLevel.length\r\n ? this._afterAllClosed\r\n : of([undefined], this._afterAllClosed).pipe(concatAll())\r\n )\r\n\r\n private readonly scrollStrategy = inject(NXT_DIALOG_SCROLL_STRATEGY, { optional: true }) ?? (() => this.overlay.scrollStrategies.block())\r\n\r\n constructor() {\r\n const location = this.location\r\n const parentDialog = this.parentDialog\r\n\r\n if (!parentDialog && location) {\r\n location.subscribe(() => this.closeAll())\r\n }\r\n }\r\n\r\n open<T>(\r\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\r\n config?: DialogConfig\r\n ): DialogRef<any> {\r\n config = applyConfigDefaults(config, this.defaultOptions)\r\n\r\n if (config.id && this.getDialogById(config.id)) {\r\n throw Error(`Dialog with id \"${config.id}\" exists already. The dialog id must be unique.`)\r\n }\r\n\r\n const overlayRef = this.createOverlay(config)\r\n const dialogContainer = this.attachDialogContainer(overlayRef, config)\r\n const dialogRef = this.attachDialogContent<T>(\r\n componentOrTemplateRef,\r\n dialogContainer,\r\n overlayRef,\r\n config\r\n )\r\n\r\n if (!this.openDialogs.length) {\r\n this.hideNonDialogContentFromAssistiveTechnology()\r\n }\r\n\r\n this.openDialogs.push(dialogRef)\r\n dialogRef\r\n .afterClosed()\r\n .subscribe(() => this.removeOpenDialog(dialogRef))\r\n this.afterOpen.next(dialogRef)\r\n return dialogRef\r\n }\r\n\r\n /**\r\n * Closes all of the currently-open dialogs.\r\n */\r\n closeAll(): void {\r\n let i = this.openDialogs.length\r\n\r\n while (i--) {\r\n this.openDialogs[i].close()\r\n }\r\n }\r\n\r\n /**\r\n * Finds an open dialog by its id.\r\n *\r\n * @param id ID to use when looking up the dialog.\r\n */\r\n getDialogById(id: string): DialogRef<any> | undefined {\r\n return this.openDialogs.find(dialog => dialog.id === id)\r\n }\r\n\r\n private attachDialogContent<T>(\r\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\r\n dialogContainer: DialogContainerComponent,\r\n overlayRef: OverlayRef,\r\n config: DialogConfig\r\n ) {\r\n const dialogRef = new DialogRef<T>(\r\n overlayRef,\r\n dialogContainer,\r\n config.id,\r\n this.location\r\n )\r\n\r\n if (config.hasBackdrop) {\r\n overlayRef.backdropClick().subscribe(() => {\r\n if (!dialogRef.disableClose) {\r\n dialogRef.close()\r\n }\r\n })\r\n }\r\n\r\n if (!(componentOrTemplateRef instanceof TemplateRef)) {\r\n const injector = this.createInjector<T>(\r\n config,\r\n dialogRef,\r\n dialogContainer\r\n )\r\n const contentRef = dialogContainer.attachComponentPortal(\r\n new ComponentPortal(componentOrTemplateRef, undefined, injector)\r\n )\r\n dialogRef.componentInstance = contentRef.instance\r\n }\r\n\r\n dialogRef\r\n .updateSize(config.width, config.height)\r\n .updatePosition(config.position)\r\n\r\n return dialogRef\r\n }\r\n\r\n private createInjector<T>(\r\n config: DialogConfig,\r\n dialogRef: DialogRef<T>,\r\n dialogContainer: DialogContainerComponent\r\n ) {\r\n const userInjector =\r\n config &&\r\n config.viewContainerRef &&\r\n config.viewContainerRef.injector\r\n\r\n return Injector.create({\r\n providers: [\r\n { provide: DialogRef, useValue: dialogRef },\r\n { provide: DialogContainerComponent, useValue: dialogContainer },\r\n { provide: NXT_DIALOG_DATA, useValue: config.data }\r\n ],\r\n parent: userInjector || this.injector\r\n })\r\n }\r\n\r\n private createOverlay(config: DialogConfig): OverlayRef {\r\n const overlayConfig = this.getOverlayConfig(config)\r\n return this.overlay.create(overlayConfig)\r\n }\r\n\r\n private attachDialogContainer(\r\n overlayRef: OverlayRef,\r\n config: DialogConfig\r\n ): DialogContainerComponent {\r\n const containerPortal = new ComponentPortal(\r\n DialogContainerComponent,\r\n config.viewContainerRef\r\n )\r\n const containerRef: ComponentRef<\r\n DialogContainerComponent\r\n > = overlayRef.attach(containerPortal)\r\n containerRef.instance.setConfig(config)\r\n\r\n return containerRef.instance\r\n }\r\n\r\n private getOverlayConfig(dialogConfig: DialogConfig): OverlayConfig {\r\n const state = new OverlayConfig({\r\n positionStrategy: this.overlay.position().global(),\r\n scrollStrategy: dialogConfig.scrollStrategy || this.scrollStrategy(),\r\n panelClass: dialogConfig.paneClass,\r\n hasBackdrop: dialogConfig.hasBackdrop,\r\n minWidth: dialogConfig.minWidth,\r\n minHeight: dialogConfig.minHeight,\r\n maxWidth: dialogConfig.maxWidth,\r\n maxHeight: dialogConfig.maxHeight\r\n })\r\n\r\n if (dialogConfig.backdropClass) {\r\n state.backdropClass = dialogConfig.backdropClass\r\n }\r\n\r\n return state\r\n }\r\n\r\n private removeOpenDialog(dialogRef: DialogRef<any>): void {\r\n const index = this._openDialogsAtThisLevel.indexOf(dialogRef)\r\n\r\n if (index > -1) {\r\n this.openDialogs.splice(index, 1)\r\n // If all the dialogs were closed, remove/restore the `aria-hidden`\r\n // to a the siblings and emit to the `afterAllClosed` stream.\r\n if (!this.openDialogs.length) {\r\n this.ariaHiddenElements.forEach((previousValue, element) => {\r\n if (previousValue) {\r\n element.setAttribute('aria-hidden', previousValue)\r\n } else {\r\n element.removeAttribute('aria-hidden')\r\n }\r\n })\r\n\r\n this.ariaHiddenElements.clear()\r\n this._afterAllClosed.next()\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Hides all of the content that isn't an overlay from assistive technology.\r\n */\r\n private hideNonDialogContentFromAssistiveTechnology() {\r\n const overlayContainer = this.overlayContainer.getContainerElement()\r\n\r\n // Ensure that the overlay container is attached to the DOM.\r\n if (overlayContainer.parentElement) {\r\n const siblings = overlayContainer.parentElement.children\r\n\r\n for (let i = siblings.length - 1; i > -1; i--) {\r\n const sibling = siblings[i]\r\n\r\n if (\r\n sibling !== overlayContainer &&\r\n sibling.nodeName !== 'SCRIPT' &&\r\n sibling.nodeName !== 'STYLE' &&\r\n !sibling.hasAttribute('aria-live')\r\n ) {\r\n this.ariaHiddenElements.set(\r\n sibling,\r\n sibling.getAttribute('aria-hidden')\r\n )\r\n sibling.setAttribute('aria-hidden', 'true')\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Applies default options to the dialog config.\r\n *\r\n * @param config Config to be modified.\r\n * @param defaultOptions Default config setting\r\n * @returns The new configuration object.\r\n * @internal\r\n */\r\nfunction applyConfigDefaults(\r\n config?: DialogConfig,\r\n defaultOptions?: DialogConfig\r\n): DialogConfig {\r\n return extendObject(new DialogConfig(), config, defaultOptions)\r\n}\r\n","import { coerceArray } from '@angular/cdk/coercion'\r\nimport { Overlay, OverlayConfig, OverlayRef, PositionStrategy, ScrollStrategy } from '@angular/cdk/overlay'\r\nimport { ComponentPortal } from '@angular/cdk/portal'\r\nimport { Component, ComponentRef, InjectionToken, NgZone, OnDestroy, ViewContainerRef, DOCUMENT, input, output, computed, signal, linkedSignal, effect, inject } from '@angular/core'\r\nimport { merge, Subscription } from 'rxjs'\r\nimport { filter, take } from 'rxjs/operators'\r\nimport { DateTimeDirective, PickerMode, PickerType } from '../../class/date-time.class'\r\nimport { DialogRef } from '../../class/dialog-ref.class'\r\nimport { DialogService } from '../../dialog/dialog.service'\r\nimport { DateTimeContainerComponent } from '../date-time-picker-container/date-time-picker-container.component'\r\nimport { DateTimeInputDirective } from '../date-time-picker-input.directive'\r\n\r\n/**\r\n * Injection token that determines the scroll handling while the dtPicker is open.\r\n *\r\n * @internal\r\n */\r\nexport const NXT_DTPICKER_SCROLL_STRATEGY = new InjectionToken<\r\n () => ScrollStrategy\r\n>('NXT_DTPICKER_SCROLL_STRATEGY')\r\n\r\n@Component({\r\n selector: 'nxt-date-time',\r\n templateUrl: './date-time-picker.component.html',\r\n styleUrls: ['./date-time-picker.component.scss'],\r\n preserveWhitespaces: false\r\n})\r\nexport class DateTimeComponent<T> extends DateTimeDirective<T> implements OnDestroy {\r\n private readonly overlay = inject(Overlay)\r\n private readonly viewContainerRef = inject(ViewContainerRef)\r\n private readonly dialogService = inject(DialogService)\r\n private readonly ngZone = inject(NgZone)\r\n private readonly defaultScrollStrategy = inject(NXT_DTPICKER_SCROLL_STRATEGY, { optional: true }) ?? (() => this.overlay.scrollStrategies.block())\r\n private readonly document = inject<Document>(DOCUMENT, { optional: true })\r\n\r\n /** Custom class for the picker backdrop */\r\n readonly backdropClass = input<string | string[]>()\r\n\r\n /** Custom class for the picker overlay pane */\r\n readonly panelClass = input<string | string[]>()\r\n\r\n /**\r\n * The date to show when picker opens\r\n *\r\n * Defaults to selected date (if available) or current date.\r\n */\r\n readonly _startAt = input<T | undefined, T | undefined>(undefined, {\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n alias: 'startAt',\r\n transform: date => this.getValidDate(\r\n this.dateTimeAdapter.deserialize(date)\r\n )\r\n })\r\n readonly startAt = computed(() => {\r\n // If an explicit startAt is set we start there, otherwise we start at whatever the currently\r\n // selected value is.\r\n const startAt = this._startAt()\r\n if (startAt) {\r\n return startAt\r\n }\r\n\r\n const dtInput = this.dtInput()\r\n if (dtInput) {\r\n if (dtInput.selectMode() === 'single') {\r\n return dtInput.value()\r\n } else if (\r\n dtInput.selectMode() === 'range' ||\r\n dtInput.selectMode() === 'rangeFrom'\r\n ) {\r\n return dtInput.values()[0]\r\n } else if (dtInput.selectMode() === 'rangeTo') {\r\n return dtInput.values()[1]\r\n }\r\n }\r\n return\r\n })\r\n\r\n /**\r\n * Set the type of the dateTime picker\r\n *\r\n * - `'both'` - show both calendar and timer\r\n * - `'calendar'` - show only calendar\r\n * - `'timer'` - show only timer\r\n */\r\n readonly pickerType = input<PickerType>('both')\r\n\r\n /**\r\n * The style the picker would open as\r\n *\r\n * - `'popup'` - display picker attached to the trigger element\r\n * - `'dialog'` - display picker as a dialog\r\n */\r\n readonly pickerMode = input<PickerMode, PickerMode>('popup', {\r\n transform: mode => {\r\n if (mode === 'popup') {\r\n return mode\r\n } else {\r\n return 'dialog'\r\n }\r\n }\r\n })\r\n\r\n /** Whether the date time picker should be disabled */\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n readonly _disabled = input<boolean | undefined>(undefined, { alias: 'disabled' })\r\n readonly disabled = linkedSignal({\r\n source: () => this._disabled(),\r\n computation: value => value ?? !!this.dtInput()?.disabled()\r\n })\r\n\r\n /** Whether the calendar is open */\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n readonly _isOpen = input<boolean>(false, { alias: 'isOpen' })\r\n readonly isOpen = signal(false)\r\n\r\n /**\r\n * The scroll strategy when the picker is open (see [CDK documentation](https://material.angular.io/cdk/overlay/overview#scroll-strategies))\r\n */\r\n readonly scrollStrategy = input<ScrollStrategy>()\r\n\r\n /**\r\n * Callback when the picker is opened\r\n */\r\n // eslint-disable-next-line @angular-eslint/no-output-rename\r\n readonly afterPickerOpened = output<void>({ alias: 'open' })\r\n\r\n /**\r\n * Callback when the picker is closed\r\n */\r\n // eslint-disable-next-line @angular-eslint/no-output-rename\r\n readonly afterPickerClosed = output<void>({ alias: 'close' })\r\n\r\n /**\r\n * Emits selected year in multi-year view\r\n *\r\n * This doesn't imply a change on the selected date.\r\n */\r\n readonly yearSelected = output<T>()\r\n\r\n /**\r\n * Emits selected month in year view\r\n *\r\n * This doesn't imply a change on the selected date.\r\n */\r\n readonly monthSelected = output<T>()\r\n\r\n /**\r\n * Emits when picker open state changes\r\n */\r\n readonly isOpenChange = output<boolean>()\r\n\r\n /**\r\n * Emit when the selected value has been confirmed\r\n */\r\n readonly confirmSelectedChange = output<Array<T | undefined> | T>()\r\n\r\n /**\r\n * Emits when the date time picker is disabled\r\n */\r\n readonly disabledChange = output<boolean>()\r\n\r\n private pickerContainerPortal?: ComponentPortal<\r\n DateTimeContainerComponent<T>\r\n >\r\n private pickerContainer?: DateTimeContainerComponent<T>\r\n private popupRef?: OverlayRef\r\n private dialogRef?: DialogRef<DateTimeContainerComponent<T>>\r\n private hidePickerStreamSub?: Subscription\r\n private confirmSelectedStreamSub?: Subscription\r\n private pickerOpenedStreamSub?: Subscription\r\n\r\n /** The element that was focused before the date time picker was isOpen */\r\n private focusedElementBeforeOpen?: HTMLElement\r\n\r\n private readonly _dtInput = signal<DateTimeInputDirective<T> | undefined>(undefined)\r\n readonly dtInput = this._dtInput.asReadonly()\r\n\r\n private readonly valueChange = computed(() => this._dtInput()?.valueChange)\r\n\r\n readonly selected = signal<T | undefined>(undefined)\r\n\r\n readonly selecteds = signal(new Array<T | undefined>())\r\n\r\n /** The minimum selectable date */\r\n readonly min = computed(() => this.dtInput()?.min())\r\n\r\n /** The maximum selectable date */\r\n readonly max = computed(() => this.dtInput()?.max())\r\n\r\n readonly dateTimeFilter = computed(() => this.dtInput()?.dateTimeFilter())\r\n\r\n readonly selectMode = computed(() => this.dtInput()?.selectMode())\r\n\r\n readonly isInSingleMode = computed(() => !!this.dtInput()?.isInSingleMode())\r\n\r\n readonly isInRangeMode = computed(() => !!this.dtInput()?.isInRangeMode())\r\n\r\n constructor() {\r\n super()\r\n effect((registerCleanup) => {\r\n const vc = this.valueChange()\r\n if (vc) {\r\n const sub = vc.subscribe((value) => {\r\n if (Array.isArray(value)) {\r\n this.selecteds.set(value)\r\n } else {\r\n this.selected.set(value)\r\n }\r\n })\r\n registerCleanup(() => sub.unsubscribe())\r\n }\r\n })\r\n\r\n let disabled: boolean | undefined\r\n effect(() => {\r\n const value = this.disabled()\r\n if (disabled != undefined) {\r\n this.disabledChange.emit(value)\r\n }\r\n disabled = value\r\n })\r\n\r\n let isOpen: boolean | undefined\r\n effect(() => {\r\n const _isOpen = this._isOpen()\r\n if (isOpen === undefined) {\r\n isOpen = _isOpen\r\n if (isOpen)\r\n this.open()\r\n return\r\n }\r\n if (isOpen != _isOpen) {\r\n if ((isOpen = _isOpen)) {\r\n this.open()\r\n } else {\r\n this.close()\r\n }\r\n }\r\n })\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.close()\r\n\r\n if (this.popupRef) {\r\n this.popupRef.dispose()\r\n }\r\n\r\n this.hidePickerStreamSub?.unsubscribe()\r\n this.hidePickerStreamSub = undefined\r\n\r\n this.confirmSelectedStreamSub?.unsubscribe()\r\n this.confirmSelectedStreamSub = undefined\r\n\r\n this.pickerOpenedStreamSub?.unsubscribe()\r\n this.pickerOpenedStreamSub = undefined\r\n }\r\n\r\n registerInput(inputDirective: DateTimeInputDirective<T>): void {\r\n if (this._dtInput()) {\r\n throw Error(\r\n 'A Nxt DateTimePicker can only be associated with a single input.'\r\n )\r\n }\r\n\r\n this._dtInput.set(inputDirective)\r\n }\r\n\r\n open(): void {\r\n if (this.isOpen() || this.disabled()) {\r\n return\r\n }\r\n\r\n if (!this._dtInput()) {\r\n throw Error(\r\n 'Attempted to open an DateTimePicker with no associated input.'\r\n )\r\n }\r\n\r\n if (this.document) {\r\n this.focusedElementBeforeOpen = this.document.activeElement as HTMLElement\r\n }\r\n\r\n // reset the picker selected value\r\n if (this.isInSingleMode()) {\r\n this.selected.set(this._dtInput()!.value())\r\n } else if (this.isInRangeMode()) {\r\n this.selecteds.set(this._dtInput()!.values())\r\n }\r\n\r\n // when the picker is open , we make sure the picker's current selected time value\r\n // is the same as the _startAt time value.\r\n if (this.selected() && this.pickerType() !== 'calendar' && this._startAt()) {\r\n this.selected.set(this.dateTimeAdapter.createDate(\r\n this.dateTimeAdapter.getYear(this.selected()),\r\n this.dateTimeAdapter.getMonth(this.selected()),\r\n this.dateTimeAdapter.getDate(this.selected()),\r\n this.dateTimeAdapter.getHours(this._startAt()),\r\n this.dateTimeAdapter.getMinutes(this._startAt()),\r\n this.dateTimeAdapter.getSeconds(this._startAt())\r\n ))\r\n }\r\n\r\n if (this.pickerMode() === 'dialog')\r\n this.openAsDialog()\r\n else\r\n this.openAsPopup()\r\n\r\n if (this.pickerContainer)\r\n this.pickerContainer.picker.set(this)\r\n\r\n // Listen to picker container's hidePickerStream\r\n this.hidePickerStreamSub = this.pickerContainer?.hidePickerStream.subscribe(\r\n () => {\r\n this.close()\r\n }\r\n )\r\n\r\n // Listen to picker container's confirmSelectedStream\r\n this.confirmSelectedStreamSub = this.pickerContainer?.confirmSelectedStream.subscribe(\r\n (event: any) => {\r\n this.confirmSelect(event)\r\n }\r\n )\r\n }\r\n\r\n /**\r\n * Selects the given date\r\n */\r\n select(date: T[] | T): void {\r\n if (Array.isArray(date)) {\r\n this.selecteds.set([...date])\r\n } else {\r\n this.selected.set(date)\r\n }\r\n\r\n /**\r\n * Cases in which automatically confirm the select when date or dates are selected:\r\n * 1) picker mode is NOT 'dialog'\r\n * 2) picker type is 'calendar' and selectMode is 'single'.\r\n * 3) picker type is 'calendar' and selectMode is 'range' and\r\n * the 'selecteds' has 'from'(selecteds[0]) and 'to'(selecteds[1]) values.\r\n * 4) selectMode is 'rangeFrom' and selecteds[0] has value.\r\n * 5) selectMode is 'rangeTo' and selecteds[1] has value.\r\n */\r\n if (\r\n this.pickerMode() !== 'dialog' &&\r\n this.pickerType() === 'calendar' &&\r\n ((this.selectMode() === 'single' && this.selected()) ||\r\n (this.selectMode() === 'rangeFrom' && this.selecteds()[0]) ||\r\n (this.selectMode() === 'rangeTo' && this.selecteds()[1]) ||\r\n (this.selectMode() === 'range' &&\r\n this.selecteds()[0] &&\r\n this.selecteds()[1]))\r\n ) {\r\n this.confirmSelect()\r\n }\r\n }\r\n\r\n /**\r\n * Emits the selected year in multi-year view\r\n */\r\n selectYear(normalizedYear: T): void {\r\n this.yearSelected.emit(normalizedYear)\r\n }\r\n\r\n /**\r\n * Emits selected month in year view\r\n */\r\n selectMonth(normalizedMonth: T): void {\r\n this.monthSelected.emit(normalizedMonth)\r\n }\r\n\r\n /**\r\n * Hide the picker\r\n */\r\n close(): void {\r\n if (!this.isOpen()) {\r\n return\r\n }\r\n\r\n if (this.popupRef && this.popupRef.hasAttached()) {\r\n this.popupRef.detach()\r\n }\r\n\r\n if (\r\n this.pickerContainerPortal &&\r\n this.pickerContainerPortal.isAttached\r\n ) {\r\n this.pickerContainerPortal.detach()\r\n }\r\n\r\n this.hidePickerStreamSub?.unsubscribe()\r\n this.hidePickerStreamSub = undefined\r\n\r\n this.confirmSelectedStreamSub?.unsubscribe()\r\n this.confirmSelectedStreamSub = undefined\r\n\r\n this.pickerOpenedStreamSub?.unsubscribe()\r\n this.pickerOpenedStreamSub = undefined\r\n\r\n if (this.dialogRef) {\r\n this.dialogRef.close()\r\n this.dialogRef = undefined\r\n }\r\n\r\n const completeClose = () => {\r\n if (this.isOpen()) {\r\n this.isOpen.set(false)\r\n this.isOpenChange.emit(this.isOpen())\r\n this.afterPickerClosed.emit(undefined)\r\n this.focusedElementBeforeOpen = undefined\r\n }\r\n }\r\n\r\n if (\r\n this.focusedElementBeforeOpen &&\r\n typeof this.focusedElementBeforeOpen.focus === 'function'\r\n ) {\r\n // Because IE moves focus asynchronously, we can't count on it being restored before we've\r\n // marked the datepicker as closed. If the event fires out of sequence and the element that\r\n // we're refocusing opens the datepicker on focus, the user could be stuck with not being\r\n // able to close the calendar at all. We work around it by making the logic, that marks\r\n // the datepicker as closed, async as well.\r\n this.focusedElementBeforeOpen.focus()\r\n setTimeout(completeClose)\r\n } else {\r\n completeClose()\r\n }\r\n }\r\n\r\n /**\r\n * Confirm the selected value\r\n */\r\n confirmSelect(_event?: any): void {\r\n if (this.isInSingleMode()) {\r\n const selected =\r\n this.selected() || this.startAt() || this.dateTimeAdapter.now()\r\n this.confirmSelectedChange.emit(selected)\r\n } else if (this.isInRangeMode()) {\r\n this.confirmSelectedChange.emit(this.selecteds())\r\n }\r\n\r\n this.close()\r\n return\r\n }\r\n\r\n /**\r\n * Open the picker as a dialog\r\n */\r\n private openAsDialog(): void {\r\n const backdropClass = this.backdropClass()\r\n const panelClass = this.panelClass()\r\n this.dialogRef = this.dialogService.open(\r\n DateTimeContainerComponent,\r\n {\r\n autoFocus: false,\r\n backdropClass: [\r\n 'cdk-overlay-dark-backdrop',\r\n ...backdropClass ? coerceArray(backdropClass) : []\r\n ],\r\n paneClass: [\r\n 'nxt-dt-dialog',\r\n ...panelClass ? coerceArray(panelClass) : []\r\n ],\r\n viewContainerRef: this.viewContainerRef,\r\n scrollStrategy: this.scrollStrategy() || this.defaultScrollStrategy()\r\n }\r\n )\r\n this.pickerContainer = this.dialogRef.componentInstance\r\n\r\n this.dialogRef.afterOpen().subscribe(() => {\r\n this.isOpen.set(true)\r\n this.isOpenChange.emit(this.isOpen())\r\n this.afterPickerOpened.emit(undefined)\r\n })\r\n this.dialogRef.afterClosed().subscribe(() => this.close())\r\n }\r\n\r\n /**\r\n * Open the picker as popup\r\n */\r\n private openAsPopup(): void {\r\n if (!this.pickerContainerPortal) {\r\n this.pickerContainerPortal = new ComponentPortal<\r\n DateTimeContainerComponent<T>\r\n >(DateTimeContainerComponent, this.viewContainerRef)\r\n }\r\n\r\n if (!this.popupRef) {\r\n this.createPopup()\r\n }\r\n\r\n if (!this.popupRef?.hasAttached()) {\r\n const componentRef: ComponentRef<\r\n DateTimeContainerComponent<T>\r\n > | undefined = this.popupRef?.attach(this.pickerContainerPortal)\r\n this.pickerContainer = componentRef?.instance\r\n\r\n // Update the position once the calendar has rendered.\r\n this.ngZone.onStable\r\n .asObservable()\r\n .pipe(take(1))\r\n .subscribe(() => {\r\n this.popupRef?.updatePosition()\r\n })\r\n\r\n // emit open stream\r\n this.pickerOpenedStreamSub = this.pickerContainer?.pickerOpenedStream\r\n .pipe(take(1))\r\n .subscribe(() => {\r\n this.isOpen.set(true)\r\n this.isOpenChange.emit(this.isOpen())\r\n this.afterPickerOpened.emit(undefined)\r\n })\r\n }\r\n }\r\n\r\n private createPopup(): void {\r\n const backdropClass = this.backdropClass()\r\n const panelClass = this.panelClass()\r\n const overlayConfig = new OverlayConfig({\r\n positionStrategy: this.createPopupPositionStrategy(),\r\n hasBackdrop: true,\r\n backdropClass: [\r\n 'cdk-overlay-transparent-backdrop',\r\n ...backdropClass ? coerceArray(backdropClass) : []\r\n ],\r\n scrollStrategy: this.scrollStrategy() || this.defaultScrollStrategy(),\r\n panelClass: [\r\n 'nxt-dt-popup',\r\n ...panelClass ? coerceArray(panelClass) : []\r\n ]\r\n })\r\n\r\n this.popupRef = this.overlay.create(overlayConfig)\r\n\r\n merge(\r\n this.popupRef.backdropClick(),\r\n this.popupRef.detachments(),\r\n this.popupRef\r\n .keydownEvents()\r\n .pipe(\r\n filter(\r\n event =>\r\n !!(event.code.toLowerCase() === 'escape' ||\r\n (this._dtInput() &&\r\n event.altKey &&\r\n event.code.toLowerCase() === 'arrowup'))\r\n )\r\n )\r\n ).subscribe(() => this.close())\r\n }\r\n\r\n /**\r\n * Create the popup PositionStrategy.\r\n */\r\n private createPopupPositionStrategy(): PositionStrategy | undefined {\r\n if (this._dtInput())\r\n return this.overlay\r\n .position()\r\n .flexibleConnectedTo(this._dtInput()!.elementRef)\r\n .withTransformOriginOn('.nxt-dt-container')\r\n .withFlexibleDimensions(false)\r\n .withPush(false)\r\n .withPositions([\r\n {\r\n originX: 'start',\r\n originY: 'bottom',\r\n overlayX: 'start',\r\n overlayY: 'top'\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'bottom'\r\n },\r\n {\r\n originX: 'end',\r\n originY: 'bottom',\r\n overlayX: 'end',\r\n overlayY: 'top'\r\n },\r\n {\r\n originX: 'end',\r\n originY: 'top',\r\n overlayX: 'end',\r\n overlayY: 'bottom'\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n offsetY: -176\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n offsetY: -352\r\n }\r\n ])\r\n return\r\n }\r\n}\r\n","\r\n","import { NgModule } from '@angular/core'\r\nimport { MonthViewComponent } from './calendar-month-view/calendar-month-view.component'\r\nimport { MultiYearViewComponent } from './calendar-multi-year-view/calendar-multi-year-view.component'\r\nimport { YearViewComponent } from './calendar-year-view/calendar-year-view.component'\r\nimport { CalendarComponent } from './calendar/calendar.component'\r\nimport { DateTimeInlineComponent } from './date-time-inline/date-time-inline.component'\r\nimport { DateTimeInputDirective } from './date-time-picker-input.directive'\r\nimport { DateTimeTriggerDirective } from './date-time-picker-trigger.directive'\r\nimport { DateTimeComponent } from './date-time-picker/date-time-picker.component'\r\nimport { TimerComponent } from './timer/timer.component'\r\n\r\n/** @deprecated use standalone imports */\r\n@NgModule({\r\n imports: [\r\n CalendarComponent,\r\n TimerComponent,\r\n DateTimeTriggerDirective,\r\n DateTimeInputDirective,\r\n DateTimeComponent,\r\n DateTimeInlineComponent,\r\n MultiYearViewComponent,\r\n YearViewComponent,\r\n MonthViewComponent\r\n ],\r\n exports: [\r\n CalendarComponent,\r\n TimerComponent,\r\n DateTimeTriggerDirective,\r\n DateTimeInputDirective,\r\n DateTimeComponent,\r\n DateTimeInlineComponent,\r\n MultiYearViewComponent,\r\n YearViewComponent,\r\n MonthViewComponent\r\n ]\r\n})\r\nexport class DateTimeModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["NXT_DATETIME_VALUE_ACCESSOR"],"mappings":"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"}
1
+ {"version":3,"file":"nxt-pick-datetime.mjs","sources":["../../../packages/pick-datetime/src/lib/class/date-time-adapter.class.ts","../../../packages/pick-datetime/src/lib/class/date-time-format.class.ts","../../../packages/pick-datetime/src/lib/date-time/calendar-body/calendar-body.component.ts","../../../packages/pick-datetime/src/lib/date-time/calendar-body/calendar-body.component.html","../../../packages/pick-datetime/src/lib/date-time/calendar-month-view/calendar-month-view.component.ts","../../../packages/pick-datetime/src/lib/date-time/calendar-month-view/calendar-month-view.component.html","../../../packages/pick-datetime/src/lib/date-time/date-time-picker-intl.service.ts","../../../packages/pick-datetime/src/lib/date-time/calendar-multi-year-view/calendar-multi-year-view.component.ts","../../../packages/pick-datetime/src/lib/date-time/calendar-multi-year-view/calendar-multi-year-view.component.html","../../../packages/pick-datetime/src/lib/date-time/calendar-year-view/calendar-year-view.component.ts","../../../packages/pick-datetime/src/lib/date-time/calendar-year-view/calendar-year-view.component.html","../../../packages/pick-datetime/src/lib/date-time/calendar/calendar.component.ts","../../../packages/pick-datetime/src/lib/date-time/calendar/calendar.component.html","../../../packages/pick-datetime/src/lib/class/date-time.class.ts","../../../packages/pick-datetime/src/lib/date-time/number-fixed-len.pipe.ts","../../../packages/pick-datetime/src/lib/date-time/timer-box/timer-box.component.ts","../../../packages/pick-datetime/src/lib/date-time/timer-box/timer-box.component.html","../../../packages/pick-datetime/src/lib/date-time/timer/timer.component.ts","../../../packages/pick-datetime/src/lib/date-time/timer/timer.component.html","../../../packages/pick-datetime/src/lib/date-time/date-time-picker-container/date-time-picker-container.component.ts","../../../packages/pick-datetime/src/lib/date-time/date-time-picker-container/date-time-picker-container.component.html","../../../packages/pick-datetime/src/lib/date-time/date-time-inline/date-time-inline.component.ts","../../../packages/pick-datetime/src/lib/date-time/date-time-inline/date-time-inline.component.html","../../../packages/pick-datetime/src/lib/date-time/date-time-picker-input.directive.ts","../../../packages/pick-datetime/src/lib/date-time/date-time-picker-trigger.directive.ts","../../../packages/pick-datetime/src/lib/class/dialog-config.class.ts","../../../packages/pick-datetime/src/lib/class/dialog-ref.class.ts","../../../packages/pick-datetime/src/lib/utils/object.ts","../../../packages/pick-datetime/src/lib/dialog/dialog-container/dialog-container.component.ts","../../../packages/pick-datetime/src/lib/dialog/dialog-container/dialog-container.component.html","../../../packages/pick-datetime/src/lib/dialog/dialog.service.ts","../../../packages/pick-datetime/src/lib/date-time/date-time-picker/date-time-picker.component.ts","../../../packages/pick-datetime/src/lib/date-time/date-time-picker/date-time-picker.component.html","../../../packages/pick-datetime/src/nxt-pick-datetime.ts"],"sourcesContent":["import { signal } from '@angular/core'\r\n\r\nexport abstract class DateTimeAdapter<T> {\r\n /** The locale to use for all dates */\r\n protected readonly locale = signal<any>(undefined)\r\n\r\n /** total milliseconds in a day */\r\n protected readonly millisecondsInDay = 86400000\r\n\r\n /** total milliseconds in a minute */\r\n protected readonly milliseondsInMinute = 60000\r\n\r\n /**\r\n * Get the year of the given date\r\n */\r\n abstract getYear(date?: T): number\r\n\r\n /**\r\n * Get the month of the given date\r\n * 0 -- January\r\n * 11 -- December\r\n * */\r\n abstract getMonth(date?: T): number\r\n\r\n /**\r\n * Get the day of the week of the given date\r\n * 0 -- Sunday\r\n * 6 -- Saturday\r\n * */\r\n abstract getDay(date?: T): number\r\n\r\n /**\r\n * Get the day num of the given date\r\n */\r\n abstract getDate(date?: T): number\r\n\r\n /**\r\n * Get the hours of the given date\r\n */\r\n abstract getHours(date?: T): number\r\n\r\n /**\r\n * Get the minutes of the given date\r\n */\r\n abstract getMinutes(date?: T): number\r\n\r\n /**\r\n * Get the seconds of the given date\r\n */\r\n abstract getSeconds(date?: T): number\r\n\r\n /**\r\n * Get the milliseconds timestamp of the given date\r\n */\r\n abstract getTime(date?: T): number\r\n\r\n /**\r\n * Gets the number of days in the month of the given date.\r\n */\r\n abstract getNumDaysInMonth(date?: T): number\r\n\r\n /**\r\n * Get the number of calendar days between the given dates.\r\n * If dateLeft is before dateRight, it would return positive value\r\n * If dateLeft is after dateRight, it would return negative value\r\n */\r\n abstract differenceInCalendarDays(dateLeft?: T, dateRight?: T): number | undefined\r\n\r\n /**\r\n * Gets the name for the year of the given date.\r\n */\r\n abstract getYearName(date?: T): string\r\n\r\n /**\r\n * Get a list of month names\r\n */\r\n abstract getMonthNames(style: 'long' | 'short' | 'narrow'): string[]\r\n\r\n /**\r\n * Get a list of week names\r\n */\r\n abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[]\r\n\r\n /**\r\n * Gets a list of names for the dates of the month.\r\n */\r\n abstract getDateNames(): string[]\r\n\r\n /**\r\n * Return a Date object as a string, using the ISO standard\r\n */\r\n abstract toIso8601(date: T): string\r\n\r\n /**\r\n * Check if the give dates are equal\r\n */\r\n abstract isEqual(dateLeft?: T, dateRight?: T): boolean\r\n\r\n /**\r\n * Check if the give dates are the same day\r\n */\r\n abstract isSameDay(dateLeft?: T, dateRight?: T): boolean\r\n\r\n /**\r\n * Checks whether the given date is valid.\r\n */\r\n abstract isValid(date?: T): boolean\r\n\r\n /**\r\n * Gets date instance that is not valid.\r\n */\r\n abstract invalid(): T\r\n\r\n /**\r\n * Checks whether the given object is considered a date instance by this DateTimeAdapter.\r\n */\r\n abstract isDateInstance(obj: any): boolean\r\n\r\n /**\r\n * Add the specified number of years to the given date\r\n */\r\n abstract addCalendarYears(date: T | undefined, amount: number): T\r\n\r\n /**\r\n * Add the specified number of months to the given date\r\n */\r\n abstract addCalendarMonths(date: T | undefined, amount: number): T\r\n\r\n /**\r\n * Add the specified number of days to the given date\r\n */\r\n abstract addCalendarDays(date: T | undefined, amount: number): T\r\n\r\n /**\r\n * Set the hours to the given date.\r\n */\r\n abstract setHours(date: T | undefined, amount: number): T\r\n\r\n /**\r\n * Set the minutes to the given date.\r\n */\r\n abstract setMinutes(date: T | undefined, amount: number): T\r\n\r\n /**\r\n * Set the seconds to the given date.\r\n */\r\n abstract setSeconds(date: T | undefined, amount: number): T\r\n\r\n /**\r\n * Creates a date with the given year, month, date, hour, minute and second. Does not allow over/under-flow of the\r\n * month and date.\r\n */\r\n abstract createDate(year: number, month: number, date: number): T\r\n abstract createDate(\r\n year: number,\r\n month: number,\r\n date: number,\r\n hours: number,\r\n minutes: number,\r\n seconds: number\r\n ): T\r\n\r\n /**\r\n * Clone the given date\r\n */\r\n abstract clone(date?: T): T\r\n\r\n /**\r\n * Get a new moment\r\n * */\r\n abstract now(): T\r\n\r\n /**\r\n * Formats a date as a string according to the given format.\r\n */\r\n abstract format(date: T | undefined, displayFormat: any): string\r\n\r\n /**\r\n * Parse a user-provided value to a Date Object\r\n */\r\n abstract parse(value: any, parseFormat: any): T | undefined\r\n\r\n /**\r\n * Compare two given dates\r\n * 1 if the first date is after the second,\r\n * -1 if the first date is before the second\r\n * 0 if dates are equal.\r\n * */\r\n compare(first?: T, second?: T): number {\r\n if (!this.isValid(first) || !this.isValid(second)) {\r\n throw Error('JSNativeDate: Cannot compare invalid dates.')\r\n }\r\n\r\n const dateFirst = this.clone(first)\r\n const dateSecond = this.clone(second)\r\n\r\n const diff = this.getTime(dateFirst) - this.getTime(dateSecond)\r\n\r\n if (diff < 0) {\r\n return -1\r\n } else if (diff > 0) {\r\n return 1\r\n } else {\r\n // Return 0 if diff is 0; return NaN if diff is NaN\r\n return diff\r\n }\r\n }\r\n\r\n /**\r\n * Check if two given dates are in the same year\r\n * 1 if the first date's year is after the second,\r\n * -1 if the first date's year is before the second\r\n * 0 if two given dates are in the same year\r\n * */\r\n compareYear(first?: T, second?: T): number {\r\n if (!this.isValid(first) || !this.isValid(second)) {\r\n throw Error('JSNativeDate: Cannot compare invalid dates.')\r\n }\r\n\r\n const yearLeft = this.getYear(first)\r\n const yearRight = this.getYear(second)\r\n\r\n const diff = yearLeft - yearRight\r\n\r\n if (diff < 0) {\r\n return -1\r\n } else if (diff > 0) {\r\n return 1\r\n } else {\r\n return 0\r\n }\r\n }\r\n\r\n /**\r\n * Attempts to deserialize a value to a valid date object. This is different from parsing in that\r\n * deserialize should only accept non-ambiguous, locale-independent formats (e.g. a ISO 8601\r\n * string). The default implementation does not allow any deserialization, it simply checks that\r\n * the given value is already a valid date object or null. The `<mat-datepicker>` will call this\r\n * method on all of it's `input` properties that accept dates. It is therefore possible to\r\n * support passing values from your backend directly to these properties by overriding this method\r\n * to also deserialize the format used by your backend.\r\n */\r\n deserialize(value: any): T | undefined {\r\n if (\r\n value == null || value == undefined ||\r\n (this.isDateInstance(value) && this.isValid(value))\r\n ) {\r\n return value\r\n }\r\n return this.invalid()\r\n }\r\n\r\n /**\r\n * Sets the locale used for all dates.\r\n */\r\n setLocale(locale: any) {\r\n this.locale.set(locale)\r\n }\r\n\r\n /**\r\n * Clamp the given date between min and max dates.\r\n */\r\n clampDate(date: T, min?: T, max?: T): T {\r\n if (min && this.compare(date, min) < 0) {\r\n return min\r\n }\r\n if (max && this.compare(date, max) > 0) {\r\n return max\r\n }\r\n return date\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core'\r\n\r\nexport interface DateTimeFormats {\r\n parseInput: any\r\n fullPickerInput: any\r\n datePickerInput: any\r\n timePickerInput: any\r\n monthYearLabel: any\r\n dateA11yLabel: any\r\n monthYearA11yLabel: any\r\n}\r\n\r\n/** InjectionToken for date time picker that can be used to override default format */\r\nexport const NXT_DATE_TIME_FORMATS = new InjectionToken<DateTimeFormats>('NXT_DATE_TIME_FORMATS')\r\n","import { Component, ElementRef, NgZone, computed, input, output, inject, afterNextRender, Injector, DestroyRef } from '@angular/core'\nimport { SelectMode } from '../../class/date-time.class'\n\nexport class CalendarCell {\n constructor(\n public value: number,\n public displayValue: string,\n public ariaLabel: string,\n public enabled: boolean,\n public out: boolean = false,\n public cellClass: string = ''\n ) { }\n}\n\n/** @internal */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[nxtDateTimeCalendarBody]',\n exportAs: 'nxtDateTimeCalendarBody',\n templateUrl: './calendar-body.component.html',\n styleUrls: ['./calendar-body.component.scss'],\n preserveWhitespaces: false,\n host: {\n '[class.nxt-dt-calendar-body]': 'true'\n }\n\n})\nexport class CalendarBodyComponent {\n private readonly elmRef = inject<ElementRef<HTMLElement>>(ElementRef)\n private readonly ngZone = inject(NgZone)\n private readonly injector = inject(Injector)\n private readonly destroyRef = inject(DestroyRef)\n\n /**\n * The cell number of the active cell in the table.\n */\n readonly activeCell = input<number>(0)\n\n /**\n * The cells to display in the table.\n */\n readonly rows = input<CalendarCell[][]>()\n\n /**\n * The number of columns in the table.\n */\n readonly numCols = input<number>(7)\n\n /**\n * The ratio (width / height) to use for the cells in the table.\n */\n readonly cellRatio = input<number>(1)\n\n /**\n * The value in the table that corresponds to today.\n */\n readonly todayValue = input<number>()\n\n /**\n * The value in the table that is currently selected.\n */\n readonly selectedValues = input<Array<number | undefined>>()\n\n /**\n * Current picker select mode\n */\n readonly selectMode = input<SelectMode>()\n\n /**\n * Emit when a calendar cell is selected\n */\n readonly select = output<CalendarCell>()\n\n readonly isInSingleMode = computed(() => this.selectMode() === 'single')\n\n readonly isInRangeMode = computed(() => {\n const selectMode = this.selectMode()\n return (\n selectMode === 'range' ||\n selectMode === 'rangeFrom' ||\n selectMode === 'rangeTo'\n )\n })\n\n selectCell(cell: CalendarCell): void {\n this.select.emit(cell)\n }\n\n isActiveCell(rowIndex: number, colIndex: number): boolean {\n const cellNumber = rowIndex * this.numCols() + colIndex\n return cellNumber === this.activeCell()\n }\n\n /**\n * Check if the cell is selected\n */\n isSelected(value: number): boolean {\n const selectedValues = this.selectedValues()\n if (!selectedValues || selectedValues.length === 0) {\n return false\n }\n\n if (this.isInSingleMode()) {\n return value === selectedValues[0]\n }\n\n if (this.isInRangeMode()) {\n const fromValue = selectedValues[0]\n const toValue = selectedValues[1]\n\n return value === fromValue || value === toValue\n }\n return false\n }\n\n /**\n * Check if the cell in the range\n */\n isInRange(value: number): boolean {\n if (this.isInRangeMode()) {\n const selectedValues = this.selectedValues()\n const fromValue = selectedValues?.[0]\n const toValue = selectedValues?.[1]\n\n if (fromValue !== undefined && toValue !== undefined) {\n return value >= fromValue && value <= toValue\n } else {\n return value === fromValue || value === toValue\n }\n }\n return false\n }\n\n /**\n * Check if the cell is the range from\n */\n isRangeFrom(value: number): boolean {\n if (this.isInRangeMode()) {\n const fromValue = this.selectedValues()?.[0]\n return fromValue !== undefined && value === fromValue\n }\n return false\n }\n\n /**\n * Check if the cell is the range to\n */\n isRangeTo(value: number): boolean {\n if (this.isInRangeMode()) {\n const toValue = this.selectedValues()?.[1]\n return toValue !== undefined && value === toValue\n }\n return false\n }\n\n /**\n * Focus to a active cell\n */\n focusActiveCell(): void {\n if (!this.destroyRef.destroyed)\n afterNextRender(() => {\n this.ngZone.runOutsideAngular(() => {\n this.elmRef.nativeElement\n ?.querySelector<HTMLElement>('.nxt-dt-calendar-cell-active')\n ?.focus()\n })\n }, {\n injector: this.injector\n })\n }\n}\n","@for (row of rows(); track rowIndex; let rowIndex = $index) {\r\n<tr role=\"row\">\r\n @for (item of row; track colIndex; let colIndex = $index) {\r\n <td class=\"nxt-dt-calendar-cell {{item.cellClass}}\"\r\n [tabindex]=\"isActiveCell(rowIndex, colIndex) ? 0 : -1\"\r\n [class.nxt-dt-calendar-cell-active]=\"isActiveCell(rowIndex, colIndex)\"\r\n [class.nxt-dt-calendar-cell-disabled]=\"!item.enabled\"\r\n [class.nxt-dt-calendar-cell-in-range]=\"isInRange(item.value)\"\r\n [class.nxt-dt-calendar-cell-range-from]=\"isRangeFrom(item.value)\"\r\n [class.nxt-dt-calendar-cell-range-from-long]=\"isInRange(item.value + 7)\"\r\n [class.nxt-dt-calendar-cell-range-to]=\"isRangeTo(item.value)\"\r\n [class.nxt-dt-calendar-cell-range-to-long]=\"isInRange(item.value - 7)\"\r\n [attr.aria-label]=\"item.ariaLabel\"\r\n [attr.aria-disabled]=\"!item.enabled || null\"\r\n [style.width.%]=\"100 / numCols()\"\r\n [style.paddingTop.%]=\"50 * cellRatio() / numCols()\"\r\n [style.paddingBottom.%]=\"50 * cellRatio() / numCols()\"\r\n (click)=\"selectCell(item)\">\r\n <span class=\"nxt-dt-calendar-cell-content\"\r\n [class]=\"{\r\n 'nxt-dt-calendar-cell-out': item.out,\r\n 'nxt-dt-calendar-cell-today': item.value === todayValue(),\r\n 'nxt-dt-calendar-cell-selected': isSelected(item.value)\r\n }\">\r\n {{item.displayValue}}\r\n </span>\r\n </td>\r\n }\r\n</tr>\r\n}\r\n","import { Component, input, viewChild, output, linkedSignal, computed, inject } from '@angular/core'\nimport { DateTimeAdapter } from '../../class/date-time-adapter.class'\nimport { DateTimeFormats, NXT_DATE_TIME_FORMATS } from '../../class/date-time-format.class'\nimport { DateFilter, SelectMode } from '../../class/date-time.class'\nimport { CalendarBodyComponent, CalendarCell } from '../calendar-body/calendar-body.component'\n\n/** @internal */\nconst DAYS_PER_WEEK = 7\n\n/** @internal */\nconst WEEKS_PER_VIEW = 6\n\n@Component({\n selector: 'nxt-date-time-month-view',\n templateUrl: './calendar-month-view.component.html',\n styleUrls: ['./calendar-month-view.component.scss'],\n preserveWhitespaces: false,\n imports: [\n CalendarBodyComponent\n ],\n host: {\n '[class.nxt-dt-calendar-view]': 'true'\n }\n})\nexport class MonthViewComponent<T> {\n private readonly dateTimeAdapter = inject<DateTimeAdapter<T>>(DateTimeAdapter)\n private readonly dateTimeFormats = inject<DateTimeFormats>(NXT_DATE_TIME_FORMATS)\n\n /**\n * Whether to hide dates in other months at the start or end of the current month\n */\n readonly hideOtherMonths = input<boolean>(false)\n\n private _firstDayOfWeek = 0\n /**\n * Define the first day of a week\n * Sunday: 0 ~ Saturday: 6\n */\n readonly firstDayOfWeek = input<number, number>(this._firstDayOfWeek, {\n transform: (val) => {\n if (val >= 0 && val <= 6 && val !== this._firstDayOfWeek) {\n return this._firstDayOfWeek = val\n }\n return this._firstDayOfWeek\n }\n })\n\n /**\n * The select mode of the picker;\n */\n readonly selectMode = input<SelectMode>('single')\n\n /** The currently selected date */\n readonly selected = input<T | undefined, T | undefined>(undefined, {\n transform: value => {\n value = this.dateTimeAdapter.deserialize(value)\n return this.getValidDate(value)\n }\n })\n\n readonly selecteds = input<Array<T | undefined>, Array<T | undefined>>([], {\n transform: values => values.map(v => {\n v = this.dateTimeAdapter.deserialize(v)\n return this.getValidDate(v)\n })\n })\n\n readonly pickerMoment = input<T | undefined, T | undefined>(undefined, {\n transform: value => {\n value = this.dateTimeAdapter.deserialize(value)\n return this.getValidDate(value) || this.dateTimeAdapter.now()\n }\n })\n\n /**\n * A function used to filter which dates are selectable\n */\n readonly dateTimeFilter = input<DateFilter<T>>()\n\n /** The minimum selectable date */\n readonly min = input<T | undefined, T | undefined>(undefined, {\n transform: value => {\n value = this.dateTimeAdapter.deserialize(value)\n return this.getValidDate(value)\n }\n })\n\n /** The maximum selectable date */\n readonly max = input<T | undefined, T | undefined>(undefined, {\n transform: value => {\n value = this.dateTimeAdapter.deserialize(value)\n return this.getValidDate(value)\n }\n })\n\n readonly weekdays = computed(() => {\n const longWeekdays = this.dateTimeAdapter.getDayOfWeekNames('long')\n const shortWeekdays = this.dateTimeAdapter.getDayOfWeekNames('short')\n const narrowWeekdays = this.dateTimeAdapter.getDayOfWeekNames('narrow')\n const firstDayOfWeek = this.firstDayOfWeek()\n\n const weekdays = longWeekdays.map((long, i) => ({ long, short: shortWeekdays[i], narrow: narrowWeekdays[i] }))\n\n return weekdays\n .slice(firstDayOfWeek)\n .concat(weekdays.slice(0, firstDayOfWeek))\n })\n\n readonly _daysData = computed(() => {\n if (!this.pickerMoment()) {\n return\n }\n\n let todayDate: number | undefined\n\n // the first weekday of the month\n const startWeekdayOfMonth = this.dateTimeAdapter.getDay(\n this.firstDateOfMonth()\n )\n const firstDayOfWeek = this.firstDayOfWeek()\n\n // the amount of days from the first date of the month\n // if it is < 0, it means the date is in previous month\n let daysDiff =\n 0 -\n ((startWeekdayOfMonth + (DAYS_PER_WEEK - firstDayOfWeek)) %\n DAYS_PER_WEEK)\n\n // the index of cell that contains the first date of the month\n const firstRowOffset = Math.abs(daysDiff)\n\n const days: CalendarCell[][] = []\n for (let i = 0; i < WEEKS_PER_VIEW; i++) {\n const week = []\n for (let j = 0; j < DAYS_PER_WEEK; j++) {\n const date = this.dateTimeAdapter.addCalendarDays(\n this.firstDateOfMonth(),\n daysDiff\n )\n const dateCell = this.createDateCell(date, daysDiff)\n\n // check if the date is today\n if (\n this.dateTimeAdapter.isSameDay(\n this.dateTimeAdapter.now(),\n date\n )\n ) {\n todayDate = daysDiff + 1\n }\n\n week.push(dateCell)\n daysDiff += 1\n }\n days.push(week)\n }\n return {\n days,\n todayDate,\n firstRowOffset\n }\n })\n\n private _days?: CalendarCell[][]\n readonly days = computed(() => {\n const days = this._daysData()?.days\n if (days != undefined)\n return this._days = days\n return this._days\n })\n\n readonly activeCell = computed(() => {\n if (this.pickerMoment()) {\n return (\n this.dateTimeAdapter.getDate(this.pickerMoment()) +\n this.firstRowOffset() -\n 1\n )\n }\n return\n })\n\n readonly isInSingleMode = computed(() => this.selectMode() === 'single')\n\n readonly isInRangeMode = computed(() => (\n this.selectMode() === 'range' ||\n this.selectMode() === 'rangeFrom' ||\n this.selectMode() === 'rangeTo'\n ))\n\n private firstDateOfMonth = linkedSignal({\n source: () => this.pickerMoment(),\n computation: (val) => this.dateTimeAdapter.createDate(\n this.dateTimeAdapter.getYear(val),\n this.dateTimeAdapter.getMonth(val),\n 1\n )\n })\n\n private _todayDate?: number\n /**\n * The date of the month that today falls on.\n */\n readonly todayDate = computed(() => {\n const todayDate = this._daysData()?.todayDate\n if (todayDate != undefined)\n return this._todayDate = todayDate\n return this._todayDate\n })\n\n private _selectedDates?: Array<number | undefined>\n /**\n * An array to hold all selectedDates' value\n * the value is the day number in current month\n */\n readonly selectedDates = computed(() => {\n /**\n * Set the selectedDates value.\n * In single mode, it has only one value which represent the selected date\n * In range mode, it would has two values, one for the fromValue and the other for the toValue\n */\n let selectedDates = new Array<number | undefined>()\n\n if (!this.firstDateOfMonth()) {\n return this._selectedDates\n }\n\n if (this.isInSingleMode() && this.selected()) {\n const dayDiff = this.dateTimeAdapter.differenceInCalendarDays(\n this.selected(),\n this.firstDateOfMonth()\n ) ?? 0\n selectedDates[0] = dayDiff + 1\n return this._selectedDates = selectedDates\n }\n\n if (this.isInRangeMode() && this.selecteds()) {\n selectedDates = this.selecteds().map(selected => {\n if (this.dateTimeAdapter.isValid(selected)) {\n const dayDiff = this.dateTimeAdapter.differenceInCalendarDays(\n selected,\n this.firstDateOfMonth()\n ) ?? 0\n return dayDiff + 1\n }\n return\n })\n }\n return this._selectedDates = selectedDates\n })\n\n private _firstRowOffset = 0\n // the index of cell that contains the first date of the month\n readonly firstRowOffset = computed(() => {\n const firstRowOffset = this._daysData()?.firstRowOffset\n if (firstRowOffset != undefined)\n return this._firstRowOffset = firstRowOffset\n return this._firstRowOffset\n })\n\n /**\n * Callback to invoke when a new date is selected\n */\n readonly selectedChange = output<T | undefined>()\n\n /**\n * Callback to invoke when any date is selected.\n */\n readonly userSelection = output<void>()\n\n /** Emits when any date is activated */\n readonly pickerMomentChange = output<T>()\n\n /** The body of calendar table */\n private readonly calendarBodyElm = viewChild(CalendarBodyComponent)\n\n /**\n * Handle a calendarCell selected\n */\n selectCalendarCell(cell: CalendarCell): void {\n // Cases in which the date would not be selected\n // 1, the calendar cell is NOT enabled (is NOT valid)\n // 2, the selected date is NOT in current picker's month and the hideOtherMonths is enabled\n if (!cell.enabled || (this.hideOtherMonths() && cell.out)) {\n return\n }\n\n this.selectDate(cell.value)\n }\n\n /**\n * Handle a new date selected\n */\n private selectDate(date: number): void {\n const daysDiff = date - 1\n const selected = this.dateTimeAdapter.addCalendarDays(\n this.firstDateOfMonth(),\n daysDiff\n )\n\n this.selectedChange.emit(selected)\n this.userSelection.emit(undefined)\n }\n\n /**\n * Handle keydown event on calendar body\n */\n handleCalendarKeydown(event: KeyboardEvent): void {\n let moment\n switch (event.code.toLowerCase()) {\n // minus 1 day\n case 'arrowleft':\n moment = this.dateTimeAdapter.addCalendarDays(\n this.pickerMoment(),\n -1\n )\n this.pickerMomentChange.emit(moment)\n break\n\n // add 1 day\n case 'arrowright':\n moment = this.dateTimeAdapter.addCalendarDays(\n this.pickerMoment(),\n 1\n )\n this.pickerMomentChange.emit(moment)\n break\n\n // minus 1 week\n case 'arrowup':\n moment = this.dateTimeAdapter.addCalendarDays(\n this.pickerMoment(),\n -7\n )\n this.pickerMomentChange.emit(moment)\n break\n\n // add 1 week\n case 'arrowdown':\n moment = this.dateTimeAdapter.addCalendarDays(\n this.pickerMoment(),\n 7\n )\n this.pickerMomentChange.emit(moment)\n break\n\n // move to first day of current month\n case 'home':\n moment = this.dateTimeAdapter.addCalendarDays(\n this.pickerMoment(),\n 1 - this.dateTimeAdapter.getDate(this.pickerMoment())\n )\n this.pickerMomentChange.emit(moment)\n break\n\n // move to last day of current month\n case 'end':\n moment = this.dateTimeAdapter.addCalendarDays(\n this.pickerMoment(),\n this.dateTimeAdapter.getNumDaysInMonth(this.pickerMoment()) -\n this.dateTimeAdapter.getDate(this.pickerMoment())\n )\n this.pickerMomentChange.emit(moment)\n break\n\n // minus 1 month (or 1 year)\n case 'pageup':\n moment = event.altKey\n ? this.dateTimeAdapter.addCalendarYears(\n this.pickerMoment(),\n -1\n )\n : this.dateTimeAdapter.addCalendarMonths(\n this.pickerMoment(),\n -1\n )\n this.pickerMomentChange.emit(moment)\n break\n\n // add 1 month (or 1 year)\n case 'pagedown':\n moment = event.altKey\n ? this.dateTimeAdapter.addCalendarYears(\n this.pickerMoment(),\n 1\n )\n : this.dateTimeAdapter.addCalendarMonths(\n this.pickerMoment(),\n 1\n )\n this.pickerMomentChange.emit(moment)\n break\n\n // select the pickerMoment\n case 'enter':\n if (!this.dateTimeFilter() || this.dateTimeFilter()!(this.pickerMoment(), 'date')) {\n this.selectDate(\n this.dateTimeAdapter.getDate(this.pickerMoment())\n )\n }\n break\n default:\n return\n }\n\n this.focusActiveCell()\n event.preventDefault()\n }\n\n /**\n * Creates CalendarCell for days.\n */\n private createDateCell(date: T, daysDiff: number): CalendarCell {\n // total days of the month\n const daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(\n this.pickerMoment()\n )\n const dateNum = this.dateTimeAdapter.getDate(date)\n // const dateName = this.dateNames[dateNum - 1];\n const dateName = dateNum.toString()\n const ariaLabel = this.dateTimeAdapter.format(\n date,\n this.dateTimeFormats.dateA11yLabel\n )\n\n // check if the date if selectable\n const enabled = this.isDateEnabled(date)\n\n // check if date is not in current month\n const dayValue = daysDiff + 1\n const out = dayValue < 1 || dayValue > daysInMonth\n const cellClass = 'nxt-dt-day-' + this.dateTimeAdapter.getDay(date)\n\n return new CalendarCell(\n dayValue,\n dateName,\n ariaLabel,\n enabled,\n out,\n cellClass\n )\n }\n\n /**\n * Check if the date is valid\n */\n private isDateEnabled(date: T): boolean {\n return (\n !!date &&\n (!this.dateTimeFilter() || this.dateTimeFilter()!(date, 'date')) &&\n (!this.min() ||\n this.dateTimeAdapter.compare(date, this.min()) >= 0) &&\n (!this.max() ||\n this.dateTimeAdapter.compare(date, this.max()) <= 0)\n )\n }\n\n /**\n * Get a valid date object\n */\n private getValidDate(obj: any): T | undefined {\n return this.dateTimeAdapter.isDateInstance(obj) &&\n this.dateTimeAdapter.isValid(obj)\n ? obj\n : undefined\n }\n\n /**\n * Check if the give dates are defined and in the same month\n */\n isSameMonth(dateLeft?: T, dateRight?: T): boolean {\n return !!(\n dateLeft &&\n dateRight &&\n this.dateTimeAdapter.isValid(dateLeft) &&\n this.dateTimeAdapter.isValid(dateRight) &&\n this.dateTimeAdapter.getYear(dateLeft) ===\n this.dateTimeAdapter.getYear(dateRight) &&\n this.dateTimeAdapter.getMonth(dateLeft) ===\n this.dateTimeAdapter.getMonth(dateRight)\n )\n }\n\n private focusActiveCell() {\n this.calendarBodyElm()?.focusActiveCell()\n }\n}\n","<table class=\"nxt-dt-calendar-table nxt-dt-calendar-month-table\"\r\n [class.nxt-dt-calendar-only-current-month]=\"hideOtherMonths()\">\r\n <thead class=\"nxt-dt-calendar-header\">\r\n <tr class=\"nxt-dt-weekdays\">\r\n @for (weekday of weekdays(); track weekday.long) {\r\n <th [attr.aria-label]=\"weekday.long\"\r\n class=\"nxt-dt-weekday\"\r\n scope=\"col\">\r\n <span>{{weekday.short}}</span>\r\n </th>\r\n }\r\n </tr>\r\n <tr>\r\n <th class=\"nxt-dt-calendar-table-divider\"\r\n aria-hidden=\"true\"\r\n colspan=\"7\"></th>\r\n </tr>\r\n </thead>\r\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n <tbody nxtDateTimeCalendarBody\r\n role=\"grid\"\r\n [rows]=\"days()\"\r\n [todayValue]=\"todayDate()\"\r\n [selectedValues]=\"selectedDates()\"\r\n [selectMode]=\"selectMode()\"\r\n [activeCell]=\"activeCell() ?? 0\"\r\n (keydown)=\"handleCalendarKeydown($event)\"\r\n (select)=\"selectCalendarCell($event)\">\r\n </tbody>\r\n</table>\r\n","import { Injectable, signal } from '@angular/core'\r\nimport { LocalizeFn } from '@angular/localize/init'\r\n\r\n/** @internal */\r\ndeclare const $localize: LocalizeFn\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DateTimeIntl {\r\n\r\n /** A label for the up second button (used by screen readers). */\r\n readonly upSecondLabel = signal($localize`:@@nxt-pick-datetime.up-second:Add a second`)\r\n\r\n /** A label for the down second button (used by screen readers). */\r\n readonly downSecondLabel = signal($localize`:@@nxt-pick-datetime.down-second:Minus a second`)\r\n\r\n /** A label for the up minute button (used by screen readers). */\r\n readonly upMinuteLabel = signal($localize`:@@nxt-pick-datetime.up-minute:Add a minute`)\r\n\r\n /** A label for the down minute button (used by screen readers). */\r\n readonly downMinuteLabel = signal($localize`:@@nxt-pick-datetime.down-minute:Minus a minute`)\r\n\r\n /** A label for the up hour button (used by screen readers). */\r\n readonly upHourLabel = signal($localize`:@@nxt-pick-datetime.up-hour:Add a hour`)\r\n\r\n /** A label for the down hour button (used by screen readers). */\r\n readonly downHourLabel = signal($localize`:@@nxt-pick-datetime.down-hour:Minus a hour`)\r\n\r\n /** A label for the previous month button (used by screen readers) */\r\n readonly prevMonthLabel = signal($localize`:@@nxt-pick-datetime.prev-month:Previous month`)\r\n\r\n /** A label for the next month button (used by screen readers) */\r\n readonly nextMonthLabel = signal($localize`:@@nxt-pick-datetime.next-month:Next month`)\r\n\r\n /** A label for the previous year button (used by screen readers) */\r\n readonly prevYearLabel = signal($localize`:@@nxt-pick-datetime.prev-year:Previous year`)\r\n\r\n /** A label for the next year button (used by screen readers) */\r\n readonly nextYearLabel = signal($localize`:@@nxt-pick-datetime.next-year:Next year`)\r\n\r\n /** A label for the previous multi-year button (used by screen readers) */\r\n readonly prevMultiYearLabel = signal($localize`:@@nxt-pick-datetime.prev-multi-year:Previous 21 years`)\r\n\r\n /** A label for the next multi-year button (used by screen readers) */\r\n readonly nextMultiYearLabel = signal($localize`:@@nxt-pick-datetime.next-multi-year:Next 21 years`)\r\n\r\n /** A label for the 'switch to month view' button (used by screen readers) */\r\n readonly switchToMonthViewLabel = signal($localize`:@@nxt-pick-datetime.switch-to-month:Change to month view`)\r\n\r\n /** A label for the 'switch to year view' button (used by screen readers) */\r\n readonly switchToMultiYearViewLabel = signal($localize`:@@nxt-pick-datetime.switch-to-year-month:Choose month and year`)\r\n\r\n /** A label for the cancel button */\r\n readonly cancelBtnLabel = signal($localize`:@@nxt-pick-datetime.cancel:Cancel`)\r\n\r\n /** A label for the set button */\r\n readonly setBtnLabel = signal($localize`:@@nxt-pick-datetime.set:Set`)\r\n\r\n /** A label for the range 'from' in picker info */\r\n readonly rangeFromLabel = signal($localize`:@@nxt-pick-datetime.from:From`)\r\n\r\n /** A label for the range 'to' in picker info */\r\n readonly rangeToLabel = signal($localize`:@@nxt-pick-datetime.to:To`)\r\n\r\n /** A label for the hour12 button (AM) */\r\n readonly hour12AMLabel = signal($localize`:@@nxt-pick-datetime.time-am:AM`)\r\n\r\n /** A label for the hour12 button (PM) */\r\n readonly hour12PMLabel = signal($localize`:@@nxt-pick-datetime.time-pm:PM`)\r\n}\r\n","import { Component, viewChild, output, input, computed, linkedSignal, inject } from '@angular/core'\nimport { DateTimeAdapter } from '../../class/date-time-adapter.class'\nimport { DateFilter, SelectMode } from '../../class/date-time.class'\nimport { CalendarBodyComponent, CalendarCell } from '../calendar-body/calendar-body.component'\nimport { DateTimeIntl } from '../date-time-picker-intl.service'\n\n/** @internal */\nexport const YEARS_PER_ROW = 3\n\n/** @internal */\nexport const YEAR_ROWS = 7\n\n@Component({\n selector: 'nxt-date-time-multi-year-view',\n templateUrl: './calendar-multi-year-view.component.html',\n styleUrls: ['./calendar-multi-year-view.component.scss'],\n preserveWhitespaces: false,\n imports: [\n CalendarBodyComponent\n ],\n host: {\n '[class.nxt-dt-calendar-view]': 'true',\n '[class.nxt-dt-calendar-multi-year-view]': 'true'\n }\n})\n\nexport class MultiYearViewComponent<T> {\n private readonly pickerIntl = inject(DateTimeIntl)\n private readonly dateTimeAdapter = inject<DateTimeAdapter<T>>(DateTimeAdapter)\n\n /**\n * The select mode of the picker;\n */\n readonly selectMode = input<SelectMode>('single')\n\n /** The currently selected date */\n readonly selected = input<T | undefined, T | undefined>(undefined, {\n transform: value => {\n value = this.dateTimeAdapter.deserialize(value)\n return this.getValidDate(value)\n }\n })\n\n readonly selecteds = input<Array<T | undefined>, Array<T | undefined>>([], {\n transform: values => values.map(v => {\n v = this.dateTimeAdapter.deserialize(v)\n return this.getValidDate(v)\n })\n })\n\n /** Settable signal for pickerMoment */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n readonly _pickerMomentInput = input<T | undefined>(undefined, { alias: 'pickerMoment' })\n\n private readonly _pickerMoment = linkedSignal({\n source: () => this._pickerMomentInput(),\n computation: v => v\n })\n readonly pickerMoment = computed(() => {\n const value = this.dateTimeAdapter.deserialize(this._pickerMoment())\n return this.getValidDate(value) || this.dateTimeAdapter.now()\n })\n\n /**\n * A function used to filter which dates are selectable\n */\n readonly dateTimeFilter = input<DateFilter<T>>()\n\n /** The minimum selectable date */\n readonly min = input<T | undefined, T | undefined>(undefined, {\n transform: value => {\n value = this.dateTimeAdapter.deserialize(value)\n return this.getValidDate(value)\n }\n })\n\n /** The maximum selectable date */\n readonly max = input<T | undefined, T | undefined>(undefined, {\n transform: value => {\n value = this.dateTimeAdapter.deserialize(value)\n return this.getValidDate(value)\n }\n })\n\n private readonly yearsData = computed(() => {\n const todayYear = this.dateTimeAdapter.getYear(this.dateTimeAdapter.now())\n\n const years: CalendarCell[][] = []\n\n const pickerMomentYear = this.dateTimeAdapter.getYear(this.pickerMoment())\n const offset = pickerMomentYear % (YEARS_PER_ROW * YEAR_ROWS)\n\n for (let i = 0; i < YEAR_ROWS; i++) {\n const row = []\n\n for (let j = 0; j < YEARS_PER_ROW; j++) {\n const year = pickerMomentYear - offset + (j + i * YEARS_PER_ROW)\n const yearCell = this.createYearCell(year)\n row.push(yearCell)\n }\n\n years.push(row)\n }\n\n return {\n years,\n todayYear\n }\n })\n\n readonly years = computed(() => this.yearsData().years)\n\n readonly todayYear = computed(() => this.yearsData().todayYear)\n\n readonly isInSingleMode = computed(() => this.selectMode() === 'single')\n\n readonly isInRangeMode = computed(() => (\n this.selectMode() === 'range' ||\n this.selectMode() === 'rangeFrom' ||\n this.selectMode() === 'rangeTo'\n ))\n\n readonly selectedYears = computed(() => {\n let selectedYears = new Array<number | undefined>()\n\n if (this.isInSingleMode() && this.selected()) {\n selectedYears[0] = this.dateTimeAdapter.getYear(this.selected())\n }\n\n if (this.isInRangeMode() && this.selecteds()) {\n selectedYears = this.selecteds().map((selected) => {\n if (this.dateTimeAdapter.isValid(selected)) {\n return this.dateTimeAdapter.getYear(selected)\n }\n return\n })\n }\n return selectedYears\n })\n\n readonly activeCell = computed(() => {\n if (this.pickerMoment()) {\n return this.dateTimeAdapter.getYear(this.pickerMoment()) % (YEARS_PER_ROW * YEAR_ROWS)\n }\n return\n })\n\n readonly tableHeader = computed(() => {\n const years = this.years()\n if (years && years.length > 0) {\n return `${years[0][0].displayValue} ~ ${years[YEAR_ROWS - 1][YEARS_PER_ROW - 1].displayValue}`\n }\n return\n })\n\n readonly prevButtonLabel = this.pickerIntl.prevMultiYearLabel.asReadonly()\n\n readonly nextButtonLabel = this.pickerIntl.nextMultiYearLabel.asReadonly()\n\n /**\n * Callback to invoke when a new month is selected\n */\n\n readonly change = output<T>()\n\n /**\n * Emits the selected year\n *\n * This doesn't imply a change on the selected date.\n */\n readonly yearSelected = output<T>()\n\n /** Emits when any date is activated */\n readonly pickerMomentChange = output<T>()\n\n /** Emits when use keyboard enter to select a calendar cell */\n readonly keyboardEnter = output<void>()\n\n /** The body of calendar table */\n private readonly calendarBodyElm = viewChild(CalendarBodyComponent)\n\n /**\n * Handle a calendarCell selected\n */\n selectCalendarCell(cell: CalendarCell): void {\n this.selectYear(cell.value)\n }\n\n private selectYear(year: number): void {\n this.yearSelected.emit(this.dateTimeAdapter.createDate(year, 0, 1))\n const firstDateOfMonth = this.dateTimeAdapter.createDate(\n year,\n this.dateTimeAdapter.getMonth(this.pickerMoment()),\n 1\n )\n const daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(firstDateOfMonth)\n const selected = this.dateTimeAdapter.createDate(\n year,\n this.dateTimeAdapter.getMonth(this.pickerMoment()),\n Math.min(daysInMonth, this.dateTimeAdapter.getDate(this.pickerMoment())),\n this.dateTimeAdapter.getHours(this.pickerMoment()),\n this.dateTimeAdapter.getMinutes(this.pickerMoment()),\n this.dateTimeAdapter.getSeconds(this.pickerMoment())\n )\n\n this.change.emit(selected)\n }\n\n /**\n * Generate the previous year list\n */\n prevYearList(event: any): void {\n this._pickerMoment.set(this.dateTimeAdapter.addCalendarYears(this.pickerMoment(), -1 * YEAR_ROWS * YEARS_PER_ROW))\n event.preventDefault()\n }\n\n /**\n * Generate the next year list\n */\n nextYearList(event: any): void {\n this._pickerMoment.set(this.dateTimeAdapter.addCalendarYears(this.pickerMoment(), YEAR_ROWS * YEARS_PER_ROW))\n event.preventDefault()\n }\n\n /** Whether the previous period button is enabled */\n previousEnabled(): boolean {\n if (!this.min()) {\n return true\n }\n return !this.min() || !this.isSameYearList(this.pickerMoment(), this.min())\n }\n\n /** Whether the next period button is enabled */\n nextEnabled(): boolean {\n return !this.max() || !this.isSameYearList(this.pickerMoment(), this.max())\n }\n\n handleCalendarKeydown(event: KeyboardEvent): void {\n let moment\n switch (event.code.toLowerCase()) {\n // minus 1 year\n case 'arrowleft':\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment(), -1)\n this.pickerMomentChange.emit(moment)\n break\n\n // add 1 year\n case 'arrowright':\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment(), 1)\n this.pickerMomentChange.emit(moment)\n break\n\n // minus 3 years\n case 'arrowup':\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment(), -1 * YEARS_PER_ROW)\n this.pickerMomentChange.emit(moment)\n break\n\n // add 3 years\n case 'arrowdown':\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment(), YEARS_PER_ROW)\n this.pickerMomentChange.emit(moment)\n break\n\n // go to the first year of the year page\n case 'home':\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment(),\n -this.dateTimeAdapter.getYear(this.pickerMoment()) % (YEARS_PER_ROW * YEAR_ROWS))\n this.pickerMomentChange.emit(moment)\n break\n\n // go to the last year of the year page\n case 'end':\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment(),\n (YEARS_PER_ROW * YEAR_ROWS) - this.dateTimeAdapter.getYear(this.pickerMoment()) % (YEARS_PER_ROW * YEAR_ROWS) - 1)\n this.pickerMomentChange.emit(moment)\n break\n\n // minus 1 year page (or 10 year pages)\n case 'pageup':\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment(), event.altKey ? -10 * (YEARS_PER_ROW * YEAR_ROWS) : -1 * (YEARS_PER_ROW * YEAR_ROWS))\n this.pickerMomentChange.emit(moment)\n break\n\n // add 1 year page (or 10 year pages)\n case 'pagedown':\n moment = this.dateTimeAdapter.addCalendarYears(this.pickerMoment(), event.altKey ? 10 * (YEARS_PER_ROW * YEAR_ROWS) : (YEARS_PER_ROW * YEAR_ROWS))\n this.pickerMomentChange.emit(moment)\n break\n\n case 'enter':\n this.selectYear(this.dateTimeAdapter.getYear(this.pickerMoment()))\n this.keyboardEnter.emit(undefined)\n break\n\n default:\n return\n }\n\n this.focusActiveCell()\n event.preventDefault()\n }\n\n /**\n * Creates an CalendarCell for the given year.\n */\n private createYearCell(year: number): CalendarCell {\n const startDateOfYear = this.dateTimeAdapter.createDate(year, 0, 1)\n const ariaLabel = this.dateTimeAdapter.getYearName(startDateOfYear)\n const cellClass = 'nxt-dt-year-' + year\n return new CalendarCell(year, year.toString(), ariaLabel, this.isYearEnabled(year), false, cellClass)\n }\n\n /** Whether the given year is enabled */\n private isYearEnabled(year: number) {\n\n const firstOfYear = this.dateTimeAdapter.createDate(year, 0, 1)\n\n // If any date in the year is enabled count the year as enabled.\n for (let date = firstOfYear;\n this.dateTimeAdapter.getYear(date) == year;\n date = this.dateTimeAdapter.addCalendarDays(date, 1)\n ) {\n if (\n !!date &&\n (!this.dateTimeFilter() || this.dateTimeFilter()!(date, 'year')) &&\n (!this.min() ||\n this.dateTimeAdapter.compare(date, this.min()) >= 0) &&\n (!this.max() ||\n this.dateTimeAdapter.compare(date, this.max()) <= 0)\n ) {\n return true\n }\n }\n\n return false\n }\n\n private isSameYearList(date1?: T, date2?: T): boolean {\n return Math.floor(this.dateTimeAdapter.getYear(date1) / (YEARS_PER_ROW * YEAR_ROWS)) ===\n Math.floor(this.dateTimeAdapter.getYear(date2) / (YEARS_PER_ROW * YEAR_ROWS))\n }\n\n /**\n * Get a valid date object\n */\n private getValidDate(obj: any): T | undefined {\n return (this.dateTimeAdapter.isDateInstance(obj) && this.dateTimeAdapter.isValid(obj))\n ? obj\n : undefined\n }\n\n private focusActiveCell() {\n this.calendarBodyElm()?.focusActiveCell()\n }\n}\n","<button class=\"nxt-dt-control-button nxt-dt-control-arrow-button\"\r\n [disabled]=\"!previousEnabled()\"\r\n [attr.aria-label]=\"prevButtonLabel()\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"prevYearList($event)\">\r\n <span class=\"nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG Arrow Left\"> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n version=\"1.1\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 250.738 250.738\"\r\n style=\"enable-background:new 0 0 250.738 250.738;\"\r\n xml:space=\"preserve\"\r\n width=\"100%\"\r\n height=\"100%\">\r\n <path style=\"fill-rule: evenodd; clip-rule: evenodd;\"\r\n d=\"M96.633,125.369l95.053-94.533c7.101-7.055,7.101-18.492,0-25.546 c-7.1-7.054-18.613-7.054-25.714,0L58.989,111.689c-3.784,3.759-5.487,8.759-5.238,13.68c-0.249,4.922,1.454,9.921,5.238,13.681 l106.983,106.398c7.101,7.055,18.613,7.055,25.714,0c7.101-7.054,7.101-18.491,0-25.544L96.633,125.369z\" />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n</button>\r\n<table class=\"nxt-dt-calendar-table nxt-dt-calendar-multi-year-table\">\r\n <thead class=\"nxt-dt-calendar-header\">\r\n <tr>\r\n <th colspan=\"3\">{{tableHeader()}}</th>\r\n </tr>\r\n </thead>\r\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n <tbody nxtDateTimeCalendarBody\r\n role=\"grid\"\r\n [rows]=\"years()\"\r\n [numCols]=\"3\"\r\n [cellRatio]=\"3 / 7\"\r\n [activeCell]=\"activeCell() ?? 0\"\r\n [todayValue]=\"todayYear()\"\r\n [selectedValues]=\"selectedYears()\"\r\n [selectMode]=\"selectMode()\"\r\n (keydown)=\"handleCalendarKeydown($event)\"\r\n (select)=\"selectCalendarCell($event)\"></tbody>\r\n</table>\r\n<button class=\"nxt-dt-control-button nxt-dt-control-arrow-button\"\r\n [disabled]=\"!nextEnabled()\"\r\n [attr.aria-label]=\"nextButtonLabel()\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"nextYearList($event)\">\r\n <span class=\"nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG Arrow Right\"> -->\r\n <svg version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 250.738 250.738\"\r\n style=\"enable-background:new 0 0 250.738 250.738;\"\r\n xml:space=\"preserve\">\r\n <path style=\"fill-rule:evenodd;clip-rule:evenodd;\"\r\n d=\"M191.75,111.689L84.766,5.291c-7.1-7.055-18.613-7.055-25.713,0\r\n c-7.101,7.054-7.101,18.49,0,25.544l95.053,94.534l-95.053,94.533c-7.101,7.054-7.101,18.491,0,25.545\r\n c7.1,7.054,18.613,7.054,25.713,0L191.75,139.05c3.784-3.759,5.487-8.759,5.238-13.681\r\n C197.237,120.447,195.534,115.448,191.75,111.689z\" />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n</button>\r\n","import { Component, viewChild, output, input, computed, inject } from '@angular/core'\nimport { DateTimeAdapter } from '../../class/date-time-adapter.class'\nimport { DateTimeFormats, NXT_DATE_TIME_FORMATS } from '../../class/date-time-format.class'\nimport { DateFilter, SelectMode } from '../../class/date-time.class'\nimport { CalendarBodyComponent, CalendarCell } from '../calendar-body/calendar-body.component'\n\n/** @internal */\nconst MONTHS_PER_YEAR = 12\n\n/** @internal */\nconst MONTHS_PER_ROW = 3\n\n@Component({\n selector: 'nxt-date-time-year-view',\n templateUrl: './calendar-year-view.component.html',\n styleUrls: ['./calendar-year-view.component.scss'],\n preserveWhitespaces: false,\n imports: [\n CalendarBodyComponent\n ],\n host: {\n '[class.nxt-dt-calendar-view]': 'true'\n }\n})\nexport class YearViewComponent<T> {\n private readonly dateTimeAdapter = inject<DateTimeAdapter<T>>(DateTimeAdapter)\n private readonly dateTimeFormats = inject<DateTimeFormats>(NXT_DATE_TIME_FORMATS)\n\n /**\n * The select mode of the picker;\n */\n readonly selectMode = input<SelectMode>('single')\n\n /** The currently selected date */\n readonly selected = input<T | undefined, T | undefined>(undefined, {\n transform: value => {\n value = this.dateTimeAdapter.deserialize(value)\n return this.getValidDate(value)\n }\n })\n\n readonly selecteds = input<Array<T | undefined>, Array<T | undefined>>([], {\n transform: values => values.map(v => {\n v = this.dateTimeAdapter.deserialize(v)\n return this.getValidDate(v)\n })\n })\n\n readonly pickerMoment = input<T | undefined, T | undefined>(undefined, {\n transform: value => {\n value = this.dateTimeAdapter.deserialize(value)\n return this.getValidDate(value) || this.dateTimeAdapter.now()\n }\n })\n\n /**\n * A function used to filter which dates are selectable\n */\n readonly dateTimeFilter = input<DateFilter<T>>()\n\n /** The minimum selectable date */\n readonly min = input<T | undefined, T | undefined>(undefined, {\n transform: value => {\n value = this.dateTimeAdapter.deserialize(value)\n return this.getValidDate(value)\n }\n })\n\n /** The maximum selectable date */\n readonly max = input<T | undefined, T | undefined>(undefined, {\n transform: value => {\n value = this.dateTimeAdapter.deserialize(value)\n return this.getValidDate(value)\n }\n })\n\n private readonly monthNames = this.dateTimeAdapter.getMonthNames('short')\n\n private readonly monthsData = computed(() => {\n if (!this.pickerMoment()) {\n return\n }\n\n const todayMonth = this.getMonthInCurrentYear(\n this.dateTimeAdapter.now()\n )\n\n const months: CalendarCell[][] = []\n for (let i = 0; i < MONTHS_PER_YEAR / MONTHS_PER_ROW; i++) {\n const row = []\n\n for (let j = 0; j < MONTHS_PER_ROW; j++) {\n const month = j + i * MONTHS_PER_ROW\n const monthCell = this.createMonthCell(month)\n row.push(monthCell)\n }\n\n months.push(row)\n }\n\n return {\n months,\n todayMonth\n }\n })\n\n private _months?: CalendarCell[][]\n readonly months = computed(() => {\n const months = this.monthsData()?.months\n if (months != undefined)\n return this._months = months\n return this._months\n })\n\n readonly activeCell = computed(() => {\n if (this.pickerMoment()) {\n return this.dateTimeAdapter.getMonth(this.pickerMoment())\n }\n return\n })\n\n readonly isInSingleMode = computed(() => this.selectMode() === 'single')\n\n readonly isInRangeMode = computed(() => (\n this.selectMode() === 'range' ||\n this.selectMode() === 'rangeFrom' ||\n this.selectMode() === 'rangeTo'\n ))\n\n private _todayMonth?: number\n readonly todayMonth = computed(() => {\n const todayMonth = this.monthsData()?.todayMonth\n if (todayMonth != undefined)\n return this._todayMonth = todayMonth\n return this._todayMonth\n })\n\n /**\n * An array to hold all selectedDates' month value\n * the value is the month number in current year\n */\n readonly selectedMonths = computed(() => {\n /**\n * Set the selectedMonths value\n * In single mode, it has only one value which represent the month the selected date in\n * In range mode, it would has two values, one for the month the fromValue in and the other for the month the toValue in\n */\n const selectedMonths: Array<number | undefined> = []\n if (this.isInSingleMode() && this.selected()) {\n selectedMonths[0] = this.getMonthInCurrentYear(this.selected())\n }\n\n if (this.isInRangeMode() && this.selecteds()) {\n selectedMonths[0] = this.getMonthInCurrentYear(\n this.selecteds()[0]\n )\n selectedMonths[1] = this.getMonthInCurrentYear(\n this.selecteds()[1]\n )\n }\n return selectedMonths\n })\n\n /**\n * Callback to invoke when a new month is selected\n */\n readonly change = output<T>()\n\n /**\n * Emits the selected year\n *\n * This doesn't imply a change on the selected date.\n */\n readonly monthSelected = output<T>()\n\n /** Emits when any date is activated */\n readonly pickerMomentChange = output<T>()\n\n /** Emits when use keyboard enter to select a calendar cell */\n readonly keyboardEnter = output<void>()\n\n /** The body of calendar table */\n private readonly calendarBodyElm = viewChild(CalendarBodyComponent)\n\n /**\n * Handle a calendarCell selected\n */\n selectCalendarCell(cell: CalendarCell): void {\n this.selectMonth(cell.value)\n }\n\n /**\n * Handle a new month selected\n */\n private selectMonth(month: number): void {\n const firstDateOfMonth = this.dateTimeAdapter.createDate(\n this.dateTimeAdapter.getYear(this.pickerMoment()),\n month,\n 1\n )\n\n this.monthSelected.emit(firstDateOfMonth)\n\n const daysInMonth = this.dateTimeAdapter.getNumDaysInMonth(\n firstDateOfMonth\n )\n const result = this.dateTimeAdapter.createDate(\n this.dateTimeAdapter.getYear(this.pickerMoment()),\n month,\n Math.min(\n daysInMonth,\n this.dateTimeAdapter.getDate(this.pickerMoment())\n ),\n this.dateTimeAdapter.getHours(this.pickerMoment()),\n this.dateTimeAdapter.getMinutes(this.pickerMoment()),\n this.dateTimeAdapter.getSeconds(this.pickerMoment())\n )\n\n this.change.emit(result)\n }\n\n /**\n * Handle keydown event on calendar body\n */\n handleCalendarKeydown(event: KeyboardEvent): void {\n let moment\n switch (event.code.toLowerCase()) {\n // minus 1 month\n case 'arrowleft':\n moment = this.dateTimeAdapter.addCalendarMonths(\n this.pickerMoment(),\n -1\n )\n this.pickerMomentChange.emit(moment)\n break\n\n // add 1 month\n case 'arrowright':\n moment = this.dateTimeAdapter.addCalendarMonths(\n this.pickerMoment(),\n 1\n )\n this.pickerMomentChange.emit(moment)\n break\n\n // minus 3 months\n case 'arrowup':\n moment = this.dateTimeAdapter.addCalendarMonths(\n this.pickerMoment(),\n -3\n )\n this.pickerMomentChange.emit(moment)\n break\n\n // add 3 months\n case 'arrowdown':\n moment = this.dateTimeAdapter.addCalendarMonths(\n this.pickerMoment(),\n 3\n )\n this.pickerMomentChange.emit(moment)\n break\n\n // move to first month of current year\n case 'home':\n moment = this.dateTimeAdapter.addCalendarMonths(\n this.pickerMoment(),\n -this.dateTimeAdapter.getMonth(this.pickerMoment())\n )\n this.pickerMomentChange.emit(moment)\n break\n\n // move to last month of current year\n case 'end':\n moment = this.dateTimeAdapter.addCalendarMonths(\n this.pickerMoment(),\n 11 - this.dateTimeAdapter.getMonth(this.pickerMoment())\n )\n this.pickerMomentChange.emit(moment)\n break\n\n // minus 1 year (or 10 year)\n case 'pageup':\n moment = this.dateTimeAdapter.addCalendarYears(\n this.pickerMoment(),\n event.altKey ? -10 : -1\n )\n this.pickerMomentChange.emit(moment)\n break\n\n // add 1 year (or 10 year)\n case 'pagedown':\n moment = this.dateTimeAdapter.addCalendarYears(\n this.pickerMoment(),\n event.altKey ? 10 : 1\n )\n this.pickerMomentChange.emit(moment)\n break\n\n // Select current month\n case 'enter':\n this.selectMonth(\n this.dateTimeAdapter.getMonth(this.pickerMoment())\n )\n this.keyboardEnter.emit(undefined)\n break\n default:\n return\n }\n\n this.focusActiveCell()\n event.preventDefault()\n }\n\n /**\n * Creates an CalendarCell for the given month.\n */\n private createMonthCell(month: number): CalendarCell {\n const startDateOfMonth = this.dateTimeAdapter.createDate(\n this.dateTimeAdapter.getYear(this.pickerMoment()),\n month,\n 1\n )\n const ariaLabel = this.dateTimeAdapter.format(\n startDateOfMonth,\n this.dateTimeFormats.monthYearA11yLabel\n )\n const cellClass = 'nxt-dt-month-' + month\n return new CalendarCell(\n month,\n this.monthNames[month],\n ariaLabel,\n this.isMonthEnabled(month),\n false,\n cellClass\n )\n }\n\n /**\n * Check if the given month is enable\n */\n private isMonthEnabled(month: number): boolean {\n const firstDateOfMonth = this.dateTimeAdapter.createDate(\n this.dateTimeAdapter.getYear(this.pickerMoment()),\n month,\n 1\n )\n\n // If any date in the month is selectable,\n // we count the month as enable\n for (\n let date = firstDateOfMonth;\n this.dateTimeAdapter.getMonth(date) === month;\n date = this.dateTimeAdapter.addCalendarDays(date, 1)\n ) {\n if (\n !!date &&\n (!this.dateTimeFilter() || this.dateTimeFilter()!(date, 'month')) &&\n (!this.min() ||\n this.dateTimeAdapter.compare(date, this.min()) >= 0) &&\n (!this.max() ||\n this.dateTimeAdapter.compare(date, this.max()) <= 0)\n ) {\n return true\n }\n }\n\n return false\n }\n\n /**\n * Gets the month in this year that the given Date falls on.\n * Returns undefined if the given Date is in another year.\n */\n private getMonthInCurrentYear(date?: T): number | undefined {\n if (this.getValidDate(date) && this.getValidDate(this.pickerMoment())) {\n const result = this.dateTimeAdapter.compareYear(\n date,\n this.pickerMoment()\n )\n\n // < 0 : the given date's year is before pickerMoment's year, we return -1 as selected month value.\n // > 0 : the given date's year is after pickerMoment's year, we return 12 as selected month value.\n // 0 : the give date's year is same as the pickerMoment's year, we return the actual month value.\n if (result < 0) {\n return -1\n } else if (result > 0) {\n return 12\n } else {\n return this.dateTimeAdapter.getMonth(date)\n }\n }\n return\n }\n\n /**\n * Check the given dates are in the same year\n */\n private hasSameYear(dateLeft?: T, dateRight?: T) {\n return !!(\n dateLeft &&\n dateRight &&\n this.dateTimeAdapter.getYear(dateLeft) ===\n this.dateTimeAdapter.getYear(dateRight)\n )\n }\n\n /**\n * Get a valid date object\n */\n private getValidDate(obj: any): T | undefined {\n return this.dateTimeAdapter.isDateInstance(obj) &&\n this.dateTimeAdapter.isValid(obj)\n ? obj\n : undefined\n }\n\n private focusActiveCell() {\n this.calendarBodyElm()?.focusActiveCell()\n }\n}\n","<table class=\"nxt-dt-calendar-table nxt-dt-calendar-year-table\">\r\n <thead class=\"nxt-dt-calendar-header\">\r\n <tr>\r\n <th class=\"nxt-dt-calendar-table-divider\"\r\n aria-hidden=\"true\"\r\n colspan=\"3\"></th>\r\n </tr>\r\n </thead>\r\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n <tbody nxtDateTimeCalendarBody\r\n role=\"grid\"\r\n [rows]=\"months()\"\r\n [numCols]=\"3\"\r\n [cellRatio]=\"3 / 7\"\r\n [activeCell]=\"activeCell() ?? 0\"\r\n [todayValue]=\"todayMonth()\"\r\n [selectedValues]=\"selectedMonths()\"\r\n [selectMode]=\"selectMode()\"\r\n (keydown)=\"handleCalendarKeydown($event)\"\r\n (select)=\"selectCalendarCell($event)\">\r\n </tbody>\r\n</table>\r\n","import { Component, ElementRef, NgZone, afterRenderEffect, computed, input, linkedSignal, output, inject, afterNextRender, Injector, DestroyRef } from '@angular/core'\nimport { CdkMonitorFocus } from '@angular/cdk/a11y'\nimport { DateTimeAdapter } from '../../class/date-time-adapter.class'\nimport { DateTimeFormats, NXT_DATE_TIME_FORMATS } from '../../class/date-time-format.class'\nimport { DateFilter, SelectMode } from '../../class/date-time.class'\nimport { DateTimeIntl } from '../date-time-picker-intl.service'\nimport { MonthViewComponent } from '../calendar-month-view/calendar-month-view.component'\nimport { YearViewComponent } from '../calendar-year-view/calendar-year-view.component'\nimport { MultiYearViewComponent } from '../calendar-multi-year-view/calendar-multi-year-view.component'\n\n@Component({\n selector: 'nxt-date-time-calendar',\n templateUrl: './calendar.component.html',\n styleUrls: ['./calendar.component.scss'],\n preserveWhitespaces: false,\n imports: [\n CdkMonitorFocus,\n MonthViewComponent,\n YearViewComponent,\n MultiYearViewComponent\n ],\n host: {\n '[class.nxt-dt-calendar]': 'true'\n }\n})\nexport class CalendarComponent<T> {\n private readonly elmRef = inject<ElementRef<HTMLElement>>(ElementRef)\n private readonly pickerIntl = inject(DateTimeIntl)\n private readonly ngZone = inject(NgZone)\n private readonly injector = inject(Injector)\n private readonly destroyRef = inject(DestroyRef)\n private readonly dateTimeAdapter = inject<DateTimeAdapter<T>>(DateTimeAdapter)\n private readonly dateTimeFormats = inject<DateTimeFormats>(NXT_DATE_TIME_FORMATS)\n\n /**\n * Date filter for the month and year view\n */\n readonly dateTimeFilter = input<DateFilter<T>>()\n\n /**\n * Set the first day of week\n */\n readonly firstDayOfWeek = input<number>(0)\n\n /** The minimum selectable date */\n readonly min = input<T | undefined, T | undefined>(undefined, {\n transform: (value) => {\n value = this.dateTimeAdapter.deserialize(value)\n value = this.getValidDate(value)\n\n return value\n ? this.dateTimeAdapter.createDate(\n this.dateTimeAdapter.getYear(value),\n this.dateTimeAdapter.getMonth(value),\n this.dateTimeAdapter.getDate(value)\n )\n : undefined\n }\n })\n\n /** The maximum selectable date */\n readonly max = input<T | undefined, T | undefined>(undefined, {\n transform: (value) => {\n value = this.dateTimeAdapter.deserialize(value)\n value = this.getValidDate(value)\n\n return value\n ? this.dateTimeAdapter.createDate(\n this.dateTimeAdapter.getYear(value),\n this.dateTimeAdapter.getMonth(value),\n this.dateTimeAdapter.getDate(value)\n )\n : undefined\n }\n })\n\n /** The current picker moment */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n readonly _pickerMomentInput = input<T | undefined>(undefined, { alias: 'pickerMoment' })\n\n /** Settable signal for pickerMoment */\n private readonly _pickerMoment = linkedSignal({\n source: () => this._pickerMomentInput(),\n computation: v => v\n })\n readonly pickerMoment = computed(() => {\n const value = this.dateTimeAdapter.deserialize(this._pickerMoment())\n return this.getValidDate(value) || this.dateTimeAdapter.now()\n })\n\n readonly selectMode = input<SelectMode>()\n\n /** The currently selected moment */\n readonly selected = input<T | undefined, T | undefined>(undefined, {\n transform: (value) => {\n value = this.dateTimeAdapter.deserialize(value)\n return this.getValidDate(value)\n }\n })\n\n readonly selecteds = input<Array<T | undefined>, Array<T | undefined>>([], {\n transform: (values) => values.map(v => {\n v = this.dateTimeAdapter.deserialize(v)\n return this.getValidDate(v)\n })\n })\n\n /**\n * The view that the calendar should start in\n */\n readonly startView = input<'month' | 'year' | 'multi-years'>('month')\n\n /**\n * Whether to hide dates in other months at the start or end of the current month\n */\n readonly hideOtherMonths = input<boolean>(false)\n\n /** Emits when the currently picker moment changes */\n readonly pickerMomentChange = output<T>()\n\n /** Emits when the currently selected date changes */\n readonly selectedChange = output<T | undefined>()\n\n /** Emits when any date is selected */\n readonly userSelection = output<void>()\n\n /**\n * Emits the selected year\n *\n * This doesn't imply a change on the selected date.\n */\n readonly yearSelected = output<T>()\n\n /**\n * Emits the selected month\n *\n * This doesn't imply a change on the selected date.\n */\n readonly monthSelected = output<T>()\n\n readonly periodButtonText = computed(() => this.isMonthView()\n ? this.dateTimeAdapter.format(\n this.pickerMoment(),\n this.dateTimeFormats.monthYearLabel\n )\n : this.dateTimeAdapter.getYearName(this.pickerMoment()))\n\n readonly periodButtonLabel = computed(() => this.isMonthView()\n ? this.pickerIntl.switchToMultiYearViewLabel()\n : this.pickerIntl.switchToMonthViewLabel())\n\n readonly prevButtonLabel = computed(() => {\n const currentView = this.currentView()\n if (currentView === 'month') {\n return this.pickerIntl.prevMonthLabel()\n } else if (currentView === 'year') {\n return this.pickerIntl.prevYearLabel()\n }\n return\n })\n\n readonly nextButtonLabel = computed(() => {\n const currentView = this.currentView()\n if (currentView === 'month') {\n return this.pickerIntl.nextMonthLabel()\n } else if (currentView === 'year') {\n return this.pickerIntl.nextYearLabel()\n }\n return\n })\n\n readonly currentView = linkedSignal({\n source: () => this.startView(),\n computation: v => v\n })\n\n readonly isInSingleMode = computed(() => this.selectMode() === 'single')\n\n readonly isInRangeMode = computed(() => {\n const selectMode = this.selectMode()\n return (\n selectMode === 'range' ||\n selectMode === 'rangeFrom' ||\n selectMode === 'rangeTo'\n )\n })\n\n readonly showControlArrows = computed(() => this.currentView() !== 'multi-years')\n\n readonly isMonthView = computed(() => this.currentView() === 'month')\n\n /**\n * Date filter for the month and year view\n */\n dateTimeFilterForViews = (date?: T) => {\n const dateTimeFilter = this.dateTimeFilter()\n return (\n !!date &&\n (!dateTimeFilter || dateTimeFilter(date, 'date')) &&\n (!this.min() ||\n this.dateTimeAdapter.compare(date, this.min()) >= 0) &&\n (!this.max() ||\n this.dateTimeAdapter.compare(date, this.max()) <= 0)\n )\n }\n\n constructor() {\n afterRenderEffect(() => {\n this.currentView()\n this.ngZone.runOutsideAngular(() => {\n this.elmRef.nativeElement\n ?.querySelector<HTMLElement>('.nxt-dt-calendar-cell-active')\n ?.focus()\n })\n })\n }\n\n /**\n * Toggle between month view and year view\n */\n toggleViews(): void {\n this.currentView.set(\n this.currentView() == 'month' ? 'multi-years' : 'month')\n }\n\n /**\n * Handles user clicks on the previous button.\n */\n previousClicked(): void {\n const newVal = this.isMonthView()\n ? this.dateTimeAdapter.addCalendarMonths(this.pickerMoment(), -1)\n : this.dateTimeAdapter.addCalendarYears(this.pickerMoment(), -1)\n this._pickerMoment.set(newVal)\n\n this.pickerMomentChange.emit(newVal)\n }\n\n /**\n * Handles user clicks on the next button.\n */\n nextClicked(): void {\n const newVal = this.isMonthView()\n ? this.dateTimeAdapter.addCalendarMonths(this.pickerMoment(), 1)\n : this.dateTimeAdapter.addCalendarYears(this.pickerMoment(), 1)\n this._pickerMoment.set(newVal)\n\n this.pickerMomentChange.emit(newVal)\n }\n\n dateSelected(date?: T): void {\n if (!this.dateTimeFilterForViews(date)) {\n return\n }\n\n this.selectedChange.emit(date)\n\n /*if ((this.isInSingleMode && !this.dateTimeAdapter.isSameDay(date, this.selected)) ||\n this.isInRangeMode) {\n this.selectedChange.emit(date);\n }*/\n }\n\n /**\n * Change the pickerMoment value and switch to a specific view\n */\n goToDateInView(\n date: T,\n view: 'month' | 'year' | 'multi-years'\n ): void {\n this.handlePickerMomentChange(date)\n this.currentView.set(view)\n return\n }\n\n /**\n * Change the pickerMoment value\n */\n handlePickerMomentChange(date: T): void {\n const newVal = this.dateTimeAdapter.clampDate(\n date,\n this.min(),\n this.max()\n )\n this._pickerMoment.set(newVal)\n this.pickerMomentChange.emit(newVal)\n }\n\n userSelected(): void {\n this.userSelection.emit(undefined)\n }\n\n /**\n * Whether the previous period button is enabled.\n */\n prevButtonEnabled(): boolean {\n return (\n !this.min() || !this.isSameView(this.pickerMoment(), this.min())\n )\n }\n\n /**\n * Whether the next period button is enabled.\n */\n nextButtonEnabled(): boolean {\n return (\n !this.max || !this.isSameView(this.pickerMoment(), this.max())\n )\n }\n\n /**\n * Focus to the host element\n */\n focusActiveCell() {\n if (!this.destroyRef.destroyed)\n afterNextRender(() => {\n this.ngZone.runOutsideAngular(() => {\n this.elmRef.nativeElement\n ?.querySelector<HTMLElement>('.nxt-dt-calendar-cell-active')\n ?.focus()\n })\n }, { injector: this.injector })\n }\n\n selectYearInMultiYearView(normalizedYear: T): void {\n this.yearSelected.emit(normalizedYear)\n }\n\n selectMonthInYearView(normalizedMonth: T): void {\n this.monthSelected.emit(normalizedMonth)\n }\n\n /**\n * Whether the two dates represent the same view in the current view mode (month or year).\n */\n private isSameView(date1?: T, date2?: T): boolean {\n if (this.currentView() === 'month') {\n return !!(\n date1 &&\n date2 &&\n this.dateTimeAdapter.getYear(date1) ===\n this.dateTimeAdapter.getYear(date2) &&\n this.dateTimeAdapter.getMonth(date1) ===\n this.dateTimeAdapter.getMonth(date2)\n )\n } else if (this.currentView() === 'year') {\n return !!(\n date1 &&\n date2 &&\n this.dateTimeAdapter.getYear(date1) ===\n this.dateTimeAdapter.getYear(date2)\n )\n } else {\n return false\n }\n }\n\n /**\n * Get a valid date object\n */\n private getValidDate(obj: any): T | undefined {\n return this.dateTimeAdapter.isDateInstance(obj) &&\n this.dateTimeAdapter.isValid(obj)\n ? obj\n : undefined\n }\n}\n","<div class=\"nxt-dt-calendar-control\">\r\n <!-- focus when keyboard tab (http://kizu.ru/en/blog/keyboard-only-focus/#x) -->\r\n <button class=\"nxt-dt-control nxt-dt-control-button nxt-dt-control-arrow-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n [style.visibility]=\"showControlArrows()? 'visible': 'hidden'\"\r\n [disabled]=\"!prevButtonEnabled()\"\r\n [attr.aria-label]=\"prevButtonLabel()\"\r\n (click)=\"previousClicked()\">\r\n <span class=\"nxt-dt-control-content nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG Arrow Left\"> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n version=\"1.1\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 250.738 250.738\"\r\n style=\"enable-background:new 0 0 250.738 250.738;\"\r\n xml:space=\"preserve\"\r\n width=\"100%\"\r\n height=\"100%\">\r\n <path style=\"fill-rule: evenodd; clip-rule: evenodd;\"\r\n d=\"M96.633,125.369l95.053-94.533c7.101-7.055,7.101-18.492,0-25.546 c-7.1-7.054-18.613-7.054-25.714,0L58.989,111.689c-3.784,3.759-5.487,8.759-5.238,13.68c-0.249,4.922,1.454,9.921,5.238,13.681 l106.983,106.398c7.101,7.055,18.613,7.055,25.714,0c7.101-7.054,7.101-18.491,0-25.544L96.633,125.369z\" />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n </button>\r\n <div class=\"nxt-dt-calendar-control-content\">\r\n <button class=\"nxt-dt-control nxt-dt-control-button nxt-dt-control-period-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n [attr.aria-label]=\"periodButtonLabel()\"\r\n (click)=\"toggleViews()\">\r\n <span class=\"nxt-dt-control-content nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n {{periodButtonText()}}\r\n\r\n <span class=\"nxt-dt-control-button-arrow\"\r\n [style.transform]=\"'rotate(' + (isMonthView()? 0 : 180) +'deg)'\">\r\n <!-- <editor-fold desc=\"SVG Arrow\"> -->\r\n <svg version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n width=\"50%\"\r\n height=\"50%\"\r\n viewBox=\"0 0 292.362 292.362\"\r\n style=\"enable-background:new 0 0 292.362 292.362;\"\r\n xml:space=\"preserve\">\r\n <g>\r\n <path d=\"M286.935,69.377c-3.614-3.617-7.898-5.424-12.848-5.424H18.274c-4.952,0-9.233,1.807-12.85,5.424\r\n C1.807,72.998,0,77.279,0,82.228c0,4.948,1.807,9.229,5.424,12.847l127.907,127.907c3.621,3.617,7.902,5.428,12.85,5.428\r\n s9.233-1.811,12.847-5.428L286.935,95.074c3.613-3.617,5.427-7.898,5.427-12.847C292.362,77.279,290.548,72.998,286.935,69.377z\" />\r\n </g>\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n </span>\r\n </button>\r\n </div>\r\n <button class=\"nxt-dt-control nxt-dt-control-button nxt-dt-control-arrow-button\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n [style.visibility]=\"showControlArrows()? 'visible': 'hidden'\"\r\n [disabled]=\"!nextButtonEnabled()\"\r\n [attr.aria-label]=\"nextButtonLabel()\"\r\n (click)=\"nextClicked()\">\r\n <span class=\"nxt-dt-control-content nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG Arrow Right\"> -->\r\n <svg version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 250.738 250.738\"\r\n style=\"enable-background:new 0 0 250.738 250.738;\"\r\n xml:space=\"preserve\">\r\n <path style=\"fill-rule:evenodd;clip-rule:evenodd;\"\r\n d=\"M191.75,111.689L84.766,5.291c-7.1-7.055-18.613-7.055-25.713,0\r\n c-7.101,7.054-7.101,18.49,0,25.544l95.053,94.534l-95.053,94.533c-7.101,7.054-7.101,18.491,0,25.545\r\n c7.1,7.054,18.613,7.054,25.713,0L191.75,139.05c3.784-3.759,5.487-8.759,5.238-13.681\r\n C197.237,120.447,195.534,115.448,191.75,111.689z\" />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n </button>\r\n</div>\r\n<div class=\"nxt-dt-calendar-main\"\r\n cdkMonitorSubtreeFocus\r\n tabindex=\"-1\">\r\n @switch (currentView()) {\r\n @case ('month') {\r\n <nxt-date-time-month-view [pickerMoment]=\"pickerMoment()\"\r\n [firstDayOfWeek]=\"firstDayOfWeek()\"\r\n [selected]=\"selected()\"\r\n [selecteds]=\"selecteds()\"\r\n [selectMode]=\"selectMode() ?? 'single'\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [dateTimeFilter]=\"dateTimeFilter()\"\r\n [hideOtherMonths]=\"hideOtherMonths()\"\r\n (pickerMomentChange)=\"handlePickerMomentChange($event)\"\r\n (selectedChange)=\"dateSelected($event)\"\r\n (userSelection)=\"userSelected()\" />\r\n }\r\n @case ('year') {\r\n <nxt-date-time-year-view [pickerMoment]=\"pickerMoment()\"\r\n [selected]=\"selected()\"\r\n [selecteds]=\"selecteds()\"\r\n [selectMode]=\"selectMode() ?? 'single'\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [dateTimeFilter]=\"dateTimeFilter()\"\r\n (keyboardEnter)=\"focusActiveCell()\"\r\n (pickerMomentChange)=\"handlePickerMomentChange($event)\"\r\n (monthSelected)=\"selectMonthInYearView($event)\"\r\n (change)=\"goToDateInView($event, 'month')\" />\r\n }\r\n @case ('multi-years') {\r\n <nxt-date-time-multi-year-view [pickerMoment]=\"pickerMoment()\"\r\n [selected]=\"selected()\"\r\n [selecteds]=\"selecteds()\"\r\n [selectMode]=\"selectMode() ?? 'single'\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [dateTimeFilter]=\"dateTimeFilter()\"\r\n (keyboardEnter)=\"focusActiveCell()\"\r\n (pickerMomentChange)=\"handlePickerMomentChange($event)\"\r\n (yearSelected)=\"selectYearInMultiYearView($event)\"\r\n (change)=\"goToDateInView($event, 'year')\" />\r\n }\r\n }\r\n</div>\r\n","import { Directive, OutputEmitterRef, input, Signal, computed, signal, inject } from '@angular/core'\r\nimport { DateTimeAdapter } from './date-time-adapter.class'\r\nimport { DateTimeFormats, NXT_DATE_TIME_FORMATS } from './date-time-format.class'\r\n\r\n/** @internal */\r\nlet nextUniqueId = 0\r\n\r\nexport type PickerType = 'both' | 'calendar' | 'timer'\r\n\r\nexport type PickerMode = 'popup' | 'dialog' | 'inline'\r\n\r\nexport type SelectMode = 'single' | 'range' | 'rangeFrom' | 'rangeTo'\r\n\r\nexport type RenderItem = 'year' | 'month' | 'date'\r\n\r\nexport type ViewType = 'month' | 'year' | 'multi-years'\r\n\r\nexport type DateFilter<T> = (date?: T, forRender?: RenderItem) => boolean\r\n\r\n@Directive()\r\nexport abstract class DateTimeDirective<T> {\r\n protected readonly dateTimeAdapter = inject<DateTimeAdapter<T>>(DateTimeAdapter)\r\n protected readonly dateTimeFormats = inject<DateTimeFormats>(NXT_DATE_TIME_FORMATS)\r\n\r\n /**\r\n * When true, shows a timer to configure the seconds value\r\n */\r\n readonly showSecondsTimer = input<boolean>(false)\r\n\r\n /**\r\n * When true, the timer will be in 12-hour format mode\r\n */\r\n readonly hour12Timer = input<boolean>(false)\r\n\r\n /**\r\n * The view that the calendar should start on\r\n */\r\n readonly startView = input<ViewType>('month')\r\n\r\n /**\r\n * Hours to change per step\r\n */\r\n readonly stepHour = input<number>(1)\r\n\r\n /**\r\n * Minutes to change per step\r\n */\r\n readonly stepMinute = input<number>(1)\r\n\r\n /**\r\n * Seconds to change per step\r\n */\r\n readonly stepSecond = input<number>(1)\r\n\r\n /**\r\n * Set the first day of week\r\n *\r\n * Valid values are from 0 [Sunday] to 6 [Saturday]\r\n */\r\n readonly firstDayOfWeek = input<number>(0)\r\n\r\n /**\r\n * If true, don't show dates from preious / next month on the calendar month view\r\n */\r\n readonly hideOtherMonths = input<boolean>(false)\r\n\r\n readonly id = `nxt-dt-picker-${nextUniqueId++}`\r\n\r\n abstract selected: Signal<T | undefined>\r\n\r\n abstract selecteds: Signal<Array<T | undefined>>\r\n\r\n abstract dateTimeFilter: Signal<DateFilter<T> | undefined>\r\n\r\n abstract max: Signal<T | undefined>\r\n\r\n abstract min: Signal<T | undefined>\r\n\r\n abstract selectMode: Signal<SelectMode | undefined>\r\n\r\n abstract startAt: Signal<T | undefined>\r\n\r\n abstract isOpen: Signal<boolean>\r\n\r\n abstract pickerMode: Signal<PickerMode>\r\n\r\n abstract pickerType: Signal<PickerType>\r\n\r\n abstract isInSingleMode: Signal<boolean>\r\n\r\n abstract isInRangeMode: Signal<boolean>\r\n\r\n abstract disabled: Signal<boolean>\r\n\r\n abstract select(date: T | Array<T | undefined>): void\r\n\r\n abstract yearSelected: OutputEmitterRef<T>\r\n\r\n abstract monthSelected: OutputEmitterRef<T>\r\n\r\n abstract selectYear(normalizedYear: T): void\r\n\r\n abstract selectMonth(normalizedMonth: T): void\r\n\r\n readonly formatString = computed(() => this.pickerType() === 'both'\r\n ? this.dateTimeFormats.fullPickerInput\r\n : this.pickerType() === 'calendar'\r\n ? this.dateTimeFormats.datePickerInput\r\n : this.dateTimeFormats.timePickerInput)\r\n\r\n /**\r\n * Date Time Checker to check if the give dateTime is selectable\r\n */\r\n readonly dateTimeChecker = signal((dateTime: T | undefined) => (\r\n !!dateTime &&\r\n (!this.dateTimeFilter() || this.dateTimeFilter()!(dateTime)) &&\r\n (!this.min() || this.dateTimeAdapter.compare(dateTime, this.min()) >= 0) &&\r\n (!this.max() || this.dateTimeAdapter.compare(dateTime, this.max()) <= 0)\r\n ))\r\n\r\n protected getValidDate(obj: any): T | undefined {\r\n return this.dateTimeAdapter.isDateInstance(obj) &&\r\n this.dateTimeAdapter.isValid(obj)\r\n ? obj\r\n : undefined\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core'\r\n\r\n/** @internal */\r\n@Pipe({\r\n name: 'numberFixedLen'\r\n})\r\nexport class NumberFixedLenPipe implements PipeTransform {\r\n transform(num: number | undefined, len: number | undefined) {\r\n if (num == undefined || !Number.isFinite(num))\r\n return undefined\r\n\r\n const number = Math.floor(num)\r\n\r\n if (len == undefined || !Number.isFinite(len))\r\n return number\r\n\r\n return number.toFixed(0).padStart(Math.floor(len), '0')\r\n }\r\n}\r\n","import { coerceNumberProperty } from '@angular/cdk/coercion'\nimport { Component, OnDestroy, OnInit, computed, input, output } from '@angular/core'\nimport { Subject, Subscription } from 'rxjs'\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators'\nimport { NumberFixedLenPipe } from '../number-fixed-len.pipe'\n\n/** @internal */\n@Component({\n selector: 'nxt-date-time-timer-box',\n templateUrl: './timer-box.component.html',\n styleUrls: ['./timer-box.component.scss'],\n preserveWhitespaces: false,\n imports: [\n NumberFixedLenPipe\n ],\n host: {\n '[class.nxt-dt-timer-box]': 'true'\n }\n})\n\nexport class TimerBoxComponent implements OnInit, OnDestroy {\n\n readonly showDivider = input<boolean>(false)\n\n readonly upBtnAriaLabel = input<string>()\n\n readonly upBtnDisabled = input<boolean>(false)\n\n readonly downBtnAriaLabel = input<string>()\n\n readonly downBtnDisabled = input<boolean>(false)\n\n /**\n * Value would be displayed in the box\n * If it is undefiend, the box would display [value]\n */\n readonly boxValue = input<number>()\n\n readonly value = input<number>(0)\n\n readonly min = input<number>(0)\n\n readonly max = input<number>(0)\n\n readonly step = input<number>(1)\n\n readonly inputLabel = input<string>()\n\n readonly valueChange = output<number>()\n\n readonly inputChange = output<number>()\n\n private inputStream = new Subject<string>()\n\n private inputStreamSub?: Subscription\n\n readonly displayValue = computed(() => this.boxValue() || this.value())\n\n ngOnInit() {\n this.inputStreamSub = this.inputStream.pipe(\n debounceTime(500),\n distinctUntilChanged()\n ).subscribe((val: string) => {\n if (val) {\n const inputValue = coerceNumberProperty(val, 0)\n this.updateValueViaInput(inputValue)\n }\n })\n }\n\n ngOnDestroy(): void {\n this.inputStreamSub?.unsubscribe()\n this.inputStreamSub = undefined\n }\n\n upBtnClicked(): void {\n this.updateValue(this.value() + this.step())\n }\n\n downBtnClicked(): void {\n this.updateValue(this.value() - this.step())\n }\n\n handleInputChange(val: string): void {\n this.inputStream.next(val)\n }\n\n private updateValue(value: number): void {\n this.valueChange.emit(value)\n }\n\n private updateValueViaInput(value: number): void {\n if (value > this.max() || value < this.min()) {\n return\n }\n this.inputChange.emit(value)\n }\n}\n","@if (showDivider()) {\r\n<div class=\"nxt-dt-timer-divider\"\r\n aria-hidden=\"true\"></div>\r\n}\r\n<button class=\"nxt-dt-control-button nxt-dt-control-arrow-button\"\r\n type=\"button\"\r\n tabindex=\"-1\"\r\n [disabled]=\"upBtnDisabled()\"\r\n [attr.aria-label]=\"upBtnAriaLabel()\"\r\n (click)=\"upBtnClicked()\">\r\n <span class=\"nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG Arrow Up\"> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n version=\"1.1\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 451.847 451.846\"\r\n style=\"enable-background:new 0 0 451.847 451.846;\"\r\n xml:space=\"preserve\"\r\n width=\"100%\"\r\n height=\"100%\">\r\n <path d=\"M248.292,106.406l194.281,194.29c12.365,12.359,12.365,32.391,0,44.744c-12.354,12.354-32.391,12.354-44.744,0\r\n L225.923,173.529L54.018,345.44c-12.36,12.354-32.395,12.354-44.748,0c-12.359-12.354-12.359-32.391,0-44.75L203.554,106.4\r\n c6.18-6.174,14.271-9.259,22.369-9.259C234.018,97.141,242.115,100.232,248.292,106.406z\" />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n</button>\r\n<label class=\"nxt-dt-timer-content\">\r\n <input class=\"nxt-dt-timer-input\"\r\n maxlength=\"2\"\r\n [value]=\"displayValue() | numberFixedLen : 2\"\r\n (input)=\"handleInputChange(valueInput.value)\"\r\n #valueInput>\r\n <span class=\"nxt-hidden-accessible\">{{inputLabel()}}</span>\r\n</label>\r\n<button class=\"nxt-dt-control-button nxt-dt-control-arrow-button\"\r\n type=\"button\"\r\n tabindex=\"-1\"\r\n [disabled]=\"downBtnDisabled()\"\r\n [attr.aria-label]=\"downBtnAriaLabel()\"\r\n (click)=\"downBtnClicked()\">\r\n <span class=\"nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n <!-- <editor-fold desc=\"SVG Arrow Down\"> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n version=\"1.1\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 451.847 451.846\"\r\n style=\"enable-background:new 0 0 451.847 451.846;\"\r\n xml:space=\"preserve\"\r\n width=\"100%\"\r\n height=\"100%\">\r\n <path d=\"M225.923,354.706c-8.098,0-16.195-3.092-22.369-9.263L9.27,151.157c-12.359-12.359-12.359-32.397,0-44.751\r\n c12.354-12.354,32.388-12.354,44.748,0l171.905,171.915l171.906-171.909c12.359-12.354,32.391-12.354,44.744,0\r\n c12.365,12.354,12.365,32.392,0,44.751L248.292,345.449C242.115,351.621,234.018,354.706,225.923,354.706z\" />\r\n </svg>\r\n <!-- </editor-fold> -->\r\n </span>\r\n</button>\r\n","import { Component, ElementRef, NgZone, computed, input, linkedSignal, output, inject, afterNextRender, Injector, DestroyRef } from '@angular/core'\nimport { DateTimeAdapter } from '../../class/date-time-adapter.class'\nimport { DateTimeIntl } from '../date-time-picker-intl.service'\nimport { TimerBoxComponent } from '../timer-box/timer-box.component'\n\n@Component({\n selector: 'nxt-date-time-timer',\n templateUrl: './timer.component.html',\n styleUrls: ['./timer.component.scss'],\n preserveWhitespaces: false,\n imports: [\n TimerBoxComponent\n ],\n host: {\n '[class.nxt-dt-timer]': 'true',\n '[attr.tabindex]': '-1'\n }\n})\nexport class TimerComponent<T> {\n private readonly ngZone = inject(NgZone)\n private readonly injector = inject(Injector)\n private readonly destroyRef = inject(DestroyRef)\n private readonly elmRef = inject<ElementRef<HTMLElement>>(ElementRef)\n private readonly pickerIntl = inject(DateTimeIntl)\n private readonly dateTimeAdapter = inject<DateTimeAdapter<T>>(DateTimeAdapter)\n\n /** The current picker moment */\n readonly pickerMoment = input<T | undefined, T | undefined>(undefined, {\n transform: value => {\n value = this.dateTimeAdapter.deserialize(value)\n return this.getValidDate(value) || this.dateTimeAdapter.now()\n }\n })\n\n /** The minimum selectable date time */\n readonly min = input<T | undefined, T | undefined>(undefined, {\n transform: value => {\n value = this.dateTimeAdapter.deserialize(value)\n return this.getValidDate(value)\n }\n })\n\n /** The maximum selectable date time */\n readonly max = input<T | undefined, T | undefined>(undefined, {\n transform: value => {\n value = this.dateTimeAdapter.deserialize(value)\n return this.getValidDate(value)\n }\n })\n\n /**\n * Whether to show the second's timer\n */\n readonly showSecondsTimer = input<boolean>(false)\n\n /**\n * Whether the timer is in hour12 format\n */\n readonly hour12Timer = input<boolean>(false)\n\n /**\n * Hours to change per step\n */\n readonly stepHour = input<number>(1)\n\n /**\n * Minutes to change per step\n */\n readonly stepMinute = input<number>(1)\n\n /**\n * Seconds to change per step\n */\n readonly stepSecond = input<number>(1)\n\n readonly hourValue = computed(() => this.dateTimeAdapter.getHours(this.pickerMoment()))\n private readonly hoursWithPM = computed(() => {\n let hours = this.hourValue()\n\n let isPM: boolean | undefined\n\n if (!this.hour12Timer()) {\n return { hours, isPM }\n } else {\n if (hours === 0) {\n hours = 12\n isPM = false\n } else if (hours > 0 && hours < 12) {\n isPM = false\n } else if (hours === 12) {\n isPM = true\n } else if (hours > 12 && hours < 24) {\n hours = hours - 12\n isPM = true\n }\n\n return { hours, isPM }\n }\n })\n\n private _isPM = false\n // a flag indicates the current timer moment is in PM or AM\n private readonly isPM = linkedSignal({\n source: () => this.hoursWithPM().isPM,\n computation: (v) => {\n if (v != undefined)\n return this._isPM = v\n return this._isPM\n }\n })\n\n /**\n * The value would be displayed in hourBox.\n * We need this because the value displayed in hourBox it not\n * the same as the hourValue when the timer is in hour12Timer mode.\n */\n readonly hourBoxValue = computed(() => this.hoursWithPM().hours)\n\n readonly minuteValue = computed(() => this.dateTimeAdapter.getMinutes(this.pickerMoment()))\n\n readonly secondValue = computed(() => this.dateTimeAdapter.getSeconds(this.pickerMoment()))\n\n readonly upHourButtonLabel = this.pickerIntl.upHourLabel.asReadonly()\n\n readonly downHourButtonLabel = this.pickerIntl.downHourLabel.asReadonly()\n\n readonly upMinuteButtonLabel = this.pickerIntl.upMinuteLabel.asReadonly()\n\n readonly downMinuteButtonLabel = this.pickerIntl.downMinuteLabel.asReadonly()\n\n readonly upSecondButtonLabel = this.pickerIntl.upSecondLabel.asReadonly()\n\n readonly downSecondButtonLabel = this.pickerIntl.downSecondLabel.asReadonly()\n\n readonly hour12ButtonLabel = computed(() => this.isPM()\n ? this.pickerIntl.hour12PMLabel()\n : this.pickerIntl.hour12AMLabel())\n\n readonly selectedChange = output<T>()\n\n /**\n * Focus to the host element\n */\n focus() {\n if (!this.destroyRef.destroyed)\n afterNextRender(() => {\n this.ngZone.runOutsideAngular(() => {\n this.elmRef.nativeElement.focus()\n })\n }, {\n injector: this.injector\n })\n }\n\n /**\n * Set the hour value via typing into timer box input\n * We need this to handle the hour value when the timer is in hour12 mode\n */\n setHourValueViaInput(hours: number): void {\n const hour12Timer = this.hour12Timer()\n if (hour12Timer && this.isPM() && hours >= 1 && hours <= 11) {\n hours = hours + 12\n } else if (hour12Timer && !this.isPM() && hours === 12) {\n hours = 0\n }\n\n this.setHourValue(hours)\n }\n\n setHourValue(hours: number): void {\n const m = this.dateTimeAdapter.setHours(this.pickerMoment(), hours)\n this.selectedChange.emit(m)\n }\n\n setMinuteValue(minutes: number): void {\n const m = this.dateTimeAdapter.setMinutes(this.pickerMoment(), minutes)\n this.selectedChange.emit(m)\n }\n\n setSecondValue(seconds: number): void {\n const m = this.dateTimeAdapter.setSeconds(this.pickerMoment(), seconds)\n this.selectedChange.emit(m)\n }\n\n setMeridiem(event: any): void {\n this.isPM.set(!this.isPM())\n\n let hours = this.hourValue()\n if (this.isPM()) {\n hours = hours + 12\n } else {\n hours = hours - 12\n }\n\n if (hours >= 0 && hours <= 23) {\n this.setHourValue(hours)\n }\n\n event.preventDefault()\n }\n\n /**\n * Check if the up hour button is enabled\n */\n readonly upHourEnabled = computed(() => (\n !this.max() ||\n this.compareHours(this.stepHour(), this.max()!) < 1\n ))\n /**\n * Check if the down hour button is enabled\n */\n readonly downHourEnabled = computed(() => (\n !this.min() ||\n this.compareHours(-this.stepHour(), this.min()!) > -1\n ))\n\n /**\n * Check if the up minute button is enabled\n */\n readonly upMinuteEnabled = computed(() => (\n !this.max() ||\n this.compareMinutes(this.stepMinute(), this.max()!) < 1\n ))\n\n /**\n * Check if the down minute button is enabled\n */\n readonly downMinuteEnabled = computed(() => (\n !this.min() ||\n this.compareMinutes(-this.stepMinute(), this.min()!) > -1\n ))\n\n /**\n * Check if the up second button is enabled\n */\n readonly upSecondEnabled = computed(() => (\n !this.max() ||\n this.compareSeconds(this.stepSecond(), this.max()!) < 1\n ))\n\n /**\n * Check if the down second button is enabled\n */\n readonly downSecondEnabled = computed(() => (\n !this.min() ||\n this.compareSeconds(-this.stepSecond(), this.min()!) > -1\n ))\n\n /**\n * PickerMoment's hour value +/- certain amount and compare it to the give date\n * 1 is after the comparedDate\n * -1 is before the comparedDate\n * 0 is equal the comparedDate\n */\n private compareHours(amount: number, comparedDate: T): number {\n const hours = this.dateTimeAdapter.getHours(this.pickerMoment()) + amount\n const result = this.dateTimeAdapter.setHours(this.pickerMoment(), hours)\n return this.dateTimeAdapter.compare(result, comparedDate)\n }\n\n /**\n * PickerMoment's minute value +/- certain amount and compare it to the give date\n * 1 is after the comparedDate\n * -1 is before the comparedDate\n * 0 is equal the comparedDate\n */\n private compareMinutes(amount: number, comparedDate: T): number {\n const minutes =\n this.dateTimeAdapter.getMinutes(this.pickerMoment()) + amount\n const result = this.dateTimeAdapter.setMinutes(\n this.pickerMoment(),\n minutes\n )\n return this.dateTimeAdapter.compare(result, comparedDate)\n }\n\n /**\n * PickerMoment's second value +/- certain amount and compare it to the give date\n * 1 is after the comparedDate\n * -1 is before the comparedDate\n * 0 is equal the comparedDate\n */\n private compareSeconds(amount: number, comparedDate: T): number {\n const seconds =\n this.dateTimeAdapter.getSeconds(this.pickerMoment()) + amount\n const result = this.dateTimeAdapter.setSeconds(\n this.pickerMoment(),\n seconds\n )\n return this.dateTimeAdapter.compare(result, comparedDate)\n }\n\n /**\n * Get a valid date object\n */\n private getValidDate(obj: any): T | undefined {\n return this.dateTimeAdapter.isDateInstance(obj) &&\n this.dateTimeAdapter.isValid(obj)\n ? obj\n : undefined\n }\n}\n","<nxt-date-time-timer-box [upBtnAriaLabel]=\"upHourButtonLabel()\"\r\n [downBtnAriaLabel]=\"downHourButtonLabel()\"\r\n [upBtnDisabled]=\"!upHourEnabled()\"\r\n [downBtnDisabled]=\"!downHourEnabled()\"\r\n [boxValue]=\"hourBoxValue()\"\r\n [value]=\"hourValue()\"\r\n [min]=\"0\"\r\n [max]=\"23\"\r\n [step]=\"stepHour()\"\r\n inputLabel=\"Hour\"\r\n (inputChange)=\"setHourValueViaInput($event)\"\r\n (valueChange)=\"setHourValue($event)\" />\r\n<nxt-date-time-timer-box [showDivider]=\"true\"\r\n [upBtnAriaLabel]=\"upMinuteButtonLabel()\"\r\n [downBtnAriaLabel]=\"downMinuteButtonLabel()\"\r\n [upBtnDisabled]=\"!upMinuteEnabled()\"\r\n [downBtnDisabled]=\"!downMinuteEnabled()\"\r\n [value]=\"minuteValue()\"\r\n [min]=\"0\"\r\n [max]=\"59\"\r\n [step]=\"stepMinute()\"\r\n inputLabel=\"Minute\"\r\n (inputChange)=\"setMinuteValue($event)\"\r\n (valueChange)=\"setMinuteValue($event)\" />\r\n@if (showSecondsTimer()) {\r\n<nxt-date-time-timer-box [showDivider]=\"true\"\r\n [upBtnAriaLabel]=\"upSecondButtonLabel()\"\r\n [downBtnAriaLabel]=\"downSecondButtonLabel()\"\r\n [upBtnDisabled]=\"!upSecondEnabled()\"\r\n [downBtnDisabled]=\"!downSecondEnabled()\"\r\n [value]=\"secondValue()\"\r\n [min]=\"0\"\r\n [max]=\"59\"\r\n [step]=\"stepSecond()\"\r\n inputLabel=\"Second\"\r\n (inputChange)=\"setSecondValue($event)\"\r\n (valueChange)=\"setSecondValue($event)\" />\r\n}\r\n\r\n@if (hour12Timer()) {\r\n<div class=\"nxt-dt-timer-hour12\">\r\n <button class=\"nxt-dt-control-button nxt-dt-timer-hour12-box\"\r\n type=\"button\"\r\n tabindex=\"0\"\r\n (click)=\"setMeridiem($event)\">\r\n <span class=\"nxt-dt-control-button-content\"\r\n tabindex=\"-1\">\r\n {{hour12ButtonLabel()}}\r\n </span>\r\n </button>\r\n</div>\r\n}\r\n","import { CdkTrapFocus } from '@angular/cdk/a11y'\nimport { AfterContentInit, AfterViewInit, AnimationCallbackEvent, Component, computed, ElementRef, inject, signal, viewChild } from '@angular/core'\nimport { Subject } from 'rxjs'\nimport { DateTimeAdapter } from '../../class/date-time-adapter.class'\nimport { DateTimeDirective } from '../../class/date-time.class'\nimport { CalendarComponent } from '../calendar/calendar.component'\nimport { DateTimeIntl } from '../date-time-picker-intl.service'\nimport { TimerComponent } from '../timer/timer.component'\n\n/** @internal */\n@Component({\n selector: 'nxt-date-time-container',\n templateUrl: './date-time-picker-container.component.html',\n styleUrls: ['./date-time-picker-container.component.scss'],\n preserveWhitespaces: false,\n imports: [\n CdkTrapFocus,\n CalendarComponent,\n TimerComponent\n ],\n host: {\n '[class.nxt-dt-container]': 'true',\n '[class.nxt-dt-popup-container]': \"pickerMode() === 'popup'\",\n '[class.nxt-dt-dialog-container]': \"pickerMode() === 'dialog'\",\n '[class.nxt-dt-inline-container]': \"pickerMode() === 'inline'\",\n '[class.nxt-dt-container-disabled]': 'disabled()',\n '[attr.id]': 'picker()?.id',\n '(animate.enter)': 'transformPickerEnter($event)',\n '(animate.leave)': 'transformPickerLeave($event)'\n }\n})\nexport class DateTimeContainerComponent<T> implements AfterContentInit, AfterViewInit {\n\n static animate = true\n\n transformPickerEnter({ target, animationComplete }: AnimationCallbackEvent) {\n if (!DateTimeContainerComponent.animate) {\n this.pickerOpened$.next()\n animationComplete()\n return\n }\n let anim = target.animate([\n { opacity: 0, transform: 'scale(1, 0)' },\n { opacity: 1, transform: 'scale(1, 1)' }\n ], {\n duration: 400,\n easing: 'cubic-bezier(0.25, 0.8, 0.25, 1)'\n })\n const inner = target.querySelector<HTMLElement>('.nxt-dt-container-inner')\n if (inner) {\n inner.style.opacity = '0'\n anim = inner.animate([\n { opacity: 0 },\n { opacity: 1 }\n ], {\n duration: 400,\n delay: 100,\n easing: 'cubic-bezier(0.55, 0, 0.55, 0.2)'\n })\n }\n anim.addEventListener('finish', () => {\n if (inner)\n inner.style.opacity = ''\n this.pickerOpened$.next()\n animationComplete()\n })\n }\n\n transformPickerLeave({ target, animationComplete }: AnimationCallbackEvent) {\n if (!DateTimeContainerComponent.animate) {\n animationComplete()\n return\n }\n\n const anim = target.animate([\n { opacity: 1 },\n { opacity: 0 }\n ], {\n duration: 100,\n easing: 'linear'\n })\n anim.addEventListener('finish', () => {\n animationComplete()\n })\n }\n\n private readonly elmRef = inject<ElementRef<HTMLElement>>(ElementRef)\n private readonly pickerIntl = inject(DateTimeIntl)\n private readonly dateTimeAdapter = inject<DateTimeAdapter<T>>(DateTimeAdapter)\n\n readonly calendar = viewChild(CalendarComponent)\n\n readonly timer = viewChild(TimerComponent)\n\n readonly picker = signal<DateTimeDirective<T> | undefined>(undefined)\n readonly activeSelectedIndex = signal(0) // The current active SelectedIndex in range select mode (0: 'from', 1: 'to')\n\n /**\n * Stream emits when try to hide picker\n */\n private readonly hidePicker$ = new Subject<void>()\n\n readonly hidePickerStream = this.hidePicker$.asObservable()\n\n /**\n * Stream emits when try to confirm the selected value\n */\n private readonly confirmSelected$ = new Subject<Event>()\n\n readonly confirmSelectedStream = this.confirmSelected$.asObservable()\n\n private readonly pickerOpened$ = new Subject<void>()\n\n readonly pickerOpenedStream = this.pickerOpened$.asObservable()\n\n /**\n * The current picker moment. This determines which time period is shown and which date is\n * highlighted when using keyboard navigation.\n */\n private readonly _clamPickerMoment = signal<T | undefined>(undefined)\n\n get pickerMoment() {\n return this._clamPickerMoment()\n }\n\n set pickerMoment(value: T | undefined) {\n if (value) {\n this._clamPickerMoment.set(this.dateTimeAdapter.clampDate(\n value,\n this.min(),\n this.max()\n ))\n }\n }\n\n readonly pickerType = computed(() => this.picker()?.pickerType())\n readonly pickerMode = computed(() => this.picker()?.pickerMode())\n readonly min = computed(() => this.picker()?.min())\n readonly max = computed(() => this.picker()?.max())\n readonly selected = computed(() => this.picker()?.selected())\n readonly selecteds = computed(() => this.picker()?.selecteds())\n readonly selectMode = computed(() => this.picker()?.selectMode())\n readonly isInRangeMode = computed(() => this.picker()?.isInRangeMode())\n readonly firstDayOfWeek = computed(() => this.picker()?.firstDayOfWeek())\n readonly dateTimeFilter = computed(() => this.picker()?.dateTimeFilter())\n readonly startView = computed(() => this.picker()?.startView())\n readonly hideOtherMonths = computed(() => this.picker()?.hideOtherMonths())\n readonly showSecondsTimer = computed(() => this.picker()?.showSecondsTimer())\n readonly hour12Timer = computed(() => this.picker()?.hour12Timer())\n readonly stepHour = computed(() => this.picker()?.stepHour())\n readonly stepMinute = computed(() => this.picker()?.stepMinute())\n readonly stepSecond = computed(() => this.picker()?.stepSecond())\n readonly disabled = computed(() => this.picker()?.disabled())\n\n private readonly formatString = computed(() => this.picker()?.formatString())\n private readonly startAt = computed(() => this.picker()?.startAt())\n private readonly dateTimeChecker = computed(() => this.picker()?.dateTimeChecker())\n\n readonly cancelLabel = this.pickerIntl.cancelBtnLabel.asReadonly()\n\n readonly setLabel = this.pickerIntl.setBtnLabel.asReadonly()\n\n /**\n * The range 'from' label\n */\n readonly fromLabel = this.pickerIntl.rangeFromLabel.asReadonly()\n\n /**\n * The range 'to' label\n */\n readonly toLabel = this.pickerIntl.rangeToLabel.asReadonly()\n\n /**\n * The range 'from' formatted value\n */\n readonly fromFormattedValue = computed(() => {\n const value = this.selecteds()?.[0]\n return value\n ? this.dateTimeAdapter.format(value, this.formatString())\n : ''\n })\n\n /**\n * The range 'to' formatted value\n */\n readonly toFormattedValue = computed(() => {\n const value = this.selecteds()?.[1]\n return value\n ? this.dateTimeAdapter.format(value, this.formatString())\n : ''\n })\n\n /**\n * Cases in which the control buttons show in the picker\n * 1) picker mode is 'dialog'\n * 2) picker type is NOT 'calendar' and the picker mode is NOT 'inline'\n */\n readonly showControlButtons = computed(() => {\n const pickerMode = this.pickerMode()\n const pickerType = this.pickerType()\n return (\n pickerMode === 'dialog' ||\n (pickerType !== 'calendar' &&\n pickerMode !== 'inline')\n )\n })\n\n get containerElm(): HTMLElement {\n return this.elmRef.nativeElement\n }\n\n ngAfterContentInit(): void {\n this.initPicker()\n }\n\n ngAfterViewInit(): void {\n this.focusPicker()\n }\n\n dateSelected(date?: T): void {\n let result\n\n const picker = this.picker()\n\n if (picker?.isInSingleMode()) {\n result = this.dateSelectedInSingleMode(date)\n if (result) {\n this.pickerMoment = result\n picker.select(result)\n } else {\n // we close the picker when result is undefined and pickerType is calendar.\n if (this.pickerType() === 'calendar') {\n this.hidePicker$.next()\n }\n }\n return\n }\n\n if (picker?.isInRangeMode()) {\n result = this.dateSelectedInRangeMode(date)\n if (result) {\n this.pickerMoment = result[this.activeSelectedIndex()]\n picker.select(result)\n }\n }\n }\n\n timeSelected(time?: T): void {\n this.pickerMoment = this.dateTimeAdapter.clone(time)\n\n const picker = this.picker()\n\n if (!picker?.dateTimeChecker()?.(this.pickerMoment)) {\n return\n }\n\n if (picker.isInSingleMode()) {\n picker.select(this.pickerMoment)\n return\n }\n\n if (this.isInRangeMode()) {\n const selecteds = [...this.selecteds() || []]\n\n // check if the 'from' is after 'to' or 'to'is before 'from'\n // In this case, we set both the 'from' and 'to' the same value\n if (\n (this.activeSelectedIndex() === 0 &&\n selecteds[1] &&\n this.dateTimeAdapter.compare(\n this.pickerMoment,\n selecteds[1]\n ) === 1) ||\n (this.activeSelectedIndex() === 1 &&\n selecteds[0] &&\n this.dateTimeAdapter.compare(\n this.pickerMoment,\n selecteds[0]\n ) === -1)\n ) {\n selecteds[0] = this.pickerMoment\n selecteds[1] = this.pickerMoment\n } else {\n selecteds[this.activeSelectedIndex()] = this.pickerMoment\n }\n\n picker.select(selecteds)\n }\n }\n\n /**\n * Handle click on cancel button\n */\n onCancelClicked(event: Event): void {\n this.hidePicker$.next()\n event.preventDefault()\n return\n }\n\n /**\n * Handle click on set button\n */\n onSetClicked(event: Event): void {\n if (!this.dateTimeChecker()?.(this.pickerMoment)) {\n this.hidePicker$.next()\n event.preventDefault()\n return\n }\n\n this.confirmSelected$.next(event)\n event.preventDefault()\n return\n }\n\n /**\n * Handle click on inform radio group\n */\n handleClickOnInfoGroup(event: any, index: number): void {\n this.setActiveSelectedIndex(index)\n event.preventDefault()\n event.stopPropagation()\n }\n\n /**\n * Handle click on inform radio group\n */\n handleKeydownOnInfoGroup(\n event: any,\n next: any,\n index: number\n ): void {\n switch (event.keyCode) {\n case 'ArrowDown':\n case 'ArrowRight':\n case 'ArrowUp':\n case 'ArrowLeft':\n next.focus()\n this.setActiveSelectedIndex(index === 0 ? 1 : 0)\n event.preventDefault()\n event.stopPropagation()\n break\n\n case 'Space':\n this.setActiveSelectedIndex(index)\n event.preventDefault()\n event.stopPropagation()\n break\n\n default:\n return\n }\n }\n\n /**\n * Set the value of activeSelectedIndex\n */\n private setActiveSelectedIndex(index: number): void {\n if (\n this.selectMode() === 'range' &&\n this.activeSelectedIndex() !== index\n ) {\n this.activeSelectedIndex.set(index)\n\n const selected = this.selecteds()?.[this.activeSelectedIndex()]\n if (this.selecteds() && selected) {\n this.pickerMoment = this.dateTimeAdapter.clone(selected)\n }\n }\n return\n }\n\n private initPicker(): void {\n this.pickerMoment = this.startAt() || this.dateTimeAdapter.now()\n this.activeSelectedIndex.set(this.selectMode() === 'rangeTo' ? 1 : 0)\n }\n\n /**\n * Select calendar date in single mode,\n * it returns undefined when date is not selected.\n */\n private dateSelectedInSingleMode(date?: T): T | undefined {\n if (this.dateTimeAdapter.isSameDay(date, this.selected())) {\n return undefined\n }\n\n return this.updateAndCheckCalendarDate(date)\n }\n\n /**\n * Select dates in range Mode\n */\n private dateSelectedInRangeMode(date?: T): Array<T | undefined> | undefined {\n let from = this.selecteds()?.[0]\n let to = this.selecteds()?.[1]\n\n const result = this.updateAndCheckCalendarDate(date)\n\n if (!result) {\n return\n }\n\n // if the given calendar day is after or equal to 'from',\n // set ths given date as 'to'\n // otherwise, set it as 'from' and set 'to' to undefined\n if (this.selectMode() === 'range') {\n if (\n this.selecteds()?.length &&\n !to &&\n from &&\n (this.dateTimeAdapter.differenceInCalendarDays(result, from) ?? 0) >= 0\n ) {\n to = result\n this.activeSelectedIndex.set(1)\n } else {\n from = result\n to = undefined\n this.activeSelectedIndex.set(0)\n }\n } else if (this.selectMode() === 'rangeFrom') {\n from = result\n\n // if the from value is after the to value, set the to value as undefined\n if (to && this.dateTimeAdapter.compare(from, to) > 0) {\n to = undefined\n }\n } else if (this.selectMode() === 'rangeTo') {\n to = result\n\n // if the from value is after the to value, set the from value as undefined\n if (from && this.dateTimeAdapter.compare(from, to) > 0) {\n from = undefined\n }\n }\n\n return [from, to]\n }\n\n /**\n * Update the given calendar date's time and check if it is valid\n * Because the calendar date has 00:00:00 as default time, if the picker type is 'both',\n * we need to update the given calendar date's time before selecting it.\n * if it is valid, return the updated dateTime\n * if it is not valid, return undefined\n */\n private updateAndCheckCalendarDate(date?: T): T | undefined {\n let result\n\n // if the picker is 'both', update the calendar date's time value\n if (this.pickerType() === 'both') {\n result = this.dateTimeAdapter.createDate(\n this.dateTimeAdapter.getYear(date),\n this.dateTimeAdapter.getMonth(date),\n this.dateTimeAdapter.getDate(date),\n this.dateTimeAdapter.getHours(this.pickerMoment),\n this.dateTimeAdapter.getMinutes(this.pickerMoment),\n this.dateTimeAdapter.getSeconds(this.pickerMoment)\n )\n result = this.dateTimeAdapter.clampDate(\n result,\n this.min(),\n this.max()\n )\n } else {\n result = this.dateTimeAdapter.clone(date)\n }\n\n // check the updated dateTime\n return this.dateTimeChecker()?.(result) ? result : undefined\n }\n\n /**\n * Focus to the picker\n */\n private focusPicker(): void {\n if (this.pickerMode() === 'inline') {\n return\n }\n\n const calendar = this.calendar()\n const timer = this.timer()\n if (calendar) {\n calendar.focusActiveCell()\n } else if (timer) {\n timer.focus()\n }\n }\n}\n","<div [cdkTrapFocus]=\"pickerMode() !== 'inline'\"\n class=\"nxt-dt-container-inner\">\n\n @if (pickerType() === 'both' || pickerType() === 'calendar') {\n <nxt-date-time-calendar class=\"nxt-dt-container-row\"\n [firstDayOfWeek]=\"firstDayOfWeek() ?? 0\"\n [(pickerMoment)]=\"pickerMoment\"\n [selected]=\"selected()\"\n [selecteds]=\"selecteds() ?? []\"\n [selectMode]=\"selectMode()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [dateTimeFilter]=\"dateTimeFilter()\"\n [startView]=\"startView() ?? 'month'\"\n [hideOtherMonths]=\"!!hideOtherMonths()\"\n (yearSelected)=\"picker()?.selectYear($event)\"\n (monthSelected)=\"picker()?.selectMonth($event)\"\n (selectedChange)=\"dateSelected($event)\" />\n }\n\n @if (pickerType() === 'both' || pickerType() === 'timer') {\n <nxt-date-time-timer class=\"nxt-dt-container-row\"\n [pickerMoment]=\"pickerMoment\"\n [min]=\"min()\"\n [max]=\"max()\"\n [showSecondsTimer]=\"!!showSecondsTimer()\"\n [hour12Timer]=\"!!hour12Timer()\"\n [stepHour]=\"stepHour() ?? 1\"\n [stepMinute]=\"stepMinute() ?? 1\"\n [stepSecond]=\"stepSecond() ?? 1\"\n (selectedChange)=\"timeSelected($event)\" />\n }\n\n @if (isInRangeMode()) {\n <div role=\"radiogroup\"\n class=\"nxt-dt-container-info nxt-dt-container-row\">\n <div role=\"radio\"\n [tabindex]=\"activeSelectedIndex() === 0 ? 0 : -1\"\n [attr.aria-checked]=\"activeSelectedIndex() === 0\"\n class=\"nxt-dt-control nxt-dt-container-range nxt-dt-container-from\"\n [class.nxt-dt-container-info-active]=\"activeSelectedIndex() === 0\"\n (click)=\"handleClickOnInfoGroup($event, 0)\"\n (keydown)=\"handleKeydownOnInfoGroup($event, to, 0)\"\n #from>\n <span class=\"nxt-dt-control-content nxt-dt-container-range-content\"\n tabindex=\"-1\">\n <span class=\"nxt-dt-container-info-label\">{{fromLabel()}}:</span>\n <span class=\"nxt-dt-container-info-value\">{{fromFormattedValue()}}</span>\n </span>\n </div>\n <div role=\"radio\"\n [tabindex]=\"activeSelectedIndex() === 1 ? 0 : -1\"\n [attr.aria-checked]=\"activeSelectedIndex() === 1\"\n class=\"nxt-dt-control nxt-dt-container-range nxt-dt-container-to\"\n [class.nxt-dt-container-info-active]=\"activeSelectedIndex() === 1\"\n (click)=\"handleClickOnInfoGroup($event, 1)\"\n (keydown)=\"handleKeydownOnInfoGroup($event, from, 1)\"\n #to>\n <span class=\"nxt-dt-control-content nxt-dt-container-range-content\"\n tabindex=\"-1\">\n <span class=\"nxt-dt-container-info-label\">{{toLabel()}}:</span>\n <span class=\"nxt-dt-container-info-value\">{{toFormattedValue()}}</span>\n </span>\n </div>\n </div>\n }\n\n @if (showControlButtons()) {\n <div class=\"nxt-dt-container-buttons nxt-dt-container-row\">\n <button class=\"nxt-dt-control nxt-dt-control-button nxt-dt-container-control-button\"\n type=\"button\"\n tabindex=\"0\"\n (click)=\"onCancelClicked($event)\">\n <span class=\"nxt-dt-control-content nxt-dt-control-button-content\"\n tabindex=\"-1\">\n {{cancelLabel()}}\n </span>\n </button>\n <button class=\"nxt-dt-control nxt-dt-control-button nxt-dt-container-control-button\"\n type=\"button\"\n tabindex=\"0\"\n (click)=\"onSetClicked($event)\">\n <span class=\"nxt-dt-control-content nxt-dt-control-button-content\"\n tabindex=\"-1\">\n {{setLabel()}}\n </span>\n </button>\n </div>\n }\n</div>\n","import { Component, forwardRef, OnInit, Provider, viewChild, output, input, computed, linkedSignal, signal } from '@angular/core'\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'\nimport { DateFilter, DateTimeDirective, PickerMode, PickerType, SelectMode } from '../../class/date-time.class'\nimport { DateTimeContainerComponent } from '../date-time-picker-container/date-time-picker-container.component'\n\n/** @internal */\nexport const NXT_DATETIME_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateTimeInlineComponent),\n multi: true\n}\n\n@Component({\n selector: 'nxt-date-time-inline',\n templateUrl: './date-time-inline.component.html',\n styleUrls: ['./date-time-inline.component.scss'],\n preserveWhitespaces: false,\n providers: [NXT_DATETIME_VALUE_ACCESSOR],\n imports: [\n DateTimeContainerComponent\n ],\n host: {\n '[class.nxt-dt-inline]': 'true'\n }\n})\nexport class DateTimeInlineComponent<T> extends DateTimeDirective<T> implements OnInit, ControlValueAccessor {\n\n private readonly container = viewChild(DateTimeContainerComponent)\n\n /**\n * Set the type of the dateTime picker\n *\n * - `'both'` - show both calendar and timer\n * - `'calendar'` - show only calendar\n * - `'timer'` - show only timer\n */\n readonly pickerType = input<PickerType>('both')\n\n /** Whether the date time picker should be disabled */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n readonly _disabled = input<boolean>(false, { alias: 'disabled' })\n readonly disabled = linkedSignal({\n source: () => this._disabled(),\n computation: v => v\n })\n\n /**\n * The picker select mode\n *\n * - `'single'` - select a single date\n * - `'range'` - select a range [from, to]\n * - `'rangeFrom'` - an open range with a fixed start date\n * - `'rangeTo'` - an open range with a fixed end date\n */\n readonly selectMode = input<SelectMode>('single')\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n readonly _valueInput = input<T | undefined>(undefined, { alias: 'value' })\n private readonly _value = linkedSignal({\n source: () => this._valueInput(),\n computation: v => v\n })\n readonly value = computed(() => {\n let value = this._value()\n value = this.dateTimeAdapter.deserialize(value)\n value = this.getValidDate(value)\n return value\n })\n\n // eslint-disable-next-line @angular-eslint/no-input-rename\n readonly _valuesInput = input<Array<T | undefined> | undefined>(undefined, { alias: 'values' })\n private readonly _values = linkedSignal({\n source: () => this._valuesInput(),\n computation: v => v\n })\n readonly values = computed(() => {\n let values = this._values()\n if (values && values.length > 0) {\n values = values.map(v => {\n v = this.dateTimeAdapter.deserialize(v)\n v = this.getValidDate(v)\n return (v && this.dateTimeAdapter.clone(v))\n })\n return [...values]\n } else {\n return []\n }\n })\n\n /**\n * The date to show when picker opens\n *\n * Defaults to selected date (if available) or current date.\n */\n readonly _startAt = input<T | undefined, T | undefined>(undefined, {\n // eslint-disable-next-line @angular-eslint/no-input-rename\n alias: 'startAt',\n transform: date => this.getValidDate(\n this.dateTimeAdapter.deserialize(date)\n )\n })\n readonly startAt = computed(() => {\n const startAt = this._startAt()\n if (startAt) {\n return startAt\n }\n\n const selectMode = this.selectMode()\n\n if (selectMode === 'single') {\n return this.value()\n } else if (\n selectMode === 'range' ||\n selectMode === 'rangeFrom'\n ) {\n return this.values()?.[0]\n } else if (selectMode === 'rangeTo') {\n return this.values()?.[1]\n } else {\n return\n }\n })\n\n /** A function to filter available date & time */\n readonly dateTimeFilter = input<DateFilter<T>>()\n\n /** The minimum valid date */\n readonly min = input<T | undefined, T | undefined>(undefined, {\n transform: value => {\n value = this.dateTimeAdapter.deserialize(value)\n return this.getValidDate(value)\n }\n })\n\n /** The maximum valid date */\n readonly max = input<T | undefined, T | undefined>(undefined, {\n transform: value => {\n value = this.dateTimeAdapter.deserialize(value)\n return this.getValidDate(value)\n }\n })\n\n /**\n * Emits selected year in multi-year view\n *\n * This doesn't imply a change on the selected date.\n */\n readonly yearSelected = output<T>()\n\n /**\n * Emits selected month in year view\n *\n * This doesn't imply a change on the selected date.\n */\n readonly monthSelected = output<T>()\n\n readonly selected = linkedSignal({\n source: () => this.value(),\n computation: v => v\n })\n\n readonly selecteds = linkedSignal({\n source: () => this.values(),\n computation: v => v || []\n })\n\n readonly isOpen = signal(true).asReadonly()\n\n readonly pickerMode = signal<PickerMode>('inline').asReadonly()\n\n readonly isInSingleMode = computed(() => this.selectMode() === 'single')\n\n readonly isInRangeMode = computed(() => (\n this.selectMode() === 'range' ||\n this.selectMode() === 'rangeFrom' ||\n this.selectMode() === 'rangeTo'\n ))\n\n private onModelChange?: (date: T | T[]) => void\n private onModelTouched?: () => void\n\n ngOnInit() {\n const container = this.container()\n if (container)\n container.picker.set(this)\n }\n\n writeValue(value: any): void {\n value = value ?? undefined\n if (this.isInSingleMode()) {\n this._value.set(value)\n const container = this.container()\n if (container)\n container.pickerMoment = value\n } else {\n this._values.set(value)\n const container = this.container()\n if (container)\n container.pickerMoment = this.values()?.[\n container.activeSelectedIndex()\n ]\n }\n }\n\n registerOnChange(fn: any): void {\n this.onModelChange = fn\n }\n\n registerOnTouched(fn: any): void {\n this.onModelTouched = fn\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled)\n }\n\n select(date: T[] | T): void {\n if (this.disabled()) {\n return\n }\n\n if (Array.isArray(date)) {\n this._values.set([...date])\n } else {\n this._value.set(date)\n }\n this.onModelChange?.(date)\n this.onModelTouched?.()\n }\n\n /**\n * Emits the selected year in multi-year view\n */\n selectYear(normalizedYear: T): void {\n this.yearSelected.emit(normalizedYear)\n }\n\n /**\n * Emits selected month in year view\n */\n selectMonth(normalizedMonth: T): void {\n this.monthSelected.emit(normalizedMonth)\n }\n}\n","<nxt-date-time-container />\r\n","import { AfterContentInit, Directive, ElementRef, forwardRef, OnDestroy, OnInit, Provider, Renderer2, input, output, OutputRefSubscription, signal, computed, linkedSignal, effect, inject } from '@angular/core'\r\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, ValidatorFn, Validators } from '@angular/forms'\r\nimport { DateTimeAdapter } from '../class/date-time-adapter.class'\r\nimport { DateTimeFormats, NXT_DATE_TIME_FORMATS } from '../class/date-time-format.class'\r\nimport { DateFilter, SelectMode } from '../class/date-time.class'\r\nimport { DateTimeComponent } from './date-time-picker/date-time-picker.component'\r\n\r\n/** @internal */\r\nexport const NXT_DATETIME_VALUE_ACCESSOR: Provider = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DateTimeInputDirective),\r\n multi: true\r\n}\r\n\r\n/** @internal */\r\nexport const NXT_DATETIME_VALIDATORS: Provider = {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => DateTimeInputDirective),\r\n multi: true\r\n}\r\n\r\nexport interface DateTimeInputEvent<T> {\r\n source: DateTimeInputDirective<T>\r\n value?: T | Array<T | undefined>\r\n input: HTMLInputElement\r\n}\r\n\r\n@Directive({\r\n selector: 'input[nxtDateTime]',\r\n exportAs: 'nxtDateTimeInput',\r\n providers: [\r\n NXT_DATETIME_VALUE_ACCESSOR,\r\n NXT_DATETIME_VALIDATORS\r\n ],\r\n host: {\r\n '[attr.aria-haspopup]': 'true',\r\n '[attr.aria-owns]': 'inputAriaOwns()',\r\n '[attr.min]': 'minIso8601()',\r\n '[attr.max]': 'maxIso8601()',\r\n '[disabled]': 'disabled()',\r\n '(keydown)': 'handleKeydownOnHost($event)',\r\n '(blur)': 'handleBlurOnHost($event)',\r\n '(input)': 'handleInputOnHost($event)',\r\n '(change)': 'handleChangeOnHost($event)'\r\n }\r\n})\r\nexport class DateTimeInputDirective<T> implements OnInit, AfterContentInit, OnDestroy, ControlValueAccessor, Validator {\r\n private readonly elmRef = inject<ElementRef<HTMLInputElement>>(ElementRef)\r\n private readonly renderer = inject(Renderer2)\r\n private readonly dateTimeAdapter = inject<DateTimeAdapter<T>>(DateTimeAdapter)\r\n private readonly dateTimeFormats = inject<DateTimeFormats>(NXT_DATE_TIME_FORMATS)\r\n\r\n /**\r\n * The date & time picker this input is associated with\r\n */\r\n readonly dateTime = input<DateTimeComponent<T>>(undefined, { alias: 'nxtDateTime' })\r\n\r\n /**\r\n * A function to filter available date & time\r\n */\r\n readonly dateTimeFilter = input<DateFilter<T>>()\r\n\r\n /** Whether the date & time picker input is disabled */\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n readonly _disabled = input<boolean>(false, { alias: 'disabled' })\r\n readonly disabled = linkedSignal({\r\n source: () => this._disabled(),\r\n computation: v => v\r\n })\r\n\r\n /** The minimum valid date */\r\n readonly min = input<T | undefined, T | undefined>(undefined, {\r\n transform: value => this.getValidDate(this.dateTimeAdapter.deserialize(value))\r\n })\r\n\r\n /** The maximum valid date */\r\n readonly max = input<T | undefined, T | undefined>(undefined, {\r\n transform: value => this.getValidDate(this.dateTimeAdapter.deserialize(value))\r\n })\r\n\r\n /**\r\n * The picker select mode\r\n *\r\n * - `'single'` - select a single date\r\n * - `'range'` - select a range [from, to]\r\n * - `'rangeFrom'` - an open range with a fixed start date\r\n * - `'rangeTo'` - an open range with a fixed end date\r\n */\r\n readonly selectMode = input<SelectMode>('single')\r\n\r\n /**\r\n * The character to separate the 'from' and 'to' in input value\r\n */\r\n readonly rangeSeparator = input<string>('~')\r\n\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n readonly _valueInput = input<T>(undefined, { alias: 'value' })\r\n private readonly _value = linkedSignal({\r\n source: () => this._valueInput(),\r\n computation: v => v\r\n })\r\n\r\n private readonly valueValidity = computed(() => {\r\n let value = this._value()\r\n value = this.dateTimeAdapter.deserialize(value)\r\n const lastValueValid = !value || !!this.dateTimeAdapter.isValid(value)\r\n return {\r\n value,\r\n lastValueValid\r\n }\r\n }, {\r\n equal: (a, b) => a.lastValueValid == b.lastValueValid && this.dateTimeAdapter.isEqual(a.value, b.value)\r\n })\r\n\r\n private readonly parsedValue = linkedSignal(() => this.valueValidity().value)\r\n readonly value = this.parsedValue.asReadonly()\r\n\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n readonly _valuesInput = input<Array<T | undefined>>(new Array<T | undefined>(), { alias: 'values' })\r\n private readonly _values = linkedSignal({\r\n source: () => this._valuesInput(),\r\n computation: v => v\r\n })\r\n\r\n private readonly valuesValidity = computed(() => {\r\n let values = this._values()\r\n\r\n let lastValueValid: boolean\r\n\r\n if (values && values.length > 0) {\r\n values = values.map(v => {\r\n v = this.dateTimeAdapter.deserialize(v)\r\n return this.getValidDate(v)\r\n })\r\n lastValueValid = ((!values[0] ||\r\n this.dateTimeAdapter.isValid(values[0])) &&\r\n (!values[1] ||\r\n this.dateTimeAdapter.isValid(values[1]))\r\n )\r\n } else {\r\n values = []\r\n lastValueValid = true\r\n }\r\n\r\n return {\r\n values,\r\n lastValueValid\r\n }\r\n }, {\r\n equal: (a, b) => a.lastValueValid == b.lastValueValid && this.dateTimeAdapter.isEqual(a.values[0], b.values[0]) && this.dateTimeAdapter.isEqual(a.values[1], b.values[1])\r\n })\r\n\r\n private readonly parsedValues = linkedSignal(() => this.valuesValidity().values)\r\n readonly values = this.parsedValues.asReadonly()\r\n\r\n private readonly nativeElementValue = computed(() => {\r\n /**\r\n * Define the native input property 'value'\r\n */\r\n if (this.isInSingleMode()) {\r\n const value = this.value()\r\n return value\r\n ? this.dateTimeAdapter.format(\r\n value,\r\n this.dtPicker()?.formatString()\r\n )\r\n : undefined\r\n } else if (this.isInRangeMode()) {\r\n const values = this.values()\r\n if (values && values.length > 0) {\r\n const from = values[0]\r\n const to = values[1]\r\n\r\n const fromFormatted = from\r\n ? this.dateTimeAdapter.format(\r\n from,\r\n this.dtPicker()?.formatString()\r\n )\r\n : ''\r\n const toFormatted = to\r\n ? this.dateTimeAdapter.format(\r\n to,\r\n this.dtPicker()?.formatString()\r\n )\r\n : ''\r\n\r\n if (!fromFormatted && !toFormatted) {\r\n return undefined\r\n } else {\r\n if (this.selectMode() === 'range') {\r\n return (\r\n fromFormatted +\r\n ' ' +\r\n this.rangeSeparator() +\r\n ' ' +\r\n toFormatted\r\n )\r\n } else if (this.selectMode() === 'rangeFrom') {\r\n return (\r\n fromFormatted\r\n )\r\n } else if (this.selectMode() === 'rangeTo') {\r\n return (\r\n this.elmRef.nativeElement,\r\n 'value',\r\n toFormatted\r\n )\r\n }\r\n }\r\n } else {\r\n return undefined\r\n }\r\n }\r\n\r\n return undefined\r\n })\r\n\r\n /**\r\n * Callback to invoke when `change` event is fired on this `<input>`\r\n */\r\n readonly dateTimeChange = output<DateTimeInputEvent<T>>()\r\n\r\n /**\r\n * Callback to invoke when an `input` event is fired on this `<input>`.\r\n */\r\n readonly dateTimeInput = output<DateTimeInputEvent<T>>()\r\n\r\n get elementRef() {\r\n return this.elmRef\r\n }\r\n\r\n readonly isInSingleMode = computed(() => this.selectMode() === 'single')\r\n\r\n readonly isInRangeMode = computed(() => {\r\n const selectMode = this.selectMode()\r\n return (\r\n selectMode === 'range' ||\r\n selectMode === 'rangeFrom' ||\r\n selectMode === 'rangeTo'\r\n )\r\n })\r\n\r\n /** The date-time-picker that this input is associated with */\r\n readonly dtPicker = signal<DateTimeComponent<T> | undefined>(undefined)\r\n\r\n private dtPickerSub?: OutputRefSubscription\r\n\r\n private readonly lastValueValid = linkedSignal({\r\n source: () => this.valueValidity().lastValueValid && this.valuesValidity().lastValueValid,\r\n computation: v => v\r\n })\r\n\r\n private onModelChange?: (date: T | Array<T | undefined> | undefined) => void\r\n private onModelTouched?: () => void\r\n private validatorOnChange?: () => void\r\n\r\n /** The form control validator for whether the input parses */\r\n private readonly parseValidator = computed<ValidatorFn>(() => {\r\n const lastValueValid = this.lastValueValid()\r\n return () => lastValueValid\r\n ? null\r\n : { dateTimeParse: { text: this.elmRef.nativeElement.value } }\r\n })\r\n\r\n /** The form control validator for the min date */\r\n private readonly minValidator = computed<ValidatorFn>(() => {\r\n const min = this.min()\r\n const isInSingleMode = this.isInSingleMode()\r\n const isInRangeMode = this.isInRangeMode()\r\n return (\r\n control\r\n ) => {\r\n if (isInSingleMode) {\r\n const controlValue = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value)\r\n )\r\n return !min ||\r\n !controlValue ||\r\n this.dateTimeAdapter.compare(min, controlValue) <= 0\r\n ? null\r\n : { dateTimeMin: { min, actual: controlValue } }\r\n } else if (isInRangeMode && control.value) {\r\n const controlValueFrom = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[0])\r\n )\r\n const controlValueTo = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[1])\r\n )\r\n return !min ||\r\n !controlValueFrom ||\r\n !controlValueTo ||\r\n this.dateTimeAdapter.compare(min, controlValueFrom) <= 0\r\n ? null\r\n : {\r\n dateTimeMin: {\r\n min,\r\n actual: [controlValueFrom, controlValueTo]\r\n }\r\n }\r\n }\r\n return null\r\n }\r\n })\r\n\r\n /** The form control validator for the max date */\r\n private readonly maxValidator = computed<ValidatorFn>(() => {\r\n const max = this.max()\r\n const isInSingleMode = this.isInSingleMode()\r\n const isInRangeMode = this.isInRangeMode()\r\n return (\r\n control\r\n ) => {\r\n if (isInSingleMode) {\r\n const controlValue = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value)\r\n )\r\n return !max ||\r\n !controlValue ||\r\n this.dateTimeAdapter.compare(max, controlValue) >= 0\r\n ? null\r\n : { dateTimeMax: { max, actual: controlValue } }\r\n } else if (isInRangeMode && control.value) {\r\n const controlValueFrom = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[0])\r\n )\r\n const controlValueTo = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[1])\r\n )\r\n return !max ||\r\n !controlValueFrom ||\r\n !controlValueTo ||\r\n this.dateTimeAdapter.compare(max, controlValueTo) >= 0\r\n ? null\r\n : {\r\n dateTimeMax: {\r\n max,\r\n actual: [controlValueFrom, controlValueTo]\r\n }\r\n }\r\n }\r\n return null\r\n }\r\n })\r\n\r\n /** The form control validator for the date filter */\r\n private readonly filterValidator = computed<ValidatorFn>(() => {\r\n const dateTimeFilter = this.dateTimeFilter()\r\n return (\r\n control: AbstractControl\r\n ): ValidationErrors | null => {\r\n const controlValue = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value)\r\n )\r\n return !dateTimeFilter ||\r\n !controlValue ||\r\n dateTimeFilter(controlValue)\r\n ? null\r\n : { dateTimeFilter: true }\r\n }\r\n })\r\n\r\n /**\r\n * The form control validator for the range.\r\n * Check whether the 'before' value is before the 'to' value\r\n */\r\n private readonly rangeValidator = computed<ValidatorFn>(() => {\r\n const isInSingleMode = this.isInSingleMode()\r\n return (\r\n control\r\n ) => {\r\n if (isInSingleMode || !control.value) {\r\n return null\r\n }\r\n\r\n const controlValueFrom = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[0])\r\n )\r\n const controlValueTo = this.getValidDate(\r\n this.dateTimeAdapter.deserialize(control.value[1])\r\n )\r\n\r\n return !controlValueFrom ||\r\n !controlValueTo ||\r\n this.dateTimeAdapter.compare(controlValueFrom, controlValueTo) <= 0\r\n ? null\r\n : { dateTimeRange: true }\r\n }\r\n })\r\n\r\n /** The combined form control validator for this input */\r\n private readonly validator = computed(() => Validators.compose([\r\n this.parseValidator(),\r\n this.minValidator(),\r\n this.maxValidator(),\r\n this.filterValidator(),\r\n this.rangeValidator()\r\n ]))\r\n\r\n /** Emits when the value changes (either due to user input or programmatic change) */\r\n readonly valueChange = output<Array<T | undefined> | T | undefined>()\r\n\r\n /** Emits when the disabled state has changed */\r\n readonly disabledChange = output<boolean>()\r\n\r\n /** @internal */\r\n readonly inputAriaOwns = computed(() => (this.dtPicker()?.isOpen() && this.dtPicker()!.id) || undefined)\r\n\r\n /** @internal */\r\n readonly minIso8601 = computed(() => this.min() ? this.dateTimeAdapter.toIso8601(this.min()!) : undefined)\r\n\r\n /** @internal */\r\n readonly maxIso8601 = computed(() => this.max() ? this.dateTimeAdapter.toIso8601(this.max()!) : undefined)\r\n\r\n constructor() {\r\n let picker: DateTimeComponent<T> | undefined\r\n effect(() => {\r\n /**\r\n * Register the relationship between this input and its picker component\r\n */\r\n const _picker = this.dateTime()\r\n if (_picker && picker !== _picker) {\r\n picker = _picker\r\n this.dtPicker.set(picker)\r\n picker.registerInput(this)\r\n }\r\n })\r\n\r\n effect(() => {\r\n const value = this.nativeElementValue()\r\n if (value != undefined) {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n value\r\n )\r\n }\r\n })\r\n\r\n effect(() => {\r\n this.validator()\r\n this.validatorOnChange?.()\r\n })\r\n\r\n effect(() => {\r\n this.valueChange.emit(this.parsedValue())\r\n })\r\n\r\n effect(() => {\r\n this.valueChange.emit(this.parsedValues())\r\n })\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.dtPicker) {\r\n throw Error(\r\n 'DateTimePicker: the picker input doesn\\'t have any associated nxt-date-time component'\r\n )\r\n }\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.dtPickerSub = this.dtPicker()?.confirmSelectedChange.subscribe(\r\n (selecteds) => {\r\n if (Array.isArray(selecteds)) {\r\n this._values.set(selecteds)\r\n } else {\r\n this._value.set(selecteds)\r\n }\r\n\r\n this.onModelChange?.(selecteds)\r\n this.onModelTouched?.()\r\n this.dateTimeChange.emit({\r\n source: this,\r\n value: selecteds,\r\n input: this.elmRef.nativeElement\r\n })\r\n this.dateTimeInput.emit({\r\n source: this,\r\n value: selecteds,\r\n input: this.elmRef.nativeElement\r\n })\r\n }\r\n )\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.dtPickerSub?.unsubscribe()\r\n this.dtPickerSub = undefined\r\n }\r\n\r\n writeValue(value: any): void {\r\n value = value ?? undefined\r\n if (this.isInSingleMode()) {\r\n this._value.set(value)\r\n } else {\r\n this._values.set(value)\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onModelChange = fn\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onModelTouched = fn\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled)\r\n }\r\n\r\n validate(c: AbstractControl) {\r\n const validator = this.validator()\r\n return validator ? validator(c) : null\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this.validatorOnChange = fn\r\n }\r\n\r\n /**\r\n * Open the picker when user hold alt + ArrowDown\r\n */\r\n handleKeydownOnHost(event: KeyboardEvent): void {\r\n if (event.altKey && event.code.toLowerCase() === 'arrowdown') {\r\n this.dtPicker()?.open()\r\n event.preventDefault()\r\n }\r\n }\r\n\r\n handleBlurOnHost(_event: Event): void {\r\n this.onModelTouched?.()\r\n }\r\n\r\n handleInputOnHost(event: any): void {\r\n const value = event.target.value\r\n if (this.selectMode() === 'single') {\r\n this.changeInputInSingleMode(value)\r\n } else if (this.selectMode() === 'range') {\r\n this.changeInputInRangeMode(value)\r\n } else {\r\n this.changeInputInRangeFromToMode(value)\r\n }\r\n }\r\n\r\n handleChangeOnHost(_event: any): void {\r\n let v\r\n if (this.isInSingleMode()) {\r\n v = this.value()\r\n } else if (this.isInRangeMode()) {\r\n v = this.values()\r\n }\r\n\r\n this.dateTimeChange.emit({\r\n source: this,\r\n value: v,\r\n input: this.elmRef.nativeElement\r\n })\r\n }\r\n\r\n /**\r\n * Set the native input property 'value'\r\n */\r\n /* formatNativeInputValue(): void {\r\n if (this.isInSingleMode()) {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n this._value\r\n ? this.dateTimeAdapter.format(\r\n this._value,\r\n this.dtPicker()?.formatString()\r\n )\r\n : ''\r\n )\r\n } else if (this.isInRangeMode()) {\r\n if (this._values && this.values.length > 0) {\r\n const from = this._values[0]\r\n const to = this._values[1]\r\n\r\n const fromFormatted = from\r\n ? this.dateTimeAdapter.format(\r\n from,\r\n this.dtPicker()?.formatString()\r\n )\r\n : ''\r\n const toFormatted = to\r\n ? this.dateTimeAdapter.format(\r\n to,\r\n this.dtPicker()?.formatString()\r\n )\r\n : ''\r\n\r\n if (!fromFormatted && !toFormatted) {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n undefined\r\n )\r\n } else {\r\n if (this.selectMode() === 'range') {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n fromFormatted +\r\n ' ' +\r\n this.rangeSeparator() +\r\n ' ' +\r\n toFormatted\r\n )\r\n } else if (this.selectMode() === 'rangeFrom') {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n fromFormatted\r\n )\r\n } else if (this.selectMode() === 'rangeTo') {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n toFormatted\r\n )\r\n }\r\n }\r\n } else {\r\n this.renderer.setProperty(\r\n this.elmRef.nativeElement,\r\n 'value',\r\n ''\r\n )\r\n }\r\n }\r\n\r\n return\r\n }*/\r\n\r\n /**\r\n * Convert a given obj to a valid date object\r\n */\r\n private getValidDate(obj: any): T | undefined {\r\n return this.dateTimeAdapter.isDateInstance(obj) &&\r\n this.dateTimeAdapter.isValid(obj)\r\n ? obj\r\n : undefined\r\n }\r\n\r\n /**\r\n * Convert a time string to a date-time string\r\n * When pickerType is 'timer', the value in the picker's input is a time string.\r\n * The dateTimeAdapter parse fn could not parse a time string to a Date Object.\r\n * Therefore we need this fn to convert a time string to a date-time string.\r\n */\r\n private convertTimeStringToDateTimeString(\r\n timeString?: string,\r\n dateTime?: T\r\n ) {\r\n if (timeString) {\r\n const v = dateTime || this.dateTimeAdapter.now()\r\n const dateString = this.dateTimeAdapter.format(\r\n v,\r\n this.dateTimeFormats.datePickerInput\r\n )\r\n return dateString + ' ' + timeString\r\n }\r\n return undefined\r\n }\r\n\r\n /**\r\n * Handle input change in single mode\r\n */\r\n private changeInputInSingleMode(inputValue: string): void {\r\n let value: string | undefined = inputValue\r\n if (this.dtPicker()?.pickerType() === 'timer') {\r\n value = this.convertTimeStringToDateTimeString(value, this.value())\r\n }\r\n\r\n let result = this.dateTimeAdapter.parse(\r\n value,\r\n this.dateTimeFormats.parseInput\r\n )\r\n this.lastValueValid.set(!result || this.dateTimeAdapter.isValid(result))\r\n result = this.getValidDate(result)\r\n\r\n // if the newValue is the same as the oldValue, we intend to not fire the valueChange event\r\n // result equals to undefined means there is input event, but the input value is invalid\r\n if (!this.isSameValue(result, this.value()) || result === undefined) {\r\n this.parsedValue.set(result)\r\n //this.valueChange.emit(result)\r\n this.onModelChange?.(result)\r\n this.dateTimeInput.emit({\r\n source: this,\r\n value: result,\r\n input: this.elmRef.nativeElement\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Handle input change in rangeFrom or rangeTo mode\r\n */\r\n private changeInputInRangeFromToMode(inputValue?: string): void {\r\n const originalValue =\r\n this.selectMode() === 'rangeFrom'\r\n ? this.values()[0]\r\n : this.values()[1]\r\n\r\n if (this.dtPicker()?.pickerType() === 'timer') {\r\n inputValue = this.convertTimeStringToDateTimeString(\r\n inputValue,\r\n originalValue\r\n )\r\n }\r\n\r\n let result = this.dateTimeAdapter.parse(\r\n inputValue,\r\n this.dateTimeFormats.parseInput\r\n )\r\n this.lastValueValid.set(!result || this.dateTimeAdapter.isValid(result))\r\n result = this.getValidDate(result)\r\n\r\n // if the newValue is the same as the oldValue, we intend to not fire the valueChange event\r\n if (\r\n (this.selectMode() === 'rangeFrom' &&\r\n this.isSameValue(result, this.values()[0]) &&\r\n result) ||\r\n (this.selectMode() === 'rangeTo' &&\r\n this.isSameValue(result, this.values()[1]) &&\r\n result)\r\n ) {\r\n return\r\n }\r\n\r\n this.parsedValues.set(\r\n this.selectMode() === 'rangeFrom'\r\n ? [result, this.values()[1]]\r\n : [this.values()[0], result]\r\n )\r\n // this.valueChange.emit(this.values())\r\n this.onModelChange?.(this.parsedValues())\r\n this.dateTimeInput.emit({\r\n source: this,\r\n value: this.parsedValues(),\r\n input: this.elmRef.nativeElement\r\n })\r\n }\r\n\r\n /**\r\n * Handle input change in range mode\r\n */\r\n private changeInputInRangeMode(inputValue: string): void {\r\n const selecteds = inputValue.split(this.rangeSeparator())\r\n let fromString: string | undefined = selecteds[0]\r\n let toString: string | undefined = selecteds[1]\r\n\r\n if (this.dtPicker()?.pickerType() === 'timer') {\r\n fromString = this.convertTimeStringToDateTimeString(\r\n fromString,\r\n this.values()[0]\r\n )\r\n toString = this.convertTimeStringToDateTimeString(\r\n toString,\r\n this.values()[1]\r\n )\r\n }\r\n\r\n let from = this.dateTimeAdapter.parse(\r\n fromString,\r\n this.dateTimeFormats.parseInput\r\n )\r\n let to = this.dateTimeAdapter.parse(\r\n toString,\r\n this.dateTimeFormats.parseInput\r\n )\r\n this.lastValueValid.set((!from || this.dateTimeAdapter.isValid(from)) &&\r\n (!to || this.dateTimeAdapter.isValid(to)))\r\n from = this.getValidDate(from)\r\n to = this.getValidDate(to)\r\n\r\n // if the newValue is the same as the oldValue, we intend to not fire the valueChange event\r\n if (\r\n !this.isSameValue(from, this.values()[0]) ||\r\n !this.isSameValue(to, this.values()[1]) ||\r\n (!from && !to)\r\n ) {\r\n this.parsedValues.set([from, to])\r\n //this.valueChange.emit(this.values())\r\n this.onModelChange?.(this.parsedValues())\r\n this.dateTimeInput.emit({\r\n source: this,\r\n value: this.parsedValues(),\r\n input: this.elmRef.nativeElement\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * Check if the two value is the same\r\n */\r\n private isSameValue(first?: T, second?: T): boolean {\r\n if (first && second) {\r\n return this.dateTimeAdapter.compare(first, second) === 0\r\n }\r\n\r\n return first == second\r\n }\r\n}\r\n","import { Directive, computed, input } from '@angular/core'\r\nimport { DateTimeComponent } from './date-time-picker/date-time-picker.component'\r\n\r\n@Directive({\r\n selector: '[nxtDateTimeTrigger]',\r\n host: {\r\n '[class.nxt-dt-trigger-disabled]': 'disabled()',\r\n '(click)': 'handleClickOnHost($event)'\r\n }\r\n})\r\nexport class DateTimeTriggerDirective<T> {\r\n readonly dtPicker = input<DateTimeComponent<T>>(undefined, { alias: 'nxtDateTimeTrigger' })\r\n\r\n /** Use the event to calculate origin when opening in dialog mode */\r\n readonly dialogOrigin = input(false)\r\n\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n readonly _disabled = input<boolean>(undefined, { alias: 'disabled' })\r\n readonly disabled = computed(() => this._disabled() ?? !!this.dtPicker()?.disabled())\r\n\r\n handleClickOnHost(event: PointerEvent): void {\r\n const dtPicker = this.dtPicker()\r\n if (dtPicker) {\r\n dtPicker.open(this.dialogOrigin() ? event : undefined)\r\n event.stopPropagation()\r\n }\r\n }\r\n}\r\n","import { NoopScrollStrategy, ScrollStrategy } from '@angular/cdk/overlay'\r\nimport { ViewContainerRef } from '@angular/core'\r\n\r\n/** @internal */\r\nlet uniqueId = 0\r\n\r\n/** Possible overrides for a dialog's position */\r\nexport interface DialogPosition {\r\n /** Override for the dialog's top position */\r\n top?: string\r\n\r\n /** Override for the dialog's bottom position */\r\n bottom?: string\r\n\r\n /** Override for the dialog's left position */\r\n left?: string\r\n\r\n /** Override for the dialog's right position */\r\n right?: string\r\n}\r\n\r\nexport class DialogConfig {\r\n /**\r\n * ID of the element that describes the dialog.\r\n */\r\n ariaDescribedBy?: string\r\n\r\n /**\r\n * Whether to focus the dialog when the dialog is isOpen\r\n */\r\n autoFocus = true\r\n\r\n /** Whether the dialog has a backdrop */\r\n hasBackdrop? = true\r\n\r\n /**\r\n * Custom style for the backdrop\r\n */\r\n backdropStyle?: any\r\n\r\n /** Data being injected into the child component */\r\n data?: any\r\n\r\n /** Whether the user can use escape or clicking outside to close a modal */\r\n disableClose? = false\r\n\r\n /**\r\n * ID for the modal. If omitted, a unique one will be generated.\r\n */\r\n id?: string\r\n\r\n /**\r\n * The ARIA role of the dialog element.\r\n */\r\n role?: 'dialog' | 'alertdialog' = 'dialog'\r\n\r\n /**\r\n * Custom class for the pane\r\n */\r\n paneClass?: string | string[] = ''\r\n\r\n /**\r\n * Pointer Event\r\n */\r\n event?: PointerEvent\r\n\r\n /**\r\n * Custom class for the backdrop\r\n */\r\n backdropClass?: string | string[] = ''\r\n\r\n /**\r\n * Whether the dialog should close when the user goes backwards/forwards in history.\r\n */\r\n closeOnNavigation?: boolean = true\r\n\r\n /** Width of the dialog */\r\n width?: string = ''\r\n\r\n /** Height of the dialog */\r\n height?: string = ''\r\n\r\n /**\r\n * The min-width of the overlay panel.\r\n * If a number is provided, pixel units are assumed.\r\n */\r\n minWidth?: number | string = '18.5em'\r\n\r\n /**\r\n * The min-height of the overlay panel.\r\n * If a number is provided, pixel units are assumed.\r\n */\r\n minHeight?: number | string\r\n\r\n /**\r\n * The max-width of the overlay panel.\r\n * If a number is provided, pixel units are assumed.\r\n */\r\n maxWidth?: number | string = '85vw'\r\n\r\n /**\r\n * The max-height of the overlay panel.\r\n * If a number is provided, pixel units are assumed.\r\n */\r\n maxHeight?: number | string\r\n\r\n /** Position overrides */\r\n position?: DialogPosition\r\n\r\n /**\r\n * The scroll strategy when the dialog is open\r\n * Learn more this from https://material.angular.io/cdk/overlay/overview#scroll-strategies\r\n */\r\n scrollStrategy?: ScrollStrategy = new NoopScrollStrategy()\r\n\r\n viewContainerRef?: ViewContainerRef\r\n\r\n constructor() {\r\n this.id = `nxt-dialog-${uniqueId++}`\r\n }\r\n}\r\n","import { GlobalPositionStrategy, OverlayRef } from '@angular/cdk/overlay'\r\nimport { Location } from '@angular/common'\r\nimport { Subject, SubscriptionLike as ISubscription } from 'rxjs'\r\nimport { filter, take } from 'rxjs/operators'\r\nimport { outputToObservable } from '@angular/core/rxjs-interop'\r\nimport { DialogContainerComponent } from '../dialog/dialog-container/dialog-container.component'\r\nimport { DialogPosition } from './dialog-config.class'\r\n\r\nexport class DialogRef<T> {\r\n\r\n readonly isAnimating = this.container.isAnimating\r\n\r\n private result: any\r\n\r\n private readonly _beforeClose$ = new Subject<void>()\r\n\r\n private readonly _afterOpen$ = new Subject<void>()\r\n\r\n private readonly _afterClosed$ = new Subject<void>()\r\n\r\n /** Subscription to changes in the user's location */\r\n private locationChanged?: ISubscription\r\n\r\n /**\r\n * The instance of component isOpen into modal\r\n */\r\n componentInstance?: T\r\n\r\n /** Whether the user is allowed to close the dialog */\r\n disableClose = !!this.container.config()?.disableClose\r\n\r\n constructor(\r\n private readonly overlayRef: OverlayRef,\r\n private readonly container: DialogContainerComponent,\r\n readonly id?: string,\r\n location?: Location\r\n ) {\r\n outputToObservable(this.container.animationStateChanged)\r\n .pipe(\r\n filter((event) => event.phaseName === 'done' && event.toState === 'enter'),\r\n take(1)\r\n )\r\n .subscribe(() => {\r\n this._afterOpen$.next(undefined)\r\n this._afterOpen$.complete()\r\n })\r\n\r\n outputToObservable(this.container.animationStateChanged)\r\n .pipe(\r\n filter((event) => event.phaseName === 'done' && event.toState === 'exit'),\r\n take(1)\r\n )\r\n .subscribe(() => {\r\n this.overlayRef.dispose()\r\n this.locationChanged?.unsubscribe()\r\n this.locationChanged = undefined\r\n this._afterClosed$.next(this.result)\r\n this._afterClosed$.complete()\r\n this.componentInstance = undefined\r\n })\r\n\r\n this.overlayRef.keydownEvents()\r\n .pipe(filter(event => event.code.toLowerCase() === 'escape' && !this.disableClose))\r\n .subscribe(() => this.close())\r\n\r\n if (location) {\r\n this.locationChanged = location.subscribe(() => {\r\n if (this.container.config()?.closeOnNavigation) {\r\n this.close()\r\n }\r\n })\r\n }\r\n }\r\n\r\n close(dialogResult?: any) {\r\n this.result = dialogResult\r\n\r\n if (!this.container.destroyRef.destroyed) {\r\n outputToObservable(this.container.animationStateChanged)\r\n .pipe(\r\n filter((event) => event.phaseName === 'start'),\r\n take(1)\r\n )\r\n .subscribe(() => {\r\n this._beforeClose$.next(dialogResult)\r\n this._beforeClose$.complete()\r\n this.overlayRef.detachBackdrop()\r\n })\r\n\r\n this.container.startExitAnimation()\r\n } else {\r\n this._beforeClose$.next(dialogResult)\r\n this._beforeClose$.complete()\r\n this.overlayRef.detachBackdrop()\r\n }\r\n }\r\n\r\n /**\r\n * Gets an observable that emits when the overlay's backdrop has been clicked.\r\n */\r\n backdropClick() {\r\n return this.overlayRef.backdropClick()\r\n }\r\n\r\n /**\r\n * Gets an observable that emits when keydown events are targeted on the overlay.\r\n */\r\n keydownEvents() {\r\n return this.overlayRef.keydownEvents()\r\n }\r\n\r\n /**\r\n * Updates the dialog's position.\r\n *\r\n * @param position New dialog position.\r\n */\r\n updatePosition(position?: DialogPosition): this {\r\n const strategy = this.getPositionStrategy()\r\n\r\n if (position && (position.left || position.right)) {\r\n if (position.left)\r\n strategy.left(position.left)\r\n else\r\n strategy.right(position.right)\r\n } else {\r\n strategy.centerHorizontally()\r\n }\r\n\r\n if (position && (position.top || position.bottom)) {\r\n if (position.top)\r\n strategy.top(position.top)\r\n else\r\n strategy.bottom(position.bottom)\r\n } else {\r\n strategy.centerVertically()\r\n }\r\n\r\n this.overlayRef.updatePosition()\r\n\r\n return this\r\n }\r\n\r\n /**\r\n * Updates the dialog's width and height.\r\n *\r\n * @param width New width of the dialog.\r\n * @param height New height of the dialog.\r\n */\r\n updateSize(width: string = 'auto', height: string = 'auto'): this {\r\n this.overlayRef.updateSize({ width, height })\r\n this.overlayRef.updatePosition()\r\n return this\r\n }\r\n\r\n afterOpen() {\r\n return this._afterOpen$.asObservable()\r\n }\r\n\r\n beforeClose() {\r\n return this._beforeClose$.asObservable()\r\n }\r\n\r\n afterClosed() {\r\n return this._afterClosed$.asObservable()\r\n }\r\n\r\n /** Fetches the position strategy object from the overlay ref */\r\n private getPositionStrategy(): GlobalPositionStrategy {\r\n return this.overlayRef.getConfig().positionStrategy as GlobalPositionStrategy\r\n }\r\n}\r\n","/**\r\n * Extends an object with the *enumerable* and *own* properties of one or more source objects,\r\n * similar to Object.assign.\r\n *\r\n * @param dest The object which will have properties copied to it.\r\n * @param sources The source objects from which properties will be copied.\r\n * @internal\r\n */\r\nexport function extendObject(dest: any, ...sources: any[]): any {\r\n if (dest == null || dest == undefined) {\r\n throw TypeError('Cannot convert undefined or null to object')\r\n }\r\n\r\n for (const source of sources) {\r\n if (source != null && source != undefined) {\r\n for (const key in source) {\r\n if (source.hasOwnProperty(key)) {\r\n dest[key] = source[key]\r\n }\r\n }\r\n }\r\n }\r\n\r\n return dest\r\n}\r\n","import { ConfigurableFocusTrap, ConfigurableFocusTrapFactory } from '@angular/cdk/a11y'\nimport { BasePortalOutlet, CdkPortalOutlet, ComponentPortal, TemplatePortal } from '@angular/cdk/portal'\nimport { afterNextRender, Component, ComponentRef, DestroyRef, DOCUMENT, ElementRef, EmbeddedViewRef, inject, output, signal, viewChild } from '@angular/core'\nimport { DialogConfig } from '../../class/dialog-config.class'\n\n/** @internal */\n@Component({\n selector: 'nxt-dialog-container',\n templateUrl: './dialog-container.component.html',\n imports: [\n CdkPortalOutlet\n ],\n host: {\n '[class.nxt-dialog-container]': 'true',\n '[attr.tabindex]': '-1',\n '[attr.aria-labelledby]': 'ariaLabelledBy()',\n '[attr.id]': 'config()?.id',\n '[attr.role]': 'config()?.role',\n '[attr.aria-describedby]': 'config()?.ariaDescribedBy'\n }\n})\nexport class DialogContainerComponent extends BasePortalOutlet {\n\n static animate = true\n\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef)\n private readonly focusTrapFactory = inject(ConfigurableFocusTrapFactory)\n private readonly document = inject<Document>(DOCUMENT, { optional: true })\n readonly destroyRef = inject(DestroyRef)\n\n readonly portalOutlet = viewChild(CdkPortalOutlet)\n\n /** The class that traps and manages focus within the dialog */\n private readonly focusTrap = signal<ConfigurableFocusTrap | undefined>(undefined)\n\n /** ID of the element that should be considered as the dialog's label */\n readonly ariaLabelledBy = signal<string | undefined>(undefined)\n\n /** Emits when an animation state changes */\n readonly animationStateChanged = output<{\n phaseName: 'start' | 'done'\n toState: 'enter' | 'exit'\n }>()\n\n readonly isAnimating = signal(false)\n\n private readonly _config = signal<DialogConfig | undefined>(undefined)\n readonly config = this._config.asReadonly()\n\n // for animation purpose\n private params = {\n x: '0px',\n y: '0px',\n ox: '50%',\n oy: '50%',\n scale: 0\n }\n\n // A variable to hold the focused element before the dialog was open.\n // This would help us to refocus back to element when the dialog was closed.\n private elementFocusedBeforeDialogWasOpened?: HTMLElement\n\n constructor() {\n super()\n afterNextRender(() => {\n const params = this.params\n const target = this.elementRef.nativeElement\n this.isAnimating.set(true)\n this.animationStateChanged.emit({\n phaseName: 'start',\n toState: 'enter'\n })\n if (target && DialogContainerComponent.animate) {\n target.animate([\n {\n opacity: 0,\n transform: `translateX(${params.x}) translateY(${params.y}) scale(${params.scale})`,\n transformOrigin: `${params.ox} ${params.oy}`\n },\n {\n opacity: 1,\n transform: 'translateX(0px) translateY(0px) scale(1)',\n transformOrigin: '50% 50%'\n }\n ], {\n duration: 300,\n easing: 'cubic-bezier(0.35, 0, 0.25, 1)'\n }).addEventListener('finish', () => {\n target.animate([\n { transform: 'scale(1)', offset: 0 },\n { transform: 'scale(1.05)', offset: 0.3 },\n { transform: 'scale(.95)', offset: 0.8 },\n { transform: 'scale(1)', offset: 1.0 }\n ], {\n duration: 150\n }).addEventListener('finish', () => {\n this.endEnterAnimation()\n })\n })\n } else {\n this.endEnterAnimation()\n }\n })\n }\n\n /**\n * Attach a ComponentPortal as content to this dialog container.\n */\n attachComponentPortal<T>(\n portal: ComponentPortal<T>\n ): ComponentRef<T> {\n const portalOutlet = this.portalOutlet()\n if (portalOutlet?.hasAttached()) {\n throw Error(\n 'Attempting to attach dialog content after content is already attached'\n )\n }\n\n this.savePreviouslyFocusedElement()\n return portalOutlet!.attachComponentPortal(portal)\n }\n\n attachTemplatePortal<C>(\n _portal: TemplatePortal<C>\n ): EmbeddedViewRef<C> {\n throw new Error('Method not implemented.')\n }\n\n setConfig(config: DialogConfig): void {\n this._config.set(config)\n\n if (config.event) {\n this.calculateZoomOrigin(config.event)\n }\n }\n\n startExitAnimation() {\n const params = this.params\n const target = this.elementRef.nativeElement\n this.isAnimating.set(true)\n this.animationStateChanged.emit({\n phaseName: 'start',\n toState: 'exit'\n })\n if (target && DialogContainerComponent.animate) {\n target.animate([\n {\n opacity: 1,\n transform: 'translateX(0px) translateY(0px) scale(1)'\n },\n {\n opacity: 0,\n transform: `translateX(${params.x}) translateY(${params.y}) scale(${params.scale})`\n }\n ], {\n duration: 200\n }).addEventListener('finish', () => {\n this.endExitAnimation()\n })\n } else {\n this.endExitAnimation()\n }\n }\n\n private endEnterAnimation() {\n this.trapFocus()\n if (!this.destroyRef.destroyed)\n this.animationStateChanged.emit({\n phaseName: 'done',\n toState: 'enter'\n })\n this.isAnimating.set(false)\n }\n\n private endExitAnimation() {\n this.restoreFocus()\n if (!this.destroyRef.destroyed)\n this.animationStateChanged.emit({\n phaseName: 'done',\n toState: 'exit'\n })\n this.isAnimating.set(false)\n }\n\n /**\n * Calculate origin used in the `zoomFadeInFrom()`\n * for animation purpose\n */\n private calculateZoomOrigin(event: MouseEvent): void {\n const clientX = event.clientX\n const clientY = event.clientY\n\n const wh = window.innerWidth / 2\n const hh = window.innerHeight / 2\n const x = clientX - wh\n const y = clientY - hh\n const ox = clientX / window.innerWidth\n const oy = clientY / window.innerHeight\n\n this.params = {\n x: `${x}px`,\n y: `${y}px`,\n ox: `${ox * 100}%`,\n oy: `${oy * 100}%`,\n scale: 0\n }\n }\n\n /**\n * Save the focused element before dialog was open\n */\n private savePreviouslyFocusedElement(): void {\n if (this.document) {\n this.elementFocusedBeforeDialogWasOpened = this.document\n .activeElement as HTMLElement\n\n Promise.resolve().then(() => this.elementRef.nativeElement.focus()).catch(() => { })\n }\n }\n\n private trapFocus(): void {\n if (!this.focusTrap()) {\n this.focusTrap.set(this.focusTrapFactory.create(\n this.elementRef.nativeElement\n ))\n }\n\n if (this._config()?.autoFocus) {\n this.focusTrap()?.focusInitialElementWhenReady().catch(() => { })\n }\n }\n\n private restoreFocus(): void {\n const toFocus = this.elementFocusedBeforeDialogWasOpened\n\n if (toFocus && typeof toFocus.focus === 'function') {\n toFocus.focus()\n }\n\n if (this.focusTrap()) {\n this.focusTrap()!.destroy()\n this.focusTrap.set(undefined)\n }\n }\n}\n","<ng-template cdkPortalOutlet />\r\n","import { Overlay, OverlayConfig, OverlayContainer, OverlayRef, ScrollStrategy } from '@angular/cdk/overlay'\r\nimport { ComponentPortal, ComponentType } from '@angular/cdk/portal'\r\nimport { Location } from '@angular/common'\r\nimport { ComponentRef, Injectable, InjectionToken, Injector, TemplateRef, inject } from '@angular/core'\r\nimport { defer, of, Subject } from 'rxjs'\r\nimport { concatAll } from 'rxjs/operators'\r\nimport { DialogConfig } from '../class/dialog-config.class'\r\nimport { DialogRef } from '../class/dialog-ref.class'\r\nimport { extendObject } from '../utils/object'\r\nimport { DialogContainerComponent } from './dialog-container/dialog-container.component'\r\n\r\n/** @internal */\r\nexport const NXT_DIALOG_DATA = new InjectionToken<any>('NXT_DIALOG_DATA')\r\n\r\n/**\r\n * Injection token that determines the scroll handling while the dialog is open.\r\n *\r\n * @internal\r\n */\r\nexport const NXT_DIALOG_SCROLL_STRATEGY = new InjectionToken<\r\n () => ScrollStrategy\r\n>('NXT_DIALOG_SCROLL_STRATEGY')\r\n\r\n/**\r\n * Injection token that can be used to specify default dialog options.\r\n *\r\n * @internal\r\n */\r\nexport const NXT_DIALOG_DEFAULT_OPTIONS = new InjectionToken<DialogConfig>(\r\n 'NXT_DIALOG_DEFAULT_OPTIONS'\r\n)\r\n\r\n/** @internal */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DialogService {\r\n private readonly overlay = inject(Overlay)\r\n private readonly injector = inject(Injector)\r\n private readonly location = inject<Location>(Location, { optional: true }) ?? undefined\r\n private readonly defaultOptions = inject<DialogConfig>(NXT_DIALOG_DEFAULT_OPTIONS, { optional: true }) ?? undefined\r\n private readonly parentDialog = inject<DialogService>(DialogService, { optional: true, skipSelf: true })\r\n private readonly overlayContainer = inject(OverlayContainer)\r\n\r\n private readonly ariaHiddenElements = new Map<Element, string | null>()\r\n\r\n private readonly _openDialogsAtThisLevel: Array<DialogRef<any>> = []\r\n private readonly _afterOpenAtThisLevel = new Subject<DialogRef<any>>()\r\n private readonly _afterAllClosedAtThisLevel = new Subject<void>()\r\n\r\n /** Keeps track of the currently-open dialogs */\r\n get openDialogs(): Array<DialogRef<any>> {\r\n return this.parentDialog\r\n ? this.parentDialog.openDialogs\r\n : this._openDialogsAtThisLevel\r\n }\r\n\r\n /** Stream that emits when a dialog has been isOpen */\r\n get afterOpen(): Subject<DialogRef<any>> {\r\n return this.parentDialog\r\n ? this.parentDialog.afterOpen\r\n : this._afterOpenAtThisLevel\r\n }\r\n\r\n get _afterAllClosed(): Subject<void> {\r\n const parent = this.parentDialog\r\n return parent\r\n ? parent._afterAllClosed\r\n : this._afterAllClosedAtThisLevel\r\n }\r\n\r\n /**\r\n * Stream that emits when all open dialog have finished closing.\r\n * Will emit on subscribe if there are no open dialogs to begin with.\r\n */\r\n\r\n readonly afterAllClosed = defer(\r\n () =>\r\n this._openDialogsAtThisLevel.length\r\n ? this._afterAllClosed\r\n : of([undefined], this._afterAllClosed).pipe(concatAll())\r\n )\r\n\r\n private readonly scrollStrategy = inject(NXT_DIALOG_SCROLL_STRATEGY, { optional: true }) ?? (() => this.overlay.scrollStrategies.block())\r\n\r\n constructor() {\r\n const location = this.location\r\n const parentDialog = this.parentDialog\r\n\r\n if (!parentDialog && location) {\r\n location.subscribe(() => this.closeAll())\r\n }\r\n }\r\n\r\n open<T>(\r\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\r\n config?: DialogConfig\r\n ): DialogRef<any> {\r\n config = applyConfigDefaults(config, this.defaultOptions)\r\n\r\n if (config.id && this.getDialogById(config.id)) {\r\n throw Error(`Dialog with id \"${config.id}\" exists already. The dialog id must be unique.`)\r\n }\r\n\r\n const overlayRef = this.createOverlay(config)\r\n const dialogContainer = this.attachDialogContainer(overlayRef, config)\r\n const dialogRef = this.attachDialogContent<T>(\r\n componentOrTemplateRef,\r\n dialogContainer,\r\n overlayRef,\r\n config\r\n )\r\n\r\n if (!this.openDialogs.length) {\r\n this.hideNonDialogContentFromAssistiveTechnology()\r\n }\r\n\r\n this.openDialogs.push(dialogRef)\r\n dialogRef\r\n .afterClosed()\r\n .subscribe(() => this.removeOpenDialog(dialogRef))\r\n this.afterOpen.next(dialogRef)\r\n return dialogRef\r\n }\r\n\r\n /**\r\n * Closes all of the currently-open dialogs.\r\n */\r\n closeAll(): void {\r\n let i = this.openDialogs.length\r\n\r\n while (i--) {\r\n this.openDialogs[i].close()\r\n }\r\n }\r\n\r\n /**\r\n * Finds an open dialog by its id.\r\n *\r\n * @param id ID to use when looking up the dialog.\r\n */\r\n getDialogById(id: string): DialogRef<any> | undefined {\r\n return this.openDialogs.find(dialog => dialog.id === id)\r\n }\r\n\r\n private attachDialogContent<T>(\r\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\r\n dialogContainer: DialogContainerComponent,\r\n overlayRef: OverlayRef,\r\n config: DialogConfig\r\n ) {\r\n const dialogRef = new DialogRef<T>(\r\n overlayRef,\r\n dialogContainer,\r\n config.id,\r\n this.location\r\n )\r\n\r\n if (config.hasBackdrop) {\r\n overlayRef.backdropClick().subscribe(() => {\r\n if (!dialogRef.disableClose) {\r\n dialogRef.close()\r\n }\r\n })\r\n }\r\n\r\n if (!(componentOrTemplateRef instanceof TemplateRef)) {\r\n const injector = this.createInjector<T>(\r\n config,\r\n dialogRef,\r\n dialogContainer\r\n )\r\n const contentRef = dialogContainer.attachComponentPortal(\r\n new ComponentPortal(componentOrTemplateRef, undefined, injector)\r\n )\r\n dialogRef.componentInstance = contentRef.instance\r\n }\r\n\r\n dialogRef\r\n .updateSize(config.width, config.height)\r\n .updatePosition(config.position)\r\n\r\n return dialogRef\r\n }\r\n\r\n private createInjector<T>(\r\n config: DialogConfig,\r\n dialogRef: DialogRef<T>,\r\n dialogContainer: DialogContainerComponent\r\n ) {\r\n const userInjector =\r\n config &&\r\n config.viewContainerRef &&\r\n config.viewContainerRef.injector\r\n\r\n return Injector.create({\r\n providers: [\r\n { provide: DialogRef, useValue: dialogRef },\r\n { provide: DialogContainerComponent, useValue: dialogContainer },\r\n { provide: NXT_DIALOG_DATA, useValue: config.data }\r\n ],\r\n parent: userInjector || this.injector\r\n })\r\n }\r\n\r\n private createOverlay(config: DialogConfig): OverlayRef {\r\n const overlayConfig = this.getOverlayConfig(config)\r\n return this.overlay.create(overlayConfig)\r\n }\r\n\r\n private attachDialogContainer(\r\n overlayRef: OverlayRef,\r\n config: DialogConfig\r\n ): DialogContainerComponent {\r\n const containerPortal = new ComponentPortal(\r\n DialogContainerComponent,\r\n config.viewContainerRef\r\n )\r\n const containerRef: ComponentRef<\r\n DialogContainerComponent\r\n > = overlayRef.attach(containerPortal)\r\n containerRef.instance.setConfig(config)\r\n\r\n return containerRef.instance\r\n }\r\n\r\n private getOverlayConfig(dialogConfig: DialogConfig): OverlayConfig {\r\n const state = new OverlayConfig({\r\n positionStrategy: this.overlay.position().global(),\r\n scrollStrategy: dialogConfig.scrollStrategy || this.scrollStrategy(),\r\n panelClass: dialogConfig.paneClass,\r\n hasBackdrop: dialogConfig.hasBackdrop,\r\n minWidth: dialogConfig.minWidth,\r\n minHeight: dialogConfig.minHeight,\r\n maxWidth: dialogConfig.maxWidth,\r\n maxHeight: dialogConfig.maxHeight\r\n })\r\n\r\n if (dialogConfig.backdropClass) {\r\n state.backdropClass = dialogConfig.backdropClass\r\n }\r\n\r\n return state\r\n }\r\n\r\n private removeOpenDialog(dialogRef: DialogRef<any>): void {\r\n const index = this._openDialogsAtThisLevel.indexOf(dialogRef)\r\n\r\n if (index > -1) {\r\n this.openDialogs.splice(index, 1)\r\n // If all the dialogs were closed, remove/restore the `aria-hidden`\r\n // to a the siblings and emit to the `afterAllClosed` stream.\r\n if (!this.openDialogs.length) {\r\n this.ariaHiddenElements.forEach((previousValue, element) => {\r\n if (previousValue) {\r\n element.setAttribute('aria-hidden', previousValue)\r\n } else {\r\n element.removeAttribute('aria-hidden')\r\n }\r\n })\r\n\r\n this.ariaHiddenElements.clear()\r\n this._afterAllClosed.next()\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Hides all of the content that isn't an overlay from assistive technology.\r\n */\r\n private hideNonDialogContentFromAssistiveTechnology() {\r\n const overlayContainer = this.overlayContainer.getContainerElement()\r\n\r\n // Ensure that the overlay container is attached to the DOM.\r\n if (overlayContainer.parentElement) {\r\n const siblings = overlayContainer.parentElement.children\r\n\r\n for (let i = siblings.length - 1; i > -1; i--) {\r\n const sibling = siblings[i]\r\n\r\n if (\r\n sibling !== overlayContainer &&\r\n sibling.nodeName !== 'SCRIPT' &&\r\n sibling.nodeName !== 'STYLE' &&\r\n !sibling.hasAttribute('aria-live')\r\n ) {\r\n this.ariaHiddenElements.set(\r\n sibling,\r\n sibling.getAttribute('aria-hidden')\r\n )\r\n sibling.setAttribute('aria-hidden', 'true')\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Applies default options to the dialog config.\r\n *\r\n * @param config Config to be modified.\r\n * @param defaultOptions Default config setting\r\n * @returns The new configuration object.\r\n * @internal\r\n */\r\nfunction applyConfigDefaults(\r\n config?: DialogConfig,\r\n defaultOptions?: DialogConfig\r\n): DialogConfig {\r\n return extendObject(new DialogConfig(), config, defaultOptions)\r\n}\r\n","import { coerceArray } from '@angular/cdk/coercion'\nimport { Overlay, OverlayConfig, OverlayRef, PositionStrategy, ScrollStrategy } from '@angular/cdk/overlay'\nimport { ComponentPortal } from '@angular/cdk/portal'\nimport { Component, ComponentRef, InjectionToken, OnDestroy, ViewContainerRef, DOCUMENT, input, output, computed, signal, linkedSignal, effect, inject, afterNextRender, Injector, DestroyRef } from '@angular/core'\nimport { merge, Subscription } from 'rxjs'\nimport { filter, take } from 'rxjs/operators'\nimport { DateTimeDirective, PickerMode, PickerType } from '../../class/date-time.class'\nimport { DialogRef } from '../../class/dialog-ref.class'\nimport { DialogService } from '../../dialog/dialog.service'\nimport { DateTimeContainerComponent } from '../date-time-picker-container/date-time-picker-container.component'\nimport { DateTimeInputDirective } from '../date-time-picker-input.directive'\n\n/**\n * Injection token that determines the scroll handling while the dtPicker is open.\n *\n * @internal\n */\nexport const NXT_DTPICKER_SCROLL_STRATEGY = new InjectionToken<\n () => ScrollStrategy\n>('NXT_DTPICKER_SCROLL_STRATEGY')\n\n@Component({\n selector: 'nxt-date-time',\n templateUrl: './date-time-picker.component.html',\n styleUrls: ['./date-time-picker.component.scss'],\n preserveWhitespaces: false\n})\nexport class DateTimeComponent<T> extends DateTimeDirective<T> implements OnDestroy {\n private readonly overlay = inject(Overlay)\n private readonly viewContainerRef = inject(ViewContainerRef)\n private readonly dialogService = inject(DialogService)\n private readonly injector = inject(Injector)\n private readonly destroyRef = inject(DestroyRef)\n private readonly defaultScrollStrategy = inject(NXT_DTPICKER_SCROLL_STRATEGY, { optional: true }) ?? (() => this.overlay.scrollStrategies.block())\n private readonly document = inject<Document>(DOCUMENT, { optional: true })\n\n /** Custom class for the picker backdrop */\n readonly backdropClass = input<string | string[]>()\n\n /** Custom class for the picker overlay pane */\n readonly panelClass = input<string | string[]>()\n\n /**\n * The date to show when picker opens\n *\n * Defaults to selected date (if available) or current date.\n */\n readonly _startAt = input<T | undefined, T | undefined>(undefined, {\n // eslint-disable-next-line @angular-eslint/no-input-rename\n alias: 'startAt',\n transform: date => this.getValidDate(\n this.dateTimeAdapter.deserialize(date)\n )\n })\n readonly startAt = computed(() => {\n // If an explicit startAt is set we start there, otherwise we start at whatever the currently\n // selected value is.\n const startAt = this._startAt()\n if (startAt) {\n return startAt\n }\n\n const dtInput = this.dtInput()\n if (dtInput) {\n if (dtInput.selectMode() === 'single') {\n return dtInput.value()\n } else if (\n dtInput.selectMode() === 'range' ||\n dtInput.selectMode() === 'rangeFrom'\n ) {\n return dtInput.values()[0]\n } else if (dtInput.selectMode() === 'rangeTo') {\n return dtInput.values()[1]\n }\n }\n return\n })\n\n /**\n * Set the type of the dateTime picker\n *\n * - `'both'` - show both calendar and timer\n * - `'calendar'` - show only calendar\n * - `'timer'` - show only timer\n */\n readonly pickerType = input<PickerType>('both')\n\n /**\n * The style the picker would open as\n *\n * - `'popup'` - display picker attached to the trigger element\n * - `'dialog'` - display picker as a dialog\n */\n readonly pickerMode = input<PickerMode, PickerMode>('popup', {\n transform: mode => {\n if (mode === 'popup') {\n return mode\n } else {\n return 'dialog'\n }\n }\n })\n\n /** Whether the date time picker should be disabled */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n readonly _disabled = input<boolean | undefined>(undefined, { alias: 'disabled' })\n readonly disabled = linkedSignal({\n source: () => this._disabled(),\n computation: value => value ?? !!this.dtInput()?.disabled()\n })\n\n /** Whether the calendar is open */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n readonly _isOpen = input<boolean>(false, { alias: 'isOpen' })\n readonly isOpen = signal(false)\n\n /**\n * The scroll strategy when the picker is open (see [CDK documentation](https://material.angular.io/cdk/overlay/overview#scroll-strategies))\n */\n readonly scrollStrategy = input<ScrollStrategy>()\n\n /**\n * Callback when the picker is opened\n */\n // eslint-disable-next-line @angular-eslint/no-output-rename\n readonly afterPickerOpened = output<void>({ alias: 'open' })\n\n /**\n * Callback when the picker is closed\n */\n // eslint-disable-next-line @angular-eslint/no-output-rename\n readonly afterPickerClosed = output<void>({ alias: 'close' })\n\n /**\n * Emits selected year in multi-year view\n *\n * This doesn't imply a change on the selected date.\n */\n readonly yearSelected = output<T>()\n\n /**\n * Emits selected month in year view\n *\n * This doesn't imply a change on the selected date.\n */\n readonly monthSelected = output<T>()\n\n /**\n * Emits when picker open state changes\n */\n readonly isOpenChange = output<boolean>()\n\n /**\n * Emit when the selected value has been confirmed\n */\n readonly confirmSelectedChange = output<Array<T | undefined> | T>()\n\n /**\n * Emits when the date time picker is disabled\n */\n readonly disabledChange = output<boolean>()\n\n private pickerContainerPortal?: ComponentPortal<\n DateTimeContainerComponent<T>\n >\n private pickerContainer?: DateTimeContainerComponent<T>\n private popupRef?: OverlayRef\n private dialogRef?: DialogRef<DateTimeContainerComponent<T>>\n private hidePickerStreamSub?: Subscription\n private confirmSelectedStreamSub?: Subscription\n private pickerOpenedStreamSub?: Subscription\n\n /** The element that was focused before the date time picker was isOpen */\n private focusedElementBeforeOpen?: HTMLElement\n\n private readonly _dtInput = signal<DateTimeInputDirective<T> | undefined>(undefined)\n readonly dtInput = this._dtInput.asReadonly()\n\n private readonly valueChange = computed(() => this._dtInput()?.valueChange)\n\n readonly selected = signal<T | undefined>(undefined)\n\n readonly selecteds = signal(new Array<T | undefined>())\n\n /** The minimum selectable date */\n readonly min = computed(() => this.dtInput()?.min())\n\n /** The maximum selectable date */\n readonly max = computed(() => this.dtInput()?.max())\n\n readonly dateTimeFilter = computed(() => this.dtInput()?.dateTimeFilter())\n\n readonly selectMode = computed(() => this.dtInput()?.selectMode())\n\n readonly isInSingleMode = computed(() => !!this.dtInput()?.isInSingleMode())\n\n readonly isInRangeMode = computed(() => !!this.dtInput()?.isInRangeMode())\n\n constructor() {\n super()\n effect((registerCleanup) => {\n const vc = this.valueChange()\n if (vc) {\n const sub = vc.subscribe((value) => {\n if (Array.isArray(value)) {\n this.selecteds.set(value)\n } else {\n this.selected.set(value)\n }\n })\n registerCleanup(() => sub.unsubscribe())\n }\n })\n\n let disabled: boolean | undefined\n effect(() => {\n const value = this.disabled()\n if (disabled != undefined) {\n this.disabledChange.emit(value)\n }\n disabled = value\n })\n\n let isOpen: boolean | undefined\n effect(() => {\n const _isOpen = this._isOpen()\n if (isOpen === undefined) {\n isOpen = _isOpen\n if (isOpen)\n this.open()\n return\n }\n if (isOpen != _isOpen) {\n if ((isOpen = _isOpen)) {\n this.open()\n } else {\n this.close()\n }\n }\n })\n }\n\n ngOnDestroy(): void {\n this.close()\n\n if (this.popupRef) {\n this.popupRef.dispose()\n }\n\n this.hidePickerStreamSub?.unsubscribe()\n this.hidePickerStreamSub = undefined\n\n this.confirmSelectedStreamSub?.unsubscribe()\n this.confirmSelectedStreamSub = undefined\n\n this.pickerOpenedStreamSub?.unsubscribe()\n this.pickerOpenedStreamSub = undefined\n }\n\n registerInput(inputDirective: DateTimeInputDirective<T>): void {\n if (this._dtInput()) {\n throw Error(\n 'A Nxt DateTimePicker can only be associated with a single input.'\n )\n }\n\n this._dtInput.set(inputDirective)\n }\n\n open(event?: PointerEvent): void {\n if (this.isOpen() || this.disabled()) {\n return\n }\n\n if (!this._dtInput()) {\n throw Error(\n 'Attempted to open an DateTimePicker with no associated input.'\n )\n }\n\n if (this.document) {\n this.focusedElementBeforeOpen = this.document.activeElement as HTMLElement\n }\n\n // reset the picker selected value\n if (this.isInSingleMode()) {\n this.selected.set(this._dtInput()!.value())\n } else if (this.isInRangeMode()) {\n this.selecteds.set(this._dtInput()!.values())\n }\n\n // when the picker is open , we make sure the picker's current selected time value\n // is the same as the _startAt time value.\n if (this.selected() && this.pickerType() !== 'calendar' && this._startAt()) {\n this.selected.set(this.dateTimeAdapter.createDate(\n this.dateTimeAdapter.getYear(this.selected()),\n this.dateTimeAdapter.getMonth(this.selected()),\n this.dateTimeAdapter.getDate(this.selected()),\n this.dateTimeAdapter.getHours(this._startAt()),\n this.dateTimeAdapter.getMinutes(this._startAt()),\n this.dateTimeAdapter.getSeconds(this._startAt())\n ))\n }\n\n if (this.pickerMode() === 'dialog')\n this.openAsDialog(event)\n else\n this.openAsPopup()\n\n if (this.pickerContainer)\n this.pickerContainer.picker.set(this)\n\n // Listen to picker container's hidePickerStream\n this.hidePickerStreamSub = this.pickerContainer?.hidePickerStream.subscribe(\n () => {\n this.close()\n }\n )\n\n // Listen to picker container's confirmSelectedStream\n this.confirmSelectedStreamSub = this.pickerContainer?.confirmSelectedStream.subscribe(\n (e) => {\n this.confirmSelect(e)\n }\n )\n }\n\n /**\n * Selects the given date\n */\n select(date: T[] | T): void {\n if (Array.isArray(date)) {\n this.selecteds.set([...date])\n } else {\n this.selected.set(date)\n }\n\n /**\n * Cases in which automatically confirm the select when date or dates are selected:\n * 1) picker mode is NOT 'dialog'\n * 2) picker type is 'calendar' and selectMode is 'single'.\n * 3) picker type is 'calendar' and selectMode is 'range' and\n * the 'selecteds' has 'from'(selecteds[0]) and 'to'(selecteds[1]) values.\n * 4) selectMode is 'rangeFrom' and selecteds[0] has value.\n * 5) selectMode is 'rangeTo' and selecteds[1] has value.\n */\n if (\n this.pickerMode() !== 'dialog' &&\n this.pickerType() === 'calendar' &&\n ((this.selectMode() === 'single' && this.selected()) ||\n (this.selectMode() === 'rangeFrom' && this.selecteds()[0]) ||\n (this.selectMode() === 'rangeTo' && this.selecteds()[1]) ||\n (this.selectMode() === 'range' &&\n this.selecteds()[0] &&\n this.selecteds()[1]))\n ) {\n this.confirmSelect()\n }\n }\n\n /**\n * Emits the selected year in multi-year view\n */\n selectYear(normalizedYear: T): void {\n this.yearSelected.emit(normalizedYear)\n }\n\n /**\n * Emits selected month in year view\n */\n selectMonth(normalizedMonth: T): void {\n this.monthSelected.emit(normalizedMonth)\n }\n\n /**\n * Hide the picker\n */\n close(): void {\n if (!this.isOpen()) {\n return\n }\n\n if (this.popupRef && this.popupRef.hasAttached()) {\n this.popupRef.detach()\n }\n\n if (\n this.pickerContainerPortal &&\n this.pickerContainerPortal.isAttached\n ) {\n this.pickerContainerPortal.detach()\n }\n\n this.hidePickerStreamSub?.unsubscribe()\n this.hidePickerStreamSub = undefined\n\n this.confirmSelectedStreamSub?.unsubscribe()\n this.confirmSelectedStreamSub = undefined\n\n this.pickerOpenedStreamSub?.unsubscribe()\n this.pickerOpenedStreamSub = undefined\n\n if (this.dialogRef) {\n this.dialogRef.close()\n this.dialogRef = undefined\n }\n\n const completeClose = () => {\n if (this.isOpen()) {\n this.isOpen.set(false)\n this.isOpenChange.emit(this.isOpen())\n this.afterPickerClosed.emit(undefined)\n this.focusedElementBeforeOpen = undefined\n }\n }\n\n if (\n this.focusedElementBeforeOpen &&\n typeof this.focusedElementBeforeOpen.focus === 'function'\n ) {\n // Because IE moves focus asynchronously, we can't count on it being restored before we've\n // marked the datepicker as closed. If the event fires out of sequence and the element that\n // we're refocusing opens the datepicker on focus, the user could be stuck with not being\n // able to close the calendar at all. We work around it by making the logic, that marks\n // the datepicker as closed, async as well.\n this.focusedElementBeforeOpen.focus()\n setTimeout(completeClose)\n } else {\n completeClose()\n }\n }\n\n /**\n * Confirm the selected value\n */\n confirmSelect(_event?: any): void {\n if (this.isInSingleMode()) {\n const selected =\n this.selected() || this.startAt() || this.dateTimeAdapter.now()\n this.confirmSelectedChange.emit(selected)\n } else if (this.isInRangeMode()) {\n this.confirmSelectedChange.emit(this.selecteds())\n }\n\n this.close()\n return\n }\n\n /**\n * Open the picker as a dialog\n */\n private openAsDialog(event?: PointerEvent): void {\n const backdropClass = this.backdropClass()\n const panelClass = this.panelClass()\n this.dialogRef = this.dialogService.open(\n DateTimeContainerComponent,\n {\n event,\n autoFocus: false,\n backdropClass: [\n 'cdk-overlay-dark-backdrop',\n ...backdropClass ? coerceArray(backdropClass) : []\n ],\n paneClass: [\n 'nxt-dt-dialog',\n ...panelClass ? coerceArray(panelClass) : []\n ],\n viewContainerRef: this.viewContainerRef,\n scrollStrategy: this.scrollStrategy() || this.defaultScrollStrategy()\n }\n )\n this.pickerContainer = this.dialogRef.componentInstance\n\n this.dialogRef.afterOpen().subscribe(() => {\n this.isOpen.set(true)\n this.isOpenChange.emit(this.isOpen())\n this.afterPickerOpened.emit(undefined)\n })\n this.dialogRef.afterClosed().subscribe(() => this.close())\n }\n\n /**\n * Open the picker as popup\n */\n private openAsPopup(): void {\n if (!this.pickerContainerPortal) {\n this.pickerContainerPortal = new ComponentPortal<\n DateTimeContainerComponent<T>\n >(DateTimeContainerComponent, this.viewContainerRef)\n }\n\n if (!this.popupRef) {\n this.createPopup()\n }\n\n if (!this.popupRef?.hasAttached()) {\n const componentRef: ComponentRef<\n DateTimeContainerComponent<T>\n > | undefined = this.popupRef?.attach(this.pickerContainerPortal)\n this.pickerContainer = componentRef?.instance\n\n // Update the position once the calendar has rendered.\n if (!this.destroyRef.destroyed)\n afterNextRender(() => {\n this.popupRef?.updatePosition()\n }, {\n injector: this.injector\n })\n\n // emit open stream\n this.pickerOpenedStreamSub = this.pickerContainer?.pickerOpenedStream\n .pipe(take(1))\n .subscribe(() => {\n this.isOpen.set(true)\n this.isOpenChange.emit(this.isOpen())\n this.afterPickerOpened.emit(undefined)\n })\n }\n }\n\n private createPopup(): void {\n const backdropClass = this.backdropClass()\n const panelClass = this.panelClass()\n const overlayConfig = new OverlayConfig({\n positionStrategy: this.createPopupPositionStrategy(),\n hasBackdrop: true,\n backdropClass: [\n 'cdk-overlay-transparent-backdrop',\n ...backdropClass ? coerceArray(backdropClass) : []\n ],\n scrollStrategy: this.scrollStrategy() || this.defaultScrollStrategy(),\n panelClass: [\n 'nxt-dt-popup',\n ...panelClass ? coerceArray(panelClass) : []\n ]\n })\n\n this.popupRef = this.overlay.create(overlayConfig)\n\n merge(\n this.popupRef.backdropClick(),\n this.popupRef.detachments(),\n this.popupRef\n .keydownEvents()\n .pipe(\n filter(\n event =>\n !!(event.code.toLowerCase() === 'escape' ||\n (this._dtInput() &&\n event.altKey &&\n event.code.toLowerCase() === 'arrowup'))\n )\n )\n ).subscribe(() => this.close())\n }\n\n /**\n * Create the popup PositionStrategy.\n */\n private createPopupPositionStrategy(): PositionStrategy | undefined {\n if (this._dtInput())\n return this.overlay\n .position()\n .flexibleConnectedTo(this._dtInput()!.elementRef)\n .withTransformOriginOn('.nxt-dt-container')\n .withFlexibleDimensions(false)\n .withPush(false)\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom'\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top'\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom'\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: -176\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: -352\n }\n ])\n return\n }\n}\n","\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["NXT_DATETIME_VALUE_ACCESSOR"],"mappings":";;;;;;;;;;;;MAEsB,eAAe,CAAA;AAArC,IAAA,WAAA,GAAA;;QAEuB,IAAA,CAAA,MAAM,GAAG,MAAM,CAAM,SAAS;mFAAC;;QAG/B,IAAA,CAAA,iBAAiB,GAAG,QAAQ;;QAG5B,IAAA,CAAA,mBAAmB,GAAG,KAAK;IAqQlD;AAzFI;;;;;AAKK;IACL,OAAO,CAAC,KAAS,EAAE,MAAU,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC/C,YAAA,MAAM,KAAK,CAAC,6CAA6C,CAAC;QAC9D;QAEA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAErC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;AAE/D,QAAA,IAAI,IAAI,GAAG,CAAC,EAAE;YACV,OAAO,CAAC,CAAC;QACb;AAAO,aAAA,IAAI,IAAI,GAAG,CAAC,EAAE;AACjB,YAAA,OAAO,CAAC;QACZ;aAAO;;AAEH,YAAA,OAAO,IAAI;QACf;IACJ;AAEA;;;;;AAKK;IACL,WAAW,CAAC,KAAS,EAAE,MAAU,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC/C,YAAA,MAAM,KAAK,CAAC,6CAA6C,CAAC;QAC9D;QAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAEtC,QAAA,MAAM,IAAI,GAAG,QAAQ,GAAG,SAAS;AAEjC,QAAA,IAAI,IAAI,GAAG,CAAC,EAAE;YACV,OAAO,CAAC,CAAC;QACb;AAAO,aAAA,IAAI,IAAI,GAAG,CAAC,EAAE;AACjB,YAAA,OAAO,CAAC;QACZ;aAAO;AACH,YAAA,OAAO,CAAC;QACZ;IACJ;AAEA;;;;;;;;AAQG;AACH,IAAA,WAAW,CAAC,KAAU,EAAA;AAClB,QAAA,IACI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,SAAS;AACnC,aAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EACrD;AACE,YAAA,OAAO,KAAK;QAChB;AACA,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;IACzB;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,MAAW,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;IAC3B;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,IAAO,EAAE,GAAO,EAAE,GAAO,EAAA;AAC/B,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;AACpC,YAAA,OAAO,GAAG;QACd;AACA,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;AACpC,YAAA,OAAO,GAAG;QACd;AACA,QAAA,OAAO,IAAI;IACf;AACH;;ACnQD;MACa,qBAAqB,GAAG,IAAI,cAAc,CAAkB,uBAAuB;;MCVnF,YAAY,CAAA;AACrB,IAAA,WAAA,CACW,KAAa,EACb,YAAoB,EACpB,SAAiB,EACjB,OAAgB,EAChB,GAAA,GAAe,KAAK,EACpB,SAAA,GAAoB,EAAE,EAAA;QALtB,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,SAAS,GAAT,SAAS;IAChB;AACP;AAED;MAaa,qBAAqB,CAAA;AAZlC,IAAA,WAAA,GAAA;AAaqB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAA0B,UAAU,CAAC;AACpD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD;;AAEG;QACM,IAAA,CAAA,UAAU,GAAG,KAAK,CAAS,CAAC;uFAAC;AAEtC;;AAEG;AACM,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK;4FAAoB;AAEzC;;AAEG;QACM,IAAA,CAAA,OAAO,GAAG,KAAK,CAAS,CAAC;oFAAC;AAEnC;;AAEG;QACM,IAAA,CAAA,SAAS,GAAG,KAAK,CAAS,CAAC;sFAAC;AAErC;;AAEG;AACM,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK;kGAAU;AAErC;;AAEG;AACM,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK;sGAA6B;AAE5D;;AAEG;AACM,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK;kGAAc;AAEzC;;AAEG;QACM,IAAA,CAAA,MAAM,GAAG,MAAM,EAAgB;QAE/B,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ;2FAAC;AAE/D,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AACnC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;YACpC,QACI,UAAU,KAAK,OAAO;AACtB,gBAAA,UAAU,KAAK,WAAW;gBAC1B,UAAU,KAAK,SAAS;QAEhC,CAAC;0FAAC;AAwFL,IAAA;AAtFG,IAAA,UAAU,CAAC,IAAkB,EAAA;AACzB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1B;IAEA,YAAY,CAAC,QAAgB,EAAE,QAAgB,EAAA;QAC3C,MAAM,UAAU,GAAG,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,QAAQ;AACvD,QAAA,OAAO,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE;IAC3C;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,KAAa,EAAA;AACpB,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;QAC5C,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AAChD,YAAA,OAAO,KAAK;QAChB;AAEA,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACvB,YAAA,OAAO,KAAK,KAAK,cAAc,CAAC,CAAC,CAAC;QACtC;AAEA,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACtB,YAAA,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC;AACnC,YAAA,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC;AAEjC,YAAA,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,OAAO;QACnD;AACA,QAAA,OAAO,KAAK;IAChB;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,KAAa,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACtB,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AAC5C,YAAA,MAAM,SAAS,GAAG,cAAc,GAAG,CAAC,CAAC;AACrC,YAAA,MAAM,OAAO,GAAG,cAAc,GAAG,CAAC,CAAC;YAEnC,IAAI,SAAS,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE;AAClD,gBAAA,OAAO,KAAK,IAAI,SAAS,IAAI,KAAK,IAAI,OAAO;YACjD;iBAAO;AACH,gBAAA,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,OAAO;YACnD;QACJ;AACA,QAAA,OAAO,KAAK;IAChB;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YACtB,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;AAC5C,YAAA,OAAO,SAAS,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;QACzD;AACA,QAAA,OAAO,KAAK;IAChB;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,KAAa,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;AAC1C,YAAA,OAAO,OAAO,KAAK,SAAS,IAAI,KAAK,KAAK,OAAO;QACrD;AACA,QAAA,OAAO,KAAK;IAChB;AAEA;;AAEG;IACH,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS;YAC1B,eAAe,CAAC,MAAK;AACjB,gBAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;oBAC/B,IAAI,CAAC,MAAM,CAAC;0BACN,aAAa,CAAc,8BAA8B;0BACzD,KAAK,EAAE;AACjB,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,EAAE;gBACC,QAAQ,EAAE,IAAI,CAAC;AAClB,aAAA,CAAC;IACV;8GA9IS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,soCC3BlC,giDA8BA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDHa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAZjC,SAAS;AAEI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,EAAA,QAAA,EAC3B,yBAAyB,EAAA,mBAAA,EAGd,KAAK,EAAA,IAAA,EACpB;AACF,wBAAA,8BAA8B,EAAE;AACnC,qBAAA,EAAA,QAAA,EAAA,giDAAA,EAAA;;;AElBL;AACA,MAAM,aAAa,GAAG,CAAC;AAEvB;AACA,MAAM,cAAc,GAAG,CAAC;MAcX,kBAAkB,CAAA;AAZ/B,IAAA,WAAA,GAAA;AAaqB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAqB,eAAe,CAAC;AAC7D,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAkB,qBAAqB,CAAC;AAEjF;;AAEG;QACM,IAAA,CAAA,eAAe,GAAG,KAAK,CAAU,KAAK;4FAAC;QAExC,IAAA,CAAA,eAAe,GAAG,CAAC;AAC3B;;;AAGG;AACM,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAiB,IAAI,CAAC,eAAe,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,8BAAA,EAAA,CAAA,EAChE,SAAS,EAAE,CAAC,GAAG,KAAI;AACf,gBAAA,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,IAAI,CAAC,eAAe,EAAE;AACtD,oBAAA,OAAO,IAAI,CAAC,eAAe,GAAG,GAAG;gBACrC;gBACA,OAAO,IAAI,CAAC,eAAe;AAC/B,YAAA,CAAC,GACH;AAEF;;AAEG;QACM,IAAA,CAAA,UAAU,GAAG,KAAK,CAAa,QAAQ;uFAAC;;QAGxC,IAAA,CAAA,QAAQ,GAAG,KAAK,CAA+B,SAAS,gFAC7D,SAAS,EAAE,KAAK,IAAG;gBACf,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACnC,YAAA,CAAC,GACH;AAEO,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAA6C,EAAE,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,CAAA,EACrE,SAAS,EAAE,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAG;gBAChC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;AACvC,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAC/B,CAAC,CAAC,GACJ;QAEO,IAAA,CAAA,YAAY,GAAG,KAAK,CAA+B,SAAS,oFACjE,SAAS,EAAE,KAAK,IAAG;gBACf,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;AACjE,YAAA,CAAC,GACH;AAEF;;AAEG;AACM,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK;sGAAiB;;QAGvC,IAAA,CAAA,GAAG,GAAG,KAAK,CAA+B,SAAS,2EACxD,SAAS,EAAE,KAAK,IAAG;gBACf,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACnC,YAAA,CAAC,GACH;;QAGO,IAAA,CAAA,GAAG,GAAG,KAAK,CAA+B,SAAS,2EACxD,SAAS,EAAE,KAAK,IAAG;gBACf,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACnC,YAAA,CAAC,GACH;AAEO,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;YAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC;YACnE,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,OAAO,CAAC;YACrE,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,QAAQ,CAAC;AACvE,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AAE5C,YAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAE9G,YAAA,OAAO;iBACF,KAAK,CAAC,cAAc;iBACpB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QAClD,CAAC;qFAAC;AAEO,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;gBACtB;YACJ;AAEA,YAAA,IAAI,SAA6B;;AAGjC,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CACnD,IAAI,CAAC,gBAAgB,EAAE,CAC1B;AACD,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;;;YAI5C,IAAI,QAAQ,GACR,CAAC;iBACA,CAAC,mBAAmB,IAAI,aAAa,GAAG,cAAc,CAAC;AACpD,oBAAA,aAAa,CAAC;;YAGtB,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YAEzC,MAAM,IAAI,GAAqB,EAAE;AACjC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE;gBACrC,MAAM,IAAI,GAAG,EAAE;AACf,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE;AACpC,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAC7C,IAAI,CAAC,gBAAgB,EAAE,EACvB,QAAQ,CACX;oBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC;;AAGpD,oBAAA,IACI,IAAI,CAAC,eAAe,CAAC,SAAS,CAC1B,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,EAC1B,IAAI,CACP,EACH;AACE,wBAAA,SAAS,GAAG,QAAQ,GAAG,CAAC;oBAC5B;AAEA,oBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;oBACnB,QAAQ,IAAI,CAAC;gBACjB;AACA,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACnB;YACA,OAAO;gBACH,IAAI;gBACJ,SAAS;gBACT;aACH;QACL,CAAC;sFAAC;AAGO,QAAA,IAAA,CAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI;YACnC,IAAI,IAAI,IAAI,SAAS;AACjB,gBAAA,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI;YAC5B,OAAO,IAAI,CAAC,KAAK;QACrB,CAAC;iFAAC;AAEO,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAChC,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;gBACrB,QACI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;oBACjD,IAAI,CAAC,cAAc,EAAE;AACrB,oBAAA,CAAC;YAET;YACA;QACJ,CAAC;uFAAC;QAEO,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ;2FAAC;AAE/D,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,OAC9B,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO;AAC7B,YAAA,IAAI,CAAC,UAAU,EAAE,KAAK,WAAW;AACjC,YAAA,IAAI,CAAC,UAAU,EAAE,KAAK,SAAS,CAClC;0FAAC;QAEM,IAAA,CAAA,gBAAgB,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,8BAAA,EAAA,CAAA,EACnC,MAAM,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE;AACjC,YAAA,WAAW,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,eAAe,CAAC,UAAU,CACjD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,EACjC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,EAClC,CAAC,CACJ,GACH;AAGF;;AAEG;AACM,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS;YAC7C,IAAI,SAAS,IAAI,SAAS;AACtB,gBAAA,OAAO,IAAI,CAAC,UAAU,GAAG,SAAS;YACtC,OAAO,IAAI,CAAC,UAAU;QAC1B,CAAC;sFAAC;AAGF;;;AAGG;AACM,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AACnC;;;;AAIG;AACH,YAAA,IAAI,aAAa,GAAG,IAAI,KAAK,EAAsB;AAEnD,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;gBAC1B,OAAO,IAAI,CAAC,cAAc;YAC9B;YAEA,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;gBAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,wBAAwB,CACzD,IAAI,CAAC,QAAQ,EAAE,EACf,IAAI,CAAC,gBAAgB,EAAE,CAC1B,IAAI,CAAC;AACN,gBAAA,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC;AAC9B,gBAAA,OAAO,IAAI,CAAC,cAAc,GAAG,aAAa;YAC9C;YAEA,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBAC1C,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,QAAQ,IAAG;oBAC5C,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AACxC,wBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,wBAAwB,CACzD,QAAQ,EACR,IAAI,CAAC,gBAAgB,EAAE,CAC1B,IAAI,CAAC;wBACN,OAAO,OAAO,GAAG,CAAC;oBACtB;oBACA;AACJ,gBAAA,CAAC,CAAC;YACN;AACA,YAAA,OAAO,IAAI,CAAC,cAAc,GAAG,aAAa;QAC9C,CAAC;0FAAC;QAEM,IAAA,CAAA,eAAe,GAAG,CAAC;;AAElB,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;YACpC,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,cAAc;YACvD,IAAI,cAAc,IAAI,SAAS;AAC3B,gBAAA,OAAO,IAAI,CAAC,eAAe,GAAG,cAAc;YAChD,OAAO,IAAI,CAAC,eAAe;QAC/B,CAAC;2FAAC;AAEF;;AAEG;QACM,IAAA,CAAA,cAAc,GAAG,MAAM,EAAiB;AAEjD;;AAEG;QACM,IAAA,CAAA,aAAa,GAAG,MAAM,EAAQ;;QAG9B,IAAA,CAAA,kBAAkB,GAAG,MAAM,EAAK;;QAGxB,IAAA,CAAA,eAAe,GAAG,SAAS,CAAC,qBAAqB;4FAAC;AAoNtE,IAAA;AAlNG;;AAEG;AACH,IAAA,kBAAkB,CAAC,IAAkB,EAAA;;;;AAIjC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE;YACvD;QACJ;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;AAEA;;AAEG;AACK,IAAA,UAAU,CAAC,IAAY,EAAA;AAC3B,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;AACzB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CACjD,IAAI,CAAC,gBAAgB,EAAE,EACvB,QAAQ,CACX;AAED,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;AAClC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;IACtC;AAEA;;AAEG;AACH,IAAA,qBAAqB,CAAC,KAAoB,EAAA;AACtC,QAAA,IAAI,MAAM;AACV,QAAA,QAAQ,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE;;AAE5B,YAAA,KAAK,WAAW;AACZ,gBAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CACzC,IAAI,CAAC,YAAY,EAAE,EACnB,CAAC,CAAC,CACL;AACD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,YAAY;AACb,gBAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CACzC,IAAI,CAAC,YAAY,EAAE,EACnB,CAAC,CACJ;AACD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,SAAS;AACV,gBAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CACzC,IAAI,CAAC,YAAY,EAAE,EACnB,CAAC,CAAC,CACL;AACD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,WAAW;AACZ,gBAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CACzC,IAAI,CAAC,YAAY,EAAE,EACnB,CAAC,CACJ;AACD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,MAAM;gBACP,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CACzC,IAAI,CAAC,YAAY,EAAE,EACnB,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CACxD;AACD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,KAAK;gBACN,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CACzC,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;oBAC3D,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CACpD;AACD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,QAAQ;gBACT,MAAM,GAAG,KAAK,CAAC;AACX,sBAAE,IAAI,CAAC,eAAe,CAAC,gBAAgB,CACnC,IAAI,CAAC,YAAY,EAAE,EACnB,CAAC,CAAC;AAEN,sBAAE,IAAI,CAAC,eAAe,CAAC,iBAAiB,CACpC,IAAI,CAAC,YAAY,EAAE,EACnB,CAAC,CAAC,CACL;AACL,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,UAAU;gBACX,MAAM,GAAG,KAAK,CAAC;AACX,sBAAE,IAAI,CAAC,eAAe,CAAC,gBAAgB,CACnC,IAAI,CAAC,YAAY,EAAE,EACnB,CAAC;AAEL,sBAAE,IAAI,CAAC,eAAe,CAAC,iBAAiB,CACpC,IAAI,CAAC,YAAY,EAAE,EACnB,CAAC,CACJ;AACL,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,OAAO;AACR,gBAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,cAAc,EAAG,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC,EAAE;AAC/E,oBAAA,IAAI,CAAC,UAAU,CACX,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CACpD;gBACL;gBACA;AACJ,YAAA;gBACI;;QAGR,IAAI,CAAC,eAAe,EAAE;QACtB,KAAK,CAAC,cAAc,EAAE;IAC1B;AAEA;;AAEG;IACK,cAAc,CAAC,IAAO,EAAE,QAAgB,EAAA;;AAE5C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CACtD,IAAI,CAAC,YAAY,EAAE,CACtB;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC;;AAElD,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE;AACnC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CACzC,IAAI,EACJ,IAAI,CAAC,eAAe,CAAC,aAAa,CACrC;;QAGD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;;AAGxC,QAAA,MAAM,QAAQ,GAAG,QAAQ,GAAG,CAAC;QAC7B,MAAM,GAAG,GAAG,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,WAAW;AAClD,QAAA,MAAM,SAAS,GAAG,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;AAEnE,QAAA,OAAO,IAAI,YAAY,CACnB,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,OAAO,EACP,GAAG,EACH,SAAS,CACZ;IACL;AAEA;;AAEG;AACK,IAAA,aAAa,CAAC,IAAO,EAAA;QACzB,QACI,CAAC,CAAC,IAAI;AACN,aAAC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,cAAc,EAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChE,aAAC,CAAC,IAAI,CAAC,GAAG,EAAE;AACR,gBAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AACxD,aAAC,CAAC,IAAI,CAAC,GAAG,EAAE;AACR,gBAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAEhE;AAEA;;AAEG;AACK,IAAA,YAAY,CAAC,GAAQ,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,GAAG,CAAC;AAC3C,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG;AAChC,cAAE;cACA,SAAS;IACnB;AAEA;;AAEG;IACH,WAAW,CAAC,QAAY,EAAE,SAAa,EAAA;QACnC,OAAO,CAAC,EACJ,QAAQ;YACR,SAAS;AACT,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC;AACtC,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC;AACvC,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC;AACtC,gBAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC;AACvC,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACvC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,CAC3C;IACL;IAEQ,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,eAAe,EAAE,EAAE,eAAe,EAAE;IAC7C;8GA7cS,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,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,0BAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA0PkB,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClRtE,osCA8BA,0DDZQ,qBAAqB,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAMhB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAZ9B,SAAS;+BACI,0BAA0B,EAAA,mBAAA,EAGf,KAAK,EAAA,OAAA,EACjB;wBACL;qBACH,EAAA,IAAA,EACK;AACF,wBAAA,8BAA8B,EAAE;AACnC,qBAAA,EAAA,QAAA,EAAA,osCAAA,EAAA;0qCA4P4C,qBAAqB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEzQzD,YAAY,CAAA;AAHzB,IAAA,WAAA,GAAA;;AAMa,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,SAAS,CAAA,CAAA,2CAAA,CAA6C;0FAAC;;AAG9E,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,SAAS,CAAA,CAAA,+CAAA,CAAiD;4FAAC;;AAGpF,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,SAAS,CAAA,CAAA,2CAAA,CAA6C;0FAAC;;AAG9E,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,SAAS,CAAA,CAAA,+CAAA,CAAiD;4FAAC;;AAGpF,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,SAAS,CAAA,CAAA,uCAAA,CAAyC;wFAAC;;AAGxE,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,SAAS,CAAA,CAAA,2CAAA,CAA6C;0FAAC;;AAG9E,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,SAAS,CAAA,CAAA,8CAAA,CAAgD;2FAAC;;AAGlF,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,SAAS,CAAA,CAAA,0CAAA,CAA4C;2FAAC;;AAG9E,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,SAAS,CAAA,CAAA,4CAAA,CAA8C;0FAAC;;AAG/E,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,SAAS,CAAA,CAAA,wCAAA,CAA0C;0FAAC;;AAG3E,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAA,CAAA,sDAAA,CAAwD;+FAAC;;AAG9F,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAA,CAAA,kDAAA,CAAoD;+FAAC;;AAG1F,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,SAAS,CAAA,CAAA,yDAAA,CAA2D;mGAAC;;AAGrG,QAAA,IAAA,CAAA,0BAA0B,GAAG,MAAM,CAAC,SAAS,CAAA,CAAA,+DAAA,CAAiE;uGAAC;;AAG/G,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,SAAS,CAAA,CAAA,kCAAA,CAAoC;2FAAC;;AAGtE,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,SAAS,CAAA,CAAA,4BAAA,CAA8B;wFAAC;;AAG7D,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,SAAS,CAAA,CAAA,8BAAA,CAAgC;2FAAC;;AAGlE,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,SAAS,CAAA,CAAA,0BAAA,CAA4B;yFAAC;;AAG5D,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,SAAS,CAAA,CAAA,+BAAA,CAAiC;0FAAC;;AAGlE,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,SAAS,CAAA,CAAA,+BAAA,CAAiC;0FAAC;AAC9E,IAAA;8GA7DY,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFT,MAAM,EAAA,CAAA,CAAA;;2FAET,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACFD;AACO,MAAM,aAAa,GAAG,CAAC;AAE9B;AACO,MAAM,SAAS,GAAG,CAAC;MAgBb,sBAAsB,CAAA;AAdnC,IAAA,WAAA,GAAA;AAeqB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC;AACjC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAqB,eAAe,CAAC;AAE9E;;AAEG;QACM,IAAA,CAAA,UAAU,GAAG,KAAK,CAAa,QAAQ;uFAAC;;QAGxC,IAAA,CAAA,QAAQ,GAAG,KAAK,CAA+B,SAAS,gFAC7D,SAAS,EAAE,KAAK,IAAG;gBACf,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACnC,YAAA,CAAC,GACH;AAEO,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAA6C,EAAE,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,CAAA,EACrE,SAAS,EAAE,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAG;gBAChC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;AACvC,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAC/B,CAAC,CAAC,GACJ;;;QAIO,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAgB,SAAS,0FAAI,KAAK,EAAE,cAAc,EAAA,CAAG;QAEvE,IAAA,CAAA,aAAa,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,8BAAA,EAAA,CAAA,EACzC,MAAM,EAAE,MAAM,IAAI,CAAC,kBAAkB,EAAE;AACvC,YAAA,WAAW,EAAE,CAAC,IAAI,CAAC,GACrB;AACO,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAClC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AACpE,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;QACjE,CAAC;yFAAC;AAEF;;AAEG;AACM,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK;sGAAiB;;QAGvC,IAAA,CAAA,GAAG,GAAG,KAAK,CAA+B,SAAS,2EACxD,SAAS,EAAE,KAAK,IAAG;gBACf,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACnC,YAAA,CAAC,GACH;;QAGO,IAAA,CAAA,GAAG,GAAG,KAAK,CAA+B,SAAS,2EACxD,SAAS,EAAE,KAAK,IAAG;gBACf,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACnC,YAAA,CAAC,GACH;AAEe,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACvC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC;YAE1E,MAAM,KAAK,GAAqB,EAAE;AAElC,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAC1E,MAAM,MAAM,GAAG,gBAAgB,IAAI,aAAa,GAAG,SAAS,CAAC;AAE7D,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;gBAChC,MAAM,GAAG,GAAG,EAAE;AAEd,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE;AACpC,oBAAA,MAAM,IAAI,GAAG,gBAAgB,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC;oBAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AAC1C,oBAAA,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACtB;AAEA,gBAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YACnB;YAEA,OAAO;gBACH,KAAK;gBACL;aACH;QACL,CAAC;sFAAC;QAEO,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK;kFAAC;QAE9C,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS;sFAAC;QAEtD,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ;2FAAC;AAE/D,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,OAC9B,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO;AAC7B,YAAA,IAAI,CAAC,UAAU,EAAE,KAAK,WAAW;AACjC,YAAA,IAAI,CAAC,UAAU,EAAE,KAAK,SAAS,CAClC;0FAAC;AAEO,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AACnC,YAAA,IAAI,aAAa,GAAG,IAAI,KAAK,EAAsB;YAEnD,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AAC1C,gBAAA,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpE;YAEA,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBAC1C,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAI;oBAC9C,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;wBACxC,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC;oBACjD;oBACA;AACJ,gBAAA,CAAC,CAAC;YACN;AACA,YAAA,OAAO,aAAa;QACxB,CAAC;0FAAC;AAEO,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAChC,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACrB,gBAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,aAAa,GAAG,SAAS,CAAC;YAC1F;YACA;QACJ,CAAC;uFAAC;AAEO,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACjC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;YAC1B,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC3B,OAAO,CAAA,EAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAA,GAAA,EAAM,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,YAAY,CAAA,CAAE;YAClG;YACA;QACJ,CAAC;wFAAC;QAEO,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,UAAU,EAAE;QAEjE,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,UAAU,EAAE;AAE1E;;AAEG;QAEM,IAAA,CAAA,MAAM,GAAG,MAAM,EAAK;AAE7B;;;;AAIG;QACM,IAAA,CAAA,YAAY,GAAG,MAAM,EAAK;;QAG1B,IAAA,CAAA,kBAAkB,GAAG,MAAM,EAAK;;QAGhC,IAAA,CAAA,aAAa,GAAG,MAAM,EAAQ;;QAGtB,IAAA,CAAA,eAAe,GAAG,SAAS,CAAC,qBAAqB;4FAAC;AAgLtE,IAAA;AA9KG;;AAEG;AACH,IAAA,kBAAkB,CAAC,IAAkB,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;AAEQ,IAAA,UAAU,CAAC,IAAY,EAAA;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnE,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CACpD,IAAI,EACJ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAClD,CAAC,CACJ;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;AAC5E,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAC5C,IAAI,EACJ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAClD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,EACxE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAClD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EACpD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CACvD;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC9B;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,KAAU,EAAA;QACnB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,GAAG,SAAS,GAAG,aAAa,CAAC,CAAC;QAClH,KAAK,CAAC,cAAc,EAAE;IAC1B;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,KAAU,EAAA;QACnB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,GAAG,aAAa,CAAC,CAAC;QAC7G,KAAK,CAAC,cAAc,EAAE;IAC1B;;IAGA,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE;AACb,YAAA,OAAO,IAAI;QACf;QACA,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/E;;IAGA,WAAW,GAAA;QACP,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/E;AAEA,IAAA,qBAAqB,CAAC,KAAoB,EAAA;AACtC,QAAA,IAAI,MAAM;AACV,QAAA,QAAQ,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE;;AAE5B,YAAA,KAAK,WAAW;AACZ,gBAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AACvE,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,YAAY;AACb,gBAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACtE,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,SAAS;AACV,gBAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC;AACvF,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,WAAW;AACZ,gBAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa,CAAC;AAClF,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,MAAM;AACP,gBAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,EAC9D,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,aAAa,GAAG,SAAS,CAAC,CAAC;AACrF,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,KAAK;AACN,gBAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,EAC9D,CAAC,aAAa,GAAG,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AACtH,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,QAAQ;AACT,gBAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,aAAa,GAAG,SAAS,CAAC,CAAC;AACxJ,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,UAAU;AACX,gBAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,CAAC,MAAM,GAAG,EAAE,IAAI,aAAa,GAAG,SAAS,CAAC,IAAI,aAAa,GAAG,SAAS,CAAC,CAAC;AAClJ,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;AAEJ,YAAA,KAAK,OAAO;AACR,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AAClE,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;gBAClC;AAEJ,YAAA;gBACI;;QAGR,IAAI,CAAC,eAAe,EAAE;QACtB,KAAK,CAAC,cAAc,EAAE;IAC1B;AAEA;;AAEG;AACK,IAAA,cAAc,CAAC,IAAY,EAAA;AAC/B,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,eAAe,CAAC;AACnE,QAAA,MAAM,SAAS,GAAG,cAAc,GAAG,IAAI;QACvC,OAAO,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC;IACzG;;AAGQ,IAAA,aAAa,CAAC,IAAY,EAAA;AAE9B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;;AAG/D,QAAA,KAAK,IAAI,IAAI,GAAG,WAAW,EACvB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAC1C,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,EACtD;YACE,IACI,CAAC,CAAC,IAAI;AACN,iBAAC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,cAAc,EAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChE,iBAAC,CAAC,IAAI,CAAC,GAAG,EAAE;AACR,oBAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AACxD,iBAAC,CAAC,IAAI,CAAC,GAAG,EAAE;AACR,oBAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAC1D;AACE,gBAAA,OAAO,IAAI;YACf;QACJ;AAEA,QAAA,OAAO,KAAK;IAChB;IAEQ,cAAc,CAAC,KAAS,EAAE,KAAS,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,aAAa,GAAG,SAAS,CAAC,CAAC;AAChF,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,aAAa,GAAG,SAAS,CAAC,CAAC;IACrF;AAEA;;AAEG;AACK,IAAA,YAAY,CAAC,GAAQ,EAAA;AACzB,QAAA,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC;AACjF,cAAE;cACA,SAAS;IACnB;IAEQ,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,eAAe,EAAE,EAAE,eAAe,EAAE;IAC7C;8GAxUS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAyJc,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnLtE,suGAsEA,0DDpDQ,qBAAqB,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAQhB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAdlC,SAAS;+BACI,+BAA+B,EAAA,mBAAA,EAGpB,KAAK,EAAA,OAAA,EACjB;wBACL;qBACH,EAAA,IAAA,EACK;AACF,wBAAA,8BAA8B,EAAE,MAAM;AACtC,wBAAA,yCAAyC,EAAE;AAC9C,qBAAA,EAAA,QAAA,EAAA,suGAAA,EAAA;mgCA4J4C,qBAAqB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE7KtE;AACA,MAAM,eAAe,GAAG,EAAE;AAE1B;AACA,MAAM,cAAc,GAAG,CAAC;MAcX,iBAAiB,CAAA;AAZ9B,IAAA,WAAA,GAAA;AAaqB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAqB,eAAe,CAAC;AAC7D,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAkB,qBAAqB,CAAC;AAEjF;;AAEG;QACM,IAAA,CAAA,UAAU,GAAG,KAAK,CAAa,QAAQ;uFAAC;;QAGxC,IAAA,CAAA,QAAQ,GAAG,KAAK,CAA+B,SAAS,gFAC7D,SAAS,EAAE,KAAK,IAAG;gBACf,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACnC,YAAA,CAAC,GACH;AAEO,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAA6C,EAAE,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,CAAA,EACrE,SAAS,EAAE,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAG;gBAChC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;AACvC,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAC/B,CAAC,CAAC,GACJ;QAEO,IAAA,CAAA,YAAY,GAAG,KAAK,CAA+B,SAAS,oFACjE,SAAS,EAAE,KAAK,IAAG;gBACf,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;AACjE,YAAA,CAAC,GACH;AAEF;;AAEG;AACM,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK;sGAAiB;;QAGvC,IAAA,CAAA,GAAG,GAAG,KAAK,CAA+B,SAAS,2EACxD,SAAS,EAAE,KAAK,IAAG;gBACf,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACnC,YAAA,CAAC,GACH;;QAGO,IAAA,CAAA,GAAG,GAAG,KAAK,CAA+B,SAAS,2EACxD,SAAS,EAAE,KAAK,IAAG;gBACf,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACnC,YAAA,CAAC,GACH;QAEe,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,OAAO,CAAC;AAExD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACxC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;gBACtB;YACJ;AAEA,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CACzC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAC7B;YAED,MAAM,MAAM,GAAqB,EAAE;AACnC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE;gBACvD,MAAM,GAAG,GAAG,EAAE;AAEd,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE;AACrC,oBAAA,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc;oBACpC,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC7C,oBAAA,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACvB;AAEA,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;YACpB;YAEA,OAAO;gBACH,MAAM;gBACN;aACH;QACL,CAAC;uFAAC;AAGO,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;YAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM;YACxC,IAAI,MAAM,IAAI,SAAS;AACnB,gBAAA,OAAO,IAAI,CAAC,OAAO,GAAG,MAAM;YAChC,OAAO,IAAI,CAAC,OAAO;QACvB,CAAC;mFAAC;AAEO,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAChC,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;gBACrB,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAC7D;YACA;QACJ,CAAC;uFAAC;QAEO,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ;2FAAC;AAE/D,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,OAC9B,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO;AAC7B,YAAA,IAAI,CAAC,UAAU,EAAE,KAAK,WAAW;AACjC,YAAA,IAAI,CAAC,UAAU,EAAE,KAAK,SAAS,CAClC;0FAAC;AAGO,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;YAChC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,UAAU;YAChD,IAAI,UAAU,IAAI,SAAS;AACvB,gBAAA,OAAO,IAAI,CAAC,WAAW,GAAG,UAAU;YACxC,OAAO,IAAI,CAAC,WAAW;QAC3B,CAAC;uFAAC;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AACpC;;;;AAIG;YACH,MAAM,cAAc,GAA8B,EAAE;YACpD,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AAC1C,gBAAA,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnE;YAEA,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AAC1C,gBAAA,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAC1C,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CACtB;AACD,gBAAA,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAC1C,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CACtB;YACL;AACA,YAAA,OAAO,cAAc;QACzB,CAAC;2FAAC;AAEF;;AAEG;QACM,IAAA,CAAA,MAAM,GAAG,MAAM,EAAK;AAE7B;;;;AAIG;QACM,IAAA,CAAA,aAAa,GAAG,MAAM,EAAK;;QAG3B,IAAA,CAAA,kBAAkB,GAAG,MAAM,EAAK;;QAGhC,IAAA,CAAA,aAAa,GAAG,MAAM,EAAQ;;QAGtB,IAAA,CAAA,eAAe,GAAG,SAAS,CAAC,qBAAqB;4FAAC;AA8OtE,IAAA;AA5OG;;AAEG;AACH,IAAA,kBAAkB,CAAC,IAAkB,EAAA;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC;AAEA;;AAEG;AACK,IAAA,WAAW,CAAC,KAAa,EAAA;QAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CACpD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EACjD,KAAK,EACL,CAAC,CACJ;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAEzC,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CACtD,gBAAgB,CACnB;AACD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAC1C,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EACjD,KAAK,EACL,IAAI,CAAC,GAAG,CACJ,WAAW,EACX,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CACpD,EACD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAClD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EACpD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CACvD;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;IAC5B;AAEA;;AAEG;AACH,IAAA,qBAAqB,CAAC,KAAoB,EAAA;AACtC,QAAA,IAAI,MAAM;AACV,QAAA,QAAQ,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE;;AAE5B,YAAA,KAAK,WAAW;AACZ,gBAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAC3C,IAAI,CAAC,YAAY,EAAE,EACnB,CAAC,CAAC,CACL;AACD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,YAAY;AACb,gBAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAC3C,IAAI,CAAC,YAAY,EAAE,EACnB,CAAC,CACJ;AACD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,SAAS;AACV,gBAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAC3C,IAAI,CAAC,YAAY,EAAE,EACnB,CAAC,CAAC,CACL;AACD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,WAAW;AACZ,gBAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAC3C,IAAI,CAAC,YAAY,EAAE,EACnB,CAAC,CACJ;AACD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,MAAM;gBACP,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAC3C,IAAI,CAAC,YAAY,EAAE,EACnB,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CACtD;AACD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,KAAK;gBACN,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAC3C,IAAI,CAAC,YAAY,EAAE,EACnB,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAC1D;AACD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,QAAQ;gBACT,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAC1C,IAAI,CAAC,YAAY,EAAE,EACnB,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAC1B;AACD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,UAAU;gBACX,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAC1C,IAAI,CAAC,YAAY,EAAE,EACnB,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CACxB;AACD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpC;;AAGJ,YAAA,KAAK,OAAO;AACR,gBAAA,IAAI,CAAC,WAAW,CACZ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CACrD;AACD,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;gBAClC;AACJ,YAAA;gBACI;;QAGR,IAAI,CAAC,eAAe,EAAE;QACtB,KAAK,CAAC,cAAc,EAAE;IAC1B;AAEA;;AAEG;AACK,IAAA,eAAe,CAAC,KAAa,EAAA;QACjC,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CACpD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EACjD,KAAK,EACL,CAAC,CACJ;AACD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CACzC,gBAAgB,EAChB,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAC1C;AACD,QAAA,MAAM,SAAS,GAAG,eAAe,GAAG,KAAK;QACzC,OAAO,IAAI,YAAY,CACnB,KAAK,EACL,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EACtB,SAAS,EACT,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAC1B,KAAK,EACL,SAAS,CACZ;IACL;AAEA;;AAEG;AACK,IAAA,cAAc,CAAC,KAAa,EAAA;QAChC,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CACpD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EACjD,KAAK,EACL,CAAC,CACJ;;;AAID,QAAA,KACI,IAAI,IAAI,GAAG,gBAAgB,EAC3B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,EAC7C,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,EACtD;YACE,IACI,CAAC,CAAC,IAAI;AACN,iBAAC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,cAAc,EAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjE,iBAAC,CAAC,IAAI,CAAC,GAAG,EAAE;AACR,oBAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AACxD,iBAAC,CAAC,IAAI,CAAC,GAAG,EAAE;AACR,oBAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAC1D;AACE,gBAAA,OAAO,IAAI;YACf;QACJ;AAEA,QAAA,OAAO,KAAK;IAChB;AAEA;;;AAGG;AACK,IAAA,qBAAqB,CAAC,IAAQ,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE;AACnE,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAC3C,IAAI,EACJ,IAAI,CAAC,YAAY,EAAE,CACtB;;;;AAKD,YAAA,IAAI,MAAM,GAAG,CAAC,EAAE;gBACZ,OAAO,CAAC,CAAC;YACb;AAAO,iBAAA,IAAI,MAAM,GAAG,CAAC,EAAE;AACnB,gBAAA,OAAO,EAAE;YACb;iBAAO;gBACH,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC9C;QACJ;QACA;IACJ;AAEA;;AAEG;IACK,WAAW,CAAC,QAAY,EAAE,SAAa,EAAA;QAC3C,OAAO,CAAC,EACJ,QAAQ;YACR,SAAS;AACT,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACtC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAC1C;IACL;AAEA;;AAEG;AACK,IAAA,YAAY,CAAC,GAAQ,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,GAAG,CAAC;AAC3C,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG;AAChC,cAAE;cACA,SAAS;IACnB;IAEQ,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,eAAe,EAAE,EAAE,eAAe,EAAE;IAC7C;8GA3YS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA8JmB,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtLtE,k2BAsBA,0DDJQ,qBAAqB,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAMhB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAZ7B,SAAS;+BACI,yBAAyB,EAAA,mBAAA,EAGd,KAAK,EAAA,OAAA,EACjB;wBACL;qBACH,EAAA,IAAA,EACK;AACF,wBAAA,8BAA8B,EAAE;AACnC,qBAAA,EAAA,QAAA,EAAA,k2BAAA,EAAA;+/BAgK4C,qBAAqB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ME7JzD,iBAAiB,CAAA;AAqL1B,IAAA,WAAA,GAAA;AApLiB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAA0B,UAAU,CAAC;AACpD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC;AACjC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAqB,eAAe,CAAC;AAC7D,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAkB,qBAAqB,CAAC;AAEjF;;AAEG;AACM,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK;sGAAiB;AAEhD;;AAEG;QACM,IAAA,CAAA,cAAc,GAAG,KAAK,CAAS,CAAC;2FAAC;;QAGjC,IAAA,CAAA,GAAG,GAAG,KAAK,CAA+B,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,KAAA,EAAA,8BAAA,EAAA,CAAA,EACxD,SAAS,EAAE,CAAC,KAAK,KAAI;gBACjB,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,gBAAA,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAEhC,gBAAA,OAAO;AACH,sBAAE,IAAI,CAAC,eAAe,CAAC,UAAU,CAC7B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,EACnC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EACpC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC;sBAErC,SAAS;AACnB,YAAA,CAAC,GACH;;QAGO,IAAA,CAAA,GAAG,GAAG,KAAK,CAA+B,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,KAAA,EAAA,8BAAA,EAAA,CAAA,EACxD,SAAS,EAAE,CAAC,KAAK,KAAI;gBACjB,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,gBAAA,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAEhC,gBAAA,OAAO;AACH,sBAAE,IAAI,CAAC,eAAe,CAAC,UAAU,CAC7B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,EACnC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EACpC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC;sBAErC,SAAS;AACnB,YAAA,CAAC,GACH;;;QAIO,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAgB,SAAS,0FAAI,KAAK,EAAE,cAAc,EAAA,CAAG;;QAGvE,IAAA,CAAA,aAAa,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,8BAAA,EAAA,CAAA,EACzC,MAAM,EAAE,MAAM,IAAI,CAAC,kBAAkB,EAAE;AACvC,YAAA,WAAW,EAAE,CAAC,IAAI,CAAC,GACrB;AACO,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAClC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AACpE,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;QACjE,CAAC;yFAAC;AAEO,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK;kGAAc;;QAGhC,IAAA,CAAA,QAAQ,GAAG,KAAK,CAA+B,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EAC7D,SAAS,EAAE,CAAC,KAAK,KAAI;gBACjB,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACnC,YAAA,CAAC,GACH;AAEO,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAA6C,EAAE,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,CAAA,EACrE,SAAS,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,IAAG;gBAClC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;AACvC,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAC/B,CAAC,CAAC,GACJ;AAEF;;AAEG;QACM,IAAA,CAAA,SAAS,GAAG,KAAK,CAAmC,OAAO;sFAAC;AAErE;;AAEG;QACM,IAAA,CAAA,eAAe,GAAG,KAAK,CAAU,KAAK;4FAAC;;QAGvC,IAAA,CAAA,kBAAkB,GAAG,MAAM,EAAK;;QAGhC,IAAA,CAAA,cAAc,GAAG,MAAM,EAAiB;;QAGxC,IAAA,CAAA,aAAa,GAAG,MAAM,EAAQ;AAEvC;;;;AAIG;QACM,IAAA,CAAA,YAAY,GAAG,MAAM,EAAK;AAEnC;;;;AAIG;QACM,IAAA,CAAA,aAAa,GAAG,MAAM,EAAK;QAE3B,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW;AACvD,cAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CACzB,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,eAAe,CAAC,cAAc;cAErC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;6FAAC;QAEnD,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW;AACxD,cAAE,IAAI,CAAC,UAAU,CAAC,0BAA0B;AAC5C,cAAE,IAAI,CAAC,UAAU,CAAC,sBAAsB,EAAE;8FAAC;AAEtC,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACrC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,YAAA,IAAI,WAAW,KAAK,OAAO,EAAE;AACzB,gBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;YAC3C;AAAO,iBAAA,IAAI,WAAW,KAAK,MAAM,EAAE;AAC/B,gBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;YAC1C;YACA;QACJ,CAAC;4FAAC;AAEO,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACrC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,YAAA,IAAI,WAAW,KAAK,OAAO,EAAE;AACzB,gBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;YAC3C;AAAO,iBAAA,IAAI,WAAW,KAAK,MAAM,EAAE;AAC/B,gBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;YAC1C;YACA;QACJ,CAAC;4FAAC;QAEO,IAAA,CAAA,WAAW,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,aAAA,EAAA,8BAAA,EAAA,CAAA,EAC/B,MAAM,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE;AAC9B,YAAA,WAAW,EAAE,CAAC,IAAI,CAAC,GACrB;QAEO,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ;2FAAC;AAE/D,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AACnC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;YACpC,QACI,UAAU,KAAK,OAAO;AACtB,gBAAA,UAAU,KAAK,WAAW;gBAC1B,UAAU,KAAK,SAAS;QAEhC,CAAC;0FAAC;QAEO,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,aAAa;8FAAC;QAExE,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO;wFAAC;AAErE;;AAEG;AACH,QAAA,IAAA,CAAA,sBAAsB,GAAG,CAAC,IAAQ,KAAI;AAClC,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;YAC5C,QACI,CAAC,CAAC,IAAI;iBACL,CAAC,cAAc,IAAI,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACjD,iBAAC,CAAC,IAAI,CAAC,GAAG,EAAE;AACR,oBAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AACxD,iBAAC,CAAC,IAAI,CAAC,GAAG,EAAE;AACR,oBAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AAEhE,QAAA,CAAC;QAGG,iBAAiB,CAAC,MAAK;YACnB,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;gBAC/B,IAAI,CAAC,MAAM,CAAC;sBACN,aAAa,CAAc,8BAA8B;sBACzD,KAAK,EAAE;AACjB,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA;;AAEG;IACH,WAAW,GAAA;QACP,IAAI,CAAC,WAAW,CAAC,GAAG,CAChB,IAAI,CAAC,WAAW,EAAE,IAAI,OAAO,GAAG,aAAa,GAAG,OAAO,CAAC;IAChE;AAEA;;AAEG;IACH,eAAe,GAAA;AACX,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW;AAC3B,cAAE,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAChE,cAAE,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AACpE,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;AAE9B,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;IACxC;AAEA;;AAEG;IACH,WAAW,GAAA;AACP,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW;AAC3B,cAAE,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;AAC/D,cAAE,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACnE,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;AAE9B,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;IACxC;AAEA,IAAA,YAAY,CAAC,IAAQ,EAAA;QACjB,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE;YACpC;QACJ;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AAE9B;;;AAGG;IACP;AAEA;;AAEG;IACH,cAAc,CACV,IAAO,EACP,IAAsC,EAAA;AAEtC,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B;IACJ;AAEA;;AAEG;AACH,IAAA,wBAAwB,CAAC,IAAO,EAAA;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CACzC,IAAI,EACJ,IAAI,CAAC,GAAG,EAAE,EACV,IAAI,CAAC,GAAG,EAAE,CACb;AACD,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;AAC9B,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;IACxC;IAEA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;IACtC;AAEA;;AAEG;IACH,iBAAiB,GAAA;QACb,QACI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IAExE;AAEA;;AAEG;IACH,iBAAiB,GAAA;QACb,QACI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IAEtE;AAEA;;AAEG;IACH,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS;YAC1B,eAAe,CAAC,MAAK;AACjB,gBAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;oBAC/B,IAAI,CAAC,MAAM,CAAC;0BACN,aAAa,CAAc,8BAA8B;0BACzD,KAAK,EAAE;AACjB,gBAAA,CAAC,CAAC;YACN,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACvC;AAEA,IAAA,yBAAyB,CAAC,cAAiB,EAAA;AACvC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;IAC1C;AAEA,IAAA,qBAAqB,CAAC,eAAkB,EAAA;AACpC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;IAC5C;AAEA;;AAEG;IACK,UAAU,CAAC,KAAS,EAAE,KAAS,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE;YAChC,OAAO,CAAC,EACJ,KAAK;gBACL,KAAK;AACL,gBAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC;AACnC,oBAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC;AACnC,gBAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC;oBACpC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CACvC;QACL;AAAO,aAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE;YACtC,OAAO,CAAC,EACJ,KAAK;gBACL,KAAK;AACL,gBAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC;oBACnC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CACtC;QACL;aAAO;AACH,YAAA,OAAO,KAAK;QAChB;IACJ;AAEA;;AAEG;AACK,IAAA,YAAY,CAAC,GAAQ,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,GAAG,CAAC;AAC3C,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG;AAChC,cAAE;cACA,SAAS;IACnB;8GAnVS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzB9B,8uNAwIA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDxHQ,eAAe,2JACf,kBAAkB,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,KAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,eAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,iBAAiB,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,KAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,sBAAsB,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,KAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAMjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAf7B,SAAS;+BACI,wBAAwB,EAAA,mBAAA,EAGb,KAAK,EAAA,OAAA,EACjB;wBACL,eAAe;wBACf,kBAAkB;wBAClB,iBAAiB;wBACjB;qBACH,EAAA,IAAA,EACK;AACF,wBAAA,yBAAyB,EAAE;AAC9B,qBAAA,EAAA,QAAA,EAAA,8uNAAA,EAAA;;;AEnBL;AACA,IAAI,YAAY,GAAG,CAAC;MAeE,iBAAiB,CAAA;AADvC,IAAA,WAAA,GAAA;AAEuB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAqB,eAAe,CAAC;AAC7D,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAkB,qBAAqB,CAAC;AAEnF;;AAEG;QACM,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAU,KAAK;6FAAC;AAEjD;;AAEG;QACM,IAAA,CAAA,WAAW,GAAG,KAAK,CAAU,KAAK;wFAAC;AAE5C;;AAEG;QACM,IAAA,CAAA,SAAS,GAAG,KAAK,CAAW,OAAO;sFAAC;AAE7C;;AAEG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,CAAC;qFAAC;AAEpC;;AAEG;QACM,IAAA,CAAA,UAAU,GAAG,KAAK,CAAS,CAAC;uFAAC;AAEtC;;AAEG;QACM,IAAA,CAAA,UAAU,GAAG,KAAK,CAAS,CAAC;uFAAC;AAEtC;;;;AAIG;QACM,IAAA,CAAA,cAAc,GAAG,KAAK,CAAS,CAAC;2FAAC;AAE1C;;AAEG;QACM,IAAA,CAAA,eAAe,GAAG,KAAK,CAAU,KAAK;4FAAC;AAEvC,QAAA,IAAA,CAAA,EAAE,GAAG,CAAA,cAAA,EAAiB,YAAY,EAAE,EAAE;QAsCtC,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK;AACzD,cAAE,IAAI,CAAC,eAAe,CAAC;AACvB,cAAE,IAAI,CAAC,UAAU,EAAE,KAAK;AACpB,kBAAE,IAAI,CAAC,eAAe,CAAC;AACvB,kBAAE,IAAI,CAAC,eAAe,CAAC,eAAe;yFAAC;AAE/C;;AAEG;QACM,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,CAAC,QAAuB,MACtD,CAAC,CAAC,QAAQ;AACV,aAAC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,cAAc,EAAG,CAAC,QAAQ,CAAC,CAAC;aAC3D,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;aACvE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAC3E;4FAAC;AAQL,IAAA;AANa,IAAA,YAAY,CAAC,GAAQ,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,GAAG,CAAC;AAC3C,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG;AAChC,cAAE;cACA,SAAS;IACnB;8GAzGkB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBADtC;;;ACjBD;MAIa,kBAAkB,CAAA;IAC3B,SAAS,CAAC,GAAuB,EAAE,GAAuB,EAAA;QACtD,IAAI,GAAG,IAAI,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AACzC,YAAA,OAAO,SAAS;QAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QAE9B,IAAI,GAAG,IAAI,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AACzC,YAAA,OAAO,MAAM;AAEjB,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IAC3D;8GAXS,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE;AACT,iBAAA;;;ACCD;MAca,iBAAiB,CAAA;AAb9B,IAAA,WAAA,GAAA;QAea,IAAA,CAAA,WAAW,GAAG,KAAK,CAAU,KAAK;wFAAC;AAEnC,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK;sGAAU;QAEhC,IAAA,CAAA,aAAa,GAAG,KAAK,CAAU,KAAK;0FAAC;AAErC,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK;wGAAU;QAElC,IAAA,CAAA,eAAe,GAAG,KAAK,CAAU,KAAK;4FAAC;AAEhD;;;AAGG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK;gGAAU;QAE1B,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,CAAC;kFAAC;QAExB,IAAA,CAAA,GAAG,GAAG,KAAK,CAAS,CAAC;gFAAC;QAEtB,IAAA,CAAA,GAAG,GAAG,KAAK,CAAS,CAAC;gFAAC;QAEtB,IAAA,CAAA,IAAI,GAAG,KAAK,CAAS,CAAC;iFAAC;AAEvB,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK;kGAAU;QAE5B,IAAA,CAAA,WAAW,GAAG,MAAM,EAAU;QAE9B,IAAA,CAAA,WAAW,GAAG,MAAM,EAAU;AAE/B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAU;AAIlC,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;yFAAC;AAyC1E,IAAA;IAvCG,QAAQ,GAAA;QACJ,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACvC,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE,CACzB,CAAC,SAAS,CAAC,CAAC,GAAW,KAAI;YACxB,IAAI,GAAG,EAAE;gBACL,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/C,gBAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;YACxC;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE;AAClC,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;IACnC;IAEA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAChD;IAEA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAChD;AAEA,IAAA,iBAAiB,CAAC,GAAW,EAAA;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9B;AAEQ,IAAA,WAAW,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC;AAEQ,IAAA,mBAAmB,CAAC,KAAa,EAAA;AACrC,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE;YAC1C;QACJ;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC;8GA5ES,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,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,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpB9B,w5FAgEA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EDnDQ,kBAAkB,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAOb,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAb7B,SAAS;+BACI,yBAAyB,EAAA,mBAAA,EAGd,KAAK,EAAA,OAAA,EACjB;wBACL;qBACH,EAAA,IAAA,EACK;AACF,wBAAA,0BAA0B,EAAE;AAC/B,qBAAA,EAAA,QAAA,EAAA,w5FAAA,EAAA;;;MECQ,cAAc,CAAA;AAb3B,IAAA,WAAA,GAAA;AAcqB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAA0B,UAAU,CAAC;AACpD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC;AACjC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAqB,eAAe,CAAC;;QAGrE,IAAA,CAAA,YAAY,GAAG,KAAK,CAA+B,SAAS,oFACjE,SAAS,EAAE,KAAK,IAAG;gBACf,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;AACjE,YAAA,CAAC,GACH;;QAGO,IAAA,CAAA,GAAG,GAAG,KAAK,CAA+B,SAAS,2EACxD,SAAS,EAAE,KAAK,IAAG;gBACf,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACnC,YAAA,CAAC,GACH;;QAGO,IAAA,CAAA,GAAG,GAAG,KAAK,CAA+B,SAAS,2EACxD,SAAS,EAAE,KAAK,IAAG;gBACf,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACnC,YAAA,CAAC,GACH;AAEF;;AAEG;QACM,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAU,KAAK;6FAAC;AAEjD;;AAEG;QACM,IAAA,CAAA,WAAW,GAAG,KAAK,CAAU,KAAK;wFAAC;AAE5C;;AAEG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,CAAC;qFAAC;AAEpC;;AAEG;QACM,IAAA,CAAA,UAAU,GAAG,KAAK,CAAS,CAAC;uFAAC;AAEtC;;AAEG;QACM,IAAA,CAAA,UAAU,GAAG,KAAK,CAAS,CAAC;uFAAC;AAE7B,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;sFAAC;AACtE,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACzC,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAE5B,YAAA,IAAI,IAAyB;AAE7B,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AACrB,gBAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;YAC1B;iBAAO;AACH,gBAAA,IAAI,KAAK,KAAK,CAAC,EAAE;oBACb,KAAK,GAAG,EAAE;oBACV,IAAI,GAAG,KAAK;gBAChB;qBAAO,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE;oBAChC,IAAI,GAAG,KAAK;gBAChB;AAAO,qBAAA,IAAI,KAAK,KAAK,EAAE,EAAE;oBACrB,IAAI,GAAG,IAAI;gBACf;qBAAO,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE,EAAE;AACjC,oBAAA,KAAK,GAAG,KAAK,GAAG,EAAE;oBAClB,IAAI,GAAG,IAAI;gBACf;AAEA,gBAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;YAC1B;QACJ,CAAC;wFAAC;QAEM,IAAA,CAAA,KAAK,GAAG,KAAK;;AAEJ,QAAA,IAAA,CAAA,IAAI,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,MAAA,EAAA,8BAAA,EAAA,CAAA,EAChC,MAAM,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI;AACrC,YAAA,WAAW,EAAE,CAAC,CAAC,KAAI;gBACf,IAAI,CAAC,IAAI,SAAS;AACd,oBAAA,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC;gBACzB,OAAO,IAAI,CAAC,KAAK;AACrB,YAAA,CAAC,GACH;AAEF;;;;AAIG;QACM,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK;yFAAC;AAEvD,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;wFAAC;AAElF,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;wFAAC;QAElF,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,EAAE;QAE5D,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE;QAEhE,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE;QAEhE,IAAA,CAAA,qBAAqB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,UAAU,EAAE;QAEpE,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE;QAEhE,IAAA,CAAA,qBAAqB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,UAAU,EAAE;QAEpE,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI;AACjD,cAAE,IAAI,CAAC,UAAU,CAAC,aAAa;AAC/B,cAAE,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;8FAAC;QAE7B,IAAA,CAAA,cAAc,GAAG,MAAM,EAAK;AA+DrC;;AAEG;QACM,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,OAC9B,CAAC,IAAI,CAAC,GAAG,EAAE;AACX,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,GAAG,EAAG,CAAC,GAAG,CAAC,CACtD;0FAAC;AACF;;AAEG;QACM,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,OAChC,CAAC,IAAI,CAAC,GAAG,EAAE;AACX,YAAA,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,GAAG,EAAG,CAAC,GAAG,CAAC,CAAC,CACxD;4FAAC;AAEF;;AAEG;QACM,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,OAChC,CAAC,IAAI,CAAC,GAAG,EAAE;AACX,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,GAAG,EAAG,CAAC,GAAG,CAAC,CAC1D;4FAAC;AAEF;;AAEG;QACM,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,OAClC,CAAC,IAAI,CAAC,GAAG,EAAE;AACX,YAAA,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,GAAG,EAAG,CAAC,GAAG,CAAC,CAAC,CAC5D;8FAAC;AAEF;;AAEG;QACM,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,OAChC,CAAC,IAAI,CAAC,GAAG,EAAE;AACX,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,GAAG,EAAG,CAAC,GAAG,CAAC,CAC1D;4FAAC;AAEF;;AAEG;QACM,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,OAClC,CAAC,IAAI,CAAC,GAAG,EAAE;AACX,YAAA,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,GAAG,EAAG,CAAC,GAAG,CAAC,CAAC,CAC5D;8FAAC;AAuDL,IAAA;AAjKG;;AAEG;IACH,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS;YAC1B,eAAe,CAAC,MAAK;AACjB,gBAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;AAC/B,oBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE;AACrC,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,EAAE;gBACC,QAAQ,EAAE,IAAI,CAAC;AAClB,aAAA,CAAC;IACV;AAEA;;;AAGG;AACH,IAAA,oBAAoB,CAAC,KAAa,EAAA;AAC9B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,EAAE;AACzD,YAAA,KAAK,GAAG,KAAK,GAAG,EAAE;QACtB;AAAO,aAAA,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,EAAE,EAAE;YACpD,KAAK,GAAG,CAAC;QACb;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IAC5B;AAEA,IAAA,YAAY,CAAC,KAAa,EAAA;AACtB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,CAAC;AACnE,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B;AAEA,IAAA,cAAc,CAAC,OAAe,EAAA;AAC1B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC;AACvE,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B;AAEA,IAAA,cAAc,CAAC,OAAe,EAAA;AAC1B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC;AACvE,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B;AAEA,IAAA,WAAW,CAAC,KAAU,EAAA;QAClB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AAE3B,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC5B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AACb,YAAA,KAAK,GAAG,KAAK,GAAG,EAAE;QACtB;aAAO;AACH,YAAA,KAAK,GAAG,KAAK,GAAG,EAAE;QACtB;QAEA,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAC5B;QAEA,KAAK,CAAC,cAAc,EAAE;IAC1B;AAiDA;;;;;AAKG;IACK,YAAY,CAAC,MAAc,EAAE,YAAe,EAAA;AAChD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,MAAM;AACzE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,CAAC;QACxE,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC;IAC7D;AAEA;;;;;AAKG;IACK,cAAc,CAAC,MAAc,EAAE,YAAe,EAAA;AAClD,QAAA,MAAM,OAAO,GACT,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,MAAM;AACjE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAC1C,IAAI,CAAC,YAAY,EAAE,EACnB,OAAO,CACV;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC;IAC7D;AAEA;;;;;AAKG;IACK,cAAc,CAAC,MAAc,EAAE,YAAe,EAAA;AAClD,QAAA,MAAM,OAAO,GACT,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,MAAM;AACjE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAC1C,IAAI,CAAC,YAAY,EAAE,EACnB,OAAO,CACV;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC;IAC7D;AAEA;;AAEG;AACK,IAAA,YAAY,CAAC,GAAQ,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,GAAG,CAAC;AAC3C,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG;AAChC,cAAE;cACA,SAAS;IACnB;8GA1RS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,eAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClB3B,u2DAoDA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDzCQ,iBAAiB,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,OAAA,EAAA,KAAA,EAAA,KAAA,EAAA,MAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAOZ,cAAc,EAAA,UAAA,EAAA,CAAA;kBAb1B,SAAS;+BACI,qBAAqB,EAAA,mBAAA,EAGV,KAAK,EAAA,OAAA,EACjB;wBACL;qBACH,EAAA,IAAA,EACK;AACF,wBAAA,sBAAsB,EAAE,MAAM;AAC9B,wBAAA,iBAAiB,EAAE;AACtB,qBAAA,EAAA,QAAA,EAAA,u2DAAA,EAAA;;;AEPL;MAsBa,0BAA0B,CAAA;AArBvC,IAAA,WAAA,GAAA;AA4EqB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAA0B,UAAU,CAAC;AACpD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC;AACjC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAqB,eAAe,CAAC;QAErE,IAAA,CAAA,QAAQ,GAAG,SAAS,CAAC,iBAAiB;qFAAC;QAEvC,IAAA,CAAA,KAAK,GAAG,SAAS,CAAC,cAAc;kFAAC;QAEjC,IAAA,CAAA,MAAM,GAAG,MAAM,CAAmC,SAAS;mFAAC;QAC5D,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,CAAC;AAAC,QAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAA,CAAA;AAExC;;AAEG;AACc,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAQ;AAEzC,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;AAE3D;;AAEG;AACc,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,OAAO,EAAS;AAE/C,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;AAEpD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ;AAE3C,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AAE/D;;;AAGG;QACc,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAgB,SAAS;8FAAC;AAgB5D,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE;uFAAC;AACxD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE;uFAAC;AACxD,QAAA,IAAA,CAAA,GAAG,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE;gFAAC;AAC1C,QAAA,IAAA,CAAA,GAAG,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE;gFAAC;AAC1C,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE;qFAAC;AACpD,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE;sFAAC;AACtD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE;uFAAC;AACxD,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE;0FAAC;AAC9D,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE;2FAAC;AAChE,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE;2FAAC;AAChE,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE;sFAAC;AACtD,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE;4FAAC;AAClE,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,EAAE;6FAAC;AACpE,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE;wFAAC;AAC1D,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE;qFAAC;AACpD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE;uFAAC;AACxD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE;uFAAC;AACxD,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE;qFAAC;AAE5C,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE;yFAAC;AAC5D,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE;oFAAC;AAClD,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE;4FAAC;QAE1E,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,EAAE;QAEzD,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,EAAE;AAE5D;;AAEG;QACM,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,EAAE;AAEhE;;AAEG;QACM,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,UAAU,EAAE;AAE5D;;AAEG;AACM,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACnC,YAAA,OAAO;AACH,kBAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE;kBACtD,EAAE;QACZ,CAAC;+FAAC;AAEF;;AAEG;AACM,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACnC,YAAA,OAAO;AACH,kBAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE;kBACtD,EAAE;QACZ,CAAC;6FAAC;AAEF;;;;AAIG;AACM,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AACxC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;YACpC,QACI,UAAU,KAAK,QAAQ;iBACtB,UAAU,KAAK,UAAU;AACtB,oBAAA,UAAU,KAAK,QAAQ,CAAC;QAEpC,CAAC;+FAAC;AAyRL,IAAA;aArcU,IAAA,CAAA,OAAO,GAAG,IAAH,CAAO;AAErB,IAAA,oBAAoB,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAA0B,EAAA;AACtE,QAAA,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE;AACrC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;AACzB,YAAA,iBAAiB,EAAE;YACnB;QACJ;AACA,QAAA,IAAI,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;AACtB,YAAA,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE;AACxC,YAAA,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa;SACzC,EAAE;AACC,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,MAAM,EAAE;AACX,SAAA,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAc,yBAAyB,CAAC;QAC1E,IAAI,KAAK,EAAE;AACP,YAAA,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;AACzB,YAAA,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC;gBACjB,EAAE,OAAO,EAAE,CAAC,EAAE;gBACd,EAAE,OAAO,EAAE,CAAC;aACf,EAAE;AACC,gBAAA,QAAQ,EAAE,GAAG;AACb,gBAAA,KAAK,EAAE,GAAG;AACV,gBAAA,MAAM,EAAE;AACX,aAAA,CAAC;QACN;AACA,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAK;AACjC,YAAA,IAAI,KAAK;AACL,gBAAA,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE;AAC5B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;AACzB,YAAA,iBAAiB,EAAE;AACvB,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,oBAAoB,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAA0B,EAAA;AACtE,QAAA,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE;AACrC,YAAA,iBAAiB,EAAE;YACnB;QACJ;AAEA,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;YACxB,EAAE,OAAO,EAAE,CAAC,EAAE;YACd,EAAE,OAAO,EAAE,CAAC;SACf,EAAE;AACC,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,MAAM,EAAE;AACX,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAK;AACjC,YAAA,iBAAiB,EAAE;AACvB,QAAA,CAAC,CAAC;IACN;AAqCA,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;IACnC;IAEA,IAAI,YAAY,CAAC,KAAoB,EAAA;QACjC,IAAI,KAAK,EAAE;YACP,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CACrD,KAAK,EACL,IAAI,CAAC,GAAG,EAAE,EACV,IAAI,CAAC,GAAG,EAAE,CACb,CAAC;QACN;IACJ;AA0EA,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa;IACpC;IAEA,kBAAkB,GAAA;QACd,IAAI,CAAC,UAAU,EAAE;IACrB;IAEA,eAAe,GAAA;QACX,IAAI,CAAC,WAAW,EAAE;IACtB;AAEA,IAAA,YAAY,CAAC,IAAQ,EAAA;AACjB,QAAA,IAAI,MAAM;AAEV,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAE5B,QAAA,IAAI,MAAM,EAAE,cAAc,EAAE,EAAE;AAC1B,YAAA,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;YAC5C,IAAI,MAAM,EAAE;AACR,gBAAA,IAAI,CAAC,YAAY,GAAG,MAAM;AAC1B,gBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;YACzB;iBAAO;;AAEH,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,UAAU,EAAE;AAClC,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;gBAC3B;YACJ;YACA;QACJ;AAEA,QAAA,IAAI,MAAM,EAAE,aAAa,EAAE,EAAE;AACzB,YAAA,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC;YAC3C,IAAI,MAAM,EAAE;gBACR,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACtD,gBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;YACzB;QACJ;IACJ;AAEA,IAAA,YAAY,CAAC,IAAQ,EAAA;QACjB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;AAEpD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAE5B,QAAA,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE;YACjD;QACJ;AAEA,QAAA,IAAI,MAAM,CAAC,cAAc,EAAE,EAAE;AACzB,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;YAChC;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YACtB,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;;;AAI7C,YAAA,IACI,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC;gBAC7B,SAAS,CAAC,CAAC,CAAC;AACZ,gBAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CACxB,IAAI,CAAC,YAAY,EACjB,SAAS,CAAC,CAAC,CAAC,CACf,KAAK,CAAC;AACX,iBAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC;oBAC7B,SAAS,CAAC,CAAC,CAAC;AACZ,oBAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CACxB,IAAI,CAAC,YAAY,EACjB,SAAS,CAAC,CAAC,CAAC,CACf,KAAK,CAAC,CAAC,CAAC,EACf;AACE,gBAAA,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY;AAChC,gBAAA,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY;YACpC;iBAAO;gBACH,SAAS,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY;YAC7D;AAEA,YAAA,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;QAC5B;IACJ;AAEA;;AAEG;AACH,IAAA,eAAe,CAAC,KAAY,EAAA;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;QACtB;IACJ;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,KAAY,EAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE;AAC9C,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;YACvB,KAAK,CAAC,cAAc,EAAE;YACtB;QACJ;AAEA,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC,KAAK,CAAC,cAAc,EAAE;QACtB;IACJ;AAEA;;AAEG;IACH,sBAAsB,CAAC,KAAU,EAAE,KAAa,EAAA;AAC5C,QAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;QAClC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;IAC3B;AAEA;;AAEG;AACH,IAAA,wBAAwB,CACpB,KAAU,EACV,IAAS,EACT,KAAa,EAAA;AAEb,QAAA,QAAQ,KAAK,CAAC,OAAO;AACjB,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,YAAY;AACjB,YAAA,KAAK,SAAS;AACd,YAAA,KAAK,WAAW;gBACZ,IAAI,CAAC,KAAK,EAAE;AACZ,gBAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAChD,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;gBACvB;AAEJ,YAAA,KAAK,OAAO;AACR,gBAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;gBAClC,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;gBACvB;AAEJ,YAAA;gBACI;;IAEZ;AAEA;;AAEG;AACK,IAAA,sBAAsB,CAAC,KAAa,EAAA;AACxC,QAAA,IACI,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO;AAC7B,YAAA,IAAI,CAAC,mBAAmB,EAAE,KAAK,KAAK,EACtC;AACE,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC;AAEnC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC/D,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,QAAQ,EAAE;gBAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC5D;QACJ;QACA;IACJ;IAEQ,UAAU,GAAA;AACd,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;QAChE,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;IACzE;AAEA;;;AAGG;AACK,IAAA,wBAAwB,CAAC,IAAQ,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE;AACvD,YAAA,OAAO,SAAS;QACpB;AAEA,QAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC;IAChD;AAEA;;AAEG;AACK,IAAA,uBAAuB,CAAC,IAAQ,EAAA;QACpC,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAChC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAE9B,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC;QAEpD,IAAI,CAAC,MAAM,EAAE;YACT;QACJ;;;;AAKA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO,EAAE;AAC/B,YAAA,IACI,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM;AACxB,gBAAA,CAAC,EAAE;gBACH,IAAI;AACJ,gBAAA,CAAC,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EACzE;gBACE,EAAE,GAAG,MAAM;AACX,gBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC;iBAAO;gBACH,IAAI,GAAG,MAAM;gBACb,EAAE,GAAG,SAAS;AACd,gBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC;QACJ;AAAO,aAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,WAAW,EAAE;YAC1C,IAAI,GAAG,MAAM;;AAGb,YAAA,IAAI,EAAE,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE;gBAClD,EAAE,GAAG,SAAS;YAClB;QACJ;AAAO,aAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,SAAS,EAAE;YACxC,EAAE,GAAG,MAAM;;AAGX,YAAA,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE;gBACpD,IAAI,GAAG,SAAS;YACpB;QACJ;AAEA,QAAA,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IACrB;AAEA;;;;;;AAMG;AACK,IAAA,0BAA0B,CAAC,IAAQ,EAAA;AACvC,QAAA,IAAI,MAAM;;AAGV,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE;AAC9B,YAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CACpC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,EAClC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,EACnC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,EAClC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAChD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,EAClD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CACrD;AACD,YAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CACnC,MAAM,EACN,IAAI,CAAC,GAAG,EAAE,EACV,IAAI,CAAC,GAAG,EAAE,CACb;QACL;aAAO;YACH,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;QAC7C;;AAGA,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS;IAChE;AAEA;;AAEG;IACK,WAAW,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ,EAAE;YAChC;QACJ;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;QAC1B,IAAI,QAAQ,EAAE;YACV,QAAQ,CAAC,eAAe,EAAE;QAC9B;aAAO,IAAI,KAAK,EAAE;YACd,KAAK,CAAC,KAAK,EAAE;QACjB;IACJ;8GAtcS,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,8BAAA,EAAA,eAAA,EAAA,8BAAA,EAAA,EAAA,UAAA,EAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,8BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,iCAAA,EAAA,YAAA,EAAA,SAAA,EAAA,cAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA2DL,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAEpB,cAAc,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5F7C,w3HA0FA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED1EQ,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,iBAAiB,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,KAAA,EAAA,cAAA,EAAA,YAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,cAAc,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,KAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAaT,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBArBtC,SAAS;+BACI,yBAAyB,EAAA,mBAAA,EAGd,KAAK,EAAA,OAAA,EACjB;wBACL,YAAY;wBACZ,iBAAiB;wBACjB;qBACH,EAAA,IAAA,EACK;AACF,wBAAA,0BAA0B,EAAE,MAAM;AAClC,wBAAA,gCAAgC,EAAE,0BAA0B;AAC5D,wBAAA,iCAAiC,EAAE,2BAA2B;AAC9D,wBAAA,iCAAiC,EAAE,2BAA2B;AAC9D,wBAAA,mCAAmC,EAAE,YAAY;AACjD,wBAAA,WAAW,EAAE,cAAc;AAC3B,wBAAA,iBAAiB,EAAE,8BAA8B;AACjD,wBAAA,iBAAiB,EAAE;AACtB,qBAAA,EAAA,QAAA,EAAA,w3HAAA,EAAA;AA6D6B,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,iBAAiB,oFAEpB,cAAc,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEvF7C;AACO,MAAMA,6BAA2B,GAAa;AACjD,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC;AACtD,IAAA,KAAK,EAAE;CACV;AAeK,MAAO,uBAA2B,SAAQ,iBAAoB,CAAA;AAbpE,IAAA,WAAA,GAAA;;QAeqB,IAAA,CAAA,SAAS,GAAG,SAAS,CAAC,0BAA0B;sFAAC;AAElE;;;;;;AAMG;QACM,IAAA,CAAA,UAAU,GAAG,KAAK,CAAa,MAAM;uFAAC;;;QAItC,IAAA,CAAA,SAAS,GAAG,KAAK,CAAU,KAAK,iFAAI,KAAK,EAAE,UAAU,EAAA,CAAG;QACxD,IAAA,CAAA,QAAQ,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EAC5B,MAAM,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE;AAC9B,YAAA,WAAW,EAAE,CAAC,IAAI,CAAC,GACrB;AAEF;;;;;;;AAOG;QACM,IAAA,CAAA,UAAU,GAAG,KAAK,CAAa,QAAQ;uFAAC;;QAGxC,IAAA,CAAA,WAAW,GAAG,KAAK,CAAgB,SAAS,mFAAI,KAAK,EAAE,OAAO,EAAA,CAAG;QACzD,IAAA,CAAA,MAAM,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,CAAA,EAClC,MAAM,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE;AAChC,YAAA,WAAW,EAAE,CAAC,IAAI,CAAC,GACrB;AACO,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AAC3B,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;YACzB,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,YAAA,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAChC,YAAA,OAAO,KAAK;QAChB,CAAC;kFAAC;;QAGO,IAAA,CAAA,YAAY,GAAG,KAAK,CAAmC,SAAS,oFAAI,KAAK,EAAE,QAAQ,EAAA,CAAG;QAC9E,IAAA,CAAA,OAAO,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,8BAAA,EAAA,CAAA,EACnC,MAAM,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE;AACjC,YAAA,WAAW,EAAE,CAAC,IAAI,CAAC,GACrB;AACO,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE;YAC3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,gBAAA,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAG;oBACpB,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;AACvC,oBAAA,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACxB,oBAAA,QAAQ,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,gBAAA,CAAC,CAAC;AACF,gBAAA,OAAO,CAAC,GAAG,MAAM,CAAC;YACtB;iBAAO;AACH,gBAAA,OAAO,EAAE;YACb;QACJ,CAAC;mFAAC;AAEF;;;;AAIG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK,CAA+B,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA;;AAE7D,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,SAAS,EAAE,IAAI,IAAI,IAAI,CAAC,YAAY,CAChC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CACzC,GACH;AACO,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;YAC/B,IAAI,OAAO,EAAE;AACT,gBAAA,OAAO,OAAO;YAClB;AAEA,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AAEpC,YAAA,IAAI,UAAU,KAAK,QAAQ,EAAE;AACzB,gBAAA,OAAO,IAAI,CAAC,KAAK,EAAE;YACvB;iBAAO,IACH,UAAU,KAAK,OAAO;gBACtB,UAAU,KAAK,WAAW,EAC5B;gBACE,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC7B;AAAO,iBAAA,IAAI,UAAU,KAAK,SAAS,EAAE;gBACjC,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC7B;iBAAO;gBACH;YACJ;QACJ,CAAC;oFAAC;;AAGO,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK;sGAAiB;;QAGvC,IAAA,CAAA,GAAG,GAAG,KAAK,CAA+B,SAAS,2EACxD,SAAS,EAAE,KAAK,IAAG;gBACf,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACnC,YAAA,CAAC,GACH;;QAGO,IAAA,CAAA,GAAG,GAAG,KAAK,CAA+B,SAAS,2EACxD,SAAS,EAAE,KAAK,IAAG;gBACf,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACnC,YAAA,CAAC,GACH;AAEF;;;;AAIG;QACM,IAAA,CAAA,YAAY,GAAG,MAAM,EAAK;AAEnC;;;;AAIG;QACM,IAAA,CAAA,aAAa,GAAG,MAAM,EAAK;QAE3B,IAAA,CAAA,QAAQ,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EAC5B,MAAM,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE;AAC1B,YAAA,WAAW,EAAE,CAAC,IAAI,CAAC,GACrB;QAEO,IAAA,CAAA,SAAS,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,CAAA,EAC7B,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE;YAC3B,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAA,CAC3B;QAEO,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;QAElC,IAAA,CAAA,UAAU,GAAG,MAAM,CAAa,QAAQ,CAAC,CAAC,UAAU,EAAE;QAEtD,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ;2FAAC;AAE/D,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,OAC9B,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO;AAC7B,YAAA,IAAI,CAAC,UAAU,EAAE,KAAK,WAAW;AACjC,YAAA,IAAI,CAAC,UAAU,EAAE,KAAK,SAAS,CAClC;0FAAC;AAmEL,IAAA;IA9DG,QAAQ,GAAA;AACJ,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,IAAI,SAAS;AACT,YAAA,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;IAClC;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,KAAK,GAAG,KAAK,IAAI,SAAS;AAC1B,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,YAAA,IAAI,SAAS;AACT,gBAAA,SAAS,CAAC,YAAY,GAAG,KAAK;QACtC;aAAO;AACH,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,YAAA,IAAI,SAAS;AACT,gBAAA,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,GAClC,SAAS,CAAC,mBAAmB,EAAE,CAClC;QACT;IACJ;AAEA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACpB,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;IAC3B;AAEA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACrB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;IAC5B;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IACjC;AAEA,IAAA,MAAM,CAAC,IAAa,EAAA;AAChB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACjB;QACJ;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/B;aAAO;AACH,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACzB;AACA,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,cAAc,IAAI;IAC3B;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,cAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;IAC1C;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,eAAkB,EAAA;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;IAC5C;8GAzNS,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,SAAA,EARrB,CAACA,6BAA2B,CAAC,qEAUD,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BrE,iCACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDkBQ,0BAA0B,EAAA,QAAA,EAAA,yBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAMrB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAbnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,uBAGX,KAAK,EAAA,SAAA,EACf,CAACA,6BAA2B,CAAC,EAAA,OAAA,EAC/B;wBACL;qBACH,EAAA,IAAA,EACK;AACF,wBAAA,uBAAuB,EAAE;AAC5B,qBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA;2FAIsC,0BAA0B,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,GAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,GAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEpBrE;AACO,MAAM,2BAA2B,GAAa;AACjD,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,sBAAsB,CAAC;AACrD,IAAA,KAAK,EAAE;CACV;AAED;AACO,MAAM,uBAAuB,GAAa;AAC7C,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,sBAAsB,CAAC;AACrD,IAAA,KAAK,EAAE;CACV;MA2BY,sBAAsB,CAAA;AAqL/B,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,MAAM;IACtB;AAwLA,IAAA,WAAA,GAAA;AA9WiB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAA+B,UAAU,CAAC;AACzD,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAqB,eAAe,CAAC;AAC7D,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAkB,qBAAqB,CAAC;AAEjF;;AAEG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAuB,SAAS,gFAAI,KAAK,EAAE,aAAa,EAAA,CAAG;AAEpF;;AAEG;AACM,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK;sGAAiB;;;QAIvC,IAAA,CAAA,SAAS,GAAG,KAAK,CAAU,KAAK,iFAAI,KAAK,EAAE,UAAU,EAAA,CAAG;QACxD,IAAA,CAAA,QAAQ,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EAC5B,MAAM,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE;AAC9B,YAAA,WAAW,EAAE,CAAC,IAAI,CAAC,GACrB;;QAGO,IAAA,CAAA,GAAG,GAAG,KAAK,CAA+B,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,KAAA,EAAA,8BAAA,EAAA,CAAA,EACxD,SAAS,EAAE,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAA,CAChF;;QAGO,IAAA,CAAA,GAAG,GAAG,KAAK,CAA+B,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,KAAA,EAAA,8BAAA,EAAA,CAAA,EACxD,SAAS,EAAE,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAA,CAChF;AAEF;;;;;;;AAOG;QACM,IAAA,CAAA,UAAU,GAAG,KAAK,CAAa,QAAQ;uFAAC;AAEjD;;AAEG;QACM,IAAA,CAAA,cAAc,GAAG,KAAK,CAAS,GAAG;2FAAC;;QAGnC,IAAA,CAAA,WAAW,GAAG,KAAK,CAAI,SAAS,mFAAI,KAAK,EAAE,OAAO,EAAA,CAAG;QAC7C,IAAA,CAAA,MAAM,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,CAAA,EAClC,MAAM,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE;AAChC,YAAA,WAAW,EAAE,CAAC,IAAI,CAAC,GACrB;AAEe,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC3C,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;YACzB,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC;AAC/C,YAAA,MAAM,cAAc,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC;YACtE,OAAO;gBACH,KAAK;gBACL;aACH;AACL,QAAA,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,8BAAA,EAAA,CAAA,EACG,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GACzG;QAEe,IAAA,CAAA,WAAW,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK;wFAAC;AACpE,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;;QAGrC,IAAA,CAAA,YAAY,GAAG,KAAK,CAAuB,IAAI,KAAK,EAAiB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,cAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,KAAK,EAAE,QAAQ,EAAA,CAAG;QACnF,IAAA,CAAA,OAAO,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,8BAAA,EAAA,CAAA,EACnC,MAAM,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE;AACjC,YAAA,WAAW,EAAE,CAAC,IAAI,CAAC,GACrB;AAEe,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC5C,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE;AAE3B,YAAA,IAAI,cAAuB;YAE3B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,gBAAA,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAG;oBACpB,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;AACvC,oBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAC/B,gBAAA,CAAC,CAAC;AACF,gBAAA,cAAc,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;oBACzB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACvC,qBAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACP,wBAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAC/C;YACL;iBAAO;gBACH,MAAM,GAAG,EAAE;gBACX,cAAc,GAAG,IAAI;YACzB;YAEA,OAAO;gBACH,MAAM;gBACN;aACH;AACL,QAAA,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,8BAAA,EAAA,CAAA,EACG,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAA,CAC3K;QAEe,IAAA,CAAA,YAAY,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM;yFAAC;AACvE,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AAE/B,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AAChD;;AAEG;AACH,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACvB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,gBAAA,OAAO;AACH,sBAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CACzB,KAAK,EACL,IAAI,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE;sBAEjC,SAAS;YACnB;AAAO,iBAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AAC7B,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;gBAC5B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,oBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;AACtB,oBAAA,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;oBAEpB,MAAM,aAAa,GAAG;AAClB,0BAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CACzB,IAAI,EACJ,IAAI,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE;0BAEjC,EAAE;oBACR,MAAM,WAAW,GAAG;AAChB,0BAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CACzB,EAAE,EACF,IAAI,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE;0BAEjC,EAAE;AAER,oBAAA,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,EAAE;AAChC,wBAAA,OAAO,SAAS;oBACpB;yBAAO;AACH,wBAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO,EAAE;AAC/B,4BAAA,QACI,aAAa;gCACb,GAAG;gCACH,IAAI,CAAC,cAAc,EAAE;gCACrB,GAAG;AACH,gCAAA,WAAW;wBAEnB;AAAO,6BAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,WAAW,EAAE;4BAC1C,QACI,aAAa;wBAErB;AAAO,6BAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,SAAS,EAAE;AACxC,4BAAA,QACI,IAAI,CAAC,MAAM,CAAC,aAAa;gCACzB,OAAO;AACP,gCAAA,WAAW;wBAEnB;oBACJ;gBACJ;qBAAO;AACH,oBAAA,OAAO,SAAS;gBACpB;YACJ;AAEA,YAAA,OAAO,SAAS;QACpB,CAAC;+FAAC;AAEF;;AAEG;QACM,IAAA,CAAA,cAAc,GAAG,MAAM,EAAyB;AAEzD;;AAEG;QACM,IAAA,CAAA,aAAa,GAAG,MAAM,EAAyB;QAM/C,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ;2FAAC;AAE/D,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AACnC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;YACpC,QACI,UAAU,KAAK,OAAO;AACtB,gBAAA,UAAU,KAAK,WAAW;gBAC1B,UAAU,KAAK,SAAS;QAEhC,CAAC;0FAAC;;QAGO,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAmC,SAAS;qFAAC;QAItD,IAAA,CAAA,cAAc,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,8BAAA,EAAA,CAAA,EAC1C,MAAM,EAAE,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC,cAAc;AACzF,YAAA,WAAW,EAAE,CAAC,IAAI,CAAC,GACrB;;AAOe,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAc,MAAK;AACzD,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;YAC5C,OAAO,MAAM;AACT,kBAAE;AACF,kBAAE,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE;QACtE,CAAC;2FAAC;;AAGe,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAc,MAAK;AACvD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AAC5C,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;YAC1C,OAAO,CACH,OAAO,KACP;gBACA,IAAI,cAAc,EAAE;AAChB,oBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAClC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAClD;AACD,oBAAA,OAAO,CAAC,GAAG;AACP,wBAAA,CAAC,YAAY;wBACb,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI;AACnD,0BAAE;AACF,0BAAE,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;gBACxD;AAAO,qBAAA,IAAI,aAAa,IAAI,OAAO,CAAC,KAAK,EAAE;oBACvC,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CACtC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACrD;oBACD,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CACpC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACrD;AACD,oBAAA,OAAO,CAAC,GAAG;AACP,wBAAA,CAAC,gBAAgB;AACjB,wBAAA,CAAC,cAAc;wBACf,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,gBAAgB,CAAC,IAAI;AACvD,0BAAE;AACF,0BAAE;AACE,4BAAA,WAAW,EAAE;gCACT,GAAG;AACH,gCAAA,MAAM,EAAE,CAAC,gBAAgB,EAAE,cAAc;AAC5C;yBACJ;gBACT;AACA,gBAAA,OAAO,IAAI;AACf,YAAA,CAAC;QACL,CAAC;yFAAC;;AAGe,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAc,MAAK;AACvD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AAC5C,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;YAC1C,OAAO,CACH,OAAO,KACP;gBACA,IAAI,cAAc,EAAE;AAChB,oBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAClC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAClD;AACD,oBAAA,OAAO,CAAC,GAAG;AACP,wBAAA,CAAC,YAAY;wBACb,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI;AACnD,0BAAE;AACF,0BAAE,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;gBACxD;AAAO,qBAAA,IAAI,aAAa,IAAI,OAAO,CAAC,KAAK,EAAE;oBACvC,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CACtC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACrD;oBACD,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CACpC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACrD;AACD,oBAAA,OAAO,CAAC,GAAG;AACP,wBAAA,CAAC,gBAAgB;AACjB,wBAAA,CAAC,cAAc;wBACf,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI;AACrD,0BAAE;AACF,0BAAE;AACE,4BAAA,WAAW,EAAE;gCACT,GAAG;AACH,gCAAA,MAAM,EAAE,CAAC,gBAAgB,EAAE,cAAc;AAC5C;yBACJ;gBACT;AACA,gBAAA,OAAO,IAAI;AACf,YAAA,CAAC;QACL,CAAC;yFAAC;;AAGe,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAc,MAAK;AAC1D,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;YAC5C,OAAO,CACH,OAAwB,KACC;AACzB,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAClC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAClD;AACD,gBAAA,OAAO,CAAC,cAAc;AAClB,oBAAA,CAAC,YAAY;oBACb,cAAc,CAAC,YAAY;AAC3B,sBAAE;AACF,sBAAE,EAAE,cAAc,EAAE,IAAI,EAAE;AAClC,YAAA,CAAC;QACL,CAAC;4FAAC;AAEF;;;AAGG;AACc,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAc,MAAK;AACzD,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;YAC5C,OAAO,CACH,OAAO,KACP;AACA,gBAAA,IAAI,cAAc,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAClC,oBAAA,OAAO,IAAI;gBACf;gBAEA,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CACtC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACrD;gBACD,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CACpC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACrD;AAED,gBAAA,OAAO,CAAC,gBAAgB;AACpB,oBAAA,CAAC,cAAc;oBACf,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,gBAAgB,EAAE,cAAc,CAAC,IAAI;AAClE,sBAAE;AACF,sBAAE,EAAE,aAAa,EAAE,IAAI,EAAE;AACjC,YAAA,CAAC;QACL,CAAC;2FAAC;;QAGe,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC;YAC3D,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,cAAc;SACtB,CAAC;sFAAC;;QAGM,IAAA,CAAA,WAAW,GAAG,MAAM,EAAwC;;QAG5D,IAAA,CAAA,cAAc,GAAG,MAAM,EAAW;;QAGlC,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAG,CAAC,EAAE,KAAK,SAAS;0FAAC;;QAG/F,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAG,CAAC,GAAG,SAAS;uFAAC;;QAGjG,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAG,CAAC,GAAG,SAAS;uFAAC;AAGtG,QAAA,IAAI,MAAwC;QAC5C,MAAM,CAAC,MAAK;AACR;;AAEG;AACH,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC/B,YAAA,IAAI,OAAO,IAAI,MAAM,KAAK,OAAO,EAAE;gBAC/B,MAAM,GAAG,OAAO;AAChB,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;AACzB,gBAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;YAC9B;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACvC,YAAA,IAAI,KAAK,IAAI,SAAS,EAAE;AACpB,gBAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CACrB,IAAI,CAAC,MAAM,CAAC,aAAa,EACzB,OAAO,EACP,KAAK,CACR;YACL;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,iBAAiB,IAAI;AAC9B,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAC7C,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AAC9C,QAAA,CAAC,CAAC;IACN;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,YAAA,MAAM,KAAK,CACP,uFAAuF,CAC1F;QACL;IACJ;IAEA,kBAAkB,GAAA;AACd,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,qBAAqB,CAAC,SAAS,CAC/D,CAAC,SAAS,KAAI;AACV,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC1B,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;YAC/B;iBAAO;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;YAC9B;AAEA,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AAC/B,YAAA,IAAI,CAAC,cAAc,IAAI;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACrB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AACtB,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACpB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AACtB,aAAA,CAAC;AACN,QAAA,CAAC,CACJ;IACL;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS;IAChC;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,KAAK,GAAG,KAAK,IAAI,SAAS;AAC1B,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QAC1B;aAAO;AACH,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B;IACJ;AAEA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACpB,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;IAC3B;AAEA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACrB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;IAC5B;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IACjC;AAEA,IAAA,QAAQ,CAAC,CAAkB,EAAA;AACvB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,OAAO,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;IAC1C;AAEA,IAAA,yBAAyB,CAAC,EAAc,EAAA;AACpC,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC/B;AAEA;;AAEG;AACH,IAAA,mBAAmB,CAAC,KAAoB,EAAA;AACpC,QAAA,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,EAAE;AAC1D,YAAA,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE;YACvB,KAAK,CAAC,cAAc,EAAE;QAC1B;IACJ;AAEA,IAAA,gBAAgB,CAAC,MAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,cAAc,IAAI;IAC3B;AAEA,IAAA,iBAAiB,CAAC,KAAU,EAAA;AACxB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK;AAChC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ,EAAE;AAChC,YAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;QACvC;AAAO,aAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO,EAAE;AACtC,YAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;QACtC;aAAO;AACH,YAAA,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC;QAC5C;IACJ;AAEA,IAAA,kBAAkB,CAAC,MAAW,EAAA;AAC1B,QAAA,IAAI,CAAC;AACL,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACvB,YAAA,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;QACpB;AAAO,aAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AAC7B,YAAA,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;QACrB;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACrB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AACtB,SAAA,CAAC;IACN;AAEA;;AAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuEG;AAEH;;AAEG;AACK,IAAA,YAAY,CAAC,GAAQ,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,GAAG,CAAC;AAC3C,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG;AAChC,cAAE;cACA,SAAS;IACnB;AAEA;;;;;AAKG;IACK,iCAAiC,CACrC,UAAmB,EACnB,QAAY,EAAA;QAEZ,IAAI,UAAU,EAAE;YACZ,MAAM,CAAC,GAAG,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;AAChD,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAC1C,CAAC,EACD,IAAI,CAAC,eAAe,CAAC,eAAe,CACvC;AACD,YAAA,OAAO,UAAU,GAAG,GAAG,GAAG,UAAU;QACxC;AACA,QAAA,OAAO,SAAS;IACpB;AAEA;;AAEG;AACK,IAAA,uBAAuB,CAAC,UAAkB,EAAA;QAC9C,IAAI,KAAK,GAAuB,UAAU;QAC1C,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,KAAK,OAAO,EAAE;AAC3C,YAAA,KAAK,GAAG,IAAI,CAAC,iCAAiC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QACvE;AAEA,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CACnC,KAAK,EACL,IAAI,CAAC,eAAe,CAAC,UAAU,CAClC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACxE,QAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;;;AAIlC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,MAAM,KAAK,SAAS,EAAE;AACjE,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;;AAE5B,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;AAC5B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACpB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AACtB,aAAA,CAAC;QACN;IACJ;AAEA;;AAEG;AACK,IAAA,4BAA4B,CAAC,UAAmB,EAAA;AACpD,QAAA,MAAM,aAAa,GACf,IAAI,CAAC,UAAU,EAAE,KAAK;AAClB,cAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;cACf,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAE1B,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,KAAK,OAAO,EAAE;YAC3C,UAAU,GAAG,IAAI,CAAC,iCAAiC,CAC/C,UAAU,EACV,aAAa,CAChB;QACL;AAEA,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CACnC,UAAU,EACV,IAAI,CAAC,eAAe,CAAC,UAAU,CAClC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACxE,QAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;;AAGlC,QAAA,IACI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,WAAW;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1C,YAAA,MAAM;AACV,aAAC,IAAI,CAAC,UAAU,EAAE,KAAK,SAAS;AAC5B,gBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1C,MAAM,CAAC,EACb;YACE;QACJ;QAEA,IAAI,CAAC,YAAY,CAAC,GAAG,CACjB,IAAI,CAAC,UAAU,EAAE,KAAK;cAChB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC3B,cAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CACnC;;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACzC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACpB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE;AAC1B,YAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AACtB,SAAA,CAAC;IACN;AAEA;;AAEG;AACK,IAAA,sBAAsB,CAAC,UAAkB,EAAA;QAC7C,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AACzD,QAAA,IAAI,UAAU,GAAuB,SAAS,CAAC,CAAC,CAAC;AACjD,QAAA,IAAI,QAAQ,GAAuB,SAAS,CAAC,CAAC,CAAC;QAE/C,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,KAAK,OAAO,EAAE;AAC3C,YAAA,UAAU,GAAG,IAAI,CAAC,iCAAiC,CAC/C,UAAU,EACV,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CACnB;AACD,YAAA,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAC7C,QAAQ,EACR,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CACnB;QACL;AAEA,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CACjC,UAAU,EACV,IAAI,CAAC,eAAe,CAAC,UAAU,CAClC;AACD,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAC/B,QAAQ,EACR,IAAI,CAAC,eAAe,CAAC,UAAU,CAClC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC;AAChE,aAAC,CAAC,EAAE,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9C,QAAA,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AAC9B,QAAA,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;;AAG1B,QAAA,IACI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACzC,YAAA,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACvC,aAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,EAChB;YACE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;;YAEjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACzC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACpB,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE;AAC1B,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AACtB,aAAA,CAAC;QACN;IACJ;AAEA;;AAEG;IACK,WAAW,CAAC,KAAS,EAAE,MAAU,EAAA;AACrC,QAAA,IAAI,KAAK,IAAI,MAAM,EAAE;AACjB,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;QAC5D;QAEA,OAAO,KAAK,IAAI,MAAM;IAC1B;8GAtvBS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,0BAAA,EAAA,OAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,EAAA,SAAA,EAhBpB;YACP,2BAA2B;YAC3B;AACH,SAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAaQ,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAnBlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,SAAS,EAAE;wBACP,2BAA2B;wBAC3B;AACH,qBAAA;AACD,oBAAA,IAAI,EAAE;AACF,wBAAA,sBAAsB,EAAE,MAAM;AAC9B,wBAAA,kBAAkB,EAAE,iBAAiB;AACrC,wBAAA,YAAY,EAAE,cAAc;AAC5B,wBAAA,YAAY,EAAE,cAAc;AAC5B,wBAAA,YAAY,EAAE,YAAY;AAC1B,wBAAA,WAAW,EAAE,6BAA6B;AAC1C,wBAAA,QAAQ,EAAE,0BAA0B;AACpC,wBAAA,SAAS,EAAE,2BAA2B;AACtC,wBAAA,UAAU,EAAE;AACf;AACJ,iBAAA;;;MCnCY,wBAAwB,CAAA;AAPrC,IAAA,WAAA,GAAA;QAQa,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAuB,SAAS,gFAAI,KAAK,EAAE,oBAAoB,EAAA,CAAG;;QAGlF,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,KAAK;yFAAC;;QAG3B,IAAA,CAAA,SAAS,GAAG,KAAK,CAAU,SAAS,iFAAI,KAAK,EAAE,UAAU,EAAA,CAAG;AAC5D,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE;qFAAC;AASxF,IAAA;AAPG,IAAA,iBAAiB,CAAC,KAAmB,EAAA;AACjC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAChC,IAAI,QAAQ,EAAE;AACV,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,KAAK,GAAG,SAAS,CAAC;YACtD,KAAK,CAAC,eAAe,EAAE;QAC3B;IACJ;8GAhBS,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,2BAAA,EAAA,EAAA,UAAA,EAAA,EAAA,+BAAA,EAAA,YAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,IAAI,EAAE;AACF,wBAAA,iCAAiC,EAAE,YAAY;AAC/C,wBAAA,SAAS,EAAE;AACd;AACJ,iBAAA;;;ACND;AACA,IAAI,QAAQ,GAAG,CAAC;MAiBH,YAAY,CAAA;AAgGrB,IAAA,WAAA,GAAA;AA1FA;;AAEG;QACH,IAAA,CAAA,SAAS,GAAG,IAAI;;QAGhB,IAAA,CAAA,WAAW,GAAI,IAAI;;QAWnB,IAAA,CAAA,YAAY,GAAI,KAAK;AAOrB;;AAEG;QACH,IAAA,CAAA,IAAI,GAA8B,QAAQ;AAE1C;;AAEG;QACH,IAAA,CAAA,SAAS,GAAuB,EAAE;AAOlC;;AAEG;QACH,IAAA,CAAA,aAAa,GAAuB,EAAE;AAEtC;;AAEG;QACH,IAAA,CAAA,iBAAiB,GAAa,IAAI;;QAGlC,IAAA,CAAA,KAAK,GAAY,EAAE;;QAGnB,IAAA,CAAA,MAAM,GAAY,EAAE;AAEpB;;;AAGG;QACH,IAAA,CAAA,QAAQ,GAAqB,QAAQ;AAQrC;;;AAGG;QACH,IAAA,CAAA,QAAQ,GAAqB,MAAM;AAWnC;;;AAGG;AACH,QAAA,IAAA,CAAA,cAAc,GAAoB,IAAI,kBAAkB,EAAE;AAKtD,QAAA,IAAI,CAAC,EAAE,GAAG,cAAc,QAAQ,EAAE,EAAE;IACxC;AACH;;MChHY,SAAS,CAAA;AAuBlB,IAAA,WAAA,CACqB,UAAsB,EACtB,SAAmC,EAC3C,EAAW,EACpB,QAAmB,EAAA;QAHF,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,SAAS,GAAT,SAAS;QACjB,IAAA,CAAA,EAAE,GAAF,EAAE;AAxBN,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW;AAIhC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ;AAEnC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAQ;AAEjC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ;;QAWpD,IAAA,CAAA,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,YAAY;AAQlD,QAAA,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB;aAClD,IAAI,CACD,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,EAC1E,IAAI,CAAC,CAAC,CAAC;aAEV,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;AAChC,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;AAC/B,QAAA,CAAC,CAAC;AAEN,QAAA,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB;aAClD,IAAI,CACD,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,EACzE,IAAI,CAAC,CAAC,CAAC;aAEV,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACzB,YAAA,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE;AACnC,YAAA,IAAI,CAAC,eAAe,GAAG,SAAS;YAChC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACpC,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;AACtC,QAAA,CAAC,CAAC;AAEN,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa;aACxB,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;aACjF,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAElC,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAK;gBAC3C,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,iBAAiB,EAAE;oBAC5C,IAAI,CAAC,KAAK,EAAE;gBAChB;AACJ,YAAA,CAAC,CAAC;QACN;IACJ;AAEA,IAAA,KAAK,CAAC,YAAkB,EAAA;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,YAAY;QAE1B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE;AACtC,YAAA,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB;AAClD,iBAAA,IAAI,CACD,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,KAAK,OAAO,CAAC,EAC9C,IAAI,CAAC,CAAC,CAAC;iBAEV,SAAS,CAAC,MAAK;AACZ,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;AACrC,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC7B,gBAAA,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;AACpC,YAAA,CAAC,CAAC;AAEN,YAAA,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE;QACvC;aAAO;AACH,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;AACrC,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;QACpC;IACJ;AAEA;;AAEG;IACH,aAAa,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;IAC1C;AAEA;;AAEG;IACH,aAAa,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;IAC1C;AAEA;;;;AAIG;AACH,IAAA,cAAc,CAAC,QAAyB,EAAA;AACpC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAE3C,QAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;YAC/C,IAAI,QAAQ,CAAC,IAAI;AACb,gBAAA,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;;AAE5B,gBAAA,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtC;aAAO;YACH,QAAQ,CAAC,kBAAkB,EAAE;QACjC;AAEA,QAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC/C,IAAI,QAAQ,CAAC,GAAG;AACZ,gBAAA,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;;AAE1B,gBAAA,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACxC;aAAO;YACH,QAAQ,CAAC,gBAAgB,EAAE;QAC/B;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;AAEhC,QAAA,OAAO,IAAI;IACf;AAEA;;;;;AAKG;AACH,IAAA,UAAU,CAAC,KAAA,GAAgB,MAAM,EAAE,SAAiB,MAAM,EAAA;QACtD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC7C,QAAA,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;AAChC,QAAA,OAAO,IAAI;IACf;IAEA,SAAS,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;IAC1C;IAEA,WAAW,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;IAC5C;IAEA,WAAW,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;IAC5C;;IAGQ,mBAAmB,GAAA;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,gBAA0C;IACjF;AACH;;AC1KD;;;;;;;AAOG;SACa,YAAY,CAAC,IAAS,EAAE,GAAG,OAAc,EAAA;IACrD,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,SAAS,EAAE;AACnC,QAAA,MAAM,SAAS,CAAC,4CAA4C,CAAC;IACjE;AAEA,IAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC1B,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,SAAS,EAAE;AACvC,YAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;AACtB,gBAAA,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;gBAC3B;YACJ;QACJ;IACJ;AAEA,IAAA,OAAO,IAAI;AACf;;ACnBA;AAgBM,MAAO,wBAAyB,SAAQ,gBAAgB,CAAA;aAEnD,IAAA,CAAA,OAAO,GAAG,IAAH,CAAO;AAuCrB,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAtCM,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC;AACxD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,4BAA4B,CAAC;QACvD,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAW,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACjE,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAE/B,IAAA,CAAA,YAAY,GAAG,SAAS,CAAC,eAAe;yFAAC;;QAGjC,IAAA,CAAA,SAAS,GAAG,MAAM,CAAoC,SAAS;sFAAC;;QAGxE,IAAA,CAAA,cAAc,GAAG,MAAM,CAAqB,SAAS;2FAAC;;QAGtD,IAAA,CAAA,qBAAqB,GAAG,MAAM,EAGnC;QAEK,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,KAAK;wFAAC;QAEnB,IAAA,CAAA,OAAO,GAAG,MAAM,CAA2B,SAAS;oFAAC;AAC7D,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;;AAGnC,QAAA,IAAA,CAAA,MAAM,GAAG;AACb,YAAA,CAAC,EAAE,KAAK;AACR,YAAA,CAAC,EAAE,KAAK;AACR,YAAA,EAAE,EAAE,KAAK;AACT,YAAA,EAAE,EAAE,KAAK;AACT,YAAA,KAAK,EAAE;SACV;QAQG,eAAe,CAAC,MAAK;AACjB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;AAC1B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;AAC5C,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AAC5B,gBAAA,SAAS,EAAE,OAAO;AAClB,gBAAA,OAAO,EAAE;AACZ,aAAA,CAAC;AACF,YAAA,IAAI,MAAM,IAAI,wBAAwB,CAAC,OAAO,EAAE;gBAC5C,MAAM,CAAC,OAAO,CAAC;AACX,oBAAA;AACI,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,SAAS,EAAE,CAAA,WAAA,EAAc,MAAM,CAAC,CAAC,CAAA,aAAA,EAAgB,MAAM,CAAC,CAAC,CAAA,QAAA,EAAW,MAAM,CAAC,KAAK,CAAA,CAAA,CAAG;wBACnF,eAAe,EAAE,GAAG,MAAM,CAAC,EAAE,CAAA,CAAA,EAAI,MAAM,CAAC,EAAE,CAAA;AAC7C,qBAAA;AACD,oBAAA;AACI,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,SAAS,EAAE,0CAA0C;AACrD,wBAAA,eAAe,EAAE;AACpB;iBACJ,EAAE;AACC,oBAAA,QAAQ,EAAE,GAAG;AACb,oBAAA,MAAM,EAAE;AACX,iBAAA,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAK;oBAC/B,MAAM,CAAC,OAAO,CAAC;AACX,wBAAA,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE;AACpC,wBAAA,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE;AACzC,wBAAA,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE;AACxC,wBAAA,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG;qBACvC,EAAE;AACC,wBAAA,QAAQ,EAAE;AACb,qBAAA,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAK;wBAC/B,IAAI,CAAC,iBAAiB,EAAE;AAC5B,oBAAA,CAAC,CAAC;AACN,gBAAA,CAAC,CAAC;YACN;iBAAO;gBACH,IAAI,CAAC,iBAAiB,EAAE;YAC5B;AACJ,QAAA,CAAC,CAAC;IACN;AAEA;;AAEG;AACH,IAAA,qBAAqB,CACjB,MAA0B,EAAA;AAE1B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,QAAA,IAAI,YAAY,EAAE,WAAW,EAAE,EAAE;AAC7B,YAAA,MAAM,KAAK,CACP,uEAAuE,CAC1E;QACL;QAEA,IAAI,CAAC,4BAA4B,EAAE;AACnC,QAAA,OAAO,YAAa,CAAC,qBAAqB,CAAC,MAAM,CAAC;IACtD;AAEA,IAAA,oBAAoB,CAChB,OAA0B,EAAA;AAE1B,QAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;IAC9C;AAEA,IAAA,SAAS,CAAC,MAAoB,EAAA;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;AAExB,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC;QAC1C;IACJ;IAEA,kBAAkB,GAAA;AACd,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;AAC1B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;AAC5C,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AAC5B,YAAA,SAAS,EAAE,OAAO;AAClB,YAAA,OAAO,EAAE;AACZ,SAAA,CAAC;AACF,QAAA,IAAI,MAAM,IAAI,wBAAwB,CAAC,OAAO,EAAE;YAC5C,MAAM,CAAC,OAAO,CAAC;AACX,gBAAA;AACI,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,SAAS,EAAE;AACd,iBAAA;AACD,gBAAA;AACI,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,SAAS,EAAE,CAAA,WAAA,EAAc,MAAM,CAAC,CAAC,CAAA,aAAA,EAAgB,MAAM,CAAC,CAAC,CAAA,QAAA,EAAW,MAAM,CAAC,KAAK,CAAA,CAAA;AACnF;aACJ,EAAE;AACC,gBAAA,QAAQ,EAAE;AACb,aAAA,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAK;gBAC/B,IAAI,CAAC,gBAAgB,EAAE;AAC3B,YAAA,CAAC,CAAC;QACN;aAAO;YACH,IAAI,CAAC,gBAAgB,EAAE;QAC3B;IACJ;IAEQ,iBAAiB,GAAA;QACrB,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS;AAC1B,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AAC5B,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,OAAO,EAAE;AACZ,aAAA,CAAC;AACN,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;IAC/B;IAEQ,gBAAgB,GAAA;QACpB,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS;AAC1B,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AAC5B,gBAAA,SAAS,EAAE,MAAM;AACjB,gBAAA,OAAO,EAAE;AACZ,aAAA,CAAC;AACN,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;IAC/B;AAEA;;;AAGG;AACK,IAAA,mBAAmB,CAAC,KAAiB,EAAA;AACzC,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;AAC7B,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;AAE7B,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC;AAChC,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC;AACjC,QAAA,MAAM,CAAC,GAAG,OAAO,GAAG,EAAE;AACtB,QAAA,MAAM,CAAC,GAAG,OAAO,GAAG,EAAE;AACtB,QAAA,MAAM,EAAE,GAAG,OAAO,GAAG,MAAM,CAAC,UAAU;AACtC,QAAA,MAAM,EAAE,GAAG,OAAO,GAAG,MAAM,CAAC,WAAW;QAEvC,IAAI,CAAC,MAAM,GAAG;YACV,CAAC,EAAE,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI;YACX,CAAC,EAAE,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI;AACX,YAAA,EAAE,EAAE,CAAA,EAAG,EAAE,GAAG,GAAG,CAAA,CAAA,CAAG;AAClB,YAAA,EAAE,EAAE,CAAA,EAAG,EAAE,GAAG,GAAG,CAAA,CAAA,CAAG;AAClB,YAAA,KAAK,EAAE;SACV;IACL;AAEA;;AAEG;IACK,4BAA4B,GAAA;AAChC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,mCAAmC,GAAG,IAAI,CAAC;AAC3C,iBAAA,aAA4B;YAEjC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAK,EAAG,CAAC,CAAC;QACxF;IACJ;IAEQ,SAAS,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAC3C,IAAI,CAAC,UAAU,CAAC,aAAa,CAChC,CAAC;QACN;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE;AAC3B,YAAA,IAAI,CAAC,SAAS,EAAE,EAAE,4BAA4B,EAAE,CAAC,KAAK,CAAC,MAAK,EAAG,CAAC,CAAC;QACrE;IACJ;IAEQ,YAAY,GAAA;AAChB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,mCAAmC;QAExD,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE;YAChD,OAAO,CAAC,KAAK,EAAE;QACnB;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,EAAG,CAAC,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;QACjC;IACJ;8GA9NS,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,eAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,cAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EASC,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9BrD,qCACA,4CDSQ,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAWV,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAfpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,OAAA,EAEvB;wBACL;qBACH,EAAA,IAAA,EACK;AACF,wBAAA,8BAA8B,EAAE,MAAM;AACtC,wBAAA,iBAAiB,EAAE,IAAI;AACvB,wBAAA,wBAAwB,EAAE,kBAAkB;AAC5C,wBAAA,WAAW,EAAE,cAAc;AAC3B,wBAAA,aAAa,EAAE,gBAAgB;AAC/B,wBAAA,yBAAyB,EAAE;AAC9B,qBAAA,EAAA,QAAA,EAAA,qCAAA,EAAA;wHAWiC,eAAe,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEnBrD;AACO,MAAM,eAAe,GAAG,IAAI,cAAc,CAAM,iBAAiB,CAAC;AAEzE;;;;AAIG;AACI,MAAM,0BAA0B,GAAG,IAAI,cAAc,CAE1D,4BAA4B,CAAC;AAE/B;;;;AAIG;AACI,MAAM,0BAA0B,GAAG,IAAI,cAAc,CACxD,4BAA4B,CAC/B;AAED;MAIa,aAAa,CAAA;;AAetB,IAAA,IAAI,WAAW,GAAA;QACX,OAAO,IAAI,CAAC;AACR,cAAE,IAAI,CAAC,YAAY,CAAC;AACpB,cAAE,IAAI,CAAC,uBAAuB;IACtC;;AAGA,IAAA,IAAI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC;AACR,cAAE,IAAI,CAAC,YAAY,CAAC;AACpB,cAAE,IAAI,CAAC,qBAAqB;IACpC;AAEA,IAAA,IAAI,eAAe,GAAA;AACf,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY;AAChC,QAAA,OAAO;cACD,MAAM,CAAC;AACT,cAAE,IAAI,CAAC,0BAA0B;IACzC;AAgBA,IAAA,WAAA,GAAA;AAhDiB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAW,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,SAAS;AACtE,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAe,0BAA0B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,SAAS;AAClG,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAgB,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACvF,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE3C,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,GAAG,EAA0B;QAEtD,IAAA,CAAA,uBAAuB,GAA0B,EAAE;AACnD,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,OAAO,EAAkB;AACrD,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,OAAO,EAAQ;AAuBjE;;;AAGG;QAEM,IAAA,CAAA,cAAc,GAAG,KAAK,CAC3B,MACI,IAAI,CAAC,uBAAuB,CAAC;cACvB,IAAI,CAAC;AACP,cAAE,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CACpE;QAEgB,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,0BAA0B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAGrI,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC9B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY;AAEtC,QAAA,IAAI,CAAC,YAAY,IAAI,QAAQ,EAAE;YAC3B,QAAQ,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7C;IACJ;IAEA,IAAI,CACA,sBAAyD,EACzD,MAAqB,EAAA;QAErB,MAAM,GAAG,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC;AAEzD,QAAA,IAAI,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;YAC5C,MAAM,KAAK,CAAC,CAAA,gBAAA,EAAmB,MAAM,CAAC,EAAE,CAAA,+CAAA,CAAiD,CAAC;QAC9F;QAEA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAC7C,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,CAAC;AACtE,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CACtC,sBAAsB,EACtB,eAAe,EACf,UAAU,EACV,MAAM,CACT;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YAC1B,IAAI,CAAC,2CAA2C,EAAE;QACtD;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;QAChC;AACK,aAAA,WAAW;aACX,SAAS,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9B,QAAA,OAAO,SAAS;IACpB;AAEA;;AAEG;IACH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM;QAE/B,OAAO,CAAC,EAAE,EAAE;YACR,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;QAC/B;IACJ;AAEA;;;;AAIG;AACH,IAAA,aAAa,CAAC,EAAU,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IAC5D;AAEQ,IAAA,mBAAmB,CACvB,sBAAyD,EACzD,eAAyC,EACzC,UAAsB,EACtB,MAAoB,EAAA;AAEpB,QAAA,MAAM,SAAS,GAAG,IAAI,SAAS,CAC3B,UAAU,EACV,eAAe,EACf,MAAM,CAAC,EAAE,EACT,IAAI,CAAC,QAAQ,CAChB;AAED,QAAA,IAAI,MAAM,CAAC,WAAW,EAAE;AACpB,YAAA,UAAU,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,MAAK;AACtC,gBAAA,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;oBACzB,SAAS,CAAC,KAAK,EAAE;gBACrB;AACJ,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,IAAI,EAAE,sBAAsB,YAAY,WAAW,CAAC,EAAE;AAClD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAChC,MAAM,EACN,SAAS,EACT,eAAe,CAClB;AACD,YAAA,MAAM,UAAU,GAAG,eAAe,CAAC,qBAAqB,CACpD,IAAI,eAAe,CAAC,sBAAsB,EAAE,SAAS,EAAE,QAAQ,CAAC,CACnE;AACD,YAAA,SAAS,CAAC,iBAAiB,GAAG,UAAU,CAAC,QAAQ;QACrD;QAEA;aACK,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM;AACtC,aAAA,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC;AAEpC,QAAA,OAAO,SAAS;IACpB;AAEQ,IAAA,cAAc,CAClB,MAAoB,EACpB,SAAuB,EACvB,eAAyC,EAAA;QAEzC,MAAM,YAAY,GACd,MAAM;AACN,YAAA,MAAM,CAAC,gBAAgB;AACvB,YAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ;QAEpC,OAAO,QAAQ,CAAC,MAAM,CAAC;AACnB,YAAA,SAAS,EAAE;AACP,gBAAA,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE;AAC3C,gBAAA,EAAE,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE,eAAe,EAAE;gBAChE,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI;AACpD,aAAA;AACD,YAAA,MAAM,EAAE,YAAY,IAAI,IAAI,CAAC;AAChC,SAAA,CAAC;IACN;AAEQ,IAAA,aAAa,CAAC,MAAoB,EAAA;QACtC,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QACnD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;IAC7C;IAEQ,qBAAqB,CACzB,UAAsB,EACtB,MAAoB,EAAA;QAEpB,MAAM,eAAe,GAAG,IAAI,eAAe,CACvC,wBAAwB,EACxB,MAAM,CAAC,gBAAgB,CAC1B;QACD,MAAM,YAAY,GAEd,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC;AACtC,QAAA,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC;QAEvC,OAAO,YAAY,CAAC,QAAQ;IAChC;AAEQ,IAAA,gBAAgB,CAAC,YAA0B,EAAA;AAC/C,QAAA,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC;YAC5B,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE;YAClD,cAAc,EAAE,YAAY,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,EAAE;YACpE,UAAU,EAAE,YAAY,CAAC,SAAS;YAClC,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,QAAQ,EAAE,YAAY,CAAC,QAAQ;YAC/B,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,QAAQ,EAAE,YAAY,CAAC,QAAQ;YAC/B,SAAS,EAAE,YAAY,CAAC;AAC3B,SAAA,CAAC;AAEF,QAAA,IAAI,YAAY,CAAC,aAAa,EAAE;AAC5B,YAAA,KAAK,CAAC,aAAa,GAAG,YAAY,CAAC,aAAa;QACpD;AAEA,QAAA,OAAO,KAAK;IAChB;AAEQ,IAAA,gBAAgB,CAAC,SAAyB,EAAA;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,SAAS,CAAC;AAE7D,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YACZ,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;;;AAGjC,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;gBAC1B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,OAAO,KAAI;oBACvD,IAAI,aAAa,EAAE;AACf,wBAAA,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,aAAa,CAAC;oBACtD;yBAAO;AACH,wBAAA,OAAO,CAAC,eAAe,CAAC,aAAa,CAAC;oBAC1C;AACJ,gBAAA,CAAC,CAAC;AAEF,gBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE;AAC/B,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;YAC/B;QACJ;IACJ;AAEA;;AAEG;IACK,2CAA2C,GAAA;QAC/C,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE;;AAGpE,QAAA,IAAI,gBAAgB,CAAC,aAAa,EAAE;AAChC,YAAA,MAAM,QAAQ,GAAG,gBAAgB,CAAC,aAAa,CAAC,QAAQ;AAExD,YAAA,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC;gBAE3B,IACI,OAAO,KAAK,gBAAgB;oBAC5B,OAAO,CAAC,QAAQ,KAAK,QAAQ;oBAC7B,OAAO,CAAC,QAAQ,KAAK,OAAO;AAC5B,oBAAA,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,EACpC;AACE,oBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CACvB,OAAO,EACP,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CACtC;AACD,oBAAA,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;gBAC/C;YACJ;QACJ;IACJ;8GAlQS,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFV,MAAM,EAAA,CAAA,CAAA;;2FAET,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;AAsQD;;;;;;;AAOG;AACH,SAAS,mBAAmB,CACxB,MAAqB,EACrB,cAA6B,EAAA;IAE7B,OAAO,YAAY,CAAC,IAAI,YAAY,EAAE,EAAE,MAAM,EAAE,cAAc,CAAC;AACnE;;AC1SA;;;;AAIG;AACI,MAAM,4BAA4B,GAAG,IAAI,cAAc,CAE5D,8BAA8B,CAAC;AAQ3B,MAAO,iBAAqB,SAAQ,iBAAoB,CAAA;AA2K1D,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AA3KM,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,4BAA4B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QACjI,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAW,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAGjE,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK;qGAAqB;;AAG1C,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK;kGAAqB;AAEhD;;;;AAIG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK,CAA+B,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA;;AAE7D,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,SAAS,EAAE,IAAI,IAAI,IAAI,CAAC,YAAY,CAChC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CACzC,GACH;AACO,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;;;AAG7B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;YAC/B,IAAI,OAAO,EAAE;AACT,gBAAA,OAAO,OAAO;YAClB;AAEA,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;YAC9B,IAAI,OAAO,EAAE;AACT,gBAAA,IAAI,OAAO,CAAC,UAAU,EAAE,KAAK,QAAQ,EAAE;AACnC,oBAAA,OAAO,OAAO,CAAC,KAAK,EAAE;gBAC1B;AAAO,qBAAA,IACH,OAAO,CAAC,UAAU,EAAE,KAAK,OAAO;AAChC,oBAAA,OAAO,CAAC,UAAU,EAAE,KAAK,WAAW,EACtC;AACE,oBAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC9B;AAAO,qBAAA,IAAI,OAAO,CAAC,UAAU,EAAE,KAAK,SAAS,EAAE;AAC3C,oBAAA,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC9B;YACJ;YACA;QACJ,CAAC;oFAAC;AAEF;;;;;;AAMG;QACM,IAAA,CAAA,UAAU,GAAG,KAAK,CAAa,MAAM;uFAAC;AAE/C;;;;;AAKG;QACM,IAAA,CAAA,UAAU,GAAG,KAAK,CAAyB,OAAO,kFACvD,SAAS,EAAE,IAAI,IAAG;AACd,gBAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AAClB,oBAAA,OAAO,IAAI;gBACf;qBAAO;AACH,oBAAA,OAAO,QAAQ;gBACnB;AACJ,YAAA,CAAC,GACH;;;QAIO,IAAA,CAAA,SAAS,GAAG,KAAK,CAAsB,SAAS,iFAAI,KAAK,EAAE,UAAU,EAAA,CAAG;QACxE,IAAA,CAAA,QAAQ,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EAC5B,MAAM,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE;AAC9B,YAAA,WAAW,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,GAC7D;;;QAIO,IAAA,CAAA,OAAO,GAAG,KAAK,CAAU,KAAK,+EAAI,KAAK,EAAE,QAAQ,EAAA,CAAG;QACpD,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,KAAK;mFAAC;AAE/B;;AAEG;AACM,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK;sGAAkB;AAEjD;;AAEG;;QAEM,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAE5D;;AAEG;;QAEM,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAE7D;;;;AAIG;QACM,IAAA,CAAA,YAAY,GAAG,MAAM,EAAK;AAEnC;;;;AAIG;QACM,IAAA,CAAA,aAAa,GAAG,MAAM,EAAK;AAEpC;;AAEG;QACM,IAAA,CAAA,YAAY,GAAG,MAAM,EAAW;AAEzC;;AAEG;QACM,IAAA,CAAA,qBAAqB,GAAG,MAAM,EAA4B;AAEnE;;AAEG;QACM,IAAA,CAAA,cAAc,GAAG,MAAM,EAAW;QAe1B,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAwC,SAAS;qFAAC;AAC3E,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;QAE5B,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,WAAW;wFAAC;QAElE,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAgB,SAAS;qFAAC;AAE3C,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,IAAI,KAAK,EAAiB;sFAAC;;AAG9C,QAAA,IAAA,CAAA,GAAG,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE;gFAAC;;AAG3C,QAAA,IAAA,CAAA,GAAG,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE;gFAAC;AAE3C,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE;2FAAC;AAEjE,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE;uFAAC;AAEzD,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE;2FAAC;AAEnE,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE;0FAAC;AAItE,QAAA,MAAM,CAAC,CAAC,eAAe,KAAI;AACvB,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;YAC7B,IAAI,EAAE,EAAE;gBACJ,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC/B,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtB,wBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;oBAC7B;yBAAO;AACH,wBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;oBAC5B;AACJ,gBAAA,CAAC,CAAC;gBACF,eAAe,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;YAC5C;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,QAA6B;QACjC,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAI,QAAQ,IAAI,SAAS,EAAE;AACvB,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;YACnC;YACA,QAAQ,GAAG,KAAK;AACpB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,MAA2B;QAC/B,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,YAAA,IAAI,MAAM,KAAK,SAAS,EAAE;gBACtB,MAAM,GAAG,OAAO;AAChB,gBAAA,IAAI,MAAM;oBACN,IAAI,CAAC,IAAI,EAAE;gBACf;YACJ;AACA,YAAA,IAAI,MAAM,IAAI,OAAO,EAAE;AACnB,gBAAA,KAAK,MAAM,GAAG,OAAO,GAAG;oBACpB,IAAI,CAAC,IAAI,EAAE;gBACf;qBAAO;oBACH,IAAI,CAAC,KAAK,EAAE;gBAChB;YACJ;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,KAAK,EAAE;AAEZ,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;QAC3B;AAEA,QAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;AACvC,QAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS;AAEpC,QAAA,IAAI,CAAC,wBAAwB,EAAE,WAAW,EAAE;AAC5C,QAAA,IAAI,CAAC,wBAAwB,GAAG,SAAS;AAEzC,QAAA,IAAI,CAAC,qBAAqB,EAAE,WAAW,EAAE;AACzC,QAAA,IAAI,CAAC,qBAAqB,GAAG,SAAS;IAC1C;AAEA,IAAA,aAAa,CAAC,cAAyC,EAAA;AACnD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACjB,YAAA,MAAM,KAAK,CACP,kEAAkE,CACrE;QACL;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC;IACrC;AAEA,IAAA,IAAI,CAAC,KAAoB,EAAA;QACrB,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YAClC;QACJ;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AAClB,YAAA,MAAM,KAAK,CACP,+DAA+D,CAClE;QACL;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,QAAQ,CAAC,aAA4B;QAC9E;;AAGA,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAG,CAAC,KAAK,EAAE,CAAC;QAC/C;AAAO,aAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AAC7B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAG,CAAC,MAAM,EAAE,CAAC;QACjD;;;AAIA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACxE,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAC7C,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAC7C,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAC9C,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAC7C,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAC9C,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAChD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CACnD,CAAC;QACN;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ;AAC9B,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;YAExB,IAAI,CAAC,WAAW,EAAE;QAEtB,IAAI,IAAI,CAAC,eAAe;YACpB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGzC,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,SAAS,CACvE,MAAK;YACD,IAAI,CAAC,KAAK,EAAE;AAChB,QAAA,CAAC,CACJ;;AAGD,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,eAAe,EAAE,qBAAqB,CAAC,SAAS,CACjF,CAAC,CAAC,KAAI;AACF,YAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AACzB,QAAA,CAAC,CACJ;IACL;AAEA;;AAEG;AACH,IAAA,MAAM,CAAC,IAAa,EAAA;AAChB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACrB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACjC;aAAO;AACH,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAC3B;AAEA;;;;;;;;AAQG;AACH,QAAA,IACI,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ;AAC9B,YAAA,IAAI,CAAC,UAAU,EAAE,KAAK,UAAU;AAChC,aAAC,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC/C,iBAAC,IAAI,CAAC,UAAU,EAAE,KAAK,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1D,iBAAC,IAAI,CAAC,UAAU,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AACxD,iBAAC,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO;AAC1B,oBAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;oBACnB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAC/B;YACE,IAAI,CAAC,aAAa,EAAE;QACxB;IACJ;AAEA;;AAEG;AACH,IAAA,UAAU,CAAC,cAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;IAC1C;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,eAAkB,EAAA;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;IAC5C;AAEA;;AAEG;IACH,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;YAChB;QACJ;QAEA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE;AAC9C,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;QAC1B;QAEA,IACI,IAAI,CAAC,qBAAqB;AAC1B,YAAA,IAAI,CAAC,qBAAqB,CAAC,UAAU,EACvC;AACE,YAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE;QACvC;AAEA,QAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;AACvC,QAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS;AAEpC,QAAA,IAAI,CAAC,wBAAwB,EAAE,WAAW,EAAE;AAC5C,QAAA,IAAI,CAAC,wBAAwB,GAAG,SAAS;AAEzC,QAAA,IAAI,CAAC,qBAAqB,EAAE,WAAW,EAAE;AACzC,QAAA,IAAI,CAAC,qBAAqB,GAAG,SAAS;AAEtC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtB,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAC9B;QAEA,MAAM,aAAa,GAAG,MAAK;AACvB,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACf,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;gBACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AACrC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;AACtC,gBAAA,IAAI,CAAC,wBAAwB,GAAG,SAAS;YAC7C;AACJ,QAAA,CAAC;QAED,IACI,IAAI,CAAC,wBAAwB;YAC7B,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK,KAAK,UAAU,EAC3D;;;;;;AAME,YAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE;YACrC,UAAU,CAAC,aAAa,CAAC;QAC7B;aAAO;AACH,YAAA,aAAa,EAAE;QACnB;IACJ;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,MAAY,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACvB,YAAA,MAAM,QAAQ,GACV,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE;AACnE,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC7C;AAAO,aAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YAC7B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACrD;QAEA,IAAI,CAAC,KAAK,EAAE;QACZ;IACJ;AAEA;;AAEG;AACK,IAAA,YAAY,CAAC,KAAoB,EAAA;AACrC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;AAC1C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CACpC,0BAA0B,EAC1B;YACI,KAAK;AACL,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,aAAa,EAAE;gBACX,2BAA2B;gBAC3B,GAAG,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC,GAAG;AACnD,aAAA;AACD,YAAA,SAAS,EAAE;gBACP,eAAe;gBACf,GAAG,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG;AAC7C,aAAA;YACD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,qBAAqB;AACtE,SAAA,CACJ;QACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB;QAEvD,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,MAAK;AACtC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AACrC,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;AAC1C,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IAC9D;AAEA;;AAEG;IACK,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAC7B,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,eAAe,CAE9C,0BAA0B,EAAE,IAAI,CAAC,gBAAgB,CAAC;QACxD;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,IAAI,CAAC,WAAW,EAAE;QACtB;QAEA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE;AAC/B,YAAA,MAAM,YAAY,GAEF,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACjE,YAAA,IAAI,CAAC,eAAe,GAAG,YAAY,EAAE,QAAQ;;AAG7C,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS;gBAC1B,eAAe,CAAC,MAAK;AACjB,oBAAA,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE;AACnC,gBAAA,CAAC,EAAE;oBACC,QAAQ,EAAE,IAAI,CAAC;AAClB,iBAAA,CAAC;;AAGN,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,eAAe,EAAE;AAC9C,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;iBACZ,SAAS,CAAC,MAAK;AACZ,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;gBACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AACrC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;AAC1C,YAAA,CAAC,CAAC;QACV;IACJ;IAEQ,WAAW,GAAA;AACf,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;AAC1C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,QAAA,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC;AACpC,YAAA,gBAAgB,EAAE,IAAI,CAAC,2BAA2B,EAAE;AACpD,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE;gBACX,kCAAkC;gBAClC,GAAG,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC,GAAG;AACnD,aAAA;YACD,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,qBAAqB,EAAE;AACrE,YAAA,UAAU,EAAE;gBACR,cAAc;gBACd,GAAG,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG;AAC7C;AACJ,SAAA,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;AAElD,QAAA,KAAK,CACD,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,EAC7B,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAC3B,IAAI,CAAC;AACA,aAAA,aAAa;AACb,aAAA,IAAI,CACD,MAAM,CACF,KAAK,IACD,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,QAAQ;aACnC,IAAI,CAAC,QAAQ,EAAE;AACZ,gBAAA,KAAK,CAAC,MAAM;gBACZ,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,CAAC,CACvD,CACJ,CACR,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACnC;AAEA;;AAEG;IACK,2BAA2B,GAAA;QAC/B,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO,IAAI,CAAC;AACP,iBAAA,QAAQ;AACR,iBAAA,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAG,CAAC,UAAU;iBAC/C,qBAAqB,CAAC,mBAAmB;iBACzC,sBAAsB,CAAC,KAAK;iBAC5B,QAAQ,CAAC,KAAK;AACd,iBAAA,aAAa,CAAC;AACX,gBAAA;AACI,oBAAA,OAAO,EAAE,OAAO;AAChB,oBAAA,OAAO,EAAE,QAAQ;AACjB,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,QAAQ,EAAE;AACb,iBAAA;AACD,gBAAA;AACI,oBAAA,OAAO,EAAE,OAAO;AAChB,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,QAAQ,EAAE;AACb,iBAAA;AACD,gBAAA;AACI,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE,QAAQ;AACjB,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,QAAQ,EAAE;AACb,iBAAA;AACD,gBAAA;AACI,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,QAAQ,EAAE;AACb,iBAAA;AACD,gBAAA;AACI,oBAAA,OAAO,EAAE,OAAO;AAChB,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,CAAC;AACb,iBAAA;AACD,gBAAA;AACI,oBAAA,OAAO,EAAE,OAAO;AAChB,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,CAAC;AACb;AACJ,aAAA,CAAC;QACV;IACJ;8GArkBS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,s5CC3B9B,MACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FD0Ba,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,uBAGJ,KAAK,EAAA,QAAA,EAAA,MAAA,EAAA;;;AEzB9B;;AAEG;;;;"}