@m3e/web 2.5.1 → 2.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/all.js +1046 -10
- package/dist/all.js.map +1 -1
- package/dist/all.min.js +156 -43
- package/dist/all.min.js.map +1 -1
- package/dist/breadcrumb.js +1 -0
- package/dist/breadcrumb.js.map +1 -1
- package/dist/breadcrumb.min.js.map +1 -1
- package/dist/calendar.js +18 -2
- package/dist/calendar.js.map +1 -1
- package/dist/calendar.min.js +5 -5
- package/dist/calendar.min.js.map +1 -1
- package/dist/core.js +2 -0
- package/dist/core.js.map +1 -1
- package/dist/core.min.js.map +1 -1
- package/dist/css-custom-data.json +333 -333
- package/dist/custom-elements.json +3863 -3780
- package/dist/datepicker.js +6 -0
- package/dist/datepicker.js.map +1 -1
- package/dist/datepicker.min.js +1 -1
- package/dist/datepicker.min.js.map +1 -1
- package/dist/html-custom-data.json +139 -139
- package/dist/list.js +1 -1
- package/dist/list.js.map +1 -1
- package/dist/list.min.js +1 -1
- package/dist/list.min.js.map +1 -1
- package/dist/nav-bar.js +7 -4
- package/dist/nav-bar.js.map +1 -1
- package/dist/nav-bar.min.js +1 -1
- package/dist/nav-bar.min.js.map +1 -1
- package/dist/search.js +2 -2
- package/dist/search.js.map +1 -1
- package/dist/search.min.js +1 -1
- package/dist/search.min.js.map +1 -1
- package/dist/slider.js +2 -0
- package/dist/slider.js.map +1 -1
- package/dist/slider.min.js.map +1 -1
- package/dist/src/breadcrumb/BreadcrumbItemElement.d.ts +1 -0
- package/dist/src/breadcrumb/BreadcrumbItemElement.d.ts.map +1 -1
- package/dist/src/calendar/CalendarElement.d.ts.map +1 -1
- package/dist/src/calendar/MonthViewElement.d.ts.map +1 -1
- package/dist/src/core/shared/primitives/SlideElement.d.ts +2 -0
- package/dist/src/core/shared/primitives/SlideElement.d.ts.map +1 -1
- package/dist/src/datepicker/DatepickerElement.d.ts.map +1 -1
- package/dist/src/list/ListItemButtonElement.d.ts +0 -5
- package/dist/src/list/ListItemButtonElement.d.ts.map +1 -1
- package/dist/src/nav-bar/NavItemElement.d.ts.map +1 -1
- package/dist/src/slider/SliderElement.d.ts +2 -0
- package/dist/src/slider/SliderElement.d.ts.map +1 -1
- package/dist/src/theme/ThemeElement.d.ts +2 -0
- package/dist/src/theme/ThemeElement.d.ts.map +1 -1
- package/dist/src/theme/getColorFromImage.d.ts +12 -0
- package/dist/src/theme/getColorFromImage.d.ts.map +1 -0
- package/dist/src/theme/index.d.ts +1 -0
- package/dist/src/theme/index.d.ts.map +1 -1
- package/dist/theme.js +1007 -1
- package/dist/theme.js.map +1 -1
- package/dist/theme.min.js +133 -20
- package/dist/theme.min.js.map +1 -1
- package/dist/toc.js +1 -1
- package/dist/toc.js.map +1 -1
- package/dist/toc.min.js +1 -1
- package/dist/toc.min.js.map +1 -1
- package/package.json +1 -1
package/dist/calendar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar.js","sources":["../../src/calendar/utils.ts","../../src/calendar/CalendarViewElementBase.ts","../../src/calendar/MonthViewElement.ts","../../src/calendar/MultiYearViewElement.ts","../../src/calendar/YearViewElement.ts","../../src/calendar/CalendarElement.ts"],"sourcesContent":["/** @private */\r\nfunction createDateWithOverflow(year: number, month: number, day: number): Date {\r\n const date = new Date();\r\n date.setFullYear(year, month, day);\r\n date.setHours(0, 0, 0, 0);\r\n return date;\r\n}\r\n\r\n/** @private */\r\nfunction getStartingYear(minDate: Date | null, maxDate: Date | null): number {\r\n if (maxDate) {\r\n return maxDate.getFullYear() - YEARS_PER_PAGE + 1;\r\n } else if (minDate) {\r\n return minDate.getFullYear();\r\n }\r\n return 0;\r\n}\r\n\r\n/** @private */\r\nfunction euclideanModulo(a: number, b: number): number {\r\n return ((a % b) + b) % b;\r\n}\r\n\r\n/** @internal */\r\nexport function addCalendarDays(date: Date, days: number): Date {\r\n return createDateWithOverflow(date.getFullYear(), date.getMonth(), date.getDate() + days);\r\n}\r\n\r\n/** @internal */\r\nexport function addCalendarMonths(date: Date, months: number): Date {\r\n let newDate = createDateWithOverflow(date.getFullYear(), date.getMonth() + months, date.getDate());\r\n if (newDate.getMonth() != (((date.getMonth() + months) % 12) + 12) % 12) {\r\n newDate = createDateWithOverflow(newDate.getFullYear(), newDate.getMonth(), 0);\r\n }\r\n return newDate;\r\n}\r\n\r\n/** @internal */\r\nexport function addCalendarYears(date: Date, years: number): Date {\r\n return addCalendarMonths(date, years * 12);\r\n}\r\n\r\n/** @internal */\r\nexport function getNumDaysInMonth(date: Date): number {\r\n return createDateWithOverflow(date.getFullYear(), date.getMonth() + 1, 0).getDate();\r\n}\r\n\r\n/** @internal */\r\nexport function compareDate(first: Date, second: Date): number {\r\n return (\r\n first.getFullYear() - second.getFullYear() ||\r\n first.getMonth() - second.getMonth() ||\r\n first.getDate() - second.getDate()\r\n );\r\n}\r\n\r\n/** @internal */\r\nexport function sameDate(first: Date | null, second: Date | null): boolean {\r\n return first && second ? compareDate(first, second) == 0 : first == second;\r\n}\r\n\r\n/** @internal */\r\nexport function getActiveOffset(activeDate: Date, minDate: Date | null, maxDate: Date | null): number {\r\n return euclideanModulo(activeDate.getFullYear() - getStartingYear(minDate, maxDate), YEARS_PER_PAGE);\r\n}\r\n\r\n/** @internal */\r\nexport function minYearOfPage(activeDate: Date, minDate: Date | null, maxDate: Date | null): number {\r\n return activeDate.getFullYear() - getActiveOffset(activeDate, minDate, maxDate);\r\n}\r\n\r\n/** @internal */\r\nexport function maxYearOfPage(activeDate: Date, minDate: Date | null, maxDate: Date | null): number {\r\n return minYearOfPage(activeDate, minDate, maxDate) + YEARS_PER_PAGE - 1;\r\n}\r\n\r\n/** @internal */\r\nexport function clampDate(date: Date, minDate: Date | null, maxDate: Date | null): Date {\r\n if (minDate && compareDate(date, minDate) < 0) return minDate;\r\n if (maxDate && compareDate(date, maxDate) > 0) return maxDate;\r\n return date;\r\n}\r\n\r\n/** @internal */ export const YEARS_PER_PAGE = 15;\r\n/** @internal */ export const YEARS_PER_ROW = 3;\r\n/** @internal */ export const MONTHS_PER_ROW = 4;\r\n","import { css, CSSResultGroup, LitElement } from \"lit\";\r\nimport { property, query } from \"lit/decorators.js\";\r\n\r\nimport { dateConverter, DesignToken, focusWhenReady } from \"@m3e/web/core\";\r\n\r\nimport { clampDate, sameDate } from \"./utils\";\r\n\r\n/**\r\n * A base implementation for a view in a calendar. This class must be inherited.\r\n * @internal\r\n */\r\nexport abstract class CalendarViewElementBase extends LitElement {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: inline-block;\r\n user-select: none;\r\n vertical-align: top;\r\n }\r\n .visually-hidden {\r\n position: absolute;\r\n appearance: none;\r\n visibility: hidden;\r\n border: none;\r\n outline: none;\r\n overflow: hidden;\r\n left: 0;\r\n height: 1px;\r\n width: 1px;\r\n margin: -1px;\r\n padding: 0;\r\n white-space: nowrap;\r\n }\r\n table {\r\n border-collapse: collapse;\r\n border-spacing: 0;\r\n width: calc(3rem * 7);\r\n }\r\n td,\r\n th {\r\n font: inherit;\r\n text-align: center;\r\n padding: unset;\r\n }\r\n td {\r\n box-sizing: border-box;\r\n height: 3rem;\r\n padding: 0.25rem;\r\n position: relative;\r\n color: var(--m3e-calendar-item-color, ${DesignToken.color.onSurface});\r\n }\r\n .item,\r\n .item > span {\r\n position: relative;\r\n }\r\n .item {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: inherit;\r\n outline: none;\r\n width: 100%;\r\n height: 100%;\r\n border-radius: ${DesignToken.shape.corner.full};\r\n }\r\n .item:not([aria-disabled]) {\r\n cursor: pointer;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n }\r\n .touch {\r\n position: absolute;\r\n height: 3rem;\r\n width: 3rem;\r\n margin: auto;\r\n }\r\n td:not(:has(.item[aria-disabled])).selected {\r\n color: var(--m3e-calendar-item-selected-color, ${DesignToken.color.onPrimary});\r\n --m3e-ripple-color: var(--m3e-calendar-item-selected-ripple-color, ${DesignToken.color.onPrimary});\r\n --m3e-state-layer-hover-color: var(--m3e-calendar-item-selected-hover-color, ${DesignToken.color.onPrimary});\r\n --m3e-state-layer-focus-color: var(--m3e-calendar-item-selected-focus-color, ${DesignToken.color.onPrimary});\r\n }\r\n td:not(:has(.item[aria-disabled])).selected .state-layer {\r\n background-color: var(--m3e-calendar-item-selected-container-color, ${DesignToken.color.primary});\r\n }\r\n td.current:not(.selected):not(.special):not(.range-start):not(.range-end) {\r\n color: var(--m3e-calendar-item-current-outline-color, ${DesignToken.color.primary});\r\n }\r\n td.current:not(.selected):not(.special):not(.range-start):not(.range-end) .state-layer {\r\n outline-style: solid;\r\n outline-offset: -1px;\r\n outline-width: var(--m3e-calendar-item-current-outline-thickness, 1px);\r\n outline-color: var(--m3e-calendar-item-current-outline-color, ${DesignToken.color.primary});\r\n }\r\n td:has(.item[aria-disabled]) {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-calendar-item-disabled-color, ${DesignToken.color.onSurface})\r\n var(--m3e-calendar-item-disabled-color-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n @media (forced-colors: active) {\r\n td:not(:has(.item[aria-disabled])).selected {\r\n forced-color-adjust: none;\r\n color: ButtonFace;\r\n }\r\n td:not(:has(.item[aria-disabled])).selected .state-layer {\r\n background-color: ButtonText;\r\n }\r\n td:has(.item[aria-disabled]) {\r\n color: GrayText;\r\n }\r\n td.current:not(.selected):not(.special):not(.range-start):not(.range-end) {\r\n color: ButtonText;\r\n }\r\n td.current:not(.selected):not(.special):not(.range-start):not(.range-end) .state-layer {\r\n border-color: ButtonText;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ @query(\".active > .item\") private readonly _activeItem?: HTMLElement;\r\n\r\n /** Today's date. */\r\n @property({ converter: dateConverter }) today: Date = new Date();\r\n\r\n /** The selected date. */\r\n @property({ converter: dateConverter }) date: Date | null = null;\r\n\r\n /** The active date. */\r\n @property({ attribute: \"active-date\", converter: dateConverter }) activeDate: Date = new Date();\r\n\r\n /** The minimum date that can be selected. */\r\n @property({ attribute: \"min-date\", converter: dateConverter }) minDate: Date | null = null;\r\n\r\n /** The maximum date that can be selected. */\r\n @property({ attribute: \"max-date\", converter: dateConverter }) maxDate: Date | null = null;\r\n\r\n /**\r\n * Asynchronously focuses the active date.\r\n * @returns {Promise<void>} A promise that resolves after the active date has been focused.\r\n */\r\n async focusActiveCell(): Promise<void> {\r\n if (this.isUpdatePending) {\r\n await this.updateComplete;\r\n }\r\n\r\n if (this._activeItem) {\r\n await focusWhenReady(this._activeItem);\r\n }\r\n }\r\n\r\n /** @internal */\r\n protected _changeActiveDate(activeDate: Date): void {\r\n activeDate = clampDate(activeDate, this.minDate, this.maxDate);\r\n if (!sameDate(activeDate, this.activeDate)) {\r\n this._activeItem?.style.setProperty(\"--m3e-state-layer-duration\", \"0ms\");\r\n this._activeItem?.blur();\r\n this._activeItem?.style.removeProperty(\"--m3e-state-layer-duration\");\r\n\r\n this.activeDate = activeDate;\r\n this.dispatchEvent(new Event(\"active-change\", { bubbles: false }));\r\n }\r\n }\r\n}\r\n","/**\r\n * Adapted from Angular Material Datepicker\r\n * Source: https://github.com/angular/components/blob/main/src/material/datepicker/month-view.ts\r\n *\r\n * @license MIT\r\n * Copyright (c) 2025 Google LLC\r\n * See LICENSE file in the project root for full license text.\r\n */\r\n\r\nimport { css, CSSResultGroup, html, nothing } from \"lit\";\r\nimport { property } from \"lit/decorators.js\";\r\nimport { classMap } from \"lit/directives/class-map.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport { customElement, dateConverter, DesignToken } from \"@m3e/web/core\";\r\nimport { M3eDirectionality } from \"@m3e/web/core/bidi\";\r\n\r\nimport { CalendarViewElementBase } from \"./CalendarViewElementBase\";\r\nimport {\r\n addCalendarDays,\r\n addCalendarMonths,\r\n addCalendarYears,\r\n clampDate,\r\n compareDate,\r\n getNumDaysInMonth,\r\n sameDate,\r\n} from \"./utils\";\r\n\r\n/**\r\n * An internal component used to display a single month in a calendar.\r\n * @internal\r\n */\r\n@customElement(\"m3e-month-view\")\r\nexport class M3eMonthViewElement extends CalendarViewElementBase {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = [\r\n CalendarViewElementBase.styles,\r\n css`\r\n thead {\r\n font-size: var(--m3e-calendar-weekday-font-size, ${DesignToken.typescale.standard.title.small.fontSize});\r\n font-weight: var(--m3e-calendar-weekday-font-weight, ${DesignToken.typescale.standard.title.small.fontWeight});\r\n line-height: var(--m3e-calendar-weekday-line-height, ${DesignToken.typescale.standard.title.small.lineHeight});\r\n letter-spacing: var(--m3e-calendar-weekday-tracking, ${DesignToken.typescale.standard.title.small.tracking});\r\n color: var(--m3e-calendar-weekday-color, ${DesignToken.color.onSurface});\r\n }\r\n th {\r\n height: 1.5rem;\r\n padding-block-start: 1.875rem;\r\n padding-block-end: 1rem;\r\n }\r\n tbody {\r\n font-size: var(--m3e-calendar-date-font-size, ${DesignToken.typescale.standard.body.medium.fontSize});\r\n font-weight: var(--m3e-calendar-date-font-weight, ${DesignToken.typescale.standard.body.medium.fontWeight});\r\n line-height: var(--m3e-calendar-date-line-height, ${DesignToken.typescale.standard.body.medium.lineHeight});\r\n letter-spacing: var(--m3e-calendar-date-tracking, ${DesignToken.typescale.standard.body.medium.tracking});\r\n }\r\n td:not(:has(.item[aria-disabled])):not(.selected):not(.range-start):not(.range-end).special {\r\n color: var(--m3e-calendar-item-special-color, ${DesignToken.color.onTertiaryContainer});\r\n --m3e-ripple-color: var(--m3e-calendar-item-special-ripple-color, ${DesignToken.color.onTertiaryContainer});\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-calendar-item-special-hover-color,\r\n ${DesignToken.color.onTertiaryContainer}\r\n );\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-calendar-item-special-focus-color,\r\n ${DesignToken.color.onTertiaryContainer}\r\n );\r\n }\r\n td:not(:has(.item[aria-disabled])):not(.selected):not(.range-start):not(.range-end).special .state-layer {\r\n background-color: var(--m3e-calendar-item-special-container-color, ${DesignToken.color.tertiaryContainer});\r\n }\r\n td:not(:has(.item[aria-disabled])).range-start,\r\n td:not(:has(.item[aria-disabled])).range-end {\r\n color: var(--m3e-calendar-item-selected-color, ${DesignToken.color.onPrimary});\r\n --m3e-ripple-color: var(--m3e-calendar-item-selected-ripple-color, ${DesignToken.color.onPrimary});\r\n }\r\n td:not(:has(.item[aria-disabled])).range-start .state-layer,\r\n td:not(:has(.item[aria-disabled])).range-end .state-layer {\r\n background-color: var(--m3e-calendar-item-selected-container-color, ${DesignToken.color.primary});\r\n }\r\n td:not(:has(.item[aria-disabled])).range::before,\r\n td:not(:has(.item[aria-disabled])).range-start-range::before,\r\n td:not(:has(.item[aria-disabled])).range-end::before {\r\n content: \"\";\r\n position: absolute;\r\n left: 0;\r\n right: 0;\r\n top: 0.25rem;\r\n bottom: 0.25rem;\r\n background-color: var(--m3e-calendar-range-container-color, ${DesignToken.color.primaryContainer});\r\n }\r\n td:not(:has(.item[aria-disabled])):not(.selected).range {\r\n color: var(--m3e-calendar-range-color, ${DesignToken.color.onPrimaryContainer});\r\n }\r\n td:not(:has(.item[aria-disabled])).range-start::before {\r\n inset-inline-start: 50%;\r\n width: 50%;\r\n }\r\n td:not(:has(.item[aria-disabled])).range-end::before {\r\n inset-inline-end: 50%;\r\n width: 50%;\r\n }\r\n td:not(:has(.item[aria-disabled])).range-highlight-start .item::after,\r\n td:not(:has(.item[aria-disabled])).range-highlight .item::after,\r\n td:not(:has(.item[aria-disabled])).range-highlight-end .item::after {\r\n content: \"\";\r\n position: absolute;\r\n top: 0;\r\n left: calc(0px - 0.1875rem);\r\n right: calc(0px - 0.1875rem);\r\n bottom: 0;\r\n border-style: dashed;\r\n border-color: ${DesignToken.color.primary};\r\n border-width: 1px;\r\n }\r\n td:not(:has(.item[aria-disabled])).range-highlight-start .item::after {\r\n margin-inline-start: 50%;\r\n }\r\n td:not(:has(.item[aria-disabled])).range-highlight-end .item::after {\r\n margin-inline-end: 0.1875rem;\r\n }\r\n td:not(:has(.item[aria-disabled])).range-highlight-start .item::after,\r\n td:not(:has(.item[aria-disabled])).range-highlight .item::after {\r\n border-inline-style: none;\r\n }\r\n td:not(:has(.item[aria-disabled])).range-highlight-end .item::after {\r\n border-start-end-radius: ${DesignToken.shape.corner.full};\r\n border-end-end-radius: ${DesignToken.shape.corner.full};\r\n border-inline-start-style: none;\r\n }\r\n @media (forced-colors: active) {\r\n td:not(:has(.item[aria-disabled])).range-start,\r\n td:not(:has(.item[aria-disabled])).range-end {\r\n forced-color-adjust: none;\r\n color: HighlightText;\r\n }\r\n td:not(:has(.item[aria-disabled])).range-start .state-layer,\r\n td:not(:has(.item[aria-disabled])).range-end .state-layer {\r\n background-color: Highlight;\r\n }\r\n td:not(:has(.item[aria-disabled])).range::before,\r\n td:not(:has(.item[aria-disabled])).range-start-range::before,\r\n td:not(:has(.item[aria-disabled])).range-end::before {\r\n background-color: Highlight;\r\n }\r\n td:not(:has(.item[aria-disabled])):not(.selected).range {\r\n forced-color-adjust: none;\r\n color: HighlightText;\r\n }\r\n td:not(:has(.item[aria-disabled])).range-highlight-start .item::after,\r\n td:not(:has(.item[aria-disabled])).range-highlight .item::after,\r\n td:not(:has(.item[aria-disabled])).range-highlight-end .item::after {\r\n border-color: GrayText;\r\n }\r\n }\r\n `,\r\n ];\r\n\r\n /** @internal */ _suppressFocusHighlight = true;\r\n\r\n /** Start of a date range. */\r\n @property({ attribute: \"range-start\", converter: dateConverter }) rangeStart: Date | null = null;\r\n\r\n /** End of a date range. */\r\n @property({ attribute: \"range-end\", converter: dateConverter }) rangeEnd: Date | null = null;\r\n\r\n /** A function used to determine whether a date cannot be selected. */\r\n @property({ attribute: false }) blackoutDates: ((date: Date) => boolean) | null = null;\r\n\r\n /** A function used to determine whether a date is special. */\r\n @property({ attribute: false }) specialDates: ((date: Date) => boolean) | null = null;\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n const date = new Date(this.today);\r\n date.setDate(1);\r\n\r\n while (date.getDay() != 0) {\r\n date.setDate(date.getDate() + 1);\r\n }\r\n\r\n const weekdays = new Array<{ long: string; narrow: string; id: number }>();\r\n const narrowFormat = new Intl.DateTimeFormat(navigator.language, { weekday: \"narrow\" });\r\n const longFormat = new Intl.DateTimeFormat(navigator.language, { weekday: \"long\" });\r\n\r\n for (let i = 0; i < 7; i++) {\r\n weekdays.push({ id: i, narrow: narrowFormat.format(date), long: longFormat.format(date) });\r\n date.setDate(date.getDate() + 1);\r\n }\r\n\r\n const year = this.activeDate.getFullYear();\r\n const month = this.activeDate.getMonth();\r\n const firstDate = new Date(year, month, 1);\r\n const lastDate = new Date(year, month + 1, 0);\r\n const numDays = lastDate.getDate();\r\n\r\n let weeks: number[][] = [];\r\n let dayOfWeek = firstDate.getDay();\r\n\r\n for (let i = 1; i <= numDays; i++) {\r\n if (dayOfWeek === 0 || weeks.length === 0) {\r\n weeks.push([]);\r\n }\r\n weeks[weeks.length - 1].push(i);\r\n dayOfWeek = (dayOfWeek + 1) % 7;\r\n }\r\n\r\n weeks = weeks.filter((x) => !!x.length);\r\n\r\n return html`<table role=\"grid\">\r\n <thead>\r\n <tr>\r\n ${weekdays.map(\r\n (x) =>\r\n html`<th scope=\"col\">\r\n <span class=\"visually-hidden\">${x.long}</span>\r\n <div id=\"weekday-${x.id}-month-${month}\" aria-hidden=\"true\">${x.narrow}</div>\r\n <m3e-tooltip for=\"weekday-${x.id}-month-${month}\">${x.long}</m3e-tooltip>\r\n </th>`,\r\n )}\r\n </tr>\r\n </thead>\r\n <tbody>\r\n ${weeks.map(\r\n (row, i) =>\r\n html`<tr role=\"row\">\r\n ${i === 0 && row.length < 7 ? html`<td colspan=\"${7 - row.length}\"></td>` : nothing}\r\n ${row.map((y) => this.#renderItem(new Date(year, month, y)))}\r\n ${i > 0 && row.length < 7 ? html`<td colspan=\"${7 - row.length}\"></td>` : nothing}\r\n </tr>`,\r\n )}\r\n </tbody>\r\n </table>`;\r\n }\r\n\r\n /** @private */\r\n #renderItem(value: Date): unknown {\r\n const long = new Intl.DateTimeFormat(navigator.language, {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n }).format(value);\r\n\r\n const special = this.specialDates?.(value) ?? false;\r\n const selected = sameDate(this.date, value);\r\n const active = sameDate(this.activeDate, value);\r\n const current = sameDate(this.today, value);\r\n const disabled =\r\n (this.minDate && compareDate(value, this.minDate) < 0) ||\r\n (this.maxDate && compareDate(value, this.maxDate) > 0) ||\r\n this.blackoutDates?.(value) === true;\r\n\r\n const id = `date-${value.getMonth()}-${value.getDate()}-${value.getFullYear()}`;\r\n\r\n let range = false,\r\n rangeStart = false,\r\n rangeEnd = false,\r\n rangeStartRange = false;\r\n\r\n if (this.rangeStart) {\r\n if (!this.rangeEnd) {\r\n rangeStart = sameDate(value, this.rangeStart);\r\n } else {\r\n range = compareDate(value, this.rangeStart) > 0 && compareDate(value, this.rangeEnd) < 0;\r\n if (!range) {\r\n rangeStart = compareDate(value, this.rangeStart) >= 0 && compareDate(value, this.rangeEnd) < 0;\r\n if (!rangeStart) {\r\n rangeEnd = compareDate(value, this.rangeStart) > 0 && compareDate(value, this.rangeEnd) <= 0;\r\n } else {\r\n rangeStartRange = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return html`<td\r\n role=\"gridcell\"\r\n class=\"${classMap({\r\n current,\r\n selected,\r\n active,\r\n special,\r\n range,\r\n \"range-start\": rangeStart,\r\n \"range-start-range\": rangeStartRange,\r\n \"range-end\": rangeEnd,\r\n })}\"\r\n >\r\n <div\r\n id=\"${id}\"\r\n role=\"button\"\r\n class=\"item\"\r\n data-value=\"${value.toISOString()}\"\r\n tabindex=\"${active ? \"0\" : \"-1\"}\"\r\n aria-disabled=\"${ifDefined(disabled || undefined)}\"\r\n aria-current=\"${ifDefined(current ? \"date\" : undefined)}\"\r\n aria-pressed=\"${selected || rangeStart || rangeEnd}\"\r\n @click=\"${this.#handleItemClick}\"\r\n @mouseenter=\"${this.#handleItemMouseEnter}\"\r\n @focus=\"${this.#handleItemFocus}\"\r\n @mouseleave=\"${this.#clearRangeHighlight}\"\r\n @blur=\"${this.#clearRangeHighlight}\"\r\n @keydown=\"${this.#handleItemKeyDown}\"\r\n >\r\n <m3e-focus-ring class=\"focus-ring\" for=\"${id}\"></m3e-focus-ring>\r\n <m3e-state-layer class=\"state-layer\" for=\"${id}\" ?disable-hover=\"${disabled}\"></m3e-state-layer>\r\n <m3e-ripple class=\"ripple\" centered for=\"${id}\" ?disabled=\"${disabled}\"></m3e-ripple>\r\n <div class=\"touch\"></div>\r\n <span class=\"visually-hidden\">${long}</span>\r\n <span aria-hidden=\"true\">${value.getDate()}</span>\r\n </div>\r\n </td>`;\r\n }\r\n\r\n /** @private */\r\n #handleItemClick(e: Event): void {\r\n const item = e.currentTarget as HTMLElement;\r\n if (item.ariaDisabled === \"true\" || !item.dataset[\"value\"]) return;\r\n\r\n this.activeDate = new Date(item.dataset[\"value\"]);\r\n this.activeDate = clampDate(this.activeDate, this.minDate, this.maxDate);\r\n\r\n if (this.rangeStart) {\r\n if (compareDate(this.activeDate, this.rangeStart) < 0) {\r\n this.rangeStart = this.activeDate;\r\n this.rangeEnd = null;\r\n } else {\r\n this.rangeEnd = this.activeDate;\r\n }\r\n this.#clearRangeHighlight();\r\n }\r\n\r\n this.dispatchEvent(new Event(\"change\", { bubbles: false }));\r\n }\r\n\r\n /** @private */\r\n #handleItemKeyDown(e: KeyboardEvent): void {\r\n let activeDate = this.activeDate;\r\n\r\n switch (e.key) {\r\n case \" \":\r\n case \"Enter\":\r\n e.preventDefault();\r\n (e.currentTarget as HTMLElement).click();\r\n return;\r\n\r\n case \"ArrowLeft\":\r\n case \"Left\":\r\n activeDate = addCalendarDays(activeDate, M3eDirectionality.current === \"rtl\" ? 1 : -1);\r\n break;\r\n\r\n case \"ArrowRight\":\r\n case \"Right\":\r\n activeDate = addCalendarDays(activeDate, M3eDirectionality.current === \"rtl\" ? -1 : 1);\r\n break;\r\n\r\n case \"ArrowUp\":\r\n case \"Up\":\r\n activeDate = addCalendarDays(activeDate, -7);\r\n break;\r\n\r\n case \"ArrowDown\":\r\n case \"Down\":\r\n activeDate = addCalendarDays(activeDate, 7);\r\n break;\r\n\r\n case \"Home\":\r\n activeDate = addCalendarDays(activeDate, 1 - activeDate.getDate());\r\n break;\r\n\r\n case \"End\":\r\n activeDate = addCalendarDays(activeDate, getNumDaysInMonth(activeDate) - activeDate.getDate());\r\n break;\r\n\r\n case \"PageUp\":\r\n activeDate = e.altKey ? addCalendarYears(activeDate, -1) : addCalendarMonths(activeDate, -1);\r\n break;\r\n\r\n case \"PageDown\":\r\n activeDate = e.altKey ? addCalendarYears(activeDate, 1) : addCalendarMonths(activeDate, 1);\r\n break;\r\n\r\n default:\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n this._changeActiveDate(activeDate);\r\n }\r\n\r\n /** @private */\r\n #handleItemMouseEnter(e: Event): void {\r\n this.#setRangeHighlight(e.currentTarget as HTMLElement);\r\n }\r\n\r\n /** @private */\r\n #handleItemFocus(e: Event): void {\r\n if (!this._suppressFocusHighlight) {\r\n this.#setRangeHighlight(e.currentTarget as HTMLElement);\r\n }\r\n }\r\n\r\n /** @private */\r\n #setRangeHighlight(item: HTMLElement): void {\r\n this.#clearRangeHighlight();\r\n if (this.rangeStart && item.dataset[\"value\"]) {\r\n if (compareDate(new Date(item.dataset[\"value\"]), this.rangeStart) > 0) {\r\n item.parentElement!.classList.add(\"range-highlight-end\");\r\n }\r\n for (const cell of item.closest(\"table\")?.querySelectorAll<HTMLElement>(\".item\") ?? []) {\r\n if (cell === item) break;\r\n\r\n const value = new Date(cell.dataset[\"value\"]!);\r\n if (compareDate(value, this.rangeStart) > 0) {\r\n cell.parentElement!.classList.add(\"range-highlight\");\r\n } else if (compareDate(value, this.rangeStart) >= 0) {\r\n cell.parentElement!.classList.add(\"range-highlight-start\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n #clearRangeHighlight(): void {\r\n if (this.rangeStart) {\r\n this.shadowRoot\r\n ?.querySelectorAll(\".range-highlight,.range-highlight-end,.range-highlight-start\")\r\n .forEach((x) => x.classList.remove(\"range-highlight\", \"range-highlight-end\", \"range-highlight-start\"));\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-month-view\": M3eMonthViewElement;\r\n }\r\n}\r\n","/**\r\n * Adapted from Angular Material Datepicker\r\n * Source: https://github.com/angular/components/blob/main/src/material/datepicker/multi-year-view.ts\r\n *\r\n * @license MIT\r\n * Copyright (c) 2025 Google LLC\r\n * See LICENSE file in the project root for full license text.\r\n */\r\n\r\nimport { css, CSSResultGroup, html } from \"lit\";\r\nimport { classMap } from \"lit/directives/class-map.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport { customElement, DesignToken } from \"@m3e/web/core\";\r\nimport { M3eDirectionality } from \"@m3e/web/core/bidi\";\r\n\r\nimport { CalendarViewElementBase } from \"./CalendarViewElementBase\";\r\nimport { addCalendarYears, clampDate, getActiveOffset, minYearOfPage, YEARS_PER_PAGE, YEARS_PER_ROW } from \"./utils\";\r\n\r\n/**\r\n * An internal component used to display a year selector in a calendar.\r\n * @internal\r\n */\r\n@customElement(\"m3e-multi-year-view\")\r\nexport class M3eMultiYearViewElement extends CalendarViewElementBase {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = [\r\n CalendarViewElementBase.styles,\r\n css`\r\n .item {\r\n height: 2.25rem;\r\n }\r\n .touch {\r\n width: 100%;\r\n }\r\n th {\r\n height: 1rem;\r\n }\r\n td {\r\n padding-inline: 1rem;\r\n }\r\n tbody {\r\n font-size: var(--m3e-calendar-item-font-size, ${DesignToken.typescale.standard.body.medium.fontSize});\r\n font-weight: var(--m3e-calendar-item-font-weight, ${DesignToken.typescale.standard.body.medium.fontWeight});\r\n line-height: var(--m3e-calendar-item-line-height, ${DesignToken.typescale.standard.body.medium.lineHeight});\r\n letter-spacing: var(--m3e-calendar-item-tracking, ${DesignToken.typescale.standard.body.medium.tracking});\r\n }\r\n `,\r\n ];\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n const years = new Array<number[]>();\r\n const minYear = minYearOfPage(this.activeDate, this.minDate, this.maxDate);\r\n for (let i = 0, row: number[] = []; i < YEARS_PER_PAGE; i++) {\r\n row.push(minYear + i);\r\n if (row.length === YEARS_PER_ROW) {\r\n years.push(row);\r\n row = new Array<number>();\r\n }\r\n }\r\n\r\n return html`<table role=\"grid\">\r\n <thead aria-hidden=\"true\">\r\n <tr>\r\n <th colspan=\"${YEARS_PER_ROW}\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n ${years.map(\r\n (row) =>\r\n html`<tr role=\"row\">\r\n ${row.map((year) => this.#renderItem(year))}\r\n </tr>`,\r\n )}\r\n </tbody>\r\n </table>`;\r\n }\r\n\r\n /** @private */\r\n #renderItem(year: number): unknown {\r\n const yearFormat = new Intl.DateTimeFormat(navigator.language, { year: \"numeric\" });\r\n const active = this.activeDate.getFullYear() === year;\r\n const selected = this.date?.getFullYear() === year;\r\n const current = this.today.getFullYear() === year;\r\n const disabled =\r\n (this.minDate && year < this.minDate.getFullYear()) || (this.maxDate && year > this.maxDate.getFullYear());\r\n\r\n const id = `year-${year}`;\r\n\r\n return html`<td role=\"gridcell\" class=\"${classMap({ current, selected, active })}\">\r\n <div\r\n id=\"${id}\"\r\n class=\"item\"\r\n role=\"button\"\r\n tabindex=\"${active ? \"0\" : \"-1\"}\"\r\n data-value=\"${year}\"\r\n aria-disabled=\"${ifDefined(disabled || undefined)}\"\r\n aria-current=\"${ifDefined(current ? \"date\" : undefined)}\"\r\n aria-pressed=\"${selected}\"\r\n @click=\"${this.#handleItemClick}\"\r\n @keydown=\"${this.#handleItemKeyDown}\"\r\n >\r\n <m3e-focus-ring class=\"focus-ring\" for=\"${id}\"></m3e-focus-ring>\r\n <m3e-state-layer class=\"state-layer\" for=\"${id}\" ?disable-hover=\"${disabled}\"></m3e-state-layer>\r\n <m3e-ripple class=\"ripple\" for=\"${id}\" centered ?disabled=\"${disabled}\"></m3e-ripple>\r\n <div class=\"touch\"></div>\r\n <span>${yearFormat.format(new Date(year, 0, 1))}</span>\r\n </div>\r\n </td>`;\r\n }\r\n\r\n /** @private */\r\n #handleItemClick(e: Event): void {\r\n const item = e.currentTarget as HTMLElement;\r\n if (item.ariaDisabled === \"true\" || !item.dataset[\"value\"]) return;\r\n\r\n this.activeDate = new Date(this.activeDate);\r\n this.activeDate.setFullYear(Number(item.dataset[\"value\"]));\r\n this.activeDate = clampDate(this.activeDate, this.minDate, this.maxDate);\r\n this.dispatchEvent(new Event(\"change\", { bubbles: false }));\r\n }\r\n\r\n /** @private */\r\n #handleItemKeyDown(e: KeyboardEvent): void {\r\n let activeDate = this.activeDate;\r\n switch (e.key) {\r\n case \" \":\r\n case \"Enter\":\r\n e.preventDefault();\r\n (e.currentTarget as HTMLElement).click();\r\n return;\r\n\r\n case \"ArrowLeft\":\r\n case \"Left\":\r\n activeDate = addCalendarYears(activeDate, M3eDirectionality.current === \"rtl\" ? 1 : -1);\r\n break;\r\n\r\n case \"ArrowRight\":\r\n case \"Right\":\r\n activeDate = addCalendarYears(activeDate, M3eDirectionality.current === \"rtl\" ? -1 : 1);\r\n break;\r\n\r\n case \"ArrowUp\":\r\n case \"Up\":\r\n activeDate = addCalendarYears(activeDate, -YEARS_PER_ROW);\r\n break;\r\n\r\n case \"ArrowDown\":\r\n case \"Down\":\r\n activeDate = addCalendarYears(activeDate, YEARS_PER_ROW);\r\n break;\r\n\r\n case \"Home\":\r\n activeDate = addCalendarYears(activeDate, -getActiveOffset(activeDate, this.minDate, this.maxDate));\r\n break;\r\n\r\n case \"End\":\r\n activeDate = addCalendarYears(\r\n activeDate,\r\n YEARS_PER_PAGE - getActiveOffset(activeDate, this.minDate, this.maxDate) - 1,\r\n );\r\n break;\r\n\r\n case \"PageUp\":\r\n activeDate = addCalendarYears(activeDate, e.altKey ? -YEARS_PER_PAGE * 10 : -YEARS_PER_PAGE);\r\n break;\r\n\r\n case \"PageDown\":\r\n activeDate = addCalendarYears(activeDate, e.altKey ? YEARS_PER_PAGE * 10 : YEARS_PER_PAGE);\r\n break;\r\n\r\n default:\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n this._changeActiveDate(activeDate);\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-multi-year-view\": M3eMultiYearViewElement;\r\n }\r\n}\r\n","/**\r\n * Adapted from Angular Material Datepicker\r\n * Source: https://github.com/angular/components/blob/main/src/material/datepicker/year-view.ts\r\n *\r\n * @license MIT\r\n * Copyright (c) 2025 Google LLC\r\n * See LICENSE file in the project root for full license text.\r\n */\r\n\r\nimport { css, CSSResultGroup, html } from \"lit\";\r\nimport { classMap } from \"lit/directives/class-map.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport { customElement, DesignToken } from \"@m3e/web/core\";\r\nimport { M3eDirectionality } from \"@m3e/web/core/bidi\";\r\n\r\nimport { CalendarViewElementBase } from \"./CalendarViewElementBase\";\r\nimport { addCalendarMonths, addCalendarYears, clampDate, MONTHS_PER_ROW } from \"./utils\";\r\n\r\n/**\r\n * An internal component used to display a single year in a calendar.\r\n * @internal\r\n */\r\n@customElement(\"m3e-year-view\")\r\nexport class M3eYearViewElement extends CalendarViewElementBase {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = [\r\n CalendarViewElementBase.styles,\r\n css`\r\n .item {\r\n height: 2.25rem;\r\n }\r\n .touch {\r\n width: 100%;\r\n }\r\n th {\r\n height: 1rem;\r\n }\r\n td {\r\n padding-inline: 0.375rem;\r\n }\r\n tbody {\r\n font-size: var(--m3e-calendar-item-font-size, ${DesignToken.typescale.standard.body.medium.fontSize});\r\n font-weight: var(--m3e-calendar-item-font-weight, ${DesignToken.typescale.standard.body.medium.fontWeight});\r\n line-height: var(--m3e-calendar-item-line-height, ${DesignToken.typescale.standard.body.medium.lineHeight});\r\n letter-spacing: var(--m3e-calendar-item-tracking, ${DesignToken.typescale.standard.body.medium.tracking});\r\n }\r\n `,\r\n ];\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n const months = new Array<Array<{ date: Date; long: string; narrow: string }>>();\r\n const shortFormat = new Intl.DateTimeFormat(navigator.language, { month: \"short\" });\r\n const longFormat = new Intl.DateTimeFormat(navigator.language, { month: \"long\" });\r\n const year = this.activeDate.getFullYear();\r\n\r\n for (let month = 0, row = new Array<{ date: Date; long: string; narrow: string }>(); month < 12; month++) {\r\n const date = new Date(year, month, 1);\r\n row.push({ narrow: shortFormat.format(date), long: longFormat.format(date), date: date });\r\n\r\n if (row.length == MONTHS_PER_ROW) {\r\n months.push(row);\r\n row = [];\r\n }\r\n }\r\n\r\n return html`<table role=\"grid\">\r\n <thead aria-hidden=\"true\">\r\n <tr>\r\n <th colspan=\"${MONTHS_PER_ROW}\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n ${months.map(\r\n (row) =>\r\n html`<tr role=\"row\">\r\n ${row.map((month) => this.#renderItem(month))}\r\n </tr>`,\r\n )}\r\n </tbody>\r\n </table>`;\r\n }\r\n\r\n /** @private */\r\n #renderItem(month: { date: Date; long: string; narrow: string }): unknown {\r\n const active =\r\n this.activeDate.getFullYear() === month.date.getFullYear() &&\r\n this.activeDate.getMonth() === month.date.getMonth();\r\n\r\n const selected =\r\n this.date?.getFullYear() === month.date.getFullYear() && this.date?.getMonth() === month.date.getMonth();\r\n\r\n const current =\r\n this.today.getFullYear() === month.date.getFullYear() && this.today.getMonth() === month.date.getMonth();\r\n\r\n const disabled =\r\n (this.minDate &&\r\n (month.date.getFullYear() < this.minDate.getFullYear() ||\r\n (month.date.getFullYear() === this.minDate.getFullYear() &&\r\n month.date.getMonth() < this.minDate.getMonth()))) ||\r\n (this.maxDate &&\r\n (month.date.getFullYear() > this.maxDate.getFullYear() ||\r\n (month.date.getFullYear() === this.maxDate.getFullYear() &&\r\n month.date.getMonth() > this.maxDate.getMonth())));\r\n\r\n const id = `month-${month.date.getMonth()}`;\r\n\r\n return html`<td role=\"gridcell\" class=\"${classMap({ current, selected, active })}\">\r\n <div\r\n id=\"${id}\"\r\n class=\"item\"\r\n role=\"button\"\r\n tabindex=\"${active ? \"0\" : \"-1\"}\"\r\n data-value=\"${month.date.toISOString()}\"\r\n aria-disabled=\"${ifDefined(disabled || undefined)}\"\r\n aria-current=\"${ifDefined(current ? \"date\" : undefined)}\"\r\n aria-pressed=\"${selected}\"\r\n @click=\"${this.#handleItemClick}\"\r\n @keydown=\"${this.#handleItemKeyDown}\"\r\n >\r\n <m3e-focus-ring class=\"focus-ring\" for=\"${id}\"></m3e-focus-ring>\r\n <m3e-state-layer class=\"state-layer\" for=\"${id}\" ?disable-hover=\"${disabled}\"></m3e-state-layer>\r\n <m3e-ripple class=\"ripple\" centered for=\"${id}\" ?disabled=\"${disabled}\"></m3e-ripple>\r\n <div class=\"touch\"></div>\r\n <span class=\"visually-hidden\">${month.long}</span>\r\n <span aria-hidden=\"true\">${month.narrow}</span>\r\n </div>\r\n </td>`;\r\n }\r\n\r\n /** @private */\r\n #handleItemClick(e: Event): void {\r\n const item = e.currentTarget as HTMLElement;\r\n if (item.ariaDisabled === \"true\" || !item.dataset[\"value\"]) return;\r\n\r\n this.activeDate = clampDate(new Date(item.dataset[\"value\"]), this.minDate, this.maxDate);\r\n this.dispatchEvent(new Event(\"change\", { bubbles: false }));\r\n }\r\n\r\n /** @private */\r\n #handleItemKeyDown(e: KeyboardEvent): void {\r\n let activeDate = this.activeDate;\r\n switch (e.key) {\r\n case \" \":\r\n case \"Enter\":\r\n e.preventDefault();\r\n (e.currentTarget as HTMLElement).click();\r\n return;\r\n\r\n case \"ArrowLeft\":\r\n case \"Left\":\r\n activeDate = addCalendarMonths(activeDate, M3eDirectionality.current === \"rtl\" ? 1 : -1);\r\n break;\r\n\r\n case \"ArrowRight\":\r\n case \"Right\":\r\n activeDate = addCalendarMonths(activeDate, M3eDirectionality.current === \"rtl\" ? -1 : 1);\r\n break;\r\n\r\n case \"ArrowUp\":\r\n case \"Up\":\r\n activeDate = addCalendarMonths(activeDate, -4);\r\n break;\r\n\r\n case \"ArrowDown\":\r\n case \"Down\":\r\n activeDate = addCalendarMonths(activeDate, 4);\r\n break;\r\n\r\n case \"Home\":\r\n activeDate = addCalendarMonths(activeDate, -activeDate.getMonth());\r\n break;\r\n\r\n case \"End\":\r\n activeDate = addCalendarMonths(activeDate, 11 - activeDate.getMonth());\r\n break;\r\n\r\n case \"PageUp\":\r\n activeDate = addCalendarYears(activeDate, e.altKey ? -10 : -1);\r\n break;\r\n\r\n case \"PageDown\":\r\n activeDate = addCalendarYears(activeDate, e.altKey ? 10 : 1);\r\n break;\r\n\r\n default:\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n this._changeActiveDate(activeDate);\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-year-view\": M3eYearViewElement;\r\n }\r\n}\r\n","/**\r\n * Adapted from Angular Material Datepicker\r\n * Source: https://github.com/angular/components/blob/main/src/material/datepicker/calendar.ts\r\n *\r\n * @license MIT\r\n * Copyright (c) 2025 Google LLC\r\n * See LICENSE file in the project root for full license text.\r\n */\r\n\r\nimport { css, CSSResultGroup, html, LitElement, PropertyValues, unsafeCSS } from \"lit\";\r\nimport { property, query, state } from \"lit/decorators.js\";\r\nimport { classMap } from \"lit/directives/class-map.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport { customElement, dateConverter, DesignToken, prefersReducedMotion } from \"@m3e/web/core\";\r\nimport { M3eDirectionality } from \"@m3e/web/core/bidi\";\r\n\r\nimport \"@m3e/web/button\";\r\nimport \"@m3e/web/icon-button\";\r\nimport \"@m3e/web/tooltip\";\r\n\r\nimport { CalendarView } from \"./CalendarView\";\r\nimport { CalendarViewElementBase } from \"./CalendarViewElementBase\";\r\nimport { M3eMonthViewElement } from \"./MonthViewElement\";\r\nimport { maxYearOfPage, minYearOfPage } from \"./utils\";\r\n\r\nimport \"./MonthViewElement\";\r\nimport \"./MultiYearViewElement\";\r\nimport \"./YearViewElement\";\r\n\r\n/**\r\n * A calendar used to select a date.\r\n *\r\n * @description\r\n * The `m3e-calendar` component provides structured navigation and selection across\r\n * month, year, and multi‑year views. It supports single‑date and range selection,\r\n * applies disabled rules including minimum, maximum, and blackout constraints, and\r\n * provides styling hooks for special date states.\r\n *\r\n * @example\r\n * The following example illustrates use of the `m3e-calendar`. In this example, a calendar is displayed\r\n * with a selected date.\r\n *\r\n * ```html\r\n * <m3e-calendar date=\"2025-12-13\"></m3e-calendar>\r\n * ```\r\n *\r\n * @tag m3e-calendar\r\n *\r\n * @slot header - Renders the header of the calendar.\r\n *\r\n * @attr date - The selected date.\r\n * @attr max-date - The maximum date that can be selected.\r\n * @attr min-date - The minimum date that can be selected.\r\n * @attr range-end - End of a date range.\r\n * @attr range-start - Start of a date range.\r\n * @attr start-at - A date specifying the period (month or year) to start the calendar in.\r\n * @attr start-view - The initial view used to select a date.\r\n * @attr previous-month-label - The accessible label given to the button used to move to the previous month.\r\n * @attr next-month-label - The accessible label given to the button used to move to the next month.\r\n * @attr previous-year-label - The accessible label given to the button used to move to the previous year.\r\n * @attr next-year-label - The accessible label given to the button used to move to the next year.\r\n * @attr previous-multi-year-label - The accessible label given to the button used to move to the previous 24 years.\r\n * @attr next-multi-year-label - The accessible label given to the button used to move to the next 24 years.\r\n *\r\n * @fires change - Emitted when the selected date changes.\r\n *\r\n * @cssprop --m3e-calendar-container-color - Background color of the container surface.\r\n * @cssprop --m3e-calendar-container-elevation - Elevation shadow applied to the container surface.\r\n * @cssprop --m3e-calendar-container-shape - Corner radius of the container surface.\r\n * @cssprop --m3e-calendar-padding - Padding applied to the calendar header and body.\r\n * @cssprop --m3e-calendar-period-button-text-color - Text color used for the period‑navigation buttons in the header.\r\n * @cssprop --m3e-calendar-weekday-font-size - Font size of weekday labels in month view.\r\n * @cssprop --m3e-calendar-weekday-font-weight - Font weight of weekday labels in month view.\r\n * @cssprop --m3e-calendar-weekday-line-height - Line height of weekday labels in month view.\r\n * @cssprop --m3e-calendar-weekday-tracking - Letter spacing of weekday labels in month view.\r\n * @cssprop --m3e-calendar-weekday-color - Text color for weekday labels in month view.\r\n * @cssprop --m3e-calendar-date-font-size - Font size of date cells in month view.\r\n * @cssprop --m3e-calendar-date-font-weight - Font weight of date cells in month view.\r\n * @cssprop --m3e-calendar-date-line-height - Line height of date cells in month view.\r\n * @cssprop --m3e-calendar-date-tracking - Letter spacing of date cells in month view.\r\n * @cssprop --m3e-calendar-item-font-size - Font size of items in year and multi‑year views.\r\n * @cssprop --m3e-calendar-item-font-weight - Font weight of items in year and multi‑year views.\r\n * @cssprop --m3e-calendar-item-line-height - Line height of items in year and multi‑year views.\r\n * @cssprop --m3e-calendar-item-tracking - Letter spacing of items in year and multi‑year views.\r\n * @cssprop --m3e-calendar-item-color - Text color for date items.\r\n * @cssprop --m3e-calendar-item-selected-color - Text color for selected date items.\r\n * @cssprop --m3e-calendar-item-selected-container-color - Background color for selected date items.\r\n * @cssprop --m3e-calendar-item-selected-ripple-color - Ripple color used when interacting with selected date items.\r\n * @cssprop --m3e-calendar-item-selected-hover-color - Hover color used when interacting with selected date items.\r\n * @cssprop --m3e-calendar-item-selected-focus-color - Focus color used when interacting with selected date items.\r\n * @cssprop --m3e-calendar-item-current-outline-thickness - Outline thickness used to indicate the current date.\r\n * @cssprop --m3e-calendar-item-current-outline-color - Outline color used to indicate the current date.\r\n * @cssprop --m3e-calendar-item-special-color - Text color for dates marked as special.\r\n * @cssprop --m3e-calendar-item-special-container-color - Background color for dates marked as special.\r\n * @cssprop --m3e-calendar-item-special-ripple-color - Ripple color used when interacting with dates marked as special.\r\n * @cssprop --m3e-calendar-item-special-hover-color - Hover color used when interacting with dates marked as special.\r\n * @cssprop --m3e-calendar-item-special-focus-color - Focus color used when interacting with dates marked as special.\r\n * @cssprop --m3e-calendar-range-container-color - Background color applied to the selected date range.\r\n * @cssprop --m3e-calendar-range-color - Text color for dates within a selected range.\r\n * @cssprop --m3e-calendar-item-disabled-color - Color used for disabled date items.\r\n * @cssprop --m3e-calendar-item-disabled-color-opacity - Opacity applied to the disabled item color.\r\n * @cssprop --m3e-calendar-slide-animation-duration - Duration of slide transitions between calendar views.\r\n */\r\n@customElement(\"m3e-calendar\")\r\nexport class M3eCalendarElement extends LitElement {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: inline-block;\r\n vertical-align: top;\r\n width: fit-content;\r\n height: fit-content;\r\n }\r\n .base {\r\n display: flex;\r\n flex-direction: column;\r\n width: fit-content;\r\n overflow: hidden;\r\n padding: var(--m3e-calendar-padding, 0.5rem);\r\n background-color: var(--m3e-calendar-container-color);\r\n box-shadow: var(--m3e-calendar-container-elevation);\r\n border-radius: var(--m3e-calendar-container-shape);\r\n }\r\n .header {\r\n display: flex;\r\n align-items: center;\r\n --m3e-text-button-label-text-color: var(\r\n --m3e-calendar-period-button-text-color,\r\n ${DesignToken.color.onSurfaceVariant}\r\n );\r\n --m3e-text-button-hover-label-text-color: var(\r\n --m3e-calendar-period-button-text-color,\r\n ${DesignToken.color.onSurfaceVariant}\r\n );\r\n --m3e-text-button-focus-label-text-color: var(\r\n --m3e-calendar-period-button-text-color,\r\n ${DesignToken.color.onSurfaceVariant}\r\n );\r\n --m3e-text-button-pressed-label-text-color: var(\r\n --m3e-calendar-period-button-text-color,\r\n ${DesignToken.color.onSurfaceVariant}\r\n );\r\n }\r\n .spacer {\r\n flex: 1 1 auto;\r\n }\r\n svg {\r\n transition: transform ${DesignToken.motion.spring.fastEffects};\r\n }\r\n svg.rotate {\r\n transform: rotate(-180deg);\r\n }\r\n .body {\r\n position: relative;\r\n }\r\n .view:not(.no-animate) {\r\n transition: ${unsafeCSS(\r\n `margin var(--m3e-calendar-slide-animation-duration, ${DesignToken.motion.duration.long2}) ${DesignToken.motion.easing.standard},\r\n visibility var(--m3e-calendar-slide-animation-duration, ${DesignToken.motion.duration.long2}) ${DesignToken.motion.easing.standard} allow-discrete`,\r\n )};\r\n }\r\n .view.before,\r\n .view.after {\r\n visibility: hidden;\r\n position: absolute;\r\n }\r\n .view.before {\r\n margin-inline-start: -100%;\r\n }\r\n .view.after {\r\n margin-inline-start: 100%;\r\n }\r\n .view:not(.before):not(.after) {\r\n visibility: visible;\r\n position: relative;\r\n left: 0;\r\n margin-inline-start: 0;\r\n }\r\n .row {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n .row.multi-year {\r\n transition: ${unsafeCSS(\r\n `transform var(--m3e-calendar-slide-animation-duration, ${DesignToken.motion.duration.long2}) ${DesignToken.motion.easing.standard} allow-discrete,\r\n opacity var(--m3e-calendar-slide-animation-duration, ${DesignToken.motion.duration.long2}) ${DesignToken.motion.easing.standard} allow-discrete`,\r\n )};\r\n }\r\n .row:not(.multi-year) {\r\n transition: ${unsafeCSS(\r\n `opacity var(--m3e-calendar-slide-animation-duration, ${DesignToken.motion.duration.long2}) ${DesignToken.motion.easing.standard} allow-discrete`,\r\n )};\r\n }\r\n .body.month > .row:not(.month),\r\n .body.year > .row:not(.year),\r\n .body.multi-year > .row:not(.multi-year) {\r\n visibility: hidden;\r\n position: absolute;\r\n transform: translateY(-10%);\r\n opacity: 0;\r\n }\r\n .body.month > .row:not(.month) .view:not(.before):not(.after),\r\n .body.year > .row:not(.year) .view:not(.before):not(.after),\r\n .body.multi-year > .row:not(.multi-year) .view:not(.before):not(.after) {\r\n visibility: hidden;\r\n transition: none;\r\n }\r\n\r\n @media (prefers-reduced-motion) {\r\n .row:not(.multi-year),\r\n .row.multi-year,\r\n .view:not(.no-animate),\r\n svg {\r\n transition: none;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ #transitionComplete?: Promise<void>;\r\n /** @private */ @state() private _today = new Date();\r\n /** @private */ @state() private _activeView: CalendarView = \"month\";\r\n /** @private */ @state() private _activeDate: Date = new Date();\r\n /** @private */ @query(\".active\") private readonly _view?: CalendarViewElementBase;\r\n /** @private */ @query(\".body\") private readonly _body!: HTMLElement;\r\n\r\n /**\r\n * The initial view used to select a date.\r\n * @default \"month\"\r\n */\r\n @property({ attribute: \"start-view\" }) startView: CalendarView = \"month\";\r\n\r\n /**\r\n * The selected date.\r\n * @default null\r\n */\r\n @property({ converter: dateConverter }) date: Date | null = null;\r\n\r\n /**\r\n * A date specifying the period (month or year) to start the calendar in.\r\n * @default null\r\n */\r\n @property({ attribute: \"start-at\", converter: dateConverter }) startAt: Date | null = null;\r\n\r\n /**\r\n * The minimum date that can be selected.\r\n * @default null\r\n */\r\n @property({ attribute: \"min-date\", converter: dateConverter }) minDate: Date | null = null;\r\n\r\n /**\r\n * The maximum date that can be selected.\r\n * @default null\r\n */\r\n @property({ attribute: \"max-date\", converter: dateConverter }) maxDate: Date | null = null;\r\n\r\n /**\r\n * Start of a date range.\r\n * @default null\r\n */\r\n @property({ attribute: \"range-start\", converter: dateConverter }) rangeStart: Date | null = null;\r\n\r\n /**\r\n * End of a date range.\r\n * @default null\r\n */\r\n @property({ attribute: \"range-end\", converter: dateConverter }) rangeEnd: Date | null = null;\r\n\r\n /**\r\n * A function used to determine whether a date cannot be selected.\r\n * @default null\r\n */\r\n @property({ attribute: false }) blackoutDates: ((date: Date) => boolean) | null = null;\r\n\r\n /**\r\n * A function used to determine whether a date is special.\r\n * @default null\r\n */\r\n @property({ attribute: false }) specialDates: ((date: Date) => boolean) | null = null;\r\n\r\n /**\r\n * The accessible label given to the button used to move to the previous month.\r\n * @default \"Previous month\"\r\n */\r\n @property({ attribute: \"previous-month-label\" }) previousMonthLabel = \"Previous month\";\r\n\r\n /**\r\n * The accessible label given to the button used to move to the previous year.\r\n * @default \"Previous year\"\r\n */\r\n @property({ attribute: \"previous-year-label\" }) previousYearLabel = \"Previous year\";\r\n\r\n /**\r\n * The accessible label given to the button used to move to the previous 24 years.\r\n * @default \"Previous 24 years\"\r\n */\r\n @property({ attribute: \"previous-multi-year-label\" }) previousMultiYearLabel = \"Previous 24 years\";\r\n\r\n /**\r\n * The accessible label given to the button used to move to the next month.\r\n * @default \"Next month\"\r\n */\r\n @property({ attribute: \"next-month-label\" }) nextMonthLabel = \"Next month\";\r\n\r\n /**\r\n * The accessible label given to the button used to move to the next year.\r\n * @default \"Next year\"\r\n */\r\n @property({ attribute: \"next-year-label\" }) nextYearLabel = \"Next year\";\r\n\r\n /**\r\n * The accessible label given to the button used to move to the next 24 years.\r\n * @default \"Next 24 years\"\r\n */\r\n @property({ attribute: \"next-multi-year-label\" }) nextMultiYearLabel = \"Next 24 years\";\r\n\r\n /** The label to present for the current period. */\r\n get periodLabel(): string {\r\n switch (this._activeView) {\r\n case \"month\":\r\n return new Intl.DateTimeFormat(navigator.language, { month: \"short\", year: \"numeric\" }).format(\r\n this._activeDate,\r\n );\r\n\r\n case \"year\":\r\n return new Intl.DateTimeFormat(navigator.language, { year: \"numeric\" }).format(\r\n new Date(this._activeDate.getFullYear(), 0, 1),\r\n );\r\n\r\n case \"multi-year\":\r\n return new Intl.DateTimeFormat(navigator.language, { year: \"numeric\" }).formatRange(\r\n new Date(minYearOfPage(this._activeDate, this.minDate, this.maxDate), 0, 1),\r\n new Date(maxYearOfPage(this._activeDate, this.minDate, this.maxDate), 0, 1),\r\n );\r\n }\r\n }\r\n\r\n /** Whether the calendar can move to the previous period. */\r\n get canMovePreviousPeriod(): boolean {\r\n if (!this.minDate) return true;\r\n switch (this._activeView) {\r\n case \"month\":\r\n return new Date(this._activeDate.getFullYear(), this._activeDate.getMonth(), 0) >= this.minDate;\r\n\r\n case \"year\":\r\n return new Date(this._activeDate.getFullYear() - 1, 12, 1) >= this.minDate;\r\n\r\n case \"multi-year\":\r\n return new Date(minYearOfPage(this._activeDate, this.minDate, this.maxDate) - 1, 12, 1) >= this.minDate;\r\n }\r\n }\r\n\r\n /** Whether the calendar can move to the next period. */\r\n get canMoveNextPeriod(): boolean {\r\n if (!this.maxDate) return true;\r\n switch (this._activeView) {\r\n case \"month\":\r\n return new Date(this._activeDate.getFullYear(), this._activeDate.getMonth() + 1, 1) <= this.maxDate;\r\n\r\n case \"year\":\r\n return new Date(this._activeDate.getFullYear() + 1, 1, 1) <= this.maxDate;\r\n\r\n case \"multi-year\":\r\n return new Date(maxYearOfPage(this._activeDate, this.minDate, this.maxDate) + 1, 12, 1) <= this.maxDate;\r\n }\r\n }\r\n\r\n /**\r\n * Asynchronously focuses the active date.\r\n * @returns {Promise<void>} A promise that resolves after the active date has been focused.\r\n */\r\n async focusActiveCell(): Promise<void> {\r\n if (this.isUpdatePending) {\r\n await this.updateComplete;\r\n }\r\n await this._view?.focusActiveCell();\r\n }\r\n\r\n /** Updates today's date. */\r\n updateTodayDate(): void {\r\n this._today = new Date();\r\n }\r\n\r\n /**\r\n * Moves the calendar to the previous period.\r\n * @returns {Promise<void>} A promise that resolves when the operation is complete.\r\n */\r\n async movePreviousPeriod(): Promise<void> {\r\n if (!this.canMovePreviousPeriod) return;\r\n if (prefersReducedMotion()) {\r\n this._activeDate = this.#getPreviousPeriod(this._activeView);\r\n return;\r\n }\r\n\r\n await this.#transitionComplete;\r\n\r\n const views = [...(this.shadowRoot?.querySelectorAll<HTMLElement>(`.row.${this._activeView} .view`) ?? [])];\r\n if (views.length != 3) return;\r\n\r\n this.#transitionComplete = new Promise<void>((resolve) => {\r\n views[0].addEventListener(\r\n \"transitionend\",\r\n () => {\r\n this._activeDate = this.#getPreviousPeriod(this._activeView);\r\n views.forEach((x) => x.classList.add(\"no-animate\"));\r\n views[1].classList.remove(\"after\");\r\n views[0].classList.add(\"before\");\r\n setTimeout(() => {\r\n views.forEach((x) => x.classList.remove(\"no-animate\"));\r\n resolve();\r\n });\r\n },\r\n { once: true },\r\n );\r\n });\r\n\r\n this._body.style.overflow = \"hidden\";\r\n views[1].classList.add(\"after\");\r\n views[0].classList.remove(\"before\");\r\n\r\n await this.#transitionComplete;\r\n this._body.style.overflow = \"\";\r\n }\r\n\r\n /**\r\n * Moves the calendar to the next period.\r\n * @returns {Promise<void>} A promise that resolves when the operation is complete.\r\n */\r\n async moveNextPeriod(): Promise<void> {\r\n if (!this.canMoveNextPeriod) return;\r\n if (prefersReducedMotion()) {\r\n this._activeDate = this.#getNextPeriod(this._activeView);\r\n return;\r\n }\r\n\r\n await this.#transitionComplete;\r\n\r\n const views = [...(this.shadowRoot?.querySelectorAll<HTMLElement>(`.row.${this._activeView} .view`) ?? [])];\r\n if (views.length != 3) return;\r\n\r\n this.#transitionComplete = new Promise<void>((resolve) => {\r\n views[2].addEventListener(\r\n \"transitionend\",\r\n () => {\r\n this._activeDate = this.#getNextPeriod(this._activeView);\r\n views.forEach((x) => x.classList.add(\"no-animate\"));\r\n views[1].classList.remove(\"before\");\r\n views[2].classList.add(\"after\");\r\n setTimeout(() => {\r\n views.forEach((x) => x.classList.remove(\"no-animate\"));\r\n resolve();\r\n });\r\n },\r\n { once: true },\r\n );\r\n });\r\n\r\n this._body.style.overflow = \"hidden\";\r\n views[1].classList.add(\"before\");\r\n views[2].classList.remove(\"after\");\r\n\r\n await this.#transitionComplete;\r\n this._body.style.overflow = \"\";\r\n }\r\n\r\n /**\r\n * Toggles the current period.\r\n * @returns {Promise<void>} A promise that resolves when the operation is complete.\r\n */\r\n async togglePeriod(): Promise<void> {\r\n await this.#transitionComplete;\r\n this._activeView = this._activeView === \"month\" ? \"multi-year\" : \"month\";\r\n await this.focusActiveCell();\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override willUpdate(changedProperties: PropertyValues<this>): void {\r\n super.willUpdate(changedProperties);\r\n\r\n if (changedProperties.has(\"date\")) {\r\n this._activeDate = new Date(this.date ?? this._today);\r\n }\r\n if (changedProperties.has(\"startAt\")) {\r\n this._activeDate = new Date(this.startAt ?? this.date ?? this._today);\r\n }\r\n if (changedProperties.has(\"startView\")) {\r\n this._activeView = this.startView;\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override updated(_changedProperties: PropertyValues<this>): void {\r\n super.updated(_changedProperties);\r\n\r\n if (this._view instanceof M3eMonthViewElement) {\r\n if (_changedProperties.has(\"specialDates\") || _changedProperties.has(\"blackoutDates\")) {\r\n this.shadowRoot?.querySelectorAll(\"m3e-month-view\").forEach((x) => {\r\n x.specialDates = this.specialDates;\r\n x.blackoutDates = this.blackoutDates;\r\n });\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\">\r\n <slot name=\"header\">${this.#renderHeader()}</slot>\r\n <div class=\"body ${this._activeView}\">\r\n <div class=\"row multi-year\">\r\n ${this.#renderView(\"multi-year\", -1)}${this.#renderView(\"multi-year\", 0)}${this.#renderView(\"multi-year\", 1)}\r\n </div>\r\n <div class=\"row year\">\r\n ${this.#renderView(\"year\", -1)}${this.#renderView(\"year\", 0)}${this.#renderView(\"year\", 1)}\r\n </div>\r\n <div class=\"row month\">\r\n ${this.#renderView(\"month\", -1)}${this.#renderView(\"month\", 0)}${this.#renderView(\"month\", 1)}\r\n </div>\r\n </div>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #renderHeader(): unknown {\r\n return html`<div class=\"header\">\r\n <m3e-button @click=\"${this.togglePeriod}\">\r\n ${this.periodLabel}\r\n <svg\r\n class=\"${classMap({ rotate: this._activeView !== \"month\" })}\"\r\n slot=\"trailing-icon\"\r\n viewBox=\"0 -960 960 960\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M480-360 280-560h400L480-360Z\" />\r\n </svg>\r\n </m3e-button>\r\n <div class=\"spacer\"></div>\r\n <m3e-icon-button\r\n ?disabled=\"${!this.canMovePreviousPeriod}\"\r\n @click=\"${this.movePreviousPeriod}\"\r\n aria-label=\"${this._activeView === \"month\"\r\n ? this.previousMonthLabel\r\n : this._activeView === \"year\"\r\n ? this.previousYearLabel\r\n : this.previousMultiYearLabel}\"\r\n >\r\n ${M3eDirectionality.current === \"ltr\"\r\n ? html`<svg viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\" />\r\n </svg>`\r\n : html`<svg viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" />\r\n </svg>`}\r\n </m3e-icon-button>\r\n <m3e-icon-button\r\n ?disabled=\"${!this.canMoveNextPeriod}\"\r\n @click=\"${this.moveNextPeriod}\"\r\n aria-label=\"${this._activeView === \"month\"\r\n ? this.nextMonthLabel\r\n : this._activeView === \"year\"\r\n ? this.nextYearLabel\r\n : this.nextMultiYearLabel}\"\r\n >\r\n ${M3eDirectionality.current === \"ltr\"\r\n ? html`<svg viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" />\r\n </svg>`\r\n : html`<svg viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\" />\r\n </svg>`}\r\n </m3e-icon-button>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #renderView(view: CalendarView, offset: -1 | 0 | 1): unknown {\r\n const activeDate =\r\n offset < 0 ? this.#getPreviousPeriod(view) : offset > 0 ? this.#getNextPeriod(view) : new Date(this._activeDate);\r\n\r\n switch (view) {\r\n case \"month\":\r\n return html`<m3e-month-view\r\n class=\"view ${classMap({\r\n before: offset < 0,\r\n after: offset > 0,\r\n active: view === this._activeView && offset === 0,\r\n })}\"\r\n ?inert=\"${offset !== 0}\"\r\n today=\"${this._today.toISOString()}\"\r\n date=\"${ifDefined(this.date?.toISOString())}\"\r\n active-date=\"${activeDate.toISOString()}\"\r\n min-date=\"${ifDefined(this.minDate?.toISOString())}\"\r\n max-date=\"${ifDefined(this.maxDate?.toISOString())}\"\r\n range-start=\"${ifDefined(this.rangeStart?.toISOString())}\"\r\n range-end=\"${ifDefined(this.rangeEnd?.toISOString())}\"\r\n @active-change=\"${offset === 0 ? this.#handleActiveChange : undefined}\"\r\n @change=\"${offset === 0 ? this.#handleDateChange : undefined}\"\r\n >\r\n </m3e-month-view>`;\r\n\r\n case \"year\":\r\n return html`<m3e-year-view\r\n class=\"view ${classMap({\r\n before: offset < 0,\r\n after: offset > 0,\r\n active: view === this._activeView && offset === 0,\r\n })}\"\r\n ?inert=\"${offset !== 0}\"\r\n today=\"${this._today.toISOString()}\"\r\n date=\"${ifDefined(this.date?.toISOString())}\"\r\n active-date=\"${activeDate.toISOString()}\"\r\n min-date=\"${ifDefined(this.minDate?.toISOString())}\"\r\n max-date=\"${ifDefined(this.maxDate?.toISOString())}\"\r\n @active-change=\"${offset === 0 ? this.#handleActiveChange : undefined}\"\r\n @change=\"${offset === 0 ? this.#handleMonthChange : undefined}\"\r\n ></m3e-year-view>`;\r\n\r\n case \"multi-year\":\r\n return html`<m3e-multi-year-view\r\n class=\"view ${classMap({\r\n before: offset < 0,\r\n after: offset > 0,\r\n active: view === this._activeView && offset === 0,\r\n })}\"\r\n ?inert=\"${offset !== 0}\"\r\n today=\"${this._today.toISOString()}\"\r\n date=\"${ifDefined(this.date?.toISOString())}\"\r\n active-date=\"${activeDate.toISOString()}\"\r\n min-date=\"${ifDefined(this.minDate?.toISOString())}\"\r\n max-date=\"${ifDefined(this.maxDate?.toISOString())}\"\r\n @active-change=\"${offset === 0 ? this.#handleActiveChange : undefined}\"\r\n @change=\"${offset === 0 ? this.#handleYearChange : undefined}\"\r\n >\r\n </m3e-multi-year-view>`;\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleDateChange(e: Event): void {\r\n const monthView = e.currentTarget as M3eMonthViewElement;\r\n this._activeDate = new Date(monthView.activeDate);\r\n this.rangeStart = monthView.rangeStart;\r\n this.rangeEnd = monthView.rangeEnd;\r\n this.date = new Date(this._activeDate);\r\n this.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n }\r\n\r\n /** @private */\r\n async #handleMonthChange(e: Event): Promise<void> {\r\n this._activeDate = new Date((e.currentTarget as CalendarViewElementBase).activeDate);\r\n this._activeView = \"month\";\r\n this.focusActiveCell();\r\n }\r\n\r\n /** @private */\r\n #handleYearChange(e: Event): void {\r\n this._activeDate = new Date((e.currentTarget as CalendarViewElementBase).activeDate);\r\n this._activeView = \"year\";\r\n this.focusActiveCell();\r\n }\r\n\r\n /** @private */\r\n async #handleActiveChange(e: Event): Promise<void> {\r\n if (this._view instanceof M3eMonthViewElement) {\r\n this._view._suppressFocusHighlight = false;\r\n }\r\n\r\n this._activeDate = new Date((e.currentTarget as CalendarViewElementBase).activeDate);\r\n await this.focusActiveCell();\r\n\r\n if (this._view instanceof M3eMonthViewElement) {\r\n this._view._suppressFocusHighlight = false;\r\n }\r\n }\r\n\r\n /** @private */\r\n #getPreviousPeriod(view: CalendarView): Date {\r\n const activeDate = new Date(this._activeDate);\r\n switch (view) {\r\n case \"month\":\r\n activeDate.setMonth(this._activeDate.getMonth() - 1);\r\n while (activeDate.getMonth() === this._activeDate.getMonth()) {\r\n activeDate.setDate(activeDate.getDate() - 1);\r\n }\r\n\r\n break;\r\n\r\n case \"year\":\r\n activeDate.setFullYear(this._activeDate.getFullYear() - 1);\r\n break;\r\n\r\n case \"multi-year\": {\r\n activeDate.setDate(1);\r\n activeDate.setFullYear(minYearOfPage(this._activeDate, this.minDate, this.maxDate) - 1);\r\n }\r\n }\r\n return activeDate;\r\n }\r\n\r\n /** @private */\r\n #getNextPeriod(view: CalendarView): Date {\r\n const activeDate = new Date(this._activeDate);\r\n switch (view) {\r\n case \"month\":\r\n activeDate.setMonth(this._activeDate.getMonth() + 1);\r\n while (activeDate.getMonth() === this._activeDate.getMonth()) {\r\n activeDate.setDate(activeDate.getDate() + 1);\r\n }\r\n break;\r\n\r\n case \"year\":\r\n activeDate.setFullYear(this._activeDate.getFullYear() + 1);\r\n break;\r\n\r\n case \"multi-year\":\r\n activeDate.setDate(1);\r\n activeDate.setFullYear(maxYearOfPage(this._activeDate, this.minDate, this.maxDate) + 1);\r\n break;\r\n }\r\n return activeDate;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-calendar\": M3eCalendarElement;\r\n }\r\n}\r\n"],"names":["createDateWithOverflow","year","month","day","date","Date","setFullYear","setHours","getStartingYear","minDate","maxDate","getFullYear","YEARS_PER_PAGE","euclideanModulo","a","b","addCalendarDays","days","getMonth","getDate","addCalendarMonths","months","newDate","addCalendarYears","years","getNumDaysInMonth","compareDate","first","second","sameDate","getActiveOffset","activeDate","minYearOfPage","maxYearOfPage","clampDate","YEARS_PER_ROW","MONTHS_PER_ROW","CalendarViewElementBase","LitElement","constructor","today","focusActiveCell","isUpdatePending","updateComplete","_activeItem","focusWhenReady","_changeActiveDate","style","setProperty","blur","removeProperty","dispatchEvent","Event","bubbles","styles","css","DesignToken","color","onSurface","shape","corner","full","onPrimary","primary","__decorate","query","prototype","property","converter","dateConverter","attribute","M3eMonthViewElement","_suppressFocusHighlight","rangeStart","rangeEnd","blackoutDates","specialDates","render","setDate","getDay","weekdays","Array","narrowFormat","Intl","DateTimeFormat","navigator","language","weekday","longFormat","i","push","id","narrow","format","long","firstDate","lastDate","numDays","weeks","dayOfWeek","length","filter","x","html","map","row","nothing","y","__classPrivateFieldGet","_M3eMonthViewElement_instances","_M3eMonthViewElement_renderItem","call","value","special","selected","active","current","disabled","range","rangeStartRange","classMap","toISOString","ifDefined","undefined","_M3eMonthViewElement_handleItemClick","_M3eMonthViewElement_handleItemMouseEnter","_M3eMonthViewElement_handleItemFocus","_M3eMonthViewElement_clearRangeHighlight","_M3eMonthViewElement_handleItemKeyDown","e","item","currentTarget","ariaDisabled","dataset","key","preventDefault","click","M3eDirectionality","altKey","parentElement","classList","add","cell","closest","querySelectorAll","shadowRoot","forEach","remove","typescale","standard","title","small","fontSize","fontWeight","lineHeight","tracking","body","medium","onTertiaryContainer","tertiaryContainer","primaryContainer","onPrimaryContainer","customElement","M3eMultiYearViewElement","minYear","yearFormat","_M3eMultiYearViewElement_instances","_M3eMultiYearViewElement_handleItemClick","_M3eMultiYearViewElement_handleItemKeyDown","Number","M3eYearViewElement","shortFormat","_M3eYearViewElement_instances","_M3eYearViewElement_handleItemClick","_M3eYearViewElement_handleItemKeyDown","M3eCalendarElement","_M3eCalendarElement_transitionComplete","set","_today","_activeView","_activeDate","startView","startAt","previousMonthLabel","previousYearLabel","previousMultiYearLabel","nextMonthLabel","nextYearLabel","nextMultiYearLabel","periodLabel","formatRange","canMovePreviousPeriod","canMoveNextPeriod","_view","updateTodayDate","movePreviousPeriod","prefersReducedMotion","_M3eCalendarElement_instances","_M3eCalendarElement_getPreviousPeriod","views","__classPrivateFieldSet","Promise","resolve","addEventListener","setTimeout","once","_body","overflow","moveNextPeriod","_M3eCalendarElement_getNextPeriod","togglePeriod","willUpdate","changedProperties","has","updated","_changedProperties","_M3eCalendarElement_renderHeader","_M3eCalendarElement_renderView","rotate","view","offset","before","after","_M3eCalendarElement_handleActiveChange","_M3eCalendarElement_handleDateChange","_M3eCalendarElement_handleMonthChange","_M3eCalendarElement_handleYearChange","monthView","setMonth","onSurfaceVariant","motion","spring","fastEffects","unsafeCSS","duration","long2","easing","state"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"calendar.js","sources":["../../src/calendar/utils.ts","../../src/calendar/CalendarViewElementBase.ts","../../src/calendar/MonthViewElement.ts","../../src/calendar/MultiYearViewElement.ts","../../src/calendar/YearViewElement.ts","../../src/calendar/CalendarElement.ts"],"sourcesContent":["/** @private */\r\nfunction createDateWithOverflow(year: number, month: number, day: number): Date {\r\n const date = new Date();\r\n date.setFullYear(year, month, day);\r\n date.setHours(0, 0, 0, 0);\r\n return date;\r\n}\r\n\r\n/** @private */\r\nfunction getStartingYear(minDate: Date | null, maxDate: Date | null): number {\r\n if (maxDate) {\r\n return maxDate.getFullYear() - YEARS_PER_PAGE + 1;\r\n } else if (minDate) {\r\n return minDate.getFullYear();\r\n }\r\n return 0;\r\n}\r\n\r\n/** @private */\r\nfunction euclideanModulo(a: number, b: number): number {\r\n return ((a % b) + b) % b;\r\n}\r\n\r\n/** @internal */\r\nexport function addCalendarDays(date: Date, days: number): Date {\r\n return createDateWithOverflow(date.getFullYear(), date.getMonth(), date.getDate() + days);\r\n}\r\n\r\n/** @internal */\r\nexport function addCalendarMonths(date: Date, months: number): Date {\r\n let newDate = createDateWithOverflow(date.getFullYear(), date.getMonth() + months, date.getDate());\r\n if (newDate.getMonth() != (((date.getMonth() + months) % 12) + 12) % 12) {\r\n newDate = createDateWithOverflow(newDate.getFullYear(), newDate.getMonth(), 0);\r\n }\r\n return newDate;\r\n}\r\n\r\n/** @internal */\r\nexport function addCalendarYears(date: Date, years: number): Date {\r\n return addCalendarMonths(date, years * 12);\r\n}\r\n\r\n/** @internal */\r\nexport function getNumDaysInMonth(date: Date): number {\r\n return createDateWithOverflow(date.getFullYear(), date.getMonth() + 1, 0).getDate();\r\n}\r\n\r\n/** @internal */\r\nexport function compareDate(first: Date, second: Date): number {\r\n return (\r\n first.getFullYear() - second.getFullYear() ||\r\n first.getMonth() - second.getMonth() ||\r\n first.getDate() - second.getDate()\r\n );\r\n}\r\n\r\n/** @internal */\r\nexport function sameDate(first: Date | null, second: Date | null): boolean {\r\n return first && second ? compareDate(first, second) == 0 : first == second;\r\n}\r\n\r\n/** @internal */\r\nexport function getActiveOffset(activeDate: Date, minDate: Date | null, maxDate: Date | null): number {\r\n return euclideanModulo(activeDate.getFullYear() - getStartingYear(minDate, maxDate), YEARS_PER_PAGE);\r\n}\r\n\r\n/** @internal */\r\nexport function minYearOfPage(activeDate: Date, minDate: Date | null, maxDate: Date | null): number {\r\n return activeDate.getFullYear() - getActiveOffset(activeDate, minDate, maxDate);\r\n}\r\n\r\n/** @internal */\r\nexport function maxYearOfPage(activeDate: Date, minDate: Date | null, maxDate: Date | null): number {\r\n return minYearOfPage(activeDate, minDate, maxDate) + YEARS_PER_PAGE - 1;\r\n}\r\n\r\n/** @internal */\r\nexport function clampDate(date: Date, minDate: Date | null, maxDate: Date | null): Date {\r\n if (minDate && compareDate(date, minDate) < 0) return minDate;\r\n if (maxDate && compareDate(date, maxDate) > 0) return maxDate;\r\n return date;\r\n}\r\n\r\n/** @internal */ export const YEARS_PER_PAGE = 15;\r\n/** @internal */ export const YEARS_PER_ROW = 3;\r\n/** @internal */ export const MONTHS_PER_ROW = 4;\r\n","import { css, CSSResultGroup, LitElement } from \"lit\";\r\nimport { property, query } from \"lit/decorators.js\";\r\n\r\nimport { dateConverter, DesignToken, focusWhenReady } from \"@m3e/web/core\";\r\n\r\nimport { clampDate, sameDate } from \"./utils\";\r\n\r\n/**\r\n * A base implementation for a view in a calendar. This class must be inherited.\r\n * @internal\r\n */\r\nexport abstract class CalendarViewElementBase extends LitElement {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: inline-block;\r\n user-select: none;\r\n vertical-align: top;\r\n }\r\n .visually-hidden {\r\n position: absolute;\r\n appearance: none;\r\n visibility: hidden;\r\n border: none;\r\n outline: none;\r\n overflow: hidden;\r\n left: 0;\r\n height: 1px;\r\n width: 1px;\r\n margin: -1px;\r\n padding: 0;\r\n white-space: nowrap;\r\n }\r\n table {\r\n border-collapse: collapse;\r\n border-spacing: 0;\r\n width: calc(3rem * 7);\r\n }\r\n td,\r\n th {\r\n font: inherit;\r\n text-align: center;\r\n padding: unset;\r\n }\r\n td {\r\n box-sizing: border-box;\r\n height: 3rem;\r\n padding: 0.25rem;\r\n position: relative;\r\n color: var(--m3e-calendar-item-color, ${DesignToken.color.onSurface});\r\n }\r\n .item,\r\n .item > span {\r\n position: relative;\r\n }\r\n .item {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: inherit;\r\n outline: none;\r\n width: 100%;\r\n height: 100%;\r\n border-radius: ${DesignToken.shape.corner.full};\r\n }\r\n .item:not([aria-disabled]) {\r\n cursor: pointer;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n }\r\n .touch {\r\n position: absolute;\r\n height: 3rem;\r\n width: 3rem;\r\n margin: auto;\r\n }\r\n td:not(:has(.item[aria-disabled])).selected {\r\n color: var(--m3e-calendar-item-selected-color, ${DesignToken.color.onPrimary});\r\n --m3e-ripple-color: var(--m3e-calendar-item-selected-ripple-color, ${DesignToken.color.onPrimary});\r\n --m3e-state-layer-hover-color: var(--m3e-calendar-item-selected-hover-color, ${DesignToken.color.onPrimary});\r\n --m3e-state-layer-focus-color: var(--m3e-calendar-item-selected-focus-color, ${DesignToken.color.onPrimary});\r\n }\r\n td:not(:has(.item[aria-disabled])).selected .state-layer {\r\n background-color: var(--m3e-calendar-item-selected-container-color, ${DesignToken.color.primary});\r\n }\r\n td.current:not(.selected):not(.special):not(.range-start):not(.range-end) {\r\n color: var(--m3e-calendar-item-current-outline-color, ${DesignToken.color.primary});\r\n }\r\n td.current:not(.selected):not(.special):not(.range-start):not(.range-end) .state-layer {\r\n outline-style: solid;\r\n outline-offset: -1px;\r\n outline-width: var(--m3e-calendar-item-current-outline-thickness, 1px);\r\n outline-color: var(--m3e-calendar-item-current-outline-color, ${DesignToken.color.primary});\r\n }\r\n td:has(.item[aria-disabled]) {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-calendar-item-disabled-color, ${DesignToken.color.onSurface})\r\n var(--m3e-calendar-item-disabled-color-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n @media (forced-colors: active) {\r\n td:not(:has(.item[aria-disabled])).selected {\r\n forced-color-adjust: none;\r\n color: ButtonFace;\r\n }\r\n td:not(:has(.item[aria-disabled])).selected .state-layer {\r\n background-color: ButtonText;\r\n }\r\n td:has(.item[aria-disabled]) {\r\n color: GrayText;\r\n }\r\n td.current:not(.selected):not(.special):not(.range-start):not(.range-end) {\r\n color: ButtonText;\r\n }\r\n td.current:not(.selected):not(.special):not(.range-start):not(.range-end) .state-layer {\r\n border-color: ButtonText;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ @query(\".active > .item\") private readonly _activeItem?: HTMLElement;\r\n\r\n /** Today's date. */\r\n @property({ converter: dateConverter }) today: Date = new Date();\r\n\r\n /** The selected date. */\r\n @property({ converter: dateConverter }) date: Date | null = null;\r\n\r\n /** The active date. */\r\n @property({ attribute: \"active-date\", converter: dateConverter }) activeDate: Date = new Date();\r\n\r\n /** The minimum date that can be selected. */\r\n @property({ attribute: \"min-date\", converter: dateConverter }) minDate: Date | null = null;\r\n\r\n /** The maximum date that can be selected. */\r\n @property({ attribute: \"max-date\", converter: dateConverter }) maxDate: Date | null = null;\r\n\r\n /**\r\n * Asynchronously focuses the active date.\r\n * @returns {Promise<void>} A promise that resolves after the active date has been focused.\r\n */\r\n async focusActiveCell(): Promise<void> {\r\n if (this.isUpdatePending) {\r\n await this.updateComplete;\r\n }\r\n\r\n if (this._activeItem) {\r\n await focusWhenReady(this._activeItem);\r\n }\r\n }\r\n\r\n /** @internal */\r\n protected _changeActiveDate(activeDate: Date): void {\r\n activeDate = clampDate(activeDate, this.minDate, this.maxDate);\r\n if (!sameDate(activeDate, this.activeDate)) {\r\n this._activeItem?.style.setProperty(\"--m3e-state-layer-duration\", \"0ms\");\r\n this._activeItem?.blur();\r\n this._activeItem?.style.removeProperty(\"--m3e-state-layer-duration\");\r\n\r\n this.activeDate = activeDate;\r\n this.dispatchEvent(new Event(\"active-change\", { bubbles: false }));\r\n }\r\n }\r\n}\r\n","/**\r\n * Adapted from Angular Material Datepicker\r\n * Source: https://github.com/angular/components/blob/main/src/material/datepicker/month-view.ts\r\n *\r\n * @license MIT\r\n * Copyright (c) 2025 Google LLC\r\n * See LICENSE file in the project root for full license text.\r\n */\r\n\r\nimport { css, CSSResultGroup, html, nothing } from \"lit\";\r\nimport { property } from \"lit/decorators.js\";\r\nimport { classMap } from \"lit/directives/class-map.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport { customElement, dateConverter, DesignToken } from \"@m3e/web/core\";\r\nimport { M3eDirectionality } from \"@m3e/web/core/bidi\";\r\n\r\nimport { CalendarViewElementBase } from \"./CalendarViewElementBase\";\r\nimport {\r\n addCalendarDays,\r\n addCalendarMonths,\r\n addCalendarYears,\r\n clampDate,\r\n compareDate,\r\n getNumDaysInMonth,\r\n sameDate,\r\n} from \"./utils\";\r\n\r\n/**\r\n * An internal component used to display a single month in a calendar.\r\n * @internal\r\n */\r\n@customElement(\"m3e-month-view\")\r\nexport class M3eMonthViewElement extends CalendarViewElementBase {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = [\r\n CalendarViewElementBase.styles,\r\n css`\r\n thead {\r\n font-size: var(--m3e-calendar-weekday-font-size, ${DesignToken.typescale.standard.title.small.fontSize});\r\n font-weight: var(--m3e-calendar-weekday-font-weight, ${DesignToken.typescale.standard.title.small.fontWeight});\r\n line-height: var(--m3e-calendar-weekday-line-height, ${DesignToken.typescale.standard.title.small.lineHeight});\r\n letter-spacing: var(--m3e-calendar-weekday-tracking, ${DesignToken.typescale.standard.title.small.tracking});\r\n color: var(--m3e-calendar-weekday-color, ${DesignToken.color.onSurface});\r\n }\r\n th {\r\n height: 1.5rem;\r\n padding-block-start: 1.875rem;\r\n padding-block-end: 1rem;\r\n }\r\n tbody {\r\n font-size: var(--m3e-calendar-date-font-size, ${DesignToken.typescale.standard.body.medium.fontSize});\r\n font-weight: var(--m3e-calendar-date-font-weight, ${DesignToken.typescale.standard.body.medium.fontWeight});\r\n line-height: var(--m3e-calendar-date-line-height, ${DesignToken.typescale.standard.body.medium.lineHeight});\r\n letter-spacing: var(--m3e-calendar-date-tracking, ${DesignToken.typescale.standard.body.medium.tracking});\r\n }\r\n td:not(:has(.item[aria-disabled])):not(.selected):not(.range-start):not(.range-end).special {\r\n color: var(--m3e-calendar-item-special-color, ${DesignToken.color.onTertiaryContainer});\r\n --m3e-ripple-color: var(--m3e-calendar-item-special-ripple-color, ${DesignToken.color.onTertiaryContainer});\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-calendar-item-special-hover-color,\r\n ${DesignToken.color.onTertiaryContainer}\r\n );\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-calendar-item-special-focus-color,\r\n ${DesignToken.color.onTertiaryContainer}\r\n );\r\n }\r\n td:not(:has(.item[aria-disabled])):not(.selected):not(.range-start):not(.range-end).special .state-layer {\r\n background-color: var(--m3e-calendar-item-special-container-color, ${DesignToken.color.tertiaryContainer});\r\n }\r\n td:not(:has(.item[aria-disabled])).range-start,\r\n td:not(:has(.item[aria-disabled])).range-end {\r\n color: var(--m3e-calendar-item-selected-color, ${DesignToken.color.onPrimary});\r\n --m3e-ripple-color: var(--m3e-calendar-item-selected-ripple-color, ${DesignToken.color.onPrimary});\r\n }\r\n td:not(:has(.item[aria-disabled])).range-start .state-layer,\r\n td:not(:has(.item[aria-disabled])).range-end .state-layer {\r\n background-color: var(--m3e-calendar-item-selected-container-color, ${DesignToken.color.primary});\r\n }\r\n td:not(:has(.item[aria-disabled])).range::before,\r\n td:not(:has(.item[aria-disabled])).range-start-range::before,\r\n td:not(:has(.item[aria-disabled])).range-end::before {\r\n content: \"\";\r\n position: absolute;\r\n left: 0;\r\n right: 0;\r\n top: 0.25rem;\r\n bottom: 0.25rem;\r\n background-color: var(--m3e-calendar-range-container-color, ${DesignToken.color.primaryContainer});\r\n }\r\n td:not(:has(.item[aria-disabled])):not(.selected).range {\r\n color: var(--m3e-calendar-range-color, ${DesignToken.color.onPrimaryContainer});\r\n }\r\n td:not(:has(.item[aria-disabled])).range-start::before {\r\n inset-inline-start: 50%;\r\n width: 50%;\r\n }\r\n td:not(:has(.item[aria-disabled])).range-end::before {\r\n inset-inline-end: 50%;\r\n width: 50%;\r\n }\r\n td:not(:has(.item[aria-disabled])).range-highlight-start .item::after,\r\n td:not(:has(.item[aria-disabled])).range-highlight .item::after,\r\n td:not(:has(.item[aria-disabled])).range-highlight-end .item::after {\r\n content: \"\";\r\n position: absolute;\r\n top: 0;\r\n left: calc(0px - 0.1875rem);\r\n right: calc(0px - 0.1875rem);\r\n bottom: 0;\r\n border-style: dashed;\r\n border-color: ${DesignToken.color.primary};\r\n border-width: 1px;\r\n }\r\n td:not(:has(.item[aria-disabled])).range-highlight-start .item::after {\r\n margin-inline-start: 50%;\r\n }\r\n td:not(:has(.item[aria-disabled])).range-highlight-end .item::after {\r\n margin-inline-end: 0.1875rem;\r\n }\r\n td:not(:has(.item[aria-disabled])).range-highlight-start .item::after,\r\n td:not(:has(.item[aria-disabled])).range-highlight .item::after {\r\n border-inline-style: none;\r\n }\r\n td:not(:has(.item[aria-disabled])).range-highlight-end .item::after {\r\n border-start-end-radius: ${DesignToken.shape.corner.full};\r\n border-end-end-radius: ${DesignToken.shape.corner.full};\r\n border-inline-start-style: none;\r\n }\r\n @media (forced-colors: active) {\r\n td:not(:has(.item[aria-disabled])).range-start,\r\n td:not(:has(.item[aria-disabled])).range-end {\r\n forced-color-adjust: none;\r\n color: HighlightText;\r\n }\r\n td:not(:has(.item[aria-disabled])).range-start .state-layer,\r\n td:not(:has(.item[aria-disabled])).range-end .state-layer {\r\n background-color: Highlight;\r\n }\r\n td:not(:has(.item[aria-disabled])).range::before,\r\n td:not(:has(.item[aria-disabled])).range-start-range::before,\r\n td:not(:has(.item[aria-disabled])).range-end::before {\r\n background-color: Highlight;\r\n }\r\n td:not(:has(.item[aria-disabled])):not(.selected).range {\r\n forced-color-adjust: none;\r\n color: HighlightText;\r\n }\r\n td:not(:has(.item[aria-disabled])).range-highlight-start .item::after,\r\n td:not(:has(.item[aria-disabled])).range-highlight .item::after,\r\n td:not(:has(.item[aria-disabled])).range-highlight-end .item::after {\r\n border-color: GrayText;\r\n }\r\n }\r\n `,\r\n ];\r\n\r\n /** @internal */ _suppressFocusHighlight = true;\r\n\r\n /** Start of a date range. */\r\n @property({ attribute: \"range-start\", converter: dateConverter }) rangeStart: Date | null = null;\r\n\r\n /** End of a date range. */\r\n @property({ attribute: \"range-end\", converter: dateConverter }) rangeEnd: Date | null = null;\r\n\r\n /** A function used to determine whether a date cannot be selected. */\r\n @property({ attribute: false }) blackoutDates: ((date: Date) => boolean) | null = null;\r\n\r\n /** A function used to determine whether a date is special. */\r\n @property({ attribute: false }) specialDates: ((date: Date) => boolean) | null = null;\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n const date = new Date(this.today);\r\n date.setDate(1);\r\n\r\n while (date.getDay() != 0) {\r\n date.setDate(date.getDate() + 1);\r\n }\r\n\r\n const weekdays = new Array<{ long: string; narrow: string; id: number }>();\r\n const narrowFormat = new Intl.DateTimeFormat(navigator.language, { weekday: \"narrow\" });\r\n const longFormat = new Intl.DateTimeFormat(navigator.language, { weekday: \"long\" });\r\n\r\n for (let i = 0; i < 7; i++) {\r\n weekdays.push({ id: i, narrow: narrowFormat.format(date), long: longFormat.format(date) });\r\n date.setDate(date.getDate() + 1);\r\n }\r\n\r\n const year = this.activeDate.getFullYear();\r\n const month = this.activeDate.getMonth();\r\n const firstDate = new Date(year, month, 1);\r\n const lastDate = new Date(year, month + 1, 0);\r\n const numDays = lastDate.getDate();\r\n\r\n let weeks: number[][] = [];\r\n let dayOfWeek = firstDate.getDay();\r\n\r\n for (let i = 1; i <= numDays; i++) {\r\n if (dayOfWeek === 0 || weeks.length === 0) {\r\n weeks.push([]);\r\n }\r\n weeks[weeks.length - 1].push(i);\r\n dayOfWeek = (dayOfWeek + 1) % 7;\r\n }\r\n\r\n weeks = weeks.filter((x) => !!x.length);\r\n\r\n return html`<table role=\"grid\">\r\n <thead>\r\n <tr>\r\n ${weekdays.map(\r\n (x) =>\r\n html`<th scope=\"col\">\r\n <span class=\"visually-hidden\">${x.long}</span>\r\n <div id=\"weekday-${x.id}-month-${month}\" aria-hidden=\"true\">${x.narrow}</div>\r\n <m3e-tooltip for=\"weekday-${x.id}-month-${month}\">${x.long}</m3e-tooltip>\r\n </th>`,\r\n )}\r\n </tr>\r\n </thead>\r\n <tbody>\r\n ${weeks.map(\r\n (row, i) =>\r\n html`<tr role=\"row\">\r\n ${i === 0 && row.length < 7 ? html`<td colspan=\"${7 - row.length}\"></td>` : nothing}\r\n ${row.map((y) => this.#renderItem(new Date(year, month, y)))}\r\n ${i > 0 && row.length < 7 ? html`<td colspan=\"${7 - row.length}\"></td>` : nothing}\r\n </tr>`,\r\n )}\r\n </tbody>\r\n </table>`;\r\n }\r\n\r\n /** @private */\r\n #renderItem(value: Date): unknown {\r\n const long = new Intl.DateTimeFormat(navigator.language, {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n }).format(value);\r\n\r\n const special = this.specialDates?.(value) ?? false;\r\n const selected = sameDate(this.date, value);\r\n const active = sameDate(this.activeDate, value);\r\n const current = sameDate(this.today, value);\r\n const disabled =\r\n (this.minDate && compareDate(value, this.minDate) < 0) ||\r\n (this.maxDate && compareDate(value, this.maxDate) > 0) ||\r\n this.blackoutDates?.(value) === true;\r\n\r\n const id = `date-${value.getMonth()}-${value.getDate()}-${value.getFullYear()}`;\r\n\r\n let range = false,\r\n rangeStart = false,\r\n rangeEnd = false,\r\n rangeStartRange = false;\r\n\r\n if (this.rangeStart) {\r\n if (!this.rangeEnd) {\r\n rangeStart = sameDate(value, this.rangeStart);\r\n } else {\r\n range = compareDate(value, this.rangeStart) > 0 && compareDate(value, this.rangeEnd) < 0;\r\n if (!range) {\r\n rangeStart = compareDate(value, this.rangeStart) >= 0 && compareDate(value, this.rangeEnd) < 0;\r\n if (!rangeStart) {\r\n rangeEnd = compareDate(value, this.rangeStart) > 0 && compareDate(value, this.rangeEnd) <= 0;\r\n } else {\r\n rangeStartRange = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return html`<td\r\n role=\"gridcell\"\r\n class=\"${classMap({\r\n current,\r\n selected,\r\n active,\r\n special,\r\n range,\r\n \"range-start\": rangeStart,\r\n \"range-start-range\": rangeStartRange,\r\n \"range-end\": rangeEnd,\r\n })}\"\r\n >\r\n <div\r\n id=\"${id}\"\r\n role=\"button\"\r\n class=\"item\"\r\n data-value=\"${value.toISOString()}\"\r\n tabindex=\"${active ? \"0\" : \"-1\"}\"\r\n aria-disabled=\"${ifDefined(disabled || undefined)}\"\r\n aria-current=\"${ifDefined(current ? \"date\" : undefined)}\"\r\n aria-pressed=\"${selected || rangeStart || rangeEnd}\"\r\n @click=\"${this.#handleItemClick}\"\r\n @mouseenter=\"${this.#handleItemMouseEnter}\"\r\n @focus=\"${this.#handleItemFocus}\"\r\n @mouseleave=\"${this.#clearRangeHighlight}\"\r\n @blur=\"${this.#clearRangeHighlight}\"\r\n @keydown=\"${this.#handleItemKeyDown}\"\r\n >\r\n <m3e-focus-ring class=\"focus-ring\" for=\"${id}\"></m3e-focus-ring>\r\n <m3e-state-layer class=\"state-layer\" for=\"${id}\" ?disable-hover=\"${disabled}\"></m3e-state-layer>\r\n <m3e-ripple class=\"ripple\" centered for=\"${id}\" ?disabled=\"${disabled}\"></m3e-ripple>\r\n <div class=\"touch\"></div>\r\n <span class=\"visually-hidden\">${long}</span>\r\n <span aria-hidden=\"true\">${value.getDate()}</span>\r\n </div>\r\n </td>`;\r\n }\r\n\r\n /** @private */\r\n #handleItemClick(e: Event): void {\r\n const item = e.currentTarget as HTMLElement;\r\n if (item.ariaDisabled === \"true\" || !item.dataset[\"value\"]) return;\r\n\r\n this.activeDate = new Date(item.dataset[\"value\"]);\r\n this.activeDate = clampDate(this.activeDate, this.minDate, this.maxDate);\r\n\r\n if (this.rangeEnd) {\r\n this.rangeStart = this.activeDate;\r\n this.rangeEnd = null;\r\n this.#clearRangeHighlight();\r\n } else if (this.rangeStart) {\r\n if (compareDate(this.activeDate, this.rangeStart) < 0) {\r\n this.rangeStart = this.activeDate;\r\n this.rangeEnd = null;\r\n } else {\r\n this.rangeEnd = this.activeDate;\r\n }\r\n this.#clearRangeHighlight();\r\n }\r\n\r\n this.dispatchEvent(new Event(\"change\", { bubbles: false }));\r\n }\r\n\r\n /** @private */\r\n #handleItemKeyDown(e: KeyboardEvent): void {\r\n let activeDate = this.activeDate;\r\n\r\n switch (e.key) {\r\n case \" \":\r\n case \"Enter\":\r\n e.preventDefault();\r\n (e.currentTarget as HTMLElement).click();\r\n return;\r\n\r\n case \"ArrowLeft\":\r\n case \"Left\":\r\n activeDate = addCalendarDays(activeDate, M3eDirectionality.current === \"rtl\" ? 1 : -1);\r\n break;\r\n\r\n case \"ArrowRight\":\r\n case \"Right\":\r\n activeDate = addCalendarDays(activeDate, M3eDirectionality.current === \"rtl\" ? -1 : 1);\r\n break;\r\n\r\n case \"ArrowUp\":\r\n case \"Up\":\r\n activeDate = addCalendarDays(activeDate, -7);\r\n break;\r\n\r\n case \"ArrowDown\":\r\n case \"Down\":\r\n activeDate = addCalendarDays(activeDate, 7);\r\n break;\r\n\r\n case \"Home\":\r\n activeDate = addCalendarDays(activeDate, 1 - activeDate.getDate());\r\n break;\r\n\r\n case \"End\":\r\n activeDate = addCalendarDays(activeDate, getNumDaysInMonth(activeDate) - activeDate.getDate());\r\n break;\r\n\r\n case \"PageUp\":\r\n activeDate = e.altKey ? addCalendarYears(activeDate, -1) : addCalendarMonths(activeDate, -1);\r\n break;\r\n\r\n case \"PageDown\":\r\n activeDate = e.altKey ? addCalendarYears(activeDate, 1) : addCalendarMonths(activeDate, 1);\r\n break;\r\n\r\n default:\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n this._changeActiveDate(activeDate);\r\n }\r\n\r\n /** @private */\r\n #handleItemMouseEnter(e: Event): void {\r\n this.#setRangeHighlight(e.currentTarget as HTMLElement);\r\n }\r\n\r\n /** @private */\r\n #handleItemFocus(e: Event): void {\r\n if (!this._suppressFocusHighlight) {\r\n this.#setRangeHighlight(e.currentTarget as HTMLElement);\r\n }\r\n }\r\n\r\n /** @private */\r\n #setRangeHighlight(item: HTMLElement): void {\r\n this.#clearRangeHighlight();\r\n if (this.rangeStart && !this.rangeEnd && item.dataset[\"value\"]) {\r\n if (compareDate(new Date(item.dataset[\"value\"]), this.rangeStart) > 0) {\r\n item.parentElement!.classList.add(\"range-highlight-end\");\r\n }\r\n for (const cell of item.closest(\"table\")?.querySelectorAll<HTMLElement>(\".item\") ?? []) {\r\n if (cell === item) break;\r\n\r\n const value = new Date(cell.dataset[\"value\"]!);\r\n if (compareDate(value, this.rangeStart) > 0) {\r\n cell.parentElement!.classList.add(\"range-highlight\");\r\n } else if (compareDate(value, this.rangeStart) >= 0) {\r\n cell.parentElement!.classList.add(\"range-highlight-start\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n #clearRangeHighlight(): void {\r\n if (this.rangeStart) {\r\n this.shadowRoot\r\n ?.querySelectorAll(\".range-highlight,.range-highlight-end,.range-highlight-start\")\r\n .forEach((x) => x.classList.remove(\"range-highlight\", \"range-highlight-end\", \"range-highlight-start\"));\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-month-view\": M3eMonthViewElement;\r\n }\r\n}\r\n","/**\r\n * Adapted from Angular Material Datepicker\r\n * Source: https://github.com/angular/components/blob/main/src/material/datepicker/multi-year-view.ts\r\n *\r\n * @license MIT\r\n * Copyright (c) 2025 Google LLC\r\n * See LICENSE file in the project root for full license text.\r\n */\r\n\r\nimport { css, CSSResultGroup, html } from \"lit\";\r\nimport { classMap } from \"lit/directives/class-map.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport { customElement, DesignToken } from \"@m3e/web/core\";\r\nimport { M3eDirectionality } from \"@m3e/web/core/bidi\";\r\n\r\nimport { CalendarViewElementBase } from \"./CalendarViewElementBase\";\r\nimport { addCalendarYears, clampDate, getActiveOffset, minYearOfPage, YEARS_PER_PAGE, YEARS_PER_ROW } from \"./utils\";\r\n\r\n/**\r\n * An internal component used to display a year selector in a calendar.\r\n * @internal\r\n */\r\n@customElement(\"m3e-multi-year-view\")\r\nexport class M3eMultiYearViewElement extends CalendarViewElementBase {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = [\r\n CalendarViewElementBase.styles,\r\n css`\r\n .item {\r\n height: 2.25rem;\r\n }\r\n .touch {\r\n width: 100%;\r\n }\r\n th {\r\n height: 1rem;\r\n }\r\n td {\r\n padding-inline: 1rem;\r\n }\r\n tbody {\r\n font-size: var(--m3e-calendar-item-font-size, ${DesignToken.typescale.standard.body.medium.fontSize});\r\n font-weight: var(--m3e-calendar-item-font-weight, ${DesignToken.typescale.standard.body.medium.fontWeight});\r\n line-height: var(--m3e-calendar-item-line-height, ${DesignToken.typescale.standard.body.medium.lineHeight});\r\n letter-spacing: var(--m3e-calendar-item-tracking, ${DesignToken.typescale.standard.body.medium.tracking});\r\n }\r\n `,\r\n ];\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n const years = new Array<number[]>();\r\n const minYear = minYearOfPage(this.activeDate, this.minDate, this.maxDate);\r\n for (let i = 0, row: number[] = []; i < YEARS_PER_PAGE; i++) {\r\n row.push(minYear + i);\r\n if (row.length === YEARS_PER_ROW) {\r\n years.push(row);\r\n row = new Array<number>();\r\n }\r\n }\r\n\r\n return html`<table role=\"grid\">\r\n <thead aria-hidden=\"true\">\r\n <tr>\r\n <th colspan=\"${YEARS_PER_ROW}\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n ${years.map(\r\n (row) =>\r\n html`<tr role=\"row\">\r\n ${row.map((year) => this.#renderItem(year))}\r\n </tr>`,\r\n )}\r\n </tbody>\r\n </table>`;\r\n }\r\n\r\n /** @private */\r\n #renderItem(year: number): unknown {\r\n const yearFormat = new Intl.DateTimeFormat(navigator.language, { year: \"numeric\" });\r\n const active = this.activeDate.getFullYear() === year;\r\n const selected = this.date?.getFullYear() === year;\r\n const current = this.today.getFullYear() === year;\r\n const disabled =\r\n (this.minDate && year < this.minDate.getFullYear()) || (this.maxDate && year > this.maxDate.getFullYear());\r\n\r\n const id = `year-${year}`;\r\n\r\n return html`<td role=\"gridcell\" class=\"${classMap({ current, selected, active })}\">\r\n <div\r\n id=\"${id}\"\r\n class=\"item\"\r\n role=\"button\"\r\n tabindex=\"${active ? \"0\" : \"-1\"}\"\r\n data-value=\"${year}\"\r\n aria-disabled=\"${ifDefined(disabled || undefined)}\"\r\n aria-current=\"${ifDefined(current ? \"date\" : undefined)}\"\r\n aria-pressed=\"${selected}\"\r\n @click=\"${this.#handleItemClick}\"\r\n @keydown=\"${this.#handleItemKeyDown}\"\r\n >\r\n <m3e-focus-ring class=\"focus-ring\" for=\"${id}\"></m3e-focus-ring>\r\n <m3e-state-layer class=\"state-layer\" for=\"${id}\" ?disable-hover=\"${disabled}\"></m3e-state-layer>\r\n <m3e-ripple class=\"ripple\" for=\"${id}\" centered ?disabled=\"${disabled}\"></m3e-ripple>\r\n <div class=\"touch\"></div>\r\n <span>${yearFormat.format(new Date(year, 0, 1))}</span>\r\n </div>\r\n </td>`;\r\n }\r\n\r\n /** @private */\r\n #handleItemClick(e: Event): void {\r\n const item = e.currentTarget as HTMLElement;\r\n if (item.ariaDisabled === \"true\" || !item.dataset[\"value\"]) return;\r\n\r\n this.activeDate = new Date(this.activeDate);\r\n this.activeDate.setFullYear(Number(item.dataset[\"value\"]));\r\n this.activeDate = clampDate(this.activeDate, this.minDate, this.maxDate);\r\n this.dispatchEvent(new Event(\"change\", { bubbles: false }));\r\n }\r\n\r\n /** @private */\r\n #handleItemKeyDown(e: KeyboardEvent): void {\r\n let activeDate = this.activeDate;\r\n switch (e.key) {\r\n case \" \":\r\n case \"Enter\":\r\n e.preventDefault();\r\n (e.currentTarget as HTMLElement).click();\r\n return;\r\n\r\n case \"ArrowLeft\":\r\n case \"Left\":\r\n activeDate = addCalendarYears(activeDate, M3eDirectionality.current === \"rtl\" ? 1 : -1);\r\n break;\r\n\r\n case \"ArrowRight\":\r\n case \"Right\":\r\n activeDate = addCalendarYears(activeDate, M3eDirectionality.current === \"rtl\" ? -1 : 1);\r\n break;\r\n\r\n case \"ArrowUp\":\r\n case \"Up\":\r\n activeDate = addCalendarYears(activeDate, -YEARS_PER_ROW);\r\n break;\r\n\r\n case \"ArrowDown\":\r\n case \"Down\":\r\n activeDate = addCalendarYears(activeDate, YEARS_PER_ROW);\r\n break;\r\n\r\n case \"Home\":\r\n activeDate = addCalendarYears(activeDate, -getActiveOffset(activeDate, this.minDate, this.maxDate));\r\n break;\r\n\r\n case \"End\":\r\n activeDate = addCalendarYears(\r\n activeDate,\r\n YEARS_PER_PAGE - getActiveOffset(activeDate, this.minDate, this.maxDate) - 1,\r\n );\r\n break;\r\n\r\n case \"PageUp\":\r\n activeDate = addCalendarYears(activeDate, e.altKey ? -YEARS_PER_PAGE * 10 : -YEARS_PER_PAGE);\r\n break;\r\n\r\n case \"PageDown\":\r\n activeDate = addCalendarYears(activeDate, e.altKey ? YEARS_PER_PAGE * 10 : YEARS_PER_PAGE);\r\n break;\r\n\r\n default:\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n this._changeActiveDate(activeDate);\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-multi-year-view\": M3eMultiYearViewElement;\r\n }\r\n}\r\n","/**\r\n * Adapted from Angular Material Datepicker\r\n * Source: https://github.com/angular/components/blob/main/src/material/datepicker/year-view.ts\r\n *\r\n * @license MIT\r\n * Copyright (c) 2025 Google LLC\r\n * See LICENSE file in the project root for full license text.\r\n */\r\n\r\nimport { css, CSSResultGroup, html } from \"lit\";\r\nimport { classMap } from \"lit/directives/class-map.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport { customElement, DesignToken } from \"@m3e/web/core\";\r\nimport { M3eDirectionality } from \"@m3e/web/core/bidi\";\r\n\r\nimport { CalendarViewElementBase } from \"./CalendarViewElementBase\";\r\nimport { addCalendarMonths, addCalendarYears, clampDate, MONTHS_PER_ROW } from \"./utils\";\r\n\r\n/**\r\n * An internal component used to display a single year in a calendar.\r\n * @internal\r\n */\r\n@customElement(\"m3e-year-view\")\r\nexport class M3eYearViewElement extends CalendarViewElementBase {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = [\r\n CalendarViewElementBase.styles,\r\n css`\r\n .item {\r\n height: 2.25rem;\r\n }\r\n .touch {\r\n width: 100%;\r\n }\r\n th {\r\n height: 1rem;\r\n }\r\n td {\r\n padding-inline: 0.375rem;\r\n }\r\n tbody {\r\n font-size: var(--m3e-calendar-item-font-size, ${DesignToken.typescale.standard.body.medium.fontSize});\r\n font-weight: var(--m3e-calendar-item-font-weight, ${DesignToken.typescale.standard.body.medium.fontWeight});\r\n line-height: var(--m3e-calendar-item-line-height, ${DesignToken.typescale.standard.body.medium.lineHeight});\r\n letter-spacing: var(--m3e-calendar-item-tracking, ${DesignToken.typescale.standard.body.medium.tracking});\r\n }\r\n `,\r\n ];\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n const months = new Array<Array<{ date: Date; long: string; narrow: string }>>();\r\n const shortFormat = new Intl.DateTimeFormat(navigator.language, { month: \"short\" });\r\n const longFormat = new Intl.DateTimeFormat(navigator.language, { month: \"long\" });\r\n const year = this.activeDate.getFullYear();\r\n\r\n for (let month = 0, row = new Array<{ date: Date; long: string; narrow: string }>(); month < 12; month++) {\r\n const date = new Date(year, month, 1);\r\n row.push({ narrow: shortFormat.format(date), long: longFormat.format(date), date: date });\r\n\r\n if (row.length == MONTHS_PER_ROW) {\r\n months.push(row);\r\n row = [];\r\n }\r\n }\r\n\r\n return html`<table role=\"grid\">\r\n <thead aria-hidden=\"true\">\r\n <tr>\r\n <th colspan=\"${MONTHS_PER_ROW}\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n ${months.map(\r\n (row) =>\r\n html`<tr role=\"row\">\r\n ${row.map((month) => this.#renderItem(month))}\r\n </tr>`,\r\n )}\r\n </tbody>\r\n </table>`;\r\n }\r\n\r\n /** @private */\r\n #renderItem(month: { date: Date; long: string; narrow: string }): unknown {\r\n const active =\r\n this.activeDate.getFullYear() === month.date.getFullYear() &&\r\n this.activeDate.getMonth() === month.date.getMonth();\r\n\r\n const selected =\r\n this.date?.getFullYear() === month.date.getFullYear() && this.date?.getMonth() === month.date.getMonth();\r\n\r\n const current =\r\n this.today.getFullYear() === month.date.getFullYear() && this.today.getMonth() === month.date.getMonth();\r\n\r\n const disabled =\r\n (this.minDate &&\r\n (month.date.getFullYear() < this.minDate.getFullYear() ||\r\n (month.date.getFullYear() === this.minDate.getFullYear() &&\r\n month.date.getMonth() < this.minDate.getMonth()))) ||\r\n (this.maxDate &&\r\n (month.date.getFullYear() > this.maxDate.getFullYear() ||\r\n (month.date.getFullYear() === this.maxDate.getFullYear() &&\r\n month.date.getMonth() > this.maxDate.getMonth())));\r\n\r\n const id = `month-${month.date.getMonth()}`;\r\n\r\n return html`<td role=\"gridcell\" class=\"${classMap({ current, selected, active })}\">\r\n <div\r\n id=\"${id}\"\r\n class=\"item\"\r\n role=\"button\"\r\n tabindex=\"${active ? \"0\" : \"-1\"}\"\r\n data-value=\"${month.date.toISOString()}\"\r\n aria-disabled=\"${ifDefined(disabled || undefined)}\"\r\n aria-current=\"${ifDefined(current ? \"date\" : undefined)}\"\r\n aria-pressed=\"${selected}\"\r\n @click=\"${this.#handleItemClick}\"\r\n @keydown=\"${this.#handleItemKeyDown}\"\r\n >\r\n <m3e-focus-ring class=\"focus-ring\" for=\"${id}\"></m3e-focus-ring>\r\n <m3e-state-layer class=\"state-layer\" for=\"${id}\" ?disable-hover=\"${disabled}\"></m3e-state-layer>\r\n <m3e-ripple class=\"ripple\" centered for=\"${id}\" ?disabled=\"${disabled}\"></m3e-ripple>\r\n <div class=\"touch\"></div>\r\n <span class=\"visually-hidden\">${month.long}</span>\r\n <span aria-hidden=\"true\">${month.narrow}</span>\r\n </div>\r\n </td>`;\r\n }\r\n\r\n /** @private */\r\n #handleItemClick(e: Event): void {\r\n const item = e.currentTarget as HTMLElement;\r\n if (item.ariaDisabled === \"true\" || !item.dataset[\"value\"]) return;\r\n\r\n this.activeDate = clampDate(new Date(item.dataset[\"value\"]), this.minDate, this.maxDate);\r\n this.dispatchEvent(new Event(\"change\", { bubbles: false }));\r\n }\r\n\r\n /** @private */\r\n #handleItemKeyDown(e: KeyboardEvent): void {\r\n let activeDate = this.activeDate;\r\n switch (e.key) {\r\n case \" \":\r\n case \"Enter\":\r\n e.preventDefault();\r\n (e.currentTarget as HTMLElement).click();\r\n return;\r\n\r\n case \"ArrowLeft\":\r\n case \"Left\":\r\n activeDate = addCalendarMonths(activeDate, M3eDirectionality.current === \"rtl\" ? 1 : -1);\r\n break;\r\n\r\n case \"ArrowRight\":\r\n case \"Right\":\r\n activeDate = addCalendarMonths(activeDate, M3eDirectionality.current === \"rtl\" ? -1 : 1);\r\n break;\r\n\r\n case \"ArrowUp\":\r\n case \"Up\":\r\n activeDate = addCalendarMonths(activeDate, -4);\r\n break;\r\n\r\n case \"ArrowDown\":\r\n case \"Down\":\r\n activeDate = addCalendarMonths(activeDate, 4);\r\n break;\r\n\r\n case \"Home\":\r\n activeDate = addCalendarMonths(activeDate, -activeDate.getMonth());\r\n break;\r\n\r\n case \"End\":\r\n activeDate = addCalendarMonths(activeDate, 11 - activeDate.getMonth());\r\n break;\r\n\r\n case \"PageUp\":\r\n activeDate = addCalendarYears(activeDate, e.altKey ? -10 : -1);\r\n break;\r\n\r\n case \"PageDown\":\r\n activeDate = addCalendarYears(activeDate, e.altKey ? 10 : 1);\r\n break;\r\n\r\n default:\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n this._changeActiveDate(activeDate);\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-year-view\": M3eYearViewElement;\r\n }\r\n}\r\n","/**\r\n * Adapted from Angular Material Datepicker\r\n * Source: https://github.com/angular/components/blob/main/src/material/datepicker/calendar.ts\r\n *\r\n * @license MIT\r\n * Copyright (c) 2025 Google LLC\r\n * See LICENSE file in the project root for full license text.\r\n */\r\n\r\nimport { css, CSSResultGroup, html, LitElement, PropertyValues, unsafeCSS } from \"lit\";\r\nimport { property, query, state } from \"lit/decorators.js\";\r\nimport { classMap } from \"lit/directives/class-map.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport { customElement, dateConverter, DesignToken, prefersReducedMotion } from \"@m3e/web/core\";\r\nimport { M3eDirectionality } from \"@m3e/web/core/bidi\";\r\n\r\nimport \"@m3e/web/button\";\r\nimport \"@m3e/web/icon-button\";\r\nimport \"@m3e/web/tooltip\";\r\n\r\nimport { CalendarView } from \"./CalendarView\";\r\nimport { CalendarViewElementBase } from \"./CalendarViewElementBase\";\r\nimport { M3eMonthViewElement } from \"./MonthViewElement\";\r\nimport { maxYearOfPage, minYearOfPage } from \"./utils\";\r\n\r\nimport \"./MonthViewElement\";\r\nimport \"./MultiYearViewElement\";\r\nimport \"./YearViewElement\";\r\n\r\n/**\r\n * A calendar used to select a date.\r\n *\r\n * @description\r\n * The `m3e-calendar` component provides structured navigation and selection across\r\n * month, year, and multi‑year views. It supports single‑date and range selection,\r\n * applies disabled rules including minimum, maximum, and blackout constraints, and\r\n * provides styling hooks for special date states.\r\n *\r\n * @example\r\n * The following example illustrates use of the `m3e-calendar`. In this example, a calendar is displayed\r\n * with a selected date.\r\n *\r\n * ```html\r\n * <m3e-calendar date=\"2025-12-13\"></m3e-calendar>\r\n * ```\r\n *\r\n * @tag m3e-calendar\r\n *\r\n * @slot header - Renders the header of the calendar.\r\n *\r\n * @attr date - The selected date.\r\n * @attr max-date - The maximum date that can be selected.\r\n * @attr min-date - The minimum date that can be selected.\r\n * @attr range-end - End of a date range.\r\n * @attr range-start - Start of a date range.\r\n * @attr start-at - A date specifying the period (month or year) to start the calendar in.\r\n * @attr start-view - The initial view used to select a date.\r\n * @attr previous-month-label - The accessible label given to the button used to move to the previous month.\r\n * @attr next-month-label - The accessible label given to the button used to move to the next month.\r\n * @attr previous-year-label - The accessible label given to the button used to move to the previous year.\r\n * @attr next-year-label - The accessible label given to the button used to move to the next year.\r\n * @attr previous-multi-year-label - The accessible label given to the button used to move to the previous 24 years.\r\n * @attr next-multi-year-label - The accessible label given to the button used to move to the next 24 years.\r\n *\r\n * @fires change - Emitted when the selected date changes.\r\n *\r\n * @cssprop --m3e-calendar-container-color - Background color of the container surface.\r\n * @cssprop --m3e-calendar-container-elevation - Elevation shadow applied to the container surface.\r\n * @cssprop --m3e-calendar-container-shape - Corner radius of the container surface.\r\n * @cssprop --m3e-calendar-padding - Padding applied to the calendar header and body.\r\n * @cssprop --m3e-calendar-period-button-text-color - Text color used for the period‑navigation buttons in the header.\r\n * @cssprop --m3e-calendar-weekday-font-size - Font size of weekday labels in month view.\r\n * @cssprop --m3e-calendar-weekday-font-weight - Font weight of weekday labels in month view.\r\n * @cssprop --m3e-calendar-weekday-line-height - Line height of weekday labels in month view.\r\n * @cssprop --m3e-calendar-weekday-tracking - Letter spacing of weekday labels in month view.\r\n * @cssprop --m3e-calendar-weekday-color - Text color for weekday labels in month view.\r\n * @cssprop --m3e-calendar-date-font-size - Font size of date cells in month view.\r\n * @cssprop --m3e-calendar-date-font-weight - Font weight of date cells in month view.\r\n * @cssprop --m3e-calendar-date-line-height - Line height of date cells in month view.\r\n * @cssprop --m3e-calendar-date-tracking - Letter spacing of date cells in month view.\r\n * @cssprop --m3e-calendar-item-font-size - Font size of items in year and multi‑year views.\r\n * @cssprop --m3e-calendar-item-font-weight - Font weight of items in year and multi‑year views.\r\n * @cssprop --m3e-calendar-item-line-height - Line height of items in year and multi‑year views.\r\n * @cssprop --m3e-calendar-item-tracking - Letter spacing of items in year and multi‑year views.\r\n * @cssprop --m3e-calendar-item-color - Text color for date items.\r\n * @cssprop --m3e-calendar-item-selected-color - Text color for selected date items.\r\n * @cssprop --m3e-calendar-item-selected-container-color - Background color for selected date items.\r\n * @cssprop --m3e-calendar-item-selected-ripple-color - Ripple color used when interacting with selected date items.\r\n * @cssprop --m3e-calendar-item-selected-hover-color - Hover color used when interacting with selected date items.\r\n * @cssprop --m3e-calendar-item-selected-focus-color - Focus color used when interacting with selected date items.\r\n * @cssprop --m3e-calendar-item-current-outline-thickness - Outline thickness used to indicate the current date.\r\n * @cssprop --m3e-calendar-item-current-outline-color - Outline color used to indicate the current date.\r\n * @cssprop --m3e-calendar-item-special-color - Text color for dates marked as special.\r\n * @cssprop --m3e-calendar-item-special-container-color - Background color for dates marked as special.\r\n * @cssprop --m3e-calendar-item-special-ripple-color - Ripple color used when interacting with dates marked as special.\r\n * @cssprop --m3e-calendar-item-special-hover-color - Hover color used when interacting with dates marked as special.\r\n * @cssprop --m3e-calendar-item-special-focus-color - Focus color used when interacting with dates marked as special.\r\n * @cssprop --m3e-calendar-range-container-color - Background color applied to the selected date range.\r\n * @cssprop --m3e-calendar-range-color - Text color for dates within a selected range.\r\n * @cssprop --m3e-calendar-item-disabled-color - Color used for disabled date items.\r\n * @cssprop --m3e-calendar-item-disabled-color-opacity - Opacity applied to the disabled item color.\r\n * @cssprop --m3e-calendar-slide-animation-duration - Duration of slide transitions between calendar views.\r\n */\r\n@customElement(\"m3e-calendar\")\r\nexport class M3eCalendarElement extends LitElement {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: inline-block;\r\n vertical-align: top;\r\n width: fit-content;\r\n height: fit-content;\r\n }\r\n .base {\r\n display: flex;\r\n flex-direction: column;\r\n width: fit-content;\r\n overflow: hidden;\r\n padding: var(--m3e-calendar-padding, 0.5rem);\r\n background-color: var(--m3e-calendar-container-color);\r\n box-shadow: var(--m3e-calendar-container-elevation);\r\n border-radius: var(--m3e-calendar-container-shape);\r\n }\r\n .header {\r\n display: flex;\r\n align-items: center;\r\n --m3e-text-button-label-text-color: var(\r\n --m3e-calendar-period-button-text-color,\r\n ${DesignToken.color.onSurfaceVariant}\r\n );\r\n --m3e-text-button-hover-label-text-color: var(\r\n --m3e-calendar-period-button-text-color,\r\n ${DesignToken.color.onSurfaceVariant}\r\n );\r\n --m3e-text-button-focus-label-text-color: var(\r\n --m3e-calendar-period-button-text-color,\r\n ${DesignToken.color.onSurfaceVariant}\r\n );\r\n --m3e-text-button-pressed-label-text-color: var(\r\n --m3e-calendar-period-button-text-color,\r\n ${DesignToken.color.onSurfaceVariant}\r\n );\r\n }\r\n .spacer {\r\n flex: 1 1 auto;\r\n }\r\n svg {\r\n transition: transform ${DesignToken.motion.spring.fastEffects};\r\n }\r\n svg.rotate {\r\n transform: rotate(-180deg);\r\n }\r\n .body {\r\n position: relative;\r\n }\r\n .view:not(.no-animate) {\r\n transition: ${unsafeCSS(\r\n `margin var(--m3e-calendar-slide-animation-duration, ${DesignToken.motion.duration.long2}) ${DesignToken.motion.easing.standard},\r\n visibility var(--m3e-calendar-slide-animation-duration, ${DesignToken.motion.duration.long2}) ${DesignToken.motion.easing.standard} allow-discrete`,\r\n )};\r\n }\r\n .view.before,\r\n .view.after {\r\n visibility: hidden;\r\n position: absolute;\r\n }\r\n .view.before {\r\n margin-inline-start: -100%;\r\n }\r\n .view.after {\r\n margin-inline-start: 100%;\r\n }\r\n .view:not(.before):not(.after) {\r\n visibility: visible;\r\n position: relative;\r\n left: 0;\r\n margin-inline-start: 0;\r\n }\r\n .row {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n .row.multi-year {\r\n transition: ${unsafeCSS(\r\n `transform var(--m3e-calendar-slide-animation-duration, ${DesignToken.motion.duration.long2}) ${DesignToken.motion.easing.standard} allow-discrete,\r\n opacity var(--m3e-calendar-slide-animation-duration, ${DesignToken.motion.duration.long2}) ${DesignToken.motion.easing.standard} allow-discrete`,\r\n )};\r\n }\r\n .row:not(.multi-year) {\r\n transition: ${unsafeCSS(\r\n `opacity var(--m3e-calendar-slide-animation-duration, ${DesignToken.motion.duration.long2}) ${DesignToken.motion.easing.standard} allow-discrete`,\r\n )};\r\n }\r\n .body.month > .row:not(.month),\r\n .body.year > .row:not(.year),\r\n .body.multi-year > .row:not(.multi-year) {\r\n visibility: hidden;\r\n position: absolute;\r\n transform: translateY(-10%);\r\n opacity: 0;\r\n }\r\n .body.month > .row:not(.month) .view:not(.before):not(.after),\r\n .body.year > .row:not(.year) .view:not(.before):not(.after),\r\n .body.multi-year > .row:not(.multi-year) .view:not(.before):not(.after) {\r\n visibility: hidden;\r\n transition: none;\r\n }\r\n\r\n @media (prefers-reduced-motion) {\r\n .row:not(.multi-year),\r\n .row.multi-year,\r\n .view:not(.no-animate),\r\n svg {\r\n transition: none;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ #transitionComplete?: Promise<void>;\r\n /** @private */ @state() private _today = new Date();\r\n /** @private */ @state() private _activeView: CalendarView = \"month\";\r\n /** @private */ @state() private _activeDate: Date = new Date();\r\n /** @private */ @query(\".active\") private readonly _view?: CalendarViewElementBase;\r\n /** @private */ @query(\".body\") private readonly _body!: HTMLElement;\r\n\r\n /**\r\n * The initial view used to select a date.\r\n * @default \"month\"\r\n */\r\n @property({ attribute: \"start-view\" }) startView: CalendarView = \"month\";\r\n\r\n /**\r\n * The selected date.\r\n * @default null\r\n */\r\n @property({ converter: dateConverter }) date: Date | null = null;\r\n\r\n /**\r\n * A date specifying the period (month or year) to start the calendar in.\r\n * @default null\r\n */\r\n @property({ attribute: \"start-at\", converter: dateConverter }) startAt: Date | null = null;\r\n\r\n /**\r\n * The minimum date that can be selected.\r\n * @default null\r\n */\r\n @property({ attribute: \"min-date\", converter: dateConverter }) minDate: Date | null = null;\r\n\r\n /**\r\n * The maximum date that can be selected.\r\n * @default null\r\n */\r\n @property({ attribute: \"max-date\", converter: dateConverter }) maxDate: Date | null = null;\r\n\r\n /**\r\n * Start of a date range.\r\n * @default null\r\n */\r\n @property({ attribute: \"range-start\", converter: dateConverter }) rangeStart: Date | null = null;\r\n\r\n /**\r\n * End of a date range.\r\n * @default null\r\n */\r\n @property({ attribute: \"range-end\", converter: dateConverter }) rangeEnd: Date | null = null;\r\n\r\n /**\r\n * A function used to determine whether a date cannot be selected.\r\n * @default null\r\n */\r\n @property({ attribute: false }) blackoutDates: ((date: Date) => boolean) | null = null;\r\n\r\n /**\r\n * A function used to determine whether a date is special.\r\n * @default null\r\n */\r\n @property({ attribute: false }) specialDates: ((date: Date) => boolean) | null = null;\r\n\r\n /**\r\n * The accessible label given to the button used to move to the previous month.\r\n * @default \"Previous month\"\r\n */\r\n @property({ attribute: \"previous-month-label\" }) previousMonthLabel = \"Previous month\";\r\n\r\n /**\r\n * The accessible label given to the button used to move to the previous year.\r\n * @default \"Previous year\"\r\n */\r\n @property({ attribute: \"previous-year-label\" }) previousYearLabel = \"Previous year\";\r\n\r\n /**\r\n * The accessible label given to the button used to move to the previous 24 years.\r\n * @default \"Previous 24 years\"\r\n */\r\n @property({ attribute: \"previous-multi-year-label\" }) previousMultiYearLabel = \"Previous 24 years\";\r\n\r\n /**\r\n * The accessible label given to the button used to move to the next month.\r\n * @default \"Next month\"\r\n */\r\n @property({ attribute: \"next-month-label\" }) nextMonthLabel = \"Next month\";\r\n\r\n /**\r\n * The accessible label given to the button used to move to the next year.\r\n * @default \"Next year\"\r\n */\r\n @property({ attribute: \"next-year-label\" }) nextYearLabel = \"Next year\";\r\n\r\n /**\r\n * The accessible label given to the button used to move to the next 24 years.\r\n * @default \"Next 24 years\"\r\n */\r\n @property({ attribute: \"next-multi-year-label\" }) nextMultiYearLabel = \"Next 24 years\";\r\n\r\n /** The label to present for the current period. */\r\n get periodLabel(): string {\r\n switch (this._activeView) {\r\n case \"month\":\r\n return new Intl.DateTimeFormat(navigator.language, { month: \"short\", year: \"numeric\" }).format(\r\n this._activeDate,\r\n );\r\n\r\n case \"year\":\r\n return new Intl.DateTimeFormat(navigator.language, { year: \"numeric\" }).format(\r\n new Date(this._activeDate.getFullYear(), 0, 1),\r\n );\r\n\r\n case \"multi-year\":\r\n return new Intl.DateTimeFormat(navigator.language, { year: \"numeric\" }).formatRange(\r\n new Date(minYearOfPage(this._activeDate, this.minDate, this.maxDate), 0, 1),\r\n new Date(maxYearOfPage(this._activeDate, this.minDate, this.maxDate), 0, 1),\r\n );\r\n }\r\n }\r\n\r\n /** Whether the calendar can move to the previous period. */\r\n get canMovePreviousPeriod(): boolean {\r\n if (!this.minDate) return true;\r\n switch (this._activeView) {\r\n case \"month\":\r\n return new Date(this._activeDate.getFullYear(), this._activeDate.getMonth(), 0) >= this.minDate;\r\n\r\n case \"year\":\r\n return new Date(this._activeDate.getFullYear() - 1, 12, 1) >= this.minDate;\r\n\r\n case \"multi-year\":\r\n return new Date(minYearOfPage(this._activeDate, this.minDate, this.maxDate) - 1, 12, 1) >= this.minDate;\r\n }\r\n }\r\n\r\n /** Whether the calendar can move to the next period. */\r\n get canMoveNextPeriod(): boolean {\r\n if (!this.maxDate) return true;\r\n switch (this._activeView) {\r\n case \"month\":\r\n return new Date(this._activeDate.getFullYear(), this._activeDate.getMonth() + 1, 1) <= this.maxDate;\r\n\r\n case \"year\":\r\n return new Date(this._activeDate.getFullYear() + 1, 1, 1) <= this.maxDate;\r\n\r\n case \"multi-year\":\r\n return new Date(maxYearOfPage(this._activeDate, this.minDate, this.maxDate) + 1, 12, 1) <= this.maxDate;\r\n }\r\n }\r\n\r\n /**\r\n * Asynchronously focuses the active date.\r\n * @returns {Promise<void>} A promise that resolves after the active date has been focused.\r\n */\r\n async focusActiveCell(): Promise<void> {\r\n if (this.isUpdatePending) {\r\n await this.updateComplete;\r\n }\r\n await this._view?.focusActiveCell();\r\n }\r\n\r\n /** Updates today's date. */\r\n updateTodayDate(): void {\r\n this._today = new Date();\r\n }\r\n\r\n /**\r\n * Moves the calendar to the previous period.\r\n * @returns {Promise<void>} A promise that resolves when the operation is complete.\r\n */\r\n async movePreviousPeriod(): Promise<void> {\r\n if (!this.canMovePreviousPeriod) return;\r\n if (prefersReducedMotion()) {\r\n this._activeDate = this.#getPreviousPeriod(this._activeView);\r\n return;\r\n }\r\n\r\n await this.#transitionComplete;\r\n\r\n const views = [...(this.shadowRoot?.querySelectorAll<HTMLElement>(`.row.${this._activeView} .view`) ?? [])];\r\n if (views.length != 3) return;\r\n\r\n this.#transitionComplete = new Promise<void>((resolve) => {\r\n views[0].addEventListener(\r\n \"transitionend\",\r\n () => {\r\n this._activeDate = this.#getPreviousPeriod(this._activeView);\r\n views.forEach((x) => x.classList.add(\"no-animate\"));\r\n views[1].classList.remove(\"after\");\r\n views[0].classList.add(\"before\");\r\n setTimeout(() => {\r\n views.forEach((x) => x.classList.remove(\"no-animate\"));\r\n resolve();\r\n });\r\n },\r\n { once: true },\r\n );\r\n });\r\n\r\n this._body.style.overflow = \"hidden\";\r\n views[1].classList.add(\"after\");\r\n views[0].classList.remove(\"before\");\r\n\r\n await this.#transitionComplete;\r\n this._body.style.overflow = \"\";\r\n }\r\n\r\n /**\r\n * Moves the calendar to the next period.\r\n * @returns {Promise<void>} A promise that resolves when the operation is complete.\r\n */\r\n async moveNextPeriod(): Promise<void> {\r\n if (!this.canMoveNextPeriod) return;\r\n if (prefersReducedMotion()) {\r\n this._activeDate = this.#getNextPeriod(this._activeView);\r\n return;\r\n }\r\n\r\n await this.#transitionComplete;\r\n\r\n const views = [...(this.shadowRoot?.querySelectorAll<HTMLElement>(`.row.${this._activeView} .view`) ?? [])];\r\n if (views.length != 3) return;\r\n\r\n this.#transitionComplete = new Promise<void>((resolve) => {\r\n views[2].addEventListener(\r\n \"transitionend\",\r\n () => {\r\n this._activeDate = this.#getNextPeriod(this._activeView);\r\n views.forEach((x) => x.classList.add(\"no-animate\"));\r\n views[1].classList.remove(\"before\");\r\n views[2].classList.add(\"after\");\r\n setTimeout(() => {\r\n views.forEach((x) => x.classList.remove(\"no-animate\"));\r\n resolve();\r\n });\r\n },\r\n { once: true },\r\n );\r\n });\r\n\r\n this._body.style.overflow = \"hidden\";\r\n views[1].classList.add(\"before\");\r\n views[2].classList.remove(\"after\");\r\n\r\n await this.#transitionComplete;\r\n this._body.style.overflow = \"\";\r\n }\r\n\r\n /**\r\n * Toggles the current period.\r\n * @returns {Promise<void>} A promise that resolves when the operation is complete.\r\n */\r\n async togglePeriod(): Promise<void> {\r\n await this.#transitionComplete;\r\n this._activeView = this._activeView === \"month\" ? \"multi-year\" : \"month\";\r\n await this.focusActiveCell();\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override willUpdate(changedProperties: PropertyValues<this>): void {\r\n super.willUpdate(changedProperties);\r\n\r\n if (changedProperties.has(\"date\")) {\r\n this._activeDate = new Date(this.date ?? this._today);\r\n }\r\n if (changedProperties.has(\"startAt\")) {\r\n this._activeDate = new Date(this.startAt ?? this.date ?? this._today);\r\n }\r\n if (changedProperties.has(\"rangeStart\") && this.rangeStart) {\r\n this._activeDate = new Date(this.rangeStart);\r\n if (!changedProperties.has(\"date\")) {\r\n this.date = new Date(this.rangeStart);\r\n }\r\n }\r\n if (changedProperties.has(\"rangeEnd\") && this.rangeEnd) {\r\n this._activeDate = new Date(this.rangeEnd);\r\n if (!changedProperties.has(\"date\")) {\r\n this.date = new Date(this.rangeEnd);\r\n }\r\n }\r\n if (changedProperties.has(\"startView\")) {\r\n this._activeView = this.startView;\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override updated(_changedProperties: PropertyValues<this>): void {\r\n super.updated(_changedProperties);\r\n\r\n if (this._view instanceof M3eMonthViewElement) {\r\n if (_changedProperties.has(\"specialDates\") || _changedProperties.has(\"blackoutDates\")) {\r\n this.shadowRoot?.querySelectorAll(\"m3e-month-view\").forEach((x) => {\r\n x.specialDates = this.specialDates;\r\n x.blackoutDates = this.blackoutDates;\r\n });\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\">\r\n <slot name=\"header\">${this.#renderHeader()}</slot>\r\n <div class=\"body ${this._activeView}\">\r\n <div class=\"row multi-year\">\r\n ${this.#renderView(\"multi-year\", -1)}${this.#renderView(\"multi-year\", 0)}${this.#renderView(\"multi-year\", 1)}\r\n </div>\r\n <div class=\"row year\">\r\n ${this.#renderView(\"year\", -1)}${this.#renderView(\"year\", 0)}${this.#renderView(\"year\", 1)}\r\n </div>\r\n <div class=\"row month\">\r\n ${this.#renderView(\"month\", -1)}${this.#renderView(\"month\", 0)}${this.#renderView(\"month\", 1)}\r\n </div>\r\n </div>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #renderHeader(): unknown {\r\n return html`<div class=\"header\">\r\n <m3e-button @click=\"${this.togglePeriod}\">\r\n ${this.periodLabel}\r\n <svg\r\n class=\"${classMap({ rotate: this._activeView !== \"month\" })}\"\r\n slot=\"trailing-icon\"\r\n viewBox=\"0 -960 960 960\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M480-360 280-560h400L480-360Z\" />\r\n </svg>\r\n </m3e-button>\r\n <div class=\"spacer\"></div>\r\n <m3e-icon-button\r\n ?disabled=\"${!this.canMovePreviousPeriod}\"\r\n @click=\"${this.movePreviousPeriod}\"\r\n aria-label=\"${this._activeView === \"month\"\r\n ? this.previousMonthLabel\r\n : this._activeView === \"year\"\r\n ? this.previousYearLabel\r\n : this.previousMultiYearLabel}\"\r\n >\r\n ${M3eDirectionality.current === \"ltr\"\r\n ? html`<svg viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\" />\r\n </svg>`\r\n : html`<svg viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" />\r\n </svg>`}\r\n </m3e-icon-button>\r\n <m3e-icon-button\r\n ?disabled=\"${!this.canMoveNextPeriod}\"\r\n @click=\"${this.moveNextPeriod}\"\r\n aria-label=\"${this._activeView === \"month\"\r\n ? this.nextMonthLabel\r\n : this._activeView === \"year\"\r\n ? this.nextYearLabel\r\n : this.nextMultiYearLabel}\"\r\n >\r\n ${M3eDirectionality.current === \"ltr\"\r\n ? html`<svg viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" />\r\n </svg>`\r\n : html`<svg viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\" />\r\n </svg>`}\r\n </m3e-icon-button>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #renderView(view: CalendarView, offset: -1 | 0 | 1): unknown {\r\n const activeDate =\r\n offset < 0 ? this.#getPreviousPeriod(view) : offset > 0 ? this.#getNextPeriod(view) : new Date(this._activeDate);\r\n\r\n switch (view) {\r\n case \"month\":\r\n return html`<m3e-month-view\r\n class=\"view ${classMap({\r\n before: offset < 0,\r\n after: offset > 0,\r\n active: view === this._activeView && offset === 0,\r\n })}\"\r\n ?inert=\"${offset !== 0}\"\r\n today=\"${this._today.toISOString()}\"\r\n date=\"${ifDefined(this.date?.toISOString())}\"\r\n active-date=\"${activeDate.toISOString()}\"\r\n min-date=\"${ifDefined(this.minDate?.toISOString())}\"\r\n max-date=\"${ifDefined(this.maxDate?.toISOString())}\"\r\n range-start=\"${ifDefined(this.rangeStart?.toISOString())}\"\r\n range-end=\"${ifDefined(this.rangeEnd?.toISOString())}\"\r\n @active-change=\"${offset === 0 ? this.#handleActiveChange : undefined}\"\r\n @change=\"${offset === 0 ? this.#handleDateChange : undefined}\"\r\n >\r\n </m3e-month-view>`;\r\n\r\n case \"year\":\r\n return html`<m3e-year-view\r\n class=\"view ${classMap({\r\n before: offset < 0,\r\n after: offset > 0,\r\n active: view === this._activeView && offset === 0,\r\n })}\"\r\n ?inert=\"${offset !== 0}\"\r\n today=\"${this._today.toISOString()}\"\r\n date=\"${ifDefined(this.date?.toISOString())}\"\r\n active-date=\"${activeDate.toISOString()}\"\r\n min-date=\"${ifDefined(this.minDate?.toISOString())}\"\r\n max-date=\"${ifDefined(this.maxDate?.toISOString())}\"\r\n @active-change=\"${offset === 0 ? this.#handleActiveChange : undefined}\"\r\n @change=\"${offset === 0 ? this.#handleMonthChange : undefined}\"\r\n ></m3e-year-view>`;\r\n\r\n case \"multi-year\":\r\n return html`<m3e-multi-year-view\r\n class=\"view ${classMap({\r\n before: offset < 0,\r\n after: offset > 0,\r\n active: view === this._activeView && offset === 0,\r\n })}\"\r\n ?inert=\"${offset !== 0}\"\r\n today=\"${this._today.toISOString()}\"\r\n date=\"${ifDefined(this.date?.toISOString())}\"\r\n active-date=\"${activeDate.toISOString()}\"\r\n min-date=\"${ifDefined(this.minDate?.toISOString())}\"\r\n max-date=\"${ifDefined(this.maxDate?.toISOString())}\"\r\n @active-change=\"${offset === 0 ? this.#handleActiveChange : undefined}\"\r\n @change=\"${offset === 0 ? this.#handleYearChange : undefined}\"\r\n >\r\n </m3e-multi-year-view>`;\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleDateChange(e: Event): void {\r\n const monthView = e.currentTarget as M3eMonthViewElement;\r\n this._activeDate = new Date(monthView.activeDate);\r\n this.rangeStart = monthView.rangeStart;\r\n this.rangeEnd = monthView.rangeEnd;\r\n this.date = new Date(this._activeDate);\r\n this.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n }\r\n\r\n /** @private */\r\n async #handleMonthChange(e: Event): Promise<void> {\r\n this._activeDate = new Date((e.currentTarget as CalendarViewElementBase).activeDate);\r\n this._activeView = \"month\";\r\n this.focusActiveCell();\r\n }\r\n\r\n /** @private */\r\n #handleYearChange(e: Event): void {\r\n this._activeDate = new Date((e.currentTarget as CalendarViewElementBase).activeDate);\r\n this._activeView = \"year\";\r\n this.focusActiveCell();\r\n }\r\n\r\n /** @private */\r\n async #handleActiveChange(e: Event): Promise<void> {\r\n if (this._view instanceof M3eMonthViewElement) {\r\n this._view._suppressFocusHighlight = false;\r\n }\r\n\r\n this._activeDate = new Date((e.currentTarget as CalendarViewElementBase).activeDate);\r\n await this.focusActiveCell();\r\n\r\n if (this._view instanceof M3eMonthViewElement) {\r\n this._view._suppressFocusHighlight = false;\r\n }\r\n }\r\n\r\n /** @private */\r\n #getPreviousPeriod(view: CalendarView): Date {\r\n const activeDate = new Date(this._activeDate);\r\n switch (view) {\r\n case \"month\":\r\n activeDate.setMonth(this._activeDate.getMonth() - 1);\r\n while (activeDate.getMonth() === this._activeDate.getMonth()) {\r\n activeDate.setDate(activeDate.getDate() - 1);\r\n }\r\n\r\n break;\r\n\r\n case \"year\":\r\n activeDate.setFullYear(this._activeDate.getFullYear() - 1);\r\n break;\r\n\r\n case \"multi-year\": {\r\n activeDate.setDate(1);\r\n activeDate.setFullYear(minYearOfPage(this._activeDate, this.minDate, this.maxDate) - 1);\r\n }\r\n }\r\n return activeDate;\r\n }\r\n\r\n /** @private */\r\n #getNextPeriod(view: CalendarView): Date {\r\n const activeDate = new Date(this._activeDate);\r\n switch (view) {\r\n case \"month\":\r\n activeDate.setMonth(this._activeDate.getMonth() + 1);\r\n while (activeDate.getMonth() === this._activeDate.getMonth()) {\r\n activeDate.setDate(activeDate.getDate() + 1);\r\n }\r\n break;\r\n\r\n case \"year\":\r\n activeDate.setFullYear(this._activeDate.getFullYear() + 1);\r\n break;\r\n\r\n case \"multi-year\":\r\n activeDate.setDate(1);\r\n activeDate.setFullYear(maxYearOfPage(this._activeDate, this.minDate, this.maxDate) + 1);\r\n break;\r\n }\r\n return activeDate;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-calendar\": M3eCalendarElement;\r\n }\r\n}\r\n"],"names":["createDateWithOverflow","year","month","day","date","Date","setFullYear","setHours","getStartingYear","minDate","maxDate","getFullYear","YEARS_PER_PAGE","euclideanModulo","a","b","addCalendarDays","days","getMonth","getDate","addCalendarMonths","months","newDate","addCalendarYears","years","getNumDaysInMonth","compareDate","first","second","sameDate","getActiveOffset","activeDate","minYearOfPage","maxYearOfPage","clampDate","YEARS_PER_ROW","MONTHS_PER_ROW","CalendarViewElementBase","LitElement","constructor","today","focusActiveCell","isUpdatePending","updateComplete","_activeItem","focusWhenReady","_changeActiveDate","style","setProperty","blur","removeProperty","dispatchEvent","Event","bubbles","styles","css","DesignToken","color","onSurface","shape","corner","full","onPrimary","primary","__decorate","query","prototype","property","converter","dateConverter","attribute","M3eMonthViewElement","_suppressFocusHighlight","rangeStart","rangeEnd","blackoutDates","specialDates","render","setDate","getDay","weekdays","Array","narrowFormat","Intl","DateTimeFormat","navigator","language","weekday","longFormat","i","push","id","narrow","format","long","firstDate","lastDate","numDays","weeks","dayOfWeek","length","filter","x","html","map","row","nothing","y","__classPrivateFieldGet","_M3eMonthViewElement_instances","_M3eMonthViewElement_renderItem","call","value","special","selected","active","current","disabled","range","rangeStartRange","classMap","toISOString","ifDefined","undefined","_M3eMonthViewElement_handleItemClick","_M3eMonthViewElement_handleItemMouseEnter","_M3eMonthViewElement_handleItemFocus","_M3eMonthViewElement_clearRangeHighlight","_M3eMonthViewElement_handleItemKeyDown","e","item","currentTarget","ariaDisabled","dataset","key","preventDefault","click","M3eDirectionality","altKey","parentElement","classList","add","cell","closest","querySelectorAll","shadowRoot","forEach","remove","typescale","standard","title","small","fontSize","fontWeight","lineHeight","tracking","body","medium","onTertiaryContainer","tertiaryContainer","primaryContainer","onPrimaryContainer","customElement","M3eMultiYearViewElement","minYear","yearFormat","_M3eMultiYearViewElement_instances","_M3eMultiYearViewElement_handleItemClick","_M3eMultiYearViewElement_handleItemKeyDown","Number","M3eYearViewElement","shortFormat","_M3eYearViewElement_instances","_M3eYearViewElement_handleItemClick","_M3eYearViewElement_handleItemKeyDown","M3eCalendarElement","_M3eCalendarElement_transitionComplete","set","_today","_activeView","_activeDate","startView","startAt","previousMonthLabel","previousYearLabel","previousMultiYearLabel","nextMonthLabel","nextYearLabel","nextMultiYearLabel","periodLabel","formatRange","canMovePreviousPeriod","canMoveNextPeriod","_view","updateTodayDate","movePreviousPeriod","prefersReducedMotion","_M3eCalendarElement_instances","_M3eCalendarElement_getPreviousPeriod","views","__classPrivateFieldSet","Promise","resolve","addEventListener","setTimeout","once","_body","overflow","moveNextPeriod","_M3eCalendarElement_getNextPeriod","togglePeriod","willUpdate","changedProperties","has","updated","_changedProperties","_M3eCalendarElement_renderHeader","_M3eCalendarElement_renderView","rotate","view","offset","before","after","_M3eCalendarElement_handleActiveChange","_M3eCalendarElement_handleDateChange","_M3eCalendarElement_handleMonthChange","_M3eCalendarElement_handleYearChange","monthView","setMonth","onSurfaceVariant","motion","spring","fastEffects","unsafeCSS","duration","long2","easing","state"],"mappings":";;;;;;;;;;;;;;;;AAAA;AACA,SAASA,sBAAsBA,CAACC,IAAY,EAAEC,KAAa,EAAEC,GAAW,EAAA;AACtE,EAAA,MAAMC,IAAI,GAAG,IAAIC,IAAI,EAAE;EACvBD,IAAI,CAACE,WAAW,CAACL,IAAI,EAAEC,KAAK,EAAEC,GAAG,CAAC;EAClCC,IAAI,CAACG,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACzB,EAAA,OAAOH,IAAI;AACb;AAEA;AACA,SAASI,eAAeA,CAACC,OAAoB,EAAEC,OAAoB,EAAA;AACjE,EAAA,IAAIA,OAAO,EAAE;IACX,OAAOA,OAAO,CAACC,WAAW,EAAE,GAAGC,cAAc,GAAG,CAAC;EACnD,CAAC,MAAM,IAAIH,OAAO,EAAE;AAClB,IAAA,OAAOA,OAAO,CAACE,WAAW,EAAE;AAC9B,EAAA;AACA,EAAA,OAAO,CAAC;AACV;AAEA;AACA,SAASE,eAAeA,CAACC,CAAS,EAAEC,CAAS,EAAA;AAC3C,EAAA,OAAO,CAAED,CAAC,GAAGC,CAAC,GAAIA,CAAC,IAAIA,CAAC;AAC1B;AAEA;AACM,SAAUC,eAAeA,CAACZ,IAAU,EAAEa,IAAY,EAAA;EACtD,OAAOjB,sBAAsB,CAACI,IAAI,CAACO,WAAW,EAAE,EAAEP,IAAI,CAACc,QAAQ,EAAE,EAAEd,IAAI,CAACe,OAAO,EAAE,GAAGF,IAAI,CAAC;AAC3F;AAEA;AACM,SAAUG,iBAAiBA,CAAChB,IAAU,EAAEiB,MAAc,EAAA;EAC1D,IAAIC,OAAO,GAAGtB,sBAAsB,CAACI,IAAI,CAACO,WAAW,EAAE,EAAEP,IAAI,CAACc,QAAQ,EAAE,GAAGG,MAAM,EAAEjB,IAAI,CAACe,OAAO,EAAE,CAAC;EAClG,IAAIG,OAAO,CAACJ,QAAQ,EAAE,IAAI,CAAE,CAACd,IAAI,CAACc,QAAQ,EAAE,GAAGG,MAAM,IAAI,EAAE,GAAI,EAAE,IAAI,EAAE,EAAE;AACvEC,IAAAA,OAAO,GAAGtB,sBAAsB,CAACsB,OAAO,CAACX,WAAW,EAAE,EAAEW,OAAO,CAACJ,QAAQ,EAAE,EAAE,CAAC,CAAC;AAChF,EAAA;AACA,EAAA,OAAOI,OAAO;AAChB;AAEA;AACM,SAAUC,gBAAgBA,CAACnB,IAAU,EAAEoB,KAAa,EAAA;AACxD,EAAA,OAAOJ,iBAAiB,CAAChB,IAAI,EAAEoB,KAAK,GAAG,EAAE,CAAC;AAC5C;AAEA;AACM,SAAUC,iBAAiBA,CAACrB,IAAU,EAAA;EAC1C,OAAOJ,sBAAsB,CAACI,IAAI,CAACO,WAAW,EAAE,EAAEP,IAAI,CAACc,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAACC,OAAO,EAAE;AACrF;AAEA;AACM,SAAUO,WAAWA,CAACC,KAAW,EAAEC,MAAY,EAAA;AACnD,EAAA,OACED,KAAK,CAAChB,WAAW,EAAE,GAAGiB,MAAM,CAACjB,WAAW,EAAE,IAC1CgB,KAAK,CAACT,QAAQ,EAAE,GAAGU,MAAM,CAACV,QAAQ,EAAE,IACpCS,KAAK,CAACR,OAAO,EAAE,GAAGS,MAAM,CAACT,OAAO,EAAE;AAEtC;AAEA;AACM,SAAUU,QAAQA,CAACF,KAAkB,EAAEC,MAAmB,EAAA;AAC9D,EAAA,OAAOD,KAAK,IAAIC,MAAM,GAAGF,WAAW,CAACC,KAAK,EAAEC,MAAM,CAAC,IAAI,CAAC,GAAGD,KAAK,IAAIC,MAAM;AAC5E;AAEA;SACgBE,eAAeA,CAACC,UAAgB,EAAEtB,OAAoB,EAAEC,OAAoB,EAAA;AAC1F,EAAA,OAAOG,eAAe,CAACkB,UAAU,CAACpB,WAAW,EAAE,GAAGH,eAAe,CAACC,OAAO,EAAEC,OAAO,CAAC,EAAEE,cAAc,CAAC;AACtG;AAEA;SACgBoB,aAAaA,CAACD,UAAgB,EAAEtB,OAAoB,EAAEC,OAAoB,EAAA;AACxF,EAAA,OAAOqB,UAAU,CAACpB,WAAW,EAAE,GAAGmB,eAAe,CAACC,UAAU,EAAEtB,OAAO,EAAEC,OAAO,CAAC;AACjF;AAEA;SACgBuB,aAAaA,CAACF,UAAgB,EAAEtB,OAAoB,EAAEC,OAAoB,EAAA;EACxF,OAAOsB,aAAa,CAACD,UAAU,EAAEtB,OAAO,EAAEC,OAAO,CAAC,GAAGE,cAAc,GAAG,CAAC;AACzE;AAEA;SACgBsB,SAASA,CAAC9B,IAAU,EAAEK,OAAoB,EAAEC,OAAoB,EAAA;AAC9E,EAAA,IAAID,OAAO,IAAIiB,WAAW,CAACtB,IAAI,EAAEK,OAAO,CAAC,GAAG,CAAC,EAAE,OAAOA,OAAO;AAC7D,EAAA,IAAIC,OAAO,IAAIgB,WAAW,CAACtB,IAAI,EAAEM,OAAO,CAAC,GAAG,CAAC,EAAE,OAAOA,OAAO;AAC7D,EAAA,OAAON,IAAI;AACb;AAEA;AAAwB,MAAMQ,cAAc,GAAG,EAAE;AACjD;AAAwB,MAAMuB,aAAa,GAAG,CAAC;AAC/C;AAAwB,MAAMC,cAAc,GAAG,CAAC;;AC9EhD;;;AAGG;AACG,MAAgBC,uBAAwB,SAAQC,UAAU,CAAA;AAAhEC,EAAAA,WAAAA,GAAA;;AAgHE;AACwC,IAAA,IAAA,CAAAC,KAAK,GAAS,IAAInC,IAAI,EAAE;AAEhE;IACwC,IAAA,CAAAD,IAAI,GAAgB,IAAI;AAEhE;AACkE,IAAA,IAAA,CAAA2B,UAAU,GAAS,IAAI1B,IAAI,EAAE;AAE/F;IAC+D,IAAA,CAAAI,OAAO,GAAgB,IAAI;AAE1F;IAC+D,IAAA,CAAAC,OAAO,GAAgB,IAAI;AA4B5F,EAAA;AA1BE;;;AAGG;EACH,MAAM+B,eAAeA,GAAA;IACnB,IAAI,IAAI,CAACC,eAAe,EAAE;MACxB,MAAM,IAAI,CAACC,cAAc;AAC3B,IAAA;IAEA,IAAI,IAAI,CAACC,WAAW,EAAE;AACpB,MAAA,MAAMC,cAAc,CAAC,IAAI,CAACD,WAAW,CAAC;AACxC,IAAA;AACF,EAAA;AAEA;EACUE,iBAAiBA,CAACf,UAAgB,EAAA;AAC1CA,IAAAA,UAAU,GAAGG,SAAS,CAACH,UAAU,EAAE,IAAI,CAACtB,OAAO,EAAE,IAAI,CAACC,OAAO,CAAC;IAC9D,IAAI,CAACmB,QAAQ,CAACE,UAAU,EAAE,IAAI,CAACA,UAAU,CAAC,EAAE;MAC1C,IAAI,CAACa,WAAW,EAAEG,KAAK,CAACC,WAAW,CAAC,4BAA4B,EAAE,KAAK,CAAC;AACxE,MAAA,IAAI,CAACJ,WAAW,EAAEK,IAAI,EAAE;MACxB,IAAI,CAACL,WAAW,EAAEG,KAAK,CAACG,cAAc,CAAC,4BAA4B,CAAC;MAEpE,IAAI,CAACnB,UAAU,GAAGA,UAAU;AAC5B,MAAA,IAAI,CAACoB,aAAa,CAAC,IAAIC,KAAK,CAAC,eAAe,EAAE;AAAEC,QAAAA,OAAO,EAAE;AAAK,OAAE,CAAC,CAAC;AACpE,IAAA;AACF,EAAA;;AAvJA;AACgBhB,uBAAA,CAAAiB,MAAM,GAAmBC,GAAG,CAAA,4hBAAA,EAoCAC,WAAW,CAACC,KAAK,CAACC,SAAS,CAAA,uMAAA,EAclDF,WAAW,CAACG,KAAK,CAACC,MAAM,CAACC,IAAI,CAAA,wQAAA,EAaGL,WAAW,CAACC,KAAK,CAACK,SAAS,CAAA,sEAAA,EACPN,WAAW,CAACC,KAAK,CAACK,SAAS,mFACjBN,WAAW,CAACC,KAAK,CAACK,SAAS,CAAA,gFAAA,EAC3BN,WAAW,CAACC,KAAK,CAACK,SAAS,CAAA,oIAAA,EAGpCN,WAAW,CAACC,KAAK,CAACM,OAAO,CAAA,uIAAA,EAGvCP,WAAW,CAACC,KAAK,CAACM,OAAO,CAAA,gRAAA,EAMjBP,WAAW,CAACC,KAAK,CAACM,OAAO,CAAA,uGAAA,EAK7CP,WAAW,CAACC,KAAK,CAACC,SAAS,CAAA,4iBAAA,CAnFrD;AA4GqCM,UAAA,CAAA,CAA1CC,KAAK,CAAC,iBAAiB,CAAC,CAA4C,EAAA5B,uBAAA,CAAA6B,SAAA,EAAA,aAAA,EAAA,MAAA,CAAA;AAG7CF,UAAA,CAAA,CAAvCG,QAAQ,CAAC;AAAEC,EAAAA,SAAS,EAAEC;CAAe,CAAC,CAA0B,EAAAhC,uBAAA,CAAA6B,SAAA,EAAA,OAAA,EAAA,MAAA,CAAA;AAGzBF,UAAA,CAAA,CAAvCG,QAAQ,CAAC;AAAEC,EAAAA,SAAS,EAAEC;CAAe,CAAC,CAA0B,EAAAhC,uBAAA,CAAA6B,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA;AAGCF,UAAA,CAAA,CAAjEG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE,aAAa;AAAEF,EAAAA,SAAS,EAAEC;AAAa,CAAE,CAAC,CAA+B,EAAAhC,uBAAA,CAAA6B,SAAA,EAAA,YAAA,EAAA,MAAA,CAAA;AAGjCF,UAAA,CAAA,CAA9DG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE,UAAU;AAAEF,EAAAA,SAAS,EAAEC;AAAa,CAAE,CAAC,CAA6B,EAAAhC,uBAAA,CAAA6B,SAAA,EAAA,SAAA,EAAA,MAAA,CAAA;AAG5BF,UAAA,CAAA,CAA9DG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE,UAAU;AAAEF,EAAAA,SAAS,EAAEC;AAAa,CAAE,CAAC,CAA6B,EAAAhC,uBAAA,CAAA6B,SAAA,EAAA,SAAA,EAAA,MAAA,CAAA;;ACxI7F;;;;;;;AAOG;;AAqBH;;;AAGG;AAEI,IAAMK,mBAAmB,GAAzB,MAAMA,mBAAoB,SAAQlC,uBAAuB,CAAA;AAAzDE,EAAAA,WAAAA,GAAA;;;AA6HL;IAAiB,IAAA,CAAAiC,uBAAuB,GAAG,IAAI;AAE/C;IACkE,IAAA,CAAAC,UAAU,GAAgB,IAAI;AAEhG;IACgE,IAAA,CAAAC,QAAQ,GAAgB,IAAI;AAE5F;IACgC,IAAA,CAAAC,aAAa,GAAqC,IAAI;AAEtF;IACgC,IAAA,CAAAC,YAAY,GAAqC,IAAI;AAwQvF,EAAA;AAtQE;AACmBC,EAAAA,MAAMA,GAAA;IACvB,MAAMzE,IAAI,GAAG,IAAIC,IAAI,CAAC,IAAI,CAACmC,KAAK,CAAC;AACjCpC,IAAAA,IAAI,CAAC0E,OAAO,CAAC,CAAC,CAAC;AAEf,IAAA,OAAO1E,IAAI,CAAC2E,MAAM,EAAE,IAAI,CAAC,EAAE;MACzB3E,IAAI,CAAC0E,OAAO,CAAC1E,IAAI,CAACe,OAAO,EAAE,GAAG,CAAC,CAAC;AAClC,IAAA;AAEA,IAAA,MAAM6D,QAAQ,GAAG,IAAIC,KAAK,EAAgD;IAC1E,MAAMC,YAAY,GAAG,IAAIC,IAAI,CAACC,cAAc,CAACC,SAAS,CAACC,QAAQ,EAAE;AAAEC,MAAAA,OAAO,EAAE;AAAQ,KAAE,CAAC;IACvF,MAAMC,UAAU,GAAG,IAAIL,IAAI,CAACC,cAAc,CAACC,SAAS,CAACC,QAAQ,EAAE;AAAEC,MAAAA,OAAO,EAAE;AAAM,KAAE,CAAC;IAEnF,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAAE;MAC1BT,QAAQ,CAACU,IAAI,CAAC;AAAEC,QAAAA,EAAE,EAAEF,CAAC;AAAEG,QAAAA,MAAM,EAAEV,YAAY,CAACW,MAAM,CAACzF,IAAI,CAAC;AAAE0F,QAAAA,IAAI,EAAEN,UAAU,CAACK,MAAM,CAACzF,IAAI;AAAC,OAAE,CAAC;MAC1FA,IAAI,CAAC0E,OAAO,CAAC1E,IAAI,CAACe,OAAO,EAAE,GAAG,CAAC,CAAC;AAClC,IAAA;IAEA,MAAMlB,IAAI,GAAG,IAAI,CAAC8B,UAAU,CAACpB,WAAW,EAAE;IAC1C,MAAMT,KAAK,GAAG,IAAI,CAAC6B,UAAU,CAACb,QAAQ,EAAE;IACxC,MAAM6E,SAAS,GAAG,IAAI1F,IAAI,CAACJ,IAAI,EAAEC,KAAK,EAAE,CAAC,CAAC;AAC1C,IAAA,MAAM8F,QAAQ,GAAG,IAAI3F,IAAI,CAACJ,IAAI,EAAEC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;AAC7C,IAAA,MAAM+F,OAAO,GAAGD,QAAQ,CAAC7E,OAAO,EAAE;IAElC,IAAI+E,KAAK,GAAe,EAAE;AAC1B,IAAA,IAAIC,SAAS,GAAGJ,SAAS,CAAChB,MAAM,EAAE;IAElC,KAAK,IAAIU,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIQ,OAAO,EAAER,CAAC,EAAE,EAAE;MACjC,IAAIU,SAAS,KAAK,CAAC,IAAID,KAAK,CAACE,MAAM,KAAK,CAAC,EAAE;AACzCF,QAAAA,KAAK,CAACR,IAAI,CAAC,EAAE,CAAC;AAChB,MAAA;MACAQ,KAAK,CAACA,KAAK,CAACE,MAAM,GAAG,CAAC,CAAC,CAACV,IAAI,CAACD,CAAC,CAAC;AAC/BU,MAAAA,SAAS,GAAG,CAACA,SAAS,GAAG,CAAC,IAAI,CAAC;AACjC,IAAA;AAEAD,IAAAA,KAAK,GAAGA,KAAK,CAACG,MAAM,CAAEC,CAAC,IAAK,CAAC,CAACA,CAAC,CAACF,MAAM,CAAC;IAEvC,OAAOG,IAAI,CAAA,8BAAA,EAGHvB,QAAQ,CAACwB,GAAG,CACXF,CAAC,IACAC,IAAI,CAAA,8CAAA,EAC8BD,CAAC,CAACR,IAAI,CAAA,wBAAA,EACnBQ,CAAC,CAACX,EAAE,CAAA,OAAA,EAAUzF,KAAK,CAAA,qBAAA,EAAwBoG,CAAC,CAACV,MAAM,CAAA,gCAAA,EAC1CU,CAAC,CAACX,EAAE,CAAA,OAAA,EAAUzF,KAAK,CAAA,EAAA,EAAKoG,CAAC,CAACR,IAAI,CAAA,mBAAA,CACtD,CACT,CAAA,oBAAA,EAIDI,KAAK,CAACM,GAAG,CACT,CAACC,GAAG,EAAEhB,CAAC,KACLc,IAAI,CAAA,eAAA,EACAd,CAAC,KAAK,CAAC,IAAIgB,GAAG,CAACL,MAAM,GAAG,CAAC,GAAGG,IAAI,CAAA,aAAA,EAAgB,CAAC,GAAGE,GAAG,CAACL,MAAM,CAAA,OAAA,CAAS,GAAGM,OAAO,CAAA,CAAA,EACjFD,GAAG,CAACD,GAAG,CAAEG,CAAC,IAAKC,sBAAA,CAAA,IAAI,EAAAC,8BAAA,EAAA,GAAA,EAAAC,+BAAA,CAAY,CAAAC,IAAA,CAAhB,IAAI,EAAa,IAAI1G,IAAI,CAACJ,IAAI,EAAEC,KAAK,EAAEyG,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAC1DlB,CAAC,GAAG,CAAC,IAAIgB,GAAG,CAACL,MAAM,GAAG,CAAC,GAAGG,IAAI,CAAA,aAAA,EAAgB,CAAC,GAAGE,GAAG,CAACL,MAAM,CAAA,OAAA,CAAS,GAAGM,OAAO,CAAA,KAAA,CAC7E,CACT,CAAA,gBAAA,CAEI;AACX,EAAA;;;2EAGYM,KAAW,EAAA;EACrB,MAAMlB,IAAI,GAAG,IAAIX,IAAI,CAACC,cAAc,CAACC,SAAS,CAACC,QAAQ,EAAE;AACvDrF,IAAAA,IAAI,EAAE,SAAS;AACfC,IAAAA,KAAK,EAAE,MAAM;AACbC,IAAAA,GAAG,EAAE;AACN,GAAA,CAAC,CAAC0F,MAAM,CAACmB,KAAK,CAAC;EAEhB,MAAMC,OAAO,GAAG,IAAI,CAACrC,YAAY,GAAGoC,KAAK,CAAC,IAAI,KAAK;EACnD,MAAME,QAAQ,GAAGrF,QAAQ,CAAC,IAAI,CAACzB,IAAI,EAAE4G,KAAK,CAAC;EAC3C,MAAMG,MAAM,GAAGtF,QAAQ,CAAC,IAAI,CAACE,UAAU,EAAEiF,KAAK,CAAC;EAC/C,MAAMI,OAAO,GAAGvF,QAAQ,CAAC,IAAI,CAACW,KAAK,EAAEwE,KAAK,CAAC;AAC3C,EAAA,MAAMK,QAAQ,GACX,IAAI,CAAC5G,OAAO,IAAIiB,WAAW,CAACsF,KAAK,EAAE,IAAI,CAACvG,OAAO,CAAC,GAAG,CAAC,IACpD,IAAI,CAACC,OAAO,IAAIgB,WAAW,CAACsF,KAAK,EAAE,IAAI,CAACtG,OAAO,CAAC,GAAG,CAAE,IACtD,IAAI,CAACiE,aAAa,GAAGqC,KAAK,CAAC,KAAK,IAAI;EAEtC,MAAMrB,EAAE,GAAG,CAAA,KAAA,EAAQqB,KAAK,CAAC9F,QAAQ,EAAE,CAAA,CAAA,EAAI8F,KAAK,CAAC7F,OAAO,EAAE,CAAA,CAAA,EAAI6F,KAAK,CAACrG,WAAW,EAAE,CAAA,CAAE;EAE/E,IAAI2G,KAAK,GAAG,KAAK;AACf7C,IAAAA,UAAU,GAAG,KAAK;AAClBC,IAAAA,QAAQ,GAAG,KAAK;AAChB6C,IAAAA,eAAe,GAAG,KAAK;EAEzB,IAAI,IAAI,CAAC9C,UAAU,EAAE;AACnB,IAAA,IAAI,CAAC,IAAI,CAACC,QAAQ,EAAE;MAClBD,UAAU,GAAG5C,QAAQ,CAACmF,KAAK,EAAE,IAAI,CAACvC,UAAU,CAAC;AAC/C,IAAA,CAAC,MAAM;MACL6C,KAAK,GAAG5F,WAAW,CAACsF,KAAK,EAAE,IAAI,CAACvC,UAAU,CAAC,GAAG,CAAC,IAAI/C,WAAW,CAACsF,KAAK,EAAE,IAAI,CAACtC,QAAQ,CAAC,GAAG,CAAC;MACxF,IAAI,CAAC4C,KAAK,EAAE;QACV7C,UAAU,GAAG/C,WAAW,CAACsF,KAAK,EAAE,IAAI,CAACvC,UAAU,CAAC,IAAI,CAAC,IAAI/C,WAAW,CAACsF,KAAK,EAAE,IAAI,CAACtC,QAAQ,CAAC,GAAG,CAAC;QAC9F,IAAI,CAACD,UAAU,EAAE;UACfC,QAAQ,GAAGhD,WAAW,CAACsF,KAAK,EAAE,IAAI,CAACvC,UAAU,CAAC,GAAG,CAAC,IAAI/C,WAAW,CAACsF,KAAK,EAAE,IAAI,CAACtC,QAAQ,CAAC,IAAI,CAAC;AAC9F,QAAA,CAAC,MAAM;AACL6C,UAAAA,eAAe,GAAG,IAAI;AACxB,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;EAEA,OAAOhB,IAAI,CAAA,2BAAA,EAEAiB,QAAQ,CAAC;IAChBJ,OAAO;IACPF,QAAQ;IACRC,MAAM;IACNF,OAAO;IACPK,KAAK;AACL,IAAA,aAAa,EAAE7C,UAAU;AACzB,IAAA,mBAAmB,EAAE8C,eAAe;AACpC,IAAA,WAAW,EAAE7C;GACd,CAAC,CAAA,WAAA,EAGMiB,EAAE,CAAA,yCAAA,EAGMqB,KAAK,CAACS,WAAW,EAAE,CAAA,YAAA,EACrBN,MAAM,GAAG,GAAG,GAAG,IAAI,CAAA,iBAAA,EACdO,SAAS,CAACL,QAAQ,IAAIM,SAAS,CAAC,CAAA,gBAAA,EACjCD,SAAS,CAACN,OAAO,GAAG,MAAM,GAAGO,SAAS,CAAC,CAAA,gBAAA,EACvCT,QAAQ,IAAIzC,UAAU,IAAIC,QAAQ,CAAA,UAAA,EACxCkC,sBAAA,CAAA,IAAI,EAAAC,8BAAA,EAAA,GAAA,EAAAe,oCAAA,CAAiB,CAAA,eAAA,EAChBhB,sBAAA,CAAA,IAAI,EAAAC,8BAAA,EAAA,GAAA,EAAAgB,yCAAA,CAAsB,CAAA,UAAA,EAC/BjB,sBAAA,CAAA,IAAI,EAAAC,8BAAA,EAAA,GAAA,EAAAiB,oCAAA,CAAiB,CAAA,eAAA,EAChBlB,sBAAA,CAAA,IAAI,EAAAC,8BAAA,EAAA,GAAA,EAAAkB,wCAAA,CAAqB,CAAA,SAAA,EAC/BnB,sBAAA,CAAA,IAAI,EAAAC,8BAAA,EAAA,GAAA,EAAAkB,wCAAA,CAAqB,CAAA,YAAA,EACtBnB,sBAAA,CAAA,IAAI,EAAAC,8BAAA,EAAA,GAAA,EAAAmB,sCAAA,CAAmB,CAAA,0CAAA,EAEOrC,EAAE,CAAA,6DAAA,EACAA,EAAE,CAAA,kBAAA,EAAqB0B,QAAQ,CAAA,6DAAA,EAChC1B,EAAE,CAAA,aAAA,EAAgB0B,QAAQ,CAAA,sEAAA,EAErCvB,IAAI,CAAA,iCAAA,EACTkB,KAAK,CAAC7F,OAAO,EAAE,CAAA,kBAAA,CAExC;AACR,CAAC;qFAGgB8G,CAAQ,EAAA;AACvB,EAAA,MAAMC,IAAI,GAAGD,CAAC,CAACE,aAA4B;AAC3C,EAAA,IAAID,IAAI,CAACE,YAAY,KAAK,MAAM,IAAI,CAACF,IAAI,CAACG,OAAO,CAAC,OAAO,CAAC,EAAE;AAE5D,EAAA,IAAI,CAACtG,UAAU,GAAG,IAAI1B,IAAI,CAAC6H,IAAI,CAACG,OAAO,CAAC,OAAO,CAAC,CAAC;AACjD,EAAA,IAAI,CAACtG,UAAU,GAAGG,SAAS,CAAC,IAAI,CAACH,UAAU,EAAE,IAAI,CAACtB,OAAO,EAAE,IAAI,CAACC,OAAO,CAAC;EAExE,IAAI,IAAI,CAACgE,QAAQ,EAAE;AACjB,IAAA,IAAI,CAACD,UAAU,GAAG,IAAI,CAAC1C,UAAU;IACjC,IAAI,CAAC2C,QAAQ,GAAG,IAAI;AACpBkC,IAAAA,sBAAA,CAAA,IAAI,EAAAC,8BAAA,EAAA,GAAA,EAAAkB,wCAAA,CAAqB,CAAAhB,IAAA,CAAzB,IAAI,CAAuB;AAC7B,EAAA,CAAC,MAAM,IAAI,IAAI,CAACtC,UAAU,EAAE;AAC1B,IAAA,IAAI/C,WAAW,CAAC,IAAI,CAACK,UAAU,EAAE,IAAI,CAAC0C,UAAU,CAAC,GAAG,CAAC,EAAE;AACrD,MAAA,IAAI,CAACA,UAAU,GAAG,IAAI,CAAC1C,UAAU;MACjC,IAAI,CAAC2C,QAAQ,GAAG,IAAI;AACtB,IAAA,CAAC,MAAM;AACL,MAAA,IAAI,CAACA,QAAQ,GAAG,IAAI,CAAC3C,UAAU;AACjC,IAAA;AACA6E,IAAAA,sBAAA,CAAA,IAAI,EAAAC,8BAAA,EAAA,GAAA,EAAAkB,wCAAA,CAAqB,CAAAhB,IAAA,CAAzB,IAAI,CAAuB;AAC7B,EAAA;AAEA,EAAA,IAAI,CAAC5D,aAAa,CAAC,IAAIC,KAAK,CAAC,QAAQ,EAAE;AAAEC,IAAAA,OAAO,EAAE;AAAK,GAAE,CAAC,CAAC;AAC7D,CAAC;yFAGkB4E,CAAgB,EAAA;AACjC,EAAA,IAAIlG,UAAU,GAAG,IAAI,CAACA,UAAU;EAEhC,QAAQkG,CAAC,CAACK,GAAG;AACX,IAAA,KAAK,GAAG;AACR,IAAA,KAAK,OAAO;MACVL,CAAC,CAACM,cAAc,EAAE;AACjBN,MAAAA,CAAC,CAACE,aAA6B,CAACK,KAAK,EAAE;AACxC,MAAA;AAEF,IAAA,KAAK,WAAW;AAChB,IAAA,KAAK,MAAM;AACTzG,MAAAA,UAAU,GAAGf,eAAe,CAACe,UAAU,EAAE0G,iBAAiB,CAACrB,OAAO,KAAK,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC;AACtF,MAAA;AAEF,IAAA,KAAK,YAAY;AACjB,IAAA,KAAK,OAAO;AACVrF,MAAAA,UAAU,GAAGf,eAAe,CAACe,UAAU,EAAE0G,iBAAiB,CAACrB,OAAO,KAAK,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;AACtF,MAAA;AAEF,IAAA,KAAK,SAAS;AACd,IAAA,KAAK,IAAI;AACPrF,MAAAA,UAAU,GAAGf,eAAe,CAACe,UAAU,EAAE,EAAE,CAAC;AAC5C,MAAA;AAEF,IAAA,KAAK,WAAW;AAChB,IAAA,KAAK,MAAM;AACTA,MAAAA,UAAU,GAAGf,eAAe,CAACe,UAAU,EAAE,CAAC,CAAC;AAC3C,MAAA;AAEF,IAAA,KAAK,MAAM;AACTA,MAAAA,UAAU,GAAGf,eAAe,CAACe,UAAU,EAAE,CAAC,GAAGA,UAAU,CAACZ,OAAO,EAAE,CAAC;AAClE,MAAA;AAEF,IAAA,KAAK,KAAK;AACRY,MAAAA,UAAU,GAAGf,eAAe,CAACe,UAAU,EAAEN,iBAAiB,CAACM,UAAU,CAAC,GAAGA,UAAU,CAACZ,OAAO,EAAE,CAAC;AAC9F,MAAA;AAEF,IAAA,KAAK,QAAQ;AACXY,MAAAA,UAAU,GAAGkG,CAAC,CAACS,MAAM,GAAGnH,gBAAgB,CAACQ,UAAU,EAAE,EAAE,CAAC,GAAGX,iBAAiB,CAACW,UAAU,EAAE,EAAE,CAAC;AAC5F,MAAA;AAEF,IAAA,KAAK,UAAU;AACbA,MAAAA,UAAU,GAAGkG,CAAC,CAACS,MAAM,GAAGnH,gBAAgB,CAACQ,UAAU,EAAE,CAAC,CAAC,GAAGX,iBAAiB,CAACW,UAAU,EAAE,CAAC,CAAC;AAC1F,MAAA;AAEF,IAAA;AACE,MAAA;AACJ;EAEAkG,CAAC,CAACM,cAAc,EAAE;AAClB,EAAA,IAAI,CAACzF,iBAAiB,CAACf,UAAU,CAAC;AACpC,CAAC;+FAGqBkG,CAAQ,EAAA;AAC5BrB,EAAAA,sBAAA,CAAA,IAAI,8EAAmB,CAAAG,IAAA,CAAvB,IAAI,EAAoBkB,CAAC,CAACE,aAA4B,CAAC;AACzD,CAAC;qFAGgBF,CAAQ,EAAA;AACvB,EAAA,IAAI,CAAC,IAAI,CAACzD,uBAAuB,EAAE;AACjCoC,IAAAA,sBAAA,CAAA,IAAI,8EAAmB,CAAAG,IAAA,CAAvB,IAAI,EAAoBkB,CAAC,CAACE,aAA4B,CAAC;AACzD,EAAA;AACF,CAAC;yFAGkBD,IAAiB,EAAA;AAClCtB,EAAAA,sBAAA,CAAA,IAAI,EAAAC,8BAAA,EAAA,GAAA,EAAAkB,wCAAA,CAAqB,CAAAhB,IAAA,CAAzB,IAAI,CAAuB;AAC3B,EAAA,IAAI,IAAI,CAACtC,UAAU,IAAI,CAAC,IAAI,CAACC,QAAQ,IAAIwD,IAAI,CAACG,OAAO,CAAC,OAAO,CAAC,EAAE;AAC9D,IAAA,IAAI3G,WAAW,CAAC,IAAIrB,IAAI,CAAC6H,IAAI,CAACG,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC5D,UAAU,CAAC,GAAG,CAAC,EAAE;MACrEyD,IAAI,CAACS,aAAc,CAACC,SAAS,CAACC,GAAG,CAAC,qBAAqB,CAAC;AAC1D,IAAA;AACA,IAAA,KAAK,MAAMC,IAAI,IAAIZ,IAAI,CAACa,OAAO,CAAC,OAAO,CAAC,EAAEC,gBAAgB,CAAc,OAAO,CAAC,IAAI,EAAE,EAAE;MACtF,IAAIF,IAAI,KAAKZ,IAAI,EAAE;MAEnB,MAAMlB,KAAK,GAAG,IAAI3G,IAAI,CAACyI,IAAI,CAACT,OAAO,CAAC,OAAO,CAAE,CAAC;MAC9C,IAAI3G,WAAW,CAACsF,KAAK,EAAE,IAAI,CAACvC,UAAU,CAAC,GAAG,CAAC,EAAE;QAC3CqE,IAAI,CAACH,aAAc,CAACC,SAAS,CAACC,GAAG,CAAC,iBAAiB,CAAC;AACtD,MAAA,CAAC,MAAM,IAAInH,WAAW,CAACsF,KAAK,EAAE,IAAI,CAACvC,UAAU,CAAC,IAAI,CAAC,EAAE;QACnDqE,IAAI,CAACH,aAAc,CAACC,SAAS,CAACC,GAAG,CAAC,uBAAuB,CAAC;AAC5D,MAAA;AACF,IAAA;AACF,EAAA;AACF,CAAC;;EAIC,IAAI,IAAI,CAACpE,UAAU,EAAE;IACnB,IAAI,CAACwE,UAAU,EACXD,gBAAgB,CAAC,8DAA8D,CAAC,CACjFE,OAAO,CAAE5C,CAAC,IAAKA,CAAC,CAACsC,SAAS,CAACO,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,uBAAuB,CAAC,CAAC;AAC1G,EAAA;AACF,CAAC;AA/YD;AACgB5E,mBAAA,CAAAjB,MAAM,GAAmB,CACvCjB,uBAAuB,CAACiB,MAAM,EAC9BC,GAAG,CAAA,yDAAA,EAEoDC,WAAW,CAAC4F,SAAS,CAACC,QAAQ,CAACC,KAAK,CAACC,KAAK,CAACC,QAAQ,CAAA,wDAAA,EAC/ChG,WAAW,CAAC4F,SAAS,CAACC,QAAQ,CAACC,KAAK,CAACC,KAAK,CAACE,UAAU,CAAA,wDAAA,EACrDjG,WAAW,CAAC4F,SAAS,CAACC,QAAQ,CAACC,KAAK,CAACC,KAAK,CAACG,UAAU,CAAA,wDAAA,EACrDlG,WAAW,CAAC4F,SAAS,CAACC,QAAQ,CAACC,KAAK,CAACC,KAAK,CAACI,QAAQ,CAAA,4CAAA,EAC/DnG,WAAW,CAACC,KAAK,CAACC,SAAS,CAAA,0IAAA,EAQtBF,WAAW,CAAC4F,SAAS,CAACC,QAAQ,CAACO,IAAI,CAACC,MAAM,CAACL,QAAQ,wDAC/ChG,WAAW,CAAC4F,SAAS,CAACC,QAAQ,CAACO,IAAI,CAACC,MAAM,CAACJ,UAAU,wDACrDjG,WAAW,CAAC4F,SAAS,CAACC,QAAQ,CAACO,IAAI,CAACC,MAAM,CAACH,UAAU,CAAA,qDAAA,EACrDlG,WAAW,CAAC4F,SAAS,CAACC,QAAQ,CAACO,IAAI,CAACC,MAAM,CAACF,QAAQ,CAAA,iJAAA,EAGvDnG,WAAW,CAACC,KAAK,CAACqG,mBAAmB,CAAA,qEAAA,EACjBtG,WAAW,CAACC,KAAK,CAACqG,mBAAmB,CAAA,gFAAA,EAGrGtG,WAAW,CAACC,KAAK,CAACqG,mBAAmB,CAAA,iFAAA,EAIrCtG,WAAW,CAACC,KAAK,CAACqG,mBAAmB,CAAA,oLAAA,EAI4BtG,WAAW,CAACC,KAAK,CAACsG,iBAAiB,CAAA,mJAAA,EAIvDvG,WAAW,CAACC,KAAK,CAACK,SAAS,CAAA,sEAAA,EACPN,WAAW,CAACC,KAAK,CAACK,SAAS,CAAA,kMAAA,EAI1BN,WAAW,CAACC,KAAK,CAACM,OAAO,CAAA,2TAAA,EAWjCP,WAAW,CAACC,KAAK,CAACuG,gBAAgB,CAAA,sGAAA,EAGvDxG,WAAW,CAACC,KAAK,CAACwG,kBAAkB,qiBAoB7DzG,WAAW,CAACC,KAAK,CAACM,OAAO,yeAcdP,WAAW,CAACG,KAAK,CAACC,MAAM,CAACC,IAAI,CAAA,yBAAA,EAC/BL,WAAW,CAACG,KAAK,CAACC,MAAM,CAACC,IAAI,CAAA,44BAAA,CA4BzD,CAxHmB;AA8H4CG,UAAA,CAAA,CAAjEG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE,aAAa;AAAEF,EAAAA,SAAS,EAAEC;AAAa,CAAE,CAAC,CAAgC,EAAAE,mBAAA,CAAAL,SAAA,EAAA,YAAA,EAAA,MAAA,CAAA;AAGjCF,UAAA,CAAA,CAA/DG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE,WAAW;AAAEF,EAAAA,SAAS,EAAEC;AAAa,CAAE,CAAC,CAA8B,EAAAE,mBAAA,CAAAL,SAAA,EAAA,UAAA,EAAA,MAAA,CAAA;AAG7DF,UAAA,CAAA,CAA/BG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE;CAAO,CAAC,CAAwD,EAAAC,mBAAA,CAAAL,SAAA,EAAA,eAAA,EAAA,MAAA,CAAA;AAGvDF,UAAA,CAAA,CAA/BG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE;CAAO,CAAC,CAAuD,EAAAC,mBAAA,CAAAL,SAAA,EAAA,cAAA,EAAA,MAAA,CAAA;AAzI3EK,mBAAmB,GAAAP,UAAA,CAAA,CAD/BkG,aAAa,CAAC,gBAAgB,CAAC,CACnB,EAAA3F,mBAAmB,CAiZ/B;;AClbD;;;;;;;AAOG;;AAYH;;;AAGG;AAEI,IAAM4F,uBAAuB,GAA7B,MAAMA,uBAAwB,SAAQ9H,uBAAuB,CAAA;AAA7DE,EAAAA,WAAAA,GAAA;;;AA2JP,EAAA;AAjIE;AACmBsC,EAAAA,MAAMA,GAAA;AACvB,IAAA,MAAMrD,KAAK,GAAG,IAAIyD,KAAK,EAAY;AACnC,IAAA,MAAMmF,OAAO,GAAGpI,aAAa,CAAC,IAAI,CAACD,UAAU,EAAE,IAAI,CAACtB,OAAO,EAAE,IAAI,CAACC,OAAO,CAAC;AAC1E,IAAA,KAAK,IAAI+E,CAAC,GAAG,CAAC,EAAEgB,GAAG,GAAa,EAAE,EAAEhB,CAAC,GAAG7E,cAAc,EAAE6E,CAAC,EAAE,EAAE;AAC3DgB,MAAAA,GAAG,CAACf,IAAI,CAAC0E,OAAO,GAAG3E,CAAC,CAAC;AACrB,MAAA,IAAIgB,GAAG,CAACL,MAAM,KAAKjE,aAAa,EAAE;AAChCX,QAAAA,KAAK,CAACkE,IAAI,CAACe,GAAG,CAAC;AACfA,QAAAA,GAAG,GAAG,IAAIxB,KAAK,EAAU;AAC3B,MAAA;AACF,IAAA;AAEA,IAAA,OAAOsB,IAAI,CAAA,8DAAA,EAGUpE,aAAa,CAAA,2BAAA,EAI5BX,KAAK,CAACgF,GAAG,CACRC,GAAG,IACFF,IAAI,CAAA,eAAA,EACAE,GAAG,CAACD,GAAG,CAAEvG,IAAI,IAAK2G,sBAAA,CAAA,IAAI,+EAAY,CAAAG,IAAA,CAAhB,IAAI,EAAa9G,IAAI,CAAC,CAAC,CAAA,KAAA,CACvC,CACT,CAAA,gBAAA,CAEI;AACX,EAAA;;;mFAGYA,IAAY,EAAA;EACtB,MAAMoK,UAAU,GAAG,IAAIlF,IAAI,CAACC,cAAc,CAACC,SAAS,CAACC,QAAQ,EAAE;AAAErF,IAAAA,IAAI,EAAE;AAAS,GAAE,CAAC;EACnF,MAAMkH,MAAM,GAAG,IAAI,CAACpF,UAAU,CAACpB,WAAW,EAAE,KAAKV,IAAI;EACrD,MAAMiH,QAAQ,GAAG,IAAI,CAAC9G,IAAI,EAAEO,WAAW,EAAE,KAAKV,IAAI;EAClD,MAAMmH,OAAO,GAAG,IAAI,CAAC5E,KAAK,CAAC7B,WAAW,EAAE,KAAKV,IAAI;AACjD,EAAA,MAAMoH,QAAQ,GACX,IAAI,CAAC5G,OAAO,IAAIR,IAAI,GAAG,IAAI,CAACQ,OAAO,CAACE,WAAW,EAAE,IAAM,IAAI,CAACD,OAAO,IAAIT,IAAI,GAAG,IAAI,CAACS,OAAO,CAACC,WAAW,EAAG;AAE5G,EAAA,MAAMgF,EAAE,GAAG,CAAA,KAAA,EAAQ1F,IAAI,CAAA,CAAE;EAEzB,OAAOsG,IAAI,CAAA,2BAAA,EAA8BiB,QAAQ,CAAC;IAAEJ,OAAO;IAAEF,QAAQ;AAAEC,IAAAA;AAAM,GAAE,CAAC,CAAA,WAAA,EAEtExB,EAAE,CAAA,uCAAA,EAGIwB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAA,cAAA,EACjBlH,IAAI,CAAA,iBAAA,EACDyH,SAAS,CAACL,QAAQ,IAAIM,SAAS,CAAC,CAAA,gBAAA,EACjCD,SAAS,CAACN,OAAO,GAAG,MAAM,GAAGO,SAAS,CAAC,CAAA,gBAAA,EACvCT,QAAQ,CAAA,UAAA,EACdN,sBAAA,CAAA,IAAI,EAAA0D,kCAAA,EAAA,GAAA,EAAAC,wCAAA,CAAiB,eACnB3D,sBAAA,CAAA,IAAI,EAAA0D,kCAAA,EAAA,GAAA,EAAAE,0CAAA,CAAmB,CAAA,0CAAA,EAEO7E,EAAE,CAAA,6DAAA,EACAA,EAAE,qBAAqB0B,QAAQ,CAAA,oDAAA,EACzC1B,EAAE,CAAA,sBAAA,EAAyB0B,QAAQ,CAAA,8CAAA,EAE7DgD,UAAU,CAACxE,MAAM,CAAC,IAAIxF,IAAI,CAACJ,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA,kBAAA,CAE7C;AACR,CAAC;6FAGgBgI,CAAQ,EAAA;AACvB,EAAA,MAAMC,IAAI,GAAGD,CAAC,CAACE,aAA4B;AAC3C,EAAA,IAAID,IAAI,CAACE,YAAY,KAAK,MAAM,IAAI,CAACF,IAAI,CAACG,OAAO,CAAC,OAAO,CAAC,EAAE;EAE5D,IAAI,CAACtG,UAAU,GAAG,IAAI1B,IAAI,CAAC,IAAI,CAAC0B,UAAU,CAAC;AAC3C,EAAA,IAAI,CAACA,UAAU,CAACzB,WAAW,CAACmK,MAAM,CAACvC,IAAI,CAACG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1D,EAAA,IAAI,CAACtG,UAAU,GAAGG,SAAS,CAAC,IAAI,CAACH,UAAU,EAAE,IAAI,CAACtB,OAAO,EAAE,IAAI,CAACC,OAAO,CAAC;AACxE,EAAA,IAAI,CAACyC,aAAa,CAAC,IAAIC,KAAK,CAAC,QAAQ,EAAE;AAAEC,IAAAA,OAAO,EAAE;AAAK,GAAE,CAAC,CAAC;AAC7D,CAAC;iGAGkB4E,CAAgB,EAAA;AACjC,EAAA,IAAIlG,UAAU,GAAG,IAAI,CAACA,UAAU;EAChC,QAAQkG,CAAC,CAACK,GAAG;AACX,IAAA,KAAK,GAAG;AACR,IAAA,KAAK,OAAO;MACVL,CAAC,CAACM,cAAc,EAAE;AACjBN,MAAAA,CAAC,CAACE,aAA6B,CAACK,KAAK,EAAE;AACxC,MAAA;AAEF,IAAA,KAAK,WAAW;AAChB,IAAA,KAAK,MAAM;AACTzG,MAAAA,UAAU,GAAGR,gBAAgB,CAACQ,UAAU,EAAE0G,iBAAiB,CAACrB,OAAO,KAAK,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC;AACvF,MAAA;AAEF,IAAA,KAAK,YAAY;AACjB,IAAA,KAAK,OAAO;AACVrF,MAAAA,UAAU,GAAGR,gBAAgB,CAACQ,UAAU,EAAE0G,iBAAiB,CAACrB,OAAO,KAAK,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;AACvF,MAAA;AAEF,IAAA,KAAK,SAAS;AACd,IAAA,KAAK,IAAI;AACPrF,MAAAA,UAAU,GAAGR,gBAAgB,CAACQ,UAAU,EAAE,CAACI,aAAa,CAAC;AACzD,MAAA;AAEF,IAAA,KAAK,WAAW;AAChB,IAAA,KAAK,MAAM;AACTJ,MAAAA,UAAU,GAAGR,gBAAgB,CAACQ,UAAU,EAAEI,aAAa,CAAC;AACxD,MAAA;AAEF,IAAA,KAAK,MAAM;AACTJ,MAAAA,UAAU,GAAGR,gBAAgB,CAACQ,UAAU,EAAE,CAACD,eAAe,CAACC,UAAU,EAAE,IAAI,CAACtB,OAAO,EAAE,IAAI,CAACC,OAAO,CAAC,CAAC;AACnG,MAAA;AAEF,IAAA,KAAK,KAAK;MACRqB,UAAU,GAAGR,gBAAgB,CAC3BQ,UAAU,EACVnB,cAAc,GAAGkB,eAAe,CAACC,UAAU,EAAE,IAAI,CAACtB,OAAO,EAAE,IAAI,CAACC,OAAO,CAAC,GAAG,CAAC,CAC7E;AACD,MAAA;AAEF,IAAA,KAAK,QAAQ;AACXqB,MAAAA,UAAU,GAAGR,gBAAgB,CAACQ,UAAU,EAAEkG,CAAC,CAACS,MAAM,GAAG,CAAC9H,cAAc,GAAG,EAAE,GAAG,CAACA,cAAc,CAAC;AAC5F,MAAA;AAEF,IAAA,KAAK,UAAU;AACbmB,MAAAA,UAAU,GAAGR,gBAAgB,CAACQ,UAAU,EAAEkG,CAAC,CAACS,MAAM,GAAG9H,cAAc,GAAG,EAAE,GAAGA,cAAc,CAAC;AAC1F,MAAA;AAEF,IAAA;AACE,MAAA;AACJ;EAEAqH,CAAC,CAACM,cAAc,EAAE;AAClB,EAAA,IAAI,CAACzF,iBAAiB,CAACf,UAAU,CAAC;AACpC,CAAC;AAzJD;AACgBoI,uBAAA,CAAA7G,MAAM,GAAmB,CACvCjB,uBAAuB,CAACiB,MAAM,EAC9BC,GAAG,CAAA,2JAAA,EAciDC,WAAW,CAAC4F,SAAS,CAACC,QAAQ,CAACO,IAAI,CAACC,MAAM,CAACL,QAAQ,CAAA,qDAAA,EAC/ChG,WAAW,CAAC4F,SAAS,CAACC,QAAQ,CAACO,IAAI,CAACC,MAAM,CAACJ,UAAU,CAAA,qDAAA,EACrDjG,WAAW,CAAC4F,SAAS,CAACC,QAAQ,CAACO,IAAI,CAACC,MAAM,CAACH,UAAU,CAAA,qDAAA,EACrDlG,WAAW,CAAC4F,SAAS,CAACC,QAAQ,CAACO,IAAI,CAACC,MAAM,CAACF,QAAQ,CAAA,IAAA,CAE1G,CArBmB;AAFXQ,uBAAuB,GAAAnG,UAAA,CAAA,CADnCkG,aAAa,CAAC,qBAAqB,CAAC,CACxB,EAAAC,uBAAuB,CA2JnC;;ACnLD;;;;;;;AAOG;;AAYH;;;AAGG;AAEI,IAAMO,kBAAkB,GAAxB,MAAMA,kBAAmB,SAAQrI,uBAAuB,CAAA;AAAxDE,EAAAA,WAAAA,GAAA;;;AAyKP,EAAA;AA/IE;AACmBsC,EAAAA,MAAMA,GAAA;AACvB,IAAA,MAAMxD,MAAM,GAAG,IAAI4D,KAAK,EAAuD;IAC/E,MAAM0F,WAAW,GAAG,IAAIxF,IAAI,CAACC,cAAc,CAACC,SAAS,CAACC,QAAQ,EAAE;AAAEpF,MAAAA,KAAK,EAAE;AAAO,KAAE,CAAC;IACnF,MAAMsF,UAAU,GAAG,IAAIL,IAAI,CAACC,cAAc,CAACC,SAAS,CAACC,QAAQ,EAAE;AAAEpF,MAAAA,KAAK,EAAE;AAAM,KAAE,CAAC;IACjF,MAAMD,IAAI,GAAG,IAAI,CAAC8B,UAAU,CAACpB,WAAW,EAAE;AAE1C,IAAA,KAAK,IAAIT,KAAK,GAAG,CAAC,EAAEuG,GAAG,GAAG,IAAIxB,KAAK,EAAgD,EAAE/E,KAAK,GAAG,EAAE,EAAEA,KAAK,EAAE,EAAE;MACxG,MAAME,IAAI,GAAG,IAAIC,IAAI,CAACJ,IAAI,EAAEC,KAAK,EAAE,CAAC,CAAC;MACrCuG,GAAG,CAACf,IAAI,CAAC;AAAEE,QAAAA,MAAM,EAAE+E,WAAW,CAAC9E,MAAM,CAACzF,IAAI,CAAC;AAAE0F,QAAAA,IAAI,EAAEN,UAAU,CAACK,MAAM,CAACzF,IAAI,CAAC;AAAEA,QAAAA,IAAI,EAAEA;AAAI,OAAE,CAAC;AAEzF,MAAA,IAAIqG,GAAG,CAACL,MAAM,IAAIhE,cAAc,EAAE;AAChCf,QAAAA,MAAM,CAACqE,IAAI,CAACe,GAAG,CAAC;AAChBA,QAAAA,GAAG,GAAG,EAAE;AACV,MAAA;AACF,IAAA;AAEA,IAAA,OAAOF,IAAI,CAAA,8DAAA,EAGUnE,cAAc,CAAA,2BAAA,EAI7Bf,MAAM,CAACmF,GAAG,CACTC,GAAG,IACFF,IAAI,CAAA,eAAA,EACAE,GAAG,CAACD,GAAG,CAAEtG,KAAK,IAAK0G,sBAAA,CAAA,IAAI,qEAAY,CAAAG,IAAA,CAAhB,IAAI,EAAa7G,KAAK,CAAC,CAAC,CAAA,KAAA,CACzC,CACT,CAAA,gBAAA,CAEI;AACX,EAAA;;;yEAGYA,KAAmD,EAAA;AAC7D,EAAA,MAAMiH,MAAM,GACV,IAAI,CAACpF,UAAU,CAACpB,WAAW,EAAE,KAAKT,KAAK,CAACE,IAAI,CAACO,WAAW,EAAE,IAC1D,IAAI,CAACoB,UAAU,CAACb,QAAQ,EAAE,KAAKhB,KAAK,CAACE,IAAI,CAACc,QAAQ,EAAE;AAEtD,EAAA,MAAMgG,QAAQ,GACZ,IAAI,CAAC9G,IAAI,EAAEO,WAAW,EAAE,KAAKT,KAAK,CAACE,IAAI,CAACO,WAAW,EAAE,IAAI,IAAI,CAACP,IAAI,EAAEc,QAAQ,EAAE,KAAKhB,KAAK,CAACE,IAAI,CAACc,QAAQ,EAAE;AAE1G,EAAA,MAAMkG,OAAO,GACX,IAAI,CAAC5E,KAAK,CAAC7B,WAAW,EAAE,KAAKT,KAAK,CAACE,IAAI,CAACO,WAAW,EAAE,IAAI,IAAI,CAAC6B,KAAK,CAACtB,QAAQ,EAAE,KAAKhB,KAAK,CAACE,IAAI,CAACc,QAAQ,EAAE;EAE1G,MAAMmG,QAAQ,GACX,IAAI,CAAC5G,OAAO,KACVP,KAAK,CAACE,IAAI,CAACO,WAAW,EAAE,GAAG,IAAI,CAACF,OAAO,CAACE,WAAW,EAAE,IACnDT,KAAK,CAACE,IAAI,CAACO,WAAW,EAAE,KAAK,IAAI,CAACF,OAAO,CAACE,WAAW,EAAE,IACtDT,KAAK,CAACE,IAAI,CAACc,QAAQ,EAAE,GAAG,IAAI,CAACT,OAAO,CAACS,QAAQ,EAAG,CAAC,IACtD,IAAI,CAACR,OAAO,KACVR,KAAK,CAACE,IAAI,CAACO,WAAW,EAAE,GAAG,IAAI,CAACD,OAAO,CAACC,WAAW,EAAE,IACnDT,KAAK,CAACE,IAAI,CAACO,WAAW,EAAE,KAAK,IAAI,CAACD,OAAO,CAACC,WAAW,EAAE,IACtDT,KAAK,CAACE,IAAI,CAACc,QAAQ,EAAE,GAAG,IAAI,CAACR,OAAO,CAACQ,QAAQ,EAAG,CAAE;EAE1D,MAAMyE,EAAE,GAAG,CAAA,MAAA,EAASzF,KAAK,CAACE,IAAI,CAACc,QAAQ,EAAE,CAAA,CAAE;EAE3C,OAAOqF,IAAI,CAAA,2BAAA,EAA8BiB,QAAQ,CAAC;IAAEJ,OAAO;IAAEF,QAAQ;AAAEC,IAAAA;AAAM,GAAE,CAAC,CAAA,WAAA,EAEtExB,EAAE,CAAA,uCAAA,EAGIwB,MAAM,GAAG,GAAG,GAAG,IAAI,iBACjBjH,KAAK,CAACE,IAAI,CAACqH,WAAW,EAAE,CAAA,iBAAA,EACrBC,SAAS,CAACL,QAAQ,IAAIM,SAAS,CAAC,mBACjCD,SAAS,CAACN,OAAO,GAAG,MAAM,GAAGO,SAAS,CAAC,CAAA,gBAAA,EACvCT,QAAQ,CAAA,UAAA,EACdN,sBAAA,CAAA,IAAI,EAAAgE,6BAAA,EAAA,GAAA,EAAAC,mCAAA,CAAiB,CAAA,YAAA,EACnBjE,sBAAA,CAAA,IAAI,EAAAgE,6BAAA,EAAA,GAAA,EAAAE,qCAAA,CAAmB,CAAA,0CAAA,EAEOnF,EAAE,gEACAA,EAAE,CAAA,kBAAA,EAAqB0B,QAAQ,CAAA,6DAAA,EAChC1B,EAAE,CAAA,aAAA,EAAgB0B,QAAQ,CAAA,sEAAA,EAErCnH,KAAK,CAAC4F,IAAI,CAAA,iCAAA,EACf5F,KAAK,CAAC0F,MAAM,CAAA,kBAAA,CAErC;AACR,CAAC;mFAGgBqC,CAAQ,EAAA;AACvB,EAAA,MAAMC,IAAI,GAAGD,CAAC,CAACE,aAA4B;AAC3C,EAAA,IAAID,IAAI,CAACE,YAAY,KAAK,MAAM,IAAI,CAACF,IAAI,CAACG,OAAO,CAAC,OAAO,CAAC,EAAE;EAE5D,IAAI,CAACtG,UAAU,GAAGG,SAAS,CAAC,IAAI7B,IAAI,CAAC6H,IAAI,CAACG,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC5H,OAAO,EAAE,IAAI,CAACC,OAAO,CAAC;AACxF,EAAA,IAAI,CAACyC,aAAa,CAAC,IAAIC,KAAK,CAAC,QAAQ,EAAE;AAAEC,IAAAA,OAAO,EAAE;AAAK,GAAE,CAAC,CAAC;AAC7D,CAAC;uFAGkB4E,CAAgB,EAAA;AACjC,EAAA,IAAIlG,UAAU,GAAG,IAAI,CAACA,UAAU;EAChC,QAAQkG,CAAC,CAACK,GAAG;AACX,IAAA,KAAK,GAAG;AACR,IAAA,KAAK,OAAO;MACVL,CAAC,CAACM,cAAc,EAAE;AACjBN,MAAAA,CAAC,CAACE,aAA6B,CAACK,KAAK,EAAE;AACxC,MAAA;AAEF,IAAA,KAAK,WAAW;AAChB,IAAA,KAAK,MAAM;AACTzG,MAAAA,UAAU,GAAGX,iBAAiB,CAACW,UAAU,EAAE0G,iBAAiB,CAACrB,OAAO,KAAK,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC;AACxF,MAAA;AAEF,IAAA,KAAK,YAAY;AACjB,IAAA,KAAK,OAAO;AACVrF,MAAAA,UAAU,GAAGX,iBAAiB,CAACW,UAAU,EAAE0G,iBAAiB,CAACrB,OAAO,KAAK,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;AACxF,MAAA;AAEF,IAAA,KAAK,SAAS;AACd,IAAA,KAAK,IAAI;AACPrF,MAAAA,UAAU,GAAGX,iBAAiB,CAACW,UAAU,EAAE,EAAE,CAAC;AAC9C,MAAA;AAEF,IAAA,KAAK,WAAW;AAChB,IAAA,KAAK,MAAM;AACTA,MAAAA,UAAU,GAAGX,iBAAiB,CAACW,UAAU,EAAE,CAAC,CAAC;AAC7C,MAAA;AAEF,IAAA,KAAK,MAAM;MACTA,UAAU,GAAGX,iBAAiB,CAACW,UAAU,EAAE,CAACA,UAAU,CAACb,QAAQ,EAAE,CAAC;AAClE,MAAA;AAEF,IAAA,KAAK,KAAK;AACRa,MAAAA,UAAU,GAAGX,iBAAiB,CAACW,UAAU,EAAE,EAAE,GAAGA,UAAU,CAACb,QAAQ,EAAE,CAAC;AACtE,MAAA;AAEF,IAAA,KAAK,QAAQ;AACXa,MAAAA,UAAU,GAAGR,gBAAgB,CAACQ,UAAU,EAAEkG,CAAC,CAACS,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC;AAC9D,MAAA;AAEF,IAAA,KAAK,UAAU;AACb3G,MAAAA,UAAU,GAAGR,gBAAgB,CAACQ,UAAU,EAAEkG,CAAC,CAACS,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;AAC5D,MAAA;AAEF,IAAA;AACE,MAAA;AACJ;EAEAT,CAAC,CAACM,cAAc,EAAE;AAClB,EAAA,IAAI,CAACzF,iBAAiB,CAACf,UAAU,CAAC;AACpC,CAAC;AAvKD;AACgB2I,kBAAA,CAAApH,MAAM,GAAmB,CACvCjB,uBAAuB,CAACiB,MAAM,EAC9BC,GAAG,CAAA,+JAAA,EAciDC,WAAW,CAAC4F,SAAS,CAACC,QAAQ,CAACO,IAAI,CAACC,MAAM,CAACL,QAAQ,CAAA,qDAAA,EAC/ChG,WAAW,CAAC4F,SAAS,CAACC,QAAQ,CAACO,IAAI,CAACC,MAAM,CAACJ,UAAU,CAAA,qDAAA,EACrDjG,WAAW,CAAC4F,SAAS,CAACC,QAAQ,CAACO,IAAI,CAACC,MAAM,CAACH,UAAU,CAAA,qDAAA,EACrDlG,WAAW,CAAC4F,SAAS,CAACC,QAAQ,CAACO,IAAI,CAACC,MAAM,CAACF,QAAQ,CAAA,IAAA,CAE1G,CArBmB;AAFXe,kBAAkB,GAAA1G,UAAA,CAAA,CAD9BkG,aAAa,CAAC,eAAe,CAAC,CAClB,EAAAQ,kBAAkB,CAyK9B;;ACjMD;;;;;;;AAOG;;AAuBH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyEG;AAEI,IAAMK,kBAAkB,GAAxB,MAAMA,kBAAmB,SAAQzI,UAAU,CAAA;AAA3CC,EAAAA,WAAAA,GAAA;;;AAkHL;AAAgByI,IAAAA,sCAAA,CAAAC,GAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AAChB;AAAiC,IAAA,IAAA,CAAAC,MAAM,GAAG,IAAI7K,IAAI,EAAE;AACpD;IAAiC,IAAA,CAAA8K,WAAW,GAAiB,OAAO;AACpE;AAAiC,IAAA,IAAA,CAAAC,WAAW,GAAS,IAAI/K,IAAI,EAAE;AAI/D;;;AAGG;IACoC,IAAA,CAAAgL,SAAS,GAAiB,OAAO;AAExE;;;AAGG;IACqC,IAAA,CAAAjL,IAAI,GAAgB,IAAI;AAEhE;;;AAGG;IAC4D,IAAA,CAAAkL,OAAO,GAAgB,IAAI;AAE1F;;;AAGG;IAC4D,IAAA,CAAA7K,OAAO,GAAgB,IAAI;AAE1F;;;AAGG;IAC4D,IAAA,CAAAC,OAAO,GAAgB,IAAI;AAE1F;;;AAGG;IAC+D,IAAA,CAAA+D,UAAU,GAAgB,IAAI;AAEhG;;;AAGG;IAC6D,IAAA,CAAAC,QAAQ,GAAgB,IAAI;AAE5F;;;AAGG;IAC6B,IAAA,CAAAC,aAAa,GAAqC,IAAI;AAEtF;;;AAGG;IAC6B,IAAA,CAAAC,YAAY,GAAqC,IAAI;AAErF;;;AAGG;IAC8C,IAAA,CAAA2G,kBAAkB,GAAG,gBAAgB;AAEtF;;;AAGG;IAC6C,IAAA,CAAAC,iBAAiB,GAAG,eAAe;AAEnF;;;AAGG;IACmD,IAAA,CAAAC,sBAAsB,GAAG,mBAAmB;AAElG;;;AAGG;IAC0C,IAAA,CAAAC,cAAc,GAAG,YAAY;AAE1E;;;AAGG;IACyC,IAAA,CAAAC,aAAa,GAAG,WAAW;AAEvE;;;AAGG;IAC+C,IAAA,CAAAC,kBAAkB,GAAG,eAAe;AAmaxF,EAAA;AAjaE;EACA,IAAIC,WAAWA,GAAA;IACb,QAAQ,IAAI,CAACV,WAAW;AACtB,MAAA,KAAK,OAAO;QACV,OAAO,IAAIhG,IAAI,CAACC,cAAc,CAACC,SAAS,CAACC,QAAQ,EAAE;AAAEpF,UAAAA,KAAK,EAAE,OAAO;AAAED,UAAAA,IAAI,EAAE;AAAS,SAAE,CAAC,CAAC4F,MAAM,CAC5F,IAAI,CAACuF,WAAW,CACjB;AAEH,MAAA,KAAK,MAAM;QACT,OAAO,IAAIjG,IAAI,CAACC,cAAc,CAACC,SAAS,CAACC,QAAQ,EAAE;AAAErF,UAAAA,IAAI,EAAE;SAAW,CAAC,CAAC4F,MAAM,CAC5E,IAAIxF,IAAI,CAAC,IAAI,CAAC+K,WAAW,CAACzK,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAC/C;AAEH,MAAA,KAAK,YAAY;QACf,OAAO,IAAIwE,IAAI,CAACC,cAAc,CAACC,SAAS,CAACC,QAAQ,EAAE;AAAErF,UAAAA,IAAI,EAAE;SAAW,CAAC,CAAC6L,WAAW,CACjF,IAAIzL,IAAI,CAAC2B,aAAa,CAAC,IAAI,CAACoJ,WAAW,EAAE,IAAI,CAAC3K,OAAO,EAAE,IAAI,CAACC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC3E,IAAIL,IAAI,CAAC4B,aAAa,CAAC,IAAI,CAACmJ,WAAW,EAAE,IAAI,CAAC3K,OAAO,EAAE,IAAI,CAACC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAC5E;AACL;AACF,EAAA;AAEA;EACA,IAAIqL,qBAAqBA,GAAA;AACvB,IAAA,IAAI,CAAC,IAAI,CAACtL,OAAO,EAAE,OAAO,IAAI;IAC9B,QAAQ,IAAI,CAAC0K,WAAW;AACtB,MAAA,KAAK,OAAO;QACV,OAAO,IAAI9K,IAAI,CAAC,IAAI,CAAC+K,WAAW,CAACzK,WAAW,EAAE,EAAE,IAAI,CAACyK,WAAW,CAAClK,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAACT,OAAO;AAEjG,MAAA,KAAK,MAAM;QACT,OAAO,IAAIJ,IAAI,CAAC,IAAI,CAAC+K,WAAW,CAACzK,WAAW,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAACF,OAAO;AAE5E,MAAA,KAAK,YAAY;QACf,OAAO,IAAIJ,IAAI,CAAC2B,aAAa,CAAC,IAAI,CAACoJ,WAAW,EAAE,IAAI,CAAC3K,OAAO,EAAE,IAAI,CAACC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAACD,OAAO;AAC3G;AACF,EAAA;AAEA;EACA,IAAIuL,iBAAiBA,GAAA;AACnB,IAAA,IAAI,CAAC,IAAI,CAACtL,OAAO,EAAE,OAAO,IAAI;IAC9B,QAAQ,IAAI,CAACyK,WAAW;AACtB,MAAA,KAAK,OAAO;QACV,OAAO,IAAI9K,IAAI,CAAC,IAAI,CAAC+K,WAAW,CAACzK,WAAW,EAAE,EAAE,IAAI,CAACyK,WAAW,CAAClK,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAACR,OAAO;AAErG,MAAA,KAAK,MAAM;QACT,OAAO,IAAIL,IAAI,CAAC,IAAI,CAAC+K,WAAW,CAACzK,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAACD,OAAO;AAE3E,MAAA,KAAK,YAAY;QACf,OAAO,IAAIL,IAAI,CAAC4B,aAAa,CAAC,IAAI,CAACmJ,WAAW,EAAE,IAAI,CAAC3K,OAAO,EAAE,IAAI,CAACC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAACA,OAAO;AAC3G;AACF,EAAA;AAEA;;;AAGG;EACH,MAAM+B,eAAeA,GAAA;IACnB,IAAI,IAAI,CAACC,eAAe,EAAE;MACxB,MAAM,IAAI,CAACC,cAAc;AAC3B,IAAA;AACA,IAAA,MAAM,IAAI,CAACsJ,KAAK,EAAExJ,eAAe,EAAE;AACrC,EAAA;AAEA;AACAyJ,EAAAA,eAAeA,GAAA;AACb,IAAA,IAAI,CAAChB,MAAM,GAAG,IAAI7K,IAAI,EAAE;AAC1B,EAAA;AAEA;;;AAGG;EACH,MAAM8L,kBAAkBA,GAAA;AACtB,IAAA,IAAI,CAAC,IAAI,CAACJ,qBAAqB,EAAE;IACjC,IAAIK,oBAAoB,EAAE,EAAE;MAC1B,IAAI,CAAChB,WAAW,GAAGxE,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAAC,qCAAA,CAAmB,CAAAvF,IAAA,CAAvB,IAAI,EAAoB,IAAI,CAACoE,WAAW,CAAC;AAC5D,MAAA;AACF,IAAA;AAEA,IAAA,MAAMvE,sBAAA,CAAA,IAAI,EAAAoE,sCAAA,EAAA,GAAA,CAAoB;AAE9B,IAAA,MAAMuB,KAAK,GAAG,CAAC,IAAI,IAAI,CAACtD,UAAU,EAAED,gBAAgB,CAAc,CAAA,KAAA,EAAQ,IAAI,CAACmC,WAAW,CAAA,MAAA,CAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3G,IAAA,IAAIoB,KAAK,CAACnG,MAAM,IAAI,CAAC,EAAE;IAEvBoG,sBAAA,CAAA,IAAI,0CAAuB,IAAIC,OAAO,CAAQC,OAAO,IAAI;MACvDH,KAAK,CAAC,CAAC,CAAC,CAACI,gBAAgB,CACvB,eAAe,EACf,MAAK;QACH,IAAI,CAACvB,WAAW,GAAGxE,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAAC,qCAAA,CAAmB,CAAAvF,IAAA,CAAvB,IAAI,EAAoB,IAAI,CAACoE,WAAW,CAAC;AAC5DoB,QAAAA,KAAK,CAACrD,OAAO,CAAE5C,CAAC,IAAKA,CAAC,CAACsC,SAAS,CAACC,GAAG,CAAC,YAAY,CAAC,CAAC;QACnD0D,KAAK,CAAC,CAAC,CAAC,CAAC3D,SAAS,CAACO,MAAM,CAAC,OAAO,CAAC;QAClCoD,KAAK,CAAC,CAAC,CAAC,CAAC3D,SAAS,CAACC,GAAG,CAAC,QAAQ,CAAC;AAChC+D,QAAAA,UAAU,CAAC,MAAK;AACdL,UAAAA,KAAK,CAACrD,OAAO,CAAE5C,CAAC,IAAKA,CAAC,CAACsC,SAAS,CAACO,MAAM,CAAC,YAAY,CAAC,CAAC;AACtDuD,UAAAA,OAAO,EAAE;AACX,QAAA,CAAC,CAAC;AACJ,MAAA,CAAC,EACD;AAAEG,QAAAA,IAAI,EAAE;AAAI,OAAE,CACf;IACH,CAAC,CAAC,MAAA;AAEF,IAAA,IAAI,CAACC,KAAK,CAAC/J,KAAK,CAACgK,QAAQ,GAAG,QAAQ;IACpCR,KAAK,CAAC,CAAC,CAAC,CAAC3D,SAAS,CAACC,GAAG,CAAC,OAAO,CAAC;IAC/B0D,KAAK,CAAC,CAAC,CAAC,CAAC3D,SAAS,CAACO,MAAM,CAAC,QAAQ,CAAC;AAEnC,IAAA,MAAMvC,sBAAA,CAAA,IAAI,EAAAoE,sCAAA,EAAA,GAAA,CAAoB;AAC9B,IAAA,IAAI,CAAC8B,KAAK,CAAC/J,KAAK,CAACgK,QAAQ,GAAG,EAAE;AAChC,EAAA;AAEA;;;AAGG;EACH,MAAMC,cAAcA,GAAA;AAClB,IAAA,IAAI,CAAC,IAAI,CAAChB,iBAAiB,EAAE;IAC7B,IAAII,oBAAoB,EAAE,EAAE;MAC1B,IAAI,CAAChB,WAAW,GAAGxE,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAAY,iCAAA,CAAe,CAAAlG,IAAA,CAAnB,IAAI,EAAgB,IAAI,CAACoE,WAAW,CAAC;AACxD,MAAA;AACF,IAAA;AAEA,IAAA,MAAMvE,sBAAA,CAAA,IAAI,EAAAoE,sCAAA,EAAA,GAAA,CAAoB;AAE9B,IAAA,MAAMuB,KAAK,GAAG,CAAC,IAAI,IAAI,CAACtD,UAAU,EAAED,gBAAgB,CAAc,CAAA,KAAA,EAAQ,IAAI,CAACmC,WAAW,CAAA,MAAA,CAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3G,IAAA,IAAIoB,KAAK,CAACnG,MAAM,IAAI,CAAC,EAAE;IAEvBoG,sBAAA,CAAA,IAAI,0CAAuB,IAAIC,OAAO,CAAQC,OAAO,IAAI;MACvDH,KAAK,CAAC,CAAC,CAAC,CAACI,gBAAgB,CACvB,eAAe,EACf,MAAK;QACH,IAAI,CAACvB,WAAW,GAAGxE,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAAY,iCAAA,CAAe,CAAAlG,IAAA,CAAnB,IAAI,EAAgB,IAAI,CAACoE,WAAW,CAAC;AACxDoB,QAAAA,KAAK,CAACrD,OAAO,CAAE5C,CAAC,IAAKA,CAAC,CAACsC,SAAS,CAACC,GAAG,CAAC,YAAY,CAAC,CAAC;QACnD0D,KAAK,CAAC,CAAC,CAAC,CAAC3D,SAAS,CAACO,MAAM,CAAC,QAAQ,CAAC;QACnCoD,KAAK,CAAC,CAAC,CAAC,CAAC3D,SAAS,CAACC,GAAG,CAAC,OAAO,CAAC;AAC/B+D,QAAAA,UAAU,CAAC,MAAK;AACdL,UAAAA,KAAK,CAACrD,OAAO,CAAE5C,CAAC,IAAKA,CAAC,CAACsC,SAAS,CAACO,MAAM,CAAC,YAAY,CAAC,CAAC;AACtDuD,UAAAA,OAAO,EAAE;AACX,QAAA,CAAC,CAAC;AACJ,MAAA,CAAC,EACD;AAAEG,QAAAA,IAAI,EAAE;AAAI,OAAE,CACf;IACH,CAAC,CAAC,MAAA;AAEF,IAAA,IAAI,CAACC,KAAK,CAAC/J,KAAK,CAACgK,QAAQ,GAAG,QAAQ;IACpCR,KAAK,CAAC,CAAC,CAAC,CAAC3D,SAAS,CAACC,GAAG,CAAC,QAAQ,CAAC;IAChC0D,KAAK,CAAC,CAAC,CAAC,CAAC3D,SAAS,CAACO,MAAM,CAAC,OAAO,CAAC;AAElC,IAAA,MAAMvC,sBAAA,CAAA,IAAI,EAAAoE,sCAAA,EAAA,GAAA,CAAoB;AAC9B,IAAA,IAAI,CAAC8B,KAAK,CAAC/J,KAAK,CAACgK,QAAQ,GAAG,EAAE;AAChC,EAAA;AAEA;;;AAGG;EACH,MAAMG,YAAYA,GAAA;AAChB,IAAA,MAAMtG,sBAAA,CAAA,IAAI,EAAAoE,sCAAA,EAAA,GAAA,CAAoB;IAC9B,IAAI,CAACG,WAAW,GAAG,IAAI,CAACA,WAAW,KAAK,OAAO,GAAG,YAAY,GAAG,OAAO;AACxE,IAAA,MAAM,IAAI,CAAC1I,eAAe,EAAE;AAC9B,EAAA;AAEA;EACmB0K,UAAUA,CAACC,iBAAuC,EAAA;AACnE,IAAA,KAAK,CAACD,UAAU,CAACC,iBAAiB,CAAC;AAEnC,IAAA,IAAIA,iBAAiB,CAACC,GAAG,CAAC,MAAM,CAAC,EAAE;AACjC,MAAA,IAAI,CAACjC,WAAW,GAAG,IAAI/K,IAAI,CAAC,IAAI,CAACD,IAAI,IAAI,IAAI,CAAC8K,MAAM,CAAC;AACvD,IAAA;AACA,IAAA,IAAIkC,iBAAiB,CAACC,GAAG,CAAC,SAAS,CAAC,EAAE;AACpC,MAAA,IAAI,CAACjC,WAAW,GAAG,IAAI/K,IAAI,CAAC,IAAI,CAACiL,OAAO,IAAI,IAAI,CAAClL,IAAI,IAAI,IAAI,CAAC8K,MAAM,CAAC;AACvE,IAAA;IACA,IAAIkC,iBAAiB,CAACC,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC5I,UAAU,EAAE;MAC1D,IAAI,CAAC2G,WAAW,GAAG,IAAI/K,IAAI,CAAC,IAAI,CAACoE,UAAU,CAAC;AAC5C,MAAA,IAAI,CAAC2I,iBAAiB,CAACC,GAAG,CAAC,MAAM,CAAC,EAAE;QAClC,IAAI,CAACjN,IAAI,GAAG,IAAIC,IAAI,CAAC,IAAI,CAACoE,UAAU,CAAC;AACvC,MAAA;AACF,IAAA;IACA,IAAI2I,iBAAiB,CAACC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC3I,QAAQ,EAAE;MACtD,IAAI,CAAC0G,WAAW,GAAG,IAAI/K,IAAI,CAAC,IAAI,CAACqE,QAAQ,CAAC;AAC1C,MAAA,IAAI,CAAC0I,iBAAiB,CAACC,GAAG,CAAC,MAAM,CAAC,EAAE;QAClC,IAAI,CAACjN,IAAI,GAAG,IAAIC,IAAI,CAAC,IAAI,CAACqE,QAAQ,CAAC;AACrC,MAAA;AACF,IAAA;AACA,IAAA,IAAI0I,iBAAiB,CAACC,GAAG,CAAC,WAAW,CAAC,EAAE;AACtC,MAAA,IAAI,CAAClC,WAAW,GAAG,IAAI,CAACE,SAAS;AACnC,IAAA;AACF,EAAA;AAEA;EACmBiC,OAAOA,CAACC,kBAAwC,EAAA;AACjE,IAAA,KAAK,CAACD,OAAO,CAACC,kBAAkB,CAAC;AAEjC,IAAA,IAAI,IAAI,CAACtB,KAAK,YAAY1H,mBAAmB,EAAE;AAC7C,MAAA,IAAIgJ,kBAAkB,CAACF,GAAG,CAAC,cAAc,CAAC,IAAIE,kBAAkB,CAACF,GAAG,CAAC,eAAe,CAAC,EAAE;QACrF,IAAI,CAACpE,UAAU,EAAED,gBAAgB,CAAC,gBAAgB,CAAC,CAACE,OAAO,CAAE5C,CAAC,IAAI;AAChEA,UAAAA,CAAC,CAAC1B,YAAY,GAAG,IAAI,CAACA,YAAY;AAClC0B,UAAAA,CAAC,CAAC3B,aAAa,GAAG,IAAI,CAACA,aAAa;AACtC,QAAA,CAAC,CAAC;AACJ,MAAA;AACF,IAAA;AACF,EAAA;AAEA;AACmBE,EAAAA,MAAMA,GAAA;IACvB,OAAO0B,IAAI,yCACaK,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAAmB,gCAAA,CAAc,CAAAzG,IAAA,CAAlB,IAAI,CAAgB,2BACvB,IAAI,CAACoE,WAAW,CAAA,8BAAA,EAE7BvE,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAAoB,8BAAA,CAAY,CAAA1G,IAAA,CAAhB,IAAI,EAAa,YAAY,EAAE,EAAE,CAAC,CAAA,EAAGH,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAAoB,8BAAA,CAAY,CAAA1G,IAAA,CAAhB,IAAI,EAAa,YAAY,EAAE,CAAC,CAAC,CAAA,EAAGH,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAAoB,8BAAA,CAAY,CAAA1G,IAAA,CAAhB,IAAI,EAAa,YAAY,EAAE,CAAC,CAAC,+BAG1GH,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAAoB,8BAAA,CAAY,CAAA1G,IAAA,CAAhB,IAAI,EAAa,MAAM,EAAE,EAAE,CAAC,CAAA,EAAGH,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAAoB,8BAAA,CAAY,CAAA1G,IAAA,CAAhB,IAAI,EAAa,MAAM,EAAE,CAAC,CAAC,CAAA,EAAGH,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAAoB,8BAAA,CAAY,CAAA1G,IAAA,CAAhB,IAAI,EAAa,MAAM,EAAE,CAAC,CAAC,CAAA,6BAAA,EAGxFH,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAAoB,8BAAA,CAAY,CAAA1G,IAAA,CAAhB,IAAI,EAAa,OAAO,EAAE,EAAE,CAAC,CAAA,EAAGH,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAAoB,8BAAA,CAAY,CAAA1G,IAAA,CAAhB,IAAI,EAAa,OAAO,EAAE,CAAC,CAAC,CAAA,EAAGH,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAAoB,8BAAA,CAAY,CAAA1G,IAAA,CAAhB,IAAI,EAAa,OAAO,EAAE,CAAC,CAAC,CAAA,kBAAA,CAG5F;AACT,EAAA;;;;;EAIE,OAAOR,IAAI,CAAA,wCAAA,EACa,IAAI,CAAC2G,YAAY,CAAA,EAAA,EACnC,IAAI,CAACrB,WAAW,CAAA,aAAA,EAEPrE,QAAQ,CAAC;AAAEkG,IAAAA,MAAM,EAAE,IAAI,CAACvC,WAAW,KAAK;AAAO,GAAE,CAAC,CAAA,sLAAA,EAUhD,CAAC,IAAI,CAACY,qBAAqB,aAC9B,IAAI,CAACI,kBAAkB,CAAA,cAAA,EACnB,IAAI,CAAChB,WAAW,KAAK,OAAO,GACtC,IAAI,CAACI,kBAAkB,GACvB,IAAI,CAACJ,WAAW,KAAK,MAAM,GACzB,IAAI,CAACK,iBAAiB,GACtB,IAAI,CAACC,sBAAsB,CAAA,EAAA,EAE/BhD,iBAAiB,CAACrB,OAAO,KAAK,KAAK,GACjCb,IAAI,2HAEG,GACPA,IAAI,2HAEG,CAAA,8CAAA,EAGE,CAAC,IAAI,CAACyF,iBAAiB,aAC1B,IAAI,CAACgB,cAAc,CAAA,cAAA,EACf,IAAI,CAAC7B,WAAW,KAAK,OAAO,GACtC,IAAI,CAACO,cAAc,GACnB,IAAI,CAACP,WAAW,KAAK,MAAM,GACzB,IAAI,CAACQ,aAAa,GAClB,IAAI,CAACC,kBAAkB,CAAA,EAAA,EAE3BnD,iBAAiB,CAACrB,OAAO,KAAK,KAAK,GACjCb,IAAI,2HAEG,GACPA,IAAI,2HAEG,CAAA,wBAAA,CAER;AACT,CAAC;AAGWkH,8BAAA,GAAA,SAAAA,8BAAAA,CAAAE,IAAkB,EAAEC,MAAkB,EAAA;EAChD,MAAM7L,UAAU,GACd6L,MAAM,GAAG,CAAC,GAAGhH,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAAC,qCAAA,CAAmB,CAAAvF,IAAA,CAAvB,IAAI,EAAoB4G,IAAI,CAAC,GAAGC,MAAM,GAAG,CAAC,GAAGhH,sBAAA,CAAA,IAAI,wEAAe,CAAAG,IAAA,CAAnB,IAAI,EAAgB4G,IAAI,CAAC,GAAG,IAAItN,IAAI,CAAC,IAAI,CAAC+K,WAAW,CAAC;AAElH,EAAA,QAAQuC,IAAI;AACV,IAAA,KAAK,OAAO;MACV,OAAOpH,IAAI,CAAA,4BAAA,EACKiB,QAAQ,CAAC;QACrBqG,MAAM,EAAED,MAAM,GAAG,CAAC;QAClBE,KAAK,EAAEF,MAAM,GAAG,CAAC;QACjBzG,MAAM,EAAEwG,IAAI,KAAK,IAAI,CAACxC,WAAW,IAAIyC,MAAM,KAAK;OACjD,CAAC,CAAA,UAAA,EACQA,MAAM,KAAK,CAAC,YACb,IAAI,CAAC1C,MAAM,CAACzD,WAAW,EAAE,CAAA,QAAA,EAC1BC,SAAS,CAAC,IAAI,CAACtH,IAAI,EAAEqH,WAAW,EAAE,CAAC,CAAA,eAAA,EAC5B1F,UAAU,CAAC0F,WAAW,EAAE,CAAA,YAAA,EAC3BC,SAAS,CAAC,IAAI,CAACjH,OAAO,EAAEgH,WAAW,EAAE,CAAC,CAAA,YAAA,EACtCC,SAAS,CAAC,IAAI,CAAChH,OAAO,EAAE+G,WAAW,EAAE,CAAC,CAAA,eAAA,EACnCC,SAAS,CAAC,IAAI,CAACjD,UAAU,EAAEgD,WAAW,EAAE,CAAC,CAAA,aAAA,EAC3CC,SAAS,CAAC,IAAI,CAAChD,QAAQ,EAAE+C,WAAW,EAAE,CAAC,CAAA,kBAAA,EAClCmG,MAAM,KAAK,CAAC,GAAGhH,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAA0B,sCAAA,CAAoB,GAAGpG,SAAS,CAAA,WAAA,EAC1DiG,MAAM,KAAK,CAAC,GAAGhH,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAA2B,oCAAA,CAAkB,GAAGrG,SAAS,CAAA,mBAAA,CAE5C;AAEpB,IAAA,KAAK,MAAM;MACT,OAAOpB,IAAI,CAAA,2BAAA,EACKiB,QAAQ,CAAC;QACrBqG,MAAM,EAAED,MAAM,GAAG,CAAC;QAClBE,KAAK,EAAEF,MAAM,GAAG,CAAC;QACjBzG,MAAM,EAAEwG,IAAI,KAAK,IAAI,CAACxC,WAAW,IAAIyC,MAAM,KAAK;OACjD,CAAC,CAAA,UAAA,EACQA,MAAM,KAAK,CAAC,CAAA,SAAA,EACb,IAAI,CAAC1C,MAAM,CAACzD,WAAW,EAAE,CAAA,QAAA,EAC1BC,SAAS,CAAC,IAAI,CAACtH,IAAI,EAAEqH,WAAW,EAAE,CAAC,CAAA,eAAA,EAC5B1F,UAAU,CAAC0F,WAAW,EAAE,CAAA,YAAA,EAC3BC,SAAS,CAAC,IAAI,CAACjH,OAAO,EAAEgH,WAAW,EAAE,CAAC,CAAA,YAAA,EACtCC,SAAS,CAAC,IAAI,CAAChH,OAAO,EAAE+G,WAAW,EAAE,CAAC,CAAA,kBAAA,EAChCmG,MAAM,KAAK,CAAC,GAAGhH,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAA0B,sCAAA,CAAoB,GAAGpG,SAAS,CAAA,WAAA,EAC1DiG,MAAM,KAAK,CAAC,GAAGhH,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAA4B,qCAAA,CAAmB,GAAGtG,SAAS,CAAA,kBAAA,CAC7C;AAEpB,IAAA,KAAK,YAAY;MACf,OAAOpB,IAAI,CAAA,iCAAA,EACKiB,QAAQ,CAAC;QACrBqG,MAAM,EAAED,MAAM,GAAG,CAAC;QAClBE,KAAK,EAAEF,MAAM,GAAG,CAAC;QACjBzG,MAAM,EAAEwG,IAAI,KAAK,IAAI,CAACxC,WAAW,IAAIyC,MAAM,KAAK;OACjD,CAAC,CAAA,UAAA,EACQA,MAAM,KAAK,CAAC,CAAA,SAAA,EACb,IAAI,CAAC1C,MAAM,CAACzD,WAAW,EAAE,CAAA,QAAA,EAC1BC,SAAS,CAAC,IAAI,CAACtH,IAAI,EAAEqH,WAAW,EAAE,CAAC,CAAA,eAAA,EAC5B1F,UAAU,CAAC0F,WAAW,EAAE,CAAA,YAAA,EAC3BC,SAAS,CAAC,IAAI,CAACjH,OAAO,EAAEgH,WAAW,EAAE,CAAC,CAAA,YAAA,EACtCC,SAAS,CAAC,IAAI,CAAChH,OAAO,EAAE+G,WAAW,EAAE,CAAC,CAAA,kBAAA,EAChCmG,MAAM,KAAK,CAAC,GAAGhH,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAA0B,sCAAA,CAAoB,GAAGpG,SAAS,CAAA,WAAA,EAC1DiG,MAAM,KAAK,CAAC,GAAGhH,sBAAA,CAAA,IAAI,EAAAyF,6BAAA,EAAA,GAAA,EAAA6B,oCAAA,CAAkB,GAAGvG,SAAS,CAAA,wBAAA,CAEvC;AAC3B;AACF,CAAC;qFAGiBM,CAAQ,EAAA;AACxB,EAAA,MAAMkG,SAAS,GAAGlG,CAAC,CAACE,aAAoC;EACxD,IAAI,CAACiD,WAAW,GAAG,IAAI/K,IAAI,CAAC8N,SAAS,CAACpM,UAAU,CAAC;AACjD,EAAA,IAAI,CAAC0C,UAAU,GAAG0J,SAAS,CAAC1J,UAAU;AACtC,EAAA,IAAI,CAACC,QAAQ,GAAGyJ,SAAS,CAACzJ,QAAQ;EAClC,IAAI,CAACtE,IAAI,GAAG,IAAIC,IAAI,CAAC,IAAI,CAAC+K,WAAW,CAAC;AACtC,EAAA,IAAI,CAACjI,aAAa,CAAC,IAAIC,KAAK,CAAC,QAAQ,EAAE;AAAEC,IAAAA,OAAO,EAAE;AAAI,GAAE,CAAC,CAAC;AAC5D,CAAC;;AAGD,qDAAyB4E,CAAQ,EAAA;EAC/B,IAAI,CAACmD,WAAW,GAAG,IAAI/K,IAAI,CAAE4H,CAAC,CAACE,aAAyC,CAACpG,UAAU,CAAC;EACpF,IAAI,CAACoJ,WAAW,GAAG,OAAO;EAC1B,IAAI,CAAC1I,eAAe,EAAE;AACxB,CAAC;qFAGiBwF,CAAQ,EAAA;EACxB,IAAI,CAACmD,WAAW,GAAG,IAAI/K,IAAI,CAAE4H,CAAC,CAACE,aAAyC,CAACpG,UAAU,CAAC;EACpF,IAAI,CAACoJ,WAAW,GAAG,MAAM;EACzB,IAAI,CAAC1I,eAAe,EAAE;AACxB,CAAC;;AAGD,sDAA0BwF,CAAQ,EAAA;AAChC,EAAA,IAAI,IAAI,CAACgE,KAAK,YAAY1H,mBAAmB,EAAE;AAC7C,IAAA,IAAI,CAAC0H,KAAK,CAACzH,uBAAuB,GAAG,KAAK;AAC5C,EAAA;EAEA,IAAI,CAAC4G,WAAW,GAAG,IAAI/K,IAAI,CAAE4H,CAAC,CAACE,aAAyC,CAACpG,UAAU,CAAC;AACpF,EAAA,MAAM,IAAI,CAACU,eAAe,EAAE;AAE5B,EAAA,IAAI,IAAI,CAACwJ,KAAK,YAAY1H,mBAAmB,EAAE;AAC7C,IAAA,IAAI,CAAC0H,KAAK,CAACzH,uBAAuB,GAAG,KAAK;AAC5C,EAAA;AACF,CAAC;uFAGkBmJ,IAAkB,EAAA;EACnC,MAAM5L,UAAU,GAAG,IAAI1B,IAAI,CAAC,IAAI,CAAC+K,WAAW,CAAC;AAC7C,EAAA,QAAQuC,IAAI;AACV,IAAA,KAAK,OAAO;AACV5L,MAAAA,UAAU,CAACqM,QAAQ,CAAC,IAAI,CAAChD,WAAW,CAAClK,QAAQ,EAAE,GAAG,CAAC,CAAC;AACpD,MAAA,OAAOa,UAAU,CAACb,QAAQ,EAAE,KAAK,IAAI,CAACkK,WAAW,CAAClK,QAAQ,EAAE,EAAE;QAC5Da,UAAU,CAAC+C,OAAO,CAAC/C,UAAU,CAACZ,OAAO,EAAE,GAAG,CAAC,CAAC;AAC9C,MAAA;AAEA,MAAA;AAEF,IAAA,KAAK,MAAM;AACTY,MAAAA,UAAU,CAACzB,WAAW,CAAC,IAAI,CAAC8K,WAAW,CAACzK,WAAW,EAAE,GAAG,CAAC,CAAC;AAC1D,MAAA;AAEF,IAAA,KAAK,YAAY;AAAE,MAAA;AACjBoB,QAAAA,UAAU,CAAC+C,OAAO,CAAC,CAAC,CAAC;AACrB/C,QAAAA,UAAU,CAACzB,WAAW,CAAC0B,aAAa,CAAC,IAAI,CAACoJ,WAAW,EAAE,IAAI,CAAC3K,OAAO,EAAE,IAAI,CAACC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzF,MAAA;AACF;AACA,EAAA,OAAOqB,UAAU;AACnB,CAAC;+EAGc4L,IAAkB,EAAA;EAC/B,MAAM5L,UAAU,GAAG,IAAI1B,IAAI,CAAC,IAAI,CAAC+K,WAAW,CAAC;AAC7C,EAAA,QAAQuC,IAAI;AACV,IAAA,KAAK,OAAO;AACV5L,MAAAA,UAAU,CAACqM,QAAQ,CAAC,IAAI,CAAChD,WAAW,CAAClK,QAAQ,EAAE,GAAG,CAAC,CAAC;AACpD,MAAA,OAAOa,UAAU,CAACb,QAAQ,EAAE,KAAK,IAAI,CAACkK,WAAW,CAAClK,QAAQ,EAAE,EAAE;QAC5Da,UAAU,CAAC+C,OAAO,CAAC/C,UAAU,CAACZ,OAAO,EAAE,GAAG,CAAC,CAAC;AAC9C,MAAA;AACA,MAAA;AAEF,IAAA,KAAK,MAAM;AACTY,MAAAA,UAAU,CAACzB,WAAW,CAAC,IAAI,CAAC8K,WAAW,CAACzK,WAAW,EAAE,GAAG,CAAC,CAAC;AAC1D,MAAA;AAEF,IAAA,KAAK,YAAY;AACfoB,MAAAA,UAAU,CAAC+C,OAAO,CAAC,CAAC,CAAC;AACrB/C,MAAAA,UAAU,CAACzB,WAAW,CAAC2B,aAAa,CAAC,IAAI,CAACmJ,WAAW,EAAE,IAAI,CAAC3K,OAAO,EAAE,IAAI,CAACC,OAAO,CAAC,GAAG,CAAC,CAAC;AACvF,MAAA;AACJ;AACA,EAAA,OAAOqB,UAAU;AACnB,CAAC;AAlnBD;AACgBgJ,kBAAA,CAAAzH,MAAM,GAAmBC,GAAG,CAAA,ogBAAA,EAsBpCC,WAAW,CAACC,KAAK,CAAC4K,gBAAgB,CAAA,4FAAA,EAIlC7K,WAAW,CAACC,KAAK,CAAC4K,gBAAgB,CAAA,4FAAA,EAIlC7K,WAAW,CAACC,KAAK,CAAC4K,gBAAgB,CAAA,8FAAA,EAIlC7K,WAAW,CAACC,KAAK,CAAC4K,gBAAgB,CAAA,8DAAA,EAOd7K,WAAW,CAAC8K,MAAM,CAACC,MAAM,CAACC,WAAW,CAAA,kHAAA,EAS/CC,SAAS,CACrB,CAAA,oDAAA,EAAuDjL,WAAW,CAAC8K,MAAM,CAACI,QAAQ,CAACC,KAAK,CAAA,EAAA,EAAKnL,WAAW,CAAC8K,MAAM,CAACM,MAAM,CAACvF,QAAQ,CAAA;AACrE,gEAAA,EAAA7F,WAAW,CAAC8K,MAAM,CAACI,QAAQ,CAACC,KAAK,CAAA,EAAA,EAAKnL,WAAW,CAAC8K,MAAM,CAACM,MAAM,CAACvF,QAAQ,CAAA,eAAA,CAAiB,CACpJ,CAAA,4VAAA,EAwBaoF,SAAS,CACrB,CAAA,uDAAA,EAA0DjL,WAAW,CAAC8K,MAAM,CAACI,QAAQ,CAACC,KAAK,CAAA,EAAA,EAAKnL,WAAW,CAAC8K,MAAM,CAACM,MAAM,CAACvF,QAAQ,CAAA;AAC3E,6DAAA,EAAA7F,WAAW,CAAC8K,MAAM,CAACI,QAAQ,CAACC,KAAK,CAAA,EAAA,EAAKnL,WAAW,CAAC8K,MAAM,CAACM,MAAM,CAACvF,QAAQ,CAAA,eAAA,CAAiB,CACjJ,CAAA,wCAAA,EAGaoF,SAAS,CACrB,CAAA,qDAAA,EAAwDjL,WAAW,CAAC8K,MAAM,CAACI,QAAQ,CAACC,KAAK,CAAA,EAAA,EAAKnL,WAAW,CAAC8K,MAAM,CAACM,MAAM,CAACvF,QAAQ,CAAA,eAAA,CAAiB,CAClJ,CAAA,2iBAAA,CArFiB;AAiHWrF,UAAA,CAAA,CAAhB6K,KAAK,EAAE,CAA6B,EAAA9D,kBAAA,CAAA7G,SAAA,EAAA,QAAA,EAAA,MAAA,CAAA;AACpBF,UAAA,CAAA,CAAhB6K,KAAK,EAAE,CAA6C,EAAA9D,kBAAA,CAAA7G,SAAA,EAAA,aAAA,EAAA,MAAA,CAAA;AACpCF,UAAA,CAAA,CAAhB6K,KAAK,EAAE,CAAwC,EAAA9D,kBAAA,CAAA7G,SAAA,EAAA,aAAA,EAAA,MAAA,CAAA;AACbF,UAAA,CAAA,CAAlCC,KAAK,CAAC,SAAS,CAAC,CAAkD,EAAA8G,kBAAA,CAAA7G,SAAA,EAAA,OAAA,EAAA,MAAA,CAAA;AAClCF,UAAA,CAAA,CAAhCC,KAAK,CAAC,OAAO,CAAC,CAAsC,EAAA8G,kBAAA,CAAA7G,SAAA,EAAA,OAAA,EAAA,MAAA,CAAA;AAM9BF,UAAA,CAAA,CAAtCG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE;CAAc,CAAC,CAAmC,EAAAyG,kBAAA,CAAA7G,SAAA,EAAA,WAAA,EAAA,MAAA,CAAA;AAMjCF,UAAA,CAAA,CAAvCG,QAAQ,CAAC;AAAEC,EAAAA,SAAS,EAAEC;CAAe,CAAC,CAA0B,EAAA0G,kBAAA,CAAA7G,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA;AAMFF,UAAA,CAAA,CAA9DG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE,UAAU;AAAEF,EAAAA,SAAS,EAAEC;AAAa,CAAE,CAAC,CAA6B,EAAA0G,kBAAA,CAAA7G,SAAA,EAAA,SAAA,EAAA,MAAA,CAAA;AAM5BF,UAAA,CAAA,CAA9DG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE,UAAU;AAAEF,EAAAA,SAAS,EAAEC;AAAa,CAAE,CAAC,CAA6B,EAAA0G,kBAAA,CAAA7G,SAAA,EAAA,SAAA,EAAA,MAAA,CAAA;AAM5BF,UAAA,CAAA,CAA9DG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE,UAAU;AAAEF,EAAAA,SAAS,EAAEC;AAAa,CAAE,CAAC,CAA6B,EAAA0G,kBAAA,CAAA7G,SAAA,EAAA,SAAA,EAAA,MAAA,CAAA;AAMzBF,UAAA,CAAA,CAAjEG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE,aAAa;AAAEF,EAAAA,SAAS,EAAEC;AAAa,CAAE,CAAC,CAAgC,EAAA0G,kBAAA,CAAA7G,SAAA,EAAA,YAAA,EAAA,MAAA,CAAA;AAMjCF,UAAA,CAAA,CAA/DG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE,WAAW;AAAEF,EAAAA,SAAS,EAAEC;AAAa,CAAE,CAAC,CAA8B,EAAA0G,kBAAA,CAAA7G,SAAA,EAAA,UAAA,EAAA,MAAA,CAAA;AAM7DF,UAAA,CAAA,CAA/BG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE;CAAO,CAAC,CAAwD,EAAAyG,kBAAA,CAAA7G,SAAA,EAAA,eAAA,EAAA,MAAA,CAAA;AAMvDF,UAAA,CAAA,CAA/BG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE;CAAO,CAAC,CAAuD,EAAAyG,kBAAA,CAAA7G,SAAA,EAAA,cAAA,EAAA,MAAA,CAAA;AAMrCF,UAAA,CAAA,CAAhDG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE;CAAwB,CAAC,CAAuC,EAAAyG,kBAAA,CAAA7G,SAAA,EAAA,oBAAA,EAAA,MAAA,CAAA;AAMvCF,UAAA,CAAA,CAA/CG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE;CAAuB,CAAC,CAAqC,EAAAyG,kBAAA,CAAA7G,SAAA,EAAA,mBAAA,EAAA,MAAA,CAAA;AAM9BF,UAAA,CAAA,CAArDG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE;CAA6B,CAAC,CAA8C,EAAAyG,kBAAA,CAAA7G,SAAA,EAAA,wBAAA,EAAA,MAAA,CAAA;AAMtDF,UAAA,CAAA,CAA5CG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE;CAAoB,CAAC,CAA+B,EAAAyG,kBAAA,CAAA7G,SAAA,EAAA,gBAAA,EAAA,MAAA,CAAA;AAM/BF,UAAA,CAAA,CAA3CG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE;CAAmB,CAAC,CAA6B,EAAAyG,kBAAA,CAAA7G,SAAA,EAAA,eAAA,EAAA,MAAA,CAAA;AAMtBF,UAAA,CAAA,CAAjDG,QAAQ,CAAC;AAAEG,EAAAA,SAAS,EAAE;CAAyB,CAAC,CAAsC,EAAAyG,kBAAA,CAAA7G,SAAA,EAAA,oBAAA,EAAA,MAAA,CAAA;AAjN5E6G,kBAAkB,GAAA/G,UAAA,CAAA,CAD9BkG,aAAa,CAAC,cAAc,CAAC,CACjB,EAAAa,kBAAkB,CAonB9B;;;;"}
|