@ng-matero/extensions 19.0.3 → 19.1.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":"mtxDatetimepicker.mjs","sources":["../../../projects/extensions/datetimepicker/datetimepicker-animations.ts","../../../projects/extensions/datetimepicker/datetimepicker-errors.ts","../../../projects/extensions/datetimepicker/datetimepicker-filtertype.ts","../../../projects/extensions/datetimepicker/datetimepicker-intl.ts","../../../projects/extensions/datetimepicker/calendar-body.ts","../../../projects/extensions/datetimepicker/calendar-body.html","../../../projects/extensions/datetimepicker/month-view.ts","../../../projects/extensions/datetimepicker/month-view.html","../../../projects/extensions/datetimepicker/multi-year-view.ts","../../../projects/extensions/datetimepicker/multi-year-view.html","../../../projects/extensions/datetimepicker/clock.ts","../../../projects/extensions/datetimepicker/clock.html","../../../projects/extensions/datetimepicker/time-view.ts","../../../projects/extensions/datetimepicker/time-view.html","../../../projects/extensions/datetimepicker/year-view.ts","../../../projects/extensions/datetimepicker/year-view.html","../../../projects/extensions/datetimepicker/calendar.ts","../../../projects/extensions/datetimepicker/calendar.html","../../../projects/extensions/datetimepicker/datetimepicker.ts","../../../projects/extensions/datetimepicker/datetimepicker-content.html","../../../projects/extensions/datetimepicker/datetimepicker-input.ts","../../../projects/extensions/datetimepicker/datetimepicker-toggle.ts","../../../projects/extensions/datetimepicker/datetimepicker-toggle.html","../../../projects/extensions/datetimepicker/datetimepicker-actions.ts","../../../projects/extensions/datetimepicker/datetimepicker-module.ts","../../../projects/extensions/datetimepicker/mtxDatetimepicker.ts"],"sourcesContent":["import {\n animate,\n AnimationTriggerMetadata,\n keyframes,\n state,\n style,\n transition,\n trigger,\n} from '@angular/animations';\n\n/**\n * Animations used by the Material datetimepicker.\n * @docs-private\n */\nexport const mtxDatetimepickerAnimations: {\n readonly transformPanel: AnimationTriggerMetadata;\n readonly fadeInCalendar: AnimationTriggerMetadata;\n readonly slideCalendar: AnimationTriggerMetadata;\n} = {\n /** Transforms the height of the datetimepicker's calendar. */\n transformPanel: trigger('transformPanel', [\n transition(\n 'void => enter-dropdown',\n animate(\n '120ms cubic-bezier(0, 0, 0.2, 1)',\n keyframes([\n style({ opacity: 0, transform: 'scale(1, 0.8)' }),\n style({ opacity: 1, transform: 'scale(1, 1)' }),\n ])\n )\n ),\n transition(\n 'void => enter-dialog',\n animate(\n '150ms cubic-bezier(0, 0, 0.2, 1)',\n keyframes([\n style({ opacity: 0, transform: 'scale(0.7)' }),\n style({ transform: 'none', opacity: 1 }),\n ])\n )\n ),\n transition('* => void', animate('100ms linear', style({ opacity: 0 }))),\n ]),\n\n /** Fades in the content of the calendar. */\n fadeInCalendar: trigger('fadeInCalendar', [\n state('void', style({ opacity: 0 })),\n state('enter', style({ opacity: 1 })),\n\n // TODO(crisbeto): this animation should be removed since it isn't quite on spec, but we\n // need to keep it until #12440 gets in, otherwise the exit animation will look glitchy.\n transition('void => *', animate('120ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)')),\n ]),\n\n slideCalendar: trigger('slideCalendar', [\n transition('* => left', [\n animate(\n 180,\n keyframes([\n style({ transform: 'translateX(100%)', offset: 0.5 }),\n style({ transform: 'translateX(-100%)', offset: 0.51 }),\n style({ transform: 'translateX(0)', offset: 1 }),\n ])\n ),\n ]),\n transition('* => right', [\n animate(\n 180,\n keyframes([\n style({ transform: 'translateX(-100%)', offset: 0.5 }),\n style({ transform: 'translateX(100%)', offset: 0.51 }),\n style({ transform: 'translateX(0)', offset: 1 }),\n ])\n ),\n ]),\n ]),\n};\n","/** @docs-private */\nexport function createMissingDateImplError(provider: string) {\n return Error(\n `MtxDatetimepicker: No provider found for ${provider}. You must add one of the following ` +\n `to your app config: provideNativeDatetimeAdapter, provideDateFnsDatetimeAdapter,` +\n `provideLuxonDatetimeAdapter, provideMomentDatetimeAdapter, or provide a ` +\n `custom implementation.`\n );\n}\n","export enum MtxDatetimepickerFilterType {\n DATE,\n HOUR,\n MINUTE,\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class MtxDatetimepickerIntl {\n /**\n * Stream to emit from when labels are changed. Use this to notify components when the labels have\n * changed after initialization.\n */\n readonly changes = new Subject<void>();\n\n /** A label for the calendar popup (used by screen readers). */\n calendarLabel = 'Calendar';\n\n /** A label for the button used to open the calendar popup (used by screen readers). */\n openCalendarLabel = 'Open calendar';\n\n /** Label for the button used to close the calendar popup. */\n closeCalendarLabel = 'Close calendar';\n\n /** A label for the previous month button (used by screen readers). */\n prevMonthLabel = 'Previous month';\n\n /** A label for the next month button (used by screen readers). */\n nextMonthLabel = 'Next month';\n\n /** A label for the previous year button (used by screen readers). */\n prevYearLabel = 'Previous year';\n\n /** A label for the next year button (used by screen readers). */\n nextYearLabel = 'Next year';\n\n /** A label for the previous multi-year button (used by screen readers). */\n prevMultiYearLabel = 'Previous 24 years';\n\n /** A label for the next multi-year button (used by screen readers). */\n nextMultiYearLabel = 'Next 24 years';\n\n /** A label for the 'switch to month view' button (used by screen readers). */\n switchToMonthViewLabel = 'Choose date';\n\n /** A label for the 'switch to year view' button (used by screen readers). */\n switchToYearViewLabel = 'Choose month';\n\n /** A label for the 'switch to multi-year view' button (used by screen readers). */\n switchToMultiYearViewLabel = 'Choose month and year';\n\n /** A label for the first date of a range of dates (used by screen readers). */\n startDateLabel = 'Start date';\n\n /** A label for the last date of a range of dates (used by screen readers). */\n endDateLabel = 'End date';\n\n /** Formats a range of years (used for visuals). */\n formatYearRange(start: string, end: string): string {\n return `${start} \\u2013 ${end}`;\n }\n\n /** Formats a label for a range of years (used by screen readers). */\n formatYearRangeLabel(start: string, end: string): string {\n return `${start} to ${end}`;\n }\n\n /** A label for the 'switch to clock hour view' button (used by screen readers). */\n switchToClockHourViewLabel = 'Choose hour';\n\n /** A label for the 'switch to clock minute view' button (used by screen readers). */\n switchToClockMinuteViewLabel = 'Choose minute';\n\n /** Label used for ok button within the manual time input. */\n okLabel = 'OK';\n\n /** Label used for cancel button within the manual time input. */\n cancelLabel = 'Cancel';\n}\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n inject,\n Injector,\n Input,\n NgZone,\n OnChanges,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\n\nlet uniqueIdCounter = 0;\n\n/**\n * An internal class that represents the data corresponding to a single calendar cell.\n * @docs-private\n */\nexport class MtxCalendarCell {\n readonly id = uniqueIdCounter++;\n\n constructor(\n public value: number,\n public displayValue: string,\n public ariaLabel: string,\n public enabled: boolean\n ) {}\n}\n\n/**\n * An internal component used to display calendar data in a table.\n * @docs-private\n */\n@Component({\n selector: '[mtx-calendar-body]',\n templateUrl: 'calendar-body.html',\n styleUrl: 'calendar-body.scss',\n host: {\n 'class': 'mtx-calendar-body',\n 'role': 'grid',\n 'aria-readonly': 'true',\n },\n exportAs: 'mtxCalendarBody',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MtxCalendarBody implements OnChanges {\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private _ngZone = inject(NgZone);\n\n private _injector = inject(Injector);\n\n /** The label for the table. (e.g. \"Jan 2017\"). */\n @Input() label!: string;\n\n /** The cells to display in the table. */\n @Input() rows!: MtxCalendarCell[][];\n\n /**\n * The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be\n * maintained even as the table resizes.\n */\n @Input() cellAspectRatio: number = 1;\n\n /** The value in the table that corresponds to today. */\n @Input() todayValue!: number;\n\n /** The value in the table that is currently selected. */\n @Input() selectedValue!: number;\n\n /** The minimum number of free cells needed to fit the label in the first row. */\n @Input() labelMinRequiredCells!: number;\n\n /** The number of columns in the table. */\n @Input() numCols = 7;\n\n /** Whether to allow selection of disabled cells. */\n @Input() allowDisabledSelection = false;\n\n /** The cell number of the active cell in the table. */\n @Input() activeCell = 0;\n\n /** Emits when a new value is selected. */\n @Output() selectedValueChange = new EventEmitter<number>();\n\n /** The number of blank cells to put at the beginning for the first row. */\n _firstRowOffset!: number;\n\n /** Padding for the individual date cells. */\n _cellPadding!: string;\n\n /** Width of an individual cell. */\n _cellWidth!: string;\n\n _cellClicked(cell: MtxCalendarCell): void {\n if (!this.allowDisabledSelection && !cell.enabled) {\n return;\n }\n this.selectedValueChange.emit(cell.value);\n }\n\n _emitActiveDateChange(cell: MtxCalendarCell, event: FocusEvent): void {\n if (cell.enabled) {\n // this.activeDateChange.emit({ value: cell.value, event });\n }\n }\n\n _isActiveCell(rowIndex: number, colIndex: number): boolean {\n let cellNumber = rowIndex * this.numCols + colIndex;\n\n // Account for the fact that the first row may not have as many cells.\n if (rowIndex) {\n cellNumber -= this._firstRowOffset;\n }\n\n return cellNumber === this.activeCell;\n }\n\n /**\n * Tracking function for rows based on their identity. Ideally we would use some sort of\n * key on the row, but that would require a breaking change for the `rows` input. We don't\n * use the built-in identity tracking, because it logs warnings.\n */\n _trackRow = (row: MtxCalendarCell[]) => row;\n\n ngOnChanges(changes: SimpleChanges) {\n const columnChanges = changes['numCols'];\n const { rows, numCols } = this;\n\n if (changes['rows'] || columnChanges) {\n this._firstRowOffset = rows && rows.length && rows[0].length ? numCols - rows[0].length : 0;\n }\n\n if (changes['cellAspectRatio'] || columnChanges || !this._cellPadding) {\n this._cellPadding = `${(50 * this.cellAspectRatio) / numCols}%`;\n }\n\n if (columnChanges || !this._cellWidth) {\n this._cellWidth = `${100 / numCols}%`;\n }\n }\n\n _focusActiveCell(movePreview = true) {\n afterNextRender(\n () => {\n setTimeout(() => {\n const activeCell: HTMLElement | null = this._elementRef.nativeElement.querySelector(\n '.mtx-calendar-body-active'\n );\n\n if (activeCell) {\n activeCell.focus();\n }\n });\n },\n { injector: this._injector }\n );\n }\n}\n","<!--\n If there's not enough space in the first row, create a separate label row. We mark this row as\n aria-hidden because we don't want it to be read out as one of the weeks in the month.\n-->\n@if (_firstRowOffset < labelMinRequiredCells) {\n <tr aria-hidden=\"true\">\n <td\n class=\"mtx-calendar-body-label\"\n [attr.colspan]=\"numCols\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\"\n >\n {{ label }}\n </td>\n </tr>\n}\n\n<!-- Create the first row separately so we can include a special spacer cell. -->\n@for (row of rows; track _trackRow(row); let rowIndex = $index) {\n <tr role=\"row\">\n <!--\n This cell is purely decorative, but we can't put `aria-hidden` or `role=\"presentation\"` on it,\n because it throws off the week days for the rest of the row on NVDA. The aspect ratio of the\n table cells is maintained by setting the top and bottom padding as a percentage of the width\n (a variant of the trick described here: https://www.w3schools.com/howto/howto_css_aspect_ratio.asp).\n -->\n @if (rowIndex === 0 && _firstRowOffset) {\n <td\n class=\"mtx-calendar-body-label\"\n [attr.colspan]=\"_firstRowOffset\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\"\n >\n {{ _firstRowOffset >= labelMinRequiredCells ? label : '' }}\n </td>\n }\n <!--\n Each gridcell in the calendar contains a button, which signals to assistive technology that the\n cell is interactable, as well as the selection state via `aria-pressed`. See #23476 for\n background.\n -->\n @for (item of row; track item.id; let colIndex = $index) {\n <td\n role=\"gridcell\"\n class=\"mtx-calendar-body-cell-container\"\n [style.width]=\"_cellWidth\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\"\n [attr.data-mat-row]=\"rowIndex\"\n [attr.data-mat-col]=\"colIndex\"\n >\n <button\n type=\"button\"\n class=\"mtx-calendar-body-cell\"\n [tabindex]=\"_isActiveCell(rowIndex, colIndex) ? 0 : -1\"\n [class.mtx-calendar-body-disabled]=\"!item.enabled\"\n [class.mtx-calendar-body-active]=\"_isActiveCell(rowIndex, colIndex)\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-disabled]=\"!item.enabled || null\"\n (click)=\"_cellClicked(item)\"\n >\n <span\n class=\"mtx-calendar-body-cell-content mat-focus-indicator\"\n [class.mtx-calendar-body-selected]=\"selectedValue === item.value\"\n [class.mtx-calendar-body-today]=\"todayValue === item.value\"\n >\n {{ item.displayValue }}\n </span>\n </button>\n </td>\n }\n </tr>\n}\n","import {\n DOWN_ARROW,\n END,\n ENTER,\n HOME,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n SPACE,\n UP_ARROW,\n} from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport {\n DatetimeAdapter,\n MTX_DATETIME_FORMATS,\n MtxDatetimeFormats,\n} from '@ng-matero/extensions/core';\nimport { MtxCalendarBody, MtxCalendarCell } from './calendar-body';\nimport { mtxDatetimepickerAnimations } from './datetimepicker-animations';\nimport { createMissingDateImplError } from './datetimepicker-errors';\nimport { MtxDatetimepickerType } from './datetimepicker-types';\nimport { Directionality } from '@angular/cdk/bidi';\n\nconst DAYS_PER_WEEK = 7;\n\nlet uniqueIdCounter = 0;\n\n/**\n * An internal component used to display a single month in the datetimepicker.\n * @docs-private\n */\n@Component({\n selector: 'mtx-month-view',\n templateUrl: 'month-view.html',\n exportAs: 'mtxMonthView',\n animations: [mtxDatetimepickerAnimations.slideCalendar],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MtxCalendarBody],\n})\nexport class MtxMonthView<D> implements AfterContentInit {\n _adapter = inject<DatetimeAdapter<D>>(DatetimeAdapter, { optional: true })!;\n private _dir = inject(Directionality, { optional: true });\n private _dateFormats = inject<MtxDatetimeFormats>(MTX_DATETIME_FORMATS, { optional: true })!;\n\n @Input() type: MtxDatetimepickerType = 'date';\n\n /** A function used to filter which dates are selectable. */\n @Input() dateFilter!: (date: D) => boolean;\n\n /** Emits when a new date is selected. */\n @Output() selectedChange = new EventEmitter<D>();\n\n /** Emits when any date is selected. */\n @Output() readonly _userSelection = new EventEmitter<void>();\n\n /** Emits when any date is activated. */\n @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** The body of calendar table */\n @ViewChild(MtxCalendarBody) _mtxCalendarBody!: MtxCalendarBody;\n\n /** Grid of calendar cells representing the dates of the month. */\n _weeks!: MtxCalendarCell[][];\n\n /** The number of blank cells in the first row before the 1st of the month. */\n _firstWeekOffset!: number;\n\n /**\n * The date of the month that the currently selected Date falls on.\n * Null if the currently selected Date is in another month.\n */\n _selectedDate!: number | null;\n\n /** The date of the month that today falls on. Null if today is in another month. */\n _todayDate!: number | null;\n\n /** The names of the weekdays. */\n _weekdays: { long: string; narrow: string; id: number }[] = [];\n\n _calendarState!: string;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n if (!this._adapter) {\n throw createMissingDateImplError('DatetimeAdapter');\n }\n\n if (!this._dateFormats) {\n throw createMissingDateImplError('MTX_DATETIME_FORMATS');\n }\n\n this._activeDate = this._adapter.today();\n }\n\n private _activeDate: D;\n\n /**\n * The date to display in this month view (everything other than the month and year is ignored).\n */\n @Input()\n get activeDate(): D {\n return this._activeDate;\n }\n set activeDate(value: D) {\n const oldActiveDate = this._activeDate;\n this._activeDate = value || this._adapter.today();\n if (\n oldActiveDate &&\n this._activeDate &&\n !this._adapter.sameMonthAndYear(oldActiveDate, this._activeDate)\n ) {\n this._init();\n if (this._adapter.isInNextMonth(oldActiveDate, this._activeDate)) {\n this.calendarState('right');\n } else {\n this.calendarState('left');\n }\n }\n }\n\n /** The currently selected date. */\n @Input()\n get selected(): D | null {\n return this._selected;\n }\n set selected(value: D | null) {\n this._selected = value;\n this._selectedDate = this._getDateInCurrentMonth(this.selected);\n }\n private _selected: D | null = null;\n\n ngAfterContentInit(): void {\n this._init();\n }\n\n /** Handles when a new date is selected. */\n _dateSelected(date: number) {\n const dateObject = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n this._adapter.getMonth(this.activeDate),\n date,\n this._adapter.getHour(this.activeDate),\n this._adapter.getMinute(this.activeDate)\n );\n this.selectedChange.emit(dateObject);\n this._activeDate = dateObject;\n\n if (this.type === 'date') {\n this._userSelection.emit();\n }\n }\n\n _calendarStateDone() {\n this._calendarState = '';\n }\n\n /** Initializes this month view. */\n private _init() {\n this._selectedDate = this._getDateInCurrentMonth(this.selected);\n this._todayDate = this._getDateInCurrentMonth(this._adapter.today());\n\n const firstOfMonth = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n this._adapter.getMonth(this.activeDate),\n 1,\n this._adapter.getHour(this.activeDate),\n this._adapter.getMinute(this.activeDate)\n );\n this._firstWeekOffset =\n (DAYS_PER_WEEK +\n this._adapter.getDayOfWeek(firstOfMonth) -\n this._adapter.getFirstDayOfWeek()) %\n DAYS_PER_WEEK;\n\n this._initWeekdays();\n this._createWeekCells();\n }\n\n /** Initializes the weekdays. */\n private _initWeekdays() {\n const firstDayOfWeek = this._adapter.getFirstDayOfWeek();\n const narrowWeekdays = this._adapter.getDayOfWeekNames('narrow');\n const longWeekdays = this._adapter.getDayOfWeekNames('long');\n\n // Rotate the labels for days of the week based on the configured first day of the week.\n const weekdays = longWeekdays.map((long, i) => {\n return { long, narrow: narrowWeekdays[i], id: uniqueIdCounter++ };\n });\n this._weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));\n }\n\n /** Creates MdCalendarCells for the dates in this month. */\n private _createWeekCells() {\n const daysInMonth = this._adapter.getNumDaysInMonth(this.activeDate);\n const dateNames = this._adapter.getDateNames();\n this._weeks = [[]];\n for (let i = 0, cell = this._firstWeekOffset; i < daysInMonth; i++, cell++) {\n if (cell === DAYS_PER_WEEK) {\n this._weeks.push([]);\n cell = 0;\n }\n const date = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n this._adapter.getMonth(this.activeDate),\n i + 1,\n this._adapter.getHour(this.activeDate),\n this._adapter.getMinute(this.activeDate)\n );\n const enabled = !this.dateFilter || this.dateFilter(date);\n const ariaLabel = this._adapter.format(date, this._dateFormats.display.dateA11yLabel);\n this._weeks[this._weeks.length - 1].push(\n new MtxCalendarCell(i + 1, dateNames[i], ariaLabel, enabled)\n );\n }\n }\n\n /**\n * Gets the date in this month that the given Date falls on.\n * Returns null if the given Date is in another month.\n */\n private _getDateInCurrentMonth(date: D | null) {\n return date && this._adapter.sameMonthAndYear(date, this.activeDate)\n ? this._adapter.getDate(date)\n : null;\n }\n\n private calendarState(direction: string): void {\n this._calendarState = direction;\n }\n\n /** Handles keydown events on the calendar body when calendar is in month view. */\n _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\n // disabled ones from being selected. This may not be ideal, we should look into whether\n // navigation should skip over disabled dates, and if so, how to implement that efficiently.\n\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._adapter.addCalendarDays(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._adapter.addCalendarDays(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._adapter.addCalendarDays(this._activeDate, -7);\n break;\n case DOWN_ARROW:\n this.activeDate = this._adapter.addCalendarDays(this._activeDate, 7);\n break;\n case HOME:\n this.activeDate = this._adapter.addCalendarDays(\n this._activeDate,\n 1 - this._adapter.getDate(this._activeDate)\n );\n break;\n case END:\n this.activeDate = this._adapter.addCalendarDays(\n this._activeDate,\n this._adapter.getNumDaysInMonth(this._activeDate) -\n this._adapter.getDate(this._activeDate)\n );\n break;\n case PAGE_UP:\n this.activeDate = event.altKey\n ? this._adapter.addCalendarYears(this._activeDate, -1)\n : this._adapter.addCalendarMonths(this._activeDate, -1);\n break;\n case PAGE_DOWN:\n this.activeDate = event.altKey\n ? this._adapter.addCalendarYears(this._activeDate, 1)\n : this._adapter.addCalendarMonths(this._activeDate, 1);\n break;\n case ENTER:\n case SPACE:\n if (!this.dateFilter || this.dateFilter(this._activeDate)) {\n this._dateSelected(this._adapter.getDate(this._activeDate));\n // this._userSelection.emit();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n return;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n if (this._adapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n\n this._focusActiveCell();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell(movePreview?: boolean) {\n this._mtxCalendarBody._focusActiveCell(movePreview);\n }\n\n /** Determines whether the user has the RTL layout direction. */\n private _isRtl() {\n return this._dir && this._dir.value === 'rtl';\n }\n}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n<table class=\"mtx-calendar-table\" role=\"grid\">\n <thead class=\"mtx-calendar-table-header\">\n <tr>\n @for (day of _weekdays; track day.id) {\n <th [attr.aria-label]=\"day.long\">{{day.narrow}}</th>\n }\n </tr>\n </thead>\n <tbody mtx-calendar-body\n (@slideCalendar.done)=\"_calendarStateDone()\"\n [@slideCalendar]=\"_calendarState\"\n [rows]=\"_weeks\"\n [todayValue]=\"_todayDate!\"\n [activeCell]=\"_adapter.getDate(activeDate) - 1\"\n [selectedValue]=\"_selectedDate!\"\n (selectedValueChange)=\"_dateSelected($event)\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\"></tbody>\n</table>\n","import {\n DOWN_ARROW,\n END,\n ENTER,\n HOME,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n SPACE,\n UP_ARROW,\n} from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport {\n DatetimeAdapter,\n MTX_DATETIME_FORMATS,\n MtxDatetimeFormats,\n} from '@ng-matero/extensions/core';\nimport { MtxCalendarBody, MtxCalendarCell } from './calendar-body';\nimport { createMissingDateImplError } from './datetimepicker-errors';\nimport { MtxDatetimepickerType } from './datetimepicker-types';\nimport { Directionality } from '@angular/cdk/bidi';\n\nexport const yearsPerPage = 24;\n\nexport const yearsPerRow = 4;\n\n/**\n * An internal component used to display multiple years in the datetimepicker.\n * @docs-private\n */\n@Component({\n selector: 'mtx-multi-year-view',\n templateUrl: 'multi-year-view.html',\n exportAs: 'mtxMultiYearView',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MtxCalendarBody],\n})\nexport class MtxMultiYearView<D> implements AfterContentInit {\n _adapter = inject<DatetimeAdapter<D>>(DatetimeAdapter, { optional: true })!;\n private _dir = inject(Directionality, { optional: true });\n private _dateFormats = inject<MtxDatetimeFormats>(MTX_DATETIME_FORMATS, { optional: true })!;\n\n @Input() type: MtxDatetimepickerType = 'date';\n\n /** A function used to filter which dates are selectable. */\n @Input() dateFilter!: (date: D) => boolean;\n\n /** Emits when a new month is selected. */\n @Output() selectedChange = new EventEmitter<D>();\n\n /** Emits when any date is selected. */\n @Output() readonly _userSelection = new EventEmitter<void>();\n\n /** Emits when any date is activated. */\n @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** The body of calendar table */\n @ViewChild(MtxCalendarBody) _mtxCalendarBody!: MtxCalendarBody;\n\n /** Grid of calendar cells representing the years in the range. */\n _years!: MtxCalendarCell[][];\n\n /** The label for this year range (e.g. \"2000-2020\"). */\n _yearLabel!: string;\n\n /** The year in this range that today falls on. Null if today is in a different range. */\n _todayYear!: number;\n\n /**\n * The year in this range that the selected Date falls on.\n * Null if the selected Date is in a different range.\n */\n _selectedYear!: number | null;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n if (!this._adapter) {\n throw createMissingDateImplError('DatetimeAdapter');\n }\n\n if (!this._dateFormats) {\n throw createMissingDateImplError('MTX_DATETIME_FORMATS');\n }\n\n this._activeDate = this._adapter.today();\n }\n\n /** The date to display in this multi year view */\n @Input()\n get activeDate(): D {\n return this._activeDate;\n }\n set activeDate(value: D) {\n const oldActiveDate = this._activeDate;\n this._activeDate = value || this._adapter.today();\n if (\n oldActiveDate &&\n this._activeDate &&\n !isSameMultiYearView(\n this._adapter,\n oldActiveDate,\n this._activeDate,\n this.minDate,\n this.maxDate\n )\n ) {\n this._init();\n }\n }\n private _activeDate: D;\n\n /** The currently selected date. */\n @Input()\n get selected(): D | null {\n return this._selected;\n }\n set selected(value: D | null) {\n this._selected = value;\n this._selectedYear = this._selected && this._adapter.getYear(this._selected);\n }\n private _selected: D | null = null;\n\n /** The minimum selectable date. */\n @Input()\n get minDate(): D | null {\n return this._minDate;\n }\n set minDate(value: D | null) {\n this._minDate = this._getValidDateOrNull(this._adapter.deserialize(value));\n }\n private _minDate!: D | null;\n\n /** The maximum selectable date. */\n @Input()\n get maxDate(): D | null {\n return this._maxDate;\n }\n set maxDate(value: D | null) {\n this._maxDate = this._getValidDateOrNull(this._adapter.deserialize(value));\n }\n private _maxDate!: D | null;\n\n ngAfterContentInit() {\n this._init();\n }\n\n /** Handles when a new year is selected. */\n _yearSelected(year: number) {\n const month = this._adapter.getMonth(this.activeDate);\n const normalizedDate = this._adapter.createDatetime(year, month, 1, 0, 0);\n\n const dateObject = this._adapter.createDatetime(\n year,\n month,\n Math.min(\n this._adapter.getDate(this.activeDate),\n this._adapter.getNumDaysInMonth(normalizedDate)\n ),\n this._adapter.getHour(this.activeDate),\n this._adapter.getMinute(this.activeDate)\n );\n\n this.selectedChange.emit(dateObject);\n this._activeDate = dateObject;\n\n if (this.type === 'year') {\n this._userSelection.emit();\n }\n }\n\n _getActiveCell(): number {\n return getActiveOffset(this._adapter, this.activeDate, this.minDate, this.maxDate);\n }\n\n /** Initializes this year view. */\n private _init() {\n this._todayYear = this._adapter.getYear(this._adapter.today());\n this._yearLabel = this._adapter.getYearName(this.activeDate);\n\n const activeYear = this._adapter.getYear(this.activeDate);\n\n const minYearOfPage =\n activeYear - getActiveOffset(this._adapter, this.activeDate, this.minDate, this.maxDate);\n\n this._years = [];\n for (let i = 0, row: number[] = []; i < yearsPerPage; i++) {\n row.push(minYearOfPage + i);\n if (row.length === yearsPerRow) {\n this._years.push(row.map(year => this._createCellForYear(year)));\n row = [];\n }\n }\n }\n\n /** Creates an MtxCalendarCell for the given year. */\n private _createCellForYear(year: number) {\n const yearName = this._adapter.getYearName(this._adapter.createDate(year, 0, 1));\n return new MtxCalendarCell(year, yearName, yearName, this._shouldEnableYear(year));\n }\n\n /** Whether the given year is enabled. */\n private _shouldEnableYear(year: number) {\n // disable if the year is greater than maxDate lower than minDate\n if (\n year === undefined ||\n year === null ||\n (this.maxDate && year > this._adapter.getYear(this.maxDate)) ||\n (this.minDate && year < this._adapter.getYear(this.minDate))\n ) {\n return false;\n }\n\n // enable if it reaches here and there's no filter defined\n if (!this.dateFilter) {\n return true;\n }\n\n const firstOfYear = this._adapter.createDate(year, 0, 1);\n\n // If any date in the year is enabled count the year as enabled.\n for (\n let date = firstOfYear;\n this._adapter.getYear(date) === year;\n date = this._adapter.addCalendarDays(date, 1)\n ) {\n if (this.dateFilter(date)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * @param obj The object to check.\n * @returns The given object if it is both a date instance and valid, otherwise null.\n */\n _getValidDateOrNull(obj: any): D | null {\n return this._adapter.isDateInstance(obj) && this._adapter.isValid(obj) ? obj : null;\n }\n\n /** Handles keydown events on the calendar body when calendar is in multi-year view. */\n _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._adapter.addCalendarYears(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._adapter.addCalendarYears(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._adapter.addCalendarYears(this._activeDate, -yearsPerRow);\n break;\n case DOWN_ARROW:\n this.activeDate = this._adapter.addCalendarYears(this._activeDate, yearsPerRow);\n break;\n case HOME:\n this.activeDate = this._adapter.addCalendarYears(\n this._activeDate,\n -getActiveOffset(this._adapter, this._activeDate, this.minDate, this.maxDate)\n );\n break;\n case END:\n this.activeDate = this._adapter.addCalendarYears(\n this._activeDate,\n yearsPerPage -\n getActiveOffset(this._adapter, this._activeDate, this.minDate, this.maxDate) -\n 1\n );\n break;\n case PAGE_UP:\n this.activeDate = this._adapter.addCalendarYears(\n this._activeDate,\n event.altKey ? -yearsPerPage * 10 : -yearsPerPage\n );\n break;\n case PAGE_DOWN:\n this.activeDate = this._adapter.addCalendarYears(\n this._activeDate,\n event.altKey ? yearsPerPage * 10 : yearsPerPage\n );\n break;\n case ENTER:\n case SPACE:\n this._yearSelected(this._adapter.getYear(this._activeDate));\n break;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n if (this._adapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n\n this._focusActiveCell();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell() {\n this._mtxCalendarBody._focusActiveCell();\n }\n\n /** Determines whether the user has the RTL layout direction. */\n private _isRtl() {\n return this._dir && this._dir.value === 'rtl';\n }\n}\n\nexport function isSameMultiYearView<D>(\n dateAdapter: DatetimeAdapter<D>,\n date1: D,\n date2: D,\n minDate: D | null,\n maxDate: D | null\n): boolean {\n const year1 = dateAdapter.getYear(date1);\n const year2 = dateAdapter.getYear(date2);\n const startingYear = getStartingYear(dateAdapter, minDate, maxDate);\n return (\n Math.floor((year1 - startingYear) / yearsPerPage) ===\n Math.floor((year2 - startingYear) / yearsPerPage)\n );\n}\n\n/**\n * When the multi-year view is first opened, the active year will be in view.\n * So we compute how many years are between the active year and the *slot* where our\n * \"startingYear\" will render when paged into view.\n */\nexport function getActiveOffset<D>(\n dateAdapter: DatetimeAdapter<D>,\n activeDate: D,\n minDate: D | null,\n maxDate: D | null\n): number {\n const activeYear = dateAdapter.getYear(activeDate);\n return euclideanModulo(activeYear - getStartingYear(dateAdapter, minDate, maxDate), yearsPerPage);\n}\n\n/**\n * We pick a \"starting\" year such that either the maximum year would be at the end\n * or the minimum year would be at the beginning of a page.\n */\nfunction getStartingYear<D>(\n dateAdapter: DatetimeAdapter<D>,\n minDate: D | null,\n maxDate: D | null\n): number {\n let startingYear = 0;\n if (maxDate) {\n const maxYear = dateAdapter.getYear(maxDate);\n startingYear = maxYear - yearsPerPage + 1;\n } else if (minDate) {\n startingYear = dateAdapter.getYear(minDate);\n }\n return startingYear;\n}\n\n/** Gets remainder that is non-negative, even if first number is negative */\nfunction euclideanModulo(a: number, b: number): number {\n return ((a % b) + b) % b;\n}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n<table class=\"mtx-calendar-table\" role=\"grid\">\n <thead class=\"mtx-calendar-table-header\"></thead>\n <tbody mtx-calendar-body\n [rows]=\"_years\"\n [todayValue]=\"_todayYear\"\n [numCols]=\"4\"\n [cellAspectRatio]=\"4 / 7\"\n [activeCell]=\"_getActiveCell()\"\n [allowDisabledSelection]=\"true\"\n [selectedValue]=\"_selectedYear!\"\n (selectedValueChange)=\"_yearSelected($event)\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\"></tbody>\n</table>\n","import { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n} from '@angular/core';\n\nimport { DatetimeAdapter } from '@ng-matero/extensions/core';\nimport { MtxDatetimepickerFilterType } from './datetimepicker-filtertype';\nimport { MtxAMPM } from './datetimepicker-types';\n\nconst activeEventOptions = normalizePassiveListenerOptions({ passive: false });\n\nexport const CLOCK_RADIUS = 50;\nexport const CLOCK_INNER_RADIUS = 27.5;\nexport const CLOCK_OUTER_RADIUS = 41.25;\nexport const CLOCK_TICK_RADIUS = 7.0833;\n\n/** Possible views for datetimepicker clock. */\nexport type MtxClockView = 'hour' | 'minute';\n\nexport interface ClockCell {\n value: number;\n displayValue: string;\n enabled: boolean;\n top: number;\n left: number;\n fontSize?: string;\n}\n\n/**\n * A clock that is used as part of the datetimepicker.\n * @docs-private\n */\n@Component({\n selector: 'mtx-clock',\n templateUrl: 'clock.html',\n styleUrl: 'clock.scss',\n host: {\n 'role': 'clock',\n 'class': 'mtx-clock',\n '(mousedown)': '_pointerDown($event)',\n '(touchstart)': '_pointerDown($event)',\n },\n exportAs: 'mtxClock',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MtxClock<D> implements AfterContentInit, OnDestroy, OnChanges {\n private _elementRef = inject(ElementRef);\n private _adapter = inject<DatetimeAdapter<D>>(DatetimeAdapter);\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _document = inject(DOCUMENT);\n\n /** A function used to filter which dates are selectable. */\n @Input() dateFilter!: (date: D, type: MtxDatetimepickerFilterType) => boolean;\n\n /** Step over minutes. */\n @Input() interval: number = 1;\n\n @Input() actionButtons: boolean = false;\n\n /** Whether the clock uses 12 hour format. */\n @Input({ transform: booleanAttribute }) twelvehour: boolean = false;\n\n /** Whether the time is now in AM or PM. */\n @Input() AMPM: MtxAMPM = 'AM';\n\n /** Emits when the currently selected date changes. */\n @Output() selectedChange = new EventEmitter<D>();\n\n /** Emits when any date is activated. */\n @Output() activeDateChange = new EventEmitter<D>();\n\n /** Emits when any date is selected. */\n @Output() readonly _userSelection = new EventEmitter<void>();\n\n /** Whether the clock is in hour view. */\n _hourView: boolean = true;\n\n _hours: ClockCell[] = [];\n\n _minutes: ClockCell[] = [];\n\n _selectedHour!: number;\n\n _selectedMinute!: number;\n\n private _timeChanged = false;\n\n /**\n * The date to display in this clock view.\n */\n @Input()\n get activeDate(): D {\n return this._activeDate;\n }\n set activeDate(value: D) {\n const oldActiveDate = this._activeDate;\n this._activeDate = this._adapter.clampDate(value, this.minDate, this.maxDate);\n if (!this._adapter.sameMinute(oldActiveDate, this._activeDate)) {\n this._init();\n }\n }\n private _activeDate!: D;\n\n /** The currently selected date. */\n @Input()\n get selected(): D | null {\n return this._selected;\n }\n set selected(value: D | null) {\n this._selected = this._adapter.getValidDateOrNull(this._adapter.deserialize(value));\n if (this._selected) {\n this.activeDate = this._selected;\n }\n }\n private _selected!: D | null;\n\n /** The minimum selectable date. */\n @Input()\n get minDate(): D | null {\n return this._minDate;\n }\n set minDate(value: D | null) {\n this._minDate = this._adapter.getValidDateOrNull(this._adapter.deserialize(value));\n }\n private _minDate!: D | null;\n\n /** The maximum selectable date. */\n @Input()\n get maxDate(): D | null {\n return this._maxDate;\n }\n set maxDate(value: D | null) {\n this._maxDate = this._adapter.getValidDateOrNull(this._adapter.deserialize(value));\n }\n private _maxDate!: D | null;\n\n /** Whether the clock should be started in hour or minute view. */\n @Input()\n set startView(value: MtxClockView) {\n this._hourView = value !== 'minute';\n }\n\n get _hand() {\n const hour = this._adapter.getHour(this.activeDate);\n this._selectedHour = hour;\n this._selectedMinute = this._adapter.getMinute(this.activeDate);\n let deg = 0;\n let radius = CLOCK_OUTER_RADIUS;\n if (this._hourView) {\n const outer = this._selectedHour > 0 && this._selectedHour < 13;\n radius = outer ? CLOCK_OUTER_RADIUS : CLOCK_INNER_RADIUS;\n if (this.twelvehour) {\n radius = CLOCK_OUTER_RADIUS;\n }\n deg = Math.round(this._selectedHour * (360 / (24 / 2)));\n } else {\n deg = Math.round(this._selectedMinute * (360 / 60));\n }\n return {\n height: `${radius}%`,\n marginTop: `${50 - radius}%`,\n transform: `rotate(${deg}deg)`,\n };\n }\n\n ngAfterContentInit() {\n this.activeDate = this._activeDate || this._adapter.today();\n this._init();\n }\n\n ngOnDestroy() {\n this._removeGlobalEvents();\n }\n\n ngOnChanges(): void {\n this._init();\n }\n\n /** Called when the user has put their pointer down on the clock. */\n private _pointerDown = (event: TouchEvent | MouseEvent) => {\n this._timeChanged = false;\n this.setTime(event);\n this._bindGlobalEvents(event);\n };\n\n /**\n * Called when the user has moved their pointer after\n * starting to drag. Bound on the document level.\n */\n private _pointerMove = (event: TouchEvent | MouseEvent) => {\n if (event.cancelable) {\n event.preventDefault();\n }\n this.setTime(event);\n };\n\n /** Called when the user has lifted their pointer. Bound on the document level. */\n private _pointerUp = (event: TouchEvent | MouseEvent) => {\n if (event.cancelable) {\n event.preventDefault();\n }\n this._removeGlobalEvents();\n\n if (this._timeChanged) {\n this.selectedChange.emit(this.activeDate);\n if (this.actionButtons || !this._hourView) {\n this._userSelection.emit();\n }\n }\n };\n\n /** Binds our global move and end events. */\n private _bindGlobalEvents(triggerEvent: TouchEvent | MouseEvent) {\n // Note that we bind the events to the `document`, because it allows us to capture\n // drag cancel events where the user's pointer is outside the browser window.\n const document = this._document;\n const isTouch = isTouchEvent(triggerEvent);\n const moveEventName = isTouch ? 'touchmove' : 'mousemove';\n const endEventName = isTouch ? 'touchend' : 'mouseup';\n document.addEventListener(moveEventName, this._pointerMove, activeEventOptions);\n document.addEventListener(endEventName, this._pointerUp, activeEventOptions);\n\n if (isTouch) {\n document.addEventListener('touchcancel', this._pointerUp, activeEventOptions);\n }\n }\n\n /** Removes any global event listeners that we may have added. */\n private _removeGlobalEvents() {\n const document = this._document;\n document.removeEventListener('mousemove', this._pointerMove, activeEventOptions);\n document.removeEventListener('mouseup', this._pointerUp, activeEventOptions);\n document.removeEventListener('touchmove', this._pointerMove, activeEventOptions);\n document.removeEventListener('touchend', this._pointerUp, activeEventOptions);\n document.removeEventListener('touchcancel', this._pointerUp, activeEventOptions);\n }\n\n /** Initializes this clock view. */\n private _init() {\n this._hours.length = 0;\n this._minutes.length = 0;\n\n const hourNames = this._adapter.getHourNames();\n const minuteNames = this._adapter.getMinuteNames();\n if (this.twelvehour) {\n const hours: ClockCell[] = [];\n for (let i = 0; i < hourNames.length; i++) {\n const radian = (i / 6) * Math.PI;\n const radius = CLOCK_OUTER_RADIUS;\n\n const hour = i;\n const date = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n this._adapter.getMonth(this.activeDate),\n this._adapter.getDate(this.activeDate),\n hour,\n 0\n );\n\n // Check if the date is enabled, no need to respect the minute setting here\n const enabled =\n (!this.minDate ||\n (this._adapter.compareDatetime(date, this.minDate, false) as number) >= 0) &&\n (!this.maxDate ||\n (this._adapter.compareDatetime(date, this.maxDate, false) as number) <= 0) &&\n (!this.dateFilter || this.dateFilter(date, MtxDatetimepickerFilterType.HOUR));\n\n // display value for twelvehour clock should be from 1-12 not including 0 and not above 12\n hours.push({\n value: i,\n displayValue: i % 12 === 0 ? '12' : hourNames[i % 12],\n enabled,\n top: CLOCK_RADIUS - Math.cos(radian) * radius - CLOCK_TICK_RADIUS,\n left: CLOCK_RADIUS + Math.sin(radian) * radius - CLOCK_TICK_RADIUS,\n });\n }\n\n // filter out AM or PM hours based on AMPM\n if (this.AMPM === 'AM') {\n this._hours = hours.filter(x => x.value < 12);\n } else {\n this._hours = hours.filter(x => x.value >= 12);\n }\n } else {\n for (let i = 0; i < hourNames.length; i++) {\n const radian = (i / 6) * Math.PI;\n const outer = i > 0 && i < 13;\n const radius = outer ? CLOCK_OUTER_RADIUS : CLOCK_INNER_RADIUS;\n const date = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n this._adapter.getMonth(this.activeDate),\n this._adapter.getDate(this.activeDate),\n i,\n 0\n );\n\n // Check if the date is enabled, no need to respect the minute setting here\n const enabled =\n (!this.minDate ||\n (this._adapter.compareDatetime(date, this.minDate, false) as number) >= 0) &&\n (!this.maxDate ||\n (this._adapter.compareDatetime(date, this.maxDate, false) as number) <= 0) &&\n (!this.dateFilter || this.dateFilter(date, MtxDatetimepickerFilterType.HOUR));\n\n this._hours.push({\n value: i,\n displayValue: i === 0 ? '00' : hourNames[i],\n enabled,\n top: CLOCK_RADIUS - Math.cos(radian) * radius - CLOCK_TICK_RADIUS,\n left: CLOCK_RADIUS + Math.sin(radian) * radius - CLOCK_TICK_RADIUS,\n fontSize: i > 0 && i < 13 ? '' : '80%',\n });\n }\n }\n\n for (let i = 0; i < minuteNames.length; i += 5) {\n const radian = (i / 30) * Math.PI;\n const date = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n this._adapter.getMonth(this.activeDate),\n this._adapter.getDate(this.activeDate),\n this._adapter.getHour(this.activeDate),\n i\n );\n const enabled =\n (!this.minDate || (this._adapter.compareDatetime(date, this.minDate) as number) >= 0) &&\n (!this.maxDate || (this._adapter.compareDatetime(date, this.maxDate) as number) <= 0) &&\n (!this.dateFilter || this.dateFilter(date, MtxDatetimepickerFilterType.MINUTE));\n this._minutes.push({\n value: i,\n displayValue: i === 0 ? '00' : minuteNames[i],\n enabled,\n top: CLOCK_RADIUS - Math.cos(radian) * CLOCK_OUTER_RADIUS - CLOCK_TICK_RADIUS,\n left: CLOCK_RADIUS + Math.sin(radian) * CLOCK_OUTER_RADIUS - CLOCK_TICK_RADIUS,\n });\n }\n }\n\n /**\n * Set Time\n * @param event\n */\n private setTime(event: TouchEvent | MouseEvent) {\n const trigger = this._elementRef.nativeElement;\n const triggerRect = trigger.getBoundingClientRect();\n const width = trigger.offsetWidth;\n const height = trigger.offsetHeight;\n const { pageX, pageY } = getPointerPositionOnPage(event);\n const x = width / 2 - (pageX - triggerRect.left - window.pageXOffset);\n const y = height / 2 - (pageY - triggerRect.top - window.pageYOffset);\n\n let radian = Math.atan2(-x, y);\n const unit = Math.PI / (this._hourView ? 6 : this.interval ? 30 / this.interval : 30);\n const z = Math.sqrt(x * x + y * y);\n const outer =\n this._hourView &&\n z > (width * (CLOCK_OUTER_RADIUS / 100) + width * (CLOCK_INNER_RADIUS / 100)) / 2;\n\n if (radian < 0) {\n radian = Math.PI * 2 + radian;\n }\n let value = Math.round(radian / unit);\n\n let date;\n if (this._hourView) {\n if (this.twelvehour) {\n if (this.AMPM === 'AM') {\n value = value === 0 ? 12 : value;\n } else {\n // if we chosen 12 in PM, the value should be 0 for 0:00,\n // else we can safely add 12 to the final value\n value = value === 12 ? 0 : value + 12;\n }\n } else {\n if (value === 12) {\n value = 0;\n }\n value = outer ? (value === 0 ? 12 : value) : value === 0 ? 0 : value + 12;\n }\n\n date = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n this._adapter.getMonth(this.activeDate),\n this._adapter.getDate(this.activeDate),\n value,\n this._adapter.getMinute(this.activeDate)\n );\n } else {\n if (this.interval) {\n value *= this.interval;\n }\n if (value === 60) {\n value = 0;\n }\n date = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n this._adapter.getMonth(this.activeDate),\n this._adapter.getDate(this.activeDate),\n this._adapter.getHour(this.activeDate),\n value\n );\n }\n\n // if there is a dateFilter, check if the date is allowed if it is not then do not set/emit new date\n // https://github.com/ng-matero/extensions/issues/244\n if (\n this.dateFilter &&\n !this.dateFilter(\n date,\n this._hourView ? MtxDatetimepickerFilterType.HOUR : MtxDatetimepickerFilterType.MINUTE\n )\n ) {\n return;\n }\n\n this._timeChanged = true;\n this.activeDate = date;\n this._changeDetectorRef.markForCheck();\n this.activeDateChange.emit(this.activeDate);\n }\n}\n\n/** Returns whether an event is a touch event. */\nfunction isTouchEvent(event: MouseEvent | TouchEvent): event is TouchEvent {\n // This function is called for every pixel that the user has dragged so we need it to be\n // as fast as possible. Since we only bind mouse events and touch events, we can assume\n // that if the event's name starts with `t`, it's a touch event.\n return event.type[0] === 't';\n}\n\n/** Gets the coordinates of a touch or mouse event relative to the document. */\nfunction getPointerPositionOnPage(event: MouseEvent | TouchEvent) {\n let point: { pageX: number; pageY: number };\n\n if (isTouchEvent(event)) {\n // `touches` will be empty for start/end events so we have to fall back to `changedTouches`.\n point = event.touches[0] || event.changedTouches[0];\n } else {\n point = event;\n }\n\n return point;\n}\n","<div class=\"mtx-clock-wrapper\">\n <div class=\"mtx-clock-center\"></div>\n <div class=\"mtx-clock-hand\" [style]=\"_hand\"></div>\n <div class=\"mtx-clock-hours\" [class.active]=\"_hourView\">\n @for (item of _hours; track item.value) {\n <div\n class=\"mtx-clock-cell\"\n [class.mtx-clock-cell-disabled]=\"!item.enabled\"\n [class.mtx-clock-cell-selected]=\"_selectedHour === item.value\"\n [style.fontSize]=\"item.fontSize\"\n [style.left]=\"item.left+'%'\"\n [style.top]=\"item.top+'%'\">{{ item.displayValue }}</div>\n }\n </div>\n <div class=\"mtx-clock-minutes\" [class.active]=\"!_hourView\">\n @for (item of _minutes; track item.value) {\n <div\n class=\"mtx-clock-cell\"\n [class.mtx-clock-cell-disabled]=\"!item.enabled\"\n [class.mtx-clock-cell-selected]=\"_selectedMinute === item.value\"\n [style.left]=\"item.left+'%'\"\n [style.top]=\"item.top+'%'\">{{ item.displayValue }}</div>\n }\n </div>\n</div>\n","import { coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { DOWN_ARROW, ENTER, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { DatetimeAdapter } from '@ng-matero/extensions/core';\nimport { SubscriptionLike } from 'rxjs';\nimport { MtxClock, MtxClockView } from './clock';\nimport { MtxDatetimepickerFilterType } from './datetimepicker-filtertype';\nimport { MtxDatetimepickerIntl } from './datetimepicker-intl';\nimport { MtxAMPM } from './datetimepicker-types';\n\nfunction pad(num: NumberInput, size: number) {\n num = String(num);\n while (num.length < size) num = '0' + num;\n return num;\n}\n\n@Directive({\n selector: 'input.mtx-time-input',\n host: {\n '(blur)': 'blur($event)',\n '(focus)': 'focus($event)',\n },\n exportAs: 'mtxTimeInput',\n})\nexport class MtxTimeInput implements OnDestroy {\n private element = inject(ElementRef);\n private cdr = inject(ChangeDetectorRef);\n\n @Input('timeInterval')\n set timeInterval(value: NumberInput) {\n this._interval = coerceNumberProperty(value);\n }\n private _interval: number = 1;\n\n @Input('timeMin')\n set timeMin(value: NumberInput) {\n this._min = coerceNumberProperty(value);\n }\n private _min = 0;\n\n @Input('timeMax')\n set timeMax(value: NumberInput) {\n this._max = coerceNumberProperty(value);\n }\n private _max = Infinity;\n\n @Input('timeValue')\n set timeValue(value: NumberInput) {\n this._value = coerceNumberProperty(value);\n if (!this.hasFocus) {\n this.writeValue(this._value);\n }\n this.writePlaceholder(this._value);\n }\n\n @Output() timeValueChanged = new EventEmitter<NumberInput>();\n\n private _value: NumberInput;\n\n private keyDownListener = this.keyDownHandler.bind(this);\n private keyPressListener = this.keyPressHandler.bind(this);\n private inputEventListener = this.inputChangedHandler.bind(this);\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n this.inputElement.addEventListener('keydown', this.keyDownListener, {\n passive: true,\n });\n\n // Do not passive since we want to be able to preventDefault()\n this.inputElement.addEventListener('keypress', this.keyPressListener);\n this.inputElement.addEventListener('input', this.inputEventListener, {\n passive: true,\n });\n }\n\n get hasFocus() {\n return this.element.nativeElement && this.element?.nativeElement === document?.activeElement;\n }\n\n get inputElement() {\n return this.element.nativeElement as HTMLInputElement;\n }\n\n // We look here at the placeholder value, because we write '' into the value on focus\n // placeholder should always be up to date with \"currentValue\"\n get valid() {\n // At the start _value is undefined therefore this would result in not valid and\n // make a ugly warning border afterwards we can safely check\n if (this._value) {\n const currentValue = String(this.inputElement.value);\n\n // It can be that currentValue is empty due to we removing the value on focus,\n // if that is the case we should check previous value which should be in the placeholder\n if (currentValue.length) {\n return this._value == this.inputElement.value;\n } else {\n return this._value == this.inputElement.placeholder;\n }\n }\n return true;\n }\n\n get invalid() {\n return !this.valid;\n }\n\n blur() {\n this.writeValue(this._value);\n this.writePlaceholder(this._value);\n }\n\n focus() {\n this.writeValue('');\n }\n\n /**\n * Write value to inputElement\n * @param value NumberInput\n */\n writeValue(value: NumberInput) {\n if (value !== '') {\n this.inputElement.value = pad(value, 2);\n } else {\n this.inputElement.value = '';\n }\n this.cdr.markForCheck();\n }\n\n /**\n * Writes value to placeholder\n * @param value NumberInput\n */\n writePlaceholder(value: NumberInput) {\n this.inputElement.placeholder = pad(value, 2);\n this.cdr.markForCheck();\n }\n\n keyDownHandler(event: KeyboardEvent) {\n if (String(this.inputElement.value).length > 0) {\n let value: number | null = null;\n if (event.keyCode === UP_ARROW) {\n value = coerceNumberProperty(this._value);\n value += this._interval;\n event.stopPropagation();\n } else if (event.keyCode === DOWN_ARROW) {\n value = coerceNumberProperty(this._value);\n value -= this._interval;\n event.stopPropagation();\n }\n\n // if value has changed\n if (typeof value === 'number') {\n this.writeValue(value);\n this.writePlaceholder(value);\n this.clampInputValue();\n this.timeValueChanged.emit(this._value);\n }\n }\n }\n\n /**\n * Prevent non number inputs in the inputElement with the exception of Enter/BackSpace\n * @param event KeyboardEvent\n */\n keyPressHandler(event: KeyboardEvent) {\n const key = event?.key ?? null;\n if (isNaN(Number(key)) && key !== 'Enter') {\n event.preventDefault();\n }\n }\n\n inputChangedHandler() {\n this.clampInputValue();\n this.timeValueChanged.emit(this._value);\n }\n\n clampInputValue() {\n if (this.inputElement?.value === '') {\n return;\n }\n\n const value = coerceNumberProperty(this.inputElement?.value ?? null);\n // if this._min === 0, we should allow 0\n if (value || (this._min === 0 && value === 0)) {\n const clampedValue = Math.min(Math.max(value, this._min), this._max);\n if (clampedValue !== value) {\n this.writeValue(clampedValue);\n this.writePlaceholder(clampedValue);\n }\n this._value = clampedValue;\n }\n }\n\n /**\n * Remove event listeners on destruction\n */\n ngOnDestroy(): void {\n this.inputElement.removeEventListener('keydown', this.keyDownListener);\n this.inputElement.removeEventListener('keypress', this.keyPressListener);\n this.inputElement.removeEventListener('input', this.inputEventListener);\n }\n}\n\n@Component({\n selector: 'mtx-time-view',\n templateUrl: 'time-view.html',\n styleUrl: 'time-view.scss',\n exportAs: 'mtxTime',\n host: {\n 'class': 'mtx-time-view',\n 'tabindex': '0',\n '(keydown)': '_handleCalendarBodyKeydown($event)',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatButton, MtxClock, MtxTimeInput],\n})\nexport class MtxTimeView<D> implements OnChanges, OnDestroy {\n private _adapter = inject<DatetimeAdapter<D>>(DatetimeAdapter);\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _elementRef = inject(ElementRef);\n protected _datetimepickerIntl = inject(MtxDatetimepickerIntl);\n\n /** Emits when the currently selected date changes. */\n @Output() readonly selectedChange = new EventEmitter<D>();\n\n /** Emits when any date changes. */\n @Output() readonly activeDateChange = new EventEmitter<D>();\n\n /** Emits when any date is selected. */\n @Output() readonly _userSelection = new EventEmitter<void>();\n\n /** Emits when AM/PM button are clicked. */\n @Output() readonly ampmChange = new EventEmitter<MtxAMPM>();\n\n /** Emits when AM/PM button are clicked. */\n @Output() readonly clockViewChange = new EventEmitter<MtxClockView>();\n\n /** A function used to filter which dates are selectable. */\n @Input() dateFilter!: (date: D, type: MtxDatetimepickerFilterType) => boolean;\n\n /** Input for action buttons. */\n @Input({ transform: booleanAttribute }) timeInput = false;\n\n /** Step over minutes. */\n @Input() interval = 1;\n\n /** Input for action buttons. */\n @Input() actionsPortal: TemplatePortal | null = null;\n\n /** Prevent user to select same date time */\n @Input({ transform: booleanAttribute }) preventSameDateTimeSelection = false;\n\n /** Whether the time input should be auto-focused after view init. */\n @Input({ transform: booleanAttribute }) autoFocus = true;\n\n @ViewChild('hourInput', { read: ElementRef<HTMLInputElement> })\n protected hourInputElement: ElementRef<HTMLInputElement> | undefined;\n\n @ViewChild('hourInput', { read: MtxTimeInput })\n protected hourInputDirective: MtxTimeInput | undefined;\n\n @ViewChild('minuteInput', { read: ElementRef<HTMLInputElement> })\n protected minuteInputElement: ElementRef<HTMLInputElement> | undefined;\n\n @ViewChild('minuteInput', { read: MtxTimeInput })\n protected minuteInputDirective: MtxTimeInput | undefined;\n\n datetimepickerIntlChangesSubscription: SubscriptionLike;\n\n /** Whether the clock uses 12 hour format. */\n @Input({ transform: booleanAttribute }) twelvehour = false;\n\n /** Whether the time is now in AM or PM. */\n @Input() AMPM: MtxAMPM = 'AM';\n\n /** The date to display in this clock view. */\n @Input()\n get activeDate(): D {\n return this._activeDate;\n }\n set activeDate(value: D) {\n this._activeDate = this._adapter.clampDate(value, this.minDate, this.maxDate);\n }\n private _activeDate!: D;\n\n /** The currently selected date. */\n @Input()\n get selected(): D | null {\n return this._selected;\n }\n set selected(value: D | null) {\n this._selected = this._adapter.getValidDateOrNull(this._adapter.deserialize(value));\n if (this._selected) {\n this.activeDate = this._selected;\n }\n }\n private _selected!: D | null;\n\n /** The minimum selectable date. */\n @Input()\n get minDate(): D | null {\n return this._minDate;\n }\n set minDate(value: D | null) {\n this._minDate = this._adapter.getValidDateOrNull(this._adapter.deserialize(value));\n }\n private _minDate!: D | null;\n\n /** The maximum selectable date. */\n @Input()\n get maxDate(): D | null {\n return this._maxDate;\n }\n set maxDate(value: D | null) {\n this._maxDate = this._adapter.getValidDateOrNull(this._adapter.deserialize(value));\n }\n private _maxDate!: D | null;\n\n /** Whether the clock should be started in hour or minute view. */\n @Input()\n get clockView() {\n return this._clockView;\n }\n set clockView(value: MtxClockView) {\n this._clockView = value;\n }\n /** Whether the clock is in hour view. */\n private _clockView: MtxClockView = 'hour';\n\n get isHourView() {\n return this._clockView === 'hour';\n }\n\n get isMinuteView() {\n return this._clockView === 'hour';\n }\n\n get hour() {\n if (!this.activeDate) {\n if (this.twelvehour) {\n return '12';\n } else {\n return '00';\n }\n }\n\n const hour = Number(this._adapter.getHour(this.activeDate));\n if (!this.twelvehour) {\n return this.prefixWithZero(hour);\n }\n\n if (hour === 0) {\n return '12';\n } else {\n return this.prefixWithZero(hour > 12 ? hour - 12 : hour);\n }\n }\n\n get minute() {\n if (this.activeDate) {\n return this.prefixWithZero(this._adapter.getMinute(this.activeDate));\n }\n\n return '00';\n }\n\n prefixWithZero(value: number) {\n if (value < 10) {\n return '0' + String(value);\n }\n\n return String(value);\n }\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n this.datetimepickerIntlChangesSubscription = this._datetimepickerIntl.changes.subscribe(() => {\n this._changeDetectorRef.detectChanges();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // when clockView changes by input we should focus the correct input\n if (changes.clockView) {\n if (changes.clockView.currentValue !== changes.clockView.previousValue && this.autoFocus) {\n this._focusInputElement();\n }\n }\n }\n\n ngOnDestroy(): void {\n if (this.datetimepickerIntlChangesSubscription) {\n this.datetimepickerIntlChangesSubscription.unsubscribe();\n }\n }\n\n /** Handles keydown events on the calendar body when calendar is in clock view. */\n _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n const oldActiveDate = this._activeDate;\n\n switch (event.keyCode) {\n case UP_ARROW:\n this.selected =\n this._clockView === 'hour'\n ? this._adapter.addCalendarHours(this._activeDate, 1)\n : this._adapter.addCalendarMinutes(this._activeDate, this.interval);\n break;\n case DOWN_ARROW:\n this.selected =\n this._clockView === 'hour'\n ? this._adapter.addCalendarHours(this._activeDate, -1)\n : this._adapter.addCalendarMinutes(this._activeDate, -this.interval);\n break;\n case ENTER:\n case SPACE:\n if (this.timeInput && event.keyCode == SPACE) {\n return;\n }\n if (this.clockView == 'hour') {\n this._timeSelected(this._activeDate);\n this._focusInputElement();\n } else {\n this._userSelection.emit();\n }\n return;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n this.selectedChange.emit(this.selected);\n\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n _focusInputElement() {\n if (this.clockView === 'hour') {\n this.hourInputElement?.nativeElement.focus();\n } else {\n this.minuteInputElement?.nativeElement.focus();\n }\n }\n\n _handleHourInputChange(value: NumberInput) {\n const hour = coerceNumberProperty(value);\n if (hour || hour === 0) {\n const newValue = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n this._adapter.getMonth(this.activeDate),\n this._adapter.getDate(this.activeDate),\n this._updateHourForAmPm(hour),\n this._adapter.getMinute(this.activeDate)\n );\n\n this._activeDate = this._adapter.clampDate(newValue, this.minDate, this.maxDate);\n this.activeDateChange.emit(this.activeDate);\n\n if (this.actionsPortal) {\n this.selectedChange.emit(this.activeDate);\n }\n\n // If previously we did set [mtxValue]=\"13\" and the input changed to 6, and the clamping\n // will make it \"13\" again then the hourInputDirective will not have been updated\n // since \"13\" === \"13\" same reference so no change detected by directly setting it within\n // this handler, we handle this usecase\n if (this.hourInputDirective) {\n this.hourInputDirective.timeValue = this.hour;\n }\n }\n }\n\n _updateHourForAmPm(value: number) {\n if (!this.twelvehour) {\n return value;\n }\n\n // value should be between 1-12\n if (this.AMPM === 'AM') {\n if (value === 0 || value === 12) {\n return 0;\n }\n return value;\n }\n // PM\n else {\n if (value === 0 || value === 12) {\n return 12;\n }\n\n // other cases, we should add 12 to the value aka 3:00 PM = 3 + 12 = 15:00\n return value + 12;\n }\n }\n\n _handleMinuteInputChange(value: NumberInput) {\n const minute = coerceNumberProperty(value);\n if (minute || minute === 0) {\n const newValue = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n this._adapter.getMonth(this.activeDate),\n this._adapter.getDate(this.activeDate),\n this._adapter.getHour(this.activeDate),\n minute\n );\n\n this._activeDate = this._adapter.clampDate(newValue, this.minDate, this.maxDate);\n this.activeDateChange.emit(this.activeDate);\n\n if (this.actionsPortal) {\n this.selectedChange.emit(this.activeDate);\n }\n\n // If previously we did set [mtxValue]=\"40\" and the input changed to 30, and the clamping\n // will make it \"40\" again then the minuteInputDirective will not have been updated\n // since \"40\" === \"40\" same reference so no change detected by directly setting it within\n // this handler, we handle this usecase\n if (this.minuteInputDirective) {\n this.minuteInputDirective.timeValue = this.minute;\n }\n }\n }\n\n _handleFocus(clockView: MtxClockView) {\n this.clockView = clockView;\n this.clockViewChange.emit(clockView);\n }\n\n _dialTimeSelected(date: D): void {\n if (this.clockView === 'hour') {\n this.clockView = 'minute';\n this._activeDate = date;\n }\n if (!this._adapter.sameDatetime(date, this.selected) || !this.preventSameDateTimeSelection) {\n this.selectedChange.emit(date);\n }\n }\n\n _timeSelected(date: D): void {\n if (this.timeInput) {\n if (this.clockView === 'hour') {\n this.clockView = 'minute';\n }\n this._activeDate = this.selected = date;\n } else {\n this._dialTimeSelected(date);\n }\n this.clockViewChange.emit(this.clockView);\n }\n\n _onActiveDateChange(date: D) {\n this._activeDate = date;\n this.activeDateChange.emit(date);\n }\n\n _handleSelection() {\n if (this.timeInput) {\n if (this.actionsPortal && this._selected) {\n this.selectedChange.emit(this._selected);\n }\n } else {\n this._userSelection.emit();\n }\n }\n\n _handleOk() {\n if (this._selected) {\n this.selectedChange.emit(this._selected);\n }\n this._userSelection.emit();\n }\n\n _handleCancel() {\n this._userSelection.emit();\n }\n\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell() {\n if (this.timeInput) {\n if (this.autoFocus) {\n this._focusInputElement();\n }\n } else {\n this._elementRef.nativeElement.focus();\n }\n }\n}\n","@if (timeInput) {\n <div class=\"mtx-time-input-wrapper\">\n <div class=\"mtx-time-input-inner\">\n <input class=\"mtx-time-input\"\n [class.mtx-time-input-active]=\"clockView === 'hour'\"\n [class.mtx-time-input-warning]=\"!hourInput.valid\"\n #hourInput=\"mtxTimeInput\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [timeMin]=\"twelvehour ? 1 : 0\"\n [timeMax]=\"twelvehour ? 12 : 23\"\n [timeValue]=\"hour\"\n (timeValueChanged)=\"_handleHourInputChange($event)\"\n (focus)=\"_handleFocus('hour')\" />\n\n <div class=\"mtx-time-seperator\">:</div>\n\n <input class=\"mtx-time-input\"\n [class.mtx-time-input-active]=\"clockView === 'minute'\"\n [class.mtx-time-input-warning]=\"!minuteInput.valid\"\n #minuteInput=\"mtxTimeInput\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [timeMin]=\"0\"\n [timeMax]=\"59\"\n [timeValue]=\"minute\"\n (timeValueChanged)=\"_handleMinuteInputChange($event)\"\n [timeInterval]=\"interval\"\n (focus)=\"_handleFocus('minute')\" />\n\n @if (twelvehour) {\n <div class=\"mtx-time-ampm\">\n <button mat-button type=\"button\" class=\"mtx-time-am\"\n [class.mtx-time-ampm-active]=\"AMPM === 'AM'\" aria-label=\"AM\"\n (keydown)=\"$event.stopPropagation()\"\n (click)=\"ampmChange.emit('AM')\">AM</button>\n <button mat-button type=\"button\" class=\"mtx-time-pm\"\n [class.mtx-time-ampm-active]=\"AMPM === 'PM'\" aria-label=\"PM\"\n (keydown)=\"$event.stopPropagation()\"\n (click)=\"ampmChange.emit('PM')\">PM</button>\n </div>\n }\n </div>\n </div>\n}\n\n<mtx-clock\n (selectedChange)=\"_timeSelected($event)\"\n (activeDateChange)=\"_onActiveDateChange($event)\"\n (_userSelection)=\"_handleSelection()\"\n [AMPM]=\"AMPM\"\n [dateFilter]=\"dateFilter\"\n [actionButtons]=\"!!actionsPortal\"\n [interval]=\"interval\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [selected]=\"selected\"\n [startView]=\"clockView\"\n [twelvehour]=\"twelvehour\">\n</mtx-clock>\n\n@if (timeInput && !actionsPortal) {\n <div class=\"mtx-time-button-wrapper\">\n <button class=\"mtx-time-cancel-button\" mat-button type=\"button\" (click)=\"_handleCancel()\">\n {{ _datetimepickerIntl.cancelLabel }}\n </button>\n <button class=\"mtx-time-ok-button\" mat-button type=\"button\" (click)=\"_handleOk()\"\n [disabled]=\"minuteInputDirective?.invalid || hourInputDirective?.invalid\">\n {{ _datetimepickerIntl.okLabel }}\n </button>\n </div>\n}\n","import {\n DOWN_ARROW,\n END,\n ENTER,\n HOME,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n SPACE,\n UP_ARROW,\n} from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport {\n DatetimeAdapter,\n MTX_DATETIME_FORMATS,\n MtxDatetimeFormats,\n} from '@ng-matero/extensions/core';\nimport { MtxCalendarBody, MtxCalendarCell } from './calendar-body';\nimport { createMissingDateImplError } from './datetimepicker-errors';\nimport { MtxDatetimepickerType } from './datetimepicker-types';\nimport { Directionality } from '@angular/cdk/bidi';\n\n/**\n * An internal component used to display a single year in the datetimepicker.\n * @docs-private\n */\n@Component({\n selector: 'mtx-year-view',\n templateUrl: 'year-view.html',\n exportAs: 'mtxYearView',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MtxCalendarBody],\n})\nexport class MtxYearView<D> implements AfterContentInit {\n _adapter = inject<DatetimeAdapter<D>>(DatetimeAdapter, { optional: true })!;\n private _dir = inject(Directionality, { optional: true });\n private _dateFormats = inject<MtxDatetimeFormats>(MTX_DATETIME_FORMATS, { optional: true })!;\n\n @Input() type: MtxDatetimepickerType = 'date';\n\n /** A function used to filter which dates are selectable. */\n @Input() dateFilter!: (date: D) => boolean;\n\n /** Emits when a new month is selected. */\n @Output() selectedChange = new EventEmitter<D>();\n\n /** Emits when any date is selected. */\n @Output() readonly _userSelection = new EventEmitter<void>();\n\n /** Emits when any date is activated. */\n @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** The body of calendar table */\n @ViewChild(MtxCalendarBody) _mtxCalendarBody!: MtxCalendarBody;\n\n /** Grid of calendar cells representing the months of the year. */\n _months!: MtxCalendarCell[][];\n\n /** The label for this year (e.g. \"2017\"). */\n _yearLabel!: string;\n\n /** The month in this year that today falls on. Null if today is in a different year. */\n _todayMonth!: number | null;\n\n /**\n * The month in this year that the selected Date falls on.\n * Null if the selected Date is in a different year.\n */\n _selectedMonth!: number | null;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n if (!this._adapter) {\n throw createMissingDateImplError('DatetimeAdapter');\n }\n\n if (!this._dateFormats) {\n throw createMissingDateImplError('MTX_DATETIME_FORMATS');\n }\n\n this._activeDate = this._adapter.today();\n }\n\n /** The date to display in this year view (everything other than the year is ignored). */\n @Input()\n get activeDate(): D {\n return this._activeDate;\n }\n set activeDate(value: D) {\n const oldActiveDate = this._activeDate;\n this._activeDate = value || this._adapter.today();\n if (\n oldActiveDate &&\n this._activeDate &&\n !this._adapter.sameYear(oldActiveDate, this._activeDate)\n ) {\n this._init();\n }\n }\n private _activeDate: D;\n\n /** The currently selected date. */\n @Input()\n get selected(): D | null {\n return this._selected;\n }\n set selected(value: D | null) {\n this._selected = value;\n this._selectedMonth = this._getMonthInCurrentYear(this.selected);\n }\n private _selected: D | null = null;\n\n ngAfterContentInit() {\n this._init();\n }\n\n /** Handles when a new month is selected. */\n _monthSelected(month: number) {\n const normalizedDate = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n month,\n 1,\n 0,\n 0\n );\n\n const dateObject = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n month,\n Math.min(\n this._adapter.getDate(this.activeDate),\n this._adapter.getNumDaysInMonth(normalizedDate)\n ),\n this._adapter.getHour(this.activeDate),\n this._adapter.getMinute(this.activeDate)\n );\n\n this.selectedChange.emit(dateObject);\n this._activeDate = dateObject;\n\n if (this.type === 'month') {\n this._userSelection.emit();\n }\n }\n\n /** Initializes this month view. */\n private _init() {\n this._selectedMonth = this._getMonthInCurrentYear(this.selected);\n this._todayMonth = this._getMonthInCurrentYear(this._adapter.today());\n this._yearLabel = this._adapter.getYearName(this.activeDate);\n\n const monthNames = this._adapter.getMonthNames('short');\n // First row of months only contains 5 elements so we can fit the year label on the same row.\n this._months = [\n [0, 1, 2, 3],\n [4, 5, 6, 7],\n [8, 9, 10, 11],\n ].map(row => row.map(month => this._createCellForMonth(month, monthNames[month])));\n }\n\n /**\n * Gets the month in this year that the given Date falls on.\n * Returns null if the given Date is in another year.\n */\n private _getMonthInCurrentYear(date: D | null) {\n return date && this._adapter.sameYear(date, this.activeDate)\n ? this._adapter.getMonth(date)\n : null;\n }\n\n /** Creates an MdCalendarCell for the given month. */\n private _createCellForMonth(month: number, monthName: string) {\n const ariaLabel = this._adapter.format(\n this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n month,\n 1,\n this._adapter.getHour(this.activeDate),\n this._adapter.getMinute(this.activeDate)\n ),\n this._dateFormats.display.monthYearA11yLabel\n );\n return new MtxCalendarCell(\n month,\n monthName.toLocaleUpperCase(),\n ariaLabel,\n this._isMonthEnabled(month)\n );\n }\n\n /** Whether the given month is enabled. */\n private _isMonthEnabled(month: number) {\n if (!this.dateFilter) {\n return true;\n }\n\n const firstOfMonth = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n month,\n 1,\n this._adapter.getHour(this.activeDate),\n this._adapter.getMinute(this.activeDate)\n );\n\n // If any date in the month is enabled count the month as enabled.\n for (\n let date = firstOfMonth;\n this._adapter.getMonth(date) === month;\n date = this._adapter.addCalendarDays(date, 1)\n ) {\n if (this.dateFilter(date)) {\n return true;\n }\n }\n\n return false;\n }\n\n /** Handles keydown events on the calendar body when calendar is in year view. */\n _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\n // disabled ones from being selected. This may not be ideal, we should look into whether\n // navigation should skip over disabled dates, and if so, how to implement that efficiently.\n\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._adapter.addCalendarMonths(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._adapter.addCalendarMonths(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._adapter.addCalendarMonths(this._activeDate, -4);\n break;\n case DOWN_ARROW:\n this.activeDate = this._adapter.addCalendarMonths(this._activeDate, 4);\n break;\n case HOME:\n this.activeDate = this._adapter.addCalendarMonths(\n this._activeDate,\n -this._adapter.getMonth(this._activeDate)\n );\n break;\n case END:\n this.activeDate = this._adapter.addCalendarMonths(\n this._activeDate,\n 11 - this._adapter.getMonth(this._activeDate)\n );\n break;\n case PAGE_UP:\n this.activeDate = this._adapter.addCalendarYears(this._activeDate, event.altKey ? -10 : -1);\n break;\n case PAGE_DOWN:\n this.activeDate = this._adapter.addCalendarYears(this._activeDate, event.altKey ? 10 : 1);\n break;\n case ENTER:\n case SPACE:\n this._monthSelected(this._adapter.getMonth(this._activeDate));\n break;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n if (this._adapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n\n this._focusActiveCell();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell() {\n this._mtxCalendarBody._focusActiveCell();\n }\n\n /** Determines whether the user has the RTL layout direction. */\n private _isRtl() {\n return this._dir && this._dir.value === 'rtl';\n }\n}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n<table class=\"mtx-calendar-table\" role=\"grid\">\n <thead class=\"mtx-calendar-table-header\"></thead>\n <tbody mtx-calendar-body\n [label]=\"_yearLabel\"\n [rows]=\"_months\"\n [todayValue]=\"_todayMonth!\"\n [labelMinRequiredCells]=\"2\"\n [numCols]=\"4\"\n [cellAspectRatio]=\"4 / 7\"\n [activeCell]=\"_adapter.getMonth(activeDate)\"\n [selectedValue]=\"_selectedMonth!\"\n (selectedValueChange)=\"_monthSelected($event)\"\n [allowDisabledSelection]=\"true\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\"></tbody>\n</table>\n","import { CdkMonitorFocus } from '@angular/cdk/a11y';\nimport {\n CdkPortalOutlet,\n ComponentPortal,\n ComponentType,\n Portal,\n TemplatePortal,\n} from '@angular/cdk/portal';\nimport {\n AfterContentInit,\n AfterViewChecked,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n NgZone,\n OnDestroy,\n Output,\n ViewChild,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport {\n DatetimeAdapter,\n MTX_DATETIME_FORMATS,\n MtxDatetimeFormats,\n} from '@ng-matero/extensions/core';\nimport { Subscription } from 'rxjs';\nimport { MtxClockView } from './clock';\nimport { mtxDatetimepickerAnimations } from './datetimepicker-animations';\nimport { createMissingDateImplError } from './datetimepicker-errors';\nimport { MtxDatetimepickerFilterType } from './datetimepicker-filtertype';\nimport { MtxDatetimepickerIntl } from './datetimepicker-intl';\nimport { MtxAMPM, MtxCalendarView, MtxDatetimepickerType } from './datetimepicker-types';\nimport { MtxMonthView } from './month-view';\nimport {\n MtxMultiYearView,\n getActiveOffset,\n isSameMultiYearView,\n yearsPerPage,\n} from './multi-year-view';\nimport { MtxTimeView } from './time-view';\nimport { MtxYearView } from './year-view';\n\n/**\n * A calendar that is used as part of the datetimepicker.\n * @docs-private\n */\n@Component({\n selector: 'mtx-calendar',\n templateUrl: 'calendar.html',\n styleUrl: 'calendar.scss',\n host: {\n 'class': 'mtx-calendar',\n '[class.mtx-calendar-with-time-input]': 'timeInput',\n },\n exportAs: 'mtxCalendar',\n animations: [mtxDatetimepickerAnimations.slideCalendar],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CdkPortalOutlet,\n CdkMonitorFocus,\n MatButton,\n MatIconButton,\n MtxMonthView,\n MtxYearView,\n MtxMultiYearView,\n MtxTimeView,\n ],\n})\nexport class MtxCalendar<D> implements AfterViewChecked, AfterContentInit, OnDestroy {\n private _intl = inject(MtxDatetimepickerIntl);\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _ngZone = inject(NgZone);\n private _adapter = inject<DatetimeAdapter<D>>(DatetimeAdapter, { optional: true })!;\n private _dateFormats = inject<MtxDatetimeFormats>(MTX_DATETIME_FORMATS, { optional: true })!;\n\n /** Whether to show multi-year view. */\n @Input({ transform: booleanAttribute }) multiYearSelector = false;\n\n /** Whether the clock uses 12 hour format. */\n @Input({ transform: booleanAttribute }) twelvehour = false;\n\n /** Whether the calendar should be started in month or year view. */\n @Input() startView: MtxCalendarView = 'month';\n\n /** Step over minutes. */\n @Input() timeInterval: number = 1;\n\n /** A function used to filter which dates are selectable. */\n @Input() dateFilter!: (date: D, type: MtxDatetimepickerFilterType) => boolean;\n\n /** Prevent user to select same date time */\n @Input({ transform: booleanAttribute }) preventSameDateTimeSelection = false;\n\n /** Input for custom header component */\n @Input() headerComponent!: ComponentType<any>;\n\n /** Input for action buttons. */\n @Input() actionsPortal: TemplatePortal | null = null;\n\n /** Emits when the currently selected date changes. */\n @Output() selectedChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** Emits when the view has been changed. */\n @Output() viewChanged: EventEmitter<MtxCalendarView> = new EventEmitter<MtxCalendarView>();\n\n @Output() _userSelection = new EventEmitter<void>();\n\n /** Reference to the current month view component. */\n @ViewChild(MtxMonthView) monthView!: MtxMonthView<D>;\n\n /** Reference to the current year view component. */\n @ViewChild(MtxYearView) yearView!: MtxYearView<D>;\n\n /** Reference to the current multi-year view component. */\n @ViewChild(MtxMultiYearView) multiYearView!: MtxMultiYearView<D>;\n\n /** Reference to the current time view component. */\n @ViewChild(MtxTimeView) timeView!: MtxTimeView<D>;\n\n _AMPM!: MtxAMPM;\n\n _clockView: MtxClockView = 'hour';\n\n _calendarState!: string;\n\n /** A portal containing the header component. */\n _calendarHeaderPortal!: Portal<any>;\n\n private _intlChanges: Subscription;\n\n private _clampedActiveDate!: D;\n\n /**\n * Used for scheduling that focus should be moved to the active cell on the next tick.\n * We need to schedule it, rather than do it immediately, because we have to wait\n * for Angular to re-evaluate the view children.\n */\n private _moveFocusOnNextTick = false;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n const _intl = this._intl;\n\n if (!this._adapter) {\n throw createMissingDateImplError('DatetimeAdapter');\n }\n\n if (!this._dateFormats) {\n throw createMissingDateImplError('MTX_DATETIME_FORMATS');\n }\n\n this._intlChanges = _intl.changes.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /** The display type of datetimepicker. */\n @Input()\n get type(): MtxDatetimepickerType {\n return this._type;\n }\n set type(value: MtxDatetimepickerType) {\n this._type = value || 'date';\n if (this.type === 'year') {\n this.multiYearSelector = true;\n }\n }\n private _type: MtxDatetimepickerType = 'date';\n\n /** A date representing the period (month or year) to start the calendar in. */\n @Input()\n get startAt(): D | null {\n return this._startAt;\n }\n set startAt(value: D | null) {\n this._startAt = this._adapter.getValidDateOrNull(value);\n }\n private _startAt!: D | null;\n\n /**\n * Whether the calendar is in time mode. In time mode the calendar clock gets time input\n * elements rather then just clock. When `touchUi` is enabled this will be disabled.\n */\n @Input({ transform: booleanAttribute }) timeInput = false;\n\n /** Whether the time input should be auto-focused after view init. */\n @Input({ transform: booleanAttribute }) timeInputAutoFocus = true;\n\n /** The currently selected date. */\n @Input()\n get selected(): D | null {\n return this._selected;\n }\n set selected(value: D | null) {\n this._selected = this._adapter.getValidDateOrNull(value);\n }\n private _selected!: D | null;\n\n /** The minimum selectable date. */\n @Input()\n get minDate(): D | null {\n return this._minDate;\n }\n set minDate(value: D | null) {\n this._minDate = this._adapter.getValidDateOrNull(value);\n }\n private _minDate!: D | null;\n\n /** The maximum selectable date. */\n @Input()\n get maxDate(): D | null {\n return this._maxDate;\n }\n set maxDate(value: D | null) {\n this._maxDate = this._adapter.getValidDateOrNull(value);\n }\n private _maxDate!: D | null;\n\n /**\n * The current active date. This determines which time period is shown and which date is\n * highlighted when using keyboard navigation.\n */\n get _activeDate(): D {\n return this._clampedActiveDate;\n }\n set _activeDate(value: D) {\n const oldActiveDate = this._clampedActiveDate;\n this._clampedActiveDate = this._adapter.clampDate(value, this.minDate, this.maxDate);\n\n // whenever active date changed, and possibly got clamped we should adjust the am/pm setting\n this._selectAMPM(this._clampedActiveDate);\n\n if (\n oldActiveDate &&\n this._clampedActiveDate &&\n this.currentView === 'month' &&\n !this._adapter.sameMonthAndYear(oldActiveDate, this._clampedActiveDate)\n ) {\n if (this._adapter.isInNextMonth(oldActiveDate, this._clampedActiveDate)) {\n this.calendarState('right');\n } else {\n this.calendarState('left');\n }\n }\n\n this._changeDetectorRef.markForCheck();\n }\n\n /** Whether the calendar is in month view. */\n get currentView(): MtxCalendarView {\n return this._currentView;\n }\n set currentView(value: MtxCalendarView) {\n const viewChangedResult = this._currentView !== value ? value : null;\n this._currentView = value;\n this._moveFocusOnNextTick = true;\n this._changeDetectorRef.markForCheck();\n if (viewChangedResult) {\n this.viewChanged.emit(viewChangedResult);\n }\n }\n private _currentView!: MtxCalendarView;\n\n get _yearPeriodText(): string {\n if (this.currentView === 'multi-year') {\n // The offset from the active year to the \"slot\" for the starting year is the\n // *actual* first rendered year in the multi-year view, and the last year is\n // just yearsPerPage - 1 away.\n const activeYear = this._adapter.getYear(this._activeDate);\n const minYearOfPage =\n activeYear - getActiveOffset(this._adapter, this._activeDate, this.minDate, this.maxDate);\n const maxYearOfPage = minYearOfPage + yearsPerPage - 1;\n const minYearName = this._adapter.getYearName(this._adapter.createDate(minYearOfPage, 0, 1));\n const maxYearName = this._adapter.getYearName(this._adapter.createDate(maxYearOfPage, 0, 1));\n return this._intl.formatYearRange(minYearName, maxYearName);\n }\n\n return this.currentView === 'month'\n ? this._adapter.getMonthNames('long')[this._adapter.getMonth(this._activeDate)]\n : this._adapter.getYearName(this._activeDate);\n }\n\n get _yearButtonText(): string {\n return this._adapter.getYearName(this._activeDate);\n }\n\n get _yearButtonLabel(): string {\n return this.multiYearSelector\n ? this._intl.switchToMultiYearViewLabel\n : this._intl.switchToYearViewLabel;\n }\n\n get _dateButtonText(): string {\n switch (this.type) {\n case 'month':\n return this._adapter.getMonthNames('long')[this._adapter.getMonth(this._activeDate)];\n default:\n return this._adapter.format(\n this._activeDate,\n this._dateFormats.display.popupHeaderDateLabel\n );\n }\n }\n\n get _dateButtonLabel(): string {\n return this._intl.switchToMonthViewLabel;\n }\n\n get _hoursButtonText(): string {\n let hour = this._adapter.getHour(this._activeDate);\n if (this.twelvehour) {\n if (hour === 0) {\n hour = 24;\n }\n hour = hour > 12 ? hour - 12 : hour;\n }\n return this._2digit(hour);\n }\n\n get _hourButtonLabel(): string {\n return this._intl.switchToClockHourViewLabel;\n }\n\n get _minutesButtonText(): string {\n return this._2digit(this._adapter.getMinute(this._activeDate));\n }\n\n get _minuteButtonLabel(): string {\n return this._intl.switchToClockMinuteViewLabel;\n }\n\n get _prevButtonLabel(): string {\n switch (this._currentView) {\n case 'month':\n return this._intl.prevMonthLabel;\n case 'year':\n return this._intl.prevYearLabel;\n case 'multi-year':\n return this._intl.prevMultiYearLabel;\n default:\n return '';\n }\n }\n\n get _nextButtonLabel(): string {\n switch (this._currentView) {\n case 'month':\n return this._intl.nextMonthLabel;\n case 'year':\n return this._intl.nextYearLabel;\n case 'multi-year':\n return this._intl.nextMultiYearLabel;\n default:\n return '';\n }\n }\n\n /** Date filter for the month and year views. */\n _dateFilterForViews = (date: D) => {\n return (\n !!date &&\n (!this.dateFilter || this.dateFilter(date, MtxDatetimepickerFilterType.DATE)) &&\n (!this.minDate || this._adapter.compareDate(date, this.minDate) >= 0) &&\n (!this.maxDate || this._adapter.compareDate(date, this.maxDate) <= 0)\n );\n };\n\n _userSelected(): void {\n this._userSelection.emit();\n }\n\n ngAfterContentInit() {\n if (this.headerComponent) {\n this._calendarHeaderPortal = new ComponentPortal(this.headerComponent);\n }\n this._activeDate = this.startAt || this._adapter.today();\n this._selectAMPM(this._activeDate);\n\n // Assign to the private property since we don't want to move focus on init.\n if (this.type === 'year') {\n this._currentView = 'multi-year';\n } else if (this.type === 'month') {\n this._currentView = 'year';\n } else if (this.type === 'time') {\n this._currentView = 'clock';\n } else {\n this._currentView = this.startView;\n }\n }\n\n ngAfterViewChecked() {\n if (this._moveFocusOnNextTick) {\n this._moveFocusOnNextTick = false;\n this.focusActiveCell();\n }\n }\n\n ngOnDestroy() {\n this._intlChanges.unsubscribe();\n }\n\n /** Handles date selection in the month view. */\n _dateSelected(date: D): void {\n if (this.type === 'date') {\n this._onActiveDateChange(date);\n if (!this._adapter.sameDate(date, this.selected) || !this.preventSameDateTimeSelection) {\n this.selectedChange.emit(date);\n }\n } else {\n this.selectedChange.emit(date);\n this._activeDate = date;\n this.currentView = 'clock';\n }\n }\n\n /** Handles month selection in the year view. */\n _monthSelected(month: D): void {\n if (this.type === 'month') {\n if (\n !this._adapter.sameMonthAndYear(month, this.selected) ||\n !this.preventSameDateTimeSelection\n ) {\n this.selectedChange.emit(this._adapter.getFirstDateOfMonth(month));\n }\n } else {\n this._activeDate = month;\n this.currentView = 'month';\n this._clockView = 'hour';\n }\n }\n\n /** Handles year selection in the multi year view. */\n _yearSelected(year: D): void {\n if (this.type === 'year') {\n if (!this._adapter.sameYear(year, this.selected as D) || !this.preventSameDateTimeSelection) {\n const normalizedDate = this._adapter.createDatetime(\n this._adapter.getYear(year),\n 0,\n 1,\n 0,\n 0\n );\n this.selectedChange.emit(normalizedDate);\n }\n } else {\n this._activeDate = year;\n this.currentView = 'year';\n }\n }\n\n _timeSelected(date: D) {\n this._activeDate = date;\n if (!this._adapter.sameDatetime(date, this.selected) || !this.preventSameDateTimeSelection) {\n this.selectedChange.emit(date);\n }\n }\n\n _onActiveDateChange(date: D) {\n this._activeDate = date;\n }\n\n _selectAMPM(date: D) {\n const hour = this._adapter.getHour(date);\n if (hour > 11) {\n this._AMPM = 'PM';\n } else {\n this._AMPM = 'AM';\n }\n\n if (\n this.actionsPortal &&\n this.currentView === 'clock' &&\n this._selected &&\n !this._adapter.sameHour(date, this._selected)\n ) {\n this.selectedChange.emit(date);\n }\n }\n\n _ampmClicked(source: MtxAMPM): void {\n this._currentView = 'clock';\n\n if (source === this._AMPM) {\n return;\n }\n\n // if AMPM changed from PM to AM substract 12 hours\n const currentHour = this._adapter.getHour(this._activeDate);\n let newHourValue;\n if (source === 'AM') {\n newHourValue = currentHour >= 12 ? this._adapter.getHour(this._activeDate) - 12 : 12;\n }\n // otherwise add 12 hours\n else {\n newHourValue = (currentHour + 12) % 24;\n }\n\n const newActiveDate = this._adapter.clampDate(\n this._adapter.createDatetime(\n this._adapter.getYear(this._activeDate),\n this._adapter.getMonth(this._activeDate),\n this._adapter.getDate(this._activeDate),\n newHourValue,\n this._adapter.getMinute(this._activeDate)\n ),\n this.minDate,\n this.maxDate\n );\n\n // only if our clamped date is not changed, we know we can apply the newActiveDate to the\n // activeDate\n if (this._adapter.getHour(newActiveDate) === newHourValue) {\n this._activeDate = newActiveDate;\n this._AMPM = source;\n }\n }\n\n _yearClicked(): void {\n if (this.type === 'year' || this.multiYearSelector) {\n this.currentView = 'multi-year';\n return;\n }\n this.currentView = 'year';\n }\n\n _dateClicked(): void {\n if (this.type !== 'month') {\n this.currentView = 'month';\n }\n }\n\n _hoursClicked(): void {\n this.currentView = 'clock';\n this._clockView = 'hour';\n }\n\n _minutesClicked(): void {\n this.currentView = 'clock';\n this._clockView = 'minute';\n }\n\n /** Handles user clicks on the previous button. */\n _previousClicked(): void {\n this._activeDate =\n this.currentView === 'month'\n ? this._adapter.addCalendarMonths(this._activeDate, -1)\n : this._adapter.addCalendarYears(\n this._activeDate,\n this.currentView === 'year' ? -1 : -yearsPerPage\n );\n }\n\n /** Handles user clicks on the next button. */\n _nextClicked(): void {\n this._activeDate =\n this.currentView === 'month'\n ? this._adapter.addCalendarMonths(this._activeDate, 1)\n : this._adapter.addCalendarYears(\n this._activeDate,\n this.currentView === 'year' ? 1 : yearsPerPage\n );\n }\n\n /** Whether the previous period button is enabled. */\n _previousEnabled(): boolean {\n if (!this.minDate) {\n return true;\n }\n return !this.minDate || !this._isSameView(this._activeDate, this.minDate);\n }\n\n /** Whether the next period button is enabled. */\n _nextEnabled(): boolean {\n return !this.maxDate || !this._isSameView(this._activeDate, this.maxDate);\n }\n\n _calendarStateDone() {\n this._calendarState = '';\n }\n\n /** Whether the two dates represent the same view in the current view mode (month or year). */\n private _isSameView(date1: D, date2: D): boolean {\n if (this.currentView === 'month') {\n return (\n this._adapter.getYear(date1) === this._adapter.getYear(date2) &&\n this._adapter.getMonth(date1) === this._adapter.getMonth(date2)\n );\n }\n if (this.currentView === 'year') {\n return this._adapter.getYear(date1) === this._adapter.getYear(date2);\n }\n // Otherwise we are in 'multi-year' view.\n return isSameMultiYearView(this._adapter, date1, date2, this.minDate, this.maxDate);\n }\n\n private calendarState(direction: string): void {\n this._calendarState = direction;\n }\n\n private _2digit(n: number) {\n return ('00' + n).slice(-2);\n }\n\n /** Returns the component instance that corresponds to the current calendar view. */\n private _getCurrentViewComponent() {\n return this.monthView || this.yearView || this.multiYearView || this.timeView;\n }\n\n /** Focuses the active date. */\n focusActiveCell() {\n this._getCurrentViewComponent()._focusActiveCell(false);\n }\n}\n","<div class=\"mtx-calendar-header\">\n @if (_calendarHeaderPortal) {\n <ng-template [cdkPortalOutlet]=\"_calendarHeaderPortal\"></ng-template>\n } @else {\n @if (type !== 'time') {\n <button\n mat-button type=\"button\" class=\"mtx-calendar-header-year\"\n [class.active]=\"currentView === 'year' || currentView === 'multi-year'\"\n [attr.aria-label]=\"_yearButtonLabel\"\n (click)=\"_yearClicked()\">\n <span>{{ _yearButtonText }}</span>\n @if (multiYearSelector || type === 'year') {\n <svg\n class=\"mtx-calendar-header-year-dropdown\" matButtonIcon iconPositionEnd\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M7,10L12,15L17,10H7Z\" />\n </svg>\n }\n </button>\n }\n @if (type !== 'year') {\n <div class=\"mtx-calendar-header-date-time\">\n @if (type !== 'time') {\n <button\n mat-button type=\"button\" class=\"mtx-calendar-header-date\"\n [class.active]=\"currentView === 'month'\"\n [class.not-clickable]=\"type === 'month'\"\n [attr.aria-label]=\"_dateButtonLabel\"\n (click)=\"_dateClicked()\">{{ _dateButtonText }}</button>\n }\n @if (type.endsWith('time')) {\n <span class=\"mtx-calendar-header-time\" [class.active]=\"currentView === 'clock'\">\n <span class=\"mtx-calendar-header-hour-minute-container\">\n <button mat-button type=\"button\" class=\"mtx-calendar-header-hours\"\n [class.active]=\"_clockView === 'hour'\"\n [attr.aria-label]=\"_hourButtonLabel\"\n (click)=\"_hoursClicked()\">{{ _hoursButtonText }}</button>\n <span class=\"mtx-calendar-header-hour-minute-separator\">:</span>\n <button mat-button type=\"button\" class=\"mtx-calendar-header-minutes\"\n [class.active]=\"_clockView === 'minute'\"\n [attr.aria-label]=\"_minuteButtonLabel\"\n (click)=\"_minutesClicked()\">{{ _minutesButtonText }}</button>\n </span>\n @if (twelvehour) {\n <span class=\"mtx-calendar-header-ampm-container\">\n <button mat-button type=\"button\" class=\"mtx-calendar-header-ampm\"\n [class.active]=\"_AMPM === 'AM'\" aria-label=\"AM\"\n (click)=\"_ampmClicked('AM')\">AM</button>\n <button mat-button type=\"button\" class=\"mtx-calendar-header-ampm\"\n [class.active]=\"_AMPM === 'PM'\" aria-label=\"PM\"\n (click)=\"_ampmClicked('PM')\">PM</button>\n </span>\n }\n </span>\n }\n </div>\n }\n }\n</div>\n\n<div class=\"mtx-calendar-content\">\n @if (currentView === 'month' || currentView === 'year' || currentView === 'multi-year') {\n <div class=\"mtx-calendar-controls\">\n <button mat-icon-button type=\"button\"\n class=\"mtx-calendar-previous-button\"\n [class.disabled]=\"!_previousEnabled()\"\n [attr.aria-disabled]=\"!_previousEnabled()\"\n [attr.aria-label]=\"_prevButtonLabel\"\n (click)=\"_previousClicked()\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\" />\n </svg>\n </button>\n <div class=\"mtx-calendar-period-button\"\n [@slideCalendar]=\"_calendarState\"\n (@slideCalendar.done)=\"_calendarStateDone()\">\n <strong>{{ _yearPeriodText }}</strong>\n </div>\n <button mat-icon-button type=\"button\"\n class=\"mtx-calendar-next-button\"\n [class.disabled]=\"!_nextEnabled()\"\n [attr.aria-disabled]=\"!_nextEnabled()\"\n [attr.aria-label]=\"_nextButtonLabel\"\n (click)=\"_nextClicked()\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" />\n </svg>\n </button>\n </div>\n }\n\n <div class=\"mtx-calendar-view\" cdkMonitorSubtreeFocus tabindex=\"-1\">\n @switch (currentView) {\n @case ('month') {\n <mtx-month-view\n (_userSelection)=\"_userSelected()\"\n (selectedChange)=\"_dateSelected($event)\"\n [(activeDate)]=\"_activeDate\"\n [dateFilter]=\"_dateFilterForViews\"\n [selected]=\"selected\"\n [type]=\"type\">\n </mtx-month-view>\n }\n @case ('year') {\n <mtx-year-view\n (_userSelection)=\"_userSelected()\"\n (selectedChange)=\"_monthSelected($event)\"\n [(activeDate)]=\"_activeDate\"\n [dateFilter]=\"_dateFilterForViews\"\n [selected]=\"selected\"\n [type]=\"type\">\n </mtx-year-view>\n }\n @case ('multi-year') {\n <mtx-multi-year-view\n (_userSelection)=\"_userSelected()\"\n (selectedChange)=\"_yearSelected($event)\"\n [(activeDate)]=\"_activeDate\"\n [dateFilter]=\"_dateFilterForViews\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [selected]=\"selected\"\n [type]=\"type\">\n </mtx-multi-year-view>\n }\n @default {\n <mtx-time-view\n (_userSelection)=\"_userSelected()\"\n (activeDateChange)=\"_onActiveDateChange($event)\"\n (selectedChange)=\"_timeSelected($event)\"\n [AMPM]=\"_AMPM\"\n (ampmChange)=\"_ampmClicked($event)\"\n [clockView]=\"_clockView\"\n (clockViewChange)=\"_clockView = $event\"\n [twelvehour]=\"twelvehour\"\n [dateFilter]=\"dateFilter\"\n [interval]=\"timeInterval\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [(selected)]=\"_activeDate\"\n [actionsPortal]=\"actionsPortal\"\n [autoFocus]=\"timeInputAutoFocus\"\n [timeInput]=\"timeInput\"\n [preventSameDateTimeSelection]=\"preventSameDateTimeSelection\">\n </mtx-time-view>\n }\n }\n </div>\n</div>\n","import { Directionality } from '@angular/cdk/bidi';\nimport { coerceStringArray } from '@angular/cdk/coercion';\nimport { ESCAPE, hasModifierKey, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayConfig,\n OverlayRef,\n ScrollStrategy,\n} from '@angular/cdk/overlay';\nimport { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport {\n CdkPortalOutlet,\n ComponentPortal,\n ComponentType,\n TemplatePortal,\n} from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport {\n afterNextRender,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n EventEmitter,\n inject,\n InjectionToken,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { merge, Subject, Subscription } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\n\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { MatButton } from '@angular/material/button';\nimport { DatetimeAdapter } from '@ng-matero/extensions/core';\nimport { MtxCalendar } from './calendar';\nimport { mtxDatetimepickerAnimations } from './datetimepicker-animations';\nimport { createMissingDateImplError } from './datetimepicker-errors';\nimport { MtxDatetimepickerFilterType } from './datetimepicker-filtertype';\nimport { MtxDatetimepickerInput } from './datetimepicker-input';\nimport { MtxDatetimepickerIntl } from './datetimepicker-intl';\nimport { MtxCalendarView, MtxDatetimepickerType } from './datetimepicker-types';\n\n/** Used to generate a unique ID for each datetimepicker instance. */\nlet datetimepickerUid = 0;\n\n/** Possible modes for datetimepicker dropdown display. */\nexport type MtxDatetimepickerMode = 'auto' | 'portrait' | 'landscape';\n\n/** Possible positions for the datetimepicker dropdown along the X axis. */\nexport type DatetimepickerDropdownPositionX = 'start' | 'end';\n\n/** Possible positions for the datetimepicker dropdown along the Y axis. */\nexport type DatetimepickerDropdownPositionY = 'above' | 'below';\n\n/** Injection token that determines the scroll handling while the calendar is open. */\nexport const MTX_DATETIMEPICKER_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n 'mtx-datetimepicker-scroll-strategy',\n {\n providedIn: 'root',\n factory: () => {\n const overlay = inject(Overlay);\n return () => overlay.scrollStrategies.reposition();\n },\n }\n);\n\nexport function MTX_DATETIMEPICKER_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n return () => overlay.scrollStrategies.reposition();\n}\n\nexport const MTX_DATETIMEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: MTX_DATETIMEPICKER_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MTX_DATETIMEPICKER_SCROLL_STRATEGY_FACTORY,\n};\n\n/**\n * Component used as the content for the datetimepicker dialog and popup. We use this instead of\n * using MtxCalendar directly as the content so we can control the initial focus. This also gives us\n * a place to put additional features of the popup that are not part of the calendar itself in the\n * future. (e.g. confirmation buttons).\n * @docs-private\n */\n@Component({\n selector: 'mtx-datetimepicker-content',\n templateUrl: 'datetimepicker-content.html',\n styleUrl: 'datetimepicker-content.scss',\n host: {\n 'class': 'mtx-datetimepicker-content',\n '[class]': 'color ? \"mat-\" + color : \"\"',\n '[class.mtx-datetimepicker-content-touch]': 'datetimepicker?.touchUi',\n '[attr.mode]': 'datetimepicker.mode',\n '[@transformPanel]': '_animationState',\n '(@transformPanel.done)': '_animationDone.next()',\n },\n animations: [\n mtxDatetimepickerAnimations.transformPanel,\n mtxDatetimepickerAnimations.fadeInCalendar,\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CdkTrapFocus, MtxCalendar, CdkPortalOutlet, MatButton],\n})\nexport class MtxDatetimepickerContent<D> implements OnInit, AfterViewInit, OnDestroy {\n private _changeDetectorRef = inject(ChangeDetectorRef);\n\n @ViewChild(MtxCalendar, { static: true }) _calendar!: MtxCalendar<D>;\n\n @Input() color: ThemePalette;\n\n datetimepicker!: MtxDatetimepicker<D>;\n\n /** Whether the datetimepicker is above or below the input. */\n _isAbove!: boolean;\n\n /** Current state of the animation. */\n _animationState!: 'enter-dropdown' | 'enter-dialog' | 'void';\n\n /** Emits when an animation has finished. */\n readonly _animationDone = new Subject<void>();\n\n /** Id of the label for the `role=\"dialog\"` element. */\n _dialogLabelId: string | null = null;\n\n /** Portal with projected action buttons. */\n _actionsPortal: TemplatePortal | null = null;\n\n /** The display type of datetimepicker. */\n type: MtxDatetimepickerType = 'datetime';\n\n /** The view of the calendar. */\n view: MtxCalendarView = 'month';\n\n /** Text for the close button. */\n _closeButtonText: string = '';\n\n /** Whether the close button currently has focus. */\n _closeButtonFocused: boolean = false;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n const intl = inject(MtxDatetimepickerIntl);\n\n this._closeButtonText = intl.closeCalendarLabel;\n }\n\n _viewChanged(view: MtxCalendarView): void {\n this.view = view;\n }\n\n ngOnInit() {\n this._animationState = this.datetimepicker.touchUi ? 'enter-dialog' : 'enter-dropdown';\n }\n\n ngAfterViewInit() {\n this._calendar.focusActiveCell();\n }\n\n ngOnDestroy() {\n this._animationDone.complete();\n }\n\n _startExitAnimation() {\n this._animationState = 'void';\n this._changeDetectorRef.markForCheck();\n }\n\n _handleUserSelection() {\n // Delegate closing the overlay to the actions.\n if (!this._actionsPortal) {\n this.datetimepicker.close();\n }\n }\n\n /**\n * Assigns a new portal containing the datetimepicker actions.\n * @param portal Portal with the actions to be assigned.\n * @param forceRerender Whether a re-render of the portal should be triggered.\n */\n _assignActions(portal: TemplatePortal<any> | null, forceRerender: boolean) {\n this._actionsPortal = portal;\n\n if (forceRerender) {\n this._changeDetectorRef.detectChanges();\n }\n }\n}\n\n@Component({\n selector: 'mtx-datetimepicker',\n exportAs: 'mtxDatetimepicker',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n})\nexport class MtxDatetimepicker<D> implements OnDestroy {\n private _overlay = inject(Overlay);\n private _viewContainerRef = inject(ViewContainerRef);\n private _scrollStrategy = inject(MTX_DATETIMEPICKER_SCROLL_STRATEGY);\n private _dateAdapter = inject<DatetimeAdapter<D>>(DatetimeAdapter, { optional: true })!;\n private _dir = inject(Directionality, { optional: true });\n\n private _document = inject(DOCUMENT);\n\n private _injector = inject(Injector);\n\n /** Whether to show multi-year view. */\n @Input({ transform: booleanAttribute }) multiYearSelector = false;\n\n /** Whether the clock uses 12 hour format. */\n @Input({ transform: booleanAttribute }) twelvehour = false;\n\n /** The view that the calendar should start in. */\n @Input() startView: MtxCalendarView = 'month';\n\n /** The display mode of datetimepicker. */\n @Input() mode: MtxDatetimepickerMode = 'auto';\n\n /** Step over minutes. */\n @Input() timeInterval: number = 1;\n\n /** Prevent user to select same date time */\n @Input({ transform: booleanAttribute }) preventSameDateTimeSelection = false;\n\n /** Input for a custom header component */\n @Input() calendarHeaderComponent!: ComponentType<any>;\n\n /**\n * Emits new selected date when selected date changes.\n * @deprecated Switch to the `dateChange` and `dateInput` binding on the input element.\n */\n @Output() selectedChanged = new EventEmitter<D>();\n\n /** Emits when the datetimepicker has been opened. */\n @Output('opened') openedStream: EventEmitter<void> = new EventEmitter<void>();\n\n /** Emits when the datetimepicker has been closed. */\n @Output('closed') closedStream: EventEmitter<void> = new EventEmitter<void>();\n\n /** Emits when the view has been changed. */\n @Output() viewChanged: EventEmitter<MtxCalendarView> = new EventEmitter<MtxCalendarView>();\n\n /** Classes to be passed to the date picker panel. */\n @Input()\n get panelClass(): string | string[] {\n return this._panelClass;\n }\n set panelClass(value: string | string[]) {\n this._panelClass = coerceStringArray(value);\n }\n private _panelClass!: string[];\n\n /** Whether the calendar is open. */\n @Input({ transform: booleanAttribute })\n get opened(): boolean {\n return this._opened;\n }\n set opened(value: boolean) {\n value ? this.open() : this.close();\n }\n private _opened = false;\n\n /** The id for the datetimepicker calendar. */\n id = `mtx-datetimepicker-${datetimepickerUid++}`;\n\n /** Color palette to use on the datetimepicker's calendar. */\n @Input()\n get color(): ThemePalette {\n return (\n this._color ||\n (this.datetimepickerInput ? this.datetimepickerInput.getThemePalette() : undefined)\n );\n }\n set color(value: ThemePalette) {\n this._color = value;\n }\n private _color: ThemePalette;\n\n /** The input element this datetimepicker is associated with. */\n datetimepickerInput!: MtxDatetimepickerInput<D>;\n\n /** Emits when the datetimepicker is disabled. */\n _disabledChange = new Subject<boolean>();\n\n private _validSelected: D | null = null;\n\n /** A reference to the overlay into which we've rendered the calendar. */\n private _overlayRef!: OverlayRef | null;\n\n /** Reference to the component instance rendered in the overlay. */\n private _componentRef!: ComponentRef<MtxDatetimepickerContent<D>> | null;\n\n /** The element that was focused before the datetimepicker was opened. */\n private _focusedElementBeforeOpen: HTMLElement | null = null;\n\n /** Unique class that will be added to the backdrop so that the test harnesses can look it up. */\n private _backdropHarnessClass = `${this.id}-backdrop`;\n\n private _inputStateChanges = Subscription.EMPTY;\n\n /** Portal with projected action buttons. */\n _actionsPortal: TemplatePortal | null = null;\n\n /** Previous selected value. */\n oldValue: D | null = null;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n }\n\n /** The date to open the calendar to initially. */\n @Input()\n get startAt(): D | null {\n // If an explicit startAt is set we start there, otherwise we start at whatever the currently\n // selected value is.\n return this._startAt || (this.datetimepickerInput ? this.datetimepickerInput.value : null);\n }\n set startAt(date: D | null) {\n this._startAt = this._dateAdapter.getValidDateOrNull(date);\n }\n private _startAt!: D | null;\n\n /** The display type of datetimepicker. */\n @Input()\n get type() {\n return this._type;\n }\n set type(value: MtxDatetimepickerType) {\n this._type = value || 'datetime';\n }\n private _type: MtxDatetimepickerType = 'datetime';\n\n /**\n * Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather\n * than a popup and elements have more padding to allow for bigger touch targets.\n */\n @Input({ transform: booleanAttribute }) touchUi = false;\n\n /**\n * Whether the calendar is in time mode. In time mode the calendar clock gets time input\n * elements rather then just clock. When `touchUi` is enabled this will be disabled.\n */\n @Input({ transform: booleanAttribute }) timeInput = false;\n\n /** Whether the time input should be auto-focused after view init. */\n @Input({ transform: booleanAttribute }) timeInputAutoFocus = true;\n\n /** Whether the datetimepicker pop-up should be disabled. */\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n return this._disabled === undefined && this.datetimepickerInput\n ? this.datetimepickerInput.disabled\n : !!this._disabled;\n }\n set disabled(value: boolean) {\n if (value !== this._disabled) {\n this._disabled = value;\n this._disabledChange.next(value);\n }\n }\n private _disabled!: boolean;\n\n /** Preferred position of the datetimepicker in the X axis. */\n @Input()\n xPosition: DatetimepickerDropdownPositionX = 'start';\n\n /** Preferred position of the datetimepicker in the Y axis. */\n @Input()\n yPosition: DatetimepickerDropdownPositionY = 'below';\n\n /**\n * Whether to restore focus to the previously-focused element when the panel is closed.\n * Note that automatic focus restoration is an accessibility feature and it is recommended that\n * you provide your own equivalent, if you decide to turn it off.\n */\n @Input({ transform: booleanAttribute }) restoreFocus = true;\n\n /** The currently selected date. */\n get _selected(): D | null {\n return this._validSelected;\n }\n\n set _selected(value: D | null) {\n this._validSelected = value;\n }\n\n /** The minimum selectable date. */\n get _minDate(): D | null {\n return this.datetimepickerInput && this.datetimepickerInput.min;\n }\n\n /** The maximum selectable date. */\n get _maxDate(): D | null {\n return this.datetimepickerInput && this.datetimepickerInput.max;\n }\n\n get _dateFilter(): (date: D | null, type: MtxDatetimepickerFilterType) => boolean {\n return this.datetimepickerInput && this.datetimepickerInput._dateFilter;\n }\n\n _viewChanged(view: MtxCalendarView): void {\n this.viewChanged.emit(view);\n }\n\n ngOnDestroy() {\n this._destroyOverlay();\n this.close();\n this._inputStateChanges.unsubscribe();\n this._disabledChange.complete();\n }\n\n /** Selects the given date */\n _select(date: D): void {\n this.oldValue = this._selected;\n this._selected = date;\n if (!this._actionsPortal) {\n if (!this._dateAdapter.sameDatetime(this.oldValue, this._selected)) {\n this.selectedChanged.emit(date);\n }\n }\n }\n\n _selectManually(): void {\n if (!this._selected) {\n this._selected = this._dateAdapter.today();\n this.selectedChanged.emit(this._selected);\n } else {\n this.selectedChanged.emit((this._selected as D) || (this.oldValue as D));\n }\n this.close();\n }\n\n _clearSelected(): void {\n this.oldValue = null;\n this._selected = null;\n this.selectedChanged.emit();\n this.close();\n }\n\n /**\n * Register an input with this datetimepicker.\n * @param input The datetimepicker input to register with this datetimepicker.\n */\n _registerInput(input: MtxDatetimepickerInput<D>): void {\n if (this.datetimepickerInput) {\n throw Error('A MtxDatetimepicker can only be associated with a single input.');\n }\n this.datetimepickerInput = input;\n this._inputStateChanges = this.datetimepickerInput._valueChange.subscribe(\n (value: D | null) => (this._selected = value)\n );\n }\n\n /** Open the calendar. */\n open(): void {\n if (this._opened || this.disabled) {\n return;\n }\n if (!this.datetimepickerInput) {\n throw Error('Attempted to open an MtxDatetimepicker with no associated input.');\n }\n\n this._focusedElementBeforeOpen = _getFocusedElementPierceShadowDom();\n this._openOverlay();\n this._opened = true;\n this.openedStream.emit();\n }\n\n /** Close the calendar. */\n close(): void {\n if (!this._opened) {\n return;\n }\n\n const canRestoreFocus =\n this.restoreFocus &&\n this._focusedElementBeforeOpen &&\n typeof this._focusedElementBeforeOpen.focus === 'function';\n\n const completeClose = () => {\n // The `_opened` could've been reset already if\n // we got two events in quick succession.\n if (this._opened) {\n this._opened = false;\n this.closedStream.emit();\n }\n };\n\n if (this._componentRef) {\n const { instance, location } = this._componentRef;\n instance._startExitAnimation();\n instance._animationDone.pipe(take(1)).subscribe(() => {\n const activeElement = this._document.activeElement;\n\n // Since we restore focus after the exit animation, we have to check that\n // the user didn't move focus themselves inside the `close` handler.\n if (\n canRestoreFocus &&\n (!activeElement ||\n activeElement === this._document.activeElement ||\n location.nativeElement.contains(activeElement))\n ) {\n this._focusedElementBeforeOpen!.focus();\n }\n\n this._focusedElementBeforeOpen = null;\n this._destroyOverlay();\n });\n }\n\n if (canRestoreFocus) {\n // Because IE moves focus asynchronously, we can't count on it being restored before we've\n // marked the datetimepicker as closed. If the event fires out of sequence and the element that\n // we're refocusing opens the datetimepicker 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 datetimepicker as closed, async as well.\n setTimeout(completeClose);\n } else {\n completeClose();\n }\n }\n\n /**\n * Forwards relevant values from the datetimepicker to the\n * datetimepicker content inside the overlay.\n */\n protected _forwardContentValues(instance: MtxDatetimepickerContent<D>) {\n instance.datetimepicker = this;\n instance.color = this.color;\n instance._dialogLabelId = this.datetimepickerInput.getOverlayLabelId();\n instance.type = this.type;\n instance.view = this.startView;\n instance._assignActions(this._actionsPortal, false);\n }\n\n /** Opens the overlay with the calendar. */\n private _openOverlay(): void {\n this._destroyOverlay();\n\n const isDialog = this.touchUi;\n const labelId = this.datetimepickerInput.getOverlayLabelId();\n\n const portal = new ComponentPortal<MtxDatetimepickerContent<D>>(\n MtxDatetimepickerContent,\n this._viewContainerRef\n );\n const overlayRef = (this._overlayRef = this._overlay.create(\n new OverlayConfig({\n positionStrategy: isDialog ? this._getDialogStrategy() : this._getDropdownStrategy(),\n hasBackdrop: true,\n backdropClass: [\n isDialog ? 'cdk-overlay-dark-backdrop' : 'mat-overlay-transparent-backdrop',\n this._backdropHarnessClass,\n ],\n direction: this._dir || undefined,\n scrollStrategy: isDialog ? this._overlay.scrollStrategies.block() : this._scrollStrategy(),\n panelClass: `mtx-datetimepicker-${isDialog ? 'dialog' : 'popup'}`,\n })\n ));\n\n const overlayElement = overlayRef.overlayElement;\n overlayElement.setAttribute('role', 'dialog');\n\n if (labelId) {\n overlayElement.setAttribute('aria-labelledby', labelId);\n }\n\n if (isDialog) {\n overlayElement.setAttribute('aria-modal', 'true');\n }\n\n this._getCloseStream(overlayRef).subscribe(event => {\n if (event) {\n event.preventDefault();\n }\n this.close();\n });\n\n this._componentRef = overlayRef.attach(portal);\n this._forwardContentValues(this._componentRef.instance);\n\n // Update the position once the calendar has rendered. Only relevant in dropdown mode.\n if (!isDialog) {\n afterNextRender(\n () => {\n overlayRef.updatePosition();\n },\n { injector: this._injector }\n );\n }\n }\n\n /** Destroys the current overlay. */\n private _destroyOverlay() {\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = this._componentRef = null;\n }\n }\n\n /** Gets a position strategy that will open the calendar as a dropdown. */\n private _getDialogStrategy() {\n return this._overlay.position().global().centerHorizontally().centerVertically();\n }\n\n /** Gets a position strategy that will open the calendar as a dropdown. */\n private _getDropdownStrategy() {\n const strategy = this._overlay\n .position()\n .flexibleConnectedTo(this.datetimepickerInput.getConnectedOverlayOrigin())\n .withTransformOriginOn('.mtx-datetimepicker-content')\n .withFlexibleDimensions(false)\n .withViewportMargin(8)\n .withLockedPosition();\n\n return this._setConnectedPositions(strategy);\n }\n\n /**\n * Sets the positions of the datetimepicker in dropdown mode based on the current configuration.\n */\n private _setConnectedPositions(strategy: FlexibleConnectedPositionStrategy) {\n const primaryX = this.xPosition === 'end' ? 'end' : 'start';\n const secondaryX = primaryX === 'start' ? 'end' : 'start';\n const primaryY = this.yPosition === 'above' ? 'bottom' : 'top';\n const secondaryY = primaryY === 'top' ? 'bottom' : 'top';\n\n return strategy.withPositions([\n {\n originX: primaryX,\n originY: secondaryY,\n overlayX: primaryX,\n overlayY: primaryY,\n },\n {\n originX: primaryX,\n originY: primaryY,\n overlayX: primaryX,\n overlayY: secondaryY,\n },\n {\n originX: secondaryX,\n originY: secondaryY,\n overlayX: secondaryX,\n overlayY: primaryY,\n },\n {\n originX: secondaryX,\n originY: primaryY,\n overlayX: secondaryX,\n overlayY: secondaryY,\n },\n ]);\n }\n\n /** Gets an observable that will emit when the overlay is supposed to be closed. */\n private _getCloseStream(overlayRef: OverlayRef) {\n return merge(\n overlayRef.backdropClick(),\n overlayRef.detachments(),\n overlayRef.keydownEvents().pipe(\n filter(event => {\n // Closing on alt + up is only valid when there's an input associated with the\n // datetimepicker.\n return (\n (event.keyCode === ESCAPE && !hasModifierKey(event)) ||\n (this.datetimepickerInput &&\n hasModifierKey(event, 'altKey') &&\n event.keyCode === UP_ARROW)\n );\n })\n )\n );\n }\n /**\n * Registers a portal containing action buttons with the datetimepicker.\n * @param portal Portal to be registered.\n */\n registerActions(portal: TemplatePortal): void {\n if (this._actionsPortal) {\n throw Error('A MtxDatetimepicker can only be associated with a single actions row.');\n }\n this._actionsPortal = portal;\n this._componentRef?.instance._assignActions(portal, true);\n }\n\n /**\n * Removes a portal containing action buttons from the datetimepicker.\n * @param portal Portal to be removed.\n */\n removeActions(portal: TemplatePortal): void {\n if (portal === this._actionsPortal) {\n this._actionsPortal = null;\n this._componentRef?.instance._assignActions(null, true);\n }\n }\n}\n","<div cdkTrapFocus\n role=\"dialog\"\n [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"_dialogLabelId ?? undefined\"\n [attr.mode]=\"datetimepicker.mode\"\n class=\"mtx-datetimepicker-content-container\"\n [class.mtx-datetimepicker-content-container-with-custom-header]=\"datetimepicker.calendarHeaderComponent\"\n [class.mtx-datetimepicker-content-container-with-actions]=\"_actionsPortal\"\n [class.mtx-datetimepicker-content-container-with-time-input]=\"datetimepicker.timeInput\">\n <mtx-calendar [id]=\"datetimepicker.id\"\n [class]=\"datetimepicker.panelClass\"\n [attr.mode]=\"datetimepicker.mode\"\n [type]=\"datetimepicker.type\"\n [startAt]=\"datetimepicker.startAt\"\n [startView]=\"datetimepicker.startView\"\n [maxDate]=\"datetimepicker._maxDate\"\n [minDate]=\"datetimepicker._minDate\"\n [dateFilter]=\"datetimepicker._dateFilter\"\n [multiYearSelector]=\"datetimepicker.multiYearSelector\"\n [preventSameDateTimeSelection]=\"datetimepicker.preventSameDateTimeSelection\"\n [headerComponent]=\"datetimepicker.calendarHeaderComponent\"\n [timeInterval]=\"datetimepicker.timeInterval\"\n [twelvehour]=\"datetimepicker.twelvehour\"\n [selected]=\"datetimepicker._selected\"\n [timeInput]=\"datetimepicker.timeInput\"\n [actionsPortal]=\"_actionsPortal\"\n [timeInputAutoFocus]=\"datetimepicker.timeInputAutoFocus\"\n (selectedChange)=\"datetimepicker._select($event)\"\n (viewChanged)=\"datetimepicker._viewChanged($event)\"\n (viewChanged)=\"_viewChanged($event)\"\n (_userSelection)=\"_handleUserSelection()\"\n [@fadeInCalendar]=\"'enter'\">\n </mtx-calendar>\n\n <ng-template [cdkPortalOutlet]=\"_actionsPortal\"></ng-template>\n\n <!-- Invisible close button for screen reader users. -->\n <button\n type=\"button\"\n mat-raised-button\n [color]=\"color || 'primary'\"\n class=\"mtx-datetimepicker-close-button\"\n [class.cdk-visually-hidden]=\"!_closeButtonFocused\"\n (focus)=\"_closeButtonFocused = true\"\n (blur)=\"_closeButtonFocused = false\"\n (click)=\"datetimepicker.close()\">{{ _closeButtonText }}</button>\n</div>\n","import { DOWN_ARROW } from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n booleanAttribute,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n Output,\n inject,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport { ThemePalette } from '@angular/material/core';\nimport { MatFormField } from '@angular/material/form-field';\nimport { MAT_INPUT_VALUE_ACCESSOR } from '@angular/material/input';\nimport { Subscription } from 'rxjs';\n\nimport {\n DatetimeAdapter,\n MTX_DATETIME_FORMATS,\n MtxDatetimeFormats,\n} from '@ng-matero/extensions/core';\nimport { MtxDatetimepicker } from './datetimepicker';\nimport { createMissingDateImplError } from './datetimepicker-errors';\nimport { MtxDatetimepickerFilterType } from './datetimepicker-filtertype';\n\nexport const MAT_DATETIMEPICKER_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MtxDatetimepickerInput),\n multi: true,\n};\n\nexport const MAT_DATETIMEPICKER_VALIDATORS: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MtxDatetimepickerInput),\n multi: true,\n};\n\n/**\n * An event used for datetimepicker input and change events. We don't always have access to a native\n * input or change event because the event may have been triggered by the user clicking on the\n * calendar popup. For consistency, we always use MtxDatetimepickerInputEvent instead.\n */\nexport class MtxDatetimepickerInputEvent<D> {\n /** The new value for the target datetimepicker input. */\n value: D | null;\n\n constructor(\n public target: MtxDatetimepickerInput<D>,\n public targetElement: HTMLElement\n ) {\n this.value = this.target.value;\n }\n}\n\n/** Directive used to connect an input to a MtxDatetimepicker. */\n@Directive({\n selector: 'input[mtxDatetimepicker]',\n providers: [\n MAT_DATETIMEPICKER_VALUE_ACCESSOR,\n MAT_DATETIMEPICKER_VALIDATORS,\n { provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MtxDatetimepickerInput },\n ],\n host: {\n '[attr.aria-haspopup]': 'true',\n '[attr.aria-owns]': '(_datetimepicker?.opened && _datetimepicker.id) || null',\n '[attr.min]': 'min ? _dateAdapter.toIso8601(min) : null',\n '[attr.max]': 'max ? _dateAdapter.toIso8601(max) : null',\n '[disabled]': 'disabled',\n '(input)': '_onInput($event.target.value)',\n '(change)': '_onChange()',\n '(blur)': '_onBlur()',\n '(keydown)': '_onKeydown($event)',\n },\n exportAs: 'mtxDatetimepickerInput',\n})\nexport class MtxDatetimepickerInput<D>\n implements AfterContentInit, ControlValueAccessor, OnDestroy, Validator\n{\n private _elementRef = inject(ElementRef);\n private _dateAdapter = inject<DatetimeAdapter<D>>(DatetimeAdapter, { optional: true })!;\n private _dateFormats = inject<MtxDatetimeFormats>(MTX_DATETIME_FORMATS, { optional: true })!;\n private _formField = inject(MatFormField, { optional: true });\n\n _datetimepicker!: MtxDatetimepicker<D>;\n\n _dateFilter!: (date: D | null, type: MtxDatetimepickerFilterType) => boolean;\n\n /** Emits when a `change` event is fired on this `<input>`. */\n @Output() dateChange = new EventEmitter<MtxDatetimepickerInputEvent<D>>();\n\n /** Emits when an `input` event is fired on this `<input>`. */\n @Output() dateInput = new EventEmitter<MtxDatetimepickerInputEvent<D>>();\n\n /** Emits when the value changes (either due to user input or programmatic change). */\n _valueChange = new EventEmitter<D | null>();\n\n /** Emits when the disabled state has changed */\n _disabledChange = new EventEmitter<boolean>();\n\n private _datetimepickerSubscription = Subscription.EMPTY;\n\n private _localeSubscription = Subscription.EMPTY;\n\n /** Whether the last value set on the input was valid. */\n private _lastValueValid = false;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n const _dateAdapter = this._dateAdapter;\n\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DatetimeAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MTX_DATETIME_FORMATS');\n }\n\n // Update the displayed date when the locale changes.\n this._localeSubscription = _dateAdapter.localeChanges.subscribe(() => {\n this.value = this._dateAdapter.deserialize(this.value);\n });\n }\n\n /** The datetimepicker that this input is associated with. */\n @Input()\n set mtxDatetimepicker(value: MtxDatetimepicker<D>) {\n this.registerDatetimepicker(value);\n }\n\n @Input()\n set mtxDatetimepickerFilter(\n filter: (date: D | null, type: MtxDatetimepickerFilterType) => boolean\n ) {\n this._dateFilter = filter;\n this._validatorOnChange();\n }\n\n /** The value of the input. */\n @Input()\n get value(): D | null {\n return this._value;\n }\n set value(value: D | null) {\n value = this._dateAdapter.deserialize(value);\n this._lastValueValid = !value || this._dateAdapter.isValid(value);\n value = this._dateAdapter.getValidDateOrNull(value);\n const oldDate = this.value;\n this._value = value;\n this._formatValue(value);\n\n // use timeout to ensure the datetimepicker is instantiated and we get the correct format\n setTimeout(() => {\n if (!this._dateAdapter.sameDatetime(oldDate, value)) {\n this._valueChange.emit(value);\n }\n });\n }\n private _value!: D | null;\n\n /** The minimum valid date. */\n @Input()\n get min(): D | null {\n return this._min;\n }\n set min(value: D | null) {\n this._min = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n this._validatorOnChange();\n }\n private _min!: D | null;\n\n /** The maximum valid date. */\n @Input()\n get max(): D | null {\n return this._max;\n }\n set max(value: D | null) {\n this._max = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n this._validatorOnChange();\n }\n private _max!: D | null;\n\n /** Whether the datetimepicker-input is disabled. */\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n return !!this._disabled;\n }\n set disabled(value: boolean) {\n if (this._disabled !== value) {\n this._disabled = value;\n this._disabledChange.emit(value);\n }\n }\n private _disabled!: boolean;\n\n _onTouched = () => {};\n\n ngAfterContentInit() {\n if (this._datetimepicker) {\n this._datetimepickerSubscription = this._datetimepicker.selectedChanged.subscribe(\n (selected: D) => {\n this.value = selected;\n this._cvaOnChange(selected);\n this._onTouched();\n this.dateInput.emit(\n new MtxDatetimepickerInputEvent(this, this._elementRef.nativeElement)\n );\n this.dateChange.emit(\n new MtxDatetimepickerInputEvent(this, this._elementRef.nativeElement)\n );\n }\n );\n }\n }\n\n ngOnDestroy() {\n this._datetimepickerSubscription.unsubscribe();\n this._localeSubscription.unsubscribe();\n this._valueChange.complete();\n this._disabledChange.complete();\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n\n validate(c: AbstractControl): ValidationErrors | null {\n return this._validator ? this._validator(c) : null;\n }\n\n /**\n * Gets the element that the datetimepicker popup should be connected to.\n * @return The element to connect the popup to.\n */\n getConnectedOverlayOrigin(): ElementRef {\n return this._formField ? this._formField.getConnectedOverlayOrigin() : this._elementRef;\n }\n\n /** Gets the ID of an element that should be used a description for the calendar overlay. */\n getOverlayLabelId(): string | null {\n if (this._formField) {\n return this._formField.getLabelId();\n }\n\n return this._elementRef.nativeElement.getAttribute('aria-labelledby');\n }\n\n // Implemented as part of ControlValueAccessor\n writeValue(value: D): void {\n this.value = value;\n }\n\n // Implemented as part of ControlValueAccessor\n registerOnChange(fn: (value: any) => void): void {\n this._cvaOnChange = fn;\n }\n\n // Implemented as part of ControlValueAccessor\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n // Implemented as part of ControlValueAccessor\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n _onKeydown(event: KeyboardEvent) {\n if (event.altKey && event.keyCode === DOWN_ARROW) {\n this._datetimepicker.open();\n event.preventDefault();\n }\n }\n\n _onInput(value: string) {\n let date = this._dateAdapter.parse(value, this.getParseFormat());\n this._lastValueValid = !date || this._dateAdapter.isValid(date);\n date = this._dateAdapter.getValidDateOrNull(date);\n this._value = date;\n this._cvaOnChange(date);\n this._valueChange.emit(date);\n this.dateInput.emit(new MtxDatetimepickerInputEvent(this, this._elementRef.nativeElement));\n }\n\n _onChange() {\n this.dateChange.emit(new MtxDatetimepickerInputEvent(this, this._elementRef.nativeElement));\n }\n\n /** Handles blur events on the input. */\n _onBlur() {\n // Reformat the input only if we have a valid value.\n if (this.value) {\n this._formatValue(this.value);\n }\n\n this._onTouched();\n }\n\n private registerDatetimepicker(value: MtxDatetimepicker<D>) {\n if (value) {\n this._datetimepicker = value;\n this._datetimepicker._registerInput(this);\n }\n }\n\n private getDisplayFormat() {\n switch (this._datetimepicker.type) {\n case 'date':\n return this._dateFormats.display.dateInput;\n case 'datetime':\n return this._dateFormats.display.datetimeInput;\n case 'time':\n return this._dateFormats.display.timeInput;\n case 'month':\n return this._dateFormats.display.monthInput;\n case 'year':\n return this._dateFormats.display.yearInput;\n }\n }\n\n private getParseFormat() {\n let parseFormat;\n\n switch (this._datetimepicker.type) {\n case 'date':\n parseFormat = this._dateFormats.parse.dateInput;\n break;\n case 'datetime':\n parseFormat = this._dateFormats.parse.datetimeInput;\n break;\n case 'time':\n parseFormat = this._dateFormats.parse.timeInput;\n break;\n case 'month':\n parseFormat = this._dateFormats.parse.monthInput;\n break;\n case 'year':\n parseFormat = this._dateFormats.parse.yearInput;\n break;\n }\n if (!parseFormat) {\n parseFormat = this._dateFormats.parse.dateInput;\n }\n\n return parseFormat;\n }\n\n private _cvaOnChange: (value: any) => void = () => {};\n\n private _validatorOnChange = () => {};\n\n /** The form control validator for whether the input parses. */\n private _parseValidator: ValidatorFn = (): ValidationErrors | null => {\n return this._lastValueValid\n ? null\n : { mtxDatetimepickerParse: { text: this._elementRef.nativeElement.value } };\n };\n\n /** The form control validator for the min date. */\n private _minValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = this._dateAdapter.getValidDateOrNull(\n this._dateAdapter.deserialize(control.value)\n );\n return !this.min ||\n !controlValue ||\n (this._dateAdapter.compareDatetime(this.min, controlValue) as number) <= 0\n ? null\n : { mtxDatetimepickerMin: { min: this.min, actual: controlValue } };\n };\n\n /** The form control validator for the max date. */\n private _maxValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = this._dateAdapter.getValidDateOrNull(\n this._dateAdapter.deserialize(control.value)\n );\n return !this.max ||\n !controlValue ||\n (this._dateAdapter.compareDatetime(this.max, controlValue) as number) >= 0\n ? null\n : { mtxDatetimepickerMax: { max: this.max, actual: controlValue } };\n };\n\n /** The form control validator for the date filter. */\n private _filterValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = this._dateAdapter.getValidDateOrNull(\n this._dateAdapter.deserialize(control.value)\n );\n return !this._dateFilter ||\n !controlValue ||\n this._dateFilter(controlValue, MtxDatetimepickerFilterType.DATE)\n ? null\n : { mtxDatetimepickerFilter: true };\n };\n\n /** The combined form control validator for this input. */\n private _validator: ValidatorFn | null = Validators.compose([\n this._parseValidator,\n this._minValidator,\n this._maxValidator,\n this._filterValidator,\n ]);\n\n /** Formats a value and sets it on the input element. */\n private _formatValue(value: D | null) {\n this._elementRef.nativeElement.value = value\n ? this._dateAdapter.format(value, this.getDisplayFormat())\n : '';\n }\n\n /** Returns the palette used by the input's form field, if any. */\n getThemePalette(): ThemePalette {\n return this._formField ? this._formField.color : undefined;\n }\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n Directive,\n Input,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n HostAttributeToken,\n} from '@angular/core';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { Observable, Subscription, merge, of as observableOf } from 'rxjs';\n\nimport { MtxDatetimepicker } from './datetimepicker';\nimport { MtxDatetimepickerIntl } from './datetimepicker-intl';\n\n/** Can be used to override the icon of a `mtxDatetimepickerToggle`. */\n@Directive({\n selector: '[mtxDatetimepickerToggleIcon]',\n})\nexport class MtxDatetimepickerToggleIcon {}\n\n@Component({\n selector: 'mtx-datetimepicker-toggle',\n templateUrl: 'datetimepicker-toggle.html',\n styleUrl: './datetimepicker-toggle.scss',\n host: {\n 'class': 'mtx-datetimepicker-toggle',\n '[attr.tabindex]': 'null',\n '[class.mtx-datetimepicker-toggle-active]': 'datetimepicker && datetimepicker.opened',\n '[class.mat-accent]': 'datetimepicker && datetimepicker.color === \"accent\"',\n '[class.mat-warn]': 'datetimepicker && datetimepicker.color === \"warn\"',\n // Used by the test harness to tie this toggle to its datetimepicker.\n '[attr.data-mtx-calendar]': 'datetimepicker ? datetimepicker.id : null',\n // Bind the `click` on the host, rather than the inner `button`, so that we can call\n // `stopPropagation` on it without affecting the user's `click` handlers. We need to stop\n // it so that the input doesn't get focused automatically by the form field (See #21836).\n '(click)': '_open($event)',\n },\n exportAs: 'mtxDatetimepickerToggle',\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIconButton],\n})\nexport class MtxDatetimepickerToggle<D> implements AfterContentInit, OnChanges, OnDestroy {\n _intl = inject(MtxDatetimepickerIntl);\n private _changeDetectorRef = inject(ChangeDetectorRef);\n\n private _stateChanges = Subscription.EMPTY;\n\n /** Datetimepicker instance that the button will toggle. */\n @Input('for') datetimepicker!: MtxDatetimepicker<D>;\n\n /** Tabindex for the toggle. */\n @Input() tabIndex: number | null;\n\n /** Screen-reader label for the button. */\n @Input('aria-label') ariaLabel?: string;\n\n /** Whether the toggle button is disabled. */\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n return this._disabled === undefined ? this.datetimepicker.disabled : !!this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = value;\n }\n private _disabled!: boolean;\n\n /** Whether ripples on the toggle should be disabled. */\n @Input({ transform: booleanAttribute }) disableRipple!: boolean;\n\n /** Custom icon set by the consumer. */\n @ContentChild(MtxDatetimepickerToggleIcon) _customIcon!: MtxDatetimepickerToggleIcon;\n\n /** Underlying button element. */\n @ViewChild('button') _button!: MatButton;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n const defaultTabIndex = inject(new HostAttributeToken('tabindex'), { optional: true });\n const parsedTabIndex = Number(defaultTabIndex);\n this.tabIndex = parsedTabIndex || parsedTabIndex === 0 ? parsedTabIndex : null;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.datetimepicker) {\n this._watchStateChanges();\n }\n }\n\n ngOnDestroy() {\n this._stateChanges.unsubscribe();\n }\n\n ngAfterContentInit() {\n this._watchStateChanges();\n }\n\n _open(event: Event): void {\n if (this.datetimepicker && !this.disabled) {\n this.datetimepicker.open();\n event.stopPropagation();\n }\n }\n\n private _watchStateChanges() {\n const datetimepickerDisabled = this.datetimepicker\n ? this.datetimepicker._disabledChange\n : observableOf();\n const inputDisabled =\n this.datetimepicker && this.datetimepicker.datetimepickerInput\n ? this.datetimepicker.datetimepickerInput._disabledChange\n : observableOf();\n const datetimepickerToggled = this.datetimepicker\n ? merge(this.datetimepicker.openedStream, this.datetimepicker.closedStream)\n : observableOf();\n\n this._stateChanges.unsubscribe();\n this._stateChanges = merge(\n this._intl.changes,\n datetimepickerDisabled as Observable<void>,\n inputDisabled as Observable<void>,\n datetimepickerToggled\n ).subscribe(() => this._changeDetectorRef.markForCheck());\n }\n}\n","<button #button\n mat-icon-button\n type=\"button\"\n [attr.aria-haspopup]=\"datetimepicker ? 'dialog' : null\"\n [attr.aria-label]=\"ariaLabel || _intl.openCalendarLabel\"\n [attr.tabindex]=\"disabled ? -1 : tabIndex\"\n [disabled]=\"disabled\"\n [disableRipple]=\"disableRipple\">\n\n @if (!_customIcon) {\n @switch (datetimepicker.type) {\n @case ('time') {\n <svg\n class=\"mtx-datetimepicker-toggle-default-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\">\n <path d=\"M12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22C6.47,22 2,17.5 2,12A10,10 0 0,1 12,2M12.5,7V12.25L17,14.92L16.25,16.15L11,13V7H12.5Z\" />\n </svg>\n }\n @case ('datetime') {\n <svg\n class=\"mtx-datetimepicker-toggle-default-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\">\n <path d=\"M15,13H16.5V15.82L18.94,17.23L18.19,18.53L15,16.69V13M19,8H5V19H9.67C9.24,18.09 9,17.07 9,16A7,7 0 0,1 16,9C17.07,9 18.09,9.24 19,9.67V8M5,21C3.89,21 3,20.1 3,19V5C3,3.89 3.89,3 5,3H6V1H8V3H16V1H18V3H19A2,2 0 0,1 21,5V11.1C22.24,12.36 23,14.09 23,16A7,7 0 0,1 16,23C14.09,23 12.36,22.24 11.1,21H5M16,11.15A4.85,4.85 0 0,0 11.15,16C11.15,18.68 13.32,20.85 16,20.85A4.85,4.85 0 0,0 20.85,16C20.85,13.32 18.68,11.15 16,11.15Z\" />\n </svg>\n }\n @default {\n <svg\n class=\"mtx-datetimepicker-toggle-default-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\">\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\" />\n </svg>\n }\n }\n }\n\n <ng-content select=\"[mtxDatetimepickerToggleIcon]\"></ng-content>\n</button>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Directive,\n OnDestroy,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { MtxDatetimepicker } from './datetimepicker';\n\n@Directive({\n selector: '[mtxDatetimepickerApply]',\n host: { '(click)': '_datetimepicker._selectManually()' },\n})\nexport class MtxDatetimepickerApply<D> {\n _datetimepicker = inject<MtxDatetimepicker<D>>(MtxDatetimepicker);\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {}\n}\n\n@Directive({\n selector: '[mtxDatetimepickerCancel]',\n host: { '(click)': '_datetimepicker.close()' },\n})\nexport class MtxDatetimepickerCancel<D> {\n _datetimepicker = inject<MtxDatetimepicker<D>>(MtxDatetimepicker);\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {}\n}\n\n@Directive({\n selector: '[mtxDatetimepickerClear]',\n host: { '(click)': '_datetimepicker._clearSelected()' },\n})\nexport class MtxDatetimepickerClear<D> {\n _datetimepicker = inject<MtxDatetimepicker<D>>(MtxDatetimepicker);\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {}\n}\n\n@Component({\n selector: 'mtx-datetimepicker-actions',\n styleUrl: './datetimepicker-actions.scss',\n template: `\n <ng-template>\n <div class=\"mtx-datetimepicker-actions\">\n <ng-content></ng-content>\n </div>\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MtxDatetimepickerActions<D> implements AfterViewInit, OnDestroy {\n private _datetimepicker = inject<MtxDatetimepicker<D>>(MtxDatetimepicker);\n private _viewContainerRef = inject(ViewContainerRef);\n\n @ViewChild(TemplateRef) _template!: TemplateRef<unknown>;\n private _portal!: TemplatePortal;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {}\n\n ngAfterViewInit() {\n this._portal = new TemplatePortal(this._template, this._viewContainerRef);\n this._datetimepicker.registerActions(this._portal);\n }\n\n ngOnDestroy() {\n this._datetimepicker.removeActions(this._portal);\n // Needs to be null checked since we initialize it in `ngAfterViewInit`.\n if (this._portal && this._portal.isAttached) {\n this._portal?.detach();\n }\n }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { MtxCalendar } from './calendar';\nimport { MtxCalendarBody } from './calendar-body';\nimport { MtxClock } from './clock';\nimport {\n MTX_DATETIMEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER,\n MtxDatetimepicker,\n MtxDatetimepickerContent,\n} from './datetimepicker';\nimport { MtxDatetimepickerInput } from './datetimepicker-input';\nimport { MtxDatetimepickerToggle, MtxDatetimepickerToggleIcon } from './datetimepicker-toggle';\nimport { MtxMonthView } from './month-view';\nimport { MtxMultiYearView } from './multi-year-view';\nimport { MtxTimeView, MtxTimeInput } from './time-view';\nimport { MtxYearView } from './year-view';\nimport {\n MtxDatetimepickerActions,\n MtxDatetimepickerApply,\n MtxDatetimepickerCancel,\n MtxDatetimepickerClear,\n} from './datetimepicker-actions';\n\n@NgModule({\n imports: [\n CommonModule,\n OverlayModule,\n A11yModule,\n PortalModule,\n MatButtonModule,\n MtxCalendar,\n MtxCalendarBody,\n MtxClock,\n MtxTimeView,\n MtxTimeInput,\n MtxDatetimepicker,\n MtxDatetimepickerToggle,\n MtxDatetimepickerToggleIcon,\n MtxDatetimepickerInput,\n MtxDatetimepickerContent,\n MtxMonthView,\n MtxYearView,\n MtxMultiYearView,\n MtxDatetimepickerApply,\n MtxDatetimepickerCancel,\n MtxDatetimepickerClear,\n MtxDatetimepickerActions,\n ],\n exports: [\n MtxCalendar,\n MtxCalendarBody,\n MtxClock,\n MtxTimeView,\n MtxDatetimepicker,\n MtxDatetimepickerToggle,\n MtxDatetimepickerToggleIcon,\n MtxDatetimepickerInput,\n MtxDatetimepickerContent,\n MtxMonthView,\n MtxYearView,\n MtxMultiYearView,\n MtxDatetimepickerApply,\n MtxDatetimepickerCancel,\n MtxDatetimepickerClear,\n MtxDatetimepickerActions,\n ],\n providers: [MTX_DATETIMEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER],\n})\nexport class MtxDatetimepickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uniqueIdCounter","observableOf"],"mappings":"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"}
1
+ {"version":3,"file":"mtxDatetimepicker.mjs","sources":["../../../projects/extensions/datetimepicker/datetimepicker-animations.ts","../../../projects/extensions/datetimepicker/datetimepicker-errors.ts","../../../projects/extensions/datetimepicker/datetimepicker-filtertype.ts","../../../projects/extensions/datetimepicker/datetimepicker-intl.ts","../../../projects/extensions/datetimepicker/calendar-body.ts","../../../projects/extensions/datetimepicker/calendar-body.html","../../../projects/extensions/datetimepicker/month-view.ts","../../../projects/extensions/datetimepicker/month-view.html","../../../projects/extensions/datetimepicker/multi-year-view.ts","../../../projects/extensions/datetimepicker/multi-year-view.html","../../../projects/extensions/datetimepicker/clock.ts","../../../projects/extensions/datetimepicker/clock.html","../../../projects/extensions/datetimepicker/time-view.ts","../../../projects/extensions/datetimepicker/time-view.html","../../../projects/extensions/datetimepicker/year-view.ts","../../../projects/extensions/datetimepicker/year-view.html","../../../projects/extensions/datetimepicker/calendar.ts","../../../projects/extensions/datetimepicker/calendar.html","../../../projects/extensions/datetimepicker/datetimepicker.ts","../../../projects/extensions/datetimepicker/datetimepicker-content.html","../../../projects/extensions/datetimepicker/datetimepicker-input.ts","../../../projects/extensions/datetimepicker/datetimepicker-toggle.ts","../../../projects/extensions/datetimepicker/datetimepicker-toggle.html","../../../projects/extensions/datetimepicker/datetimepicker-actions.ts","../../../projects/extensions/datetimepicker/datetimepicker-module.ts","../../../projects/extensions/datetimepicker/mtxDatetimepicker.ts"],"sourcesContent":["import {\n animate,\n AnimationTriggerMetadata,\n keyframes,\n state,\n style,\n transition,\n trigger,\n} from '@angular/animations';\n\n/**\n * Animations used by the Material datetimepicker.\n * @docs-private\n */\nexport const mtxDatetimepickerAnimations: {\n readonly transformPanel: AnimationTriggerMetadata;\n readonly fadeInCalendar: AnimationTriggerMetadata;\n readonly slideCalendar: AnimationTriggerMetadata;\n} = {\n /** Transforms the height of the datetimepicker's calendar. */\n transformPanel: trigger('transformPanel', [\n transition(\n 'void => enter-dropdown',\n animate(\n '120ms cubic-bezier(0, 0, 0.2, 1)',\n keyframes([\n style({ opacity: 0, transform: 'scale(1, 0.8)' }),\n style({ opacity: 1, transform: 'scale(1, 1)' }),\n ])\n )\n ),\n transition(\n 'void => enter-dialog',\n animate(\n '150ms cubic-bezier(0, 0, 0.2, 1)',\n keyframes([\n style({ opacity: 0, transform: 'scale(0.7)' }),\n style({ transform: 'none', opacity: 1 }),\n ])\n )\n ),\n transition('* => void', animate('100ms linear', style({ opacity: 0 }))),\n ]),\n\n /** Fades in the content of the calendar. */\n fadeInCalendar: trigger('fadeInCalendar', [\n state('void', style({ opacity: 0 })),\n state('enter', style({ opacity: 1 })),\n\n // TODO(crisbeto): this animation should be removed since it isn't quite on spec, but we\n // need to keep it until #12440 gets in, otherwise the exit animation will look glitchy.\n transition('void => *', animate('120ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)')),\n ]),\n\n slideCalendar: trigger('slideCalendar', [\n transition('* => left', [\n animate(\n 180,\n keyframes([\n style({ transform: 'translateX(100%)', offset: 0.5 }),\n style({ transform: 'translateX(-100%)', offset: 0.51 }),\n style({ transform: 'translateX(0)', offset: 1 }),\n ])\n ),\n ]),\n transition('* => right', [\n animate(\n 180,\n keyframes([\n style({ transform: 'translateX(-100%)', offset: 0.5 }),\n style({ transform: 'translateX(100%)', offset: 0.51 }),\n style({ transform: 'translateX(0)', offset: 1 }),\n ])\n ),\n ]),\n ]),\n};\n","/** @docs-private */\nexport function createMissingDateImplError(provider: string) {\n return Error(\n `MtxDatetimepicker: No provider found for ${provider}. You must add one of the following ` +\n `to your app config: provideNativeDatetimeAdapter, provideDateFnsDatetimeAdapter,` +\n `provideLuxonDatetimeAdapter, provideMomentDatetimeAdapter, or provide a ` +\n `custom implementation.`\n );\n}\n","export enum MtxDatetimepickerFilterType {\n DATE,\n HOUR,\n MINUTE,\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class MtxDatetimepickerIntl {\n /**\n * Stream to emit from when labels are changed. Use this to notify components when the labels have\n * changed after initialization.\n */\n readonly changes = new Subject<void>();\n\n /** A label for the calendar popup (used by screen readers). */\n calendarLabel = 'Calendar';\n\n /** A label for the button used to open the calendar popup (used by screen readers). */\n openCalendarLabel = 'Open calendar';\n\n /** Label for the button used to close the calendar popup. */\n closeCalendarLabel = 'Close calendar';\n\n /** A label for the previous month button (used by screen readers). */\n prevMonthLabel = 'Previous month';\n\n /** A label for the next month button (used by screen readers). */\n nextMonthLabel = 'Next month';\n\n /** A label for the previous year button (used by screen readers). */\n prevYearLabel = 'Previous year';\n\n /** A label for the next year button (used by screen readers). */\n nextYearLabel = 'Next year';\n\n /** A label for the previous multi-year button (used by screen readers). */\n prevMultiYearLabel = 'Previous 24 years';\n\n /** A label for the next multi-year button (used by screen readers). */\n nextMultiYearLabel = 'Next 24 years';\n\n /** A label for the 'switch to month view' button (used by screen readers). */\n switchToMonthViewLabel = 'Choose date';\n\n /** A label for the 'switch to year view' button (used by screen readers). */\n switchToYearViewLabel = 'Choose month';\n\n /** A label for the 'switch to multi-year view' button (used by screen readers). */\n switchToMultiYearViewLabel = 'Choose month and year';\n\n /** A label for the first date of a range of dates (used by screen readers). */\n startDateLabel = 'Start date';\n\n /** A label for the last date of a range of dates (used by screen readers). */\n endDateLabel = 'End date';\n\n /** A label for the week numbers (used by screen readers). */\n weekNumberLabel(number: number): string {\n return `Week ${number}`;\n }\n\n /** Formats a range of years (used for visuals). */\n formatYearRange(start: string, end: string): string {\n return `${start} \\u2013 ${end}`;\n }\n\n /** Formats a label for a range of years (used by screen readers). */\n formatYearRangeLabel(start: string, end: string): string {\n return `${start} to ${end}`;\n }\n\n /** A label for the 'switch to clock hour view' button (used by screen readers). */\n switchToClockHourViewLabel = 'Choose hour';\n\n /** A label for the 'switch to clock minute view' button (used by screen readers). */\n switchToClockMinuteViewLabel = 'Choose minute';\n\n /** Label used for ok button within the manual time input. */\n okLabel = 'OK';\n\n /** Label used for cancel button within the manual time input. */\n cancelLabel = 'Cancel';\n}\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n inject,\n Injector,\n Input,\n NgZone,\n OnChanges,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\n\nlet uniqueIdCounter = 0;\n\n/**\n * An internal class that represents the data corresponding to a single calendar cell.\n * @docs-private\n */\nexport class MtxCalendarCell {\n readonly id = uniqueIdCounter++;\n\n constructor(\n public value: number,\n public displayValue: string,\n public ariaLabel: string,\n public enabled: boolean,\n public isWeekNumber?: boolean\n ) {}\n}\n\n/**\n * An internal component used to display calendar data in a table.\n * @docs-private\n */\n@Component({\n selector: '[mtx-calendar-body]',\n templateUrl: 'calendar-body.html',\n styleUrl: 'calendar-body.scss',\n host: {\n 'class': 'mtx-calendar-body',\n 'role': 'grid',\n 'aria-readonly': 'true',\n },\n exportAs: 'mtxCalendarBody',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MtxCalendarBody implements OnChanges {\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private _ngZone = inject(NgZone);\n\n private _injector = inject(Injector);\n\n /** The label for the table. (e.g. \"Jan 2017\"). */\n @Input() label!: string;\n\n /** The cells to display in the table. */\n @Input() rows!: MtxCalendarCell[][];\n\n /**\n * The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be\n * maintained even as the table resizes.\n */\n @Input() cellAspectRatio: number = 1;\n\n /** The value in the table that corresponds to today. */\n @Input() todayValue!: number;\n\n /** The value in the table that is currently selected. */\n @Input() selectedValue!: number;\n\n /** The minimum number of free cells needed to fit the label in the first row. */\n @Input() labelMinRequiredCells!: number;\n\n /** The number of columns in the table. */\n @Input() numCols = 7;\n\n /** Whether to allow selection of disabled cells. */\n @Input() allowDisabledSelection = false;\n\n /** The cell number of the active cell in the table. */\n @Input() activeCell = 0;\n\n /** Emits when a new value is selected. */\n @Output() selectedValueChange = new EventEmitter<number>();\n\n /** The number of blank cells to put at the beginning for the first row. */\n _firstRowOffset!: number;\n\n /** Padding for the individual date cells. */\n _cellPadding!: string;\n\n /** Width of an individual cell. */\n _cellWidth!: string;\n\n _cellClicked(cell: MtxCalendarCell): void {\n if (!this.allowDisabledSelection && !cell.enabled) {\n return;\n }\n this.selectedValueChange.emit(cell.value);\n }\n\n _emitActiveDateChange(cell: MtxCalendarCell, event: FocusEvent): void {\n if (cell.enabled) {\n // this.activeDateChange.emit({ value: cell.value, event });\n }\n }\n\n _isActiveCell(rowIndex: number, colIndex: number): boolean {\n let cellNumber = rowIndex * this.numCols + colIndex;\n\n // Account for the fact that the first row may not have as many cells.\n if (rowIndex) {\n cellNumber -= this._firstRowOffset;\n }\n\n return cellNumber === this.activeCell;\n }\n\n /**\n * Tracking function for rows based on their identity. Ideally we would use some sort of\n * key on the row, but that would require a breaking change for the `rows` input. We don't\n * use the built-in identity tracking, because it logs warnings.\n */\n _trackRow = (row: MtxCalendarCell[]) => row;\n\n ngOnChanges(changes: SimpleChanges) {\n const columnChanges = changes['numCols'];\n const { rows, numCols } = this;\n\n if (changes['rows'] || columnChanges) {\n this._firstRowOffset = rows && rows.length && rows[0].length ? numCols - rows[0].length : 0;\n }\n\n if (changes['cellAspectRatio'] || columnChanges || !this._cellPadding) {\n this._cellPadding = `${(50 * this.cellAspectRatio) / numCols}%`;\n }\n\n if (columnChanges || !this._cellWidth) {\n this._cellWidth = `${100 / numCols}%`;\n }\n }\n\n _focusActiveCell(movePreview = true) {\n afterNextRender(\n () => {\n setTimeout(() => {\n const activeCell: HTMLElement | null = this._elementRef.nativeElement.querySelector(\n '.mtx-calendar-body-active'\n );\n\n if (activeCell) {\n activeCell.focus();\n }\n });\n },\n { injector: this._injector }\n );\n }\n}\n","<!--\n If there's not enough space in the first row, create a separate label row. We mark this row as\n aria-hidden because we don't want it to be read out as one of the weeks in the month.\n-->\n@if (_firstRowOffset < labelMinRequiredCells) {\n <tr aria-hidden=\"true\">\n <td\n class=\"mtx-calendar-body-label\"\n [attr.colspan]=\"numCols\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\"\n >\n {{ label }}\n </td>\n </tr>\n}\n\n<!-- Create the first row separately so we can include a special spacer cell. -->\n@for (row of rows; track _trackRow(row); let rowIndex = $index) {\n <tr role=\"row\">\n @if (row[0].isWeekNumber) {\n <th\n class=\"mtx-calendar-body-week-number\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\"\n [attr.aria-label]=\"row[0].ariaLabel\"\n >\n {{ row[0].displayValue }}\n </th>\n }\n\n <!--\n This cell is purely decorative, but we can't put `aria-hidden` or `role=\"presentation\"` on it,\n because it throws off the week days for the rest of the row on NVDA. The aspect ratio of the\n table cells is maintained by setting the top and bottom padding as a percentage of the width\n (a variant of the trick described here: https://www.w3schools.com/howto/howto_css_aspect_ratio.asp).\n -->\n @if (rowIndex === 0 && _firstRowOffset) {\n <td\n class=\"mtx-calendar-body-label\"\n [attr.colspan]=\"_firstRowOffset\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\"\n >\n {{ _firstRowOffset >= labelMinRequiredCells ? label : '' }}\n </td>\n }\n <!--\n Each gridcell in the calendar contains a button, which signals to assistive technology that the\n cell is interactable, as well as the selection state via `aria-pressed`. See #23476 for\n background.\n -->\n @for (item of row; track item.id; let colIndex = $index) {\n @if (!item.isWeekNumber) {\n <td\n role=\"gridcell\"\n class=\"mtx-calendar-body-cell-container\"\n [style.width]=\"_cellWidth\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\"\n [attr.data-mat-row]=\"rowIndex\"\n [attr.data-mat-col]=\"colIndex\"\n >\n <button\n type=\"button\"\n class=\"mtx-calendar-body-cell\"\n [tabindex]=\"_isActiveCell(rowIndex, colIndex) ? 0 : -1\"\n [class.mtx-calendar-body-disabled]=\"!item.enabled\"\n [class.mtx-calendar-body-active]=\"_isActiveCell(rowIndex, colIndex)\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-disabled]=\"!item.enabled || null\"\n (click)=\"_cellClicked(item)\"\n >\n <span\n class=\"mtx-calendar-body-cell-content mat-focus-indicator\"\n [class.mtx-calendar-body-selected]=\"selectedValue === item.value\"\n [class.mtx-calendar-body-today]=\"todayValue === item.value\"\n >\n {{ item.displayValue }}\n </span>\n </button>\n </td>\n }\n }\n </tr>\n}\n","import { Directionality } from '@angular/cdk/bidi';\nimport {\n DOWN_ARROW,\n END,\n ENTER,\n HOME,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n SPACE,\n UP_ARROW,\n} from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport {\n DatetimeAdapter,\n MTX_DATETIME_FORMATS,\n MtxDatetimeFormats,\n} from '@ng-matero/extensions/core';\nimport { MtxCalendarBody, MtxCalendarCell } from './calendar-body';\nimport { mtxDatetimepickerAnimations } from './datetimepicker-animations';\nimport { createMissingDateImplError } from './datetimepicker-errors';\nimport { MtxDatetimepickerIntl } from './datetimepicker-intl';\nimport { MtxDatetimepickerType } from './datetimepicker-types';\n\nconst DAYS_PER_WEEK = 7;\n\nlet uniqueIdCounter = 0;\n\n/**\n * An internal component used to display a single month in the datetimepicker.\n * @docs-private\n */\n@Component({\n selector: 'mtx-month-view',\n templateUrl: 'month-view.html',\n exportAs: 'mtxMonthView',\n animations: [mtxDatetimepickerAnimations.slideCalendar],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MtxCalendarBody],\n})\nexport class MtxMonthView<D> implements AfterContentInit {\n _adapter = inject<DatetimeAdapter<D>>(DatetimeAdapter, { optional: true })!;\n private _dir = inject(Directionality, { optional: true });\n private _dateFormats = inject<MtxDatetimeFormats>(MTX_DATETIME_FORMATS, { optional: true })!;\n private _intl = inject(MtxDatetimepickerIntl);\n\n @Input() type: MtxDatetimepickerType = 'date';\n\n /** A function used to filter which dates are selectable. */\n @Input() dateFilter!: (date: D) => boolean;\n\n /** Whether to show week numbers */\n @Input({ transform: booleanAttribute }) showWeekNumbers = false;\n\n /** Emits when a new date is selected. */\n @Output() selectedChange = new EventEmitter<D>();\n\n /** Emits when any date is selected. */\n @Output() readonly _userSelection = new EventEmitter<void>();\n\n /** Emits when any date is activated. */\n @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** The body of calendar table */\n @ViewChild(MtxCalendarBody) _mtxCalendarBody!: MtxCalendarBody;\n\n /** Grid of calendar cells representing the dates of the month. */\n _weeks!: MtxCalendarCell[][];\n\n /** The number of blank cells in the first row before the 1st of the month. */\n _firstWeekOffset!: number;\n\n /**\n * The date of the month that the currently selected Date falls on.\n * Null if the currently selected Date is in another month.\n */\n _selectedDate!: number | null;\n\n /** The date of the month that today falls on. Null if today is in another month. */\n _todayDate!: number | null;\n\n /** The names of the weekdays. */\n _weekdays: { long: string; narrow: string; id: number }[] = [];\n\n _calendarState!: string;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n if (!this._adapter) {\n throw createMissingDateImplError('DatetimeAdapter');\n }\n\n if (!this._dateFormats) {\n throw createMissingDateImplError('MTX_DATETIME_FORMATS');\n }\n\n this._activeDate = this._adapter.today();\n }\n\n private _activeDate: D;\n\n /**\n * The date to display in this month view (everything other than the month and year is ignored).\n */\n @Input()\n get activeDate(): D {\n return this._activeDate;\n }\n set activeDate(value: D) {\n const oldActiveDate = this._activeDate;\n this._activeDate = value || this._adapter.today();\n if (\n oldActiveDate &&\n this._activeDate &&\n !this._adapter.sameMonthAndYear(oldActiveDate, this._activeDate)\n ) {\n this._init();\n if (this._adapter.isInNextMonth(oldActiveDate, this._activeDate)) {\n this.calendarState('right');\n } else {\n this.calendarState('left');\n }\n }\n }\n\n /** The currently selected date. */\n @Input()\n get selected(): D | null {\n return this._selected;\n }\n set selected(value: D | null) {\n this._selected = value;\n this._selectedDate = this._getDateInCurrentMonth(this.selected);\n }\n private _selected: D | null = null;\n\n ngAfterContentInit(): void {\n this._init();\n }\n\n /** Handles when a new date is selected. */\n _dateSelected(date: number) {\n const dateObject = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n this._adapter.getMonth(this.activeDate),\n date,\n this._adapter.getHour(this.activeDate),\n this._adapter.getMinute(this.activeDate)\n );\n this.selectedChange.emit(dateObject);\n this._activeDate = dateObject;\n\n if (this.type === 'date') {\n this._userSelection.emit();\n }\n }\n\n _calendarStateDone() {\n this._calendarState = '';\n }\n\n /** Initializes this month view. */\n private _init() {\n this._selectedDate = this._getDateInCurrentMonth(this.selected);\n this._todayDate = this._getDateInCurrentMonth(this._adapter.today());\n\n const firstOfMonth = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n this._adapter.getMonth(this.activeDate),\n 1,\n this._adapter.getHour(this.activeDate),\n this._adapter.getMinute(this.activeDate)\n );\n this._firstWeekOffset =\n (DAYS_PER_WEEK +\n this._adapter.getDayOfWeek(firstOfMonth) -\n this._adapter.getFirstDayOfWeek()) %\n DAYS_PER_WEEK;\n\n this._initWeekdays();\n this._createWeekCells();\n }\n\n /** Initializes the weekdays. */\n private _initWeekdays() {\n const firstDayOfWeek = this._adapter.getFirstDayOfWeek();\n const narrowWeekdays = this._adapter.getDayOfWeekNames('narrow');\n const longWeekdays = this._adapter.getDayOfWeekNames('long');\n\n // Rotate the labels for days of the week based on the configured first day of the week.\n const weekdays = longWeekdays.map((long, i) => {\n return { long, narrow: narrowWeekdays[i], id: uniqueIdCounter++ };\n });\n this._weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));\n }\n\n /** Creates MdCalendarCells for the dates in this month. */\n private _createWeekCells() {\n const daysInMonth = this._adapter.getNumDaysInMonth(this.activeDate);\n const dateNames = this._adapter.getDateNames();\n this._weeks = [[]];\n for (let i = 0, cell = this._firstWeekOffset; i < daysInMonth; i++, cell++) {\n if (cell === DAYS_PER_WEEK) {\n this._weeks.push([]);\n cell = 0;\n }\n const date = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n this._adapter.getMonth(this.activeDate),\n i + 1,\n this._adapter.getHour(this.activeDate),\n this._adapter.getMinute(this.activeDate)\n );\n\n if (this.showWeekNumbers && (cell === 0 || i === 0)) {\n const firstDayOfWeek = this._adapter.getFirstDayOfWeek();\n const weekNumber = this._adapter.getWeek(date, firstDayOfWeek);\n const ariaLabel = this._intl.weekNumberLabel(weekNumber);\n this._weeks[this._weeks.length - 1].push(\n new MtxCalendarCell(weekNumber, `${weekNumber}`, ariaLabel, false, true)\n );\n }\n\n const enabled = !this.dateFilter || this.dateFilter(date);\n const ariaLabel = this._adapter.format(date, this._dateFormats.display.dateA11yLabel);\n this._weeks[this._weeks.length - 1].push(\n new MtxCalendarCell(i + 1, dateNames[i], ariaLabel, enabled)\n );\n }\n }\n\n /**\n * Gets the date in this month that the given Date falls on.\n * Returns null if the given Date is in another month.\n */\n private _getDateInCurrentMonth(date: D | null) {\n return date && this._adapter.sameMonthAndYear(date, this.activeDate)\n ? this._adapter.getDate(date)\n : null;\n }\n\n private calendarState(direction: string): void {\n this._calendarState = direction;\n }\n\n /** Handles keydown events on the calendar body when calendar is in month view. */\n _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\n // disabled ones from being selected. This may not be ideal, we should look into whether\n // navigation should skip over disabled dates, and if so, how to implement that efficiently.\n\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._adapter.addCalendarDays(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._adapter.addCalendarDays(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._adapter.addCalendarDays(this._activeDate, -7);\n break;\n case DOWN_ARROW:\n this.activeDate = this._adapter.addCalendarDays(this._activeDate, 7);\n break;\n case HOME:\n this.activeDate = this._adapter.addCalendarDays(\n this._activeDate,\n 1 - this._adapter.getDate(this._activeDate)\n );\n break;\n case END:\n this.activeDate = this._adapter.addCalendarDays(\n this._activeDate,\n this._adapter.getNumDaysInMonth(this._activeDate) -\n this._adapter.getDate(this._activeDate)\n );\n break;\n case PAGE_UP:\n this.activeDate = event.altKey\n ? this._adapter.addCalendarYears(this._activeDate, -1)\n : this._adapter.addCalendarMonths(this._activeDate, -1);\n break;\n case PAGE_DOWN:\n this.activeDate = event.altKey\n ? this._adapter.addCalendarYears(this._activeDate, 1)\n : this._adapter.addCalendarMonths(this._activeDate, 1);\n break;\n case ENTER:\n case SPACE:\n if (!this.dateFilter || this.dateFilter(this._activeDate)) {\n this._dateSelected(this._adapter.getDate(this._activeDate));\n // this._userSelection.emit();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n return;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n if (this._adapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n\n this._focusActiveCell();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell(movePreview?: boolean) {\n this._mtxCalendarBody._focusActiveCell(movePreview);\n }\n\n /** Determines whether the user has the RTL layout direction. */\n private _isRtl() {\n return this._dir && this._dir.value === 'rtl';\n }\n}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n<table class=\"mtx-calendar-table\" role=\"grid\">\n <thead class=\"mtx-calendar-table-header\">\n <tr>\n @if (showWeekNumbers) {\n <th></th>\n }\n @for (day of _weekdays; track day.id) {\n <th [attr.aria-label]=\"day.long\">{{day.narrow}}</th>\n }\n </tr>\n </thead>\n <tbody mtx-calendar-body\n (@slideCalendar.done)=\"_calendarStateDone()\"\n [@slideCalendar]=\"_calendarState\"\n [rows]=\"_weeks\"\n [numCols]=\"showWeekNumbers ? 8 : 7\"\n [todayValue]=\"_todayDate!\"\n [activeCell]=\"_adapter.getDate(activeDate) - 1\"\n [selectedValue]=\"_selectedDate!\"\n (selectedValueChange)=\"_dateSelected($event)\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\"></tbody>\n</table>\n","import {\n DOWN_ARROW,\n END,\n ENTER,\n HOME,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n SPACE,\n UP_ARROW,\n} from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport {\n DatetimeAdapter,\n MTX_DATETIME_FORMATS,\n MtxDatetimeFormats,\n} from '@ng-matero/extensions/core';\nimport { MtxCalendarBody, MtxCalendarCell } from './calendar-body';\nimport { createMissingDateImplError } from './datetimepicker-errors';\nimport { MtxDatetimepickerType } from './datetimepicker-types';\nimport { Directionality } from '@angular/cdk/bidi';\n\nexport const yearsPerPage = 24;\n\nexport const yearsPerRow = 4;\n\n/**\n * An internal component used to display multiple years in the datetimepicker.\n * @docs-private\n */\n@Component({\n selector: 'mtx-multi-year-view',\n templateUrl: 'multi-year-view.html',\n exportAs: 'mtxMultiYearView',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MtxCalendarBody],\n})\nexport class MtxMultiYearView<D> implements AfterContentInit {\n _adapter = inject<DatetimeAdapter<D>>(DatetimeAdapter, { optional: true })!;\n private _dir = inject(Directionality, { optional: true });\n private _dateFormats = inject<MtxDatetimeFormats>(MTX_DATETIME_FORMATS, { optional: true })!;\n\n @Input() type: MtxDatetimepickerType = 'date';\n\n /** A function used to filter which dates are selectable. */\n @Input() dateFilter!: (date: D) => boolean;\n\n /** Emits when a new month is selected. */\n @Output() selectedChange = new EventEmitter<D>();\n\n /** Emits when any date is selected. */\n @Output() readonly _userSelection = new EventEmitter<void>();\n\n /** Emits when any date is activated. */\n @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** The body of calendar table */\n @ViewChild(MtxCalendarBody) _mtxCalendarBody!: MtxCalendarBody;\n\n /** Grid of calendar cells representing the years in the range. */\n _years!: MtxCalendarCell[][];\n\n /** The label for this year range (e.g. \"2000-2020\"). */\n _yearLabel!: string;\n\n /** The year in this range that today falls on. Null if today is in a different range. */\n _todayYear!: number;\n\n /**\n * The year in this range that the selected Date falls on.\n * Null if the selected Date is in a different range.\n */\n _selectedYear!: number | null;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n if (!this._adapter) {\n throw createMissingDateImplError('DatetimeAdapter');\n }\n\n if (!this._dateFormats) {\n throw createMissingDateImplError('MTX_DATETIME_FORMATS');\n }\n\n this._activeDate = this._adapter.today();\n }\n\n /** The date to display in this multi year view */\n @Input()\n get activeDate(): D {\n return this._activeDate;\n }\n set activeDate(value: D) {\n const oldActiveDate = this._activeDate;\n this._activeDate = value || this._adapter.today();\n if (\n oldActiveDate &&\n this._activeDate &&\n !isSameMultiYearView(\n this._adapter,\n oldActiveDate,\n this._activeDate,\n this.minDate,\n this.maxDate\n )\n ) {\n this._init();\n }\n }\n private _activeDate: D;\n\n /** The currently selected date. */\n @Input()\n get selected(): D | null {\n return this._selected;\n }\n set selected(value: D | null) {\n this._selected = value;\n this._selectedYear = this._selected && this._adapter.getYear(this._selected);\n }\n private _selected: D | null = null;\n\n /** The minimum selectable date. */\n @Input()\n get minDate(): D | null {\n return this._minDate;\n }\n set minDate(value: D | null) {\n this._minDate = this._getValidDateOrNull(this._adapter.deserialize(value));\n }\n private _minDate!: D | null;\n\n /** The maximum selectable date. */\n @Input()\n get maxDate(): D | null {\n return this._maxDate;\n }\n set maxDate(value: D | null) {\n this._maxDate = this._getValidDateOrNull(this._adapter.deserialize(value));\n }\n private _maxDate!: D | null;\n\n ngAfterContentInit() {\n this._init();\n }\n\n /** Handles when a new year is selected. */\n _yearSelected(year: number) {\n const month = this._adapter.getMonth(this.activeDate);\n const normalizedDate = this._adapter.createDatetime(year, month, 1, 0, 0);\n\n const dateObject = this._adapter.createDatetime(\n year,\n month,\n Math.min(\n this._adapter.getDate(this.activeDate),\n this._adapter.getNumDaysInMonth(normalizedDate)\n ),\n this._adapter.getHour(this.activeDate),\n this._adapter.getMinute(this.activeDate)\n );\n\n this.selectedChange.emit(dateObject);\n this._activeDate = dateObject;\n\n if (this.type === 'year') {\n this._userSelection.emit();\n }\n }\n\n _getActiveCell(): number {\n return getActiveOffset(this._adapter, this.activeDate, this.minDate, this.maxDate);\n }\n\n /** Initializes this year view. */\n private _init() {\n this._todayYear = this._adapter.getYear(this._adapter.today());\n this._yearLabel = this._adapter.getYearName(this.activeDate);\n\n const activeYear = this._adapter.getYear(this.activeDate);\n\n const minYearOfPage =\n activeYear - getActiveOffset(this._adapter, this.activeDate, this.minDate, this.maxDate);\n\n this._years = [];\n for (let i = 0, row: number[] = []; i < yearsPerPage; i++) {\n row.push(minYearOfPage + i);\n if (row.length === yearsPerRow) {\n this._years.push(row.map(year => this._createCellForYear(year)));\n row = [];\n }\n }\n }\n\n /** Creates an MtxCalendarCell for the given year. */\n private _createCellForYear(year: number) {\n const yearName = this._adapter.getYearName(this._adapter.createDate(year, 0, 1));\n return new MtxCalendarCell(year, yearName, yearName, this._shouldEnableYear(year));\n }\n\n /** Whether the given year is enabled. */\n private _shouldEnableYear(year: number) {\n // disable if the year is greater than maxDate lower than minDate\n if (\n year === undefined ||\n year === null ||\n (this.maxDate && year > this._adapter.getYear(this.maxDate)) ||\n (this.minDate && year < this._adapter.getYear(this.minDate))\n ) {\n return false;\n }\n\n // enable if it reaches here and there's no filter defined\n if (!this.dateFilter) {\n return true;\n }\n\n const firstOfYear = this._adapter.createDate(year, 0, 1);\n\n // If any date in the year is enabled count the year as enabled.\n for (\n let date = firstOfYear;\n this._adapter.getYear(date) === year;\n date = this._adapter.addCalendarDays(date, 1)\n ) {\n if (this.dateFilter(date)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * @param obj The object to check.\n * @returns The given object if it is both a date instance and valid, otherwise null.\n */\n _getValidDateOrNull(obj: any): D | null {\n return this._adapter.isDateInstance(obj) && this._adapter.isValid(obj) ? obj : null;\n }\n\n /** Handles keydown events on the calendar body when calendar is in multi-year view. */\n _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._adapter.addCalendarYears(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._adapter.addCalendarYears(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._adapter.addCalendarYears(this._activeDate, -yearsPerRow);\n break;\n case DOWN_ARROW:\n this.activeDate = this._adapter.addCalendarYears(this._activeDate, yearsPerRow);\n break;\n case HOME:\n this.activeDate = this._adapter.addCalendarYears(\n this._activeDate,\n -getActiveOffset(this._adapter, this._activeDate, this.minDate, this.maxDate)\n );\n break;\n case END:\n this.activeDate = this._adapter.addCalendarYears(\n this._activeDate,\n yearsPerPage -\n getActiveOffset(this._adapter, this._activeDate, this.minDate, this.maxDate) -\n 1\n );\n break;\n case PAGE_UP:\n this.activeDate = this._adapter.addCalendarYears(\n this._activeDate,\n event.altKey ? -yearsPerPage * 10 : -yearsPerPage\n );\n break;\n case PAGE_DOWN:\n this.activeDate = this._adapter.addCalendarYears(\n this._activeDate,\n event.altKey ? yearsPerPage * 10 : yearsPerPage\n );\n break;\n case ENTER:\n case SPACE:\n this._yearSelected(this._adapter.getYear(this._activeDate));\n break;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n if (this._adapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n\n this._focusActiveCell();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell() {\n this._mtxCalendarBody._focusActiveCell();\n }\n\n /** Determines whether the user has the RTL layout direction. */\n private _isRtl() {\n return this._dir && this._dir.value === 'rtl';\n }\n}\n\nexport function isSameMultiYearView<D>(\n dateAdapter: DatetimeAdapter<D>,\n date1: D,\n date2: D,\n minDate: D | null,\n maxDate: D | null\n): boolean {\n const year1 = dateAdapter.getYear(date1);\n const year2 = dateAdapter.getYear(date2);\n const startingYear = getStartingYear(dateAdapter, minDate, maxDate);\n return (\n Math.floor((year1 - startingYear) / yearsPerPage) ===\n Math.floor((year2 - startingYear) / yearsPerPage)\n );\n}\n\n/**\n * When the multi-year view is first opened, the active year will be in view.\n * So we compute how many years are between the active year and the *slot* where our\n * \"startingYear\" will render when paged into view.\n */\nexport function getActiveOffset<D>(\n dateAdapter: DatetimeAdapter<D>,\n activeDate: D,\n minDate: D | null,\n maxDate: D | null\n): number {\n const activeYear = dateAdapter.getYear(activeDate);\n return euclideanModulo(activeYear - getStartingYear(dateAdapter, minDate, maxDate), yearsPerPage);\n}\n\n/**\n * We pick a \"starting\" year such that either the maximum year would be at the end\n * or the minimum year would be at the beginning of a page.\n */\nfunction getStartingYear<D>(\n dateAdapter: DatetimeAdapter<D>,\n minDate: D | null,\n maxDate: D | null\n): number {\n let startingYear = 0;\n if (maxDate) {\n const maxYear = dateAdapter.getYear(maxDate);\n startingYear = maxYear - yearsPerPage + 1;\n } else if (minDate) {\n startingYear = dateAdapter.getYear(minDate);\n }\n return startingYear;\n}\n\n/** Gets remainder that is non-negative, even if first number is negative */\nfunction euclideanModulo(a: number, b: number): number {\n return ((a % b) + b) % b;\n}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n<table class=\"mtx-calendar-table\" role=\"grid\">\n <thead class=\"mtx-calendar-table-header\"></thead>\n <tbody mtx-calendar-body\n [rows]=\"_years\"\n [todayValue]=\"_todayYear\"\n [numCols]=\"4\"\n [cellAspectRatio]=\"4 / 7\"\n [activeCell]=\"_getActiveCell()\"\n [allowDisabledSelection]=\"true\"\n [selectedValue]=\"_selectedYear!\"\n (selectedValueChange)=\"_yearSelected($event)\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\"></tbody>\n</table>\n","import { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n} from '@angular/core';\n\nimport { DatetimeAdapter } from '@ng-matero/extensions/core';\nimport { MtxDatetimepickerFilterType } from './datetimepicker-filtertype';\nimport { MtxAMPM } from './datetimepicker-types';\n\nconst activeEventOptions = normalizePassiveListenerOptions({ passive: false });\n\nexport const CLOCK_RADIUS = 50;\nexport const CLOCK_INNER_RADIUS = 27.5;\nexport const CLOCK_OUTER_RADIUS = 41.25;\nexport const CLOCK_TICK_RADIUS = 7.0833;\n\n/** Possible views for datetimepicker clock. */\nexport type MtxClockView = 'hour' | 'minute';\n\nexport interface ClockCell {\n value: number;\n displayValue: string;\n enabled: boolean;\n top: number;\n left: number;\n fontSize?: string;\n}\n\n/**\n * A clock that is used as part of the datetimepicker.\n * @docs-private\n */\n@Component({\n selector: 'mtx-clock',\n templateUrl: 'clock.html',\n styleUrl: 'clock.scss',\n host: {\n 'role': 'clock',\n 'class': 'mtx-clock',\n '(mousedown)': '_pointerDown($event)',\n '(touchstart)': '_pointerDown($event)',\n },\n exportAs: 'mtxClock',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MtxClock<D> implements AfterContentInit, OnDestroy, OnChanges {\n private _elementRef = inject(ElementRef);\n private _adapter = inject<DatetimeAdapter<D>>(DatetimeAdapter);\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _document = inject(DOCUMENT);\n\n /** A function used to filter which dates are selectable. */\n @Input() dateFilter!: (date: D, type: MtxDatetimepickerFilterType) => boolean;\n\n /** Step over minutes. */\n @Input() interval: number = 1;\n\n @Input() actionButtons: boolean = false;\n\n /** Whether the clock uses 12 hour format. */\n @Input({ transform: booleanAttribute }) twelvehour: boolean = false;\n\n /** Whether the time is now in AM or PM. */\n @Input() AMPM: MtxAMPM = 'AM';\n\n /** Emits when the currently selected date changes. */\n @Output() selectedChange = new EventEmitter<D>();\n\n /** Emits when any date is activated. */\n @Output() activeDateChange = new EventEmitter<D>();\n\n /** Emits when any date is selected. */\n @Output() readonly _userSelection = new EventEmitter<void>();\n\n /** Whether the clock is in hour view. */\n _hourView: boolean = true;\n\n _hours: ClockCell[] = [];\n\n _minutes: ClockCell[] = [];\n\n _selectedHour!: number;\n\n _selectedMinute!: number;\n\n private _timeChanged = false;\n\n /**\n * The date to display in this clock view.\n */\n @Input()\n get activeDate(): D {\n return this._activeDate;\n }\n set activeDate(value: D) {\n const oldActiveDate = this._activeDate;\n this._activeDate = this._adapter.clampDate(value, this.minDate, this.maxDate);\n if (!this._adapter.sameMinute(oldActiveDate, this._activeDate)) {\n this._init();\n }\n }\n private _activeDate!: D;\n\n /** The currently selected date. */\n @Input()\n get selected(): D | null {\n return this._selected;\n }\n set selected(value: D | null) {\n this._selected = this._adapter.getValidDateOrNull(this._adapter.deserialize(value));\n if (this._selected) {\n this.activeDate = this._selected;\n }\n }\n private _selected!: D | null;\n\n /** The minimum selectable date. */\n @Input()\n get minDate(): D | null {\n return this._minDate;\n }\n set minDate(value: D | null) {\n this._minDate = this._adapter.getValidDateOrNull(this._adapter.deserialize(value));\n }\n private _minDate!: D | null;\n\n /** The maximum selectable date. */\n @Input()\n get maxDate(): D | null {\n return this._maxDate;\n }\n set maxDate(value: D | null) {\n this._maxDate = this._adapter.getValidDateOrNull(this._adapter.deserialize(value));\n }\n private _maxDate!: D | null;\n\n /** Whether the clock should be started in hour or minute view. */\n @Input()\n set startView(value: MtxClockView) {\n this._hourView = value !== 'minute';\n }\n\n get _hand() {\n const hour = this._adapter.getHour(this.activeDate);\n this._selectedHour = hour;\n this._selectedMinute = this._adapter.getMinute(this.activeDate);\n let deg = 0;\n let radius = CLOCK_OUTER_RADIUS;\n if (this._hourView) {\n const outer = this._selectedHour > 0 && this._selectedHour < 13;\n radius = outer ? CLOCK_OUTER_RADIUS : CLOCK_INNER_RADIUS;\n if (this.twelvehour) {\n radius = CLOCK_OUTER_RADIUS;\n }\n deg = Math.round(this._selectedHour * (360 / (24 / 2)));\n } else {\n deg = Math.round(this._selectedMinute * (360 / 60));\n }\n return {\n height: `${radius}%`,\n marginTop: `${50 - radius}%`,\n transform: `rotate(${deg}deg)`,\n };\n }\n\n ngAfterContentInit() {\n this.activeDate = this._activeDate || this._adapter.today();\n this._init();\n }\n\n ngOnDestroy() {\n this._removeGlobalEvents();\n }\n\n ngOnChanges(): void {\n this._init();\n }\n\n /** Called when the user has put their pointer down on the clock. */\n private _pointerDown = (event: TouchEvent | MouseEvent) => {\n this._timeChanged = false;\n this.setTime(event);\n this._bindGlobalEvents(event);\n };\n\n /**\n * Called when the user has moved their pointer after\n * starting to drag. Bound on the document level.\n */\n private _pointerMove = (event: TouchEvent | MouseEvent) => {\n if (event.cancelable) {\n event.preventDefault();\n }\n this.setTime(event);\n };\n\n /** Called when the user has lifted their pointer. Bound on the document level. */\n private _pointerUp = (event: TouchEvent | MouseEvent) => {\n if (event.cancelable) {\n event.preventDefault();\n }\n this._removeGlobalEvents();\n\n if (this._timeChanged) {\n this.selectedChange.emit(this.activeDate);\n if (this.actionButtons || !this._hourView) {\n this._userSelection.emit();\n }\n }\n };\n\n /** Binds our global move and end events. */\n private _bindGlobalEvents(triggerEvent: TouchEvent | MouseEvent) {\n // Note that we bind the events to the `document`, because it allows us to capture\n // drag cancel events where the user's pointer is outside the browser window.\n const document = this._document;\n const isTouch = isTouchEvent(triggerEvent);\n const moveEventName = isTouch ? 'touchmove' : 'mousemove';\n const endEventName = isTouch ? 'touchend' : 'mouseup';\n document.addEventListener(moveEventName, this._pointerMove, activeEventOptions);\n document.addEventListener(endEventName, this._pointerUp, activeEventOptions);\n\n if (isTouch) {\n document.addEventListener('touchcancel', this._pointerUp, activeEventOptions);\n }\n }\n\n /** Removes any global event listeners that we may have added. */\n private _removeGlobalEvents() {\n const document = this._document;\n document.removeEventListener('mousemove', this._pointerMove, activeEventOptions);\n document.removeEventListener('mouseup', this._pointerUp, activeEventOptions);\n document.removeEventListener('touchmove', this._pointerMove, activeEventOptions);\n document.removeEventListener('touchend', this._pointerUp, activeEventOptions);\n document.removeEventListener('touchcancel', this._pointerUp, activeEventOptions);\n }\n\n /** Initializes this clock view. */\n private _init() {\n this._hours.length = 0;\n this._minutes.length = 0;\n\n const hourNames = this._adapter.getHourNames();\n const minuteNames = this._adapter.getMinuteNames();\n if (this.twelvehour) {\n const hours: ClockCell[] = [];\n for (let i = 0; i < hourNames.length; i++) {\n const radian = (i / 6) * Math.PI;\n const radius = CLOCK_OUTER_RADIUS;\n\n const hour = i;\n const date = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n this._adapter.getMonth(this.activeDate),\n this._adapter.getDate(this.activeDate),\n hour,\n 0\n );\n\n // Check if the date is enabled, no need to respect the minute setting here\n const enabled =\n (!this.minDate ||\n (this._adapter.compareDatetime(date, this.minDate, false) as number) >= 0) &&\n (!this.maxDate ||\n (this._adapter.compareDatetime(date, this.maxDate, false) as number) <= 0) &&\n (!this.dateFilter || this.dateFilter(date, MtxDatetimepickerFilterType.HOUR));\n\n // display value for twelvehour clock should be from 1-12 not including 0 and not above 12\n hours.push({\n value: i,\n displayValue: i % 12 === 0 ? '12' : hourNames[i % 12],\n enabled,\n top: CLOCK_RADIUS - Math.cos(radian) * radius - CLOCK_TICK_RADIUS,\n left: CLOCK_RADIUS + Math.sin(radian) * radius - CLOCK_TICK_RADIUS,\n });\n }\n\n // filter out AM or PM hours based on AMPM\n if (this.AMPM === 'AM') {\n this._hours = hours.filter(x => x.value < 12);\n } else {\n this._hours = hours.filter(x => x.value >= 12);\n }\n } else {\n for (let i = 0; i < hourNames.length; i++) {\n const radian = (i / 6) * Math.PI;\n const outer = i > 0 && i < 13;\n const radius = outer ? CLOCK_OUTER_RADIUS : CLOCK_INNER_RADIUS;\n const date = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n this._adapter.getMonth(this.activeDate),\n this._adapter.getDate(this.activeDate),\n i,\n 0\n );\n\n // Check if the date is enabled, no need to respect the minute setting here\n const enabled =\n (!this.minDate ||\n (this._adapter.compareDatetime(date, this.minDate, false) as number) >= 0) &&\n (!this.maxDate ||\n (this._adapter.compareDatetime(date, this.maxDate, false) as number) <= 0) &&\n (!this.dateFilter || this.dateFilter(date, MtxDatetimepickerFilterType.HOUR));\n\n this._hours.push({\n value: i,\n displayValue: i === 0 ? '00' : hourNames[i],\n enabled,\n top: CLOCK_RADIUS - Math.cos(radian) * radius - CLOCK_TICK_RADIUS,\n left: CLOCK_RADIUS + Math.sin(radian) * radius - CLOCK_TICK_RADIUS,\n fontSize: i > 0 && i < 13 ? '' : '80%',\n });\n }\n }\n\n for (let i = 0; i < minuteNames.length; i += 5) {\n const radian = (i / 30) * Math.PI;\n const date = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n this._adapter.getMonth(this.activeDate),\n this._adapter.getDate(this.activeDate),\n this._adapter.getHour(this.activeDate),\n i\n );\n const enabled =\n (!this.minDate || (this._adapter.compareDatetime(date, this.minDate) as number) >= 0) &&\n (!this.maxDate || (this._adapter.compareDatetime(date, this.maxDate) as number) <= 0) &&\n (!this.dateFilter || this.dateFilter(date, MtxDatetimepickerFilterType.MINUTE));\n this._minutes.push({\n value: i,\n displayValue: i === 0 ? '00' : minuteNames[i],\n enabled,\n top: CLOCK_RADIUS - Math.cos(radian) * CLOCK_OUTER_RADIUS - CLOCK_TICK_RADIUS,\n left: CLOCK_RADIUS + Math.sin(radian) * CLOCK_OUTER_RADIUS - CLOCK_TICK_RADIUS,\n });\n }\n }\n\n /**\n * Set Time\n * @param event\n */\n private setTime(event: TouchEvent | MouseEvent) {\n const trigger = this._elementRef.nativeElement;\n const triggerRect = trigger.getBoundingClientRect();\n const width = trigger.offsetWidth;\n const height = trigger.offsetHeight;\n const { pageX, pageY } = getPointerPositionOnPage(event);\n const x = width / 2 - (pageX - triggerRect.left - window.pageXOffset);\n const y = height / 2 - (pageY - triggerRect.top - window.pageYOffset);\n\n let radian = Math.atan2(-x, y);\n const unit = Math.PI / (this._hourView ? 6 : this.interval ? 30 / this.interval : 30);\n const z = Math.sqrt(x * x + y * y);\n const outer =\n this._hourView &&\n z > (width * (CLOCK_OUTER_RADIUS / 100) + width * (CLOCK_INNER_RADIUS / 100)) / 2;\n\n if (radian < 0) {\n radian = Math.PI * 2 + radian;\n }\n let value = Math.round(radian / unit);\n\n let date;\n if (this._hourView) {\n if (this.twelvehour) {\n if (this.AMPM === 'AM') {\n value = value === 0 ? 12 : value;\n } else {\n // if we chosen 12 in PM, the value should be 0 for 0:00,\n // else we can safely add 12 to the final value\n value = value === 12 ? 0 : value + 12;\n }\n } else {\n if (value === 12) {\n value = 0;\n }\n value = outer ? (value === 0 ? 12 : value) : value === 0 ? 0 : value + 12;\n }\n\n date = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n this._adapter.getMonth(this.activeDate),\n this._adapter.getDate(this.activeDate),\n value,\n this._adapter.getMinute(this.activeDate)\n );\n } else {\n if (this.interval) {\n value *= this.interval;\n }\n if (value === 60) {\n value = 0;\n }\n date = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n this._adapter.getMonth(this.activeDate),\n this._adapter.getDate(this.activeDate),\n this._adapter.getHour(this.activeDate),\n value\n );\n }\n\n // if there is a dateFilter, check if the date is allowed if it is not then do not set/emit new date\n // https://github.com/ng-matero/extensions/issues/244\n if (\n this.dateFilter &&\n !this.dateFilter(\n date,\n this._hourView ? MtxDatetimepickerFilterType.HOUR : MtxDatetimepickerFilterType.MINUTE\n )\n ) {\n return;\n }\n\n this._timeChanged = true;\n this.activeDate = date;\n this._changeDetectorRef.markForCheck();\n this.activeDateChange.emit(this.activeDate);\n }\n}\n\n/** Returns whether an event is a touch event. */\nfunction isTouchEvent(event: MouseEvent | TouchEvent): event is TouchEvent {\n // This function is called for every pixel that the user has dragged so we need it to be\n // as fast as possible. Since we only bind mouse events and touch events, we can assume\n // that if the event's name starts with `t`, it's a touch event.\n return event.type[0] === 't';\n}\n\n/** Gets the coordinates of a touch or mouse event relative to the document. */\nfunction getPointerPositionOnPage(event: MouseEvent | TouchEvent) {\n let point: { pageX: number; pageY: number };\n\n if (isTouchEvent(event)) {\n // `touches` will be empty for start/end events so we have to fall back to `changedTouches`.\n point = event.touches[0] || event.changedTouches[0];\n } else {\n point = event;\n }\n\n return point;\n}\n","<div class=\"mtx-clock-wrapper\">\n <div class=\"mtx-clock-center\"></div>\n <div class=\"mtx-clock-hand\" [style]=\"_hand\"></div>\n <div class=\"mtx-clock-hours\" [class.active]=\"_hourView\">\n @for (item of _hours; track item.value) {\n <div\n class=\"mtx-clock-cell\"\n [class.mtx-clock-cell-disabled]=\"!item.enabled\"\n [class.mtx-clock-cell-selected]=\"_selectedHour === item.value\"\n [style.fontSize]=\"item.fontSize\"\n [style.left]=\"item.left+'%'\"\n [style.top]=\"item.top+'%'\">{{ item.displayValue }}</div>\n }\n </div>\n <div class=\"mtx-clock-minutes\" [class.active]=\"!_hourView\">\n @for (item of _minutes; track item.value) {\n <div\n class=\"mtx-clock-cell\"\n [class.mtx-clock-cell-disabled]=\"!item.enabled\"\n [class.mtx-clock-cell-selected]=\"_selectedMinute === item.value\"\n [style.left]=\"item.left+'%'\"\n [style.top]=\"item.top+'%'\">{{ item.displayValue }}</div>\n }\n </div>\n</div>\n","import { coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { DOWN_ARROW, ENTER, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { DatetimeAdapter } from '@ng-matero/extensions/core';\nimport { SubscriptionLike } from 'rxjs';\nimport { MtxClock, MtxClockView } from './clock';\nimport { MtxDatetimepickerFilterType } from './datetimepicker-filtertype';\nimport { MtxDatetimepickerIntl } from './datetimepicker-intl';\nimport { MtxAMPM } from './datetimepicker-types';\n\nfunction pad(num: NumberInput, size: number) {\n num = String(num);\n while (num.length < size) num = '0' + num;\n return num;\n}\n\n@Directive({\n selector: 'input.mtx-time-input',\n host: {\n '(blur)': 'blur($event)',\n '(focus)': 'focus($event)',\n },\n exportAs: 'mtxTimeInput',\n})\nexport class MtxTimeInput implements OnDestroy {\n private element = inject(ElementRef);\n private cdr = inject(ChangeDetectorRef);\n\n @Input('timeInterval')\n set timeInterval(value: NumberInput) {\n this._interval = coerceNumberProperty(value);\n }\n private _interval: number = 1;\n\n @Input('timeMin')\n set timeMin(value: NumberInput) {\n this._min = coerceNumberProperty(value);\n }\n private _min = 0;\n\n @Input('timeMax')\n set timeMax(value: NumberInput) {\n this._max = coerceNumberProperty(value);\n }\n private _max = Infinity;\n\n @Input('timeValue')\n set timeValue(value: NumberInput) {\n this._value = coerceNumberProperty(value);\n if (!this.hasFocus) {\n this.writeValue(this._value);\n }\n this.writePlaceholder(this._value);\n }\n\n @Output() timeValueChanged = new EventEmitter<NumberInput>();\n\n private _value: NumberInput;\n\n private keyDownListener = this.keyDownHandler.bind(this);\n private keyPressListener = this.keyPressHandler.bind(this);\n private inputEventListener = this.inputChangedHandler.bind(this);\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n this.inputElement.addEventListener('keydown', this.keyDownListener, {\n passive: true,\n });\n\n // Do not passive since we want to be able to preventDefault()\n this.inputElement.addEventListener('keypress', this.keyPressListener);\n this.inputElement.addEventListener('input', this.inputEventListener, {\n passive: true,\n });\n }\n\n get hasFocus() {\n return this.element.nativeElement && this.element?.nativeElement === document?.activeElement;\n }\n\n get inputElement() {\n return this.element.nativeElement as HTMLInputElement;\n }\n\n // We look here at the placeholder value, because we write '' into the value on focus\n // placeholder should always be up to date with \"currentValue\"\n get valid() {\n // At the start _value is undefined therefore this would result in not valid and\n // make a ugly warning border afterwards we can safely check\n if (this._value) {\n const currentValue = String(this.inputElement.value);\n\n // It can be that currentValue is empty due to we removing the value on focus,\n // if that is the case we should check previous value which should be in the placeholder\n if (currentValue.length) {\n return this._value == this.inputElement.value;\n } else {\n return this._value == this.inputElement.placeholder;\n }\n }\n return true;\n }\n\n get invalid() {\n return !this.valid;\n }\n\n blur() {\n this.writeValue(this._value);\n this.writePlaceholder(this._value);\n }\n\n focus() {\n this.writeValue('');\n }\n\n /**\n * Write value to inputElement\n * @param value NumberInput\n */\n writeValue(value: NumberInput) {\n if (value !== '') {\n this.inputElement.value = pad(value, 2);\n } else {\n this.inputElement.value = '';\n }\n this.cdr.markForCheck();\n }\n\n /**\n * Writes value to placeholder\n * @param value NumberInput\n */\n writePlaceholder(value: NumberInput) {\n this.inputElement.placeholder = pad(value, 2);\n this.cdr.markForCheck();\n }\n\n keyDownHandler(event: KeyboardEvent) {\n if (String(this.inputElement.value).length > 0) {\n let value: number | null = null;\n if (event.keyCode === UP_ARROW) {\n value = coerceNumberProperty(this._value);\n value += this._interval;\n event.stopPropagation();\n } else if (event.keyCode === DOWN_ARROW) {\n value = coerceNumberProperty(this._value);\n value -= this._interval;\n event.stopPropagation();\n }\n\n // if value has changed\n if (typeof value === 'number') {\n this.writeValue(value);\n this.writePlaceholder(value);\n this.clampInputValue();\n this.timeValueChanged.emit(this._value);\n }\n }\n }\n\n /**\n * Prevent non number inputs in the inputElement with the exception of Enter/BackSpace\n * @param event KeyboardEvent\n */\n keyPressHandler(event: KeyboardEvent) {\n const key = event?.key ?? null;\n if (isNaN(Number(key)) && key !== 'Enter') {\n event.preventDefault();\n }\n }\n\n inputChangedHandler() {\n this.clampInputValue();\n this.timeValueChanged.emit(this._value);\n }\n\n clampInputValue() {\n if (this.inputElement?.value === '') {\n return;\n }\n\n const value = coerceNumberProperty(this.inputElement?.value ?? null);\n // if this._min === 0, we should allow 0\n if (value || (this._min === 0 && value === 0)) {\n const clampedValue = Math.min(Math.max(value, this._min), this._max);\n if (clampedValue !== value) {\n this.writeValue(clampedValue);\n this.writePlaceholder(clampedValue);\n }\n this._value = clampedValue;\n }\n }\n\n /**\n * Remove event listeners on destruction\n */\n ngOnDestroy(): void {\n this.inputElement.removeEventListener('keydown', this.keyDownListener);\n this.inputElement.removeEventListener('keypress', this.keyPressListener);\n this.inputElement.removeEventListener('input', this.inputEventListener);\n }\n}\n\n@Component({\n selector: 'mtx-time-view',\n templateUrl: 'time-view.html',\n styleUrl: 'time-view.scss',\n exportAs: 'mtxTime',\n host: {\n 'class': 'mtx-time-view',\n 'tabindex': '0',\n '(keydown)': '_handleCalendarBodyKeydown($event)',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatButton, MtxClock, MtxTimeInput],\n})\nexport class MtxTimeView<D> implements OnChanges, OnDestroy {\n private _adapter = inject<DatetimeAdapter<D>>(DatetimeAdapter);\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _elementRef = inject(ElementRef);\n protected _datetimepickerIntl = inject(MtxDatetimepickerIntl);\n\n /** Emits when the currently selected date changes. */\n @Output() readonly selectedChange = new EventEmitter<D>();\n\n /** Emits when any date changes. */\n @Output() readonly activeDateChange = new EventEmitter<D>();\n\n /** Emits when any date is selected. */\n @Output() readonly _userSelection = new EventEmitter<void>();\n\n /** Emits when AM/PM button are clicked. */\n @Output() readonly ampmChange = new EventEmitter<MtxAMPM>();\n\n /** Emits when AM/PM button are clicked. */\n @Output() readonly clockViewChange = new EventEmitter<MtxClockView>();\n\n /** A function used to filter which dates are selectable. */\n @Input() dateFilter!: (date: D, type: MtxDatetimepickerFilterType) => boolean;\n\n /** Input for action buttons. */\n @Input({ transform: booleanAttribute }) timeInput = false;\n\n /** Step over minutes. */\n @Input() interval = 1;\n\n /** Input for action buttons. */\n @Input() actionsPortal: TemplatePortal | null = null;\n\n /** Prevent user to select same date time */\n @Input({ transform: booleanAttribute }) preventSameDateTimeSelection = false;\n\n /** Whether the time input should be auto-focused after view init. */\n @Input({ transform: booleanAttribute }) autoFocus = true;\n\n @ViewChild('hourInput', { read: ElementRef<HTMLInputElement> })\n protected hourInputElement: ElementRef<HTMLInputElement> | undefined;\n\n @ViewChild('hourInput', { read: MtxTimeInput })\n protected hourInputDirective: MtxTimeInput | undefined;\n\n @ViewChild('minuteInput', { read: ElementRef<HTMLInputElement> })\n protected minuteInputElement: ElementRef<HTMLInputElement> | undefined;\n\n @ViewChild('minuteInput', { read: MtxTimeInput })\n protected minuteInputDirective: MtxTimeInput | undefined;\n\n datetimepickerIntlChangesSubscription: SubscriptionLike;\n\n /** Whether the clock uses 12 hour format. */\n @Input({ transform: booleanAttribute }) twelvehour = false;\n\n /** Whether the time is now in AM or PM. */\n @Input() AMPM: MtxAMPM = 'AM';\n\n /** The date to display in this clock view. */\n @Input()\n get activeDate(): D {\n return this._activeDate;\n }\n set activeDate(value: D) {\n this._activeDate = this._adapter.clampDate(value, this.minDate, this.maxDate);\n }\n private _activeDate!: D;\n\n /** The currently selected date. */\n @Input()\n get selected(): D | null {\n return this._selected;\n }\n set selected(value: D | null) {\n this._selected = this._adapter.getValidDateOrNull(this._adapter.deserialize(value));\n if (this._selected) {\n this.activeDate = this._selected;\n }\n }\n private _selected!: D | null;\n\n /** The minimum selectable date. */\n @Input()\n get minDate(): D | null {\n return this._minDate;\n }\n set minDate(value: D | null) {\n this._minDate = this._adapter.getValidDateOrNull(this._adapter.deserialize(value));\n }\n private _minDate!: D | null;\n\n /** The maximum selectable date. */\n @Input()\n get maxDate(): D | null {\n return this._maxDate;\n }\n set maxDate(value: D | null) {\n this._maxDate = this._adapter.getValidDateOrNull(this._adapter.deserialize(value));\n }\n private _maxDate!: D | null;\n\n /** Whether the clock should be started in hour or minute view. */\n @Input()\n get clockView() {\n return this._clockView;\n }\n set clockView(value: MtxClockView) {\n this._clockView = value;\n }\n /** Whether the clock is in hour view. */\n private _clockView: MtxClockView = 'hour';\n\n get isHourView() {\n return this._clockView === 'hour';\n }\n\n get isMinuteView() {\n return this._clockView === 'hour';\n }\n\n get hour() {\n if (!this.activeDate) {\n if (this.twelvehour) {\n return '12';\n } else {\n return '00';\n }\n }\n\n const hour = Number(this._adapter.getHour(this.activeDate));\n if (!this.twelvehour) {\n return this.prefixWithZero(hour);\n }\n\n if (hour === 0) {\n return '12';\n } else {\n return this.prefixWithZero(hour > 12 ? hour - 12 : hour);\n }\n }\n\n get minute() {\n if (this.activeDate) {\n return this.prefixWithZero(this._adapter.getMinute(this.activeDate));\n }\n\n return '00';\n }\n\n prefixWithZero(value: number) {\n if (value < 10) {\n return '0' + String(value);\n }\n\n return String(value);\n }\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n this.datetimepickerIntlChangesSubscription = this._datetimepickerIntl.changes.subscribe(() => {\n this._changeDetectorRef.detectChanges();\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n // when clockView changes by input we should focus the correct input\n if (changes.clockView) {\n if (changes.clockView.currentValue !== changes.clockView.previousValue && this.autoFocus) {\n this._focusInputElement();\n }\n }\n }\n\n ngOnDestroy(): void {\n if (this.datetimepickerIntlChangesSubscription) {\n this.datetimepickerIntlChangesSubscription.unsubscribe();\n }\n }\n\n /** Handles keydown events on the calendar body when calendar is in clock view. */\n _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n const oldActiveDate = this._activeDate;\n\n switch (event.keyCode) {\n case UP_ARROW:\n this.selected =\n this._clockView === 'hour'\n ? this._adapter.addCalendarHours(this._activeDate, 1)\n : this._adapter.addCalendarMinutes(this._activeDate, this.interval);\n break;\n case DOWN_ARROW:\n this.selected =\n this._clockView === 'hour'\n ? this._adapter.addCalendarHours(this._activeDate, -1)\n : this._adapter.addCalendarMinutes(this._activeDate, -this.interval);\n break;\n case ENTER:\n case SPACE:\n if (this.timeInput && event.keyCode == SPACE) {\n return;\n }\n if (this.clockView == 'hour') {\n this._timeSelected(this._activeDate);\n this._focusInputElement();\n } else {\n this._userSelection.emit();\n }\n return;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n this.selectedChange.emit(this.selected);\n\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n _focusInputElement() {\n if (this.clockView === 'hour') {\n this.hourInputElement?.nativeElement.focus();\n } else {\n this.minuteInputElement?.nativeElement.focus();\n }\n }\n\n _handleHourInputChange(value: NumberInput) {\n const hour = coerceNumberProperty(value);\n if (hour || hour === 0) {\n const newValue = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n this._adapter.getMonth(this.activeDate),\n this._adapter.getDate(this.activeDate),\n this._updateHourForAmPm(hour),\n this._adapter.getMinute(this.activeDate)\n );\n\n this._activeDate = this._adapter.clampDate(newValue, this.minDate, this.maxDate);\n this.activeDateChange.emit(this.activeDate);\n\n if (this.actionsPortal) {\n this.selectedChange.emit(this.activeDate);\n }\n\n // If previously we did set [mtxValue]=\"13\" and the input changed to 6, and the clamping\n // will make it \"13\" again then the hourInputDirective will not have been updated\n // since \"13\" === \"13\" same reference so no change detected by directly setting it within\n // this handler, we handle this usecase\n if (this.hourInputDirective) {\n this.hourInputDirective.timeValue = this.hour;\n }\n }\n }\n\n _updateHourForAmPm(value: number) {\n if (!this.twelvehour) {\n return value;\n }\n\n // value should be between 1-12\n if (this.AMPM === 'AM') {\n if (value === 0 || value === 12) {\n return 0;\n }\n return value;\n }\n // PM\n else {\n if (value === 0 || value === 12) {\n return 12;\n }\n\n // other cases, we should add 12 to the value aka 3:00 PM = 3 + 12 = 15:00\n return value + 12;\n }\n }\n\n _handleMinuteInputChange(value: NumberInput) {\n const minute = coerceNumberProperty(value);\n if (minute || minute === 0) {\n const newValue = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n this._adapter.getMonth(this.activeDate),\n this._adapter.getDate(this.activeDate),\n this._adapter.getHour(this.activeDate),\n minute\n );\n\n this._activeDate = this._adapter.clampDate(newValue, this.minDate, this.maxDate);\n this.activeDateChange.emit(this.activeDate);\n\n if (this.actionsPortal) {\n this.selectedChange.emit(this.activeDate);\n }\n\n // If previously we did set [mtxValue]=\"40\" and the input changed to 30, and the clamping\n // will make it \"40\" again then the minuteInputDirective will not have been updated\n // since \"40\" === \"40\" same reference so no change detected by directly setting it within\n // this handler, we handle this usecase\n if (this.minuteInputDirective) {\n this.minuteInputDirective.timeValue = this.minute;\n }\n }\n }\n\n _handleFocus(clockView: MtxClockView) {\n this.clockView = clockView;\n this.clockViewChange.emit(clockView);\n }\n\n _dialTimeSelected(date: D): void {\n if (this.clockView === 'hour') {\n this.clockView = 'minute';\n this._activeDate = date;\n }\n if (!this._adapter.sameDatetime(date, this.selected) || !this.preventSameDateTimeSelection) {\n this.selectedChange.emit(date);\n }\n }\n\n _timeSelected(date: D): void {\n if (this.timeInput) {\n if (this.clockView === 'hour') {\n this.clockView = 'minute';\n }\n this._activeDate = this.selected = date;\n } else {\n this._dialTimeSelected(date);\n }\n this.clockViewChange.emit(this.clockView);\n }\n\n _onActiveDateChange(date: D) {\n this._activeDate = date;\n this.activeDateChange.emit(date);\n }\n\n _handleSelection() {\n if (this.timeInput) {\n if (this.actionsPortal && this._selected) {\n this.selectedChange.emit(this._selected);\n }\n } else {\n this._userSelection.emit();\n }\n }\n\n _handleOk() {\n if (this._selected) {\n this.selectedChange.emit(this._selected);\n }\n this._userSelection.emit();\n }\n\n _handleCancel() {\n this._userSelection.emit();\n }\n\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell() {\n if (this.timeInput) {\n if (this.autoFocus) {\n this._focusInputElement();\n }\n } else {\n this._elementRef.nativeElement.focus();\n }\n }\n}\n","@if (timeInput) {\n <div class=\"mtx-time-input-wrapper\">\n <div class=\"mtx-time-input-inner\">\n <input class=\"mtx-time-input\"\n [class.mtx-time-input-active]=\"clockView === 'hour'\"\n [class.mtx-time-input-warning]=\"!hourInput.valid\"\n #hourInput=\"mtxTimeInput\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [timeMin]=\"twelvehour ? 1 : 0\"\n [timeMax]=\"twelvehour ? 12 : 23\"\n [timeValue]=\"hour\"\n (timeValueChanged)=\"_handleHourInputChange($event)\"\n (focus)=\"_handleFocus('hour')\" />\n\n <div class=\"mtx-time-seperator\">:</div>\n\n <input class=\"mtx-time-input\"\n [class.mtx-time-input-active]=\"clockView === 'minute'\"\n [class.mtx-time-input-warning]=\"!minuteInput.valid\"\n #minuteInput=\"mtxTimeInput\"\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"2\"\n [timeMin]=\"0\"\n [timeMax]=\"59\"\n [timeValue]=\"minute\"\n (timeValueChanged)=\"_handleMinuteInputChange($event)\"\n [timeInterval]=\"interval\"\n (focus)=\"_handleFocus('minute')\" />\n\n @if (twelvehour) {\n <div class=\"mtx-time-ampm\">\n <button mat-button type=\"button\" class=\"mtx-time-am\"\n [class.mtx-time-ampm-active]=\"AMPM === 'AM'\" aria-label=\"AM\"\n (keydown)=\"$event.stopPropagation()\"\n (click)=\"ampmChange.emit('AM')\">AM</button>\n <button mat-button type=\"button\" class=\"mtx-time-pm\"\n [class.mtx-time-ampm-active]=\"AMPM === 'PM'\" aria-label=\"PM\"\n (keydown)=\"$event.stopPropagation()\"\n (click)=\"ampmChange.emit('PM')\">PM</button>\n </div>\n }\n </div>\n </div>\n}\n\n<mtx-clock\n (selectedChange)=\"_timeSelected($event)\"\n (activeDateChange)=\"_onActiveDateChange($event)\"\n (_userSelection)=\"_handleSelection()\"\n [AMPM]=\"AMPM\"\n [dateFilter]=\"dateFilter\"\n [actionButtons]=\"!!actionsPortal\"\n [interval]=\"interval\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [selected]=\"selected\"\n [startView]=\"clockView\"\n [twelvehour]=\"twelvehour\">\n</mtx-clock>\n\n@if (timeInput && !actionsPortal) {\n <div class=\"mtx-time-button-wrapper\">\n <button class=\"mtx-time-cancel-button\" mat-button type=\"button\" (click)=\"_handleCancel()\">\n {{ _datetimepickerIntl.cancelLabel }}\n </button>\n <button class=\"mtx-time-ok-button\" mat-button type=\"button\" (click)=\"_handleOk()\"\n [disabled]=\"minuteInputDirective?.invalid || hourInputDirective?.invalid\">\n {{ _datetimepickerIntl.okLabel }}\n </button>\n </div>\n}\n","import {\n DOWN_ARROW,\n END,\n ENTER,\n HOME,\n LEFT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n RIGHT_ARROW,\n SPACE,\n UP_ARROW,\n} from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport {\n DatetimeAdapter,\n MTX_DATETIME_FORMATS,\n MtxDatetimeFormats,\n} from '@ng-matero/extensions/core';\nimport { MtxCalendarBody, MtxCalendarCell } from './calendar-body';\nimport { createMissingDateImplError } from './datetimepicker-errors';\nimport { MtxDatetimepickerType } from './datetimepicker-types';\nimport { Directionality } from '@angular/cdk/bidi';\n\n/**\n * An internal component used to display a single year in the datetimepicker.\n * @docs-private\n */\n@Component({\n selector: 'mtx-year-view',\n templateUrl: 'year-view.html',\n exportAs: 'mtxYearView',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MtxCalendarBody],\n})\nexport class MtxYearView<D> implements AfterContentInit {\n _adapter = inject<DatetimeAdapter<D>>(DatetimeAdapter, { optional: true })!;\n private _dir = inject(Directionality, { optional: true });\n private _dateFormats = inject<MtxDatetimeFormats>(MTX_DATETIME_FORMATS, { optional: true })!;\n\n @Input() type: MtxDatetimepickerType = 'date';\n\n /** A function used to filter which dates are selectable. */\n @Input() dateFilter!: (date: D) => boolean;\n\n /** Emits when a new month is selected. */\n @Output() selectedChange = new EventEmitter<D>();\n\n /** Emits when any date is selected. */\n @Output() readonly _userSelection = new EventEmitter<void>();\n\n /** Emits when any date is activated. */\n @Output() readonly activeDateChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** The body of calendar table */\n @ViewChild(MtxCalendarBody) _mtxCalendarBody!: MtxCalendarBody;\n\n /** Grid of calendar cells representing the months of the year. */\n _months!: MtxCalendarCell[][];\n\n /** The label for this year (e.g. \"2017\"). */\n _yearLabel!: string;\n\n /** The month in this year that today falls on. Null if today is in a different year. */\n _todayMonth!: number | null;\n\n /**\n * The month in this year that the selected Date falls on.\n * Null if the selected Date is in a different year.\n */\n _selectedMonth!: number | null;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n if (!this._adapter) {\n throw createMissingDateImplError('DatetimeAdapter');\n }\n\n if (!this._dateFormats) {\n throw createMissingDateImplError('MTX_DATETIME_FORMATS');\n }\n\n this._activeDate = this._adapter.today();\n }\n\n /** The date to display in this year view (everything other than the year is ignored). */\n @Input()\n get activeDate(): D {\n return this._activeDate;\n }\n set activeDate(value: D) {\n const oldActiveDate = this._activeDate;\n this._activeDate = value || this._adapter.today();\n if (\n oldActiveDate &&\n this._activeDate &&\n !this._adapter.sameYear(oldActiveDate, this._activeDate)\n ) {\n this._init();\n }\n }\n private _activeDate: D;\n\n /** The currently selected date. */\n @Input()\n get selected(): D | null {\n return this._selected;\n }\n set selected(value: D | null) {\n this._selected = value;\n this._selectedMonth = this._getMonthInCurrentYear(this.selected);\n }\n private _selected: D | null = null;\n\n ngAfterContentInit() {\n this._init();\n }\n\n /** Handles when a new month is selected. */\n _monthSelected(month: number) {\n const normalizedDate = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n month,\n 1,\n 0,\n 0\n );\n\n const dateObject = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n month,\n Math.min(\n this._adapter.getDate(this.activeDate),\n this._adapter.getNumDaysInMonth(normalizedDate)\n ),\n this._adapter.getHour(this.activeDate),\n this._adapter.getMinute(this.activeDate)\n );\n\n this.selectedChange.emit(dateObject);\n this._activeDate = dateObject;\n\n if (this.type === 'month') {\n this._userSelection.emit();\n }\n }\n\n /** Initializes this month view. */\n private _init() {\n this._selectedMonth = this._getMonthInCurrentYear(this.selected);\n this._todayMonth = this._getMonthInCurrentYear(this._adapter.today());\n this._yearLabel = this._adapter.getYearName(this.activeDate);\n\n const monthNames = this._adapter.getMonthNames('short');\n // First row of months only contains 5 elements so we can fit the year label on the same row.\n this._months = [\n [0, 1, 2, 3],\n [4, 5, 6, 7],\n [8, 9, 10, 11],\n ].map(row => row.map(month => this._createCellForMonth(month, monthNames[month])));\n }\n\n /**\n * Gets the month in this year that the given Date falls on.\n * Returns null if the given Date is in another year.\n */\n private _getMonthInCurrentYear(date: D | null) {\n return date && this._adapter.sameYear(date, this.activeDate)\n ? this._adapter.getMonth(date)\n : null;\n }\n\n /** Creates an MdCalendarCell for the given month. */\n private _createCellForMonth(month: number, monthName: string) {\n const ariaLabel = this._adapter.format(\n this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n month,\n 1,\n this._adapter.getHour(this.activeDate),\n this._adapter.getMinute(this.activeDate)\n ),\n this._dateFormats.display.monthYearA11yLabel\n );\n return new MtxCalendarCell(\n month,\n monthName.toLocaleUpperCase(),\n ariaLabel,\n this._isMonthEnabled(month)\n );\n }\n\n /** Whether the given month is enabled. */\n private _isMonthEnabled(month: number) {\n if (!this.dateFilter) {\n return true;\n }\n\n const firstOfMonth = this._adapter.createDatetime(\n this._adapter.getYear(this.activeDate),\n month,\n 1,\n this._adapter.getHour(this.activeDate),\n this._adapter.getMinute(this.activeDate)\n );\n\n // If any date in the month is enabled count the month as enabled.\n for (\n let date = firstOfMonth;\n this._adapter.getMonth(date) === month;\n date = this._adapter.addCalendarDays(date, 1)\n ) {\n if (this.dateFilter(date)) {\n return true;\n }\n }\n\n return false;\n }\n\n /** Handles keydown events on the calendar body when calendar is in year view. */\n _handleCalendarBodyKeydown(event: KeyboardEvent): void {\n // TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent\n // disabled ones from being selected. This may not be ideal, we should look into whether\n // navigation should skip over disabled dates, and if so, how to implement that efficiently.\n\n const oldActiveDate = this._activeDate;\n const isRtl = this._isRtl();\n\n switch (event.keyCode) {\n case LEFT_ARROW:\n this.activeDate = this._adapter.addCalendarMonths(this._activeDate, isRtl ? 1 : -1);\n break;\n case RIGHT_ARROW:\n this.activeDate = this._adapter.addCalendarMonths(this._activeDate, isRtl ? -1 : 1);\n break;\n case UP_ARROW:\n this.activeDate = this._adapter.addCalendarMonths(this._activeDate, -4);\n break;\n case DOWN_ARROW:\n this.activeDate = this._adapter.addCalendarMonths(this._activeDate, 4);\n break;\n case HOME:\n this.activeDate = this._adapter.addCalendarMonths(\n this._activeDate,\n -this._adapter.getMonth(this._activeDate)\n );\n break;\n case END:\n this.activeDate = this._adapter.addCalendarMonths(\n this._activeDate,\n 11 - this._adapter.getMonth(this._activeDate)\n );\n break;\n case PAGE_UP:\n this.activeDate = this._adapter.addCalendarYears(this._activeDate, event.altKey ? -10 : -1);\n break;\n case PAGE_DOWN:\n this.activeDate = this._adapter.addCalendarYears(this._activeDate, event.altKey ? 10 : 1);\n break;\n case ENTER:\n case SPACE:\n this._monthSelected(this._adapter.getMonth(this._activeDate));\n break;\n default:\n // Don't prevent default or focus active cell on keys that we don't explicitly handle.\n return;\n }\n\n if (this._adapter.compareDate(oldActiveDate, this.activeDate)) {\n this.activeDateChange.emit(this.activeDate);\n }\n\n this._focusActiveCell();\n // Prevent unexpected default actions such as form submission.\n event.preventDefault();\n }\n\n /** Focuses the active cell after the microtask queue is empty. */\n _focusActiveCell() {\n this._mtxCalendarBody._focusActiveCell();\n }\n\n /** Determines whether the user has the RTL layout direction. */\n private _isRtl() {\n return this._dir && this._dir.value === 'rtl';\n }\n}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n<table class=\"mtx-calendar-table\" role=\"grid\">\n <thead class=\"mtx-calendar-table-header\"></thead>\n <tbody mtx-calendar-body\n [label]=\"_yearLabel\"\n [rows]=\"_months\"\n [todayValue]=\"_todayMonth!\"\n [labelMinRequiredCells]=\"2\"\n [numCols]=\"4\"\n [cellAspectRatio]=\"4 / 7\"\n [activeCell]=\"_adapter.getMonth(activeDate)\"\n [selectedValue]=\"_selectedMonth!\"\n (selectedValueChange)=\"_monthSelected($event)\"\n [allowDisabledSelection]=\"true\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\"></tbody>\n</table>\n","import { CdkMonitorFocus } from '@angular/cdk/a11y';\nimport {\n CdkPortalOutlet,\n ComponentPortal,\n ComponentType,\n Portal,\n TemplatePortal,\n} from '@angular/cdk/portal';\nimport {\n AfterContentInit,\n AfterViewChecked,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n NgZone,\n OnDestroy,\n Output,\n ViewChild,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n} from '@angular/core';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport {\n DatetimeAdapter,\n MTX_DATETIME_FORMATS,\n MtxDatetimeFormats,\n} from '@ng-matero/extensions/core';\nimport { Subscription } from 'rxjs';\nimport { MtxClockView } from './clock';\nimport { mtxDatetimepickerAnimations } from './datetimepicker-animations';\nimport { createMissingDateImplError } from './datetimepicker-errors';\nimport { MtxDatetimepickerFilterType } from './datetimepicker-filtertype';\nimport { MtxDatetimepickerIntl } from './datetimepicker-intl';\nimport { MtxAMPM, MtxCalendarView, MtxDatetimepickerType } from './datetimepicker-types';\nimport { MtxMonthView } from './month-view';\nimport {\n MtxMultiYearView,\n getActiveOffset,\n isSameMultiYearView,\n yearsPerPage,\n} from './multi-year-view';\nimport { MtxTimeView } from './time-view';\nimport { MtxYearView } from './year-view';\n\n/**\n * A calendar that is used as part of the datetimepicker.\n * @docs-private\n */\n@Component({\n selector: 'mtx-calendar',\n templateUrl: 'calendar.html',\n styleUrl: 'calendar.scss',\n host: {\n 'class': 'mtx-calendar',\n '[class.mtx-calendar-with-time-input]': 'timeInput',\n },\n exportAs: 'mtxCalendar',\n animations: [mtxDatetimepickerAnimations.slideCalendar],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CdkPortalOutlet,\n CdkMonitorFocus,\n MatButton,\n MatIconButton,\n MtxMonthView,\n MtxYearView,\n MtxMultiYearView,\n MtxTimeView,\n ],\n})\nexport class MtxCalendar<D> implements AfterViewChecked, AfterContentInit, OnDestroy {\n private _intl = inject(MtxDatetimepickerIntl);\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _ngZone = inject(NgZone);\n private _adapter = inject<DatetimeAdapter<D>>(DatetimeAdapter, { optional: true })!;\n private _dateFormats = inject<MtxDatetimeFormats>(MTX_DATETIME_FORMATS, { optional: true })!;\n\n /** Whether to show multi-year view. */\n @Input({ transform: booleanAttribute }) multiYearSelector = false;\n\n /** Whether the clock uses 12 hour format. */\n @Input({ transform: booleanAttribute }) twelvehour = false;\n\n /** Whether to show week numbers in month view */\n @Input({ transform: booleanAttribute }) showWeekNumbers = false;\n\n /** Whether the calendar should be started in month or year view. */\n @Input() startView: MtxCalendarView = 'month';\n\n /** Step over minutes. */\n @Input() timeInterval: number = 1;\n\n /** A function used to filter which dates are selectable. */\n @Input() dateFilter!: (date: D, type: MtxDatetimepickerFilterType) => boolean;\n\n /** Prevent user to select same date time */\n @Input({ transform: booleanAttribute }) preventSameDateTimeSelection = false;\n\n /** Input for custom header component */\n @Input() headerComponent?: ComponentType<any>;\n\n /** Input for action buttons. */\n @Input() actionsPortal: TemplatePortal | null = null;\n\n /** Emits when the currently selected date changes. */\n @Output() selectedChange: EventEmitter<D> = new EventEmitter<D>();\n\n /** Emits when the view has been changed. */\n @Output() viewChanged: EventEmitter<MtxCalendarView> = new EventEmitter<MtxCalendarView>();\n\n @Output() _userSelection = new EventEmitter<void>();\n\n /** Reference to the current month view component. */\n @ViewChild(MtxMonthView) monthView!: MtxMonthView<D>;\n\n /** Reference to the current year view component. */\n @ViewChild(MtxYearView) yearView!: MtxYearView<D>;\n\n /** Reference to the current multi-year view component. */\n @ViewChild(MtxMultiYearView) multiYearView!: MtxMultiYearView<D>;\n\n /** Reference to the current time view component. */\n @ViewChild(MtxTimeView) timeView!: MtxTimeView<D>;\n\n _AMPM!: MtxAMPM;\n\n _clockView: MtxClockView = 'hour';\n\n _calendarState!: string;\n\n /** A portal containing the header component. */\n _calendarHeaderPortal!: Portal<any>;\n\n private _intlChanges: Subscription;\n\n private _clampedActiveDate!: D;\n\n /**\n * Used for scheduling that focus should be moved to the active cell on the next tick.\n * We need to schedule it, rather than do it immediately, because we have to wait\n * for Angular to re-evaluate the view children.\n */\n private _moveFocusOnNextTick = false;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n const _intl = this._intl;\n\n if (!this._adapter) {\n throw createMissingDateImplError('DatetimeAdapter');\n }\n\n if (!this._dateFormats) {\n throw createMissingDateImplError('MTX_DATETIME_FORMATS');\n }\n\n this._intlChanges = _intl.changes.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /** The display type of datetimepicker. */\n @Input()\n get type(): MtxDatetimepickerType {\n return this._type;\n }\n set type(value: MtxDatetimepickerType) {\n this._type = value || 'date';\n if (this.type === 'year') {\n this.multiYearSelector = true;\n }\n }\n private _type: MtxDatetimepickerType = 'date';\n\n /** A date representing the period (month or year) to start the calendar in. */\n @Input()\n get startAt(): D | null {\n return this._startAt;\n }\n set startAt(value: D | null) {\n this._startAt = this._adapter.getValidDateOrNull(value);\n }\n private _startAt!: D | null;\n\n /**\n * Whether the calendar is in time mode. In time mode the calendar clock gets time input\n * elements rather then just clock. When `touchUi` is enabled this will be disabled.\n */\n @Input({ transform: booleanAttribute }) timeInput = false;\n\n /** Whether the time input should be auto-focused after view init. */\n @Input({ transform: booleanAttribute }) timeInputAutoFocus = true;\n\n /** The currently selected date. */\n @Input()\n get selected(): D | null {\n return this._selected;\n }\n set selected(value: D | null) {\n this._selected = this._adapter.getValidDateOrNull(value);\n }\n private _selected!: D | null;\n\n /** The minimum selectable date. */\n @Input()\n get minDate(): D | null {\n return this._minDate;\n }\n set minDate(value: D | null) {\n this._minDate = this._adapter.getValidDateOrNull(value);\n }\n private _minDate!: D | null;\n\n /** The maximum selectable date. */\n @Input()\n get maxDate(): D | null {\n return this._maxDate;\n }\n set maxDate(value: D | null) {\n this._maxDate = this._adapter.getValidDateOrNull(value);\n }\n private _maxDate!: D | null;\n\n /**\n * The current active date. This determines which time period is shown and which date is\n * highlighted when using keyboard navigation.\n */\n get _activeDate(): D {\n return this._clampedActiveDate;\n }\n set _activeDate(value: D) {\n const oldActiveDate = this._clampedActiveDate;\n this._clampedActiveDate = this._adapter.clampDate(value, this.minDate, this.maxDate);\n\n // whenever active date changed, and possibly got clamped we should adjust the am/pm setting\n this._selectAMPM(this._clampedActiveDate);\n\n if (\n oldActiveDate &&\n this._clampedActiveDate &&\n this.currentView === 'month' &&\n !this._adapter.sameMonthAndYear(oldActiveDate, this._clampedActiveDate)\n ) {\n if (this._adapter.isInNextMonth(oldActiveDate, this._clampedActiveDate)) {\n this.calendarState('right');\n } else {\n this.calendarState('left');\n }\n }\n\n this._changeDetectorRef.markForCheck();\n }\n\n /** Whether the calendar is in month view. */\n get currentView(): MtxCalendarView {\n return this._currentView;\n }\n set currentView(value: MtxCalendarView) {\n const viewChangedResult = this._currentView !== value ? value : null;\n this._currentView = value;\n this._moveFocusOnNextTick = true;\n this._changeDetectorRef.markForCheck();\n if (viewChangedResult) {\n this.viewChanged.emit(viewChangedResult);\n }\n }\n private _currentView!: MtxCalendarView;\n\n get _yearPeriodText(): string {\n if (this.currentView === 'multi-year') {\n // The offset from the active year to the \"slot\" for the starting year is the\n // *actual* first rendered year in the multi-year view, and the last year is\n // just yearsPerPage - 1 away.\n const activeYear = this._adapter.getYear(this._activeDate);\n const minYearOfPage =\n activeYear - getActiveOffset(this._adapter, this._activeDate, this.minDate, this.maxDate);\n const maxYearOfPage = minYearOfPage + yearsPerPage - 1;\n const minYearName = this._adapter.getYearName(this._adapter.createDate(minYearOfPage, 0, 1));\n const maxYearName = this._adapter.getYearName(this._adapter.createDate(maxYearOfPage, 0, 1));\n return this._intl.formatYearRange(minYearName, maxYearName);\n }\n\n return this.currentView === 'month'\n ? this._adapter.getMonthNames('long')[this._adapter.getMonth(this._activeDate)]\n : this._adapter.getYearName(this._activeDate);\n }\n\n get _yearButtonText(): string {\n return this._adapter.getYearName(this._activeDate);\n }\n\n get _yearButtonLabel(): string {\n return this.multiYearSelector\n ? this._intl.switchToMultiYearViewLabel\n : this._intl.switchToYearViewLabel;\n }\n\n get _dateButtonText(): string {\n switch (this.type) {\n case 'month':\n return this._adapter.getMonthNames('long')[this._adapter.getMonth(this._activeDate)];\n default:\n return this._adapter.format(\n this._activeDate,\n this._dateFormats.display.popupHeaderDateLabel\n );\n }\n }\n\n get _dateButtonLabel(): string {\n return this._intl.switchToMonthViewLabel;\n }\n\n get _hoursButtonText(): string {\n let hour = this._adapter.getHour(this._activeDate);\n if (this.twelvehour) {\n if (hour === 0) {\n hour = 24;\n }\n hour = hour > 12 ? hour - 12 : hour;\n }\n return this._2digit(hour);\n }\n\n get _hourButtonLabel(): string {\n return this._intl.switchToClockHourViewLabel;\n }\n\n get _minutesButtonText(): string {\n return this._2digit(this._adapter.getMinute(this._activeDate));\n }\n\n get _minuteButtonLabel(): string {\n return this._intl.switchToClockMinuteViewLabel;\n }\n\n get _prevButtonLabel(): string {\n switch (this._currentView) {\n case 'month':\n return this._intl.prevMonthLabel;\n case 'year':\n return this._intl.prevYearLabel;\n case 'multi-year':\n return this._intl.prevMultiYearLabel;\n default:\n return '';\n }\n }\n\n get _nextButtonLabel(): string {\n switch (this._currentView) {\n case 'month':\n return this._intl.nextMonthLabel;\n case 'year':\n return this._intl.nextYearLabel;\n case 'multi-year':\n return this._intl.nextMultiYearLabel;\n default:\n return '';\n }\n }\n\n /** Date filter for the month and year views. */\n _dateFilterForViews = (date: D) => {\n return (\n !!date &&\n (!this.dateFilter || this.dateFilter(date, MtxDatetimepickerFilterType.DATE)) &&\n (!this.minDate || this._adapter.compareDate(date, this.minDate) >= 0) &&\n (!this.maxDate || this._adapter.compareDate(date, this.maxDate) <= 0)\n );\n };\n\n _userSelected(): void {\n this._userSelection.emit();\n }\n\n ngAfterContentInit() {\n if (this.headerComponent) {\n this._calendarHeaderPortal = new ComponentPortal(this.headerComponent);\n }\n this._activeDate = this.startAt || this._adapter.today();\n this._selectAMPM(this._activeDate);\n\n // Assign to the private property since we don't want to move focus on init.\n if (this.type === 'year') {\n this._currentView = 'multi-year';\n } else if (this.type === 'month') {\n this._currentView = 'year';\n } else if (this.type === 'time') {\n this._currentView = 'clock';\n } else {\n this._currentView = this.startView;\n }\n }\n\n ngAfterViewChecked() {\n if (this._moveFocusOnNextTick) {\n this._moveFocusOnNextTick = false;\n this.focusActiveCell();\n }\n }\n\n ngOnDestroy() {\n this._intlChanges.unsubscribe();\n }\n\n /** Handles date selection in the month view. */\n _dateSelected(date: D): void {\n if (this.type === 'date') {\n this._onActiveDateChange(date);\n if (!this._adapter.sameDate(date, this.selected) || !this.preventSameDateTimeSelection) {\n this.selectedChange.emit(date);\n }\n } else {\n this.selectedChange.emit(date);\n this._activeDate = date;\n this.currentView = 'clock';\n }\n }\n\n /** Handles month selection in the year view. */\n _monthSelected(month: D): void {\n if (this.type === 'month') {\n if (\n !this._adapter.sameMonthAndYear(month, this.selected) ||\n !this.preventSameDateTimeSelection\n ) {\n this.selectedChange.emit(this._adapter.getFirstDateOfMonth(month));\n }\n } else {\n this._activeDate = month;\n this.currentView = 'month';\n this._clockView = 'hour';\n }\n }\n\n /** Handles year selection in the multi year view. */\n _yearSelected(year: D): void {\n if (this.type === 'year') {\n if (!this._adapter.sameYear(year, this.selected as D) || !this.preventSameDateTimeSelection) {\n const normalizedDate = this._adapter.createDatetime(\n this._adapter.getYear(year),\n 0,\n 1,\n 0,\n 0\n );\n this.selectedChange.emit(normalizedDate);\n }\n } else {\n this._activeDate = year;\n this.currentView = 'year';\n }\n }\n\n _timeSelected(date: D) {\n this._activeDate = date;\n if (!this._adapter.sameDatetime(date, this.selected) || !this.preventSameDateTimeSelection) {\n this.selectedChange.emit(date);\n }\n }\n\n _onActiveDateChange(date: D) {\n this._activeDate = date;\n }\n\n _selectAMPM(date: D) {\n const hour = this._adapter.getHour(date);\n if (hour > 11) {\n this._AMPM = 'PM';\n } else {\n this._AMPM = 'AM';\n }\n\n if (\n this.actionsPortal &&\n this.currentView === 'clock' &&\n this._selected &&\n !this._adapter.sameHour(date, this._selected)\n ) {\n this.selectedChange.emit(date);\n }\n }\n\n _ampmClicked(source: MtxAMPM): void {\n this._currentView = 'clock';\n\n if (source === this._AMPM) {\n return;\n }\n\n // if AMPM changed from PM to AM substract 12 hours\n const currentHour = this._adapter.getHour(this._activeDate);\n let newHourValue;\n if (source === 'AM') {\n newHourValue = currentHour >= 12 ? this._adapter.getHour(this._activeDate) - 12 : 12;\n }\n // otherwise add 12 hours\n else {\n newHourValue = (currentHour + 12) % 24;\n }\n\n const newActiveDate = this._adapter.clampDate(\n this._adapter.createDatetime(\n this._adapter.getYear(this._activeDate),\n this._adapter.getMonth(this._activeDate),\n this._adapter.getDate(this._activeDate),\n newHourValue,\n this._adapter.getMinute(this._activeDate)\n ),\n this.minDate,\n this.maxDate\n );\n\n // only if our clamped date is not changed, we know we can apply the newActiveDate to the\n // activeDate\n if (this._adapter.getHour(newActiveDate) === newHourValue) {\n this._activeDate = newActiveDate;\n this._AMPM = source;\n }\n }\n\n _yearClicked(): void {\n if (this.type === 'year' || this.multiYearSelector) {\n this.currentView = 'multi-year';\n return;\n }\n this.currentView = 'year';\n }\n\n _dateClicked(): void {\n if (this.type !== 'month') {\n this.currentView = 'month';\n }\n }\n\n _hoursClicked(): void {\n this.currentView = 'clock';\n this._clockView = 'hour';\n }\n\n _minutesClicked(): void {\n this.currentView = 'clock';\n this._clockView = 'minute';\n }\n\n /** Handles user clicks on the previous button. */\n _previousClicked(): void {\n this._activeDate =\n this.currentView === 'month'\n ? this._adapter.addCalendarMonths(this._activeDate, -1)\n : this._adapter.addCalendarYears(\n this._activeDate,\n this.currentView === 'year' ? -1 : -yearsPerPage\n );\n }\n\n /** Handles user clicks on the next button. */\n _nextClicked(): void {\n this._activeDate =\n this.currentView === 'month'\n ? this._adapter.addCalendarMonths(this._activeDate, 1)\n : this._adapter.addCalendarYears(\n this._activeDate,\n this.currentView === 'year' ? 1 : yearsPerPage\n );\n }\n\n /** Whether the previous period button is enabled. */\n _previousEnabled(): boolean {\n if (!this.minDate) {\n return true;\n }\n return !this.minDate || !this._isSameView(this._activeDate, this.minDate);\n }\n\n /** Whether the next period button is enabled. */\n _nextEnabled(): boolean {\n return !this.maxDate || !this._isSameView(this._activeDate, this.maxDate);\n }\n\n _calendarStateDone() {\n this._calendarState = '';\n }\n\n /** Whether the two dates represent the same view in the current view mode (month or year). */\n private _isSameView(date1: D, date2: D): boolean {\n if (this.currentView === 'month') {\n return (\n this._adapter.getYear(date1) === this._adapter.getYear(date2) &&\n this._adapter.getMonth(date1) === this._adapter.getMonth(date2)\n );\n }\n if (this.currentView === 'year') {\n return this._adapter.getYear(date1) === this._adapter.getYear(date2);\n }\n // Otherwise we are in 'multi-year' view.\n return isSameMultiYearView(this._adapter, date1, date2, this.minDate, this.maxDate);\n }\n\n private calendarState(direction: string): void {\n this._calendarState = direction;\n }\n\n private _2digit(n: number) {\n return ('00' + n).slice(-2);\n }\n\n /** Returns the component instance that corresponds to the current calendar view. */\n private _getCurrentViewComponent() {\n return this.monthView || this.yearView || this.multiYearView || this.timeView;\n }\n\n /** Focuses the active date. */\n focusActiveCell() {\n this._getCurrentViewComponent()._focusActiveCell(false);\n }\n}\n","<div class=\"mtx-calendar-header\">\n @if (_calendarHeaderPortal) {\n <ng-template [cdkPortalOutlet]=\"_calendarHeaderPortal\"></ng-template>\n } @else {\n @if (type !== 'time') {\n <button\n mat-button type=\"button\" class=\"mtx-calendar-header-year\"\n [class.active]=\"currentView === 'year' || currentView === 'multi-year'\"\n [attr.aria-label]=\"_yearButtonLabel\"\n (click)=\"_yearClicked()\">\n <span>{{ _yearButtonText }}</span>\n @if (multiYearSelector || type === 'year') {\n <svg\n class=\"mtx-calendar-header-year-dropdown\" matButtonIcon iconPositionEnd\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M7,10L12,15L17,10H7Z\" />\n </svg>\n }\n </button>\n }\n @if (type !== 'year') {\n <div class=\"mtx-calendar-header-date-time\">\n @if (type !== 'time') {\n <button\n mat-button type=\"button\" class=\"mtx-calendar-header-date\"\n [class.active]=\"currentView === 'month'\"\n [class.not-clickable]=\"type === 'month'\"\n [attr.aria-label]=\"_dateButtonLabel\"\n (click)=\"_dateClicked()\">{{ _dateButtonText }}</button>\n }\n @if (type.endsWith('time')) {\n <span class=\"mtx-calendar-header-time\" [class.active]=\"currentView === 'clock'\">\n <span class=\"mtx-calendar-header-hour-minute-container\">\n <button mat-button type=\"button\" class=\"mtx-calendar-header-hours\"\n [class.active]=\"_clockView === 'hour'\"\n [attr.aria-label]=\"_hourButtonLabel\"\n (click)=\"_hoursClicked()\">{{ _hoursButtonText }}</button>\n <span class=\"mtx-calendar-header-hour-minute-separator\">:</span>\n <button mat-button type=\"button\" class=\"mtx-calendar-header-minutes\"\n [class.active]=\"_clockView === 'minute'\"\n [attr.aria-label]=\"_minuteButtonLabel\"\n (click)=\"_minutesClicked()\">{{ _minutesButtonText }}</button>\n </span>\n @if (twelvehour) {\n <span class=\"mtx-calendar-header-ampm-container\">\n <button mat-button type=\"button\" class=\"mtx-calendar-header-ampm\"\n [class.active]=\"_AMPM === 'AM'\" aria-label=\"AM\"\n (click)=\"_ampmClicked('AM')\">AM</button>\n <button mat-button type=\"button\" class=\"mtx-calendar-header-ampm\"\n [class.active]=\"_AMPM === 'PM'\" aria-label=\"PM\"\n (click)=\"_ampmClicked('PM')\">PM</button>\n </span>\n }\n </span>\n }\n </div>\n }\n }\n</div>\n\n<div class=\"mtx-calendar-content\">\n @if (currentView === 'month' || currentView === 'year' || currentView === 'multi-year') {\n <div class=\"mtx-calendar-controls\">\n <button mat-icon-button type=\"button\"\n class=\"mtx-calendar-previous-button\"\n [class.disabled]=\"!_previousEnabled()\"\n [attr.aria-disabled]=\"!_previousEnabled()\"\n [attr.aria-label]=\"_prevButtonLabel\"\n (click)=\"_previousClicked()\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\" />\n </svg>\n </button>\n <div class=\"mtx-calendar-period-button\"\n [@slideCalendar]=\"_calendarState\"\n (@slideCalendar.done)=\"_calendarStateDone()\">\n <strong>{{ _yearPeriodText }}</strong>\n </div>\n <button mat-icon-button type=\"button\"\n class=\"mtx-calendar-next-button\"\n [class.disabled]=\"!_nextEnabled()\"\n [attr.aria-disabled]=\"!_nextEnabled()\"\n [attr.aria-label]=\"_nextButtonLabel\"\n (click)=\"_nextClicked()\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" />\n </svg>\n </button>\n </div>\n }\n\n <div class=\"mtx-calendar-view\" cdkMonitorSubtreeFocus tabindex=\"-1\">\n @switch (currentView) {\n @case ('month') {\n <mtx-month-view\n (_userSelection)=\"_userSelected()\"\n (selectedChange)=\"_dateSelected($event)\"\n [(activeDate)]=\"_activeDate\"\n [dateFilter]=\"_dateFilterForViews\"\n [selected]=\"selected\"\n [showWeekNumbers]=\"showWeekNumbers\"\n [type]=\"type\">\n </mtx-month-view>\n }\n @case ('year') {\n <mtx-year-view\n (_userSelection)=\"_userSelected()\"\n (selectedChange)=\"_monthSelected($event)\"\n [(activeDate)]=\"_activeDate\"\n [dateFilter]=\"_dateFilterForViews\"\n [selected]=\"selected\"\n [type]=\"type\">\n </mtx-year-view>\n }\n @case ('multi-year') {\n <mtx-multi-year-view\n (_userSelection)=\"_userSelected()\"\n (selectedChange)=\"_yearSelected($event)\"\n [(activeDate)]=\"_activeDate\"\n [dateFilter]=\"_dateFilterForViews\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [selected]=\"selected\"\n [type]=\"type\">\n </mtx-multi-year-view>\n }\n @default {\n <mtx-time-view\n (_userSelection)=\"_userSelected()\"\n (activeDateChange)=\"_onActiveDateChange($event)\"\n (selectedChange)=\"_timeSelected($event)\"\n [AMPM]=\"_AMPM\"\n (ampmChange)=\"_ampmClicked($event)\"\n [clockView]=\"_clockView\"\n (clockViewChange)=\"_clockView = $event\"\n [twelvehour]=\"twelvehour\"\n [dateFilter]=\"dateFilter\"\n [interval]=\"timeInterval\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [(selected)]=\"_activeDate\"\n [actionsPortal]=\"actionsPortal\"\n [autoFocus]=\"timeInputAutoFocus\"\n [timeInput]=\"timeInput\"\n [preventSameDateTimeSelection]=\"preventSameDateTimeSelection\">\n </mtx-time-view>\n }\n }\n </div>\n</div>\n","import { Directionality } from '@angular/cdk/bidi';\nimport { coerceStringArray } from '@angular/cdk/coercion';\nimport { ESCAPE, hasModifierKey, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayConfig,\n OverlayRef,\n ScrollStrategy,\n} from '@angular/cdk/overlay';\nimport { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport {\n CdkPortalOutlet,\n ComponentPortal,\n ComponentType,\n TemplatePortal,\n} from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport {\n afterNextRender,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n EventEmitter,\n inject,\n InjectionToken,\n Injector,\n Input,\n numberAttribute,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { merge, Subject, Subscription } from 'rxjs';\nimport { filter, take } from 'rxjs/operators';\n\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { MatButton } from '@angular/material/button';\nimport { DatetimeAdapter } from '@ng-matero/extensions/core';\nimport { MtxCalendar } from './calendar';\nimport { mtxDatetimepickerAnimations } from './datetimepicker-animations';\nimport { createMissingDateImplError } from './datetimepicker-errors';\nimport { MtxDatetimepickerFilterType } from './datetimepicker-filtertype';\nimport { MtxDatetimepickerInput } from './datetimepicker-input';\nimport { MtxDatetimepickerIntl } from './datetimepicker-intl';\nimport { MtxCalendarView, MtxDatetimepickerType } from './datetimepicker-types';\n\n/** Used to generate a unique ID for each datetimepicker instance. */\nlet datetimepickerUid = 0;\n\n/** Possible modes for datetimepicker dropdown display. */\nexport type MtxDatetimepickerMode = 'auto' | 'portrait' | 'landscape';\n\n/** Possible positions for the datetimepicker dropdown along the X axis. */\nexport type DatetimepickerDropdownPositionX = 'start' | 'end';\n\n/** Possible positions for the datetimepicker dropdown along the Y axis. */\nexport type DatetimepickerDropdownPositionY = 'above' | 'below';\n\n/** Injection token that determines the scroll handling while the calendar is open. */\nexport const MTX_DATETIMEPICKER_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n 'mtx-datetimepicker-scroll-strategy',\n {\n providedIn: 'root',\n factory: () => {\n const overlay = inject(Overlay);\n return () => overlay.scrollStrategies.reposition();\n },\n }\n);\n\nexport function MTX_DATETIMEPICKER_SCROLL_STRATEGY_FACTORY(overlay: Overlay): () => ScrollStrategy {\n return () => overlay.scrollStrategies.reposition();\n}\n\nexport const MTX_DATETIMEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n provide: MTX_DATETIMEPICKER_SCROLL_STRATEGY,\n deps: [Overlay],\n useFactory: MTX_DATETIMEPICKER_SCROLL_STRATEGY_FACTORY,\n};\n\nexport interface MtxDatetimepickerDefaultOptions {\n mode?: MtxDatetimepickerMode;\n type?: MtxDatetimepickerType;\n startView?: MtxCalendarView;\n multiYearSelector?: boolean;\n showWeekNumbers?: boolean;\n twelvehour?: boolean;\n timeInterval?: number;\n timeInput?: boolean;\n timeInputAutoFocus?: boolean;\n color?: ThemePalette;\n touchUi?: boolean;\n panelClass?: string | string[];\n calendarHeaderComponent?: ComponentType<any>;\n}\n\n/** Injection token that can be used to specify default datetimepicker options. */\nexport const MTX_DATETIMEPICKER_DEFAULT_OPTIONS =\n new InjectionToken<MtxDatetimepickerDefaultOptions>('mtx-datetimepicker-default-options');\n\n/**\n * Component used as the content for the datetimepicker dialog and popup. We use this instead of\n * using MtxCalendar directly as the content so we can control the initial focus. This also gives us\n * a place to put additional features of the popup that are not part of the calendar itself in the\n * future. (e.g. confirmation buttons).\n * @docs-private\n */\n@Component({\n selector: 'mtx-datetimepicker-content',\n templateUrl: 'datetimepicker-content.html',\n styleUrl: 'datetimepicker-content.scss',\n host: {\n 'class': 'mtx-datetimepicker-content',\n '[class]': 'color ? \"mat-\" + color : \"\"',\n '[class.mtx-datetimepicker-content-touch]': 'datetimepicker?.touchUi',\n '[attr.mode]': 'datetimepicker.mode',\n '[@transformPanel]': '_animationState',\n '(@transformPanel.done)': '_animationDone.next()',\n },\n animations: [\n mtxDatetimepickerAnimations.transformPanel,\n mtxDatetimepickerAnimations.fadeInCalendar,\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CdkTrapFocus, MtxCalendar, CdkPortalOutlet, MatButton],\n})\nexport class MtxDatetimepickerContent<D> implements OnInit, AfterViewInit, OnDestroy {\n private _changeDetectorRef = inject(ChangeDetectorRef);\n\n @ViewChild(MtxCalendar, { static: true }) _calendar!: MtxCalendar<D>;\n\n @Input() color: ThemePalette;\n\n datetimepicker!: MtxDatetimepicker<D>;\n\n /** Whether the datetimepicker is above or below the input. */\n _isAbove!: boolean;\n\n /** Current state of the animation. */\n _animationState!: 'enter-dropdown' | 'enter-dialog' | 'void';\n\n /** Emits when an animation has finished. */\n readonly _animationDone = new Subject<void>();\n\n /** Id of the label for the `role=\"dialog\"` element. */\n _dialogLabelId: string | null = null;\n\n /** Portal with projected action buttons. */\n _actionsPortal: TemplatePortal | null = null;\n\n /** The display type of datetimepicker. */\n type: MtxDatetimepickerType = 'datetime';\n\n /** The view of the calendar. */\n view: MtxCalendarView = 'month';\n\n /** Text for the close button. */\n _closeButtonText: string = '';\n\n /** Whether the close button currently has focus. */\n _closeButtonFocused: boolean = false;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n const intl = inject(MtxDatetimepickerIntl);\n\n this._closeButtonText = intl.closeCalendarLabel;\n }\n\n _viewChanged(view: MtxCalendarView): void {\n this.view = view;\n }\n\n ngOnInit() {\n this._animationState = this.datetimepicker.touchUi ? 'enter-dialog' : 'enter-dropdown';\n }\n\n ngAfterViewInit() {\n this._calendar.focusActiveCell();\n }\n\n ngOnDestroy() {\n this._animationDone.complete();\n }\n\n _startExitAnimation() {\n this._animationState = 'void';\n this._changeDetectorRef.markForCheck();\n }\n\n _handleUserSelection() {\n // Delegate closing the overlay to the actions.\n if (!this._actionsPortal) {\n this.datetimepicker.close();\n }\n }\n\n /**\n * Assigns a new portal containing the datetimepicker actions.\n * @param portal Portal with the actions to be assigned.\n * @param forceRerender Whether a re-render of the portal should be triggered.\n */\n _assignActions(portal: TemplatePortal<any> | null, forceRerender: boolean) {\n this._actionsPortal = portal;\n\n if (forceRerender) {\n this._changeDetectorRef.detectChanges();\n }\n }\n}\n\n@Component({\n selector: 'mtx-datetimepicker',\n exportAs: 'mtxDatetimepicker',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n})\nexport class MtxDatetimepicker<D> implements OnDestroy {\n private _overlay = inject(Overlay);\n private _viewContainerRef = inject(ViewContainerRef);\n private _scrollStrategy = inject(MTX_DATETIMEPICKER_SCROLL_STRATEGY);\n private _dateAdapter = inject<DatetimeAdapter<D>>(DatetimeAdapter, { optional: true })!;\n private _dir = inject(Directionality, { optional: true });\n private _defaultOptions = inject<MtxDatetimepickerDefaultOptions>(\n MTX_DATETIMEPICKER_DEFAULT_OPTIONS,\n { optional: true }\n );\n\n private _document = inject(DOCUMENT);\n\n private _injector = inject(Injector);\n\n /** Whether to show multi-year view. */\n @Input({ transform: booleanAttribute })\n multiYearSelector = this._defaultOptions?.multiYearSelector ?? false;\n\n /** Whether the clock uses 12 hour format. */\n @Input({ transform: booleanAttribute })\n twelvehour = this._defaultOptions?.twelvehour ?? false;\n\n /** Whether to show week numbers in month view */\n @Input({ transform: booleanAttribute })\n showWeekNumbers = this._defaultOptions?.showWeekNumbers ?? false;\n\n /** The view that the calendar should start in. */\n @Input() startView: MtxCalendarView = this._defaultOptions?.startView ?? 'month';\n\n /** The display mode of datetimepicker. */\n @Input() mode: MtxDatetimepickerMode = this._defaultOptions?.mode ?? 'auto';\n\n /** Step over minutes. */\n @Input({ transform: numberAttribute })\n timeInterval: number = this._defaultOptions?.timeInterval ?? 1;\n\n /** Prevent user to select same date time */\n @Input({ transform: booleanAttribute }) preventSameDateTimeSelection = false;\n\n /** Input for a custom header component */\n @Input()\n calendarHeaderComponent?: ComponentType<any> = this._defaultOptions?.calendarHeaderComponent;\n\n /**\n * Emits new selected date when selected date changes.\n * @deprecated Switch to the `dateChange` and `dateInput` binding on the input element.\n */\n @Output() selectedChanged = new EventEmitter<D>();\n\n /** Emits when the datetimepicker has been opened. */\n @Output('opened') openedStream: EventEmitter<void> = new EventEmitter<void>();\n\n /** Emits when the datetimepicker has been closed. */\n @Output('closed') closedStream: EventEmitter<void> = new EventEmitter<void>();\n\n /** Emits when the view has been changed. */\n @Output() viewChanged: EventEmitter<MtxCalendarView> = new EventEmitter<MtxCalendarView>();\n\n /** Classes to be passed to the date picker panel. */\n @Input()\n get panelClass(): string | string[] {\n return this._panelClass;\n }\n set panelClass(value: string | string[]) {\n this._panelClass = coerceStringArray(value);\n }\n private _panelClass: string[] = coerceStringArray(this._defaultOptions?.panelClass);\n\n /** Whether the calendar is open. */\n @Input({ transform: booleanAttribute })\n get opened(): boolean {\n return this._opened;\n }\n set opened(value: boolean) {\n value ? this.open() : this.close();\n }\n private _opened = false;\n\n /** The id for the datetimepicker calendar. */\n id = `mtx-datetimepicker-${datetimepickerUid++}`;\n\n /** Color palette to use on the datetimepicker's calendar. */\n @Input()\n get color(): ThemePalette {\n return (\n this._color ||\n (this.datetimepickerInput ? this.datetimepickerInput.getThemePalette() : undefined)\n );\n }\n set color(value: ThemePalette) {\n this._color = value;\n }\n private _color: ThemePalette = this._defaultOptions?.color;\n\n /** The input element this datetimepicker is associated with. */\n datetimepickerInput!: MtxDatetimepickerInput<D>;\n\n /** Emits when the datetimepicker is disabled. */\n _disabledChange = new Subject<boolean>();\n\n private _validSelected: D | null = null;\n\n /** A reference to the overlay into which we've rendered the calendar. */\n private _overlayRef!: OverlayRef | null;\n\n /** Reference to the component instance rendered in the overlay. */\n private _componentRef!: ComponentRef<MtxDatetimepickerContent<D>> | null;\n\n /** The element that was focused before the datetimepicker was opened. */\n private _focusedElementBeforeOpen: HTMLElement | null = null;\n\n /** Unique class that will be added to the backdrop so that the test harnesses can look it up. */\n private _backdropHarnessClass = `${this.id}-backdrop`;\n\n private _inputStateChanges = Subscription.EMPTY;\n\n /** Portal with projected action buttons. */\n _actionsPortal: TemplatePortal | null = null;\n\n /** Previous selected value. */\n oldValue: D | null = null;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DateAdapter');\n }\n }\n\n /** The date to open the calendar to initially. */\n @Input()\n get startAt(): D | null {\n // If an explicit startAt is set we start there, otherwise we start at whatever the currently\n // selected value is.\n return this._startAt || (this.datetimepickerInput ? this.datetimepickerInput.value : null);\n }\n set startAt(date: D | null) {\n this._startAt = this._dateAdapter.getValidDateOrNull(date);\n }\n private _startAt!: D | null;\n\n /** The display type of datetimepicker. */\n @Input()\n get type() {\n return this._type;\n }\n set type(value: MtxDatetimepickerType) {\n this._type = value || 'datetime';\n }\n private _type: MtxDatetimepickerType = this._defaultOptions?.type ?? 'datetime';\n\n /**\n * Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather\n * than a popup and elements have more padding to allow for bigger touch targets.\n */\n @Input({ transform: booleanAttribute }) touchUi = this._defaultOptions?.touchUi ?? false;\n\n /**\n * Whether the calendar is in time mode. In time mode the calendar clock gets time input\n * elements rather then just clock. When `touchUi` is enabled this will be disabled.\n */\n @Input({ transform: booleanAttribute }) timeInput = this._defaultOptions?.timeInput ?? false;\n\n /** Whether the time input should be auto-focused after view init. */\n @Input({ transform: booleanAttribute })\n timeInputAutoFocus = this._defaultOptions?.timeInputAutoFocus ?? true;\n\n /** Whether the datetimepicker pop-up should be disabled. */\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n return this._disabled === undefined && this.datetimepickerInput\n ? this.datetimepickerInput.disabled\n : !!this._disabled;\n }\n set disabled(value: boolean) {\n if (value !== this._disabled) {\n this._disabled = value;\n this._disabledChange.next(value);\n }\n }\n private _disabled!: boolean;\n\n /** Preferred position of the datetimepicker in the X axis. */\n @Input()\n xPosition: DatetimepickerDropdownPositionX = 'start';\n\n /** Preferred position of the datetimepicker in the Y axis. */\n @Input()\n yPosition: DatetimepickerDropdownPositionY = 'below';\n\n /**\n * Whether to restore focus to the previously-focused element when the panel is closed.\n * Note that automatic focus restoration is an accessibility feature and it is recommended that\n * you provide your own equivalent, if you decide to turn it off.\n */\n @Input({ transform: booleanAttribute }) restoreFocus = true;\n\n /** The currently selected date. */\n get _selected(): D | null {\n return this._validSelected;\n }\n\n set _selected(value: D | null) {\n this._validSelected = value;\n }\n\n /** The minimum selectable date. */\n get _minDate(): D | null {\n return this.datetimepickerInput && this.datetimepickerInput.min;\n }\n\n /** The maximum selectable date. */\n get _maxDate(): D | null {\n return this.datetimepickerInput && this.datetimepickerInput.max;\n }\n\n get _dateFilter(): (date: D | null, type: MtxDatetimepickerFilterType) => boolean {\n return this.datetimepickerInput && this.datetimepickerInput._dateFilter;\n }\n\n _viewChanged(view: MtxCalendarView): void {\n this.viewChanged.emit(view);\n }\n\n ngOnDestroy() {\n this._destroyOverlay();\n this.close();\n this._inputStateChanges.unsubscribe();\n this._disabledChange.complete();\n }\n\n /** Selects the given date */\n _select(date: D): void {\n this.oldValue = this._selected;\n this._selected = date;\n if (!this._actionsPortal) {\n if (!this._dateAdapter.sameDatetime(this.oldValue, this._selected)) {\n this.selectedChanged.emit(date);\n }\n }\n }\n\n _selectManually(): void {\n if (!this._selected) {\n this._selected = this._dateAdapter.today();\n this.selectedChanged.emit(this._selected);\n } else {\n this.selectedChanged.emit((this._selected as D) || (this.oldValue as D));\n }\n this.close();\n }\n\n _clearSelected(): void {\n this.oldValue = null;\n this._selected = null;\n this.selectedChanged.emit();\n this.close();\n }\n\n /**\n * Register an input with this datetimepicker.\n * @param input The datetimepicker input to register with this datetimepicker.\n */\n _registerInput(input: MtxDatetimepickerInput<D>): void {\n if (this.datetimepickerInput) {\n throw Error('A MtxDatetimepicker can only be associated with a single input.');\n }\n this.datetimepickerInput = input;\n this._inputStateChanges = this.datetimepickerInput._valueChange.subscribe(\n (value: D | null) => (this._selected = value)\n );\n }\n\n /** Open the calendar. */\n open(): void {\n if (this._opened || this.disabled) {\n return;\n }\n if (!this.datetimepickerInput) {\n throw Error('Attempted to open an MtxDatetimepicker with no associated input.');\n }\n\n this._focusedElementBeforeOpen = _getFocusedElementPierceShadowDom();\n this._openOverlay();\n this._opened = true;\n this.openedStream.emit();\n }\n\n /** Close the calendar. */\n close(): void {\n if (!this._opened) {\n return;\n }\n\n const canRestoreFocus =\n this.restoreFocus &&\n this._focusedElementBeforeOpen &&\n typeof this._focusedElementBeforeOpen.focus === 'function';\n\n const completeClose = () => {\n // The `_opened` could've been reset already if\n // we got two events in quick succession.\n if (this._opened) {\n this._opened = false;\n this.closedStream.emit();\n }\n };\n\n if (this._componentRef) {\n const { instance, location } = this._componentRef;\n instance._startExitAnimation();\n instance._animationDone.pipe(take(1)).subscribe(() => {\n const activeElement = this._document.activeElement;\n\n // Since we restore focus after the exit animation, we have to check that\n // the user didn't move focus themselves inside the `close` handler.\n if (\n canRestoreFocus &&\n (!activeElement ||\n activeElement === this._document.activeElement ||\n location.nativeElement.contains(activeElement))\n ) {\n this._focusedElementBeforeOpen!.focus();\n }\n\n this._focusedElementBeforeOpen = null;\n this._destroyOverlay();\n });\n }\n\n if (canRestoreFocus) {\n // Because IE moves focus asynchronously, we can't count on it being restored before we've\n // marked the datetimepicker as closed. If the event fires out of sequence and the element that\n // we're refocusing opens the datetimepicker 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 datetimepicker as closed, async as well.\n setTimeout(completeClose);\n } else {\n completeClose();\n }\n }\n\n /**\n * Forwards relevant values from the datetimepicker to the\n * datetimepicker content inside the overlay.\n */\n protected _forwardContentValues(instance: MtxDatetimepickerContent<D>) {\n instance.datetimepicker = this;\n instance.color = this.color;\n instance._dialogLabelId = this.datetimepickerInput.getOverlayLabelId();\n instance.type = this.type;\n instance.view = this.startView;\n instance._assignActions(this._actionsPortal, false);\n }\n\n /** Opens the overlay with the calendar. */\n private _openOverlay(): void {\n this._destroyOverlay();\n\n const isDialog = this.touchUi;\n const labelId = this.datetimepickerInput.getOverlayLabelId();\n\n const portal = new ComponentPortal<MtxDatetimepickerContent<D>>(\n MtxDatetimepickerContent,\n this._viewContainerRef\n );\n const overlayRef = (this._overlayRef = this._overlay.create(\n new OverlayConfig({\n positionStrategy: isDialog ? this._getDialogStrategy() : this._getDropdownStrategy(),\n hasBackdrop: true,\n backdropClass: [\n isDialog ? 'cdk-overlay-dark-backdrop' : 'mat-overlay-transparent-backdrop',\n this._backdropHarnessClass,\n ],\n direction: this._dir || undefined,\n scrollStrategy: isDialog ? this._overlay.scrollStrategies.block() : this._scrollStrategy(),\n panelClass: `mtx-datetimepicker-${isDialog ? 'dialog' : 'popup'}`,\n })\n ));\n\n const overlayElement = overlayRef.overlayElement;\n overlayElement.setAttribute('role', 'dialog');\n\n if (labelId) {\n overlayElement.setAttribute('aria-labelledby', labelId);\n }\n\n if (isDialog) {\n overlayElement.setAttribute('aria-modal', 'true');\n }\n\n this._getCloseStream(overlayRef).subscribe(event => {\n if (event) {\n event.preventDefault();\n }\n this.close();\n });\n\n this._componentRef = overlayRef.attach(portal);\n this._forwardContentValues(this._componentRef.instance);\n\n // Update the position once the calendar has rendered. Only relevant in dropdown mode.\n if (!isDialog) {\n afterNextRender(\n () => {\n overlayRef.updatePosition();\n },\n { injector: this._injector }\n );\n }\n }\n\n /** Destroys the current overlay. */\n private _destroyOverlay() {\n if (this._overlayRef) {\n this._overlayRef.dispose();\n this._overlayRef = this._componentRef = null;\n }\n }\n\n /** Gets a position strategy that will open the calendar as a dropdown. */\n private _getDialogStrategy() {\n return this._overlay.position().global().centerHorizontally().centerVertically();\n }\n\n /** Gets a position strategy that will open the calendar as a dropdown. */\n private _getDropdownStrategy() {\n const strategy = this._overlay\n .position()\n .flexibleConnectedTo(this.datetimepickerInput.getConnectedOverlayOrigin())\n .withTransformOriginOn('.mtx-datetimepicker-content')\n .withFlexibleDimensions(false)\n .withViewportMargin(8)\n .withLockedPosition();\n\n return this._setConnectedPositions(strategy);\n }\n\n /**\n * Sets the positions of the datetimepicker in dropdown mode based on the current configuration.\n */\n private _setConnectedPositions(strategy: FlexibleConnectedPositionStrategy) {\n const primaryX = this.xPosition === 'end' ? 'end' : 'start';\n const secondaryX = primaryX === 'start' ? 'end' : 'start';\n const primaryY = this.yPosition === 'above' ? 'bottom' : 'top';\n const secondaryY = primaryY === 'top' ? 'bottom' : 'top';\n\n return strategy.withPositions([\n {\n originX: primaryX,\n originY: secondaryY,\n overlayX: primaryX,\n overlayY: primaryY,\n },\n {\n originX: primaryX,\n originY: primaryY,\n overlayX: primaryX,\n overlayY: secondaryY,\n },\n {\n originX: secondaryX,\n originY: secondaryY,\n overlayX: secondaryX,\n overlayY: primaryY,\n },\n {\n originX: secondaryX,\n originY: primaryY,\n overlayX: secondaryX,\n overlayY: secondaryY,\n },\n ]);\n }\n\n /** Gets an observable that will emit when the overlay is supposed to be closed. */\n private _getCloseStream(overlayRef: OverlayRef) {\n return merge(\n overlayRef.backdropClick(),\n overlayRef.detachments(),\n overlayRef.keydownEvents().pipe(\n filter(event => {\n // Closing on alt + up is only valid when there's an input associated with the\n // datetimepicker.\n return (\n (event.keyCode === ESCAPE && !hasModifierKey(event)) ||\n (this.datetimepickerInput &&\n hasModifierKey(event, 'altKey') &&\n event.keyCode === UP_ARROW)\n );\n })\n )\n );\n }\n /**\n * Registers a portal containing action buttons with the datetimepicker.\n * @param portal Portal to be registered.\n */\n registerActions(portal: TemplatePortal): void {\n if (this._actionsPortal) {\n throw Error('A MtxDatetimepicker can only be associated with a single actions row.');\n }\n this._actionsPortal = portal;\n this._componentRef?.instance._assignActions(portal, true);\n }\n\n /**\n * Removes a portal containing action buttons from the datetimepicker.\n * @param portal Portal to be removed.\n */\n removeActions(portal: TemplatePortal): void {\n if (portal === this._actionsPortal) {\n this._actionsPortal = null;\n this._componentRef?.instance._assignActions(null, true);\n }\n }\n}\n","<div cdkTrapFocus\n role=\"dialog\"\n [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"_dialogLabelId ?? undefined\"\n [attr.mode]=\"datetimepicker.mode\"\n class=\"mtx-datetimepicker-content-container\"\n [class.mtx-datetimepicker-content-container-with-custom-header]=\"datetimepicker.calendarHeaderComponent\"\n [class.mtx-datetimepicker-content-container-with-actions]=\"_actionsPortal\"\n [class.mtx-datetimepicker-content-container-with-time-input]=\"datetimepicker.timeInput\">\n <mtx-calendar [id]=\"datetimepicker.id\"\n [class]=\"datetimepicker.panelClass\"\n [attr.mode]=\"datetimepicker.mode\"\n [type]=\"datetimepicker.type\"\n [startAt]=\"datetimepicker.startAt\"\n [startView]=\"datetimepicker.startView\"\n [maxDate]=\"datetimepicker._maxDate\"\n [minDate]=\"datetimepicker._minDate\"\n [dateFilter]=\"datetimepicker._dateFilter\"\n [multiYearSelector]=\"datetimepicker.multiYearSelector\"\n [preventSameDateTimeSelection]=\"datetimepicker.preventSameDateTimeSelection\"\n [headerComponent]=\"datetimepicker.calendarHeaderComponent\"\n [timeInterval]=\"datetimepicker.timeInterval\"\n [twelvehour]=\"datetimepicker.twelvehour\"\n [showWeekNumbers]=\"datetimepicker.showWeekNumbers\"\n [selected]=\"datetimepicker._selected\"\n [timeInput]=\"datetimepicker.timeInput\"\n [actionsPortal]=\"_actionsPortal\"\n [timeInputAutoFocus]=\"datetimepicker.timeInputAutoFocus\"\n (selectedChange)=\"datetimepicker._select($event)\"\n (viewChanged)=\"datetimepicker._viewChanged($event)\"\n (viewChanged)=\"_viewChanged($event)\"\n (_userSelection)=\"_handleUserSelection()\"\n [@fadeInCalendar]=\"'enter'\">\n </mtx-calendar>\n\n <ng-template [cdkPortalOutlet]=\"_actionsPortal\"></ng-template>\n\n <!-- Invisible close button for screen reader users. -->\n <button\n type=\"button\"\n mat-raised-button\n [color]=\"color || 'primary'\"\n class=\"mtx-datetimepicker-close-button\"\n [class.cdk-visually-hidden]=\"!_closeButtonFocused\"\n (focus)=\"_closeButtonFocused = true\"\n (blur)=\"_closeButtonFocused = false\"\n (click)=\"datetimepicker.close()\">{{ _closeButtonText }}</button>\n</div>\n","import { DOWN_ARROW } from '@angular/cdk/keycodes';\nimport {\n AfterContentInit,\n booleanAttribute,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n Output,\n inject,\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport { ThemePalette } from '@angular/material/core';\nimport { MatFormField } from '@angular/material/form-field';\nimport { MAT_INPUT_VALUE_ACCESSOR } from '@angular/material/input';\nimport { Subscription } from 'rxjs';\n\nimport {\n DatetimeAdapter,\n MTX_DATETIME_FORMATS,\n MtxDatetimeFormats,\n} from '@ng-matero/extensions/core';\nimport { MtxDatetimepicker } from './datetimepicker';\nimport { createMissingDateImplError } from './datetimepicker-errors';\nimport { MtxDatetimepickerFilterType } from './datetimepicker-filtertype';\n\nexport const MAT_DATETIMEPICKER_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MtxDatetimepickerInput),\n multi: true,\n};\n\nexport const MAT_DATETIMEPICKER_VALIDATORS: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MtxDatetimepickerInput),\n multi: true,\n};\n\n/**\n * An event used for datetimepicker input and change events. We don't always have access to a native\n * input or change event because the event may have been triggered by the user clicking on the\n * calendar popup. For consistency, we always use MtxDatetimepickerInputEvent instead.\n */\nexport class MtxDatetimepickerInputEvent<D> {\n /** The new value for the target datetimepicker input. */\n value: D | null;\n\n constructor(\n public target: MtxDatetimepickerInput<D>,\n public targetElement: HTMLElement\n ) {\n this.value = this.target.value;\n }\n}\n\n/** Directive used to connect an input to a MtxDatetimepicker. */\n@Directive({\n selector: 'input[mtxDatetimepicker]',\n providers: [\n MAT_DATETIMEPICKER_VALUE_ACCESSOR,\n MAT_DATETIMEPICKER_VALIDATORS,\n { provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MtxDatetimepickerInput },\n ],\n host: {\n '[attr.aria-haspopup]': 'true',\n '[attr.aria-owns]': '(_datetimepicker?.opened && _datetimepicker.id) || null',\n '[attr.min]': 'min ? _dateAdapter.toIso8601(min) : null',\n '[attr.max]': 'max ? _dateAdapter.toIso8601(max) : null',\n '[disabled]': 'disabled',\n '(input)': '_onInput($event.target.value)',\n '(change)': '_onChange()',\n '(blur)': '_onBlur()',\n '(keydown)': '_onKeydown($event)',\n },\n exportAs: 'mtxDatetimepickerInput',\n})\nexport class MtxDatetimepickerInput<D>\n implements AfterContentInit, ControlValueAccessor, OnDestroy, Validator\n{\n private _elementRef = inject(ElementRef);\n private _dateAdapter = inject<DatetimeAdapter<D>>(DatetimeAdapter, { optional: true })!;\n private _dateFormats = inject<MtxDatetimeFormats>(MTX_DATETIME_FORMATS, { optional: true })!;\n private _formField = inject(MatFormField, { optional: true });\n\n _datetimepicker!: MtxDatetimepicker<D>;\n\n _dateFilter!: (date: D | null, type: MtxDatetimepickerFilterType) => boolean;\n\n /** Emits when a `change` event is fired on this `<input>`. */\n @Output() dateChange = new EventEmitter<MtxDatetimepickerInputEvent<D>>();\n\n /** Emits when an `input` event is fired on this `<input>`. */\n @Output() dateInput = new EventEmitter<MtxDatetimepickerInputEvent<D>>();\n\n /** Emits when the value changes (either due to user input or programmatic change). */\n _valueChange = new EventEmitter<D | null>();\n\n /** Emits when the disabled state has changed */\n _disabledChange = new EventEmitter<boolean>();\n\n private _datetimepickerSubscription = Subscription.EMPTY;\n\n private _localeSubscription = Subscription.EMPTY;\n\n /** Whether the last value set on the input was valid. */\n private _lastValueValid = false;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n const _dateAdapter = this._dateAdapter;\n\n if (!this._dateAdapter) {\n throw createMissingDateImplError('DatetimeAdapter');\n }\n if (!this._dateFormats) {\n throw createMissingDateImplError('MTX_DATETIME_FORMATS');\n }\n\n // Update the displayed date when the locale changes.\n this._localeSubscription = _dateAdapter.localeChanges.subscribe(() => {\n this.value = this._dateAdapter.deserialize(this.value);\n });\n }\n\n /** The datetimepicker that this input is associated with. */\n @Input()\n set mtxDatetimepicker(value: MtxDatetimepicker<D>) {\n this.registerDatetimepicker(value);\n }\n\n @Input()\n set mtxDatetimepickerFilter(\n filter: (date: D | null, type: MtxDatetimepickerFilterType) => boolean\n ) {\n this._dateFilter = filter;\n this._validatorOnChange();\n }\n\n /** The value of the input. */\n @Input()\n get value(): D | null {\n return this._value;\n }\n set value(value: D | null) {\n value = this._dateAdapter.deserialize(value);\n this._lastValueValid = !value || this._dateAdapter.isValid(value);\n value = this._dateAdapter.getValidDateOrNull(value);\n const oldDate = this.value;\n this._value = value;\n this._formatValue(value);\n\n // use timeout to ensure the datetimepicker is instantiated and we get the correct format\n setTimeout(() => {\n if (!this._dateAdapter.sameDatetime(oldDate, value)) {\n this._valueChange.emit(value);\n }\n });\n }\n private _value!: D | null;\n\n /** The minimum valid date. */\n @Input()\n get min(): D | null {\n return this._min;\n }\n set min(value: D | null) {\n this._min = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n this._validatorOnChange();\n }\n private _min!: D | null;\n\n /** The maximum valid date. */\n @Input()\n get max(): D | null {\n return this._max;\n }\n set max(value: D | null) {\n this._max = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));\n this._validatorOnChange();\n }\n private _max!: D | null;\n\n /** Whether the datetimepicker-input is disabled. */\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n return !!this._disabled;\n }\n set disabled(value: boolean) {\n if (this._disabled !== value) {\n this._disabled = value;\n this._disabledChange.emit(value);\n }\n }\n private _disabled!: boolean;\n\n _onTouched = () => {};\n\n ngAfterContentInit() {\n if (this._datetimepicker) {\n this._datetimepickerSubscription = this._datetimepicker.selectedChanged.subscribe(\n (selected: D) => {\n this.value = selected;\n this._cvaOnChange(selected);\n this._onTouched();\n this.dateInput.emit(\n new MtxDatetimepickerInputEvent(this, this._elementRef.nativeElement)\n );\n this.dateChange.emit(\n new MtxDatetimepickerInputEvent(this, this._elementRef.nativeElement)\n );\n }\n );\n }\n }\n\n ngOnDestroy() {\n this._datetimepickerSubscription.unsubscribe();\n this._localeSubscription.unsubscribe();\n this._valueChange.complete();\n this._disabledChange.complete();\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n\n validate(c: AbstractControl): ValidationErrors | null {\n return this._validator ? this._validator(c) : null;\n }\n\n /**\n * Gets the element that the datetimepicker popup should be connected to.\n * @return The element to connect the popup to.\n */\n getConnectedOverlayOrigin(): ElementRef {\n return this._formField ? this._formField.getConnectedOverlayOrigin() : this._elementRef;\n }\n\n /** Gets the ID of an element that should be used a description for the calendar overlay. */\n getOverlayLabelId(): string | null {\n if (this._formField) {\n return this._formField.getLabelId();\n }\n\n return this._elementRef.nativeElement.getAttribute('aria-labelledby');\n }\n\n // Implemented as part of ControlValueAccessor\n writeValue(value: D): void {\n this.value = value;\n }\n\n // Implemented as part of ControlValueAccessor\n registerOnChange(fn: (value: any) => void): void {\n this._cvaOnChange = fn;\n }\n\n // Implemented as part of ControlValueAccessor\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n // Implemented as part of ControlValueAccessor\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n _onKeydown(event: KeyboardEvent) {\n if (event.altKey && event.keyCode === DOWN_ARROW) {\n this._datetimepicker.open();\n event.preventDefault();\n }\n }\n\n _onInput(value: string) {\n let date = this._dateAdapter.parse(value, this.getParseFormat());\n this._lastValueValid = !date || this._dateAdapter.isValid(date);\n date = this._dateAdapter.getValidDateOrNull(date);\n this._value = date;\n this._cvaOnChange(date);\n this._valueChange.emit(date);\n this.dateInput.emit(new MtxDatetimepickerInputEvent(this, this._elementRef.nativeElement));\n }\n\n _onChange() {\n this.dateChange.emit(new MtxDatetimepickerInputEvent(this, this._elementRef.nativeElement));\n }\n\n /** Handles blur events on the input. */\n _onBlur() {\n // Reformat the input only if we have a valid value.\n if (this.value) {\n this._formatValue(this.value);\n }\n\n this._onTouched();\n }\n\n private registerDatetimepicker(value: MtxDatetimepicker<D>) {\n if (value) {\n this._datetimepicker = value;\n this._datetimepicker._registerInput(this);\n }\n }\n\n private getDisplayFormat() {\n switch (this._datetimepicker.type) {\n case 'date':\n return this._dateFormats.display.dateInput;\n case 'datetime':\n return this._dateFormats.display.datetimeInput;\n case 'time':\n return this._dateFormats.display.timeInput;\n case 'month':\n return this._dateFormats.display.monthInput;\n case 'year':\n return this._dateFormats.display.yearInput;\n }\n }\n\n private getParseFormat() {\n let parseFormat;\n\n switch (this._datetimepicker.type) {\n case 'date':\n parseFormat = this._dateFormats.parse.dateInput;\n break;\n case 'datetime':\n parseFormat = this._dateFormats.parse.datetimeInput;\n break;\n case 'time':\n parseFormat = this._dateFormats.parse.timeInput;\n break;\n case 'month':\n parseFormat = this._dateFormats.parse.monthInput;\n break;\n case 'year':\n parseFormat = this._dateFormats.parse.yearInput;\n break;\n }\n if (!parseFormat) {\n parseFormat = this._dateFormats.parse.dateInput;\n }\n\n return parseFormat;\n }\n\n private _cvaOnChange: (value: any) => void = () => {};\n\n private _validatorOnChange = () => {};\n\n /** The form control validator for whether the input parses. */\n private _parseValidator: ValidatorFn = (): ValidationErrors | null => {\n return this._lastValueValid\n ? null\n : { mtxDatetimepickerParse: { text: this._elementRef.nativeElement.value } };\n };\n\n /** The form control validator for the min date. */\n private _minValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = this._dateAdapter.getValidDateOrNull(\n this._dateAdapter.deserialize(control.value)\n );\n return !this.min ||\n !controlValue ||\n (this._dateAdapter.compareDatetime(this.min, controlValue) as number) <= 0\n ? null\n : { mtxDatetimepickerMin: { min: this.min, actual: controlValue } };\n };\n\n /** The form control validator for the max date. */\n private _maxValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = this._dateAdapter.getValidDateOrNull(\n this._dateAdapter.deserialize(control.value)\n );\n return !this.max ||\n !controlValue ||\n (this._dateAdapter.compareDatetime(this.max, controlValue) as number) >= 0\n ? null\n : { mtxDatetimepickerMax: { max: this.max, actual: controlValue } };\n };\n\n /** The form control validator for the date filter. */\n private _filterValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = this._dateAdapter.getValidDateOrNull(\n this._dateAdapter.deserialize(control.value)\n );\n return !this._dateFilter ||\n !controlValue ||\n this._dateFilter(controlValue, MtxDatetimepickerFilterType.DATE)\n ? null\n : { mtxDatetimepickerFilter: true };\n };\n\n /** The combined form control validator for this input. */\n private _validator: ValidatorFn | null = Validators.compose([\n this._parseValidator,\n this._minValidator,\n this._maxValidator,\n this._filterValidator,\n ]);\n\n /** Formats a value and sets it on the input element. */\n private _formatValue(value: D | null) {\n this._elementRef.nativeElement.value = value\n ? this._dateAdapter.format(value, this.getDisplayFormat())\n : '';\n }\n\n /** Returns the palette used by the input's form field, if any. */\n getThemePalette(): ThemePalette {\n return this._formField ? this._formField.color : undefined;\n }\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n Directive,\n Input,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n HostAttributeToken,\n} from '@angular/core';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { Observable, Subscription, merge, of as observableOf } from 'rxjs';\n\nimport { MtxDatetimepicker } from './datetimepicker';\nimport { MtxDatetimepickerIntl } from './datetimepicker-intl';\n\n/** Can be used to override the icon of a `mtxDatetimepickerToggle`. */\n@Directive({\n selector: '[mtxDatetimepickerToggleIcon]',\n})\nexport class MtxDatetimepickerToggleIcon {}\n\n@Component({\n selector: 'mtx-datetimepicker-toggle',\n templateUrl: 'datetimepicker-toggle.html',\n styleUrl: './datetimepicker-toggle.scss',\n host: {\n 'class': 'mtx-datetimepicker-toggle',\n '[attr.tabindex]': 'null',\n '[class.mtx-datetimepicker-toggle-active]': 'datetimepicker && datetimepicker.opened',\n '[class.mat-accent]': 'datetimepicker && datetimepicker.color === \"accent\"',\n '[class.mat-warn]': 'datetimepicker && datetimepicker.color === \"warn\"',\n // Used by the test harness to tie this toggle to its datetimepicker.\n '[attr.data-mtx-calendar]': 'datetimepicker ? datetimepicker.id : null',\n // Bind the `click` on the host, rather than the inner `button`, so that we can call\n // `stopPropagation` on it without affecting the user's `click` handlers. We need to stop\n // it so that the input doesn't get focused automatically by the form field (See #21836).\n '(click)': '_open($event)',\n },\n exportAs: 'mtxDatetimepickerToggle',\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIconButton],\n})\nexport class MtxDatetimepickerToggle<D> implements AfterContentInit, OnChanges, OnDestroy {\n _intl = inject(MtxDatetimepickerIntl);\n private _changeDetectorRef = inject(ChangeDetectorRef);\n\n private _stateChanges = Subscription.EMPTY;\n\n /** Datetimepicker instance that the button will toggle. */\n @Input('for') datetimepicker!: MtxDatetimepicker<D>;\n\n /** Tabindex for the toggle. */\n @Input() tabIndex: number | null;\n\n /** Screen-reader label for the button. */\n @Input('aria-label') ariaLabel?: string;\n\n /** Whether the toggle button is disabled. */\n @Input({ transform: booleanAttribute })\n get disabled(): boolean {\n return this._disabled === undefined ? this.datetimepicker.disabled : !!this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = value;\n }\n private _disabled!: boolean;\n\n /** Whether ripples on the toggle should be disabled. */\n @Input({ transform: booleanAttribute }) disableRipple!: boolean;\n\n /** Custom icon set by the consumer. */\n @ContentChild(MtxDatetimepickerToggleIcon) _customIcon!: MtxDatetimepickerToggleIcon;\n\n /** Underlying button element. */\n @ViewChild('button') _button!: MatButton;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n const defaultTabIndex = inject(new HostAttributeToken('tabindex'), { optional: true });\n const parsedTabIndex = Number(defaultTabIndex);\n this.tabIndex = parsedTabIndex || parsedTabIndex === 0 ? parsedTabIndex : null;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.datetimepicker) {\n this._watchStateChanges();\n }\n }\n\n ngOnDestroy() {\n this._stateChanges.unsubscribe();\n }\n\n ngAfterContentInit() {\n this._watchStateChanges();\n }\n\n _open(event: Event): void {\n if (this.datetimepicker && !this.disabled) {\n this.datetimepicker.open();\n event.stopPropagation();\n }\n }\n\n private _watchStateChanges() {\n const datetimepickerDisabled = this.datetimepicker\n ? this.datetimepicker._disabledChange\n : observableOf();\n const inputDisabled =\n this.datetimepicker && this.datetimepicker.datetimepickerInput\n ? this.datetimepicker.datetimepickerInput._disabledChange\n : observableOf();\n const datetimepickerToggled = this.datetimepicker\n ? merge(this.datetimepicker.openedStream, this.datetimepicker.closedStream)\n : observableOf();\n\n this._stateChanges.unsubscribe();\n this._stateChanges = merge(\n this._intl.changes,\n datetimepickerDisabled as Observable<void>,\n inputDisabled as Observable<void>,\n datetimepickerToggled\n ).subscribe(() => this._changeDetectorRef.markForCheck());\n }\n}\n","<button #button\n mat-icon-button\n type=\"button\"\n [attr.aria-haspopup]=\"datetimepicker ? 'dialog' : null\"\n [attr.aria-label]=\"ariaLabel || _intl.openCalendarLabel\"\n [attr.tabindex]=\"disabled ? -1 : tabIndex\"\n [disabled]=\"disabled\"\n [disableRipple]=\"disableRipple\">\n\n @if (!_customIcon) {\n @switch (datetimepicker.type) {\n @case ('time') {\n <svg\n class=\"mtx-datetimepicker-toggle-default-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\">\n <path d=\"M12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22C6.47,22 2,17.5 2,12A10,10 0 0,1 12,2M12.5,7V12.25L17,14.92L16.25,16.15L11,13V7H12.5Z\" />\n </svg>\n }\n @case ('datetime') {\n <svg\n class=\"mtx-datetimepicker-toggle-default-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\">\n <path d=\"M15,13H16.5V15.82L18.94,17.23L18.19,18.53L15,16.69V13M19,8H5V19H9.67C9.24,18.09 9,17.07 9,16A7,7 0 0,1 16,9C17.07,9 18.09,9.24 19,9.67V8M5,21C3.89,21 3,20.1 3,19V5C3,3.89 3.89,3 5,3H6V1H8V3H16V1H18V3H19A2,2 0 0,1 21,5V11.1C22.24,12.36 23,14.09 23,16A7,7 0 0,1 16,23C14.09,23 12.36,22.24 11.1,21H5M16,11.15A4.85,4.85 0 0,0 11.15,16C11.15,18.68 13.32,20.85 16,20.85A4.85,4.85 0 0,0 20.85,16C20.85,13.32 18.68,11.15 16,11.15Z\" />\n </svg>\n }\n @default {\n <svg\n class=\"mtx-datetimepicker-toggle-default-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\">\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path d=\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\" />\n </svg>\n }\n }\n }\n\n <ng-content select=\"[mtxDatetimepickerToggleIcon]\"></ng-content>\n</button>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Directive,\n OnDestroy,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { MtxDatetimepicker } from './datetimepicker';\n\n@Directive({\n selector: '[mtxDatetimepickerApply]',\n host: { '(click)': '_datetimepicker._selectManually()' },\n})\nexport class MtxDatetimepickerApply<D> {\n _datetimepicker = inject<MtxDatetimepicker<D>>(MtxDatetimepicker);\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {}\n}\n\n@Directive({\n selector: '[mtxDatetimepickerCancel]',\n host: { '(click)': '_datetimepicker.close()' },\n})\nexport class MtxDatetimepickerCancel<D> {\n _datetimepicker = inject<MtxDatetimepicker<D>>(MtxDatetimepicker);\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {}\n}\n\n@Directive({\n selector: '[mtxDatetimepickerClear]',\n host: { '(click)': '_datetimepicker._clearSelected()' },\n})\nexport class MtxDatetimepickerClear<D> {\n _datetimepicker = inject<MtxDatetimepicker<D>>(MtxDatetimepicker);\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {}\n}\n\n@Component({\n selector: 'mtx-datetimepicker-actions',\n styleUrl: './datetimepicker-actions.scss',\n template: `\n <ng-template>\n <div class=\"mtx-datetimepicker-actions\">\n <ng-content></ng-content>\n </div>\n </ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class MtxDatetimepickerActions<D> implements AfterViewInit, OnDestroy {\n private _datetimepicker = inject<MtxDatetimepicker<D>>(MtxDatetimepicker);\n private _viewContainerRef = inject(ViewContainerRef);\n\n @ViewChild(TemplateRef) _template!: TemplateRef<unknown>;\n private _portal!: TemplatePortal;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {}\n\n ngAfterViewInit() {\n this._portal = new TemplatePortal(this._template, this._viewContainerRef);\n this._datetimepicker.registerActions(this._portal);\n }\n\n ngOnDestroy() {\n this._datetimepicker.removeActions(this._portal);\n // Needs to be null checked since we initialize it in `ngAfterViewInit`.\n if (this._portal && this._portal.isAttached) {\n this._portal?.detach();\n }\n }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { MtxCalendar } from './calendar';\nimport { MtxCalendarBody } from './calendar-body';\nimport { MtxClock } from './clock';\nimport {\n MTX_DATETIMEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER,\n MtxDatetimepicker,\n MtxDatetimepickerContent,\n} from './datetimepicker';\nimport { MtxDatetimepickerInput } from './datetimepicker-input';\nimport { MtxDatetimepickerToggle, MtxDatetimepickerToggleIcon } from './datetimepicker-toggle';\nimport { MtxMonthView } from './month-view';\nimport { MtxMultiYearView } from './multi-year-view';\nimport { MtxTimeView, MtxTimeInput } from './time-view';\nimport { MtxYearView } from './year-view';\nimport {\n MtxDatetimepickerActions,\n MtxDatetimepickerApply,\n MtxDatetimepickerCancel,\n MtxDatetimepickerClear,\n} from './datetimepicker-actions';\n\n@NgModule({\n imports: [\n CommonModule,\n OverlayModule,\n A11yModule,\n PortalModule,\n MatButtonModule,\n MtxCalendar,\n MtxCalendarBody,\n MtxClock,\n MtxTimeView,\n MtxTimeInput,\n MtxDatetimepicker,\n MtxDatetimepickerToggle,\n MtxDatetimepickerToggleIcon,\n MtxDatetimepickerInput,\n MtxDatetimepickerContent,\n MtxMonthView,\n MtxYearView,\n MtxMultiYearView,\n MtxDatetimepickerApply,\n MtxDatetimepickerCancel,\n MtxDatetimepickerClear,\n MtxDatetimepickerActions,\n ],\n exports: [\n MtxCalendar,\n MtxCalendarBody,\n MtxClock,\n MtxTimeView,\n MtxDatetimepicker,\n MtxDatetimepickerToggle,\n MtxDatetimepickerToggleIcon,\n MtxDatetimepickerInput,\n MtxDatetimepickerContent,\n MtxMonthView,\n MtxYearView,\n MtxMultiYearView,\n MtxDatetimepickerApply,\n MtxDatetimepickerCancel,\n MtxDatetimepickerClear,\n MtxDatetimepickerActions,\n ],\n providers: [MTX_DATETIMEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER],\n})\nexport class MtxDatetimepickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uniqueIdCounter","observableOf"],"mappings":";;;;;;;;;;;;;;;;;;;AAUA;;;AAGG;AACU,MAAA,2BAA2B,GAIpC;;AAEF,IAAA,cAAc,EAAE,OAAO,CAAC,gBAAgB,EAAE;QACxC,UAAU,CACR,wBAAwB,EACxB,OAAO,CACL,kCAAkC,EAClC,SAAS,CAAC;YACR,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;YACjD,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;AAChD,SAAA,CAAC,CACH,CACF;QACD,UAAU,CACR,sBAAsB,EACtB,OAAO,CACL,kCAAkC,EAClC,SAAS,CAAC;YACR,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;YAC9C,KAAK,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AACzC,SAAA,CAAC,CACH,CACF;AACD,QAAA,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KACxE,CAAC;;AAGF,IAAA,cAAc,EAAE,OAAO,CAAC,gBAAgB,EAAE;QACxC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QACpC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;;;AAIrC,QAAA,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,8CAA8C,CAAC,CAAC;KACjF,CAAC;AAEF,IAAA,aAAa,EAAE,OAAO,CAAC,eAAe,EAAE;QACtC,UAAU,CAAC,WAAW,EAAE;AACtB,YAAA,OAAO,CACL,GAAG,EACH,SAAS,CAAC;gBACR,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;gBACrD,KAAK,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBACvD,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACjD,aAAA,CAAC,CACH;SACF,CAAC;QACF,UAAU,CAAC,YAAY,EAAE;AACvB,YAAA,OAAO,CACL,GAAG,EACH,SAAS,CAAC;gBACR,KAAK,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;gBACtD,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBACtD,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACjD,aAAA,CAAC,CACH;SACF,CAAC;KACH,CAAC;;;AC3EJ;AACM,SAAU,0BAA0B,CAAC,QAAgB,EAAA;AACzD,IAAA,OAAO,KAAK,CACV,CAA4C,yCAAA,EAAA,QAAQ,CAAsC,oCAAA,CAAA;QACxF,CAAkF,gFAAA,CAAA;QAClF,CAA0E,wEAAA,CAAA;AAC1E,QAAA,CAAA,sBAAA,CAAwB,CAC3B;AACH;;ICRY;AAAZ,CAAA,UAAY,2BAA2B,EAAA;AACrC,IAAA,2BAAA,CAAA,2BAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,2BAAA,CAAA,2BAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,2BAAA,CAAA,2BAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM;AACR,CAAC,EAJW,2BAA2B,KAA3B,2BAA2B,GAItC,EAAA,CAAA,CAAA;;MCAY,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;AAEE;;;AAGG;AACM,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,OAAO,EAAQ;;QAGtC,IAAa,CAAA,aAAA,GAAG,UAAU;;QAG1B,IAAiB,CAAA,iBAAA,GAAG,eAAe;;QAGnC,IAAkB,CAAA,kBAAA,GAAG,gBAAgB;;QAGrC,IAAc,CAAA,cAAA,GAAG,gBAAgB;;QAGjC,IAAc,CAAA,cAAA,GAAG,YAAY;;QAG7B,IAAa,CAAA,aAAA,GAAG,eAAe;;QAG/B,IAAa,CAAA,aAAA,GAAG,WAAW;;QAG3B,IAAkB,CAAA,kBAAA,GAAG,mBAAmB;;QAGxC,IAAkB,CAAA,kBAAA,GAAG,eAAe;;QAGpC,IAAsB,CAAA,sBAAA,GAAG,aAAa;;QAGtC,IAAqB,CAAA,qBAAA,GAAG,cAAc;;QAGtC,IAA0B,CAAA,0BAAA,GAAG,uBAAuB;;QAGpD,IAAc,CAAA,cAAA,GAAG,YAAY;;QAG7B,IAAY,CAAA,YAAA,GAAG,UAAU;;QAkBzB,IAA0B,CAAA,0BAAA,GAAG,aAAa;;QAG1C,IAA4B,CAAA,4BAAA,GAAG,eAAe;;QAG9C,IAAO,CAAA,OAAA,GAAG,IAAI;;QAGd,IAAW,CAAA,WAAA,GAAG,QAAQ;AACvB;;AAzBC,IAAA,eAAe,CAAC,MAAc,EAAA;QAC5B,OAAO,CAAA,KAAA,EAAQ,MAAM,CAAA,CAAE;;;IAIzB,eAAe,CAAC,KAAa,EAAE,GAAW,EAAA;AACxC,QAAA,OAAO,CAAG,EAAA,KAAK,CAAW,QAAA,EAAA,GAAG,EAAE;;;IAIjC,oBAAoB,CAAC,KAAa,EAAE,GAAW,EAAA;AAC7C,QAAA,OAAO,CAAG,EAAA,KAAK,CAAO,IAAA,EAAA,GAAG,EAAE;;iIA7DlB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,uBAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cADR,MAAM,EAAA,CAAA,CAAA;;2FACnB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACalC,IAAIA,iBAAe,GAAG,CAAC;AAEvB;;;AAGG;MACU,eAAe,CAAA;IAG1B,WACS,CAAA,KAAa,EACb,YAAoB,EACpB,SAAiB,EACjB,OAAgB,EAChB,YAAsB,EAAA;QAJtB,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAY,CAAA,YAAA,GAAZ,YAAY;QACZ,IAAS,CAAA,SAAA,GAAT,SAAS;QACT,IAAO,CAAA,OAAA,GAAP,OAAO;QACP,IAAY,CAAA,YAAA,GAAZ,YAAY;QAPZ,IAAE,CAAA,EAAA,GAAGA,iBAAe,EAAE;;AAShC;AAED;;;AAGG;MAcU,eAAe,CAAA;AAb5B,IAAA,WAAA,GAAA;AAcU,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAA0B,UAAU,CAAC;AACzD,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;AAExB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAQpC;;;AAGG;QACM,IAAe,CAAA,eAAA,GAAW,CAAC;;QAY3B,IAAO,CAAA,OAAA,GAAG,CAAC;;QAGX,IAAsB,CAAA,sBAAA,GAAG,KAAK;;QAG9B,IAAU,CAAA,UAAA,GAAG,CAAC;;AAGb,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAU;AAmC1D;;;;AAIG;AACH,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,GAAsB,KAAK,GAAG;AAmC5C;AAhEC,IAAA,YAAY,CAAC,IAAqB,EAAA;QAChC,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjD;;QAEF,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;IAG3C,qBAAqB,CAAC,IAAqB,EAAE,KAAiB,EAAA;AAC5D,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;;;;IAKpB,aAAa,CAAC,QAAgB,EAAE,QAAgB,EAAA;QAC9C,IAAI,UAAU,GAAG,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ;;QAGnD,IAAI,QAAQ,EAAE;AACZ,YAAA,UAAU,IAAI,IAAI,CAAC,eAAe;;AAGpC,QAAA,OAAO,UAAU,KAAK,IAAI,CAAC,UAAU;;AAUvC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;AACxC,QAAA,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;AAE9B,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,aAAa,EAAE;AACpC,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;;AAG7F,QAAA,IAAI,OAAO,CAAC,iBAAiB,CAAC,IAAI,aAAa,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACrE,YAAA,IAAI,CAAC,YAAY,GAAG,CAAA,EAAG,CAAC,EAAE,GAAG,IAAI,CAAC,eAAe,IAAI,OAAO,GAAG;;AAGjE,QAAA,IAAI,aAAa,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACrC,IAAI,CAAC,UAAU,GAAG,CAAA,EAAG,GAAG,GAAG,OAAO,GAAG;;;IAIzC,gBAAgB,CAAC,WAAW,GAAG,IAAI,EAAA;QACjC,eAAe,CACb,MAAK;YACH,UAAU,CAAC,MAAK;AACd,gBAAA,MAAM,UAAU,GAAuB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CACjF,2BAA2B,CAC5B;gBAED,IAAI,UAAU,EAAE;oBACd,UAAU,CAAC,KAAK,EAAE;;AAEtB,aAAC,CAAC;SACH,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAC7B;;iIA9GQ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,4jBCnD5B,ktGAsFA,EAAA,MAAA,EAAA,CAAA,o1HAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FDnCa,eAAe,EAAA,UAAA,EAAA,CAAA;kBAb3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAGzB,IAAA,EAAA;AACJ,wBAAA,OAAO,EAAE,mBAAmB;AAC5B,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,eAAe,EAAE,MAAM;qBACxB,EACS,QAAA,EAAA,iBAAiB,iBACZ,iBAAiB,CAAC,IAAI,EACpB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,ktGAAA,EAAA,MAAA,EAAA,CAAA,o1HAAA,CAAA,EAAA;8BAStC,KAAK,EAAA,CAAA;sBAAb;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBAMQ,eAAe,EAAA,CAAA;sBAAvB;gBAGQ,UAAU,EAAA,CAAA;sBAAlB;gBAGQ,aAAa,EAAA,CAAA;sBAArB;gBAGQ,qBAAqB,EAAA,CAAA;sBAA7B;gBAGQ,OAAO,EAAA,CAAA;sBAAf;gBAGQ,sBAAsB,EAAA,CAAA;sBAA9B;gBAGQ,UAAU,EAAA,CAAA;sBAAlB;gBAGS,mBAAmB,EAAA,CAAA;sBAA5B;;;AEpDH,MAAM,aAAa,GAAG,CAAC;AAEvB,IAAI,eAAe,GAAG,CAAC;AAEvB;;;AAGG;MAUU,YAAY,CAAA;AAiDvB,IAAA,WAAA,GAAA;QAhDA,IAAQ,CAAA,QAAA,GAAG,MAAM,CAAqB,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE;QACnE,IAAI,CAAA,IAAA,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACjD,IAAY,CAAA,YAAA,GAAG,MAAM,CAAqB,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE;AACpF,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,qBAAqB,CAAC;QAEpC,IAAI,CAAA,IAAA,GAA0B,MAAM;;QAML,IAAe,CAAA,eAAA,GAAG,KAAK;;AAGrD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAK;;AAG7B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAQ;;AAGzC,QAAA,IAAA,CAAA,gBAAgB,GAAoB,IAAI,YAAY,EAAK;;QAqB5E,IAAS,CAAA,SAAA,GAAmD,EAAE;QAsDtD,IAAS,CAAA,SAAA,GAAa,IAAI;AA9ChC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,MAAM,0BAA0B,CAAC,iBAAiB,CAAC;;AAGrD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,MAAM,0BAA0B,CAAC,sBAAsB,CAAC;;QAG1D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;;AAK1C;;AAEG;AACH,IAAA,IACI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;;IAEzB,IAAI,UAAU,CAAC,KAAQ,EAAA;AACrB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW;QACtC,IAAI,CAAC,WAAW,GAAG,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACjD,QAAA,IACE,aAAa;AACb,YAAA,IAAI,CAAC,WAAW;AAChB,YAAA,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,EAChE;YACA,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE;AAChE,gBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;;iBACtB;AACL,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;;;;;AAMhC,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;;IAEvB,IAAI,QAAQ,CAAC,KAAe,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACtB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC;;IAIjE,kBAAkB,GAAA;QAChB,IAAI,CAAC,KAAK,EAAE;;;AAId,IAAA,aAAa,CAAC,IAAY,EAAA;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAC7C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EACvC,IAAI,EACJ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CACzC;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU;AAE7B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;;;IAI9B,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;;;IAIlB,KAAK,GAAA;QACX,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC/D,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEpE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EACvC,CAAC,EACD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CACzC;AACD,QAAA,IAAI,CAAC,gBAAgB;AACnB,YAAA,CAAC,aAAa;AACZ,gBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,YAAY,CAAC;AACxC,gBAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;AACnC,gBAAA,aAAa;QAEf,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,gBAAgB,EAAE;;;IAIjB,aAAa,GAAA;QACnB,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;QACxD,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QAChE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC;;QAG5D,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;AAC5C,YAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE;AACnE,SAAC,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;;;IAInF,gBAAgB,GAAA;AACtB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;QACpE,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;AAC9C,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;AAC1E,YAAA,IAAI,IAAI,KAAK,aAAa,EAAE;AAC1B,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpB,IAAI,GAAG,CAAC;;YAEV,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CACvC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EACvC,CAAC,GAAG,CAAC,EACL,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CACzC;AAED,YAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;gBACnD,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;AACxD,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC;gBAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC;AACxD,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CACtC,IAAI,eAAe,CAAC,UAAU,EAAE,CAAG,EAAA,UAAU,CAAE,CAAA,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,CACzE;;AAGH,YAAA,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACzD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC;AACrF,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CACtC,IAAI,eAAe,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAC7D;;;AAIL;;;AAGG;AACK,IAAA,sBAAsB,CAAC,IAAc,EAAA;AAC3C,QAAA,OAAO,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU;cAC/D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI;cAC1B,IAAI;;AAGF,IAAA,aAAa,CAAC,SAAiB,EAAA;AACrC,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;;;AAIjC,IAAA,0BAA0B,CAAC,KAAoB,EAAA;;;;AAK7C,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAE3B,QAAA,QAAQ,KAAK,CAAC,OAAO;AACnB,YAAA,KAAK,UAAU;gBACb,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjF;AACF,YAAA,KAAK,WAAW;gBACd,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACjF;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBACrE;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBACpE;AACF,YAAA,KAAK,IAAI;gBACP,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAC7C,IAAI,CAAC,WAAW,EAChB,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAC5C;gBACD;AACF,YAAA,KAAK,GAAG;gBACN,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAC7C,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;oBAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAC1C;gBACD;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACtB,sBAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACrD,sBAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBACzD;AACF,YAAA,KAAK,SAAS;AACZ,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACtB,sBAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACpD,sBAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBACxD;AACF,YAAA,KAAK,KAAK;AACV,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AACzD,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;;oBAG3D,KAAK,CAAC,cAAc,EAAE;;gBAExB;AACF,YAAA;;gBAEE;;AAGJ,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;YAC7D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;;QAG7C,IAAI,CAAC,gBAAgB,EAAE;;QAEvB,KAAK,CAAC,cAAc,EAAE;;;AAIxB,IAAA,gBAAgB,CAAC,WAAqB,EAAA;AACpC,QAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,WAAW,CAAC;;;IAI7C,MAAM,GAAA;QACZ,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK;;iIA1RpC,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAZ,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAYH,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,CAAA,iBAAA,EAAA,iBAAA,EAAA,gBAAgB,CAYzB,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,eAAe,EC7E5B,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,g0BAuBA,ED4BY,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,EAHb,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAC,2BAA2B,CAAC,aAAa,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAK5C,YAAY,EAAA,UAAA,EAAA,CAAA;kBATxB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,YAEhB,cAAc,EAAA,UAAA,EACZ,CAAC,2BAA2B,CAAC,aAAa,CAAC,EAAA,aAAA,EACxC,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA,CAAC,eAAe,CAAC,EAAA,QAAA,EAAA,g0BAAA,EAAA;wDAQjB,IAAI,EAAA,CAAA;sBAAZ;gBAGQ,UAAU,EAAA,CAAA;sBAAlB;gBAGuC,eAAe,EAAA,CAAA;sBAAtD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAG5B,cAAc,EAAA,CAAA;sBAAvB;gBAGkB,cAAc,EAAA,CAAA;sBAAhC;gBAGkB,gBAAgB,EAAA,CAAA;sBAAlC;gBAG2B,gBAAgB,EAAA,CAAA;sBAA3C,SAAS;uBAAC,eAAe;gBA2CtB,UAAU,EAAA,CAAA;sBADb;gBAuBG,QAAQ,EAAA,CAAA;sBADX;;;AE5GI,MAAM,YAAY,GAAG;AAErB,MAAM,WAAW,GAAG;AAE3B;;;AAGG;MASU,gBAAgB,CAAA;AAwC3B,IAAA,WAAA,GAAA;QAvCA,IAAQ,CAAA,QAAA,GAAG,MAAM,CAAqB,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE;QACnE,IAAI,CAAA,IAAA,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACjD,IAAY,CAAA,YAAA,GAAG,MAAM,CAAqB,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE;QAEnF,IAAI,CAAA,IAAA,GAA0B,MAAM;;AAMnC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAK;;AAG7B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAQ;;AAGzC,QAAA,IAAA,CAAA,gBAAgB,GAAoB,IAAI,YAAY,EAAK;QAoEpE,IAAS,CAAA,SAAA,GAAa,IAAI;AA5ChC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,MAAM,0BAA0B,CAAC,iBAAiB,CAAC;;AAGrD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,MAAM,0BAA0B,CAAC,sBAAsB,CAAC;;QAG1D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;;;AAI1C,IAAA,IACI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;;IAEzB,IAAI,UAAU,CAAC,KAAQ,EAAA;AACrB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW;QACtC,IAAI,CAAC,WAAW,GAAG,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACjD,QAAA,IACE,aAAa;AACb,YAAA,IAAI,CAAC,WAAW;YAChB,CAAC,mBAAmB,CAClB,IAAI,CAAC,QAAQ,EACb,aAAa,EACb,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,CACb,EACD;YACA,IAAI,CAAC,KAAK,EAAE;;;;AAMhB,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;;IAEvB,IAAI,QAAQ,CAAC,KAAe,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;;;AAK9E,IAAA,IACI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;;IAEtB,IAAI,OAAO,CAAC,KAAe,EAAA;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;;;AAK5E,IAAA,IACI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;;IAEtB,IAAI,OAAO,CAAC,KAAe,EAAA;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;;IAI5E,kBAAkB,GAAA;QAChB,IAAI,CAAC,KAAK,EAAE;;;AAId,IAAA,aAAa,CAAC,IAAY,EAAA;AACxB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;AACrD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAEzE,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAC7C,IAAI,EACJ,KAAK,EACL,IAAI,CAAC,GAAG,CACN,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAChD,EACD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CACzC;AAED,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU;AAE7B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;;;IAI9B,cAAc,GAAA;AACZ,QAAA,OAAO,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;;;IAI5E,KAAK,GAAA;AACX,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC9D,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AAE5D,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;QAEzD,MAAM,aAAa,GACjB,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;AAE1F,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAa,EAAE,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;AACzD,YAAA,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AAC3B,YAAA,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE;gBAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChE,GAAG,GAAG,EAAE;;;;;AAMN,IAAA,kBAAkB,CAAC,IAAY,EAAA;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAChF,QAAA,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;;;AAI5E,IAAA,iBAAiB,CAAC,IAAY,EAAA;;QAEpC,IACE,IAAI,KAAK,SAAS;AAClB,YAAA,IAAI,KAAK,IAAI;AACb,aAAC,IAAI,CAAC,OAAO,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5D,aAAC,IAAI,CAAC,OAAO,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAC5D;AACA,YAAA,OAAO,KAAK;;;AAId,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,OAAO,IAAI;;AAGb,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;;AAGxD,QAAA,KACE,IAAI,IAAI,GAAG,WAAW,EACtB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EACpC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,EAC7C;AACA,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACzB,gBAAA,OAAO,IAAI;;;AAIf,QAAA,OAAO,KAAK;;AAGd;;;AAGG;AACH,IAAA,mBAAmB,CAAC,GAAQ,EAAA;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI;;;AAIrF,IAAA,0BAA0B,CAAC,KAAoB,EAAA;AAC7C,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAE3B,QAAA,QAAQ,KAAK,CAAC,OAAO;AACnB,YAAA,KAAK,UAAU;gBACb,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAClF;AACF,YAAA,KAAK,WAAW;gBACd,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClF;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,CAAC;gBAChF;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC;gBAC/E;AACF,YAAA,KAAK,IAAI;AACP,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAC9C,IAAI,CAAC,WAAW,EAChB,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAC9E;gBACD;AACF,YAAA,KAAK,GAAG;AACN,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAC9C,IAAI,CAAC,WAAW,EAChB,YAAY;AACV,oBAAA,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;AAC5E,oBAAA,CAAC,CACJ;gBACD;AACF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAC9C,IAAI,CAAC,WAAW,EAChB,KAAK,CAAC,MAAM,GAAG,CAAC,YAAY,GAAG,EAAE,GAAG,CAAC,YAAY,CAClD;gBACD;AACF,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAC9C,IAAI,CAAC,WAAW,EAChB,KAAK,CAAC,MAAM,GAAG,YAAY,GAAG,EAAE,GAAG,YAAY,CAChD;gBACD;AACF,YAAA,KAAK,KAAK;AACV,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC3D;AACF,YAAA;;gBAEE;;AAGJ,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;YAC7D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;;QAG7C,IAAI,CAAC,gBAAgB,EAAE;;QAEvB,KAAK,CAAC,cAAc,EAAE;;;IAIxB,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE;;;IAIlC,MAAM,GAAA;QACZ,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK;;iIAnRpC,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAoBhB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,eAAe,ECrE5B,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,qmBAcA,4CDiCY,eAAe,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAEd,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAR5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAErB,QAAA,EAAA,kBAAkB,EACb,aAAA,EAAA,iBAAiB,CAAC,IAAI,EACpB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA,CAAC,eAAe,CAAC,EAAA,QAAA,EAAA,qmBAAA,EAAA;wDAOjB,IAAI,EAAA,CAAA;sBAAZ;gBAGQ,UAAU,EAAA,CAAA;sBAAlB;gBAGS,cAAc,EAAA,CAAA;sBAAvB;gBAGkB,cAAc,EAAA,CAAA;sBAAhC;gBAGkB,gBAAgB,EAAA,CAAA;sBAAlC;gBAG2B,gBAAgB,EAAA,CAAA;sBAA3C,SAAS;uBAAC,eAAe;gBAkCtB,UAAU,EAAA,CAAA;sBADb;gBAyBG,QAAQ,EAAA,CAAA;sBADX;gBAYG,OAAO,EAAA,CAAA;sBADV;gBAWG,OAAO,EAAA,CAAA;sBADV;;AAqLG,SAAU,mBAAmB,CACjC,WAA+B,EAC/B,KAAQ,EACR,KAAQ,EACR,OAAiB,EACjB,OAAiB,EAAA;IAEjB,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;IACxC,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;IACxC,MAAM,YAAY,GAAG,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC;AACnE,IAAA,QACE,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,YAAY,IAAI,YAAY,CAAC;AACjD,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,YAAY,IAAI,YAAY,CAAC;AAErD;AAEA;;;;AAIG;AACG,SAAU,eAAe,CAC7B,WAA+B,EAC/B,UAAa,EACb,OAAiB,EACjB,OAAiB,EAAA;IAEjB,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC;AAClD,IAAA,OAAO,eAAe,CAAC,UAAU,GAAG,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,CAAC;AACnG;AAEA;;;AAGG;AACH,SAAS,eAAe,CACtB,WAA+B,EAC/B,OAAiB,EACjB,OAAiB,EAAA;IAEjB,IAAI,YAAY,GAAG,CAAC;IACpB,IAAI,OAAO,EAAE;QACX,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;AAC5C,QAAA,YAAY,GAAG,OAAO,GAAG,YAAY,GAAG,CAAC;;SACpC,IAAI,OAAO,EAAE;AAClB,QAAA,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;;AAE7C,IAAA,OAAO,YAAY;AACrB;AAEA;AACA,SAAS,eAAe,CAAC,CAAS,EAAE,CAAS,EAAA;IAC3C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B;;AEvWA,MAAM,kBAAkB,GAAG,+BAA+B,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAEvE,MAAM,YAAY,GAAG;AACrB,MAAM,kBAAkB,GAAG;AAC3B,MAAM,kBAAkB,GAAG;AAC3B,MAAM,iBAAiB,GAAG;AAcjC;;;AAGG;MAeU,QAAQ,CAAA;AAdrB,IAAA,WAAA,GAAA;AAeU,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAqB,eAAe,CAAC;AACtD,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC9C,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;;QAM3B,IAAQ,CAAA,QAAA,GAAW,CAAC;QAEpB,IAAa,CAAA,aAAA,GAAY,KAAK;;QAGC,IAAU,CAAA,UAAA,GAAY,KAAK;;QAG1D,IAAI,CAAA,IAAA,GAAY,IAAI;;AAGnB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAK;;AAGtC,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAK;;AAG/B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAQ;;QAG5D,IAAS,CAAA,SAAA,GAAY,IAAI;QAEzB,IAAM,CAAA,MAAA,GAAgB,EAAE;QAExB,IAAQ,CAAA,QAAA,GAAgB,EAAE;QAMlB,IAAY,CAAA,YAAA,GAAG,KAAK;;AA8FpB,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,KAA8B,KAAI;AACxD,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACnB,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC/B,SAAC;AAED;;;AAGG;AACK,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,KAA8B,KAAI;AACxD,YAAA,IAAI,KAAK,CAAC,UAAU,EAAE;gBACpB,KAAK,CAAC,cAAc,EAAE;;AAExB,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACrB,SAAC;;AAGO,QAAA,IAAA,CAAA,UAAU,GAAG,CAAC,KAA8B,KAAI;AACtD,YAAA,IAAI,KAAK,CAAC,UAAU,EAAE;gBACpB,KAAK,CAAC,cAAc,EAAE;;YAExB,IAAI,CAAC,mBAAmB,EAAE;AAE1B,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;gBACzC,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACzC,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;;;AAGhC,SAAC;AAmNF;AA7UC;;AAEG;AACH,IAAA,IACI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;;IAEzB,IAAI,UAAU,CAAC,KAAQ,EAAA;AACrB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW;AACtC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;AAC7E,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE;YAC9D,IAAI,CAAC,KAAK,EAAE;;;;AAMhB,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;;IAEvB,IAAI,QAAQ,CAAC,KAAe,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACnF,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS;;;;AAMpC,IAAA,IACI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;;IAEtB,IAAI,OAAO,CAAC,KAAe,EAAA;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;;;AAKpF,IAAA,IACI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;;IAEtB,IAAI,OAAO,CAAC,KAAe,EAAA;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;;;IAKpF,IACI,SAAS,CAAC,KAAmB,EAAA;AAC/B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,KAAK,QAAQ;;AAGrC,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;AACnD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;QAC/D,IAAI,GAAG,GAAG,CAAC;QACX,IAAI,MAAM,GAAG,kBAAkB;AAC/B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,GAAG,EAAE;YAC/D,MAAM,GAAG,KAAK,GAAG,kBAAkB,GAAG,kBAAkB;AACxD,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,MAAM,GAAG,kBAAkB;;AAE7B,YAAA,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;;aAClD;AACL,YAAA,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC;;QAErD,OAAO;YACL,MAAM,EAAE,CAAG,EAAA,MAAM,CAAG,CAAA,CAAA;AACpB,YAAA,SAAS,EAAE,CAAA,EAAG,EAAE,GAAG,MAAM,CAAG,CAAA,CAAA;YAC5B,SAAS,EAAE,CAAU,OAAA,EAAA,GAAG,CAAM,IAAA,CAAA;SAC/B;;IAGH,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;QAC3D,IAAI,CAAC,KAAK,EAAE;;IAGd,WAAW,GAAA;QACT,IAAI,CAAC,mBAAmB,EAAE;;IAG5B,WAAW,GAAA;QACT,IAAI,CAAC,KAAK,EAAE;;;AAqCN,IAAA,iBAAiB,CAAC,YAAqC,EAAA;;;AAG7D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS;AAC/B,QAAA,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC;QAC1C,MAAM,aAAa,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW;QACzD,MAAM,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS;QACrD,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC;QAC/E,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC;QAE5E,IAAI,OAAO,EAAE;YACX,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC;;;;IAKzE,mBAAmB,GAAA;AACzB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS;QAC/B,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC;QAChF,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC;QAC5E,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC;QAChF,QAAQ,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC;QAC7E,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC;;;IAI1E,KAAK,GAAA;AACX,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QAExB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;QAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;AAClD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,MAAM,KAAK,GAAgB,EAAE;AAC7B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE;gBAChC,MAAM,MAAM,GAAG,kBAAkB;gBAEjC,MAAM,IAAI,GAAG,CAAC;gBACd,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CACvC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EACvC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,EACJ,CAAC,CACF;;AAGD,gBAAA,MAAM,OAAO,GACX,CAAC,CAAC,IAAI,CAAC,OAAO;AACX,oBAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAY,IAAI,CAAC;qBAC1E,CAAC,IAAI,CAAC,OAAO;AACX,wBAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAY,IAAI,CAAC,CAAC;AAC5E,qBAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,2BAA2B,CAAC,IAAI,CAAC,CAAC;;gBAG/E,KAAK,CAAC,IAAI,CAAC;AACT,oBAAA,KAAK,EAAE,CAAC;AACR,oBAAA,YAAY,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC;oBACrD,OAAO;AACP,oBAAA,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,iBAAiB;AACjE,oBAAA,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,iBAAiB;AACnE,iBAAA,CAAC;;;AAIJ,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;AACtB,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;;iBACxC;AACL,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;;;aAE3C;AACL,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE;gBAChC,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC7B,MAAM,MAAM,GAAG,KAAK,GAAG,kBAAkB,GAAG,kBAAkB;gBAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CACvC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EACvC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,CAAC,EACD,CAAC,CACF;;AAGD,gBAAA,MAAM,OAAO,GACX,CAAC,CAAC,IAAI,CAAC,OAAO;AACX,oBAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAY,IAAI,CAAC;qBAC1E,CAAC,IAAI,CAAC,OAAO;AACX,wBAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAY,IAAI,CAAC,CAAC;AAC5E,qBAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,2BAA2B,CAAC,IAAI,CAAC,CAAC;AAE/E,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACf,oBAAA,KAAK,EAAE,CAAC;AACR,oBAAA,YAAY,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC;oBAC3C,OAAO;AACP,oBAAA,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,iBAAiB;AACjE,oBAAA,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,iBAAiB;AAClE,oBAAA,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK;AACvC,iBAAA,CAAC;;;AAIN,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAC9C,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE;YACjC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CACvC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EACvC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,CAAC,CACF;YACD,MAAM,OAAO,GACX,CAAC,CAAC,IAAI,CAAC,OAAO,IAAK,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAY,IAAI,CAAC;AACpF,iBAAC,CAAC,IAAI,CAAC,OAAO,IAAK,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAY,IAAI,CAAC,CAAC;AACrF,iBAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,2BAA2B,CAAC,MAAM,CAAC,CAAC;AACjF,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACjB,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,YAAY,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC;gBAC7C,OAAO;AACP,gBAAA,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,kBAAkB,GAAG,iBAAiB;AAC7E,gBAAA,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,kBAAkB,GAAG,iBAAiB;AAC/E,aAAA,CAAC;;;AAIN;;;AAGG;AACK,IAAA,OAAO,CAAC,KAA8B,EAAA;AAC5C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa;AAC9C,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,qBAAqB,EAAE;AACnD,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW;AACjC,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY;QACnC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,wBAAwB,CAAC,KAAK,CAAC;AACxD,QAAA,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,WAAW,CAAC,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;AACrE,QAAA,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,WAAW,CAAC,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC;QAErE,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACrF,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAClC,QAAA,MAAM,KAAK,GACT,IAAI,CAAC,SAAS;YACd,CAAC,GAAG,CAAC,KAAK,IAAI,kBAAkB,GAAG,GAAG,CAAC,GAAG,KAAK,IAAI,kBAAkB,GAAG,GAAG,CAAC,IAAI,CAAC;AAEnF,QAAA,IAAI,MAAM,GAAG,CAAC,EAAE;YACd,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM;;QAE/B,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AAErC,QAAA,IAAI,IAAI;AACR,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;AACtB,oBAAA,KAAK,GAAG,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK;;qBAC3B;;;AAGL,oBAAA,KAAK,GAAG,KAAK,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE;;;iBAElC;AACL,gBAAA,IAAI,KAAK,KAAK,EAAE,EAAE;oBAChB,KAAK,GAAG,CAAC;;AAEX,gBAAA,KAAK,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE;;YAG3E,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CACjC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EACvC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,KAAK,EACL,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CACzC;;aACI;AACL,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,KAAK,IAAI,IAAI,CAAC,QAAQ;;AAExB,YAAA,IAAI,KAAK,KAAK,EAAE,EAAE;gBAChB,KAAK,GAAG,CAAC;;YAEX,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CACjC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EACvC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,KAAK,CACN;;;;QAKH,IACE,IAAI,CAAC,UAAU;YACf,CAAC,IAAI,CAAC,UAAU,CACd,IAAI,EACJ,IAAI,CAAC,SAAS,GAAG,2BAA2B,CAAC,IAAI,GAAG,2BAA2B,CAAC,MAAM,CACvF,EACD;YACA;;AAGF,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;QACtC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;;iIArXlC,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qHAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAeC,gBAAgB,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,sBAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1EtC,kgCAyBA,EAAA,MAAA,EAAA,CAAA,spEAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FDkCa,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAdpB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAGf,IAAA,EAAA;AACJ,wBAAA,MAAM,EAAE,OAAO;AACf,wBAAA,OAAO,EAAE,WAAW;AACpB,wBAAA,aAAa,EAAE,sBAAsB;AACrC,wBAAA,cAAc,EAAE,sBAAsB;qBACvC,EACS,QAAA,EAAA,UAAU,iBACL,iBAAiB,CAAC,IAAI,EACpB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,kgCAAA,EAAA,MAAA,EAAA,CAAA,spEAAA,CAAA,EAAA;8BAStC,UAAU,EAAA,CAAA;sBAAlB;gBAGQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,aAAa,EAAA,CAAA;sBAArB;gBAGuC,UAAU,EAAA,CAAA;sBAAjD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAG7B,IAAI,EAAA,CAAA;sBAAZ;gBAGS,cAAc,EAAA,CAAA;sBAAvB;gBAGS,gBAAgB,EAAA,CAAA;sBAAzB;gBAGkB,cAAc,EAAA,CAAA;sBAAhC;gBAmBG,UAAU,EAAA,CAAA;sBADb;gBAeG,QAAQ,EAAA,CAAA;sBADX;gBAcG,OAAO,EAAA,CAAA;sBADV;gBAWG,OAAO,EAAA,CAAA;sBADV;gBAWG,SAAS,EAAA,CAAA;sBADZ;;AA6RH;AACA,SAAS,YAAY,CAAC,KAA8B,EAAA;;;;IAIlD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;AAC9B;AAEA;AACA,SAAS,wBAAwB,CAAC,KAA8B,EAAA;AAC9D,IAAA,IAAI,KAAuC;AAE3C,IAAA,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;;AAEvB,QAAA,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;;SAC9C;QACL,KAAK,GAAG,KAAK;;AAGf,IAAA,OAAO,KAAK;AACd;;AE5aA,SAAS,GAAG,CAAC,GAAgB,EAAE,IAAY,EAAA;AACzC,IAAA,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AACjB,IAAA,OAAO,GAAG,CAAC,MAAM,GAAG,IAAI;AAAE,QAAA,GAAG,GAAG,GAAG,GAAG,GAAG;AACzC,IAAA,OAAO,GAAG;AACZ;MAUa,YAAY,CAAA;IAIvB,IACI,YAAY,CAAC,KAAkB,EAAA;AACjC,QAAA,IAAI,CAAC,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC;;IAI9C,IACI,OAAO,CAAC,KAAkB,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC;;IAIzC,IACI,OAAO,CAAC,KAAkB,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC;;IAIzC,IACI,SAAS,CAAC,KAAkB,EAAA;AAC9B,QAAA,IAAI,CAAC,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;;AAE9B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC;;AAcpC,IAAA,WAAA,GAAA;AAzCQ,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;AAC5B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAM/B,IAAS,CAAA,SAAA,GAAW,CAAC;QAMrB,IAAI,CAAA,IAAA,GAAG,CAAC;QAMR,IAAI,CAAA,IAAA,GAAG,QAAQ;AAWb,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAe;QAIpD,IAAe,CAAA,eAAA,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAChD,IAAgB,CAAA,gBAAA,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QAClD,IAAkB,CAAA,kBAAA,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;QAM9D,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE;AAClE,YAAA,OAAO,EAAE,IAAI;AACd,SAAA,CAAC;;QAGF,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC;QACrE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE;AACnE,YAAA,OAAO,EAAE,IAAI;AACd,SAAA,CAAC;;AAGJ,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,EAAE,aAAa,KAAK,QAAQ,EAAE,aAAa;;AAG9F,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,aAAiC;;;;AAKvD,IAAA,IAAI,KAAK,GAAA;;;AAGP,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;;AAIpD,YAAA,IAAI,YAAY,CAAC,MAAM,EAAE;gBACvB,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK;;iBACxC;gBACL,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW;;;AAGvD,QAAA,OAAO,IAAI;;AAGb,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK;;IAGpB,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC;;IAGpC,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;;AAGrB;;;AAGG;AACH,IAAA,UAAU,CAAC,KAAkB,EAAA;AAC3B,QAAA,IAAI,KAAK,KAAK,EAAE,EAAE;YAChB,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;;aAClC;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,EAAE;;AAE9B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;AAGzB;;;AAGG;AACH,IAAA,gBAAgB,CAAC,KAAkB,EAAA;QACjC,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;AAGzB,IAAA,cAAc,CAAC,KAAoB,EAAA;AACjC,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9C,IAAI,KAAK,GAAkB,IAAI;AAC/B,YAAA,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE;AAC9B,gBAAA,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;AACzC,gBAAA,KAAK,IAAI,IAAI,CAAC,SAAS;gBACvB,KAAK,CAAC,eAAe,EAAE;;AAClB,iBAAA,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE;AACvC,gBAAA,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;AACzC,gBAAA,KAAK,IAAI,IAAI,CAAC,SAAS;gBACvB,KAAK,CAAC,eAAe,EAAE;;;AAIzB,YAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACtB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;gBAC5B,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;;;AAK7C;;;AAGG;AACH,IAAA,eAAe,CAAC,KAAoB,EAAA;AAClC,QAAA,MAAM,GAAG,GAAG,KAAK,EAAE,GAAG,IAAI,IAAI;AAC9B,QAAA,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,KAAK,OAAO,EAAE;YACzC,KAAK,CAAC,cAAc,EAAE;;;IAI1B,mBAAmB,GAAA;QACjB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;;IAGzC,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,KAAK,EAAE,EAAE;YACnC;;AAGF,QAAA,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,IAAI,CAAC;;AAEpE,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;AACpE,YAAA,IAAI,YAAY,KAAK,KAAK,EAAE;AAC1B,gBAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;AAC7B,gBAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;;AAErC,YAAA,IAAI,CAAC,MAAM,GAAG,YAAY;;;AAI9B;;AAEG;IACH,WAAW,GAAA;QACT,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC;QACtE,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC;QACxE,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC;;iIAlL9D,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qHAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,MAAA,EAAA,cAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBARxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,IAAI,EAAE;AACJ,wBAAA,QAAQ,EAAE,cAAc;AACxB,wBAAA,SAAS,EAAE,eAAe;AAC3B,qBAAA;AACD,oBAAA,QAAQ,EAAE,cAAc;AACzB,iBAAA;wDAMK,YAAY,EAAA,CAAA;sBADf,KAAK;uBAAC,cAAc;gBAOjB,OAAO,EAAA,CAAA;sBADV,KAAK;uBAAC,SAAS;gBAOZ,OAAO,EAAA,CAAA;sBADV,KAAK;uBAAC,SAAS;gBAOZ,SAAS,EAAA,CAAA;sBADZ,KAAK;uBAAC,WAAW;gBASR,gBAAgB,EAAA,CAAA;sBAAzB;;MAqKU,WAAW,CAAA;;AA4DtB,IAAA,IACI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;;IAEzB,IAAI,UAAU,CAAC,KAAQ,EAAA;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;;;AAK/E,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;;IAEvB,IAAI,QAAQ,CAAC,KAAe,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACnF,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS;;;;AAMpC,IAAA,IACI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;;IAEtB,IAAI,OAAO,CAAC,KAAe,EAAA;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;;;AAKpF,IAAA,IACI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;;IAEtB,IAAI,OAAO,CAAC,KAAe,EAAA;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;;;AAKpF,IAAA,IACI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU;;IAExB,IAAI,SAAS,CAAC,KAAmB,EAAA;AAC/B,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;AAKzB,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,UAAU,KAAK,MAAM;;AAGnC,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,UAAU,KAAK,MAAM;;AAGnC,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,OAAO,IAAI;;iBACN;AACL,gBAAA,OAAO,IAAI;;;AAIf,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;;AAGlC,QAAA,IAAI,IAAI,KAAK,CAAC,EAAE;AACd,YAAA,OAAO,IAAI;;aACN;AACL,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC;;;AAI5D,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;AAGtE,QAAA,OAAO,IAAI;;AAGb,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,KAAK,GAAG,EAAE,EAAE;AACd,YAAA,OAAO,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;;AAG5B,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;;AAMtB,IAAA,WAAA,GAAA;AAhKQ,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAqB,eAAe,CAAC;AACtD,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC9C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAC9B,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,CAAC;;AAG1C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAK;;AAGtC,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAK;;AAGxC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAQ;;AAGzC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAW;;AAGxC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAgB;;QAM7B,IAAS,CAAA,SAAA,GAAG,KAAK;;QAGhD,IAAQ,CAAA,QAAA,GAAG,CAAC;;QAGZ,IAAa,CAAA,aAAA,GAA0B,IAAI;;QAGZ,IAA4B,CAAA,4BAAA,GAAG,KAAK;;QAGpC,IAAS,CAAA,SAAA,GAAG,IAAI;;QAiBhB,IAAU,CAAA,UAAA,GAAG,KAAK;;QAGjD,IAAI,CAAA,IAAA,GAAY,IAAI;;QAsDrB,IAAU,CAAA,UAAA,GAAiB,MAAM;AAmDvC,QAAA,IAAI,CAAC,qCAAqC,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,MAAK;AAC3F,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;AACzC,SAAC,CAAC;;AAGJ,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAEhC,QAAA,IAAI,OAAO,CAAC,SAAS,EAAE;AACrB,YAAA,IAAI,OAAO,CAAC,SAAS,CAAC,YAAY,KAAK,OAAO,CAAC,SAAS,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,EAAE;gBACxF,IAAI,CAAC,kBAAkB,EAAE;;;;IAK/B,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,qCAAqC,EAAE;AAC9C,YAAA,IAAI,CAAC,qCAAqC,CAAC,WAAW,EAAE;;;;AAK5D,IAAA,0BAA0B,CAAC,KAAoB,EAAA;AAC7C,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW;AAEtC,QAAA,QAAQ,KAAK,CAAC,OAAO;AACnB,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,QAAQ;oBACX,IAAI,CAAC,UAAU,KAAK;AAClB,0BAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACpD,0BAAE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC;gBACvE;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,QAAQ;oBACX,IAAI,CAAC,UAAU,KAAK;AAClB,0BAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACrD,0BAAE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACxE;AACF,YAAA,KAAK,KAAK;AACV,YAAA,KAAK,KAAK;gBACR,IAAI,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,EAAE;oBAC5C;;AAEF,gBAAA,IAAI,IAAI,CAAC,SAAS,IAAI,MAAM,EAAE;AAC5B,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;oBACpC,IAAI,CAAC,kBAAkB,EAAE;;qBACpB;AACL,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;;gBAE5B;AACF,YAAA;;gBAEE;;QAGJ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;;QAGvC,KAAK,CAAC,cAAc,EAAE;;IAGxB,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;AAC7B,YAAA,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,KAAK,EAAE;;aACvC;AACL,YAAA,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,KAAK,EAAE;;;AAIlD,IAAA,sBAAsB,CAAC,KAAkB,EAAA;AACvC,QAAA,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC;AACxC,QAAA,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,EAAE;YACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAC3C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EACvC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAC7B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CACzC;AAED,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;YAChF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AAE3C,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;gBACtB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;;;;;;AAO3C,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBAC3B,IAAI,CAAC,kBAAkB,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI;;;;AAKnD,IAAA,kBAAkB,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,OAAO,KAAK;;;AAId,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;YACtB,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,EAAE;AAC/B,gBAAA,OAAO,CAAC;;AAEV,YAAA,OAAO,KAAK;;;aAGT;YACH,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,EAAE;AAC/B,gBAAA,OAAO,EAAE;;;YAIX,OAAO,KAAK,GAAG,EAAE;;;AAIrB,IAAA,wBAAwB,CAAC,KAAkB,EAAA;AACzC,QAAA,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,MAAM,IAAI,MAAM,KAAK,CAAC,EAAE;YAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAC3C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EACvC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,MAAM,CACP;AAED,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;YAChF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AAE3C,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;gBACtB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;;;;;;AAO3C,YAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;gBAC7B,IAAI,CAAC,oBAAoB,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM;;;;AAKvD,IAAA,YAAY,CAAC,SAAuB,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;;AAGtC,IAAA,iBAAiB,CAAC,IAAO,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;AAC7B,YAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;AACzB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;AAEzB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE;AAC1F,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAIlC,IAAA,aAAa,CAAC,IAAO,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;AAC7B,gBAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;;YAE3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI;;aAClC;AACL,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;;QAE9B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;;AAG3C,IAAA,mBAAmB,CAAC,IAAO,EAAA;AACzB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;;IAGlC,gBAAgB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,EAAE;gBACxC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;;;aAErC;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;;;IAI9B,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;;AAE1C,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;;IAG5B,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;;;IAI5B,gBAAgB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,kBAAkB,EAAE;;;aAEtB;AACL,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE;;;iIAjX/B,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qHAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAyBF,gBAAgB,CAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,4BAAA,EAAA,CAAA,8BAAA,EAAA,8BAAA,EAShB,gBAAgB,CAAA,EAAA,SAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAGhB,gBAAgB,CAAA,EAAA,UAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAiBhB,gBAAgB,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,GAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,oCAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,GAfJ,UAA4B,CAAA,EAAA,EAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAG5B,YAAY,EAAA,EAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,GAGV,UAA4B,CAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAG5B,YAAY,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9RhD,sqFA0EA,EAAA,MAAA,EAAA,CAAA,mmGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDkKY,SAAS,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,YAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAlMlB,YAAY,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAoMZ,WAAW,EAAA,UAAA,EAAA,CAAA;kBAdvB,SAAS;+BACE,eAAe,EAAA,QAAA,EAGf,SAAS,EACb,IAAA,EAAA;AACJ,wBAAA,OAAO,EAAE,eAAe;AACxB,wBAAA,UAAU,EAAE,GAAG;AACf,wBAAA,WAAW,EAAE,oCAAoC;AAClD,qBAAA,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAA,QAAA,EAAA,sqFAAA,EAAA,MAAA,EAAA,CAAA,mmGAAA,CAAA,EAAA;wDASzB,cAAc,EAAA,CAAA;sBAAhC;gBAGkB,gBAAgB,EAAA,CAAA;sBAAlC;gBAGkB,cAAc,EAAA,CAAA;sBAAhC;gBAGkB,UAAU,EAAA,CAAA;sBAA5B;gBAGkB,eAAe,EAAA,CAAA;sBAAjC;gBAGQ,UAAU,EAAA,CAAA;sBAAlB;gBAGuC,SAAS,EAAA,CAAA;sBAAhD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAG7B,QAAQ,EAAA,CAAA;sBAAhB;gBAGQ,aAAa,EAAA,CAAA;sBAArB;gBAGuC,4BAA4B,EAAA,CAAA;sBAAnE,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAGE,SAAS,EAAA,CAAA;sBAAhD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAG5B,gBAAgB,EAAA,CAAA;sBADzB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,IAAI,GAAE,UAA4B,CAAA,EAAE;gBAIpD,kBAAkB,EAAA,CAAA;sBAD3B,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;gBAIpC,kBAAkB,EAAA,CAAA;sBAD3B,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,IAAI,GAAE,UAA4B,CAAA,EAAE;gBAItD,oBAAoB,EAAA,CAAA;sBAD7B,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;gBAMR,UAAU,EAAA,CAAA;sBAAjD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAG7B,IAAI,EAAA,CAAA;sBAAZ;gBAIG,UAAU,EAAA,CAAA;sBADb;gBAWG,QAAQ,EAAA,CAAA;sBADX;gBAcG,OAAO,EAAA,CAAA;sBADV;gBAWG,OAAO,EAAA,CAAA;sBADV;gBAWG,SAAS,EAAA,CAAA;sBADZ;;;AEpTH;;;AAGG;MASU,WAAW,CAAA;AAwCtB,IAAA,WAAA,GAAA;QAvCA,IAAQ,CAAA,QAAA,GAAG,MAAM,CAAqB,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE;QACnE,IAAI,CAAA,IAAA,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACjD,IAAY,CAAA,YAAA,GAAG,MAAM,CAAqB,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE;QAEnF,IAAI,CAAA,IAAA,GAA0B,MAAM;;AAMnC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAK;;AAG7B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAQ;;AAGzC,QAAA,IAAA,CAAA,gBAAgB,GAAoB,IAAI,YAAY,EAAK;QA8DpE,IAAS,CAAA,SAAA,GAAa,IAAI;AAtChC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,MAAM,0BAA0B,CAAC,iBAAiB,CAAC;;AAGrD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,MAAM,0BAA0B,CAAC,sBAAsB,CAAC;;QAG1D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;;;AAI1C,IAAA,IACI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;;IAEzB,IAAI,UAAU,CAAC,KAAQ,EAAA;AACrB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW;QACtC,IAAI,CAAC,WAAW,GAAG,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACjD,QAAA,IACE,aAAa;AACb,YAAA,IAAI,CAAC,WAAW;AAChB,YAAA,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,EACxD;YACA,IAAI,CAAC,KAAK,EAAE;;;;AAMhB,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;;IAEvB,IAAI,QAAQ,CAAC,KAAe,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACtB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC;;IAIlE,kBAAkB,GAAA;QAChB,IAAI,CAAC,KAAK,EAAE;;;AAId,IAAA,cAAc,CAAC,KAAa,EAAA;QAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CACjD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,KAAK,EACL,CAAC,EACD,CAAC,EACD,CAAC,CACF;AAED,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAC7C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,KAAK,EACL,IAAI,CAAC,GAAG,CACN,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAChD,EACD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CACzC;AAED,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU;AAE7B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;;;;IAKtB,KAAK,GAAA;QACX,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC;AAChE,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AACrE,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;QAE5D,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;;QAEvD,IAAI,CAAC,OAAO,GAAG;AACb,YAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACZ,YAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACZ,YAAA,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;SACf,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;AAGpF;;;AAGG;AACK,IAAA,sBAAsB,CAAC,IAAc,EAAA;AAC3C,QAAA,OAAO,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU;cACvD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI;cAC3B,IAAI;;;IAIF,mBAAmB,CAAC,KAAa,EAAE,SAAiB,EAAA;AAC1D,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CACpC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAC1B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,KAAK,EACL,CAAC,EACD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CACzC,EACD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAC7C;AACD,QAAA,OAAO,IAAI,eAAe,CACxB,KAAK,EACL,SAAS,CAAC,iBAAiB,EAAE,EAC7B,SAAS,EACT,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAC5B;;;AAIK,IAAA,eAAe,CAAC,KAAa,EAAA;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,OAAO,IAAI;;QAGb,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,KAAK,EACL,CAAC,EACD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EACtC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CACzC;;AAGD,QAAA,KACE,IAAI,IAAI,GAAG,YAAY,EACvB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,EACtC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,EAC7C;AACA,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACzB,gBAAA,OAAO,IAAI;;;AAIf,QAAA,OAAO,KAAK;;;AAId,IAAA,0BAA0B,CAAC,KAAoB,EAAA;;;;AAK7C,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAE3B,QAAA,QAAQ,KAAK,CAAC,OAAO;AACnB,YAAA,KAAK,UAAU;gBACb,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnF;AACF,YAAA,KAAK,WAAW;gBACd,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACnF;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBACvE;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBACtE;AACF,YAAA,KAAK,IAAI;gBACP,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAC/C,IAAI,CAAC,WAAW,EAChB,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAC1C;gBACD;AACF,YAAA,KAAK,GAAG;gBACN,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAC/C,IAAI,CAAC,WAAW,EAChB,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAC9C;gBACD;AACF,YAAA,KAAK,OAAO;gBACV,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC3F;AACF,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;gBACzF;AACF,YAAA,KAAK,KAAK;AACV,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC7D;AACF,YAAA;;gBAEE;;AAGJ,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;YAC7D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;;QAG7C,IAAI,CAAC,gBAAgB,EAAE;;QAEvB,KAAK,CAAC,cAAc,EAAE;;;IAIxB,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE;;;IAIlC,MAAM,GAAA;QACZ,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK;;iIA5PpC,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAX,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EAoBX,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,eAAe,ECjE5B,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,gsBAgBA,4CD2BY,eAAe,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAEd,WAAW,EAAA,UAAA,EAAA,CAAA;kBARvB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAEf,QAAA,EAAA,aAAa,EACR,aAAA,EAAA,iBAAiB,CAAC,IAAI,EACpB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA,CAAC,eAAe,CAAC,EAAA,QAAA,EAAA,gsBAAA,EAAA;wDAOjB,IAAI,EAAA,CAAA;sBAAZ;gBAGQ,UAAU,EAAA,CAAA;sBAAlB;gBAGS,cAAc,EAAA,CAAA;sBAAvB;gBAGkB,cAAc,EAAA,CAAA;sBAAhC;gBAGkB,gBAAgB,EAAA,CAAA;sBAAlC;gBAG2B,gBAAgB,EAAA,CAAA;sBAA3C,SAAS;uBAAC,eAAe;gBAkCtB,UAAU,EAAA,CAAA;sBADb;gBAmBG,QAAQ,EAAA,CAAA;sBADX;;;AErEH;;;AAGG;MAwBU,WAAW,CAAA;AA6EtB,IAAA,WAAA,GAAA;AA5EQ,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACrC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC9C,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QACxB,IAAQ,CAAA,QAAA,GAAG,MAAM,CAAqB,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE;QAC3E,IAAY,CAAA,YAAA,GAAG,MAAM,CAAqB,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE;;QAGpD,IAAiB,CAAA,iBAAA,GAAG,KAAK;;QAGzB,IAAU,CAAA,UAAA,GAAG,KAAK;;QAGlB,IAAe,CAAA,eAAA,GAAG,KAAK;;QAGtD,IAAS,CAAA,SAAA,GAAoB,OAAO;;QAGpC,IAAY,CAAA,YAAA,GAAW,CAAC;;QAMO,IAA4B,CAAA,4BAAA,GAAG,KAAK;;QAMnE,IAAa,CAAA,aAAA,GAA0B,IAAI;;AAG1C,QAAA,IAAA,CAAA,cAAc,GAAoB,IAAI,YAAY,EAAK;;AAGvD,QAAA,IAAA,CAAA,WAAW,GAAkC,IAAI,YAAY,EAAmB;AAEhF,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAQ;QAgBnD,IAAU,CAAA,UAAA,GAAiB,MAAM;AAWjC;;;;AAIG;QACK,IAAoB,CAAA,oBAAA,GAAG,KAAK;QAgC5B,IAAK,CAAA,KAAA,GAA0B,MAAM;AAY7C;;;AAGG;QACqC,IAAS,CAAA,SAAA,GAAG,KAAK;;QAGjB,IAAkB,CAAA,kBAAA,GAAG,IAAI;;AA4KjE,QAAA,IAAA,CAAA,mBAAmB,GAAG,CAAC,IAAO,KAAI;YAChC,QACE,CAAC,CAAC,IAAI;AACN,iBAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,2BAA2B,CAAC,IAAI,CAAC,CAAC;AAC7E,iBAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBACpE,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAEzE,SAAC;AAhOC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AAExB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,MAAM,0BAA0B,CAAC,iBAAiB,CAAC;;AAGrD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,MAAM,0BAA0B,CAAC,sBAAsB,CAAC;;QAG1D,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,MAAK;AAC/C,YAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AACxC,SAAC,CAAC;;;AAIJ,IAAA,IACI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;;IAEnB,IAAI,IAAI,CAAC,KAA4B,EAAA;AACnC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,MAAM;AAC5B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;;;;AAMjC,IAAA,IACI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;;IAEtB,IAAI,OAAO,CAAC,KAAe,EAAA;QACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC;;;AAczD,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;;IAEvB,IAAI,QAAQ,CAAC,KAAe,EAAA;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC;;;AAK1D,IAAA,IACI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;;IAEtB,IAAI,OAAO,CAAC,KAAe,EAAA;QACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC;;;AAKzD,IAAA,IACI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;;IAEtB,IAAI,OAAO,CAAC,KAAe,EAAA;QACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC;;AAIzD;;;AAGG;AACH,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,kBAAkB;;IAEhC,IAAI,WAAW,CAAC,KAAQ,EAAA;AACtB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB;AAC7C,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;;AAGpF,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAEzC,QAAA,IACE,aAAa;AACb,YAAA,IAAI,CAAC,kBAAkB;YACvB,IAAI,CAAC,WAAW,KAAK,OAAO;AAC5B,YAAA,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,EACvE;AACA,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE;AACvE,gBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;;iBACtB;AACL,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;;;AAI9B,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;;;AAIxC,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;;IAE1B,IAAI,WAAW,CAAC,KAAsB,EAAA;AACpC,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,KAAK,KAAK,GAAG,KAAK,GAAG,IAAI;AACpE,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;QACtC,IAAI,iBAAiB,EAAE;AACrB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC;;;AAK5C,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,YAAY,EAAE;;;;AAIrC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;YAC1D,MAAM,aAAa,GACjB,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;AAC3F,YAAA,MAAM,aAAa,GAAG,aAAa,GAAG,YAAY,GAAG,CAAC;YACtD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5F,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5F,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,EAAE,WAAW,CAAC;;AAG7D,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK;cACxB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;cAC5E,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;;AAGjD,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;;AAGpD,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC;AACV,cAAE,IAAI,CAAC,KAAK,CAAC;AACb,cAAE,IAAI,CAAC,KAAK,CAAC,qBAAqB;;AAGtC,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACtF,YAAA;AACE,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CACzB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAC/C;;;AAIP,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,sBAAsB;;AAG1C,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;AAClD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,IAAI,KAAK,CAAC,EAAE;gBACd,IAAI,GAAG,EAAE;;AAEX,YAAA,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI;;AAErC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;;AAG3B,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,0BAA0B;;AAG9C,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;AAGhE,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,4BAA4B;;AAGhD,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,QAAQ,IAAI,CAAC,YAAY;AACvB,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc;AAClC,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa;AACjC,YAAA,KAAK,YAAY;AACf,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB;AACtC,YAAA;AACE,gBAAA,OAAO,EAAE;;;AAIf,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,QAAQ,IAAI,CAAC,YAAY;AACvB,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc;AAClC,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa;AACjC,YAAA,KAAK,YAAY;AACf,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB;AACtC,YAAA;AACE,gBAAA,OAAO,EAAE;;;IAcf,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;;IAG5B,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,qBAAqB,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC;;AAExE,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACxD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;;AAGlC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,YAAY,GAAG,YAAY;;AAC3B,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AAChC,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM;;AACrB,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AAC/B,YAAA,IAAI,CAAC,YAAY,GAAG,OAAO;;aACtB;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS;;;IAItC,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;YACjC,IAAI,CAAC,eAAe,EAAE;;;IAI1B,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;;AAIjC,IAAA,aAAa,CAAC,IAAO,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC9B,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE;AACtF,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;;aAE3B;AACL,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO;;;;AAK9B,IAAA,cAAc,CAAC,KAAQ,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,YAAA,IACE,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;AACrD,gBAAA,CAAC,IAAI,CAAC,4BAA4B,EAClC;AACA,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;;;aAE/D;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO;AAC1B,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM;;;;AAK5B,IAAA,aAAa,CAAC,IAAO,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAa,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE;gBAC3F,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CACjD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAC3B,CAAC,EACD,CAAC,EACD,CAAC,EACD,CAAC,CACF;AACD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC;;;aAErC;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM;;;AAI7B,IAAA,aAAa,CAAC,IAAO,EAAA;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE;AAC1F,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAIlC,IAAA,mBAAmB,CAAC,IAAO,EAAA;AACzB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;AAGzB,IAAA,WAAW,CAAC,IAAO,EAAA;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AACxC,QAAA,IAAI,IAAI,GAAG,EAAE,EAAE;AACb,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;;aACZ;AACL,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;;QAGnB,IACE,IAAI,CAAC,aAAa;YAClB,IAAI,CAAC,WAAW,KAAK,OAAO;AAC5B,YAAA,IAAI,CAAC,SAAS;AACd,YAAA,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAC7C;AACA,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAIlC,IAAA,YAAY,CAAC,MAAe,EAAA;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO;AAE3B,QAAA,IAAI,MAAM,KAAK,IAAI,CAAC,KAAK,EAAE;YACzB;;;AAIF,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;AAC3D,QAAA,IAAI,YAAY;AAChB,QAAA,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,YAAY,GAAG,WAAW,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;;;aAGjF;YACH,YAAY,GAAG,CAAC,WAAW,GAAG,EAAE,IAAI,EAAE;;AAGxC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAC3C,IAAI,CAAC,QAAQ,CAAC,cAAc,CAC1B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EACvC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EACxC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EACvC,YAAY,EACZ,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAC1C,EACD,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,CACb;;;QAID,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,YAAY,EAAE;AACzD,YAAA,IAAI,CAAC,WAAW,GAAG,aAAa;AAChC,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM;;;IAIvB,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAClD,YAAA,IAAI,CAAC,WAAW,GAAG,YAAY;YAC/B;;AAEF,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM;;IAG3B,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO;;;IAI9B,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;;IAG1B,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ;;;IAI5B,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,WAAW;YACd,IAAI,CAAC,WAAW,KAAK;AACnB,kBAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;kBACpD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAC5B,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,KAAK,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,CACjD;;;IAIT,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,WAAW;YACd,IAAI,CAAC,WAAW,KAAK;AACnB,kBAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;kBACnD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAC5B,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,KAAK,MAAM,GAAG,CAAC,GAAG,YAAY,CAC/C;;;IAIT,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC;;;IAI3E,YAAY,GAAA;AACV,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC;;IAG3E,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;;;IAIlB,WAAW,CAAC,KAAQ,EAAE,KAAQ,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE;AAChC,YAAA,QACE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;AAC7D,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAGnE,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE;AAC/B,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;;;AAGtE,QAAA,OAAO,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;;AAG7E,IAAA,aAAa,CAAC,SAAiB,EAAA;AACrC,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;;AAGzB,IAAA,OAAO,CAAC,CAAS,EAAA;QACvB,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;;;IAIrB,wBAAwB,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ;;;IAI/E,eAAe,GAAA;QACb,IAAI,CAAC,wBAAwB,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC;;iIAniB9C,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAX,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,wHAQF,gBAAgB,CAAA,EAAA,UAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAGhB,gBAAgB,CAGhB,EAAA,eAAA,EAAA,CAAA,iBAAA,EAAA,iBAAA,EAAA,gBAAgB,kLAYhB,gBAAgB,CAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EA8FhB,gBAAgB,CAGhB,EAAA,kBAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,gBAAgB,gWAhFzB,YAAY,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGZ,WAAW,EAGX,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,gBAAgB,2EAGhB,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9HxB,mlMAsJA,EDtFI,MAAA,EAAA,CAAA,8jTAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,iJACf,eAAe,EAAA,QAAA,EAAA,oDAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,SAAS,EACT,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,6FACb,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,WAAW,EACX,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,mPAChB,WAAW,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,eAAA,EAAA,8BAAA,EAAA,WAAA,EAAA,YAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAXD,CAAC,2BAA2B,CAAC,aAAa,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAc5C,WAAW,EAAA,UAAA,EAAA,CAAA;kBAvBvB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAGlB,IAAA,EAAA;AACJ,wBAAA,OAAO,EAAE,cAAc;AACvB,wBAAA,sCAAsC,EAAE,WAAW;AACpD,qBAAA,EAAA,QAAA,EACS,aAAa,EAAA,UAAA,EACX,CAAC,2BAA2B,CAAC,aAAa,CAAC,EACxC,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACP,eAAe;wBACf,eAAe;wBACf,SAAS;wBACT,aAAa;wBACb,YAAY;wBACZ,WAAW;wBACX,gBAAgB;wBAChB,WAAW;AACZ,qBAAA,EAAA,QAAA,EAAA,mlMAAA,EAAA,MAAA,EAAA,CAAA,8jTAAA,CAAA,EAAA;wDAUuC,iBAAiB,EAAA,CAAA;sBAAxD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAGE,UAAU,EAAA,CAAA;sBAAjD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAGE,eAAe,EAAA,CAAA;sBAAtD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAG7B,SAAS,EAAA,CAAA;sBAAjB;gBAGQ,YAAY,EAAA,CAAA;sBAApB;gBAGQ,UAAU,EAAA,CAAA;sBAAlB;gBAGuC,4BAA4B,EAAA,CAAA;sBAAnE,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAG7B,eAAe,EAAA,CAAA;sBAAvB;gBAGQ,aAAa,EAAA,CAAA;sBAArB;gBAGS,cAAc,EAAA,CAAA;sBAAvB;gBAGS,WAAW,EAAA,CAAA;sBAApB;gBAES,cAAc,EAAA,CAAA;sBAAvB;gBAGwB,SAAS,EAAA,CAAA;sBAAjC,SAAS;uBAAC,YAAY;gBAGC,QAAQ,EAAA,CAAA;sBAA/B,SAAS;uBAAC,WAAW;gBAGO,aAAa,EAAA,CAAA;sBAAzC,SAAS;uBAAC,gBAAgB;gBAGH,QAAQ,EAAA,CAAA;sBAA/B,SAAS;uBAAC,WAAW;gBA2ClB,IAAI,EAAA,CAAA;sBADP;gBAcG,OAAO,EAAA,CAAA;sBADV;gBAauC,SAAS,EAAA,CAAA;sBAAhD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAGE,kBAAkB,EAAA,CAAA;sBAAzD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAIlC,QAAQ,EAAA,CAAA;sBADX;gBAWG,OAAO,EAAA,CAAA;sBADV;gBAWG,OAAO,EAAA,CAAA;sBADV;;;AEtKH;AACA,IAAI,iBAAiB,GAAG,CAAC;AAWzB;MACa,kCAAkC,GAAG,IAAI,cAAc,CAClE,oCAAoC,EACpC;AACE,IAAA,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAK;AACZ,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,OAAO,MAAM,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE;KACnD;AACF,CAAA;AAGG,SAAU,0CAA0C,CAAC,OAAgB,EAAA;IACzE,OAAO,MAAM,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE;AACpD;AAEa,MAAA,mDAAmD,GAAG;AACjE,IAAA,OAAO,EAAE,kCAAkC;IAC3C,IAAI,EAAE,CAAC,OAAO,CAAC;AACf,IAAA,UAAU,EAAE,0CAA0C;;AAmBxD;MACa,kCAAkC,GAC7C,IAAI,cAAc,CAAkC,oCAAoC;AAE1F;;;;;;AAMG;MAqBU,wBAAwB,CAAA;AAuCnC,IAAA,WAAA,GAAA;AAtCQ,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAe7C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ;;QAG7C,IAAc,CAAA,cAAA,GAAkB,IAAI;;QAGpC,IAAc,CAAA,cAAA,GAA0B,IAAI;;QAG5C,IAAI,CAAA,IAAA,GAA0B,UAAU;;QAGxC,IAAI,CAAA,IAAA,GAAoB,OAAO;;QAG/B,IAAgB,CAAA,gBAAA,GAAW,EAAE;;QAG7B,IAAmB,CAAA,mBAAA,GAAY,KAAK;AAMlC,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAE1C,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,kBAAkB;;AAGjD,IAAA,YAAY,CAAC,IAAqB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;;IAGlB,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,cAAc,GAAG,gBAAgB;;IAGxF,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE;;IAGlC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;;IAGhC,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM;AAC7B,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;;IAGxC,oBAAoB,GAAA;;AAElB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;;;AAI/B;;;;AAIG;IACH,cAAc,CAAC,MAAkC,EAAE,aAAsB,EAAA;AACvE,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM;QAE5B,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;;;iIAlFhC,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAGxB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,iCAAA,EAAA,wCAAA,EAAA,yBAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,EAAA,cAAA,EAAA,4BAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAW,EC1IxB,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,q+EAgDA,EDqFY,MAAA,EAAA,CAAA,ooJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,YAAY,EAAE,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,EAAA,WAAW,EAAE,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,EAAE,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,SAAS,EANnD,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA;AACV,YAAA,2BAA2B,CAAC,cAAc;AAC1C,YAAA,2BAA2B,CAAC,cAAc;AAC3C,SAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAKU,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBApBpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,EAGhC,IAAA,EAAA;AACJ,wBAAA,OAAO,EAAE,4BAA4B;AACrC,wBAAA,SAAS,EAAE,6BAA6B;AACxC,wBAAA,0CAA0C,EAAE,yBAAyB;AACrE,wBAAA,aAAa,EAAE,qBAAqB;AACpC,wBAAA,mBAAmB,EAAE,iBAAiB;AACtC,wBAAA,wBAAwB,EAAE,uBAAuB;qBAClD,EACW,UAAA,EAAA;AACV,wBAAA,2BAA2B,CAAC,cAAc;AAC1C,wBAAA,2BAA2B,CAAC,cAAc;AAC3C,qBAAA,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,EACpB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,CAAC,EAAA,QAAA,EAAA,q+EAAA,EAAA,MAAA,EAAA,CAAA,ooJAAA,CAAA,EAAA;wDAKtB,SAAS,EAAA,CAAA;sBAAlD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAE/B,KAAK,EAAA,CAAA;sBAAb;;MA0FU,iBAAiB,CAAA;;AA4D5B,IAAA,IACI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;;IAEzB,IAAI,UAAU,CAAC,KAAwB,EAAA;AACrC,QAAA,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC;;;AAK7C,IAAA,IACI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;;IAErB,IAAI,MAAM,CAAC,KAAc,EAAA;AACvB,QAAA,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;;;AAQpC,IAAA,IACI,KAAK,GAAA;QACP,QACE,IAAI,CAAC,MAAM;AACX,aAAC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,GAAG,SAAS,CAAC;;IAGvF,IAAI,KAAK,CAAC,KAAmB,EAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;;AAmCrB,IAAA,WAAA,GAAA;AA7HQ,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC5C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,kCAAkC,CAAC;QAC5D,IAAY,CAAA,YAAA,GAAG,MAAM,CAAqB,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE;QAC/E,IAAI,CAAA,IAAA,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACjD,IAAe,CAAA,eAAA,GAAG,MAAM,CAC9B,kCAAkC,EAClC,EAAE,QAAQ,EAAE,IAAI,EAAE,CACnB;AAEO,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAE5B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;;QAIpC,IAAiB,CAAA,iBAAA,GAAG,IAAI,CAAC,eAAe,EAAE,iBAAiB,IAAI,KAAK;;QAIpE,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,IAAI,KAAK;;QAItD,IAAe,CAAA,eAAA,GAAG,IAAI,CAAC,eAAe,EAAE,eAAe,IAAI,KAAK;;QAGvD,IAAS,CAAA,SAAA,GAAoB,IAAI,CAAC,eAAe,EAAE,SAAS,IAAI,OAAO;;QAGvE,IAAI,CAAA,IAAA,GAA0B,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,MAAM;;QAI3E,IAAY,CAAA,YAAA,GAAW,IAAI,CAAC,eAAe,EAAE,YAAY,IAAI,CAAC;;QAGtB,IAA4B,CAAA,4BAAA,GAAG,KAAK;;AAI5E,QAAA,IAAA,CAAA,uBAAuB,GAAwB,IAAI,CAAC,eAAe,EAAE,uBAAuB;AAE5F;;;AAGG;AACO,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAK;;AAG/B,QAAA,IAAA,CAAA,YAAY,GAAuB,IAAI,YAAY,EAAQ;;AAG3D,QAAA,IAAA,CAAA,YAAY,GAAuB,IAAI,YAAY,EAAQ;;AAGnE,QAAA,IAAA,CAAA,WAAW,GAAkC,IAAI,YAAY,EAAmB;QAUlF,IAAW,CAAA,WAAA,GAAa,iBAAiB,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC;QAU3E,IAAO,CAAA,OAAA,GAAG,KAAK;;AAGvB,QAAA,IAAA,CAAA,EAAE,GAAG,CAAA,mBAAA,EAAsB,iBAAiB,EAAE,EAAE;AAaxC,QAAA,IAAA,CAAA,MAAM,GAAiB,IAAI,CAAC,eAAe,EAAE,KAAK;;AAM1D,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAAW;QAEhC,IAAc,CAAA,cAAA,GAAa,IAAI;;QAS/B,IAAyB,CAAA,yBAAA,GAAuB,IAAI;;AAGpD,QAAA,IAAA,CAAA,qBAAqB,GAAG,CAAG,EAAA,IAAI,CAAC,EAAE,WAAW;AAE7C,QAAA,IAAA,CAAA,kBAAkB,GAAG,YAAY,CAAC,KAAK;;QAG/C,IAAc,CAAA,cAAA,GAA0B,IAAI;;QAG5C,IAAQ,CAAA,QAAA,GAAa,IAAI;QA+BjB,IAAK,CAAA,KAAA,GAA0B,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,UAAU;AAE/E;;;AAGG;QACqC,IAAO,CAAA,OAAA,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,IAAI,KAAK;AAExF;;;AAGG;QACqC,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,IAAI,KAAK;;QAI5F,IAAkB,CAAA,kBAAA,GAAG,IAAI,CAAC,eAAe,EAAE,kBAAkB,IAAI,IAAI;;QAmBrE,IAAS,CAAA,SAAA,GAAoC,OAAO;;QAIpD,IAAS,CAAA,SAAA,GAAoC,OAAO;AAEpD;;;;AAIG;QACqC,IAAY,CAAA,YAAA,GAAG,IAAI;AAvEzD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,MAAM,0BAA0B,CAAC,aAAa,CAAC;;;;AAKnD,IAAA,IACI,OAAO,GAAA;;;QAGT,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,GAAG,IAAI,CAAC;;IAE5F,IAAI,OAAO,CAAC,IAAc,EAAA;QACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC;;;AAK5D,IAAA,IACI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;;IAEnB,IAAI,IAAI,CAAC,KAA4B,EAAA;AACnC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,UAAU;;;AAqBlC,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC;AAC1C,cAAE,IAAI,CAAC,mBAAmB,CAAC;AAC3B,cAAE,CAAC,CAAC,IAAI,CAAC,SAAS;;IAEtB,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;;;AAqBpC,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,cAAc;;IAG5B,IAAI,SAAS,CAAC,KAAe,EAAA;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;;;AAI7B,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG;;;AAIjE,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG;;AAGjE,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,WAAW;;AAGzE,IAAA,YAAY,CAAC,IAAqB,EAAA;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;;IAG7B,WAAW,GAAA;QACT,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;AACrC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;;;AAIjC,IAAA,OAAO,CAAC,IAAO,EAAA;AACb,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE;AAClE,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;;;;IAKrC,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;YAC1C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;;aACpC;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAE,IAAI,CAAC,SAAe,IAAK,IAAI,CAAC,QAAc,CAAC;;QAE1E,IAAI,CAAC,KAAK,EAAE;;IAGd,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;QAC3B,IAAI,CAAC,KAAK,EAAE;;AAGd;;;AAGG;AACH,IAAA,cAAc,CAAC,KAAgC,EAAA;AAC7C,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,MAAM,KAAK,CAAC,iEAAiE,CAAC;;AAEhF,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;QAChC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,SAAS,CACvE,CAAC,KAAe,MAAM,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,CAC9C;;;IAIH,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjC;;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AAC7B,YAAA,MAAM,KAAK,CAAC,kEAAkE,CAAC;;AAGjF,QAAA,IAAI,CAAC,yBAAyB,GAAG,iCAAiC,EAAE;QACpE,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;;IAI1B,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB;;AAGF,QAAA,MAAM,eAAe,GACnB,IAAI,CAAC,YAAY;AACjB,YAAA,IAAI,CAAC,yBAAyB;AAC9B,YAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK,KAAK,UAAU;QAE5D,MAAM,aAAa,GAAG,MAAK;;;AAGzB,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;AAE5B,SAAC;AAED,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,aAAa;YACjD,QAAQ,CAAC,mBAAmB,EAAE;AAC9B,YAAA,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACnD,gBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa;;;AAIlD,gBAAA,IACE,eAAe;AACf,qBAAC,CAAC,aAAa;AACb,wBAAA,aAAa,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa;wBAC9C,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EACjD;AACA,oBAAA,IAAI,CAAC,yBAA0B,CAAC,KAAK,EAAE;;AAGzC,gBAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;gBACrC,IAAI,CAAC,eAAe,EAAE;AACxB,aAAC,CAAC;;QAGJ,IAAI,eAAe,EAAE;;;;;;YAMnB,UAAU,CAAC,aAAa,CAAC;;aACpB;AACL,YAAA,aAAa,EAAE;;;AAInB;;;AAGG;AACO,IAAA,qBAAqB,CAAC,QAAqC,EAAA;AACnE,QAAA,QAAQ,CAAC,cAAc,GAAG,IAAI;AAC9B,QAAA,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;QAC3B,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE;AACtE,QAAA,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;AACzB,QAAA,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS;QAC9B,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC;;;IAI7C,YAAY,GAAA;QAClB,IAAI,CAAC,eAAe,EAAE;AAEtB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE;QAE5D,MAAM,MAAM,GAAG,IAAI,eAAe,CAChC,wBAAwB,EACxB,IAAI,CAAC,iBAAiB,CACvB;AACD,QAAA,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CACzD,IAAI,aAAa,CAAC;AAChB,YAAA,gBAAgB,EAAE,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE;AACpF,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE;AACb,gBAAA,QAAQ,GAAG,2BAA2B,GAAG,kCAAkC;AAC3E,gBAAA,IAAI,CAAC,qBAAqB;AAC3B,aAAA;AACD,YAAA,SAAS,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS;AACjC,YAAA,cAAc,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE;YAC1F,UAAU,EAAE,CAAsB,mBAAA,EAAA,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAE,CAAA;SAClE,CAAC,CACH,CAAC;AAEF,QAAA,MAAM,cAAc,GAAG,UAAU,CAAC,cAAc;AAChD,QAAA,cAAc,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;QAE7C,IAAI,OAAO,EAAE;AACX,YAAA,cAAc,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC;;QAGzD,IAAI,QAAQ,EAAE;AACZ,YAAA,cAAc,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC;;QAGnD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,KAAK,IAAG;YACjD,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,cAAc,EAAE;;YAExB,IAAI,CAAC,KAAK,EAAE;AACd,SAAC,CAAC;QAEF,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;QAC9C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;;QAGvD,IAAI,CAAC,QAAQ,EAAE;YACb,eAAe,CACb,MAAK;gBACH,UAAU,CAAC,cAAc,EAAE;aAC5B,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAC7B;;;;IAKG,eAAe,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;YAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI;;;;IAKxC,kBAAkB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,kBAAkB,EAAE,CAAC,gBAAgB,EAAE;;;IAI1E,oBAAoB,GAAA;AAC1B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC;AACnB,aAAA,QAAQ;AACR,aAAA,mBAAmB,CAAC,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,EAAE;aACxE,qBAAqB,CAAC,6BAA6B;aACnD,sBAAsB,CAAC,KAAK;aAC5B,kBAAkB,CAAC,CAAC;AACpB,aAAA,kBAAkB,EAAE;AAEvB,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC;;AAG9C;;AAEG;AACK,IAAA,sBAAsB,CAAC,QAA2C,EAAA;AACxE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,KAAK,KAAK,GAAG,KAAK,GAAG,OAAO;AAC3D,QAAA,MAAM,UAAU,GAAG,QAAQ,KAAK,OAAO,GAAG,KAAK,GAAG,OAAO;AACzD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,KAAK,OAAO,GAAG,QAAQ,GAAG,KAAK;AAC9D,QAAA,MAAM,UAAU,GAAG,QAAQ,KAAK,KAAK,GAAG,QAAQ,GAAG,KAAK;QAExD,OAAO,QAAQ,CAAC,aAAa,CAAC;AAC5B,YAAA;AACE,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,QAAQ,EAAE,QAAQ;AACnB,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,QAAQ,EAAE,UAAU;AACrB,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,QAAQ,EAAE,QAAQ;AACnB,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,QAAQ,EAAE,UAAU;AACrB,aAAA;AACF,SAAA,CAAC;;;AAII,IAAA,eAAe,CAAC,UAAsB,EAAA;QAC5C,OAAO,KAAK,CACV,UAAU,CAAC,aAAa,EAAE,EAC1B,UAAU,CAAC,WAAW,EAAE,EACxB,UAAU,CAAC,aAAa,EAAE,CAAC,IAAI,CAC7B,MAAM,CAAC,KAAK,IAAG;;;AAGb,YAAA,QACE,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;iBAClD,IAAI,CAAC,mBAAmB;AACvB,oBAAA,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC;AAC/B,oBAAA,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC;SAEhC,CAAC,CACH,CACF;;AAEH;;;AAGG;AACH,IAAA,eAAe,CAAC,MAAsB,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,MAAM,KAAK,CAAC,uEAAuE,CAAC;;AAEtF,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM;QAC5B,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;;AAG3D;;;AAGG;AACH,IAAA,aAAa,CAAC,MAAsB,EAAA;AAClC,QAAA,IAAI,MAAM,KAAK,IAAI,CAAC,cAAc,EAAE;AAClC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;YAC1B,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;;;iIApgBhD,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qHAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,CAAA,mBAAA,EAAA,mBAAA,EAgBR,gBAAgB,CAIhB,EAAA,UAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,gBAAgB,2DAIhB,gBAAgB,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAUhB,eAAe,CAAA,EAAA,4BAAA,EAAA,CAAA,8BAAA,EAAA,8BAAA,EAIf,gBAAgB,CAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAgChB,gBAAgB,CAwFhB,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,gBAAgB,CAMhB,EAAA,SAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,gBAAgB,CAGhB,EAAA,kBAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,gBAAgB,sCAIhB,gBAAgB,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EA2BhB,gBAAgB,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3M1B,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAKD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,mBAAmB,EAAE,KAAK;AAC3B,iBAAA;wDAkBC,iBAAiB,EAAA,CAAA;sBADhB,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAKtC,UAAU,EAAA,CAAA;sBADT,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAKtC,eAAe,EAAA,CAAA;sBADd,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAI7B,SAAS,EAAA,CAAA;sBAAjB;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBAID,YAAY,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE;gBAIG,4BAA4B,EAAA,CAAA;sBAAnE,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAItC,uBAAuB,EAAA,CAAA;sBADtB;gBAOS,eAAe,EAAA,CAAA;sBAAxB;gBAGiB,YAAY,EAAA,CAAA;sBAA7B,MAAM;uBAAC,QAAQ;gBAGE,YAAY,EAAA,CAAA;sBAA7B,MAAM;uBAAC,QAAQ;gBAGN,WAAW,EAAA,CAAA;sBAApB;gBAIG,UAAU,EAAA,CAAA;sBADb;gBAWG,MAAM,EAAA,CAAA;sBADT,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAclC,KAAK,EAAA,CAAA;sBADR;gBAmDG,OAAO,EAAA,CAAA;sBADV;gBAaG,IAAI,EAAA,CAAA;sBADP;gBAauC,OAAO,EAAA,CAAA;sBAA9C,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAME,SAAS,EAAA,CAAA;sBAAhD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAItC,kBAAkB,EAAA,CAAA;sBADjB,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAKlC,QAAQ,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAgBtC,SAAS,EAAA,CAAA;sBADR;gBAKD,SAAS,EAAA,CAAA;sBADR;gBAQuC,YAAY,EAAA,CAAA;sBAAnD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;;AEvY3B,MAAA,iCAAiC,GAAQ;AACpD,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,sBAAsB,CAAC;AACrD,IAAA,KAAK,EAAE,IAAI;;AAGA,MAAA,6BAA6B,GAAQ;AAChD,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,sBAAsB,CAAC;AACrD,IAAA,KAAK,EAAE,IAAI;;AAGb;;;;AAIG;MACU,2BAA2B,CAAA;IAItC,WACS,CAAA,MAAiC,EACjC,aAA0B,EAAA;QAD1B,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAa,CAAA,aAAA,GAAb,aAAa;QAEpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;;AAEjC;AAED;MAqBa,sBAAsB,CAAA;AAkCjC,IAAA,WAAA,GAAA;AA/BQ,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;QAChC,IAAY,CAAA,YAAA,GAAG,MAAM,CAAqB,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE;QAC/E,IAAY,CAAA,YAAA,GAAG,MAAM,CAAqB,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAE;QACpF,IAAU,CAAA,UAAA,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAOnD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAkC;;AAG/D,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAkC;;AAGxE,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAY;;AAG3C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAW;AAErC,QAAA,IAAA,CAAA,2BAA2B,GAAG,YAAY,CAAC,KAAK;AAEhD,QAAA,IAAA,CAAA,mBAAmB,GAAG,YAAY,CAAC,KAAK;;QAGxC,IAAe,CAAA,eAAA,GAAG,KAAK;AA4F/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAK,GAAG;AAwJb,QAAA,IAAA,CAAA,YAAY,GAAyB,MAAK,GAAG;AAE7C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAK,GAAG;;QAG7B,IAAe,CAAA,eAAA,GAAgB,MAA8B;YACnE,OAAO,IAAI,CAAC;AACV,kBAAE;AACF,kBAAE,EAAE,sBAAsB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE;AAChF,SAAC;;AAGO,QAAA,IAAA,CAAA,aAAa,GAAgB,CAAC,OAAwB,KAA6B;AACzF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CACvD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAC7C;YACD,OAAO,CAAC,IAAI,CAAC,GAAG;AACd,gBAAA,CAAC,YAAY;AACZ,gBAAA,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAY,IAAI;AACzE,kBAAE;AACF,kBAAE,EAAE,oBAAoB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;AACvE,SAAC;;AAGO,QAAA,IAAA,CAAA,aAAa,GAAgB,CAAC,OAAwB,KAA6B;AACzF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CACvD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAC7C;YACD,OAAO,CAAC,IAAI,CAAC,GAAG;AACd,gBAAA,CAAC,YAAY;AACZ,gBAAA,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAY,IAAI;AACzE,kBAAE;AACF,kBAAE,EAAE,oBAAoB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;AACvE,SAAC;;AAGO,QAAA,IAAA,CAAA,gBAAgB,GAAgB,CAAC,OAAwB,KAA6B;AAC5F,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CACvD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAC7C;YACD,OAAO,CAAC,IAAI,CAAC,WAAW;AACtB,gBAAA,CAAC,YAAY;gBACb,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,2BAA2B,CAAC,IAAI;AAC/D,kBAAE;AACF,kBAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE;AACvC,SAAC;;AAGO,QAAA,IAAA,CAAA,UAAU,GAAuB,UAAU,CAAC,OAAO,CAAC;AAC1D,YAAA,IAAI,CAAC,eAAe;AACpB,YAAA,IAAI,CAAC,aAAa;AAClB,YAAA,IAAI,CAAC,aAAa;AAClB,YAAA,IAAI,CAAC,gBAAgB;AACtB,SAAA,CAAC;AAnSA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY;AAEtC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,MAAM,0BAA0B,CAAC,iBAAiB,CAAC;;AAErD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,MAAM,0BAA0B,CAAC,sBAAsB,CAAC;;;QAI1D,IAAI,CAAC,mBAAmB,GAAG,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,MAAK;AACnE,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AACxD,SAAC,CAAC;;;IAIJ,IACI,iBAAiB,CAAC,KAA2B,EAAA;AAC/C,QAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;;IAGpC,IACI,uBAAuB,CACzB,MAAsE,EAAA;AAEtE,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM;QACzB,IAAI,CAAC,kBAAkB,EAAE;;;AAI3B,IAAA,IACI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;;IAEpB,IAAI,KAAK,CAAC,KAAe,EAAA;QACvB,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC;AAC5C,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;QACjE,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,KAAK,CAAC;AACnD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK;AAC1B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;QAGxB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;AACnD,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;;AAEjC,SAAC,CAAC;;;AAKJ,IAAA,IACI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,IAAI;;IAElB,IAAI,GAAG,CAAC,KAAe,EAAA;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtF,IAAI,CAAC,kBAAkB,EAAE;;;AAK3B,IAAA,IACI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,IAAI;;IAElB,IAAI,GAAG,CAAC,KAAe,EAAA;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACtF,IAAI,CAAC,kBAAkB,EAAE;;;AAK3B,IAAA,IACI,QAAQ,GAAA;AACV,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS;;IAEzB,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;;IAOpC,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,SAAS,CAC/E,CAAC,QAAW,KAAI;AACd,gBAAA,IAAI,CAAC,KAAK,GAAG,QAAQ;AACrB,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;gBAC3B,IAAI,CAAC,UAAU,EAAE;AACjB,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB,IAAI,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CACtE;AACD,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAClB,IAAI,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CACtE;AACH,aAAC,CACF;;;IAIL,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,2BAA2B,CAAC,WAAW,EAAE;AAC9C,QAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE;AACtC,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AAC5B,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;;AAGjC,IAAA,yBAAyB,CAAC,EAAc,EAAA;AACtC,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;;AAG9B,IAAA,QAAQ,CAAC,CAAkB,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;;AAGpD;;;AAGG;IACH,yBAAyB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,yBAAyB,EAAE,GAAG,IAAI,CAAC,WAAW;;;IAIzF,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;;QAGrC,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC,iBAAiB,CAAC;;;AAIvE,IAAA,UAAU,CAAC,KAAQ,EAAA;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;;AAIpB,IAAA,gBAAgB,CAAC,EAAwB,EAAA;AACvC,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;;;AAIxB,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;;;AAItB,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;;AAG1B,IAAA,UAAU,CAAC,KAAoB,EAAA;QAC7B,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE;AAChD,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;YAC3B,KAAK,CAAC,cAAc,EAAE;;;AAI1B,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;AAChE,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC;QAC/D,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC;AACjD,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;;IAG5F,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;;;IAI7F,OAAO,GAAA;;AAEL,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;;QAG/B,IAAI,CAAC,UAAU,EAAE;;AAGX,IAAA,sBAAsB,CAAC,KAA2B,EAAA;QACxD,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC;;;IAIrC,gBAAgB,GAAA;AACtB,QAAA,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI;AAC/B,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS;AAC5C,YAAA,KAAK,UAAU;AACb,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa;AAChD,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS;AAC5C,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU;AAC7C,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS;;;IAIxC,cAAc,GAAA;AACpB,QAAA,IAAI,WAAW;AAEf,QAAA,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI;AAC/B,YAAA,KAAK,MAAM;gBACT,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS;gBAC/C;AACF,YAAA,KAAK,UAAU;gBACb,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,aAAa;gBACnD;AACF,YAAA,KAAK,MAAM;gBACT,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS;gBAC/C;AACF,YAAA,KAAK,OAAO;gBACV,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU;gBAChD;AACF,YAAA,KAAK,MAAM;gBACT,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS;gBAC/C;;QAEJ,IAAI,CAAC,WAAW,EAAE;YAChB,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS;;AAGjD,QAAA,OAAO,WAAW;;;AA2DZ,IAAA,YAAY,CAAC,KAAe,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG;AACrC,cAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE;cACvD,EAAE;;;IAIR,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,SAAS;;iIAjVjD,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qHAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,GAAA,EAAA,KAAA,EAAA,GAAA,EAAA,KAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EA6Gb,gBAAgB,CA/HzB,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,+BAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,WAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,yDAAA,EAAA,UAAA,EAAA,0CAAA,EAAA,UAAA,EAAA,0CAAA,EAAA,UAAA,EAAA,UAAA,EAAA,EAAA,EAAA,SAAA,EAAA;YACT,iCAAiC;YACjC,6BAA6B;AAC7B,YAAA,EAAE,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,sBAAsB,EAAE;AAC3E,SAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAcU,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBApBlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,SAAS,EAAE;wBACT,iCAAiC;wBACjC,6BAA6B;AAC7B,wBAAA,EAAE,OAAO,EAAE,wBAAwB,EAAE,WAAW,wBAAwB,EAAE;AAC3E,qBAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,sBAAsB,EAAE,MAAM;AAC9B,wBAAA,kBAAkB,EAAE,yDAAyD;AAC7E,wBAAA,YAAY,EAAE,0CAA0C;AACxD,wBAAA,YAAY,EAAE,0CAA0C;AACxD,wBAAA,YAAY,EAAE,UAAU;AACxB,wBAAA,SAAS,EAAE,+BAA+B;AAC1C,wBAAA,UAAU,EAAE,aAAa;AACzB,wBAAA,QAAQ,EAAE,WAAW;AACrB,wBAAA,WAAW,EAAE,oBAAoB;AAClC,qBAAA;AACD,oBAAA,QAAQ,EAAE,wBAAwB;AACnC,iBAAA;wDAcW,UAAU,EAAA,CAAA;sBAAnB;gBAGS,SAAS,EAAA,CAAA;sBAAlB;gBAoCG,iBAAiB,EAAA,CAAA;sBADpB;gBAMG,uBAAuB,EAAA,CAAA;sBAD1B;gBAUG,KAAK,EAAA,CAAA;sBADR;gBAuBG,GAAG,EAAA,CAAA;sBADN;gBAYG,GAAG,EAAA,CAAA;sBADN;gBAYG,QAAQ,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;;AC7KxC;MAIa,2BAA2B,CAAA;iIAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qHAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAHvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,+BAA+B;AAC1C,iBAAA;;MA0BY,uBAAuB,CAAA;;AAgBlC,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,KAAK,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS;;IAEvF,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;AAgBxB,IAAA,WAAA,GAAA;AApCA,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC7B,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAE9C,QAAA,IAAA,CAAA,aAAa,GAAG,YAAY,CAAC,KAAK;AAkCxC,QAAA,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,kBAAkB,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACtF,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC;AAC9C,QAAA,IAAI,CAAC,QAAQ,GAAG,cAAc,IAAI,cAAc,KAAK,CAAC,GAAG,cAAc,GAAG,IAAI;;AAGhF,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,cAAc,EAAE;YAC1B,IAAI,CAAC,kBAAkB,EAAE;;;IAI7B,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;;IAGlC,kBAAkB,GAAA;QAChB,IAAI,CAAC,kBAAkB,EAAE;;AAG3B,IAAA,KAAK,CAAC,KAAY,EAAA;QAChB,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACzC,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;YAC1B,KAAK,CAAC,eAAe,EAAE;;;IAInB,kBAAkB,GAAA;AACxB,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAClC,cAAE,IAAI,CAAC,cAAc,CAAC;cACpBC,EAAY,EAAE;QAClB,MAAM,aAAa,GACjB,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC;AACzC,cAAE,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC;cACxCA,EAAY,EAAE;AACpB,QAAA,MAAM,qBAAqB,GAAG,IAAI,CAAC;AACjC,cAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY;cACxEA,EAAY,EAAE;AAElB,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;AAChC,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CACxB,IAAI,CAAC,KAAK,CAAC,OAAO,EAClB,sBAA0C,EAC1C,aAAiC,EACjC,qBAAqB,CACtB,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;;iIAlFhD,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qHAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,CAAA,KAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAgBd,gBAAgB,CAUhB,EAAA,aAAA,EAAA,CAAA,eAAA,EAAA,eAAA,EAAA,gBAAgB,igBAGtB,2BAA2B,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjF3C,ymEAkDA,EAAA,MAAA,EAAA,CAAA,qWAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDAY,aAAa,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAEZ,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAvBnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,EAG/B,IAAA,EAAA;AACJ,wBAAA,OAAO,EAAE,2BAA2B;AACpC,wBAAA,iBAAiB,EAAE,MAAM;AACzB,wBAAA,0CAA0C,EAAE,yCAAyC;AACrF,wBAAA,oBAAoB,EAAE,qDAAqD;AAC3E,wBAAA,kBAAkB,EAAE,mDAAmD;;AAEvE,wBAAA,0BAA0B,EAAE,2CAA2C;;;;AAIvE,wBAAA,SAAS,EAAE,eAAe;AAC3B,qBAAA,EAAA,QAAA,EACS,yBAAyB,EAAA,aAAA,EACpB,iBAAiB,CAAC,IAAI,EAChB,mBAAA,EAAA,KAAK,EACT,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA,CAAC,aAAa,CAAC,EAAA,QAAA,EAAA,ymEAAA,EAAA,MAAA,EAAA,CAAA,qWAAA,CAAA,EAAA;wDASV,cAAc,EAAA,CAAA;sBAA3B,KAAK;uBAAC,KAAK;gBAGH,QAAQ,EAAA,CAAA;sBAAhB;gBAGoB,SAAS,EAAA,CAAA;sBAA7B,KAAK;uBAAC,YAAY;gBAIf,QAAQ,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAUE,aAAa,EAAA,CAAA;sBAApD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAGK,WAAW,EAAA,CAAA;sBAArD,YAAY;uBAAC,2BAA2B;gBAGpB,OAAO,EAAA,CAAA;sBAA3B,SAAS;uBAAC,QAAQ;;;MEjER,sBAAsB,CAAA;AAMjC,IAAA,WAAA,GAAA;AALA,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAuB,iBAAiB,CAAC;;iIADtD,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qHAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,mCAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,IAAI,EAAE,EAAE,SAAS,EAAE,mCAAmC,EAAE;AACzD,iBAAA;;MAcY,uBAAuB,CAAA;AAMlC,IAAA,WAAA,GAAA;AALA,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAuB,iBAAiB,CAAC;;iIADtD,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qHAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,IAAI,EAAE,EAAE,SAAS,EAAE,yBAAyB,EAAE;AAC/C,iBAAA;;MAcY,sBAAsB,CAAA;AAMjC,IAAA,WAAA,GAAA;AALA,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAuB,iBAAiB,CAAC;;iIADtD,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qHAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,kCAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,IAAI,EAAE,EAAE,SAAS,EAAE,kCAAkC,EAAE;AACxD,iBAAA;;MAuBY,wBAAwB,CAAA;AAUnC,IAAA,WAAA,GAAA;AATQ,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAuB,iBAAiB,CAAC;AACjE,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC;;IAUpD,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC;QACzE,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;;IAGpD,WAAW,GAAA;QACT,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;;QAEhD,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAC3C,YAAA,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;;;iIArBf,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qHAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAIxB,WAAW,EAdZ,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kUAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAIU,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAbpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,EAE5B,QAAA,EAAA;;;;;;AAMT,EAAA,CAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAAA,CAAA,kUAAA,CAAA,EAAA;wDAMb,SAAS,EAAA,CAAA;sBAAhC,SAAS;uBAAC,WAAW;;;MCEX,uBAAuB,CAAA;iIAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,YA3ChC,YAAY;YACZ,aAAa;YACb,UAAU;YACV,YAAY;YACZ,eAAe;YACf,WAAW;YACX,eAAe;YACf,QAAQ;YACR,WAAW;YACX,YAAY;YACZ,iBAAiB;YACjB,uBAAuB;YACvB,2BAA2B;YAC3B,sBAAsB;YACtB,wBAAwB;YACxB,YAAY;YACZ,WAAW;YACX,gBAAgB;YAChB,sBAAsB;YACtB,uBAAuB;YACvB,sBAAsB;AACtB,YAAA,wBAAwB,aAGxB,WAAW;YACX,eAAe;YACf,QAAQ;YACR,WAAW;YACX,iBAAiB;YACjB,uBAAuB;YACvB,2BAA2B;YAC3B,sBAAsB;YACtB,wBAAwB;YACxB,YAAY;YACZ,WAAW;YACX,gBAAgB;YAChB,sBAAsB;YACtB,uBAAuB;YACvB,sBAAsB;YACtB,wBAAwB,CAAA,EAAA,CAAA,CAAA;AAIf,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,EAFvB,SAAA,EAAA,CAAC,mDAAmD,CAAC,YAzC9D,YAAY;YACZ,aAAa;YACb,UAAU;YACV,YAAY;YACZ,eAAe;YACf,WAAW;YAGX,WAAW;YAGX,uBAAuB;YAGvB,wBAAwB,CAAA,EAAA,CAAA,CAAA;;2FA6Bf,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA7CnC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,aAAa;wBACb,UAAU;wBACV,YAAY;wBACZ,eAAe;wBACf,WAAW;wBACX,eAAe;wBACf,QAAQ;wBACR,WAAW;wBACX,YAAY;wBACZ,iBAAiB;wBACjB,uBAAuB;wBACvB,2BAA2B;wBAC3B,sBAAsB;wBACtB,wBAAwB;wBACxB,YAAY;wBACZ,WAAW;wBACX,gBAAgB;wBAChB,sBAAsB;wBACtB,uBAAuB;wBACvB,sBAAsB;wBACtB,wBAAwB;AACzB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,WAAW;wBACX,eAAe;wBACf,QAAQ;wBACR,WAAW;wBACX,iBAAiB;wBACjB,uBAAuB;wBACvB,2BAA2B;wBAC3B,sBAAsB;wBACtB,wBAAwB;wBACxB,YAAY;wBACZ,WAAW;wBACX,gBAAgB;wBAChB,sBAAsB;wBACtB,uBAAuB;wBACvB,sBAAsB;wBACtB,wBAAwB;AACzB,qBAAA;oBACD,SAAS,EAAE,CAAC,mDAAmD,CAAC;AACjE,iBAAA;;;ACxED;;AAEG;;;;"}