@k2b/ui 0.31.0 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base.css +2 -0
- package/dist/browser/actions/Dropdown.js +159 -99
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/FilterChip.js +113 -56
- package/dist/browser/actions/FilterChip.js.map +1 -1
- package/dist/browser/actions/ViewTabs.js +8 -0
- package/dist/browser/actions/ViewTabs.js.map +1 -1
- package/dist/browser/actions/filter-messages.js +26 -2
- package/dist/browser/actions/filter-messages.js.map +1 -1
- package/dist/browser/actions/menu-rows.js +23 -3
- package/dist/browser/actions/menu-rows.js.map +1 -1
- package/dist/browser/actions/menu-sheet.js +2 -7
- package/dist/browser/actions/menu-sheet.js.map +1 -1
- package/dist/browser/chat/ChatComposer.js +480 -403
- package/dist/browser/chat/ChatComposer.js.map +1 -1
- package/dist/browser/chat/chat-messages.js +14 -0
- package/dist/browser/chat/chat-messages.js.map +1 -1
- package/dist/browser/chat/index.js.map +1 -1
- package/dist/browser/content/Calendar.js +39 -29
- package/dist/browser/content/Calendar.js.map +1 -1
- package/dist/browser/content/CalendarDayView.js +159 -165
- package/dist/browser/content/CalendarDayView.js.map +1 -1
- package/dist/browser/content/Chart.js +104 -55
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/ChartExplorer.js +5 -3
- package/dist/browser/content/ChartExplorer.js.map +1 -1
- package/dist/browser/content/MapView.js +4 -4
- package/dist/browser/content/MapView.js.map +1 -1
- package/dist/browser/content/MessageRow.js +607 -343
- package/dist/browser/content/MessageRow.js.map +1 -1
- package/dist/browser/content/ReactionBar.js +17 -0
- package/dist/browser/content/ReactionBar.js.map +1 -1
- package/dist/browser/content/chart-inspection-core.js +4 -1
- package/dist/browser/content/chart-inspection-core.js.map +1 -1
- package/dist/browser/content/code-highlight.js +66 -0
- package/dist/browser/content/code-highlight.js.map +1 -1
- package/dist/browser/content/index.js +2 -1
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/content/map-view-live.js +47 -10
- package/dist/browser/content/map-view-live.js.map +1 -1
- package/dist/browser/content/map-view-types.js.map +1 -1
- package/dist/browser/feedback/dialog-core.js +6 -0
- package/dist/browser/feedback/dialog-core.js.map +1 -1
- package/dist/browser/inputs/AutocompleteEditor.js +167 -104
- package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
- package/dist/browser/inputs/RichSelect.js +1474 -0
- package/dist/browser/inputs/RichSelect.js.map +1 -0
- package/dist/browser/inputs/TextInput.js +99 -61
- package/dist/browser/inputs/TextInput.js.map +1 -1
- package/dist/browser/inputs/choice.js +19 -8
- package/dist/browser/inputs/choice.js.map +1 -1
- package/dist/browser/inputs/index.js +1 -0
- package/dist/browser/inputs/index.js.map +1 -1
- package/dist/browser/inputs/rich-select-messages.js +46 -0
- package/dist/browser/inputs/rich-select-messages.js.map +1 -0
- package/dist/browser/intl/shortcut-messages.js +4 -0
- package/dist/browser/intl/shortcut-messages.js.map +1 -1
- package/dist/browser/intl/shortcut.js +4 -0
- package/dist/browser/intl/shortcut.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +624 -565
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/layout/DetailPanel.js +10 -1
- package/dist/browser/layout/DetailPanel.js.map +1 -1
- package/dist/browser/layout/MobileShell.js +213 -38
- package/dist/browser/layout/MobileShell.js.map +1 -1
- package/dist/browser/layout/Navigation.js +14 -5
- package/dist/browser/layout/Navigation.js.map +1 -1
- package/dist/browser/layout/PageTitle.js +9 -3
- package/dist/browser/layout/PageTitle.js.map +1 -1
- package/dist/browser/layout/ResizeSeparator.js +8 -2
- package/dist/browser/layout/ResizeSeparator.js.map +1 -1
- package/dist/browser/layout/app-workspace-controller.js +192 -31
- package/dist/browser/layout/app-workspace-controller.js.map +1 -1
- package/dist/browser/layout/index.js +1 -0
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/layout/navigation-model.js.map +1 -1
- package/dist/browser/layout/resize-separator.js +25 -1
- package/dist/browser/layout/resize-separator.js.map +1 -1
- package/dist/browser/layout/scroll-fade.js +32 -5
- package/dist/browser/layout/scroll-fade.js.map +1 -1
- package/dist/browser/surfaces/NoticeCard.js +46 -30
- package/dist/browser/surfaces/NoticeCard.js.map +1 -1
- package/dist/browser/surfaces/Skeleton.js +14 -0
- package/dist/browser/surfaces/Skeleton.js.map +1 -0
- package/dist/browser/surfaces/index.js +1 -0
- package/dist/browser/surfaces/index.js.map +1 -1
- package/dist/browser/surfaces/resource-messages.js +2 -2
- package/dist/browser/surfaces/resource-messages.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +51 -27
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/FilterChip.js +67 -16
- package/dist/ssr/actions/FilterChip.js.map +1 -1
- package/dist/ssr/actions/ViewTabs.js +8 -0
- package/dist/ssr/actions/ViewTabs.js.map +1 -1
- package/dist/ssr/actions/filter-messages.js +26 -2
- package/dist/ssr/actions/filter-messages.js.map +1 -1
- package/dist/ssr/actions/menu-rows.js +23 -3
- package/dist/ssr/actions/menu-rows.js.map +1 -1
- package/dist/ssr/actions/menu-sheet.js +2 -7
- package/dist/ssr/actions/menu-sheet.js.map +1 -1
- package/dist/ssr/chat/ChatComposer.js +96 -67
- package/dist/ssr/chat/ChatComposer.js.map +1 -1
- package/dist/ssr/chat/chat-messages.js +14 -0
- package/dist/ssr/chat/chat-messages.js.map +1 -1
- package/dist/ssr/chat/index.js.map +1 -1
- package/dist/ssr/content/Calendar.js +40 -31
- package/dist/ssr/content/Calendar.js.map +1 -1
- package/dist/ssr/content/CalendarDayView.js +40 -48
- package/dist/ssr/content/CalendarDayView.js.map +1 -1
- package/dist/ssr/content/Chart.js +27 -7
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/ChartExplorer.js +5 -3
- package/dist/ssr/content/ChartExplorer.js.map +1 -1
- package/dist/ssr/content/MapView.js +4 -4
- package/dist/ssr/content/MapView.js.map +1 -1
- package/dist/ssr/content/MessageRow.js +264 -91
- package/dist/ssr/content/MessageRow.js.map +1 -1
- package/dist/ssr/content/ReactionBar.js +17 -0
- package/dist/ssr/content/ReactionBar.js.map +1 -1
- package/dist/ssr/content/chart-inspection-core.js +4 -1
- package/dist/ssr/content/chart-inspection-core.js.map +1 -1
- package/dist/ssr/content/code-highlight.js +66 -0
- package/dist/ssr/content/code-highlight.js.map +1 -1
- package/dist/ssr/content/index.js +2 -1
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/content/map-view-types.js.map +1 -1
- package/dist/ssr/feedback/dialog-core.js +6 -0
- package/dist/ssr/feedback/dialog-core.js.map +1 -1
- package/dist/ssr/inputs/AutocompleteEditor.js +64 -24
- package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
- package/dist/ssr/inputs/RichSelect.js +950 -0
- package/dist/ssr/inputs/RichSelect.js.map +1 -0
- package/dist/ssr/inputs/TextInput.js +44 -17
- package/dist/ssr/inputs/TextInput.js.map +1 -1
- package/dist/ssr/inputs/choice.js +19 -8
- package/dist/ssr/inputs/choice.js.map +1 -1
- package/dist/ssr/inputs/index.js +1 -0
- package/dist/ssr/inputs/index.js.map +1 -1
- package/dist/ssr/inputs/rich-select-messages.js +46 -0
- package/dist/ssr/inputs/rich-select-messages.js.map +1 -0
- package/dist/ssr/intl/shortcut-messages.js +4 -0
- package/dist/ssr/intl/shortcut-messages.js.map +1 -1
- package/dist/ssr/intl/shortcut.js +4 -0
- package/dist/ssr/intl/shortcut.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +166 -125
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/layout/DetailPanel.js +1 -1
- package/dist/ssr/layout/DetailPanel.js.map +1 -1
- package/dist/ssr/layout/MobileShell.js +100 -20
- package/dist/ssr/layout/MobileShell.js.map +1 -1
- package/dist/ssr/layout/Navigation.js +1 -1
- package/dist/ssr/layout/Navigation.js.map +1 -1
- package/dist/ssr/layout/PageTitle.js +9 -3
- package/dist/ssr/layout/PageTitle.js.map +1 -1
- package/dist/ssr/layout/ResizeSeparator.js +4 -1
- package/dist/ssr/layout/ResizeSeparator.js.map +1 -1
- package/dist/ssr/layout/app-workspace-controller.js +192 -31
- package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
- package/dist/ssr/layout/index.js +1 -0
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/layout/navigation-model.js.map +1 -1
- package/dist/ssr/layout/resize-separator.js +25 -1
- package/dist/ssr/layout/resize-separator.js.map +1 -1
- package/dist/ssr/layout/scroll-fade.js +32 -5
- package/dist/ssr/layout/scroll-fade.js.map +1 -1
- package/dist/ssr/surfaces/NoticeCard.js +21 -12
- package/dist/ssr/surfaces/NoticeCard.js.map +1 -1
- package/dist/ssr/surfaces/Skeleton.js +8 -0
- package/dist/ssr/surfaces/Skeleton.js.map +1 -0
- package/dist/ssr/surfaces/index.js +1 -0
- package/dist/ssr/surfaces/index.js.map +1 -1
- package/dist/ssr/surfaces/resource-messages.js +2 -2
- package/dist/ssr/surfaces/resource-messages.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/Dropdown.d.ts +14 -0
- package/dist/types/actions/FilterChip.d.ts +11 -0
- package/dist/types/actions/filter-messages.d.ts +12 -0
- package/dist/types/actions/menu-rows.d.ts +7 -2
- package/dist/types/chat/ChatComposer.d.ts +13 -0
- package/dist/types/chat/chat-messages.d.ts +7 -0
- package/dist/types/chat/index.d.ts +1 -1
- package/dist/types/content/Calendar.d.ts +7 -0
- package/dist/types/content/Chart.d.ts +4 -2
- package/dist/types/content/ChartExplorer.d.ts +0 -1
- package/dist/types/content/MessageRow.d.ts +64 -2
- package/dist/types/content/code-highlight.d.ts +3 -1
- package/dist/types/content/index.d.ts +3 -2
- package/dist/types/content/map-view-live.d.ts +1 -1
- package/dist/types/content/map-view-types.d.ts +2 -0
- package/dist/types/feedback/dialog-core.d.ts +3 -0
- package/dist/types/inputs/AutocompleteEditor.d.ts +6 -1
- package/dist/types/inputs/RichSelect.d.ts +93 -0
- package/dist/types/inputs/TextInput.d.ts +5 -2
- package/dist/types/inputs/choice.d.ts +24 -4
- package/dist/types/inputs/index.d.ts +2 -0
- package/dist/types/inputs/rich-select-messages.d.ts +21 -0
- package/dist/types/intl/shortcut-messages.d.ts +2 -0
- package/dist/types/layout/AppWorkspace.d.ts +9 -0
- package/dist/types/layout/DetailPanel.d.ts +2 -0
- package/dist/types/layout/MobileShell.d.ts +52 -5
- package/dist/types/layout/app-workspace-controller.d.ts +2 -0
- package/dist/types/layout/index.d.ts +2 -1
- package/dist/types/layout/navigation-model.d.ts +2 -0
- package/dist/types/layout/resize-separator.d.ts +1 -0
- package/dist/types/layout/scroll-fade.d.ts +5 -0
- package/dist/types/surfaces/NoticeCard.d.ts +3 -0
- package/dist/types/surfaces/Skeleton.d.ts +6 -0
- package/dist/types/surfaces/index.d.ts +1 -0
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["content/Calendar.tsx"],"sourcesContent":["import { Link, type LinkNavigateEvent } from \"@k2b/ssr/nav\";\nimport { dates as calendar, type DateContext } from \"@k2b/stdlib\";\nimport type { JSX, ParentProps } from \"solid-js\";\nimport { createComputed, createEffect, createMemo, createSignal, For, mergeProps, on, onCleanup, onMount, Show, untrack } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport type { DropdownAction, DropdownChoice, DropdownItem, DropdownSection } from \"../actions/Dropdown\";\nimport { GestureMenu } from \"../actions/GestureMenu\";\nimport SegmentedControl from \"../actions/SegmentedControl\";\nimport { useDateConfigLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { isWeekendColumn, isWeekendKey } from \"../intl/weekend\";\nimport { prefersReducedMotion } from \"../motion\";\nimport { CalendarDayView } from \"./CalendarDayView\";\nimport { CalendarWeekView } from \"./CalendarWeekView\";\nimport { addDayKeys } from \"./calendar-days\";\nimport { openCalendarGoTo, openCalendarShortcuts } from \"./calendar-dialogs\";\nimport { layoutCalendarIntervals } from \"./calendar-event-layout\";\nimport { useCalendarMessages } from \"./calendar-messages\";\nimport { fitMonthWeek, layoutMonthWeek, monthLaneCapacity } from \"./calendar-month-layout\";\nimport {\n MONTH_ROW_BLOCK,\n MONTH_ROWS_IN_VIEW,\n monthFocusRow,\n monthOfWeek,\n monthRenderWindow,\n monthRevealTop,\n monthRowOf,\n monthTodayDirection,\n monthVisibleRows,\n monthWeekKeys,\n} from \"./calendar-month-scroll\";\nimport { afterPointerRelease, calendarDayIndexAtPoint, calendarMinuteAtPoint, startCalendarPointerSession } from \"./calendar-pointer\";\nimport {\n type CalendarOwner,\n EventChip,\n eventHref,\n followCalendarHref,\n formatTime,\n type NormalizedEvent,\n ownerDateConfig,\n parseDate,\n placeCalendarPopover,\n textWidth,\n validDate,\n} from \"./calendar-shared\";\nimport { compactGermanDate, type TimeViewHandle, type TodayDirection } from \"./calendar-time-view\";\n\nexport type CalendarView = \"day\" | \"week\" | \"month\" | \"year\" | \"mobile-month\";\n\nexport type CalendarEventColor = \"blue\" | \"emerald\" | \"amber\" | \"red\" | \"violet\" | \"cyan\" | \"zinc\";\n\nexport type CalendarEvent = {\n id: string;\n title: string;\n start: Date | string;\n end?: Date | string;\n allDay?: boolean;\n color?: CalendarEventColor;\n colorHex?: string;\n href?: string;\n dataSpaceItemId?: string;\n meta?: string;\n description?: string;\n /**\n * `marker` draws a point in time, such as a deadline, as a colored marker\n * beside its title instead of a filled band.\n */\n display?: \"event\" | \"background\" | \"marker\";\n /**\n * Short text the accessible name adds after the title and time, for state the event shows only visually, such as\n * a priority flag in custom `renderEvent` content.\n */\n accessibleDetail?: string;\n /**\n * Day and week views with `dayHours`: the state of the entry's checkbox, such as a to-do's. Leave it out for entries\n * without one. With `onEventCheck` the reader can change it.\n */\n checked?: boolean;\n location?: string;\n calendarName?: string;\n attendees?: CalendarAttendee[];\n resources?: CalendarResource[];\n recurrence?: CalendarRecurrence;\n};\n\nexport type CalendarAttendee = {\n name: string;\n status?: \"accepted\" | \"declined\" | \"tentative\" | \"needs-action\";\n};\n\nexport type CalendarResource = {\n name: string;\n kind?: \"room\" | \"equipment\" | \"link\" | \"other\";\n};\n\nexport type CalendarRecurrence = {\n rrule: string;\n exdate?: Array<Date | string>;\n recurrenceId?: Date | string;\n};\n\nexport type CalendarLabels = Partial<{\n today: string;\n day: string;\n week: string;\n month: string;\n year: string;\n allDay: string;\n noEvents: string;\n previous: string;\n next: string;\n}>;\n\nexport type CalendarEventRenderContext = {\n compact: boolean;\n fill: boolean;\n start: Date;\n end: Date;\n allDay: boolean;\n durationHours: number;\n timeLabel: string;\n /** Month view: the start time to show before the title of a one-day timed entry; absent on bars and elsewhere. */\n leadingTime?: string;\n /** Day and week views: what is left of the event that is running now, such as \"27 min left\". */\n remaining?: string;\n /** Day and week views: the calendar draws the event's checkbox beside this content, so leave yours out. */\n checkbox?: boolean;\n /**\n * Day and week views with `dayHours`: the event is a band, a deadline, or an all-day entry of a timeline. Render the\n * title in `k2b-calendar-event__title` and the time in `k2b-calendar-event__meta` there, so the views size them.\n */\n timeline?: boolean;\n};\n\n/** The days a host loaded events for, from the first day `from` up to `to`, both `YYYY-MM-DD` or dates. */\nexport type CalendarRange = { from: Date | string; to: Date | string };\n\n/**\n * An action the calendar offers for keyboard shortcuts, the command palette, and its shortcuts dialog. The calendar\n * publishes its own through `onCommandsChange`; the host registers them with its shortcut dispatcher.\n */\nexport type CalendarCommand = {\n /** Unique on the page, such as `calendar.today`. */\n id: string;\n label: string;\n /** One key combination: a key such as `h`, or modifiers and a key such as `shift+n`. */\n shortcut?: string;\n /** One sentence for the command palette and the help, such as \"Show today in the calendar\". */\n description?: string;\n icon?: string;\n run: () => void;\n};\n\n/** An entry dragged into the day or week view from outside the calendar, such as a task from a list below it. */\nexport type CalendarExternalDrag = {\n title: string;\n color?: CalendarEventColor;\n colorHex?: string;\n /** The length it gets in the calendar. */\n minutes: number;\n};\n\n/** Actions of the calendar that the host starts from its own controls. */\nexport type CalendarController = {\n /**\n * Opens the quick create at the selection, or where a new entry fits: today at the next full hour while today is\n * shown, else at 09:00 of the first shown day. `create` reaches `renderQuickCreate` as in the month view's menu.\n */\n quickCreate: (create?: string) => void;\n /** The time a new entry takes, by the rule of `quickCreate`; all-day for days selected in the month view. */\n createTarget: () => CalendarEventTimeChange;\n /**\n * Day and week views with `dayHours`: follows a pointer that pressed an entry outside the calendar, shows where it\n * would go and whether it fits the free time there, and calls `onDrop` with the time where it is released. Escape\n * or a release outside the days cancels.\n */\n dragIn: (event: PointerEvent, item: CalendarExternalDrag, onDrop: (slot: CalendarEventTimeChange) => void) => void;\n};\n\n/** A view the application adds to the switcher; the calendar shows its header and toolbar, the application the body. */\nexport type CalendarCustomView<V extends string = string> = {\n value: V;\n label: string;\n};\n\nexport type CalendarProps<V extends string = never> = {\n date: Date | string;\n events: CalendarEvent[];\n view?: CalendarView | V;\n views?: CalendarView[];\n /** Views after the built-in ones. While one is active, `children` is the body and the header pages by day. */\n customViews?: CalendarCustomView<V>[];\n /** The body of the active custom view. */\n children?: JSX.Element;\n labels?: CalendarLabels;\n /** stdlib date context used for timezone-aware rendering and calendar math. */\n dateConfig?: DateContext;\n /** Convenience override for dateConfig.timeZone. */\n timeZone?: string;\n firstDayOfWeek?: 0 | 1;\n withWeekNumbers?: boolean;\n startHour?: number;\n endHour?: number;\n /**\n * Waking hours `[start, end]` of the day and week views, such as `[6, 22]`. With them, a day runs from `start` to\n * `start` of the next day, so the night after `end` belongs to the day before. The day view becomes one stream of\n * days down the page and the week view a strip of days to scroll sideways; nights fold unless an entry lies in them.\n * `startHour`, `endHour`, and the visible hours do not apply then.\n */\n dayHours?: readonly [start: number, end: number];\n /** Loaded days of the continuous month view and the day/week views with `dayHours`, with an exclusive end. */\n range?: CalendarRange;\n /**\n * Called once when the reader nears the first loaded day, again once `range.from` moved.\n * May return a promise that settles once the range has grown; when it settles without moving that end, the\n * continuous month treats the end as reached, and Next/Previous past it go through the host's navigation.\n */\n onLoadEarlier?: () => unknown;\n /**\n * Called once when the reader nears the last loaded day, again once `range.to` moved.\n * May return a promise that settles once the range has grown; when it settles without moving that end, the\n * continuous month treats the end as reached, and Next/Previous past it go through the host's navigation.\n */\n onLoadLater?: () => unknown;\n /**\n * Scrolling views: the first and last visible day, and the focus date, after positioning and when they change.\n * Day/week views use their first day as focus. Continuous month uses the first selected day inside its focus month,\n * else the host's `date` when in that month, else today when in that month, else its first. Month rows count as\n * visible when more than half is on screen.\n */\n onVisibleDateChange?: (date: Date, last: Date, focus: Date) => void;\n visibleStartHour?: number;\n visibleEndHour?: number;\n allDayMaxHeightRem?: number;\n hideAllDay?: boolean;\n selectedDate?: Date | string;\n selectedEventId?: string;\n dayBadges?: Record<string, CalendarDayBadge>;\n // Methods, not function properties: props for custom views stay assignable to the plain props the overloads expose.\n getViewHref?(view: CalendarView | V): string;\n getDateHref?(date: Date, view: CalendarView | V): string;\n getEventHref?: (event: CalendarEvent) => string | undefined;\n renderEvent?: (event: CalendarEvent, context: CalendarEventRenderContext) => JSX.Element;\n /** Progressively enhance canonical calendar links after the app has loaded their target state. */\n onNavigate?: (event: LinkNavigateEvent) => void | Promise<void>;\n /** Progressively enhance canonical links without a document view transition. */\n onNavigateHref?: (href: string) => void;\n /** Optionally preload the target behind a canonical calendar link. */\n onPrefetch?: (href: string) => void;\n navigationPending?: boolean;\n onViewChange?(view: CalendarView | V): void;\n onDateChange?(date: Date, view: CalendarView | V): void;\n /** One activation contract for pointer and keyboard input. */\n onEventActivate?: (event: CalendarEvent) => void;\n /** Pointer gesture used for activation. Keyboard activation is always immediate. */\n eventActivation?: \"single\" | \"double\";\n onEventDrop?: (event: CalendarEvent, next: CalendarEventTimeChange) => void;\n onEventResize?: (event: CalendarEvent, next: CalendarEventTimeChange) => void;\n onSlotActivate?: (slot: CalendarEventTimeChange) => void;\n /**\n * Changes the checkbox of an entry with `checked`; leave it out when the reader may not change it. The box shows the\n * change at once; a returned promise that rejects puts it back.\n */\n onEventCheck?: (event: CalendarEvent, checked: boolean) => void | Promise<unknown>;\n /** Pointer gesture used for empty slots. Keyboard activation is always immediate. */\n slotActivation?: \"single\" | \"double\";\n /**\n * Month view: the selected days changed. `null` when no day is selected, for example after paging to another month\n * or switching to another view.\n */\n onSelectionChange?: (range: CalendarEventTimeChange | null) => void;\n /**\n * Month view: the application's entries of the menu that a right-click, Shift+F10, or a long press opens on a day or\n * on the selected days. The calendar heads them with the days and adds Open day, Open week, and Clear selection;\n * without this prop the menu has only those. `quickCreate` opens the quick create at the days, passing `create` on to\n * `renderQuickCreate`.\n */\n selectionMenu?: (range: CalendarEventTimeChange, controls: CalendarSelectionControls) => readonly DropdownItem[];\n /**\n * Month view: the content of the quick create at the selected days. It opens quietly after a click, keeping the\n * focus in the grid until the person types or tabs into it (Space still lists the day), and with the focus after a\n * drag, a double-click, Enter, N, or `quickCreate`.\n */\n renderQuickCreate?: (range: CalendarEventTimeChange, controls: CalendarQuickCreateControls) => JSX.Element;\n toolbarActions?: JSX.Element;\n /** Application controls, such as filters, right after the period title. */\n toolbarContent?: JSX.Element;\n /** The application's own commands, such as New event, listed after the calendar's in its shortcuts dialog. */\n commands?: readonly CalendarCommand[];\n /**\n * Receives the calendar's commands and `commands` whenever they change, to register them with the host's shortcut\n * dispatcher: Today (H), Next (J) and Previous (K), the views (1 to 4), and Go to (G). The calendar then also offers\n * its shortcuts dialog. Without a dispatcher the commands have no keys.\n */\n onCommandsChange?: (commands: readonly CalendarCommand[]) => void;\n /** Receives the calendar's controller once it mounts. */\n controller?: (controller: CalendarController) => void;\n class?: string;\n};\n\nexport type CalendarSelectionControls = {\n /** Opens the quick create at the days of the menu; `create` names what to create, as the application defines it. */\n quickCreate: (create?: string) => void;\n};\n\nexport type CalendarQuickCreateControls = {\n /** What the person asked to create through `quickCreate`; absent after a click, a drag, or the keyboard. */\n create?: string;\n /**\n * Closes the quick create, returns the focus to the selected day only while the focus is still in the quick create, and\n * leaves a newer selection in place; once another quick create replaced it, nothing.\n */\n close: () => void;\n};\n\nexport type CalendarEventTimeChange = {\n start: Date;\n end: Date;\n allDay?: boolean;\n};\n\nexport type CalendarDayBadge = {\n icon?: string;\n label: string;\n};\n\ntype CalendarPreview = CalendarEventTimeChange & {\n id: string;\n title?: string;\n};\n\ntype TimedEventLayout = {\n event: NormalizedEvent;\n lane: number;\n lanes: number;\n groupId: number;\n groupStartDate: Date;\n groupEndDate: Date;\n};\n\ntype TimedOverflowLayout = {\n groupId: number;\n hiddenEvents: NormalizedEvent[];\n groupStartDate: Date;\n groupEndDate: Date;\n};\n\nconst weekNumber = (date: Date): number => {\n const target = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n const day = target.getUTCDay() || 7;\n target.setUTCDate(target.getUTCDate() + 4 - day);\n const yearStart = new Date(Date.UTC(target.getUTCFullYear(), 0, 1));\n return Math.ceil(((target.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);\n};\nconst zonedWeekNumber = (date: Date, context?: DateContext): number => {\n if (!context?.timeZone) return weekNumber(date);\n const [year = \"1970\", month = \"1\", day = \"1\"] = calendar.formatDateKey(date, context).split(\"-\");\n return weekNumber(new Date(Date.UTC(Number(year), Number(month) - 1, Number(day))));\n};\n\nconst formatDay = (date: Date, context?: DateContext): string =>\n date.toLocaleDateString(context?.locale ?? \"en\", { weekday: \"short\", day: \"numeric\", timeZone: context?.timeZone });\nconst formatMonth = (date: Date, context?: DateContext): string => calendar.formatMonthYear(date, context);\nconst zonedYearMonth = (date: Date, context?: DateContext): { year: number; month: number } => {\n const [year = \"1970\", month = \"1\"] = calendar.formatDateKey(date, context).split(\"-\");\n return { year: Number(year), month: Number(month) - 1 };\n};\nconst zonedMonthDate = (year: number, month: number, context?: DateContext): Date => {\n const value = `${year}-${String(month + 1).padStart(2, \"0\")}-01T12:00`;\n if (!context?.timeZone) return parseDate(value);\n return new Date(calendar.zonedDateTimeToInstant(value, context.timeZone, { disambiguation: \"compatible\" }));\n};\n\nconst startOfDay = (date: Date, context?: DateContext): Date => calendar.startOfDay(date, context);\nconst endOfDay = (date: Date, context?: DateContext): Date => calendar.endOfDay(date, context);\nconst isStartOfDay = (date: Date, context?: DateContext): boolean => date.getTime() === startOfDay(date, context).getTime();\nconst addMinutes = (date: Date, minutes: number): Date => new Date(date.getTime() + minutes * 60 * 1000);\nconst zonedHour = (date: Date, context?: DateContext): number => {\n if (!context?.timeZone) return date.getHours() + date.getMinutes() / 60;\n const value = calendar.instantToZonedInput(date, context.timeZone);\n return Number(value.slice(11, 13)) + Number(value.slice(14, 16)) / 60;\n};\nconst zonedSlot = (day: Date, hour: number, context?: DateContext): Date => {\n return zonedMinuteSlot(day, hour * 60, context);\n};\nconst zonedMinuteSlot = (day: Date, minuteOfDay: number, context?: DateContext): Date => {\n const bounded = Math.max(0, Math.min(23 * 60 + 59, minuteOfDay));\n const hour = Math.floor(bounded / 60);\n const minute = bounded % 60;\n const value = `${calendar.formatDateKey(day, context)}T${String(hour).padStart(2, \"0\")}:${String(minute).padStart(2, \"0\")}`;\n if (!context?.timeZone) return parseDate(value);\n return new Date(calendar.zonedDateTimeToInstant(value, context.timeZone, { disambiguation: \"compatible\" }));\n};\nconst normalizeEvents = (events: CalendarEvent[], context?: DateContext): NormalizedEvent[] =>\n events.flatMap((event) => {\n const startDate = parseDate(event.start, context);\n if (!validDate(startDate)) return [];\n const parsedEnd = event.end ? parseDate(event.end, context) : null;\n const endDate = parsedEnd && validDate(parsedEnd) ? parsedEnd : new Date(startDate.getTime() + 60 * 60 * 1000);\n const duration = Math.max(60 * 60 * 1000, endDate.getTime() - startDate.getTime());\n const rangeEnd = endDate > startDate ? endDate : new Date(startDate.getTime() + duration);\n const startKey = calendar.formatDateKey(startDate, context);\n const endKey = calendar.formatDateKey(rangeEnd, context);\n if (!event.allDay && startKey === endKey) {\n return [\n {\n ...event,\n startDate,\n endDate: rangeEnd,\n sourceStartDate: startDate,\n sourceEndDate: rangeEnd,\n dayKey: startKey,\n },\n ];\n }\n const lastDay =\n event.allDay && isStartOfDay(rangeEnd, context)\n ? calendar.addDays(startOfDay(rangeEnd, context), -1, context)\n : startOfDay(rangeEnd, context);\n const days: NormalizedEvent[] = [];\n for (let day = startOfDay(startDate, context); day <= lastDay; day = calendar.addDays(day, 1, context)) {\n const segmentStart = day.getTime() === startOfDay(startDate, context).getTime() ? startDate : startOfDay(day, context);\n const segmentEnd = day.getTime() === startOfDay(rangeEnd, context).getTime() ? rangeEnd : endOfDay(day, context);\n days.push({\n ...event,\n startDate: segmentStart,\n endDate: segmentEnd,\n sourceStartDate: startDate,\n sourceEndDate: rangeEnd,\n dayKey: calendar.formatDateKey(day, context),\n allDay: event.allDay,\n });\n }\n return days;\n });\n\nconst moveEventTo = (event: NormalizedEvent, target: Date, allDay = false, context?: DateContext): CalendarEventTimeChange => {\n const duration = Math.max(30 * 60 * 1000, event.sourceEndDate.getTime() - event.sourceStartDate.getTime());\n const start = allDay ? startOfDay(target, context) : new Date(target);\n start.setSeconds(0, 0);\n return { start, end: new Date(start.getTime() + duration), allDay };\n};\n\nconst moveEventToDay = (event: NormalizedEvent, day: Date, context?: DateContext): CalendarEventTimeChange => {\n if (event.allDay) return moveEventTo(event, startOfDay(day, context), true, context);\n const localStart = context?.timeZone ? calendar.instantToZonedInput(event.sourceStartDate, context.timeZone) : null;\n const hour = localStart ? Number(localStart.slice(11, 13)) : event.sourceStartDate.getHours();\n const minute = localStart ? Number(localStart.slice(14, 16)) : event.sourceStartDate.getMinutes();\n return moveEventTo(event, zonedMinuteSlot(day, hour * 60 + minute, context), false, context);\n};\n\nconst eventTimeChanged = (event: NormalizedEvent, next: CalendarEventTimeChange): boolean =>\n event.sourceStartDate.getTime() !== next.start.getTime() ||\n event.sourceEndDate.getTime() !== next.end.getTime() ||\n Boolean(event.allDay) !== Boolean(next.allDay);\n\nconst previewSegments = (preview: CalendarPreview | null, days: Date[], context?: DateContext): NormalizedEvent[] =>\n preview\n ? normalizeEvents(\n [\n {\n id: `preview-${preview.id}`,\n title: preview.title ?? \"\",\n start: preview.start,\n end: preview.end,\n allDay: preview.allDay,\n color: \"blue\",\n },\n ],\n context,\n ).filter((event) => days.some((day) => event.dayKey === calendar.formatDateKey(day, context)))\n : [];\n\nconst timedEventLayouts = (events: NormalizedEvent[]): TimedEventLayout[] => {\n return layoutCalendarIntervals(events, (event) => ({\n start: event.startDate.getTime(),\n end: event.endDate.getTime(),\n })).map(({ item: event, lane, lanes, groupId, groupStart, groupEnd }) => ({\n event,\n lane,\n lanes,\n groupId,\n groupStartDate: new Date(groupStart),\n groupEndDate: new Date(groupEnd),\n }));\n};\n\nconst slotInteractionProps = (\n owner: CalendarOwner,\n slot: () => CalendarEventTimeChange,\n suppressed?: () => boolean,\n nativeControl = false,\n) => {\n const isSlotChild = (event: Event) => {\n if (!(event.target instanceof Element)) return false;\n const control = event.target.closest(\"a,button,[data-calendar-event]\");\n return Boolean(control && control !== event.currentTarget);\n };\n const interactive = Boolean(owner.onSlotActivate);\n const activate = (event: Event) => {\n if (!owner.onSlotActivate || isSlotChild(event) || suppressed?.()) return;\n event.preventDefault();\n owner.onSlotActivate(slot());\n };\n return {\n role: interactive && !nativeControl ? (\"button\" as const) : undefined,\n tabIndex: interactive && !nativeControl ? 0 : undefined,\n onClick: (event: MouseEvent) => {\n if (owner.slotActivation === \"double\") return;\n activate(event);\n },\n onDblClick: (event: MouseEvent) => {\n if (owner.slotActivation !== \"double\") return;\n activate(event);\n },\n onKeyDown: nativeControl\n ? undefined\n : (event: KeyboardEvent) => {\n if (event.key === \"Enter\" || event.key === \" \") activate(event);\n },\n };\n};\n\ntype CalendarNavigationLinkProps = ParentProps<{\n owner: CalendarOwner;\n href: string;\n /** Handles a plain click in place, such as gliding to a loaded day; `true` keeps the link from navigating. */\n intercept?: () => boolean;\n anchorProps?: Omit<JSX.AnchorHTMLAttributes<HTMLAnchorElement>, \"children\" | \"href\" | \"onClick\"> & {\n \"data-direction\"?: string;\n \"data-divider\"?: string;\n \"data-outside\"?: string;\n \"data-size\"?: string;\n \"data-today\"?: string;\n \"data-variant\"?: string;\n \"data-weekend\"?: string;\n };\n}>;\n\nconst plainClick = (event: MouseEvent) =>\n !event.defaultPrevented && event.button === 0 && !event.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey;\n\n/** A real anchor is the baseline; the optional handler only enhances it after hydration. */\nconst CalendarNavigationLink = (props: CalendarNavigationLinkProps): JSX.Element => {\n const preload = () => props.owner.onPrefetch?.(props.href);\n const intercepted = (event: MouseEvent) => {\n if (!props.intercept || !plainClick(event) || !props.intercept()) return false;\n event.preventDefault();\n return true;\n };\n const navigateHref: JSX.EventHandler<HTMLAnchorElement, MouseEvent> = (event) => {\n if (intercepted(event)) return;\n const anchor = event.currentTarget;\n if (\n !plainClick(event) ||\n (anchor.target && anchor.target !== \"_self\") ||\n anchor.hasAttribute(\"download\") ||\n new URL(anchor.href).origin !== window.location.origin\n ) {\n return;\n }\n event.preventDefault();\n props.owner.onNavigateHref?.(props.href);\n };\n return props.owner.onNavigateHref ? (\n <a {...props.anchorProps} href={props.href} onClick={navigateHref} onPointerEnter={preload} onFocus={preload}>\n {props.children}\n </a>\n ) : props.owner.onNavigate ? (\n <Link\n {...props.anchorProps}\n href={props.href}\n scroll=\"preserve\"\n onNavigate={props.owner.onNavigate}\n onClick={(event) => void intercepted(event)}\n onPointerEnter={preload}\n onFocus={preload}\n >\n {props.children}\n </Link>\n ) : (\n <a {...props.anchorProps} href={props.href} onClick={(event) => void intercepted(event)} onPointerEnter={preload} onFocus={preload}>\n {props.children}\n </a>\n );\n};\n\nconst CalendarViewLinks = <V extends string>(props: {\n owner: CalendarProps<V>;\n view: CalendarView | V;\n options: Array<{ value: CalendarView | V; label: string }>;\n /** The day selected in the month view: the other views open at it. */\n focusDay?: Date | null;\n}): JSX.Element => {\n const calendarMessages = useCalendarMessages();\n const refs: HTMLAnchorElement[] = [];\n const selectRelative = (currentIndex: number, direction: -1 | 1) => {\n if (props.options.length === 0) return;\n refs[(currentIndex + direction + props.options.length) % props.options.length]?.click();\n };\n const onKeyDown = (event: KeyboardEvent, index: number) => {\n if (event.key === \"ArrowRight\" || event.key === \"ArrowDown\") {\n event.preventDefault();\n selectRelative(index, 1);\n } else if (event.key === \"ArrowLeft\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n selectRelative(index, -1);\n } else if (event.key === \"Home\" || event.key === \"End\") {\n event.preventDefault();\n refs[event.key === \"Home\" ? 0 : props.options.length - 1]?.click();\n }\n };\n\n return (\n <div\n role=\"radiogroup\"\n aria-label={calendarMessages().calendarView}\n aria-orientation=\"horizontal\"\n class=\"k2b-segmented-control k2b-calendar-view-switcher\"\n >\n <For each={props.options}>\n {(option, index) => {\n const active = () => (props.view === \"mobile-month\" ? \"month\" : props.view) === option.value;\n const href = () => {\n const day = props.focusDay;\n const atDay = day && !active() ? props.owner.getDateHref?.(day, option.value) : undefined;\n return atDay ?? props.owner.getViewHref?.(option.value) ?? \"#\";\n };\n return (\n <CalendarNavigationLink\n owner={props.owner}\n href={href()}\n anchorProps={{\n ref: (element) => {\n refs[index()] = element;\n },\n role: \"radio\",\n \"aria-checked\": active(),\n tabIndex: active() ? 0 : -1,\n class: \"k2b-segmented-control__option\",\n \"data-divider\":\n index() < props.options.length - 1 &&\n !active() &&\n (props.view === \"mobile-month\" ? \"month\" : props.view) !== props.options[index() + 1]?.value\n ? \"true\"\n : undefined,\n onKeyDown: (event) => onKeyDown(event, index()),\n }}\n >\n {option.label}\n </CalendarNavigationLink>\n );\n }}\n </For>\n </div>\n );\n};\n\n/**\n * The same day some months later, or the last day of that month when it is shorter: a step from January 31 lands on\n * February 28, never in March. stdlib's `addMonths` runs over into the next month.\n */\nconst addMonthsClamped = (date: Date, months: number, dateConfig: DateContext): Date => {\n const moved = calendar.addMonths(date, months, dateConfig);\n if (calendar.formatDateKey(moved, dateConfig).slice(8) === calendar.formatDateKey(date, dateConfig).slice(8)) return moved;\n return calendar.addDays(calendar.startOfMonth(moved, dateConfig), -1, dateConfig);\n};\n\n/** Custom views page by day, like the day view. */\nconst adjacentCalendarDate = (date: Date, view: string, direction: -1 | 1, dateConfig: DateContext) => {\n if (view === \"year\") return addMonthsClamped(date, direction * 12, dateConfig);\n if (view === \"month\" || view === \"mobile-month\") return addMonthsClamped(date, direction, dateConfig);\n return calendar.addDays(date, direction * (view === \"week\" ? 7 : 1), dateConfig);\n};\n\n/** Opens a view at a day through the host's callbacks. Hosts may keep the view and the date apart, so both hear it. */\nconst openViewAt = <V extends string>(\n owner: Pick<CalendarProps<V>, \"onViewChange\" | \"onDateChange\">,\n date: Date,\n view: CalendarView | V,\n) => {\n owner.onViewChange?.(view);\n owner.onDateChange?.(date, view);\n};\n\n/** What the header reads from the active view beyond the props: the days a day or week view shows, and its moves. */\ntype CalendarHeaderNav = {\n /** The day or week view with `dayHours`, which scrolls through its days by itself. */\n timeView: () => TimeViewHandle | null;\n monthView: () => MonthHandle | null;\n /** The commands of the shortcuts dialog; without them the header shows no shortcuts button. */\n commands: () => readonly CalendarCommand[];\n openShortcuts: () => void;\n};\n\nconst dayTitleOptions: Intl.DateTimeFormatOptions = { weekday: \"short\", day: \"numeric\", month: \"short\", year: \"numeric\" };\nconst weekTitleOptions: Intl.DateTimeFormatOptions = { day: \"numeric\", month: \"short\", year: \"numeric\" };\n\n/** Where today lies from the shown day or week before its view measured: the arrow of the Today button, or nothing. */\nconst todayDirectionOf = (view: string, date: Date, context: DateContext): TodayDirection => {\n const today = calendar.formatDateKey(new Date(), context);\n if (view === \"week\") {\n const start = calendar.formatDateKey(calendar.startOfWeek(date, context), context);\n const end = calendar.formatDateKey(calendar.addDays(calendar.startOfWeek(date, context), 6, context), context);\n return today < start ? \"left\" : today > end ? \"right\" : \"\";\n }\n const shown = calendar.formatDateKey(date, context);\n return today < shown ? \"up\" : today > shown ? \"down\" : \"\";\n};\n\nconst CalendarHeader = <V extends string>(props: {\n date: Date;\n view: CalendarView | V;\n labels: Required<CalendarLabels>;\n owner: CalendarProps<V>;\n focusDay?: Date | null;\n nav: CalendarHeaderNav;\n}): JSX.Element => {\n const calendarMessages = useCalendarMessages();\n const dateConfig = () => ownerDateConfig(props.owner);\n const timeView = () => props.nav.timeView();\n const monthView = () => props.nav.monthView();\n const scrollingView = () => timeView() ?? monthView();\n const parseKey = (key: string) => calendar.parseCalendarDate(key, dateConfig());\n /** The date the header pages from: the first day a day or week view shows, else the date. */\n const base = () => {\n const shown = timeView()?.visibleKeys().first;\n return shown ? parseKey(shown) : (monthView()?.stepFrom() ?? props.date);\n };\n const previous = () => adjacentCalendarDate(base(), props.view, -1, dateConfig());\n const next = () => adjacentCalendarDate(base(), props.view, 1, dateConfig());\n /** The day view's title, such as \"Fri, Oct 9, 2026\" or \"Fr, 9. Okt 2026\". */\n const formatDayTitle = (date: Date) =>\n compactGermanDate(\n new Intl.DateTimeFormat(dateConfig().locale ?? \"en\", { ...dayTitleOptions, timeZone: dateConfig().timeZone }).format(date),\n dateConfig().locale,\n true,\n );\n const formatRange = (from: Date, to: Date) =>\n compactGermanDate(\n new Intl.DateTimeFormat(dateConfig().locale ?? \"en\", { ...weekTitleOptions, timeZone: dateConfig().timeZone }).formatRange(from, to),\n dateConfig().locale,\n );\n /** The day and week views with `dayHours` name the days they show, also on the server before they measured. */\n const timeMode = () => Boolean(props.owner.dayHours) && (props.view === \"day\" || props.view === \"week\");\n const title = () => {\n const shown = timeView()?.visibleKeys();\n if (timeMode() && props.view === \"day\") return formatDayTitle(shown ? parseKey(shown.first) : props.date);\n if (timeMode()) {\n const start = shown ? parseKey(shown.first) : calendar.startOfWeek(props.date, dateConfig());\n return formatRange(start, shown ? parseKey(shown.last) : calendar.addDays(start, 6, dateConfig()));\n }\n if (props.view === \"year\")\n return new Intl.DateTimeFormat(dateConfig().locale ?? \"en\", { year: \"numeric\", timeZone: dateConfig().timeZone }).format(props.date);\n if (props.view !== \"week\" && props.view !== \"month\" && props.view !== \"mobile-month\")\n return props.date.toLocaleDateString(dateConfig().locale ?? \"en\", {\n weekday: \"long\",\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n timeZone: dateConfig().timeZone,\n });\n if (props.view === \"week\")\n return `${formatDay(calendar.startOfWeek(props.date, dateConfig()), dateConfig())} - ${formatDay(calendar.addDays(calendar.startOfWeek(props.date, dateConfig()), 6, dateConfig()), dateConfig())}`;\n return formatMonth(monthView()?.focusMonth() ?? props.date, dateConfig());\n };\n /**\n * The titles this view can show around the current date: the months of the year, the weeks of the month and across\n * each month boundary, or a day of each weekday in every month. Their widest one sets the title's width.\n */\n const titleWidths = createMemo(() => {\n const context = dateConfig();\n if (props.view === \"year\") return [];\n const { year } = zonedYearMonth(props.date, context);\n if (props.view === \"month\" || props.view === \"mobile-month\")\n return Array.from({ length: 12 }, (_, month) => formatMonth(zonedMonthDate(year, month, context), context));\n if (props.view === \"week\") {\n const first = calendar.startOfWeek(calendar.startOfMonth(props.date, context), context);\n const weeks = Array.from({ length: 6 }, (_, week) => {\n const start = calendar.addDays(first, week * 7, context);\n if (timeMode()) return formatRange(start, calendar.addDays(start, 6, context));\n return `${formatDay(start, context)} - ${formatDay(calendar.addDays(start, 6, context), context)}`;\n });\n if (timeMode()) {\n return [\n ...weeks,\n ...Array.from({ length: 12 }, (_, month) => {\n const day28 = calendar.addDays(zonedMonthDate(year, month, context), 27, context);\n return formatRange(day28, calendar.addDays(day28, 6, context));\n }),\n ];\n }\n return weeks;\n }\n return Array.from({ length: 12 }, (_, month) => month).flatMap((month) => {\n const first = zonedMonthDate(year, month, context);\n return Array.from({ length: 7 }, (_, offset) =>\n timeMode()\n ? formatDayTitle(calendar.addDays(first, 21 + offset, context))\n : calendar.addDays(first, 21 + offset, context).toLocaleDateString(context.locale ?? \"en\", {\n weekday: \"long\",\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n timeZone: context.timeZone,\n }),\n );\n });\n });\n const goDate = (date: Date) => props.owner.onDateChange?.(date, props.view);\n const goView = (view: CalendarView | V) => {\n // Like the switcher's links, the other views open at the day selected in the month view.\n const day = props.focusDay;\n if (day && props.owner.onDateChange && view !== props.view) {\n openViewAt(props.owner, day, view);\n return;\n }\n if (props.owner.onViewChange) {\n props.owner.onViewChange(view);\n return;\n }\n const href = props.owner.getViewHref?.(view);\n if (href) window.location.href = href;\n };\n /**\n * A previous or next button. Its element stays while its target changes, such as with each step through the months,\n * so a repeated click or Enter lands on the same button and keeps its focus.\n */\n const navButton = (date: () => Date, icon: string, label: string, direction: -1 | 1) => {\n const href = () => props.owner.getDateHref?.(date(), props.view);\n const step = () => scrollingView()?.step(direction) ?? false;\n const title = () => (props.nav.commands().length > 0 ? `${label} (${direction > 0 ? \"J\" : \"K\"})` : label);\n const link = (target: () => string) => (\n <CalendarNavigationLink\n owner={props.owner}\n href={target()}\n intercept={step}\n anchorProps={{ \"aria-label\": label, title: title(), class: \"k2b-calendar-header__nav-button\" }}\n >\n <i class={`ti ${icon}`} />\n </CalendarNavigationLink>\n );\n return (\n <Show\n when={Boolean((props.owner.onNavigateHref || props.owner.onNavigate) && href())}\n fallback={\n <Show when={props.owner.onDateChange} fallback={link(() => href() ?? \"#\")}>\n <button\n type=\"button\"\n aria-label={label}\n title={title()}\n class=\"k2b-calendar-header__nav-button\"\n onClick={() => {\n if (!step()) goDate(date());\n }}\n >\n <i class={`ti ${icon}`} />\n </button>\n </Show>\n }\n >\n {link(() => href() ?? \"#\")}\n </Show>\n );\n };\n /**\n * In the day and week views that scroll through their days, Today points where today lies, or shows a calm dot while\n * it is on screen; the icon keeps its place either way. The other views name their period in the title.\n */\n const direction = () =>\n timeMode() || monthView()\n ? (scrollingView()?.todayDirection() ?? todayDirectionOf(String(props.view), props.date, dateConfig())) || \"here\"\n : undefined;\n /** One arrow that the stylesheet turns toward today, or the dot while today shows. */\n const todayIcon = () => (\n <Show when={direction()}>\n {(current) => (\n <Show when={current() !== \"here\"} fallback={<i class=\"ti ti-point k2b-calendar-header__today-direction\" aria-hidden=\"true\" />}>\n <i class=\"ti ti-arrow-narrow-right k2b-calendar-header__today-direction\" aria-hidden=\"true\" />\n </Show>\n )}\n </Show>\n );\n const todayButton = () => {\n const today = calendar.today(dateConfig());\n const href = props.owner.getDateHref?.(today, props.view);\n const intercept = () => scrollingView()?.today() ?? false;\n const title = () => (props.nav.commands().length > 0 ? `${props.labels.today} (H)` : undefined);\n const label = (\n <>\n {todayIcon()}\n <span class=\"k2b-button__label\">{props.labels.today}</span>\n </>\n );\n return (props.owner.onNavigateHref || props.owner.onNavigate) && href ? (\n <CalendarNavigationLink\n owner={props.owner}\n href={href}\n intercept={intercept}\n anchorProps={{\n class: \"k2b-button k2b-calendar-header__today\",\n \"data-size\": \"sm\",\n \"data-variant\": \"input\",\n \"data-direction\": direction(),\n title: title(),\n }}\n >\n {label}\n </CalendarNavigationLink>\n ) : props.owner.onDateChange ? (\n <Button\n type=\"button\"\n variant=\"input\"\n size=\"sm\"\n class=\"k2b-calendar-header__today\"\n data-direction={direction()}\n title={title()}\n onClick={() => {\n if (!intercept()) goDate(today);\n }}\n >\n {todayIcon()}\n {props.labels.today}\n </Button>\n ) : (\n <CalendarNavigationLink\n owner={props.owner}\n href={href ?? \"#\"}\n intercept={intercept}\n anchorProps={{\n class: \"k2b-button k2b-calendar-header__today\",\n \"data-size\": \"sm\",\n \"data-variant\": \"input\",\n \"data-direction\": direction(),\n title: title(),\n }}\n >\n {label}\n </CalendarNavigationLink>\n );\n };\n const viewOptions = createMemo(\n (): Array<{ value: CalendarView | V; label: string }> => [\n ...(\n [\n { value: \"day\", label: props.labels.day },\n { value: \"week\", label: props.labels.week },\n { value: \"month\", label: props.labels.month },\n { value: \"year\", label: props.labels.year },\n ] satisfies Array<{ value: CalendarView; label: string }>\n ).filter((option) => !props.owner.views || props.owner.views.includes(option.value)),\n ...(props.owner.customViews ?? []),\n ],\n );\n\n return (\n <header class=\"k2b-calendar-header\">\n <div class=\"k2b-calendar-header__navigation\">\n {navButton(previous, \"ti-chevron-left\", props.labels.previous, -1)}\n {navButton(next, \"ti-chevron-right\", props.labels.next, 1)}\n <div class=\"k2b-calendar-header__title\">\n <span>{title()}</span>\n {/* The widest title of the view reserves its width, so paging never moves what follows the title. */}\n <For each={titleWidths()}>\n {(candidate) => (\n <span class=\"k2b-calendar-header__title-size\" aria-hidden=\"true\">\n {candidate}\n </span>\n )}\n </For>\n </div>\n </div>\n <Show when={props.owner.toolbarContent}>\n <div class=\"k2b-calendar-header__content\">{props.owner.toolbarContent}</div>\n </Show>\n <div class=\"k2b-calendar-header__actions\">\n {todayButton()}\n <Show\n when={!props.owner.onViewChange && props.owner.getViewHref}\n fallback={\n <SegmentedControl\n class=\"k2b-calendar-view-switcher\"\n value={() => (props.view === \"mobile-month\" ? \"month\" : props.view)}\n onValueChange={goView}\n ariaLabel={calendarMessages().calendarView}\n options={viewOptions()}\n />\n }\n >\n <CalendarViewLinks owner={props.owner} view={props.view} options={viewOptions()} focusDay={props.focusDay} />\n </Show>\n {props.owner.toolbarActions}\n <Show when={props.nav.commands().length > 0}>\n <button\n type=\"button\"\n class=\"k2b-calendar-header__shortcuts\"\n aria-label={calendarMessages().calendarShortcuts}\n title={calendarMessages().calendarShortcuts}\n onClick={() => props.nav.openShortcuts()}\n >\n <i class=\"ti ti-keyboard\" aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n <Show when={props.owner.navigationPending}>\n <span class=\"k2b-calendar-header__progress\" aria-hidden=\"true\" />\n </Show>\n </header>\n );\n};\n\n/** The compact month of `mobile-month`: a picker whose days link to their agenda. */\nconst MonthPickerView = (props: {\n owner: CalendarOwner;\n date: Date;\n now: Date;\n events: NormalizedEvent[];\n labels: Required<CalendarLabels>;\n compact?: boolean;\n}): JSX.Element => {\n const calendarMessages = useCalendarMessages();\n const dateConfig = createMemo(() => ownerDateConfig(props.owner));\n const [movePreview, setMovePreview] = createSignal<CalendarPreview | null>(null);\n const [movingEventId, setMovingEventId] = createSignal(\"\");\n let cancelInteraction: (() => void) | undefined;\n let suppressSlotClickUntil = 0;\n const month = createMemo(() => zonedYearMonth(props.date, dateConfig()));\n const weeks = createMemo(() => calendar.getMonthGrid(month().year, month().month, dateConfig()));\n const weekdays = createMemo(() => calendar.weekdays(dateConfig()));\n const todayKey = createMemo(() => calendar.formatDateKey(props.now, dateConfig()));\n const eventsByDay = createMemo(() => {\n const grouped = new Map<string, NormalizedEvent[]>();\n for (const event of props.events) {\n const events = grouped.get(event.dayKey);\n if (events) events.push(event);\n else grouped.set(event.dayKey, [event]);\n }\n return grouped;\n });\n const clearMove = () => {\n setMovePreview(null);\n setMovingEventId(\"\");\n };\n const dayAtPoint = (clientX: number, clientY: number): Date | null => {\n const target = document.elementFromPoint(clientX, clientY)?.closest<HTMLElement>(\"[data-calendar-day-key]\");\n const dayKey = target?.dataset.calendarDayKey;\n return dayKey ? calendar.parseCalendarDate(dayKey, dateConfig()) : null;\n };\n const startMove = (pointerEvent: PointerEvent, event: NormalizedEvent, markDragged: () => void) => {\n if (!props.owner.onEventDrop) return;\n cancelInteraction?.();\n cancelInteraction = startCalendarPointerSession({\n event: pointerEvent,\n resolve: (clientX, clientY) => {\n const day = dayAtPoint(clientX, clientY);\n return day ? { id: event.id, ...moveEventToDay(event, day, dateConfig()) } : null;\n },\n onActivate: () => {\n markDragged();\n suppressSlotClickUntil = performance.now() + 400;\n setMovingEventId(event.id);\n },\n onPreview: setMovePreview,\n onCommit: (next) => {\n clearMove();\n if (eventTimeChanged(event, next)) props.owner.onEventDrop?.(event, next);\n },\n onCancel: clearMove,\n });\n };\n onCleanup(() => cancelInteraction?.());\n return (\n <div\n class=\"k2b-calendar-month\"\n // The mobile month is a bounded picker: finger-sized weeks that keep the selected day's agenda close below.\n style={{ \"grid-template-rows\": `auto repeat(${weeks().length}, ${props.compact ? \"minmax(2.75rem, auto)\" : \"minmax(5rem, 1fr)\"})` }}\n >\n <div class=\"k2b-calendar-month__weekdays\" data-week-numbers={props.owner.withWeekNumbers ? \"true\" : undefined}>\n <Show when={props.owner.withWeekNumbers}>\n <div class=\"k2b-calendar-month__weekday\">{calendarMessages().weekShort}</div>\n </Show>\n <For each={weekdays()}>\n {(day, index) => (\n <div\n class=\"k2b-calendar-month__weekday\"\n data-weekend={isWeekendColumn(index(), dateConfig().firstDayOfWeek ?? 1, dateConfig().locale) ? \"true\" : undefined}\n >\n {day}\n </div>\n )}\n </For>\n </div>\n <For each={weeks()}>\n {(week) => (\n <div class=\"k2b-calendar-month__week\" data-week-numbers={props.owner.withWeekNumbers ? \"true\" : undefined}>\n <Show when={props.owner.withWeekNumbers}>\n <div class=\"k2b-calendar-month__week-number\">{zonedWeekNumber(week[0]!, dateConfig())}</div>\n </Show>\n <For each={week}>\n {(day) => {\n const dayKey = calendar.formatDateKey(day, dateConfig());\n const events = eventsByDay().get(dayKey) ?? [];\n const href = props.owner.getDateHref?.(day, \"day\");\n const dayBadge = props.owner.dayBadges?.[dayKey];\n const sameMonth = calendar.isSameMonth(day, props.date, dateConfig());\n const isToday = dayKey === todayKey();\n const dayLabel = day.toLocaleDateString(dateConfig().locale ?? \"en\", {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n timeZone: dateConfig().timeZone,\n });\n const eventStack = createMemo(() => {\n const preview = movePreview();\n const previewForDay = preview && calendar.formatDateKey(preview.start, dateConfig()) === dayKey ? preview : null;\n const candidates = previewForDay ? events.filter((event) => event.id !== previewForDay.id) : events;\n const visibleLimit = previewForDay ? 2 : 3;\n return {\n preview: previewForDay,\n visibleEvents: candidates.slice(0, visibleLimit),\n hiddenCount: Math.max(0, candidates.length - visibleLimit),\n };\n });\n return (\n <div\n class=\"k2b-calendar-month__day\"\n data-calendar-day-key={dayKey}\n data-outside={!sameMonth ? \"true\" : undefined}\n data-weekend={isWeekendKey(dayKey, dateConfig().locale) ? \"true\" : undefined}\n data-drop-preview={\n movePreview()?.start && calendar.formatDateKey(movePreview()!.start, dateConfig()) === dayKey ? \"true\" : undefined\n }\n >\n <Show\n when={props.owner.onSlotActivate}\n fallback={\n <Show when={href}>\n {(dayHref) => (\n <CalendarNavigationLink\n owner={props.owner}\n href={dayHref()}\n anchorProps={{\n class: \"k2b-calendar-month__day-target\",\n \"aria-label\": calendarMessages().openDate({ label: dayLabel }),\n }}\n />\n )}\n </Show>\n }\n >\n <button\n type=\"button\"\n class=\"k2b-calendar-month__day-target\"\n data-interactive=\"true\"\n aria-label={calendarMessages().createEventOn({ label: dayLabel })}\n {...slotInteractionProps(\n props.owner,\n () => {\n const start = startOfDay(day, dateConfig());\n return { start, end: calendar.addDays(start, 1, dateConfig()), allDay: true };\n },\n () => performance.now() < suppressSlotClickUntil,\n true,\n )}\n />\n </Show>\n <div class=\"k2b-calendar-month__day-header\">\n <Show\n when={props.owner.onSlotActivate && href}\n fallback={\n <span\n class=\"k2b-calendar-month__day-number\"\n data-today={isToday ? \"true\" : undefined}\n data-outside={!sameMonth ? \"true\" : undefined}\n >\n {calendar.formatDayNumber(day, dateConfig())}\n </span>\n }\n >\n {(dayHref) => (\n <CalendarNavigationLink\n owner={props.owner}\n href={dayHref()}\n anchorProps={{\n class: \"k2b-calendar-month__day-number\",\n \"data-today\": isToday ? \"true\" : undefined,\n \"data-outside\": !sameMonth ? \"true\" : undefined,\n \"aria-label\": calendarMessages().openDate({ label: dayLabel }),\n }}\n >\n {calendar.formatDayNumber(day, dateConfig())}\n </CalendarNavigationLink>\n )}\n </Show>\n <Show when={dayBadge}>\n {(badge) => (\n <span class=\"k2b-calendar-month__badge\">\n <Show when={badge().icon}>{(icon) => <i class={`k2b-calendar-month__badge-icon ti ti-${icon()}`} />}</Show>\n {badge().label}\n </span>\n )}\n </Show>\n </div>\n <div class=\"k2b-calendar-month__events\">\n <Show when={eventStack().preview}>\n <div class=\"k2b-calendar-preview\">\n {props.events.find((event) => event.id === eventStack().preview!.id)?.title ?? calendarMessages().moveEvent}\n </div>\n </Show>\n <For each={eventStack().visibleEvents}>\n {(event) => (\n <EventChip\n event={event}\n owner={props.owner}\n href={eventHref(props.owner, event)}\n compact\n moving={movingEventId() === event.id}\n onMovePointerDown={\n props.owner.onEventDrop\n ? (pointerEvent, markDragged) => startMove(pointerEvent, event, markDragged)\n : undefined\n }\n />\n )}\n </For>\n <Show when={eventStack().hiddenCount > 0}>\n <CalendarNavigationLink owner={props.owner} href={href ?? \"#\"} anchorProps={{ class: \"k2b-calendar-month__more\" }}>\n {calendarMessages().calendarMoreEvents({ count: eventStack().hiddenCount })}\n </CalendarNavigationLink>\n </Show>\n </div>\n <div class=\"k2b-calendar-month__dots\">\n <For each={events.slice(0, 4)}>\n {(event) => (\n <span\n class=\"k2b-calendar-dot\"\n data-color={event.colorHex ? undefined : (event.color ?? \"blue\")}\n style={event.colorHex ? { \"background-color\": event.colorHex } : undefined}\n />\n )}\n </For>\n </div>\n </div>\n );\n }}\n </For>\n </div>\n )}\n </For>\n </div>\n );\n};\n\n/** One entry of the month grid: its whole range, and the days it covers as `YYYY-MM-DD` keys. */\ntype MonthItem = {\n /** Identifies the entry across the week rows it spans. */\n key: string;\n event: NormalizedEvent;\n firstKey: string;\n lastKey: string;\n /** All-day and multi-day entries are bars; the others stack in their day. */\n bar: boolean;\n /** Pieces of the entry per day, for the day list. */\n days: Map<string, NormalizedEvent>;\n};\n\ntype MonthSelection = { first: string; last: string };\n\n/** What the calendar's controller and header ask of the month view; the rest serves the month that scrolls. */\ntype MonthHandle = Pick<CalendarController, \"quickCreate\" | \"createTarget\"> & {\n /** The quiet quick create waits for the person to type its title. */\n typing: () => boolean;\n continuous: () => boolean;\n /** The 1st of the month in the middle of the view, which the title names. */\n focusMonth: () => Date;\n /** The 1st of the month the next step goes on from: where quick repeated steps head, else the month in focus. */\n stepFrom: () => Date;\n /** The day the view stands for, as `onVisibleDateChange` reports it as `focus`. */\n focusDay: () => Date;\n step: (direction: -1 | 1) => boolean;\n goTo: (key: string) => boolean;\n today: () => boolean;\n todayDirection: () => TodayDirection;\n};\n\ntype MonthPopover =\n | { kind: \"day\"; dayKey: string; anchor: HTMLElement }\n | { kind: \"create\"; range: MonthSelection; anchor: HTMLElement; create?: string };\n\n/** Lane height and gap of the month entries, in rem; the stylesheet reads both from the grid's custom properties. */\nconst MONTH_LANE_REM = 1.25;\nconst MONTH_LANE_GAP_REM = 0.125;\n/** Rows drawn before the browser has measured the cells, as in the server response. */\nconst MONTH_DEFAULT_LANES = 3;\n/** Room a bar keeps beside its title and date hint: padding, torn edge, gap, and an icon such as a task box or a flag. */\nconst MONTH_HINT_SLACK_REM = 2.25;\n\nconst dayKeyNumber = (key: string): number => {\n const [year = \"1970\", month = \"1\", day = \"1\"] = key.split(\"-\");\n return Date.UTC(Number(year), Number(month) - 1, Number(day)) / 86_400_000;\n};\n\nconst orderedSelection = (anchor: string, focus: string): MonthSelection =>\n anchor <= focus ? { first: anchor, last: focus } : { first: focus, last: anchor };\n\n/** Groups the per-day pieces of the events back into one entry each: bars first, then the others by time. */\nconst monthItems = (events: NormalizedEvent[]): MonthItem[] => {\n const items = new Map<string, MonthItem>();\n for (const piece of events) {\n const key = `${piece.id}\\u0000${piece.sourceStartDate.getTime()}`;\n const item = items.get(key);\n if (item) {\n if (piece.dayKey < item.firstKey) item.firstKey = piece.dayKey;\n if (piece.dayKey > item.lastKey) item.lastKey = piece.dayKey;\n item.days.set(piece.dayKey, piece);\n continue;\n }\n items.set(key, {\n key,\n event: { ...piece, startDate: piece.sourceStartDate, endDate: piece.sourceEndDate },\n firstKey: piece.dayKey,\n lastKey: piece.dayKey,\n bar: false,\n days: new Map([[piece.dayKey, piece]]),\n });\n }\n for (const item of items.values())\n item.bar = item.firstKey !== item.lastKey || Boolean(item.event.allDay && item.event.display !== \"marker\");\n return [...items.values()].sort(\n (left, right) =>\n Number(right.bar) - Number(left.bar) ||\n left.event.sourceStartDate.getTime() - right.event.sourceStartDate.getTime() ||\n left.event.title.localeCompare(right.event.title),\n );\n};\n\nconst PRINTABLE_KEY = /^.$/u;\n\n/**\n * The month grid. A click selects a day and never navigates, a drag or Shift selects a range, and the arrow keys move\n * the selection. The quick create opens at the selection: quietly after a click, with the focus after a drag, a\n * double-click, Enter, or N. Every event is one bar per week row in a lane it keeps on each of its days, and each\n * cell shows as many entries as its height holds.\n */\nconst MonthView = (props: {\n owner: CalendarOwner;\n date: Date;\n now: Date;\n events: NormalizedEvent[];\n labels: Required<CalendarLabels>;\n /** The first selected day, for the view switcher; `null` without a selection. */\n onFocusDay?: (date: Date | null) => void;\n /** The host's navigation, for a step past an end of `range` that the host has reached. */\n goToDate?: (date: Date) => void;\n /** Receives what the calendar's controller asks of the month view. */\n register?: (handle: MonthHandle | null) => void;\n}): JSX.Element => {\n const calendarMessages = useCalendarMessages();\n const dateConfig = createMemo(() => ownerDateConfig(props.owner));\n const continuous = createMemo(() => Boolean(props.owner.range));\n const [mounted, setMounted] = createSignal(false);\n const hostMonthKey = () => calendar.formatDateKey(calendar.startOfMonth(props.date, dateConfig()), dateConfig());\n const [focusMonthKey, setFocusMonthKey] = createSignal(untrack(hostMonthKey));\n // The shown month and its grid change only with the month, so a refresh of the same month keeps every cell and its\n // focus.\n const month = createMemo(\n () => zonedYearMonth(continuous() ? calendar.parseCalendarDate(focusMonthKey(), dateConfig()) : props.date, dateConfig()),\n undefined,\n {\n equals: (previous, next) => previous.year === next.year && previous.month === next.month,\n },\n );\n const weeks = createMemo(\n () =>\n calendar\n .getMonthGrid(month().year, month().month, dateConfig())\n .map((week) => week.map((day) => ({ day, key: calendar.formatDateKey(day, dateConfig()) }))),\n undefined,\n { equals: (previous, next) => previous.map((week) => week[0]?.key).join() === next.map((week) => week[0]?.key).join() },\n );\n const weekdays = createMemo(() => calendar.weekdays(dateConfig()));\n const weekendColumn = (index: number) => isWeekendColumn(index, dateConfig().firstDayOfWeek ?? 1, dateConfig().locale);\n const todayKey = createMemo(() => calendar.formatDateKey(props.now, dateConfig()));\n const items = createMemo(() => monthItems(props.events));\n const [capacities, setCapacities] = createSignal<number[]>([]);\n const [cellWidth, setCellWidth] = createSignal(0);\n const [barFont, setBarFont] = createSignal(\"\");\n const [anchorKey, setAnchorKey] = createSignal<string | null>(null);\n const [focusKey, setFocusKey] = createSignal<string | null>(null);\n const [focusedCellKey, setFocusedCellKey] = createSignal<string | null>(null);\n const [popover, setPopover] = createSignal<MonthPopover | null>(null);\n /** Whether the quick create holds the focus; until then the grid keeps it. */\n const [createActive, setCreateActive] = createSignal(false);\n const [linkedItem, setLinkedItem] = createSignal(\"\");\n const [movePreview, setMovePreview] = createSignal<CalendarPreview | null>(null);\n const [movingEventId, setMovingEventId] = createSignal(\"\");\n const cells = new Map<string, HTMLElement>();\n let popoverElement: HTMLDivElement | undefined;\n let cancelInteraction: (() => void) | undefined;\n let suppressClickUntil = 0;\n let lastPointer = \"mouse\";\n let menuKey: string | null = null;\n /** The day to select once paging with Page Up or Page Down has shown its month. */\n let pendingKey: string | null = null;\n\n const selection = createMemo((): MonthSelection | null => {\n const anchor = anchorKey();\n const focus = focusKey();\n return anchor && focus ? orderedSelection(anchor, focus) : null;\n });\n const parseKey = (key: string) => calendar.parseCalendarDate(key, dateConfig());\n const rangeOf = (range: MonthSelection): CalendarEventTimeChange => ({\n start: parseKey(range.first),\n end: calendar.addDays(parseKey(range.last), 1, dateConfig()),\n allDay: true,\n });\n const hostKey = () => calendar.formatDateKey(props.date, dateConfig());\n const loadedRange = createMemo(() => {\n const range = props.owner.range;\n const keyOf = (value: Date | string) => calendar.formatDateKey(parseDate(value, dateConfig()), dateConfig());\n return range ? { first: keyOf(range.from), to: keyOf(range.to) } : { first: hostMonthKey(), to: hostMonthKey() };\n });\n const loadedWeeks = createMemo(() => monthWeekKeys(loadedRange().first, loadedRange().to, dateConfig().firstDayOfWeek ?? 1));\n const loaded = (key: string) => key >= loadedRange().first && key < loadedRange().to;\n // The first paint starts at the month's first week. Mount adds the earlier weeks and positions synchronously.\n const trackWeeks = createMemo(() => {\n const all = loadedWeeks();\n const anchor = monthRowOf(all, hostMonthKey());\n return mounted() || anchor === undefined ? all : all.slice(anchor);\n });\n const [scrollTop, setScrollTop] = createSignal(0);\n const [rowHeight, setRowHeight] = createSignal(80);\n const [viewHeight, setViewHeight] = createSignal(400);\n const [labelShown, setLabelShown] = createSignal(false);\n const [pulseKey, setPulseKey] = createSignal(\"\");\n let scroller: HTMLDivElement | undefined;\n let weekdayElement: HTMLDivElement | undefined;\n let ready = false;\n let positioned = false;\n let silentTop: number | null = null;\n let frame = 0;\n let labelTimer = 0;\n let reportTimer = 0;\n let queueTimer = 0;\n let glideTimer = 0;\n let arrivalTimer = 0;\n let pulseTimer = 0;\n /** The month that quick repeated steps head for; the next step and the arrows' links go on from it. */\n const [queuedMonth, setQueuedMonth] = createSignal<string | null>(null);\n let pendingTarget: string | null = null;\n let pendingOrigin: \"mount\" | \"host\" | -1 | 1 | null = null;\n let glideTarget: { week: string; offset: number; expires: number } | null = null;\n let pulseOnArrival = false;\n let reported = \"\";\n let reportedFocus = \"\";\n let askedEarlier = \"\";\n let askedLater = \"\";\n let exhaustedEarlier = \"\";\n let exhaustedLater = \"\";\n\n const scrollFocusDay = createMemo(() => {\n const first = focusMonthKey();\n const range = selection();\n const selected = range && range.last >= first ? (range.first > first ? range.first : first) : null;\n if (selected?.slice(0, 7) === first.slice(0, 7)) return selected;\n if (hostKey().slice(0, 7) === first.slice(0, 7)) return hostKey();\n return todayKey().slice(0, 7) === first.slice(0, 7) ? todayKey() : first;\n });\n const visibleRange = createMemo(() => {\n const weeks = trackWeeks();\n const rows = monthVisibleRows(scrollTop(), viewHeight(), rowHeight(), weeks.length);\n const first = weeks[rows.first] ?? focusMonthKey();\n return { first, last: addDayKeys(weeks[Math.max(rows.first, rows.end - 1)] ?? first, 6) };\n });\n const renderWindow = createMemo(\n () =>\n mounted()\n ? monthRenderWindow(scrollTop(), viewHeight(), rowHeight(), trackWeeks().length)\n : { first: 0, end: Math.min(trackWeeks().length, MONTH_ROW_BLOCK * 2) },\n undefined,\n { equals: (left, right) => left.first === right.first && left.end === right.end },\n );\n /** The window's weeks, and those of the focused day, the selection's moving end, and an open popover's day. */\n const renderedWeeks = createMemo(() => {\n const weeks = trackWeeks();\n const window = renderWindow();\n const keys = new Set(weeks.slice(window.first, window.end));\n for (const key of [focusKey(), focusedCellKey(), popover()?.anchor.dataset.calendarDayKey]) {\n const row = key ? monthRowOf(weeks, key) : undefined;\n if (row !== undefined) keys.add(weeks[row]!);\n }\n return [...keys].sort();\n });\n // Rows keep their elements, but the list moves a kept row when the window passes it, and a browser drops the focus\n // from an element that moves. The focused element takes it back once the rows are in place.\n let refocus: Element | null = null;\n createComputed(\n on(\n renderedWeeks,\n () => {\n const active = typeof document === \"undefined\" ? null : document.activeElement;\n refocus = active && scroller?.contains(active) ? active : null;\n },\n { defer: true },\n ),\n );\n createEffect(\n on(\n renderedWeeks,\n () => {\n const element = refocus;\n refocus = null;\n if (element instanceof HTMLElement && element.isConnected && document.activeElement !== element)\n element.focus({ preventScroll: true });\n },\n { defer: true },\n ),\n );\n const placeOfToday = (): TodayDirection => {\n const weeks = trackWeeks();\n const row = monthRowOf(weeks, todayKey());\n return row === undefined\n ? todayKey() < (weeks[0] ?? focusMonthKey())\n ? \"up\"\n : \"down\"\n : monthTodayDirection(row, scrollTop(), viewHeight(), rowHeight());\n };\n const measureScroll = () => {\n if (!scroller) return;\n const row = scroller.querySelector<HTMLElement>(\".k2b-calendar-month__week\");\n const height = row?.getBoundingClientRect().height;\n if (height && height > 0) setRowHeight(height);\n setViewHeight(Math.max(0, scroller.clientHeight - (weekdayElement?.getBoundingClientRect().height ?? 0)));\n };\n const loadMore = (edge: \"earlier\" | \"later\") => {\n if (!ready) return;\n const range = loadedRange();\n const asked = edge === \"earlier\" ? range.first : range.to;\n const loader = edge === \"earlier\" ? props.owner.onLoadEarlier : props.owner.onLoadLater;\n if (\n !loader ||\n (edge === \"earlier\" ? askedEarlier === asked || exhaustedEarlier === asked : askedLater === asked || exhaustedLater === asked)\n )\n return;\n if (edge === \"earlier\") askedEarlier = asked;\n else askedLater = asked;\n const result = loader();\n if (\n result !== null &&\n (typeof result === \"object\" || typeof result === \"function\") &&\n \"then\" in result &&\n typeof result.then === \"function\"\n ) {\n const settled = () => {\n if (!ready || (edge === \"earlier\" ? loadedRange().first : loadedRange().to) !== asked) return;\n if (edge === \"earlier\") exhaustedEarlier = asked;\n else exhaustedLater = asked;\n const target = pendingOrigin === (edge === \"earlier\" ? -1 : 1) ? pendingTarget : null;\n if (target) {\n pendingTarget = null;\n pendingOrigin = null;\n setQueuedMonth(null);\n window.clearTimeout(queueTimer);\n }\n if (edge === \"later\" && glideTarget?.expires === Number.POSITIVE_INFINITY) {\n glideTarget = null;\n pulseOnArrival = false;\n setQueuedMonth(null);\n for (const timer of [queueTimer, glideTimer, arrivalTimer]) window.clearTimeout(timer);\n readScroll();\n }\n if (target) props.goToDate?.(parseKey(target));\n };\n void Promise.resolve(result).then(settled, settled);\n }\n };\n /** Asks for more weeks near either end; weeks inserted above a running glide would move its way, so it waits. */\n const loadNearEdges = () => {\n if (!scroller) return;\n if (!glideTarget && scroller.scrollTop < MONTH_ROWS_IN_VIEW * rowHeight()) loadMore(\"earlier\");\n if (scroller.scrollTop + viewHeight() > (trackWeeks().length - MONTH_ROWS_IN_VIEW * 2) * rowHeight()) loadMore(\"later\");\n };\n const reportVisible = () => {\n if (!ready) return;\n const { first, last } = untrack(visibleRange);\n const focus = untrack(scrollFocusDay);\n const value = `${first}/${last}/${focus}`;\n if (reported === value) return;\n reported = value;\n window.clearTimeout(reportTimer);\n reportTimer = window.setTimeout(() => {\n reportedFocus = focus;\n props.owner.onVisibleDateChange?.(parseKey(first), parseKey(last), parseKey(focus));\n }, 250);\n };\n const keepLabel = () => {\n window.clearTimeout(labelTimer);\n labelTimer = window.setTimeout(() => setLabelShown(false), 650);\n };\n const readScroll = (showLabel = true) => {\n if (!scroller) return;\n const top = scroller.scrollTop;\n setScrollTop(top);\n const weeks = trackWeeks();\n const week = weeks[monthFocusRow(top, viewHeight(), rowHeight(), weeks.length)];\n if (week) {\n const next = monthOfWeek(week);\n if (next !== untrack(focusMonthKey)) {\n setFocusMonthKey(next);\n if (showLabel && ready) {\n setLabelShown(true);\n keepLabel();\n }\n }\n }\n reportVisible();\n };\n const pulseToday = () => {\n if (prefersReducedMotion()) return;\n setPulseKey(todayKey());\n window.clearTimeout(pulseTimer);\n pulseTimer = window.setTimeout(() => setPulseKey(\"\"), 1000);\n };\n const finishGlide = () => {\n if (!scroller) return;\n const target = glideTarget;\n const row = target ? monthRowOf(trackWeeks(), target.week) : undefined;\n // A clamped glide may still be waiting for more weeks below; scrollend is not arrival then.\n if (target && row !== undefined && Math.abs(scroller.scrollTop - (row * rowHeight() + target.offset)) > 1) return;\n glideTarget = null;\n if (pendingOrigin !== -1 && pendingOrigin !== 1) {\n setQueuedMonth(null);\n window.clearTimeout(queueTimer);\n }\n window.clearTimeout(glideTimer);\n window.clearTimeout(arrivalTimer);\n readScroll();\n // A glide that lands near an end asks for the next weeks there, as the reader's own scrolling does.\n if (target) loadNearEdges();\n if (pulseOnArrival) {\n pulseOnArrival = false;\n pulseToday();\n }\n };\n const cancelGlide = () => {\n if (!scroller) return;\n if (pendingOrigin === -1 || pendingOrigin === 1) {\n pendingTarget = null;\n pendingOrigin = null;\n setQueuedMonth(null);\n window.clearTimeout(queueTimer);\n }\n if (!glideTarget) return;\n // A reader's wheel or touch takes over from navigation, including any target waiting for more weeks.\n glideTarget = null;\n pulseOnArrival = false;\n setQueuedMonth(null);\n for (const timer of [queueTimer, glideTimer, arrivalTimer]) window.clearTimeout(timer);\n scroller.scrollTo({ top: scroller.scrollTop, behavior: \"instant\" });\n };\n const issueGlide = (top: number, smooth: boolean) => {\n if (!scroller) return;\n const maximum = Math.max(0, scroller.scrollHeight - scroller.clientHeight);\n const target = Math.max(0, Math.min(top, maximum));\n if (smooth && !prefersReducedMotion() && Math.abs(target - scroller.scrollTop) > viewHeight() * 3) {\n scroller.scrollTop = target - Math.sign(target - scroller.scrollTop) * viewHeight();\n readScroll();\n }\n scroller.scrollTo({ top: target, behavior: smooth && !prefersReducedMotion() ? \"smooth\" : \"instant\" });\n if (top > maximum + 1) loadMore(\"later\");\n if (!smooth || prefersReducedMotion()) {\n readScroll();\n finishGlide();\n }\n };\n const glide = (top: number, smooth = true) => {\n if (!scroller) return;\n const row = Math.max(0, Math.min(trackWeeks().length - 1, Math.floor(top / rowHeight())));\n const week = trackWeeks()[row];\n if (!week) return;\n // A target past the loaded weeks waits for them however long they take; the reader's own scrolling ends the wait.\n const waiting = top > scroller.scrollHeight - scroller.clientHeight + 1;\n glideTarget = { week, offset: top - row * rowHeight(), expires: waiting ? Number.POSITIVE_INFINITY : performance.now() + 1600 };\n window.clearTimeout(glideTimer);\n window.clearTimeout(arrivalTimer);\n if (!waiting)\n glideTimer = window.setTimeout(() => {\n glideTarget = null;\n pulseOnArrival = false;\n }, 1600);\n arrivalTimer = window.setTimeout(finishGlide, 900);\n issueGlide(top, smooth);\n };\n const positionMonth = (key: string, smooth = true, reveal = false) => {\n if (!continuous() || !loaded(key) || !scroller) return false;\n const weeks = trackWeeks();\n const first = monthRowOf(weeks, `${key.slice(0, 7)}-01`);\n const row = monthRowOf(weeks, key);\n if (first === undefined || row === undefined) return false;\n const top = first * rowHeight();\n glide(reveal ? (monthRevealTop(row, top, viewHeight(), rowHeight()) ?? top) : top, smooth);\n return true;\n };\n const goToMonth = (key: string) => positionMonth(key, true, true);\n const stepMonth = (direction: -1 | 1) => {\n if (!continuous() || !scroller) return false;\n const target = calendar.formatDateKey(\n calendar.addMonths(parseKey(queuedMonth() ?? focusMonthKey()), direction, dateConfig()),\n dateConfig(),\n );\n if (loaded(target)) {\n pendingTarget = null;\n pendingOrigin = null;\n if (!positionMonth(target)) return false;\n } else {\n // A month past the loaded weeks asks for them and waits; an end the host has reached goes through its navigation.\n const range = loadedRange();\n const later = direction === 1;\n const edge = later ? range.to : range.first;\n if (!(later ? props.owner.onLoadLater : props.owner.onLoadEarlier) || (later ? exhaustedLater : exhaustedEarlier) === edge)\n return false;\n pendingTarget = target;\n pendingOrigin = direction;\n loadMore(later ? \"later\" : \"earlier\");\n }\n // Instant positioning may finish during positionMonth; queue afterwards so rapid clicks still accumulate.\n setQueuedMonth(target);\n window.clearTimeout(queueTimer);\n // A glide that waits for more weeks keeps its month queued until it arrives or the reader scrolls.\n queueTimer = window.setTimeout(() => {\n if (pendingOrigin !== -1 && pendingOrigin !== 1 && glideTarget?.expires !== Number.POSITIVE_INFINITY) setQueuedMonth(null);\n }, 1200);\n return true;\n };\n const goToday = () => {\n if (!continuous() || !loaded(todayKey()) || !scroller) return false;\n pulseOnArrival = !prefersReducedMotion();\n if (positionMonth(todayKey(), true, true)) return true;\n pulseOnArrival = false;\n return false;\n };\n const revealDay = (key: string) => {\n const row = monthRowOf(trackWeeks(), key);\n if (row === undefined || !scroller) return;\n const top = monthRevealTop(row, scroller.scrollTop, viewHeight(), rowHeight());\n if (top !== undefined) glide(top);\n };\n const onScroll = () => {\n if (!ready || !scroller) return;\n // Initial positioning and range rebasing are not the reader asking for more weeks.\n if (silentTop !== null && Math.abs(scroller.scrollTop - silentTop) < 1) return;\n silentTop = null;\n if (untrack(labelShown)) keepLabel();\n if (!frame)\n frame = requestAnimationFrame(() => {\n frame = 0;\n readScroll();\n if (!scroller) return;\n loadNearEdges();\n });\n };\n // Capture the old track before render effects change its height, then restore the same week and pixel below.\n let previousWeeks: string[] = [];\n let savedAnchor: { week: string; delta: number } | null = null;\n createComputed(\n on(\n loadedWeeks,\n (weeks) => {\n if (!untrack(mounted) || !scroller) return;\n const top = scroller.scrollTop;\n const row = Math.floor(top / untrack(rowHeight));\n const week = previousWeeks[row];\n savedAnchor = week ? { week, delta: top - row * untrack(rowHeight) } : null;\n const next = week ? monthRowOf(weeks, week) : undefined;\n // Move the render window before DOM updates, so even a larger rebase retains the visible rows' elements.\n if (next !== undefined && savedAnchor) setScrollTop(next * untrack(rowHeight) + savedAnchor.delta);\n },\n { defer: true },\n ),\n );\n createEffect(\n on(\n loadedWeeks,\n () => {\n if (!untrack(mounted) || !scroller) return;\n measureScroll();\n previousWeeks = untrack(trackWeeks);\n const row = savedAnchor ? monthRowOf(previousWeeks, savedAnchor.week) : undefined;\n const top = row !== undefined && savedAnchor ? row * untrack(rowHeight) + savedAnchor.delta : scroller.scrollTop;\n // Weeks added below move nothing, and writing the same position would stop a glide on its way.\n const moved = Math.abs(scroller.scrollTop - top) >= 1;\n if (moved) scroller.scrollTop = top;\n if (pendingTarget && loaded(pendingTarget)) {\n const key = pendingTarget;\n pendingTarget = null;\n pendingOrigin = null;\n positioned = positionMonth(key, positioned) || positioned;\n if (pendingKey === key) {\n pendingKey = null;\n select(key);\n queueMicrotask(() => focusCell(key));\n }\n } else {\n if (pendingTarget && (pendingOrigin === -1 || pendingOrigin === 1)) loadMore(pendingOrigin === -1 ? \"earlier\" : \"later\");\n // A glide goes on after the weeks above moved it, and one that waited at the end goes on into the new weeks.\n if (glideTarget && performance.now() < glideTarget.expires && (moved || glideTarget.expires === Number.POSITIVE_INFINITY)) {\n const target = monthRowOf(previousWeeks, glideTarget.week);\n if (target !== undefined) issueGlide(target * untrack(rowHeight) + glideTarget.offset, true);\n }\n }\n savedAnchor = null;\n silentTop = scroller.scrollTop;\n readScroll(false);\n },\n { defer: true },\n ),\n );\n createEffect(\n on(\n hostKey,\n (key) => {\n if (!continuous() || !untrack(mounted) || !scroller) return;\n if (key === reportedFocus) {\n if (pendingOrigin === \"host\") {\n pendingTarget = null;\n pendingOrigin = null;\n }\n return;\n }\n pendingTarget = loaded(key) ? null : key;\n pendingOrigin = pendingTarget ? \"host\" : null;\n if (pendingTarget) return;\n const visible = untrack(visibleRange);\n if (key.slice(0, 7) !== untrack(focusMonthKey).slice(0, 7) || key < visible.first || key > visible.last) positionMonth(key);\n if (pendingKey === key) {\n pendingKey = null;\n select(key);\n queueMicrotask(() => focusCell(key));\n }\n },\n { defer: true },\n ),\n );\n createEffect(\n on(\n scrollFocusDay,\n () => {\n if (continuous()) reportVisible();\n },\n { defer: true },\n ),\n );\n // The scrolling starts once the grid is on the page, also when a host passes `range` only later.\n createEffect(\n on(continuous, (active) => {\n if (!active || !scroller) return;\n setMounted(true);\n measureScroll();\n previousWeeks = trackWeeks();\n const row = monthRowOf(previousWeeks, hostMonthKey());\n if (row !== undefined && loaded(hostKey())) scroller.scrollTop = row * rowHeight();\n // Too few weeks below the month, such as the days of another view while the month's own load, cannot put its\n // first week on top yet; the month goes there once its weeks arrive.\n positioned = row !== undefined && Math.abs(scroller.scrollTop - row * rowHeight()) < 1;\n if (!positioned) {\n pendingTarget = hostKey();\n pendingOrigin = \"mount\";\n }\n readScroll(false);\n silentTop = scroller.scrollTop;\n ready = true;\n reportVisible();\n scroller.addEventListener(\"scrollend\", finishGlide);\n const resize =\n typeof ResizeObserver === \"undefined\"\n ? undefined\n : new ResizeObserver(() => {\n if (!scroller) return;\n const height = untrack(rowHeight);\n const position = scroller.scrollTop / height;\n measureScroll();\n if (height !== untrack(rowHeight)) {\n scroller.scrollTop = position * untrack(rowHeight);\n if (glideTarget) {\n const target = monthRowOf(untrack(trackWeeks), glideTarget.week);\n if (target !== undefined) issueGlide(target * untrack(rowHeight) + glideTarget.offset, true);\n }\n silentTop = scroller.scrollTop;\n }\n readScroll(false);\n });\n resize?.observe(scroller);\n const element = scroller;\n onCleanup(() => {\n resize?.disconnect();\n element.removeEventListener(\"scrollend\", finishGlide);\n for (const timer of [labelTimer, reportTimer, queueTimer, glideTimer, arrivalTimer, pulseTimer]) window.clearTimeout(timer);\n if (frame) cancelAnimationFrame(frame);\n frame = 0;\n ready = false;\n setMounted(false);\n });\n }),\n );\n\n const visibleKeys = createMemo(() =>\n continuous()\n ? renderedWeeks().flatMap((key) => Array.from({ length: 7 }, (_, day) => addDayKeys(key, day)))\n : weeks().flatMap((week) => week.map((entry) => entry.key)),\n );\n const rovingKey = createMemo(() => {\n const keys = visibleKeys();\n const focus = focusKey() ?? (continuous() ? focusedCellKey() : null);\n if (focus && keys.includes(focus)) return focus;\n if (keys.includes(todayKey()) && (!continuous() || (todayKey() >= visibleRange().first && todayKey() <= visibleRange().last)))\n return todayKey();\n const first = calendar.formatDateKey(zonedMonthDate(month().year, month().month, dateConfig()), dateConfig());\n if (!continuous() || keys.includes(first)) return first;\n const visible = visibleRange();\n return (\n keys.find((key) => key.slice(0, 7) === first.slice(0, 7) && key >= visible.first && key <= visible.last) ??\n keys.find((key) => key >= visible.first && key <= visible.last) ??\n keys[0] ??\n first\n );\n });\n const dropRange = createMemo((): MonthSelection | null => {\n const preview = movePreview();\n if (!preview) return null;\n const keys = previewSegments(preview, visibleKeys().map(parseKey), dateConfig()).map((piece) => piece.dayKey);\n if (keys.length === 0) return null;\n keys.sort();\n return { first: keys[0]!, last: keys[keys.length - 1]! };\n });\n const within = (range: MonthSelection | null, key: string) => Boolean(range && key >= range.first && key <= range.last);\n /** Where a day sits in the selection: alone, at its start or end, or in between. */\n const selectionPart = (key: string) => {\n const range = selection();\n if (!range || !within(range, key)) return undefined;\n if (range.first === range.last) return \"single\";\n return key === range.first ? \"start\" : key === range.last ? \"end\" : \"middle\";\n };\n\n const select = (anchor: string | null, focus: string | null = anchor) => {\n setAnchorKey(anchor);\n setFocusKey(focus);\n };\n // Selection survives scrolling; only paging starts a month without it. Switching views clears the host's selection.\n createEffect(on(selection, (range) => props.owner.onSelectionChange?.(range ? rangeOf(range) : null), { defer: true }));\n onCleanup(() => {\n if (untrack(selection)) props.owner.onSelectionChange?.(null);\n });\n createEffect(on(selection, (range) => props.onFocusDay?.(range ? parseKey(range.first) : null)));\n createEffect(\n on(\n month,\n () => {\n if (continuous()) return;\n setPopover(null);\n const key = pendingKey;\n pendingKey = null;\n if (key && visibleKeys().includes(key)) {\n select(key);\n queueMicrotask(() => focusCell(key));\n } else select(null);\n },\n { defer: true },\n ),\n );\n\n const dayLabel = (day: Date) =>\n day.toLocaleDateString(dateConfig().locale ?? \"en\", {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n timeZone: dateConfig().timeZone,\n });\n const shortDayLabel = (key: string, withMonth = true) =>\n parseKey(key).toLocaleDateString(dateConfig().locale ?? \"en\", {\n day: \"numeric\",\n ...(withMonth ? { month: \"short\" } : {}),\n timeZone: dateConfig().timeZone,\n });\n const monthDayLabel = (date: Date, withTime: boolean) =>\n date.toLocaleString(dateConfig().locale ?? \"en\", {\n month: \"long\",\n day: \"numeric\",\n ...(withTime ? { hour: \"2-digit\", minute: \"2-digit\" } : {}),\n timeZone: dateConfig().timeZone,\n });\n /** A long event names the days it spans; a one-day event keeps the chip's own title and time. */\n const itemLabel = (item: MonthItem): string | undefined => {\n if (item.firstKey === item.lastKey) return undefined;\n const allDay = Boolean(item.event.allDay);\n return calendarMessages().calendarEventTime({\n title: item.event.title,\n start: monthDayLabel(allDay ? parseKey(item.firstKey) : item.event.sourceStartDate, !allDay),\n end: monthDayLabel(allDay ? parseKey(item.lastKey) : item.event.sourceEndDate, !allDay),\n });\n };\n /** The start time before the title of a one-day entry; bars and all-day entries show none. */\n const leadingTime = (item: MonthItem) =>\n item.bar || item.event.allDay ? undefined : formatTime(item.event.sourceStartDate, dateConfig());\n /** The day at a torn end of a bar, with its month when that day lies outside the shown month. */\n const hintDate = (target: string) => ({\n day: Number(target.slice(8, 10)),\n month:\n Number(target.slice(0, 4)) === month().year && Number(target.slice(5, 7)) === month().month + 1\n ? undefined\n : parseKey(target)\n .toLocaleDateString(dateConfig().locale ?? \"en\", { month: \"short\", timeZone: dateConfig().timeZone })\n .replace(/\\.$/, \"\"),\n });\n const selectionHeading = (range: MonthSelection) => {\n if (range.first === range.last)\n return parseKey(range.first).toLocaleDateString(dateConfig().locale ?? \"en\", {\n weekday: \"long\",\n month: \"long\",\n day: \"numeric\",\n timeZone: dateConfig().timeZone,\n });\n const days = dayKeyNumber(range.last) - dayKeyNumber(range.first) + 1;\n return calendarMessages().calendarSelectedDays({ start: shortDayLabel(range.first), end: shortDayLabel(range.last), count: days });\n };\n const viewAvailable = (view: CalendarView) => !props.owner.views || props.owner.views.includes(view);\n const viewHref = (key: string, view: CalendarView) => (viewAvailable(view) ? props.owner.getDateHref?.(parseKey(key), view) : undefined);\n /** Whether the calendar can open another view at a day: through a link, or through the host's date change. */\n const canOpenView = (view: CalendarView) => viewAvailable(view) && Boolean(props.owner.getDateHref || props.owner.onDateChange);\n const openView = (key: string, view: CalendarView) => {\n const href = viewHref(key, view);\n if (href) followCalendarHref(props.owner, href);\n else openViewAt(props.owner, parseKey(key), view);\n };\n /** The calendar's own entries of the day menu, Open day and Open week, need no application entries. */\n const hasMenu = () => Boolean(props.owner.selectionMenu) || canOpenView(\"day\") || canOpenView(\"week\");\n\n /** The day cell under a point, from the cells' boxes: a bar lies over days that are not its parent. */\n const dayKeyAtPoint = (clientX: number, clientY: number): string | null => {\n for (const [key, cell] of cells) {\n if (!cell.isConnected) continue;\n const rect = cell.getBoundingClientRect();\n if (clientX >= rect.left && clientX < rect.right && clientY >= rect.top && clientY < rect.bottom) return key;\n }\n return null;\n };\n const focusCell = (key: string) => cells.get(key)?.focus({ preventScroll: true });\n /** Whether the focus is in the popover, or fell to the page as it hid: only then does a close return it. */\n const focusInPopover = () => popoverElement?.contains(document.activeElement) || document.activeElement === document.body;\n const closePopover = (restoreFocus = true) => {\n if (!popover()) return;\n setPopover(null);\n setCreateActive(false);\n if (restoreFocus) focusCell(rovingKey());\n };\n const popoverFocusable = () =>\n popoverElement?.querySelector<HTMLElement>(\"input,textarea,select,button,a[href],[tabindex]:not([tabindex='-1'])\") ?? null;\n\n /**\n * Opens the quick create at the selection. Quietly, it only shows beside the grid, which keeps the focus until the\n * person types or tabs into it; otherwise it takes the focus at once.\n */\n const openCreate = (range: MonthSelection, options: { active: boolean; create?: string }) => {\n if (!props.owner.renderQuickCreate) return false;\n const anchor = cells.get(focusKey() && within(range, focusKey()!) ? focusKey()! : range.last);\n if (!anchor) return false;\n setCreateActive(options.active);\n setPopover({ kind: \"create\", range, anchor, create: options.create });\n return true;\n };\n const activateCreate = () => {\n if (popover()?.kind !== \"create\") return false;\n setCreateActive(true);\n popoverFocusable()?.focus();\n return true;\n };\n /**\n * The day to create on without a selection. The month that scrolls takes the day it stands for, today or the 1st of\n * the month in focus, never a day the keyboard last visited in another month.\n */\n const unselectedKey = () => (continuous() ? scrollFocusDay() : rovingKey());\n /** Enter, a double-click, and N create on the selection, with the quick create or the host's own create action. */\n const createOnSelection = () => {\n const range = selection();\n if (!range) return;\n if (openCreate(range, { active: true })) return;\n if (props.owner.onSlotActivate) props.owner.onSlotActivate(rangeOf(range));\n };\n onMount(() =>\n props.register?.({\n quickCreate: (create) => {\n const range = selection() ?? { first: unselectedKey(), last: unselectedKey() };\n select(range.first, range.last);\n if (!openCreate(range, { active: true, create })) props.owner.onSlotActivate?.(rangeOf(range));\n },\n createTarget: () => rangeOf(selection() ?? { first: unselectedKey(), last: unselectedKey() }),\n typing: () => popover()?.kind === \"create\" && !createActive(),\n continuous,\n focusMonth: () => parseKey(focusMonthKey()),\n stepFrom: () => parseKey(queuedMonth() ?? focusMonthKey()),\n focusDay: () => parseKey(scrollFocusDay()),\n step: stepMonth,\n goTo: goToMonth,\n today: goToday,\n todayDirection: placeOfToday,\n }),\n );\n onCleanup(() => props.register?.(null));\n const openDayList = (key: string) => {\n const anchor = cells.get(key);\n if (!anchor) return;\n setCreateActive(true);\n setPopover({ kind: \"day\", dayKey: key, anchor });\n };\n /** A quiet quick create follows the selection; any other popover closes when the selection changes. */\n const followSelection = () => {\n const current = popover();\n const range = selection();\n if (!current) return;\n if (current.kind === \"create\" && !createActive() && range) openCreate(range, { active: false });\n else closePopover(false);\n };\n\n const pageTo = (target: string) => {\n const date = parseKey(target);\n const href = props.owner.getDateHref?.(date, \"month\");\n // Only a month that is on its way may select the day, so a host that cannot page never leaves one behind.\n if (props.owner.onDateChange) {\n pendingKey = target;\n props.owner.onDateChange(date, \"month\");\n } else if (href) {\n pendingKey = target;\n followCalendarHref(props.owner, href);\n }\n };\n const moveFocus = (key: string, extend: boolean) => {\n if (continuous() ? !loaded(key) : !visibleKeys().includes(key)) {\n pageTo(key);\n return;\n }\n if (extend) select(anchorKey() ?? focusKey() ?? key, key);\n else select(key);\n if (continuous()) {\n revealDay(key);\n queueMicrotask(() => focusCell(key));\n } else focusCell(key);\n followSelection();\n };\n const onCellKeyDown = (event: KeyboardEvent, key: string) => {\n if (event.target !== event.currentTarget || event.ctrlKey || event.metaKey || event.altKey) return;\n const current = popover();\n const quiet = current?.kind === \"create\" && !createActive();\n // The quiet quick create takes over once the person types or tabs into it. Space stays the grid's key for the day\n // list; N is a title's first letter like any other, as the quick create it would open is already there.\n if (quiet && ((event.key === \"Tab\" && !event.shiftKey) || (PRINTABLE_KEY.test(event.key) && event.key !== \" \"))) {\n const field = popoverFocusable();\n if (field) {\n if (event.key === \"Tab\") event.preventDefault();\n setCreateActive(true);\n field.focus();\n return;\n }\n }\n const day = parseKey(key);\n const shift = (days: number) => calendar.formatDateKey(calendar.addDays(day, days, dateConfig()), dateConfig());\n const weekday = (dayKeyNumber(key) - dayKeyNumber(calendar.formatDateKey(calendar.startOfWeek(day, dateConfig()), dateConfig()))) % 7;\n const target =\n event.key === \"ArrowLeft\"\n ? shift(-1)\n : event.key === \"ArrowRight\"\n ? shift(1)\n : event.key === \"ArrowUp\"\n ? shift(-7)\n : event.key === \"ArrowDown\"\n ? shift(7)\n : event.key === \"Home\"\n ? shift(-weekday)\n : event.key === \"End\"\n ? shift(6 - weekday)\n : null;\n if (target) {\n event.preventDefault();\n moveFocus(target, event.shiftKey);\n return;\n }\n if (event.key === \"PageUp\" || event.key === \"PageDown\") {\n event.preventDefault();\n const target = calendar.formatDateKey(addMonthsClamped(day, event.key === \"PageUp\" ? -1 : 1, dateConfig()), dateConfig());\n if (continuous() && loaded(target)) {\n moveFocus(target, event.shiftKey);\n // The month's first week goes on top, unless the day lies in a sixth week that would then stay out of view.\n goToMonth(target);\n } else pageTo(target);\n return;\n }\n if (event.key === \"Enter\" || ((event.key === \"n\" || event.key === \"N\") && !event.shiftKey)) {\n event.preventDefault();\n if (!within(selection(), key)) select(key);\n createOnSelection();\n return;\n }\n if (event.key === \" \") {\n event.preventDefault();\n if (!within(selection(), key)) select(key);\n openDayList(key);\n return;\n }\n if (event.key === \"Escape\") {\n if (current) closePopover(false);\n else if (selection()) select(null);\n else return;\n event.preventDefault();\n return;\n }\n // The keyboard opens the day's menu where the day is, as a right-click there would.\n if (hasMenu() && (event.key === \"ContextMenu\" || (event.shiftKey && event.key === \"F10\"))) {\n event.preventDefault();\n event.stopPropagation();\n menuKey = key;\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n event.currentTarget?.dispatchEvent(\n new MouseEvent(\"contextmenu\", { bubbles: true, cancelable: true, clientX: rect.left + 12, clientY: rect.top + 12 }),\n );\n }\n };\n\n const fromControl = (event: Event) =>\n event.target instanceof Element && Boolean(event.target.closest(\"a,button,[data-calendar-event],.k2b-calendar-month__lanes > *\"));\n const onCellClick = (event: MouseEvent, key: string) => {\n if (fromControl(event) || performance.now() < suppressClickUntil) return;\n // A second tap on the one selected day opens the quick create, as a double-click does with a mouse.\n if (lastPointer === \"touch\") {\n const range = selection();\n if (range && range.first === key && range.last === key && openCreate(range, { active: true })) return;\n select(key);\n closePopover(false);\n return;\n }\n if (event.shiftKey && anchorKey()) select(anchorKey(), key);\n else select(key);\n focusCell(key);\n const range = selection();\n if (range) openCreate(range, { active: false });\n };\n const onCellDoubleClick = (event: MouseEvent, key: string) => {\n if (fromControl(event) || lastPointer === \"touch\") return;\n event.preventDefault();\n if (!within(selection(), key)) select(key);\n if (popover()?.kind === \"create\") activateCreate();\n else createOnSelection();\n };\n /** The day under the pointer: a bar that spans several days sits in the cell of its first day. */\n const pressedKey = (event: MouseEvent, key: string) => dayKeyAtPoint(event.clientX, event.clientY) ?? key;\n const onCellPointerDown = (event: PointerEvent, key: string) => {\n lastPointer = event.pointerType;\n // The menu acts on the pressed day, or on the selection when the press is inside it.\n menuKey = pressedKey(event, key);\n if (event.pointerType !== \"mouse\" || event.button !== 0 || event.shiftKey || fromControl(event)) return;\n cancelInteraction?.();\n cancelInteraction = startCalendarPointerSession({\n event,\n scrollContainer: continuous() ? scroller : undefined,\n // A drag along the last row on screen selects its days; the view scrolls once the pointer came from inside.\n armAutoScroll: true,\n resolve: (clientX, clientY) => dayKeyAtPoint(clientX, clientY),\n onActivate: () => {\n suppressClickUntil = performance.now() + 400;\n closePopover(false);\n select(key);\n },\n onPreview: (current) => select(key, current),\n onCommit: (current) => {\n // The click that ends a long drag, such as one that scrolled the view, must not select the pressed day again.\n suppressClickUntil = performance.now() + 400;\n select(key, current);\n focusCell(current);\n const range = orderedSelection(key, current);\n afterPointerRelease(() => openCreate(range, { active: range.first !== range.last }));\n },\n onCancel: () => select(key),\n });\n };\n const onMenuOpen = () => {\n closePopover(false);\n const key = menuKey;\n if (key && !within(selection(), key)) select(key);\n };\n // Until a day is selected, the menu acts on the day that takes focus, so it is never empty.\n const menuItems = createMemo((): DropdownItem[] => {\n if (!hasMenu()) return [];\n const range = selection() ?? { first: unselectedKey(), last: unselectedKey() };\n const own =\n props.owner.selectionMenu?.(rangeOf(range), {\n quickCreate: (create) => {\n select(range.first, range.last);\n if (!openCreate(range, { active: true, create })) props.owner.onSlotActivate?.(rangeOf(range));\n },\n }) ?? [];\n const actions = own.filter((item): item is DropdownAction | DropdownChoice => !(\"items\" in item));\n const sections = own.filter((item): item is DropdownSection => \"items\" in item);\n const navigation: DropdownAction[] = [\n ...(canOpenView(\"day\")\n ? [{ label: calendarMessages().calendarOpenDay, icon: \"ti ti-zoom-in\", action: () => openView(range.first, \"day\") }]\n : []),\n ...(canOpenView(\"week\")\n ? [{ label: calendarMessages().calendarOpenWeek, icon: \"ti ti-calendar-week\", action: () => openView(range.first, \"week\") }]\n : []),\n ...(range.first !== range.last\n ? [{ label: calendarMessages().calendarClearSelection, icon: \"ti ti-x\", action: () => select(null) }]\n : []),\n ];\n const groups: DropdownSection[] = [{ items: actions }, ...sections, { items: navigation }].filter(\n (section) => section.items.length > 0,\n );\n // The first group names the days the menu acts on, also when the calendar's own entries are all it has.\n const [first, ...rest] = groups;\n return first && !first.sectionLabel ? [{ ...first, sectionLabel: selectionHeading(range) }, ...rest] : groups;\n });\n\n const clearMove = () => {\n setMovePreview(null);\n setMovingEventId(\"\");\n };\n const startMove = (pointerEvent: PointerEvent, item: MonthItem, markDragged: () => void) => {\n if (!props.owner.onEventDrop) return;\n const event = item.event;\n const grabbed = dayKeyAtPoint(pointerEvent.clientX, pointerEvent.clientY) ?? item.firstKey;\n const firstDay = startOfDay(event.sourceStartDate, dateConfig());\n cancelInteraction?.();\n cancelInteraction = startCalendarPointerSession({\n event: pointerEvent,\n scrollContainer: continuous() ? scroller : undefined,\n armAutoScroll: true,\n resolve: (clientX, clientY) => {\n const key = dayKeyAtPoint(clientX, clientY);\n if (!key) return null;\n // The event moves by as many days as the pointer, wherever on the bar it was grabbed.\n const day = calendar.addDays(firstDay, dayKeyNumber(key) - dayKeyNumber(grabbed), dateConfig());\n return { id: event.id, title: event.title, ...moveEventToDay(event, day, dateConfig()) };\n },\n onActivate: () => {\n markDragged();\n suppressClickUntil = performance.now() + 400;\n closePopover(false);\n setMovingEventId(event.id);\n },\n onPreview: setMovePreview,\n onCommit: (next) => {\n // The click that ends a long move, such as one that scrolled the view, must not open the entry.\n markDragged();\n suppressClickUntil = performance.now() + 400;\n clearMove();\n if (eventTimeChanged(event, next)) props.owner.onEventDrop?.(event, next);\n },\n onCancel: clearMove,\n });\n };\n\n // Each week row measures the room below its day numbers; the rows only resize with the grid, never with content.\n let observer: ResizeObserver | undefined;\n const lanesOf = new WeakMap<Element, number>();\n const measure = (element: Element, week: number) => {\n const style = getComputedStyle(element);\n const rootSize = Number.parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;\n const capacity = monthLaneCapacity(element.clientHeight, MONTH_LANE_REM * rootSize, MONTH_LANE_GAP_REM * rootSize);\n setCapacities((current) => {\n if (current[week] === capacity) return current;\n const next = [...current];\n next[week] = capacity;\n return next;\n });\n if (week === 0) {\n setCellWidth(element.clientWidth);\n setBarFont(`600 ${0.6875 * rootSize}px ${style.fontFamily}`);\n }\n };\n const observeLanes = (element: HTMLElement, week: number) => {\n lanesOf.set(element, week);\n if (typeof ResizeObserver === \"undefined\") return;\n observer ??= new ResizeObserver((entries) => {\n for (const entry of entries) {\n const index = lanesOf.get(entry.target);\n if (index !== undefined) measure(entry.target, index);\n }\n });\n observer.observe(element);\n onCleanup(() => observer?.unobserve(element));\n };\n /** A date hint shows only when the bar holds its title and the hint whole; screen readers get the range anyway. */\n const hintFits = (title: string, hint: string, span: number) => {\n const width = cellWidth();\n const font = barFont();\n if (width <= 0 || !font) return false;\n const rootSize = Number.parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;\n return textWidth(title, font) + textWidth(hint, font) + MONTH_HINT_SLACK_REM * rootSize <= span * width;\n };\n\n createEffect(() => {\n const current = popover();\n const element = popoverElement;\n if (!element) return;\n if (!current) {\n if (element.matches(\":popover-open\")) element.hidePopover();\n return;\n }\n if (!element.matches(\":popover-open\")) element.showPopover();\n const focus = untrack(createActive);\n queueMicrotask(() => {\n if (popover() !== current || !element.isConnected) return;\n placeCalendarPopover(current.anchor, element);\n if (focus) popoverFocusable()?.focus();\n });\n });\n onMount(() => {\n const reposition = () => {\n const current = popover();\n if (current && popoverElement) placeCalendarPopover(current.anchor, popoverElement);\n };\n window.addEventListener(\"resize\", reposition);\n window.addEventListener(\"scroll\", reposition, true);\n onCleanup(() => {\n window.removeEventListener(\"resize\", reposition);\n window.removeEventListener(\"scroll\", reposition, true);\n });\n });\n onCleanup(() => {\n cancelInteraction?.();\n observer?.disconnect();\n });\n\n const dayEntries = (dayKey: string) => items().filter((item) => item.days.has(dayKey));\n /** Every bar of a long entry lights up with the one under the pointer. */\n const linkProps = (item: MonthItem) => ({\n onPointerEnter: (event: PointerEvent) => {\n if (event.pointerType === \"mouse\") setLinkedItem(item.key);\n },\n onPointerLeave: () => {\n if (linkedItem() === item.key) setLinkedItem(\"\");\n },\n });\n\n const weekRow = (week: () => { day: Date; key: string }[], weekIndex: () => number) => {\n const layout = createMemo(() =>\n layoutMonthWeek(\n week().map((entry) => entry.key),\n items().map((item) => ({ item, firstKey: item.firstKey, lastKey: item.lastKey, bar: item.bar })),\n ),\n );\n // The continuous rows are all as high as the first, so they share its measured capacity.\n const capacity = () => capacities()[continuous() ? 0 : weekIndex()] ?? MONTH_DEFAULT_LANES;\n const fit = createMemo(() => fitMonthWeek(layout(), capacity()));\n const weekHref = () => viewHref(week()[0]!.key, \"week\");\n const weekNumber = () => zonedWeekNumber(week()[0]!.day, dateConfig());\n return (\n <div\n class=\"k2b-calendar-month__week\"\n role=\"row\"\n data-week-key={continuous() ? week()[0]?.key : undefined}\n // Only some weeks render, and not in their order, so each continuous row names its place below the weekdays.\n aria-rowindex={continuous() ? weekIndex() + 2 : undefined}\n style={continuous() ? { \"--k2b-calendar-week-index\": String(weekIndex()) } : undefined}\n data-week-numbers={props.owner.withWeekNumbers ? \"true\" : undefined}\n >\n <Show when={props.owner.withWeekNumbers}>\n <div class=\"k2b-calendar-month__week-number\" role=\"rowheader\">\n <Show\n when={weekHref()}\n fallback={\n <Show when={canOpenView(\"week\")} fallback={weekNumber()}>\n <button\n type=\"button\"\n class=\"k2b-calendar-month__week-link\"\n tabIndex={-1}\n title={calendarMessages().calendarOpenWeekNumber({ week: weekNumber() })}\n aria-label={calendarMessages().calendarOpenWeekNumber({ week: weekNumber() })}\n onClick={() => openView(week()[0]!.key, \"week\")}\n >\n {weekNumber()}\n </button>\n </Show>\n }\n >\n {(href) => (\n <CalendarNavigationLink\n owner={props.owner}\n href={href()}\n anchorProps={{\n class: \"k2b-calendar-month__week-link\",\n tabIndex: -1,\n title: calendarMessages().calendarOpenWeekNumber({ week: weekNumber() }),\n \"aria-label\": calendarMessages().calendarOpenWeekNumber({ week: weekNumber() }),\n }}\n >\n {weekNumber()}\n </CalendarNavigationLink>\n )}\n </Show>\n </div>\n </Show>\n <For each={week()}>\n {({ day, key }, column) => {\n const dayBadge = props.owner.dayBadges?.[key];\n const sameMonth = () => calendar.isSameMonth(day, continuous() ? parseKey(focusMonthKey()) : props.date, dateConfig());\n const label = dayLabel(day);\n const bars = createMemo(() => fit().bars.filter((bar) => bar.startColumn === column()));\n const cell = () => fit().cells[column()] ?? { top: 0, shown: [], hidden: 0 };\n return (\n <div\n ref={(element) => {\n cells.set(key, element);\n onCleanup(() => {\n if (cells.get(key) === element) cells.delete(key);\n });\n }}\n class=\"k2b-calendar-month__day\"\n role=\"gridcell\"\n tabIndex={rovingKey() === key ? 0 : -1}\n aria-label={label}\n aria-selected={within(selection(), key) ? \"true\" : \"false\"}\n aria-current={key === todayKey() ? \"date\" : undefined}\n data-calendar-day-key={key}\n data-outside={!sameMonth() ? \"true\" : undefined}\n data-month-first={continuous() && key.endsWith(\"-01\") ? \"true\" : undefined}\n data-month-top={continuous() && Number(key.slice(8)) <= 7 ? \"true\" : undefined}\n data-weekend={isWeekendKey(key, dateConfig().locale) ? \"true\" : undefined}\n data-past={key < todayKey() ? \"true\" : undefined}\n data-selected={selectionPart(key)}\n data-drop-preview={within(dropRange(), key) ? \"true\" : undefined}\n onClick={(event) => onCellClick(event, key)}\n onDblClick={(event) => onCellDoubleClick(event, key)}\n onPointerDown={(event) => onCellPointerDown(event, key)}\n onContextMenu={(event) => {\n // The pressed day takes the focus, so closing the menu with Escape returns there.\n menuKey = pressedKey(event, key);\n if (hasMenu()) focusCell(menuKey);\n }}\n onKeyDown={(event) => onCellKeyDown(event, key)}\n >\n <div class=\"k2b-calendar-month__day-header\">\n <span\n class=\"k2b-calendar-month__day-number\"\n data-pulse={continuous() && pulseKey() === key ? \"true\" : undefined}\n data-today={key === todayKey() ? \"true\" : undefined}\n data-outside={!sameMonth() ? \"true\" : undefined}\n >\n {continuous() && key.endsWith(\"-01\")\n ? shortDayLabel(key).replace(/\\.$/, \"\")\n : calendar.formatDayNumber(day, dateConfig())}\n </span>\n <Show when={dayBadge}>\n {(badge) => (\n <span class=\"k2b-calendar-month__badge\">\n <Show when={badge().icon}>{(icon) => <i class={`k2b-calendar-month__badge-icon ti ti-${icon()}`} />}</Show>\n {badge().label}\n </span>\n )}\n </Show>\n </div>\n <div\n class=\"k2b-calendar-month__lanes\"\n ref={(element) => {\n if (column() === 0) observeLanes(element, continuous() ? 0 : weekIndex());\n }}\n >\n <For each={bars()}>\n {(bar) => {\n const span = bar.endColumn - bar.startColumn + 1;\n const startHint = () => {\n if (!bar.continuesBefore) return undefined;\n const hint = calendarMessages().calendarContinuesFrom(hintDate(bar.item.firstKey));\n return hintFits(bar.item.event.title, hint, span) ? hint : undefined;\n };\n const endHint = () => {\n if (!bar.continuesAfter) return undefined;\n const hint = calendarMessages().calendarContinuesUntil(hintDate(bar.item.lastKey));\n return hintFits(`${bar.item.event.title}${startHint() ?? \"\"}`, hint, span) ? hint : undefined;\n };\n return (\n <div\n class=\"k2b-calendar-month__segment\"\n style={{ \"--k2b-calendar-span\": String(span), \"--k2b-calendar-row\": String(bar.lane) }}\n data-bar=\"true\"\n data-linked={linkedItem() === bar.item.key && bar.item.firstKey !== bar.item.lastKey ? \"true\" : undefined}\n data-continues-before={bar.continuesBefore ? \"true\" : undefined}\n data-continues-after={bar.continuesAfter ? \"true\" : undefined}\n {...linkProps(bar.item)}\n >\n <EventChip\n event={bar.item.event}\n owner={props.owner}\n href={eventHref(props.owner, bar.item.event)}\n label={itemLabel(bar.item)}\n compact\n bar\n continuesBefore={bar.continuesBefore}\n continuesAfter={bar.continuesAfter}\n hintStart={startHint()}\n hintEnd={endHint()}\n moving={movingEventId() === bar.item.event.id}\n onMovePointerDown={\n props.owner.onEventDrop\n ? (pointerEvent, markDragged) => startMove(pointerEvent, bar.item, markDragged)\n : undefined\n }\n />\n </div>\n );\n }}\n </For>\n <For each={cell().shown}>\n {(item, index) => (\n <div\n class=\"k2b-calendar-month__segment\"\n style={{ \"--k2b-calendar-span\": \"1\", \"--k2b-calendar-row\": String(cell().top + index()) }}\n >\n <EventChip\n event={item.event}\n owner={props.owner}\n href={eventHref(props.owner, item.event)}\n compact\n leadingTime={leadingTime(item)}\n moving={movingEventId() === item.event.id}\n onMovePointerDown={\n props.owner.onEventDrop ? (pointerEvent, markDragged) => startMove(pointerEvent, item, markDragged) : undefined\n }\n />\n </div>\n )}\n </For>\n <Show when={cell().hidden > 0}>\n <button\n type=\"button\"\n class=\"k2b-calendar-month__more\"\n tabIndex={-1}\n style={{ \"--k2b-calendar-row\": String(cell().top + cell().shown.length) }}\n aria-label={calendarMessages().calendarMoreEventsOn({ count: cell().hidden, label })}\n aria-haspopup=\"dialog\"\n aria-expanded={(() => {\n const current = popover();\n return current?.kind === \"day\" && current.dayKey === key;\n })()}\n onClick={() => {\n const current = popover();\n if (current?.kind === \"day\" && current.dayKey === key) closePopover(false);\n else openDayList(key);\n }}\n >\n <span class=\"k2b-calendar-month__more-long\">{calendarMessages().calendarMoreEvents({ count: cell().hidden })}</span>\n <span class=\"k2b-calendar-month__more-short\">+{cell().hidden}</span>\n </button>\n </Show>\n </div>\n </div>\n );\n }}\n </For>\n </div>\n );\n };\n\n const weekdayRow = () => (\n <div\n ref={weekdayElement}\n class=\"k2b-calendar-month__weekdays\"\n role=\"row\"\n data-week-numbers={props.owner.withWeekNumbers ? \"true\" : undefined}\n >\n <Show when={props.owner.withWeekNumbers}>\n <div class=\"k2b-calendar-month__weekday\" role=\"columnheader\">\n {calendarMessages().weekShort}\n </div>\n </Show>\n <For each={weekdays()}>\n {(day, index) => (\n <div class=\"k2b-calendar-month__weekday\" role=\"columnheader\" data-weekend={weekendColumn(index()) ? \"true\" : undefined}>\n {day}\n </div>\n )}\n </For>\n </div>\n );\n\n const grid = () => (\n <div\n class=\"k2b-calendar-month\"\n role=\"grid\"\n aria-label={formatMonth(props.date, dateConfig())}\n aria-multiselectable=\"true\"\n data-lanes=\"true\"\n style={{\n \"grid-template-rows\": `auto repeat(${weeks().length}, minmax(5rem, 1fr))`,\n \"--k2b-calendar-lane\": `${MONTH_LANE_REM}rem`,\n \"--k2b-calendar-lane-gap\": `${MONTH_LANE_GAP_REM}rem`,\n }}\n >\n {weekdayRow()}\n <For each={weeks()}>{(week, index) => weekRow(() => week, index)}</For>\n </div>\n );\n\n const continuousRow = (key: string) => {\n const days = createMemo(() =>\n Array.from({ length: 7 }, (_, offset) => {\n const dayKey = addDayKeys(key, offset);\n return { day: parseKey(dayKey), key: dayKey };\n }),\n );\n return weekRow(days, () => monthRowOf(trackWeeks(), key) ?? 0);\n };\n const continuousGrid = () => (\n <div class=\"k2b-calendar-month-viewport\">\n <div\n ref={scroller}\n class=\"k2b-calendar-month\"\n role=\"grid\"\n aria-label={formatMonth(parseKey(focusMonthKey()), dateConfig())}\n aria-multiselectable=\"true\"\n data-lanes=\"true\"\n data-continuous=\"true\"\n aria-rowcount={trackWeeks().length + 1}\n onScroll={onScroll}\n onWheel={cancelGlide}\n onPointerDown={cancelGlide}\n onFocusIn={(event) => {\n const target = event.target;\n if (!(target instanceof Element)) return;\n const key = target.closest(\"[data-calendar-day-key]\")?.getAttribute(\"data-calendar-day-key\");\n if (key) setFocusedCellKey(key);\n }}\n style={{ \"--k2b-calendar-lane\": `${MONTH_LANE_REM}rem`, \"--k2b-calendar-lane-gap\": `${MONTH_LANE_GAP_REM}rem` }}\n >\n {weekdayRow()}\n <div class=\"k2b-calendar-month__track\" role=\"rowgroup\" style={{ \"--k2b-calendar-weeks\": String(trackWeeks().length) }}>\n <For each={renderedWeeks()}>{continuousRow}</For>\n </div>\n </div>\n <div class=\"k2b-calendar-month__scroll-label\" aria-hidden=\"true\" data-show={labelShown() ? \"true\" : \"false\"}>\n {formatMonth(parseKey(focusMonthKey()), dateConfig())}\n </div>\n </div>\n );\n\n const dayList = (dayKey: string) => {\n const day = parseKey(dayKey);\n const href = viewHref(dayKey, \"day\");\n // Read where it renders, so a refresh while the list is open updates it as it does the grid.\n const entries = () => dayEntries(dayKey);\n return (\n <div class=\"k2b-calendar-day-list\">\n <div class=\"k2b-calendar-day-list__title\">{dayLabel(day)}</div>\n <Show\n when={entries().length > 0}\n fallback={<p class=\"k2b-calendar-day-list__empty\">{calendarMessages().calendarNothingPlanned}</p>}\n >\n <ul class=\"k2b-calendar-day-list__events\">\n <For each={entries()}>\n {(item) => (\n <li>\n <EventChip\n event={item.event}\n owner={props.owner}\n href={eventHref(props.owner, item.event)}\n label={itemLabel(item)}\n compact\n bar={item.bar}\n leadingTime={leadingTime(item)}\n />\n </li>\n )}\n </For>\n </ul>\n </Show>\n <div class=\"k2b-calendar-day-list__actions\">\n <Show\n when={href}\n fallback={\n <Show when={canOpenView(\"day\")}>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => openView(dayKey, \"day\")}>\n <i class=\"ti ti-zoom-in\" aria-hidden=\"true\" />\n {calendarMessages().calendarOpenDay}\n </Button>\n </Show>\n }\n >\n {(dayHref) => (\n <CalendarNavigationLink\n owner={props.owner}\n href={dayHref()}\n anchorProps={{ class: \"k2b-button\", \"data-variant\": \"ghost\", \"data-size\": \"sm\" }}\n >\n <i class=\"ti ti-zoom-in\" aria-hidden=\"true\" />\n {calendarMessages().calendarOpenDay}\n </CalendarNavigationLink>\n )}\n </Show>\n <Show when={props.owner.renderQuickCreate}>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => {\n select(dayKey);\n openCreate({ first: dayKey, last: dayKey }, { active: true });\n }}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n {calendarMessages().calendarNewEvent}\n </Button>\n </Show>\n </div>\n </div>\n );\n };\n\n const viewGrid = () => (continuous() ? continuousGrid() : grid());\n return (\n <>\n <Show when={hasMenu()} fallback={viewGrid()}>\n <GestureMenu\n items={menuItems()}\n label={calendarMessages().calendarSelectionActions}\n tabIndex={-1}\n onOpen={onMenuOpen}\n class=\"k2b-calendar-month-menu\"\n >\n {viewGrid()}\n </GestureMenu>\n </Show>\n <div\n ref={popoverElement}\n class=\"k2b-calendar-popover\"\n popover=\"auto\"\n role=\"dialog\"\n aria-label={(() => {\n const current = popover();\n if (current?.kind === \"day\") return dayLabel(parseKey(current.dayKey));\n return calendarMessages().calendarQuickCreate;\n })()}\n data-kind={popover()?.kind}\n data-quiet={popover()?.kind === \"create\" && !createActive() ? \"true\" : undefined}\n onFocusIn={() => setCreateActive(true)}\n onToggle={(event) => {\n // A late close of the popover that another opening already replaced keeps the new one. Focus returns to the\n // grid only from inside the popover, never from what a click outside it chose.\n if (event.newState !== \"closed\" || !popover() || event.currentTarget.matches(\":popover-open\")) return;\n closePopover(focusInPopover());\n }}\n >\n {/* Keyed: another day or another selection replaces the content while the popover stays open. A late close, such\n as after a slow save, closes only the quick create that asked for it. */}\n <Show when={popover()} keyed>\n {(value) =>\n value.kind === \"create\"\n ? props.owner.renderQuickCreate?.(rangeOf(value.range), {\n create: value.create,\n close: () => {\n if (popover() === value) closePopover(focusInPopover());\n },\n })\n : dayList(value.dayKey)\n }\n </Show>\n </div>\n </>\n );\n};\n\nconst TimeGridView = (props: {\n owner: CalendarOwner;\n date: Date;\n now: Date;\n events: NormalizedEvent[];\n labels: Required<CalendarLabels>;\n days: Date[];\n}): JSX.Element => {\n const calendarMessages = useCalendarMessages();\n const dateConfig = createMemo(() => ownerDateConfig(props.owner));\n const gridStartHour = () => props.owner.visibleStartHour ?? 0;\n const gridEndHour = () => props.owner.visibleEndHour ?? 23;\n const businessStartHour = () => props.owner.startHour ?? 8;\n const businessEndHour = () => props.owner.endHour ?? 18;\n const hours = createMemo(() => Array.from({ length: gridEndHour() - gridStartHour() + 1 }, (_, index) => gridStartHour() + index));\n const [timePreview, setTimePreview] = createSignal<CalendarPreview | null>(null);\n const [movingEventId, setMovingEventId] = createSignal(\"\");\n const [expandedOverflow, setExpandedOverflow] = createSignal(\"\");\n let scrollContainer: HTMLDivElement | undefined;\n let timeGrid: HTMLDivElement | undefined;\n let timeGutter: HTMLDivElement | undefined;\n let daysRow: HTMLDivElement | undefined;\n let allDayRow: HTMLDivElement | undefined;\n let defaultHourMarker: HTMLDivElement | undefined;\n let cancelInteraction: (() => void) | undefined;\n let suppressSlotClickUntil = 0;\n const slotEnd = (start: Date) => addMinutes(start, 60);\n const previewEvents = createMemo(() => previewSegments(timePreview(), props.days, dateConfig()));\n const eventsByDay = createMemo(() => {\n const grouped = new Map<string, { allDay: NormalizedEvent[]; timed: NormalizedEvent[] }>();\n for (const event of props.events) {\n const bucket = grouped.get(event.dayKey) ?? { allDay: [], timed: [] };\n (event.allDay ? bucket.allDay : bucket.timed).push(event);\n grouped.set(event.dayKey, bucket);\n }\n return grouped;\n });\n const clearInteraction = () => {\n setTimePreview(null);\n setMovingEventId(\"\");\n };\n const dayAtPoint = (clientX: number, clientY: number): Date | null => {\n const target = document.elementFromPoint(clientX, clientY)?.closest<HTMLElement>(\"[data-calendar-day-key]\");\n const dayKey = target?.dataset.calendarDayKey;\n return dayKey ? calendar.parseCalendarDate(dayKey, dateConfig()) : null;\n };\n const timeAtPoint = (clientX: number, clientY: number): Date | null => {\n if (!timeGrid || !timeGutter) return null;\n const gridRect = timeGrid.getBoundingClientRect();\n const gutterRect = timeGutter.getBoundingClientRect();\n // The gutter stays in view while the days scroll sideways under it, so the days start one gutter after the grid.\n if (clientX < gutterRect.right) return null;\n const daysLeft = gridRect.left + gutterRect.width;\n const dayIndex = calendarDayIndexAtPoint(clientX, daysLeft, gridRect.right - daysLeft, props.days.length);\n if (dayIndex === null) return null;\n const minute = Math.min(\n gridEndHour() * 60 + 45,\n calendarMinuteAtPoint(clientY, gridRect.top, gridRect.height, gridStartHour(), gridEndHour()),\n );\n return zonedMinuteSlot(props.days[dayIndex]!, minute, dateConfig());\n };\n const beginInteraction = (options: Parameters<typeof startCalendarPointerSession<CalendarPreview>>[0]) => {\n cancelInteraction?.();\n cancelInteraction = startCalendarPointerSession(options);\n };\n const startTimedMove = (pointerEvent: PointerEvent, event: NormalizedEvent, markDragged: () => void) => {\n if (!props.owner.onEventDrop) return;\n const pointerStart = timeAtPoint(pointerEvent.clientX, pointerEvent.clientY) ?? event.sourceStartDate;\n const duration = Math.max(15 * 60_000, event.sourceEndDate.getTime() - event.sourceStartDate.getTime());\n const offsetMinutes = Math.max(\n 0,\n Math.min(duration / 60_000, Math.round((pointerStart.getTime() - event.sourceStartDate.getTime()) / 900_000) * 15),\n );\n beginInteraction({\n event: pointerEvent,\n scrollContainer,\n resolve: (clientX, clientY) => {\n const pointer = timeAtPoint(clientX, clientY);\n if (!pointer) return null;\n const start = new Date(pointer.getTime() - offsetMinutes * 60_000);\n return { id: event.id, title: event.title, start, end: new Date(start.getTime() + duration), allDay: false };\n },\n onActivate: () => {\n markDragged();\n suppressSlotClickUntil = performance.now() + 400;\n setMovingEventId(event.id);\n },\n onPreview: setTimePreview,\n onCommit: (next) => {\n clearInteraction();\n if (eventTimeChanged(event, next)) props.owner.onEventDrop?.(event, next);\n },\n onCancel: clearInteraction,\n });\n };\n const startAllDayMove = (pointerEvent: PointerEvent, event: NormalizedEvent, markDragged: () => void) => {\n if (!props.owner.onEventDrop) return;\n beginInteraction({\n event: pointerEvent,\n resolve: (clientX, clientY) => {\n const day = dayAtPoint(clientX, clientY);\n return day ? { id: event.id, title: event.title, ...moveEventTo(event, startOfDay(day, dateConfig()), true, dateConfig()) } : null;\n },\n onActivate: () => {\n markDragged();\n suppressSlotClickUntil = performance.now() + 400;\n setMovingEventId(event.id);\n },\n onPreview: setTimePreview,\n onCommit: (next) => {\n clearInteraction();\n if (eventTimeChanged(event, next)) props.owner.onEventDrop?.(event, next);\n },\n onCancel: clearInteraction,\n });\n };\n const startRange = (pointerEvent: PointerEvent) => {\n if (!props.owner.onSlotActivate || pointerEvent.pointerType === \"touch\") return;\n const anchor = timeAtPoint(pointerEvent.clientX, pointerEvent.clientY);\n if (!anchor) return;\n beginInteraction({\n event: pointerEvent,\n scrollContainer,\n resolve: (clientX, clientY) => {\n const current = timeAtPoint(clientX, clientY);\n if (!current) return null;\n const start = current < anchor ? current : anchor;\n const endBase = current < anchor ? anchor : current;\n return { id: \"calendar-create-preview\", start, end: addMinutes(endBase, 15), allDay: false };\n },\n onActivate: () => {\n suppressSlotClickUntil = performance.now() + 400;\n },\n onPreview: setTimePreview,\n onCommit: (next) => {\n clearInteraction();\n props.owner.onSlotActivate?.(next);\n },\n onCancel: clearInteraction,\n });\n };\n const timeRangeLayout = (startDate: Date, endDate: Date) => {\n const start = zonedHour(startDate, dateConfig());\n const end = zonedHour(endDate, dateConfig());\n const visibleStart = Math.max(gridStartHour(), start);\n const visibleEnd = Math.min(gridEndHour() + 1, end);\n const total = Math.max(1, gridEndHour() - gridStartHour() + 1);\n return {\n top: Math.max(0, ((visibleStart - gridStartHour()) / total) * 100),\n height: Math.max(1.25, ((visibleEnd - visibleStart) / total) * 100),\n };\n };\n const eventLayout = (event: NormalizedEvent) => timeRangeLayout(event.startDate, event.endDate);\n const isDayView = () => props.days.length === 1;\n const visibleLaneCount = (lanes: number) => (isDayView() ? lanes : Math.min(lanes, 3));\n const overflowLayouts = (layouts: TimedEventLayout[]): TimedOverflowLayout[] => {\n if (isDayView()) return [];\n const groups = new Map<number, TimedOverflowLayout>();\n for (const layout of layouts) {\n if (layout.lane < visibleLaneCount(layout.lanes)) continue;\n const existing = groups.get(layout.groupId);\n if (existing) existing.hiddenEvents.push(layout.event);\n else\n groups.set(layout.groupId, {\n groupId: layout.groupId,\n hiddenEvents: [layout.event],\n groupStartDate: layout.groupStartDate,\n groupEndDate: layout.groupEndDate,\n });\n }\n return [...groups.values()];\n };\n // A week shares 36 rem between its days; a single day takes 12 rem per overlapping lane. The 40 rem grid is wider\n // than one or two lanes, so only three or more make the day scroll, and one lane fits beside a tablet drawer.\n const columnTemplate = createMemo(() => {\n let dayMin = \"var(--k2b-calendar-day-min)\";\n if (isDayView()) {\n const day = props.days[0]!;\n const layouts = timedEventLayouts(eventsByDay().get(calendar.formatDateKey(day, dateConfig()))?.timed ?? []);\n dayMin = `${Math.max(1, ...layouts.map((layout) => layout.lanes)) * 12}rem`;\n }\n return `4rem repeat(${props.days.length}, minmax(${dayMin}, 1fr))`;\n });\n // The hours scroll sideways themselves; the day and all-day rows follow, also when focus scrolls one of them.\n // A row's scroll event from our own write arrives a frame late; echoing it back would undo a smooth scroll or fling.\n const followed = new WeakMap<HTMLElement, number>();\n const followColumns = (source: HTMLElement) => {\n if (followed.get(source) === source.scrollLeft) return;\n followed.delete(source);\n for (const row of [scrollContainer, daysRow, allDayRow]) {\n if (!row || row === source || row.scrollLeft === source.scrollLeft) continue;\n row.scrollLeft = source.scrollLeft;\n followed.set(row, row.scrollLeft);\n }\n };\n const laneStyle = (layoutItem: TimedEventLayout) => {\n if (isDayView()) {\n const laneWidth = 100 / layoutItem.lanes;\n return {\n left: `calc(${layoutItem.lane * laneWidth}% + 0.25rem)`,\n width: `calc(${laneWidth}% - 0.5rem)`,\n };\n }\n const visibleLanes = visibleLaneCount(layoutItem.lanes);\n return {\n left: `${layoutItem.lanes <= 1 ? 0 : (28 / Math.max(1, visibleLanes - 1)) * layoutItem.lane}%`,\n width: `${layoutItem.lanes <= 1 ? 100 : layoutItem.lanes > visibleLanes ? 68 : 72}%`,\n };\n };\n const currentTimeLine = (day: Date) => {\n const now = props.now;\n if (calendar.formatDateKey(day, dateConfig()) !== calendar.formatDateKey(now, dateConfig())) return null;\n const hour = zonedHour(now, dateConfig());\n if (hour < gridStartHour() || hour > gridEndHour() + 1) return null;\n return ((hour - gridStartHour()) / Math.max(1, gridEndHour() - gridStartHour() + 1)) * 100;\n };\n onCleanup(() => cancelInteraction?.());\n onMount(() => {\n requestAnimationFrame(() => {\n if (!scrollContainer || !defaultHourMarker) return;\n const targetTop = defaultHourMarker.getBoundingClientRect().top - scrollContainer.getBoundingClientRect().top;\n // Reduced motion jumps to the business hours instead of gliding there, like every transition of the library.\n const behavior = prefersReducedMotion() ? \"auto\" : \"smooth\";\n scrollContainer.scrollTo({ top: Math.max(0, scrollContainer.scrollTop + targetTop), behavior });\n });\n });\n return (\n <div class=\"k2b-calendar-time-grid\" data-view={isDayView() ? \"day\" : \"week\"}>\n <div\n ref={daysRow}\n class=\"k2b-calendar-time-grid__days\"\n style={{ \"grid-template-columns\": columnTemplate() }}\n onScroll={(event) => followColumns(event.currentTarget)}\n >\n <div class=\"k2b-calendar-time-grid__corner\" />\n <For each={props.days}>\n {(day) => {\n const dayBadge = props.owner.dayBadges?.[calendar.formatDateKey(day, dateConfig())];\n const today = () => calendar.isToday(day, dateConfig());\n return (\n <CalendarNavigationLink\n owner={props.owner}\n href={props.owner.getDateHref?.(day, \"day\") ?? \"#\"}\n anchorProps={{\n class: \"k2b-calendar-time-grid__day\",\n \"data-weekend\": isWeekendKey(calendar.formatDateKey(day, dateConfig()), dateConfig().locale) ? \"true\" : undefined,\n }}\n >\n <span class=\"k2b-calendar-time-grid__day-label\" data-today={today() ? \"true\" : undefined}>\n {formatDay(day, dateConfig())}\n </span>\n <Show when={dayBadge}>\n {(badge) => (\n <span class=\"k2b-calendar-time-grid__badge\">\n <Show when={badge().icon}>{(icon) => <i class={`k2b-calendar-time-grid__badge-icon ti ti-${icon()}`} />}</Show>\n {badge().label}\n </span>\n )}\n </Show>\n </CalendarNavigationLink>\n );\n }}\n </For>\n </div>\n <Show when={!props.owner.hideAllDay}>\n <div\n ref={allDayRow}\n class=\"k2b-calendar-time-grid__all-day\"\n onScroll={(event) => followColumns(event.currentTarget)}\n style={{\n \"grid-template-columns\": columnTemplate(),\n \"max-height\": `${props.owner.allDayMaxHeightRem ?? 7}rem`,\n }}\n >\n <div class=\"k2b-calendar-time-grid__all-day-label\">{props.labels.allDay}</div>\n <For each={props.days}>\n {(day) => {\n const dayKey = calendar.formatDateKey(day, dateConfig());\n const allDay = () => eventsByDay().get(dayKey)?.allDay ?? [];\n const previewAllDay = previewEvents().filter((event) => event.dayKey === dayKey && event.allDay);\n return (\n <div\n class=\"k2b-calendar-time-grid__all-day-cell\"\n data-calendar-day-key={dayKey}\n data-weekend={isWeekendKey(dayKey, dateConfig().locale) ? \"true\" : undefined}\n data-drop-preview={\n timePreview()?.allDay && calendar.formatDateKey(timePreview()!.start, dateConfig()) === dayKey ? \"true\" : undefined\n }\n data-interactive={props.owner.onSlotActivate ? \"true\" : undefined}\n {...slotInteractionProps(\n props.owner,\n () => {\n const start = startOfDay(day, dateConfig());\n return { start, end: calendar.addDays(start, 1, dateConfig()), allDay: true };\n },\n () => performance.now() < suppressSlotClickUntil,\n )}\n >\n <div class=\"k2b-calendar-time-grid__all-day-events\">\n <For each={previewAllDay}>{(event) => <div class=\"k2b-calendar-preview\">{event.title}</div>}</For>\n <For each={allDay()}>\n {(event) => (\n <EventChip\n event={event}\n owner={props.owner}\n href={eventHref(props.owner, event)}\n compact\n moving={movingEventId() === event.id}\n onMovePointerDown={\n props.owner.onEventDrop\n ? (pointerEvent, markDragged) => startAllDayMove(pointerEvent, event, markDragged)\n : undefined\n }\n />\n )}\n </For>\n </div>\n </div>\n );\n }}\n </For>\n </div>\n </Show>\n <div\n ref={scrollContainer}\n class=\"k2b-calendar-time-grid__scroll k2b-detail-trail\"\n onScroll={(event) => followColumns(event.currentTarget)}\n >\n <div ref={timeGrid} class=\"k2b-calendar-time-grid__grid\" style={{ \"grid-template-columns\": columnTemplate() }}>\n <div\n ref={timeGutter}\n class=\"k2b-calendar-time-grid__gutter\"\n style={{ \"grid-template-rows\": `repeat(${hours().length}, minmax(4rem, 1fr))` }}\n >\n <For each={hours()}>\n {(hour) => (\n <div\n ref={(element) => {\n if (hour === businessStartHour()) defaultHourMarker = element;\n }}\n class=\"k2b-calendar-time-grid__hour\"\n data-outside-business={hour < businessStartHour() || hour > businessEndHour() ? \"true\" : undefined}\n >\n {`${hour}`.padStart(2, \"0\")}:00\n </div>\n )}\n </For>\n </div>\n <For each={props.days}>\n {(day) => {\n const dayKey = calendar.formatDateKey(day, dateConfig());\n const layouts = createMemo(() => timedEventLayouts(eventsByDay().get(dayKey)?.timed ?? []));\n return (\n <div\n class=\"k2b-calendar-time-grid__column\"\n data-weekend={isWeekendKey(dayKey, dateConfig().locale) ? \"true\" : undefined}\n style={{\n \"grid-template-rows\": `repeat(${hours().length}, minmax(4rem, 1fr))`,\n }}\n >\n <Show when={currentTimeLine(day) !== null}>\n <div class=\"k2b-calendar-time-grid__now\" style={{ top: `${currentTimeLine(day) ?? 0}%` }} />\n </Show>\n <For each={hours()}>\n {(hour) => (\n <div\n class=\"k2b-calendar-time-grid__slot\"\n data-outside-business={hour < businessStartHour() || hour > businessEndHour() ? \"true\" : undefined}\n data-interactive={props.owner.onSlotActivate ? \"true\" : undefined}\n {...slotInteractionProps(\n props.owner,\n () => {\n const start = zonedSlot(day, hour, dateConfig());\n return { start, end: slotEnd(start), allDay: false };\n },\n () => performance.now() < suppressSlotClickUntil,\n )}\n onPointerDown={startRange}\n />\n )}\n </For>\n <For each={previewEvents().filter((event) => event.dayKey === dayKey && !event.allDay)}>\n {(event) => {\n const layout = eventLayout(event);\n const short = event.endDate.getTime() - event.startDate.getTime() < 60 * 60_000;\n return (\n <div\n class=\"k2b-calendar-preview k2b-calendar-preview--timed\"\n data-short={short ? \"true\" : undefined}\n style={{ top: `${layout.top}%`, height: `${layout.height}%` }}\n >\n <div class=\"k2b-calendar-preview__content\">\n <Show when={event.title}>\n <div class=\"k2b-calendar-preview__title\">{event.title}</div>\n </Show>\n <div class=\"k2b-calendar-preview__label\">\n {formatTime(event.startDate, dateConfig())} - {formatTime(event.endDate, dateConfig())}\n </div>\n </div>\n </div>\n );\n }}\n </For>\n <For each={layouts()}>\n {(layoutItem) => {\n if (!isDayView() && layoutItem.lane >= visibleLaneCount(layoutItem.lanes)) return null;\n const event = layoutItem.event;\n const layout = eventLayout(event);\n const position = laneStyle(layoutItem);\n const resizeStart = (pointerEvent: PointerEvent) => {\n if (!props.owner.onEventResize) return;\n pointerEvent.preventDefault();\n pointerEvent.stopPropagation();\n beginInteraction({\n event: pointerEvent,\n scrollContainer,\n threshold: 1,\n resolve: (clientX, clientY) => {\n const pointer = timeAtPoint(clientX, clientY);\n if (!pointer) return null;\n const minimumEnd = addMinutes(event.sourceStartDate, 15);\n const end = pointer > minimumEnd ? pointer : minimumEnd;\n return { id: event.id, title: event.title, start: event.sourceStartDate, end, allDay: false };\n },\n onActivate: () => {\n suppressSlotClickUntil = performance.now() + 400;\n setMovingEventId(event.id);\n },\n onPreview: setTimePreview,\n onCommit: (next) => {\n clearInteraction();\n if (eventTimeChanged(event, next)) props.owner.onEventResize?.(event, next);\n },\n onCancel: clearInteraction,\n });\n };\n return (\n <div\n class=\"k2b-calendar-time-grid__event-position\"\n style={{\n top: `${layout.top}%`,\n height: `${layout.height}%`,\n left: position.left,\n width: position.width,\n \"z-index\": String(20 + layoutItem.lane),\n }}\n >\n <div class=\"k2b-calendar-time-grid__event-frame\">\n <EventChip\n event={event}\n owner={props.owner}\n href={eventHref(props.owner, event)}\n fill\n moving={movingEventId() === event.id}\n onMovePointerDown={\n props.owner.onEventDrop\n ? (pointerEvent, markDragged) => startTimedMove(pointerEvent, event, markDragged)\n : undefined\n }\n />\n <Show when={props.owner.onEventResize}>\n <button\n type=\"button\"\n aria-label={calendarMessages().resizeEvent}\n draggable={false}\n class=\"k2b-calendar-time-grid__resize\"\n onPointerDown={resizeStart}\n onDragStart={(event) => event.preventDefault()}\n >\n <span class=\"k2b-calendar-time-grid__resize-icon\" aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n </div>\n );\n }}\n </For>\n <For each={overflowLayouts(layouts())}>\n {(overflow) => {\n const layout = timeRangeLayout(overflow.groupStartDate, overflow.groupEndDate);\n const key = `${dayKey}-${overflow.groupId}`;\n const hiddenTitle = () =>\n overflow.hiddenEvents.map((event) => `${formatTime(event.startDate, dateConfig())} ${event.title}`).join(\"\\n\");\n return (\n <>\n <button\n type=\"button\"\n class=\"k2b-calendar-time-grid__overflow\"\n style={{ top: `${layout.top}%`, height: `${layout.height}%` }}\n title={hiddenTitle()}\n aria-label={calendarMessages().hiddenOverlappingEvents({ count: overflow.hiddenEvents.length })}\n onClick={(event) => {\n event.stopPropagation();\n setExpandedOverflow(expandedOverflow() === key ? \"\" : key);\n }}\n >\n <span class=\"k2b-calendar-time-grid__overflow-count\">+{overflow.hiddenEvents.length}</span>\n </button>\n <Show when={expandedOverflow() === key}>\n <div class=\"k2b-calendar-time-grid__overflow-menu\" style={{ top: `${layout.top}%` }}>\n <div class=\"k2b-calendar-time-grid__overflow-title\">\n {formatTime(overflow.groupStartDate, dateConfig())} - {formatTime(overflow.groupEndDate, dateConfig())}\n </div>\n <For each={overflow.hiddenEvents}>\n {(event) => <EventChip event={event} owner={props.owner} href={eventHref(props.owner, event)} compact />}\n </For>\n </div>\n </Show>\n </>\n );\n }}\n </For>\n </div>\n );\n }}\n </For>\n </div>\n </div>\n </div>\n );\n};\n\nconst YearView = (props: { owner: CalendarOwner; date: Date; now: Date; events: NormalizedEvent[] }): JSX.Element => {\n const dateConfig = createMemo(() => ownerDateConfig(props.owner));\n const year = createMemo(() => zonedYearMonth(props.date, dateConfig()).year);\n const todayKey = createMemo(() => calendar.formatDateKey(props.now, dateConfig()));\n const eventsByDay = createMemo(() => {\n const grouped = new Map<string, NormalizedEvent[]>();\n for (const event of props.events) {\n const events = grouped.get(event.dayKey);\n if (events) events.push(event);\n else grouped.set(event.dayKey, [event]);\n }\n return grouped;\n });\n const months = createMemo(() => {\n const context = dateConfig();\n return Array.from({ length: 12 }, (_, month) => {\n const date = zonedMonthDate(year(), month, context);\n return {\n date,\n label: date.toLocaleDateString(context.locale ?? \"en\", { month: \"long\", timeZone: context.timeZone }),\n days: calendar\n .getMonthGrid(year(), month, context)\n .flat()\n .map((day) => {\n const key = calendar.formatDateKey(day, context);\n return {\n date: day,\n events: eventsByDay().get(key) ?? [],\n isToday: key === todayKey(),\n outside: !calendar.isSameMonth(day, date, context),\n number: calendar.formatDayNumber(day, context),\n };\n }),\n };\n });\n });\n\n return (\n <div class=\"k2b-calendar-year\">\n <For each={months()}>\n {(month) => (\n <div class=\"k2b-calendar-year__month\">\n <div class=\"k2b-calendar-year__title\">{month.label}</div>\n <div class=\"k2b-calendar-year__grid\">\n <For each={month.days}>\n {(day) => (\n <CalendarNavigationLink\n owner={props.owner}\n href={props.owner.getDateHref?.(day.date, \"day\") ?? \"#\"}\n anchorProps={{\n class: \"k2b-calendar-year__day\",\n \"data-today\": day.isToday ? \"true\" : undefined,\n \"data-outside\": day.outside ? \"true\" : undefined,\n }}\n >\n {day.number}\n <Show when={day.events[0]}>\n {(event) => (\n <span\n class=\"k2b-calendar-year__indicator\"\n data-color={event().colorHex ? undefined : (event().color ?? \"blue\")}\n data-today={day.isToday ? \"true\" : undefined}\n style={event().colorHex ? { \"background-color\": day.isToday ? \"white\" : event().colorHex } : undefined}\n />\n )}\n </Show>\n </CalendarNavigationLink>\n )}\n </For>\n </div>\n </div>\n )}\n </For>\n </div>\n );\n};\n\nconst MobileMonthView = (props: {\n owner: CalendarOwner;\n date: Date;\n now: Date;\n selectedDate: Date;\n events: NormalizedEvent[];\n labels: Required<CalendarLabels>;\n}): JSX.Element => {\n const dateConfig = createMemo(() => ownerDateConfig(props.owner));\n const selectedDateKey = createMemo(() => calendar.formatDateKey(props.selectedDate, dateConfig()));\n const selectedEvents = createMemo(() => props.events.filter((event) => event.dayKey === selectedDateKey()));\n return (\n <div class=\"k2b-calendar-mobile-month\">\n <MonthPickerView\n owner={{ ...props.owner, withWeekNumbers: false }}\n date={props.date}\n now={props.now}\n events={props.events}\n labels={props.labels}\n compact\n />\n <div class=\"k2b-calendar-mobile-month__agenda\">\n <div class=\"k2b-calendar-mobile-month__title\">\n {props.selectedDate.toLocaleDateString(dateConfig().locale ?? \"en\", {\n weekday: \"long\",\n month: \"long\",\n day: \"numeric\",\n timeZone: dateConfig().timeZone,\n })}\n </div>\n <Show when={selectedEvents().length > 0} fallback={<div class=\"k2b-calendar-mobile-month__empty\">{props.labels.noEvents}</div>}>\n <div class=\"k2b-calendar-mobile-month__events\">\n <For each={selectedEvents()}>\n {(event) => <EventChip event={event} owner={props.owner} href={eventHref(props.owner, event)} />}\n </For>\n </div>\n </Show>\n </div>\n </div>\n );\n};\n\nconst CalendarBody = (props: { children: JSX.Element }): JSX.Element => <div class=\"k2b-calendar-body\">{props.children}</div>;\n\nconst CalendarRoot = <V extends string = never>(props: CalendarProps<V>): JSX.Element => {\n const messages = useUiMessages();\n const calendarMessages = useCalendarMessages();\n // Subviews derive their date config from the owner props, so the inherited\n // render locale is merged here once; an explicit dateConfig.locale wins.\n const localizedConfig = useDateConfigLocale(() => props.dateConfig);\n const owner = mergeProps(props, {\n get dateConfig(): DateContext {\n return localizedConfig();\n },\n });\n const view = () => props.view ?? \"month\";\n const custom = () => props.customViews?.some((option) => option.value === view()) ?? false;\n const dateConfig = createMemo(() => ownerDateConfig(owner));\n const safeDate = (value: Date | string) => {\n const parsed = parseDate(value, dateConfig());\n return validDate(parsed) ? parsed : calendar.today(dateConfig());\n };\n const date = createMemo(() => safeDate(props.date));\n const selectedDate = createMemo(() => safeDate(props.selectedDate ?? props.date));\n const [now, setNow] = createSignal(new Date());\n /** The first day selected in the month view, so the view switcher opens the other views at it. */\n const [focusDay, setFocusDay] = createSignal<Date | null>(null);\n const normalizedEvents = createMemo(() => normalizeEvents(props.events, dateConfig()));\n const mergedLabels = createMemo<Required<CalendarLabels>>(() => ({\n today: messages().today,\n day: messages().day,\n week: messages().week,\n month: messages().month,\n year: messages().year,\n allDay: messages().allDay,\n noEvents: calendarMessages().noEvents,\n previous: messages().previous,\n next: messages().next,\n ...props.labels,\n }));\n const days = createMemo(() => {\n if (view() === \"day\") return [date()];\n return calendar.getWeekDays(date(), dateConfig());\n });\n onMount(() => {\n const updateNow = () => setNow(new Date());\n const interval = window.setInterval(updateNow, 60_000);\n document.addEventListener(\"visibilitychange\", updateNow);\n onCleanup(() => {\n window.clearInterval(interval);\n document.removeEventListener(\"visibilitychange\", updateNow);\n });\n });\n\n // The day and week views with `dayHours` scroll through their days; the header and the commands ask them first.\n const [timeView, setTimeView] = createSignal<TimeViewHandle | null>(null);\n const [monthCreate, setMonthCreate] = createSignal<MonthHandle | null>(null);\n const monthView = () => (monthCreate()?.continuous() ? monthCreate() : null);\n const scrollingView = () => timeView() ?? monthView();\n const timeMode = () => Boolean(props.dayHours) && (view() === \"day\" || view() === \"week\");\n const parseKey = (key: string) => calendar.parseCalendarDate(key, dateConfig());\n /** The first shown day of a day or week view, or the selected day of the month view, for the other views. */\n const shownDay = () => {\n const first = timeView()?.visibleKeys().first;\n if (first) return parseKey(first);\n return view() === \"month\" ? (focusDay() ?? monthView()?.focusDay() ?? null) : null;\n };\n const go = (target: Date, nextView: CalendarView | V) => {\n const href = props.getDateHref?.(target, nextView);\n if (href) followCalendarHref(owner, href);\n else openViewAt(props, target, nextView);\n };\n const step = (direction: -1 | 1) => {\n if (scrollingView()?.step(direction)) return;\n go(adjacentCalendarDate(monthView()?.stepFrom() ?? shownDay() ?? date(), view(), direction, dateConfig()), view());\n };\n const goToday = () => {\n if (scrollingView()?.today()) return;\n go(calendar.today(dateConfig()), view());\n };\n const goView = (nextView: CalendarView) => {\n const day = shownDay();\n if (day) {\n go(day, nextView);\n return;\n }\n const href = props.getViewHref?.(nextView);\n if (href) followCalendarHref(owner, href);\n else props.onViewChange?.(nextView);\n };\n const goToKey = (key: string) => {\n if (scrollingView()?.goTo(key)) return;\n go(parseKey(key), view());\n };\n const openGoTo = () =>\n void openCalendarGoTo({\n messages: calendarMessages(),\n today: calendar.formatDateKey(new Date(), dateConfig()),\n describe: (key) =>\n parseKey(key).toLocaleDateString(dateConfig().locale ?? \"en\", {\n weekday: \"long\",\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n timeZone: dateConfig().timeZone,\n }),\n onGo: goToKey,\n });\n const ownCommands = createMemo((): CalendarCommand[] => {\n const text = calendarMessages();\n const available = ([\"day\", \"week\", \"month\", \"year\"] as const).filter((option) => !props.views || props.views.includes(option));\n const viewLabels = { day: mergedLabels().day, week: mergedLabels().week, month: mergedLabels().month, year: mergedLabels().year };\n return [\n {\n id: \"calendar.today\",\n label: text.calendarCommandToday,\n description: text.calendarCommandTodayDescription,\n shortcut: \"h\",\n icon: \"ti ti-calendar-event\",\n run: goToday,\n },\n {\n id: \"calendar.next\",\n label: text.calendarCommandNext,\n description: text.calendarCommandNextDescription,\n shortcut: \"j\",\n icon: \"ti ti-chevron-right\",\n run: () => step(1),\n },\n {\n id: \"calendar.previous\",\n label: text.calendarCommandPrevious,\n description: text.calendarCommandPreviousDescription,\n shortcut: \"k\",\n icon: \"ti ti-chevron-left\",\n run: () => step(-1),\n },\n ...available.map((option, index) => ({\n id: `calendar.view.${option}`,\n label: text.calendarCommandView({ view: viewLabels[option] }),\n description: text.calendarCommandViewDescription({ view: viewLabels[option] }),\n shortcut: String(index + 1),\n icon: \"ti ti-layout-columns\",\n run: () => goView(option),\n })),\n {\n id: \"calendar.goto\",\n label: text.calendarCommandGoTo,\n description: text.calendarCommandGoToDescription,\n shortcut: \"g\",\n icon: \"ti ti-calendar-search\",\n run: openGoTo,\n },\n ];\n });\n const allCommands = createMemo(() => [...ownCommands(), ...(props.commands ?? [])]);\n /** While the month's quiet quick create waits for typing, a single key is the first letter of a title. */\n const typing = () => view() === \"month\" && (monthCreate()?.typing() ?? false);\n createEffect(() => {\n const commands = typing()\n ? allCommands().map((command) => (command.shortcut && singleKey(command.shortcut) ? { ...command, shortcut: undefined } : command))\n : allCommands();\n untrack(() => props.onCommandsChange?.(commands));\n });\n // The arrow keys page like J and K while the keyboard is in the calendar or nowhere, unless something there uses\n // them, such as the grid of the week or the month.\n let root: HTMLElement | undefined;\n onMount(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"ArrowLeft\" && event.key !== \"ArrowRight\") return;\n if (event.defaultPrevented || event.isComposing || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) return;\n if (!props.onCommandsChange || custom() || document.querySelector('dialog[open], [role=\"dialog\"][aria-modal=\"true\"]')) return;\n const target = event.target;\n const inCalendar = target instanceof Element && Boolean(root?.contains(target));\n if (!inCalendar && target !== document.body && target !== document.documentElement) return;\n if (\n target instanceof Element &&\n target.closest(\"input, textarea, select, [contenteditable]:not([contenteditable=false]), [role=textbox], [popover], [role=dialog]\")\n )\n return;\n event.preventDefault();\n step(event.key === \"ArrowRight\" ? 1 : -1);\n };\n window.addEventListener(\"keydown\", onKeyDown);\n onCleanup(() => window.removeEventListener(\"keydown\", onKeyDown));\n });\n const headerNav: CalendarHeaderNav = {\n timeView,\n monthView,\n commands: () => (props.onCommandsChange ? allCommands() : []),\n // The arrow keys page like J and K, so the list names them beside those keys.\n openShortcuts: () =>\n void openCalendarShortcuts(\n allCommands(),\n calendarMessages(),\n custom() ? {} : { \"calendar.next\": \"arrowright\", \"calendar.previous\": \"arrowleft\" },\n ),\n };\n const controller: CalendarController = {\n quickCreate: (create) => {\n const active = timeView();\n if (active) active.controller.quickCreate(create);\n else monthCreate()?.quickCreate(create);\n },\n createTarget: () => {\n const active = timeView()?.controller.createTarget() ?? monthCreate()?.createTarget();\n if (active) return active;\n const start = calendar.today(dateConfig());\n return { start, end: calendar.addDays(start, 1, dateConfig()), allDay: true };\n },\n dragIn: (event, item, onDrop) => timeView()?.controller.dragIn(event, item, onDrop),\n };\n onMount(() => props.controller?.(controller));\n const timeProps = (timeViewName: \"day\" | \"week\") => ({\n owner,\n view: timeViewName,\n get date() {\n return date();\n },\n get now() {\n return now();\n },\n get events() {\n return props.events;\n },\n get labels() {\n return mergedLabels();\n },\n get hours() {\n return props.dayHours ?? ([0, 24] as const);\n },\n register: setTimeView,\n });\n\n return (\n <section ref={root} class={`k2b-content-calendar ${props.class ?? \"\"}`} aria-busy={props.navigationPending ? \"true\" : undefined}>\n <CalendarHeader\n date={date()}\n view={view()}\n labels={mergedLabels()}\n owner={owner}\n focusDay={view() === \"month\" || timeView() ? shownDay() : null}\n nav={headerNav}\n />\n <Show when={!custom()} fallback={<CalendarBody>{props.children}</CalendarBody>}>\n <Show\n when={view() !== \"month\"}\n fallback={\n <CalendarBody>\n <MonthView\n owner={owner}\n date={date()}\n now={now()}\n events={normalizedEvents()}\n labels={mergedLabels()}\n onFocusDay={setFocusDay}\n goToDate={(date) => go(date, view())}\n register={setMonthCreate}\n />\n </CalendarBody>\n }\n >\n <Show\n when={view() !== \"year\"}\n fallback={\n <CalendarBody>\n <YearView owner={owner} date={date()} now={now()} events={normalizedEvents()} />\n </CalendarBody>\n }\n >\n <Show\n when={view() !== \"mobile-month\"}\n fallback={\n <CalendarBody>\n <MobileMonthView\n owner={owner}\n date={date()}\n now={now()}\n selectedDate={selectedDate()}\n events={normalizedEvents()}\n labels={mergedLabels()}\n />\n </CalendarBody>\n }\n >\n <Show\n when={timeMode()}\n fallback={\n <TimeGridView owner={owner} date={date()} now={now()} events={normalizedEvents()} labels={mergedLabels()} days={days()} />\n }\n >\n <Show when={view() === \"day\"} fallback={<CalendarWeekView {...timeProps(\"week\")} />}>\n <CalendarDayView {...timeProps(\"day\")} />\n </Show>\n </Show>\n </Show>\n </Show>\n </Show>\n </Show>\n </section>\n );\n};\n\n/** A shortcut without Ctrl, Meta, or Mod, which typing would set off. */\nconst singleKey = (shortcut: string) => !/(^|\\+)(ctrl|meta|mod)\\+/i.test(shortcut);\n\n/** JSX infers the values of `customViews`; inference from the last signature, as in `createComponent`, sees plain props. */\nfunction Calendar<V extends string = never>(props: CalendarProps<V>): JSX.Element;\nfunction Calendar(props: CalendarProps): JSX.Element;\nfunction Calendar(props: CalendarProps<string>): JSX.Element {\n return CalendarRoot(props);\n}\n\nexport default Calendar;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,IAAI,QAAgC,cAAc;AAC3D,SAAS,KAAK,IAAI,QAAQ,QAA0B,aAAa;AAEjE,SAAS,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,QAAQ,UAAU;AACzI,SAAS,MAAM,QAAQ,mBAAmB;AAE1C,SAAS,WAAW,QAAQ,wBAAwB;AACpD,OAAO,gBAAgB,MAAM,6BAA6B;AAC1D,SAAS,mBAAmB,QAAQ,gBAAgB;AACpD,SAAS,aAAa,QAAQ,kBAAkB;AAChD,SAAS,eAAe,EAAE,YAAY,QAAQ,iBAAiB;AAC/D,SAAS,oBAAoB,QAAQ,WAAW;AAChD,SAAS,eAAe,QAAQ,mBAAmB;AACnD,SAAS,gBAAgB,QAAQ,oBAAoB;AACrD,SAAS,UAAU,QAAQ,iBAAiB;AAC5C,SAAS,gBAAgB,EAAE,qBAAqB,QAAQ,oBAAoB;AAC5E,SAAS,uBAAuB,QAAQ,yBAAyB;AACjE,SAAS,mBAAmB,QAAQ,qBAAqB;AACzD,SAAS,YAAY,EAAE,eAAe,EAAE,iBAAiB,QAAQ,yBAAyB;AAC1F,SACE,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,QACR,yBAAyB;AAChC,SAAS,mBAAmB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,2BAA2B,QAAQ,oBAAoB;AACrI,SAEE,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,UAAU,EAEV,eAAe,EACf,SAAS,EACT,oBAAoB,EACpB,SAAS,EACT,SAAS,QACJ,mBAAmB;AAC1B,SAAS,iBAAiB,QAAkD,sBAAsB;;AAyFlG;;AAGA;AACA;AACA;AACA;;AAaA;;AASA;;AAiBA;;AAwKA,MAAM,UAAU,GAAI,IAAU,IAAa;EACzC,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;EACtF,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC;EACnC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;EAChD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EACnE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC;AACjF,CAAC;AACD,MAAM,eAAe,GAAG,CAAC,IAAU,EAAE,OAAqB,KAAa;EACrE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,UAAU,CAAC,IAAI,CAAC;EAC/C,MAAM,CAAC,IAAI,GAAG,MAAM,EAAE,KAAK,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;EAChG,OAAO,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,IAAU,EAAE,OAAqB,KAClD,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,IAAI,IAAI,EAAE;EAAE,OAAO,EAAE,OAAO;EAAE,GAAG,EAAE,SAAS;EAAE,QAAQ,EAAE,OAAO,EAAE;AAAS,CAAC,CAAC;AACrH,MAAM,WAAW,GAAG,CAAC,IAAU,EAAE,OAAqB,KAAa,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC;AAC1G,MAAM,cAAc,GAAG,CAAC,IAAU,EAAE,OAAqB,KAAsC;EAC7F,MAAM,CAAC,IAAI,GAAG,MAAM,EAAE,KAAK,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;EACrF,OAAO;IAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG;EAAE,CAAC;AACzD,CAAC;AACD,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,OAAqB,KAAW;EACnF,MAAM,KAAK,GAAG,GAAG,IAAI,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW;EACtE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,SAAS,CAAC,KAAK,CAAC;EAC/C,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;IAAE,cAAc,EAAE;EAAa,CAAC,CAAC,CAAC;AAC7G,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAU,EAAE,OAAqB,KAAW,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;AAClG,MAAM,QAAQ,GAAG,CAAC,IAAU,EAAE,OAAqB,KAAW,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;AAC9F,MAAM,YAAY,GAAG,CAAC,IAAU,EAAE,OAAqB,KAAc,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;AAC3H,MAAM,UAAU,GAAG,CAAC,IAAU,EAAE,OAAe,KAAW,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC;AACxG,MAAM,SAAS,GAAG,CAAC,IAAU,EAAE,OAAqB,KAAa;EAC/D,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,EAAE;EACvE,MAAM,KAAK,GAAG,QAAQ,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;EAClE,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE;AACvE,CAAC;AACD,MAAM,SAAS,GAAG,CAAC,GAAS,EAAE,IAAY,EAAE,OAAqB,KAAW;EAC1E,OAAO,eAAe,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,CAAC;AACjD,CAAC;AACD,MAAM,eAAe,GAAG,CAAC,GAAS,EAAE,WAAmB,EAAE,OAAqB,KAAW;EACvF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;EAChE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;EACrC,MAAM,MAAM,GAAG,OAAO,GAAG,EAAE;EAC3B,MAAM,KAAK,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;EAC3H,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,SAAS,CAAC,KAAK,CAAC;EAC/C,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;IAAE,cAAc,EAAE;EAAa,CAAC,CAAC,CAAC;AAC7G,CAAC;AACD,MAAM,eAAe,GAAG,CAAC,MAAuB,EAAE,OAAqB,KACrE,MAAM,CAAC,OAAO,CAAE,KAAK,IAAK;EACxB,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;EACjD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE;EACpC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI;EAClE,MAAM,OAAO,GAAG,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;EAC9G,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;EAClF,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC;EACzF,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC;EAC3D,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC;EACxD,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,QAAQ,KAAK,MAAM,EAAE;IACxC,OAAO,CACL;MACE,GAAG,KAAK;MACR,SAAS;MACT,OAAO,EAAE,QAAQ;MACjB,eAAe,EAAE,SAAS;MAC1B,aAAa,EAAE,QAAQ;MACvB,MAAM,EAAE;IACV,CAAC,CACF;EACH;EACA,MAAM,OAAO,GACX,KAAK,CAAC,MAAM,IAAI,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,GAC3C,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,GAC5D,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC;EACnC,MAAM,IAAuB,GAAG,EAAE;EAClC,KAAK,IAAI,GAAG,GAAG,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,OAAO,EAAE,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE;IACtG,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;IACtH,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IAChH,IAAI,CAAC,IAAI,CAAC;MACR,GAAG,KAAK;MACR,SAAS,EAAE,YAAY;MACvB,OAAO,EAAE,UAAU;MACnB,eAAe,EAAE,SAAS;MAC1B,aAAa,EAAE,QAAQ;MACvB,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC;MAC5C,MAAM,EAAE,KAAK,CAAC;IAChB,CAAC,CAAC;EACJ;EACA,OAAO,IAAI;AACb,CAAC,CAAC;AAEJ,MAAM,WAAW,GAAG,CAAC,KAAsB,EAAE,MAAY,EAAE,MAAM,GAAG,KAAK,EAAE,OAAqB,KAA8B;EAC5H,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;EAC1G,MAAM,KAAK,GAAG,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC;EACrE,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;EACtB,OAAO;IAAE,KAAK;IAAE,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC;IAAE;EAAO,CAAC;AACrE,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,KAAsB,EAAE,GAAS,EAAE,OAAqB,KAA8B;EAC5G,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC;EACpF,MAAM,UAAU,GAAG,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;EACnH,MAAM,IAAI,GAAG,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;EAC7F,MAAM,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;EACjG,OAAO,WAAW,CAAC,KAAK,EAAE,eAAe,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC;AAC9F,CAAC;AAED,MAAM,gBAAgB,GAAG,CAAC,KAAsB,EAAE,IAA6B,KAC7E,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IACxD,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IACpD,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AAEhD,MAAM,eAAe,GAAG,CAAC,OAA+B,EAAE,IAAY,EAAE,OAAqB,KAC3F,OAAO,GACH,eAAe,CACb,CACE;EACE,EAAE,EAAE,WAAW,OAAO,CAAC,EAAE,EAAE;EAC3B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;EAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;EACpB,GAAG,EAAE,OAAO,CAAC,GAAG;EAChB,MAAM,EAAE,OAAO,CAAC,MAAM;EACtB,KAAK,EAAE;AACT,CAAC,CACF,EACD,OACF,CAAC,CAAC,MAAM,CAAE,KAAK,IAAK,IAAI,CAAC,IAAI,CAAE,GAAG,IAAK,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,GAC9F,EAAE;AAER,MAAM,iBAAiB,GAAI,MAAyB,IAAyB;EAC3E,OAAO,uBAAuB,CAAC,MAAM,EAAG,KAAK,KAAM;IACjD,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAChC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;EAC7B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAAE,IAAI,EAAE,KAAK;IAAE,IAAI;IAAE,KAAK;IAAE,OAAO;IAAE,UAAU;IAAE;EAAS,CAAC,MAAM;IACxE,KAAK;IACL,IAAI;IACJ,KAAK;IACL,OAAO;IACP,cAAc,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC;IACpC,YAAY,EAAE,IAAI,IAAI,CAAC,QAAQ;EACjC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,oBAAoB,GAAG,CAC3B,KAAoB,EACpB,IAAmC,EACnC,UAA0B,EAC1B,aAAa,GAAG,KAAK,KAClB;EACH,MAAM,WAAW,GAAI,KAAY,IAAK;IACpC,IAAI,EAAE,KAAK,CAAC,MAAM,YAAY,OAAO,CAAC,EAAE,OAAO,KAAK;IACpD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,gCAAgC,CAAC;IACtE,OAAO,OAAO,CAAC,OAAO,IAAI,OAAO,KAAK,KAAK,CAAC,aAAa,CAAC;EAC5D,CAAC;EACD,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC;EACjD,MAAM,QAAQ,GAAI,KAAY,IAAK;IACjC,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE;IACnE,KAAK,CAAC,cAAc,CAAC,CAAC;IACtB,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;EAC9B,CAAC;EACD,OAAO;IACL,IAAI,EAAE,WAAW,IAAI,CAAC,aAAa,GAAI,QAAQ,GAAa,SAAS;IACrE,QAAQ,EAAE,WAAW,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,SAAS;IACvD,OAAO,EAAG,KAAiB,IAAK;MAC9B,IAAI,KAAK,CAAC,cAAc,KAAK,QAAQ,EAAE;MACvC,QAAQ,CAAC,KAAK,CAAC;IACjB,CAAC;IACD,UAAU,EAAG,KAAiB,IAAK;MACjC,IAAI,KAAK,CAAC,cAAc,KAAK,QAAQ,EAAE;MACvC,QAAQ,CAAC,KAAK,CAAC;IACjB,CAAC;IACD,SAAS,EAAE,aAAa,GACpB,SAAS,GACR,KAAoB,IAAK;MACxB,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC;IACjE;EACN,CAAC;AACH,CAAC;AAkBD,MAAM,UAAU,GAAI,KAAiB,IACnC,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM;;AAEvH;AACA,MAAM,sBAAsB,GAAI,KAAkC,IAAkB;EAClF,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC;EAC1D,MAAM,WAAW,GAAI,KAAiB,IAAK;IACzC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,KAAK;IAC9E,KAAK,CAAC,cAAc,CAAC,CAAC;IACtB,OAAO,IAAI;EACb,CAAC;EACD,MAAM,YAA6D,GAAI,KAAK,IAAK;IAC/E,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;IACxB,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa;IAClC,IACE,CAAC,UAAU,CAAC,KAAK,CAAC,IACjB,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,OAAQ,IAC5C,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,IAC/B,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,EACtD;MACA;IACF;IACA,KAAK,CAAC,cAAc,CAAC,CAAC;IACtB,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC;EAC1C,CAAC;EACD,OAAO,KAAK,CAAC,KAAK,CAAC,cAAc,wCACxB,KAAK,CAAC,WAAW;IAAA,IAAE,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI;IAAA;EAAA,aACvC,KAAK,CAAC,QAAQ,YAEf,KAAK,CAAC,KAAK,CAAC,UAAU,qBACvB,IAAI,qBACC,KAAK,CAAC,WAAW;IAAA,IACrB,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI;IAAA;IAChB,MAAM;IAAA,IACN,UAAU;MAAA,OAAE,KAAK,CAAC,KAAK,CAAC,UAAU;IAAA;IAClC,OAAO,EAAG,KAAK,IAAK,KAAK,WAAW,CAAC,KAAK,CAAC;IAC3C,cAAc,EAAE,OAAO;IACvB,OAAO,EAAE,OAAO;IAAA;MAAA,OAEf,KAAK,CAAC,QAAQ;IAAA;EAAA,2CAGV,KAAK,CAAC,WAAW;IAAA,IAAE,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI;IAAA;EAAA,aACvC,KAAK,CAAC,QAAQ,SAElB;AACH,CAAC;AAED,MAAM,iBAAiB,GAAsB,KAM5C,IAAkB;EACjB,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,CAAC;EAC9C,MAAM,IAAyB,GAAG,EAAE;EACpC,MAAM,cAAc,GAAG,CAAC,YAAoB,EAAE,SAAiB,KAAK;IAClE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;IAChC,IAAI,CAAC,CAAC,YAAY,GAAG,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;EACzF,CAAC;EACD,MAAM,SAAS,GAAG,CAAC,KAAoB,EAAE,KAAa,KAAK;IACzD,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;MAC3D,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1B,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;MAC/D,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC3B,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;MACtD,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACpE;EACF,CAAC;EAED,2DAGgB,gBAAgB,CAAC,CAAC,CAAC,YAAY,4CAI1C,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,OAAO;IAAA;IAAA,UACrB,CAAC,MAAM,EAAE,KAAK,KAAK;MAClB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,cAAc,GAAG,OAAO,GAAG,KAAK,CAAC,IAAI,MAAM,MAAM,CAAC,KAAK;MAC5F,MAAM,IAAI,GAAG,MAAM;QACjB,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ;QAC1B,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS;QACzF,OAAO,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG;MAChE,CAAC;MACD,yBACG,sBAAsB;QAAA,IACrB,KAAK;UAAA,OAAE,KAAK,CAAC,KAAK;QAAA;QAAA,IAClB,IAAI;UAAA,OAAE,IAAI,CAAC,CAAC;QAAA;QAAA,IACZ,WAAW;UAAA,OAAE;YACX,GAAG,EAAG,OAAO,IAAK;cAChB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO;YACzB,CAAC;YACD,IAAI,EAAE,OAAO;YACb,cAAc,EAAE,MAAM,CAAC,CAAC;YACxB,QAAQ,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3B,KAAK,EAAE,+BAA+B;YACtC,cAAc,EACZ,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAClC,CAAC,MAAM,CAAC,CAAC,IACT,CAAC,KAAK,CAAC,IAAI,KAAK,cAAc,GAAG,OAAO,GAAG,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GACxF,MAAM,GACN,SAAS;YACf,SAAS,EAAG,KAAK,IAAK,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;UAChD,CAAC;QAAA;QAAA;UAAA,OAEA,MAAM,CAAC,KAAK;QAAA;MAAA;IAGnB;EAAC;AAIT,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAM,gBAAgB,GAAG,CAAC,IAAU,EAAE,MAAc,EAAE,UAAuB,KAAW;EACtF,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC;EAC1D,IAAI,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK;EAC1H,OAAO,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC;AACnF,CAAC;;AAED;AACA,MAAM,oBAAoB,GAAG,CAAC,IAAU,EAAE,IAAY,EAAE,SAAiB,EAAE,UAAuB,KAAK;EACrG,IAAI,IAAI,KAAK,MAAM,EAAE,OAAO,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,EAAE,EAAE,UAAU,CAAC;EAC9E,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,cAAc,EAAE,OAAO,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC;EACrG,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,IAAI,IAAI,KAAK,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC;AAClF,CAAC;;AAED;AACA,MAAM,UAAU,GAAG,CACjB,KAA8D,EAC9D,IAAU,EACV,IAAsB,KACnB;EACH,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;EAC1B,KAAK,CAAC,YAAY,GAAG,IAAI,EAAE,IAAI,CAAC;AAClC,CAAC;;AAED;;AAUA,MAAM,eAA2C,GAAG;EAAE,OAAO,EAAE,OAAO;EAAE,GAAG,EAAE,SAAS;EAAE,KAAK,EAAE,OAAO;EAAE,IAAI,EAAE;AAAU,CAAC;AACzH,MAAM,gBAA4C,GAAG;EAAE,GAAG,EAAE,SAAS;EAAE,KAAK,EAAE,OAAO;EAAE,IAAI,EAAE;AAAU,CAAC;;AAExG;AACA,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,IAAU,EAAE,OAAoB,KAAqB;EAC3F,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC;EACzD,IAAI,IAAI,KAAK,MAAM,EAAE;IACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClF,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAC9G,OAAO,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,GAAG,GAAG,OAAO,GAAG,EAAE;EAC5D;EACA,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;EACnD,OAAO,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,EAAE;AAC3D,CAAC;AAED,MAAM,cAAc,GAAsB,KAOzC,IAAkB;EACjB,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,CAAC;EAC9C,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC;EACrD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;EAC3C,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;EAC7C,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;EACrD,MAAM,QAAQ,GAAI,GAAW,IAAK,QAAQ,CAAC,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;EAC/E;EACA,MAAM,IAAI,GAAG,MAAM;IACjB,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK;IAC7C,OAAO,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAI,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,IAAK;EAC1E,CAAC;EACD,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;EACjF,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;EAC5E;EACA,MAAM,cAAc,GAAI,IAAU,IAChC,iBAAiB,CACf,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE;IAAE,GAAG,eAAe;IAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;EAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAC1H,UAAU,CAAC,CAAC,CAAC,MAAM,EACnB,IACF,CAAC;EACH,MAAM,WAAW,GAAG,CAAC,IAAU,EAAE,EAAQ,KACvC,iBAAiB,CACf,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE;IAAE,GAAG,gBAAgB;IAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;EAAS,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,EACpI,UAAU,CAAC,CAAC,CAAC,MACf,CAAC;EACH;EACA,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;EACvG,MAAM,KAAK,GAAG,MAAM;IAClB,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IACvC,IAAI,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,OAAO,cAAc,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;IACzG,IAAI,QAAQ,CAAC,CAAC,EAAE;MACd,MAAM,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;MAC5F,OAAO,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACpG;IACA,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EACvB,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE;MAAE,IAAI,EAAE,SAAS;MAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;IACtI,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAClF,OAAO,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE;MAChE,OAAO,EAAE,MAAM;MACf,KAAK,EAAE,MAAM;MACb,GAAG,EAAE,SAAS;MACd,IAAI,EAAE,SAAS;MACf,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC;IACJ,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EACvB,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE;IACrM,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;EAC3E,CAAC;EACD;AACF;AACA;AACA;EACE,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM;IACnC,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC;IAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,OAAO,EAAE;IACpC,MAAM;MAAE;IAAK,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;IACpD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EACzD,OAAO,KAAK,CAAC,IAAI,CAAC;MAAE,MAAM,EAAE;IAAG,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,WAAW,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7G,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;MACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC;MACvF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;QAAE,MAAM,EAAE;MAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK;QACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,EAAE,OAAO,CAAC;QACxD,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9E,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE;MACpG,CAAC,CAAC;MACF,IAAI,QAAQ,CAAC,CAAC,EAAE;QACd,OAAO,CACL,GAAG,KAAK,EACR,GAAG,KAAK,CAAC,IAAI,CAAC;UAAE,MAAM,EAAE;QAAG,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK;UAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC;UACjF,OAAO,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC,CAAC,CACH;MACH;MACA,OAAO,KAAK;IACd;IACA,OAAO,KAAK,CAAC,IAAI,CAAC;MAAE,MAAM,EAAE;IAAG,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,OAAO,CAAE,KAAK,IAAK;MACxE,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC;MAClD,OAAO,KAAK,CAAC,IAAI,CAAC;QAAE,MAAM,EAAE;MAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KACzC,QAAQ,CAAC,CAAC,GACN,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,GAC7D,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE;QACvF,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,MAAM;QACb,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,OAAO,CAAC;MACpB,CAAC,CACP,CAAC;IACH,CAAC,CAAC;EACJ,CAAC,CAAC;EACF,MAAM,MAAM,GAAI,IAAU,IAAK,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;EAC3E,MAAM,MAAM,GAAI,IAAsB,IAAK;IACzC;IACA,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ;IAC1B,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;MAC1D,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC;MAClC;IACF;IACA,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE;MAC5B,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC;MAC9B;IACF;IACA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5C,IAAI,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI;EACvC,CAAC;EACD;AACF;AACA;AACA;EACE,MAAM,SAAS,GAAG,CAAC,IAAgB,EAAE,IAAY,EAAE,KAAa,EAAE,SAAiB,KAAK;IACtF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC;IAChE,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK;IAC5D,MAAM,KAAK,GAAG,MAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,KAAK,KAAK,SAAS,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAM;IACzG,MAAM,IAAI,GAAI,MAAoB,sBAC/B,sBAAsB;MAAA,IACrB,KAAK;QAAA,OAAE,KAAK,CAAC,KAAK;MAAA;MAAA,IAClB,IAAI;QAAA,OAAE,MAAM,CAAC,CAAC;MAAA;MACd,SAAS,EAAE,IAAI;MAAA,IACf,WAAW;QAAA,OAAE;UAAE,YAAY,EAAE,KAAK;UAAE,KAAK,EAAE,KAAK,CAAC,CAAC;UAAE,KAAK,EAAE;QAAkC,CAAC;MAAA;MAAA;QAAA,sBAEpF,eAAM,IAAI,SAAE;MAAA;IAAA,EAEzB;IACD,yBACG,IAAI;MAAA,IACH,IAAI;QAAA,OAAE,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC;MAAA;MAAA,IAC/E,QAAQ;QAAA,yBACL,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,KAAK,CAAC,KAAK,CAAC,YAAY;UAAA;UAAA,IAAE,QAAQ;YAAA,OAAE,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC;UAAA;UAAA;YAAA,4DAGzD,KAAK,mDACV,KAAK,CAAC,CAAC,iBAMJ,eAAM,IAAI,SAAE;UAAA;QAAA;MAAA;MAAA;QAAA,OAK3B,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC;MAAA;IAAA;EAGhC,CAAC;EACD;AACF;AACA;AACA;EACE,MAAM,SAAS,GAAG,MAChB,QAAQ,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GACrB,CAAC,aAAa,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,GAC/G,SAAS;EACf;EACA,MAAM,SAAS,GAAG,wBACf,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,SAAS,CAAC,CAAC;IAAA;IAAA,UACnB,OAAO,sBACN,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,OAAO,CAAC,CAAC,KAAK,MAAM;MAAA;MAAA,IAAE,QAAQ;QAAA;MAAA;MAAA;QAAA;MAAA;IAAA;EAG3C,EAEJ;EACD,MAAM,WAAW,GAAG,MAAM;IACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;IACzD,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,KAAK;IACzD,MAAM,KAAK,GAAG,MAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,MAAM,GAAG,SAAU;IAC/F,MAAM,KAAK,IAEN,SAAS,CAAC,CAAC,0BACqB,KAAK,CAAC,MAAM,CAAC,KAAK,GAEtD;IACD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI,qBAClE,sBAAsB;MAAA,IACrB,KAAK;QAAA,OAAE,KAAK,CAAC,KAAK;MAAA;MAClB,IAAI,EAAE,IAAI;MACV,SAAS,EAAE,SAAS;MAAA,IACpB,WAAW;QAAA,OAAE;UACX,KAAK,EAAE,uCAAuC;UAC9C,WAAW,EAAE,IAAI;UACjB,cAAc,EAAE,OAAO;UACvB,gBAAgB,EAAE,SAAS,CAAC,CAAC;UAC7B,KAAK,EAAE,KAAK,CAAC;QACf,CAAC;MAAA;MAAA,UAEA;IAAK,KAEN,KAAK,CAAC,KAAK,CAAC,YAAY,qBACzB,MAAM;MACL,IAAI;MACJ,OAAO;MACP,IAAI;MAAA;MAAA;QAAA,OAEY,SAAS,CAAC,CAAC;MAAA;MAAA,IAC3B,KAAK;QAAA,OAAE,KAAK,CAAC,CAAC;MAAA;MACd,OAAO,EAAE,MAAM;QACb,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;MACjC,CAAC;MAAA;QAAA,QAEA,SAAS,CAAC,CAAC,EACX,KAAK,CAAC,MAAM,CAAC,KAAK;MAAA;IAAA,uBAGpB,sBAAsB;MAAA,IACrB,KAAK;QAAA,OAAE,KAAK,CAAC,KAAK;MAAA;MAClB,IAAI,EAAE,IAAI,IAAI,GAAG;MACjB,SAAS,EAAE,SAAS;MAAA,IACpB,WAAW;QAAA,OAAE;UACX,KAAK,EAAE,uCAAuC;UAC9C,WAAW,EAAE,IAAI;UACjB,cAAc,EAAE,OAAO;UACvB,gBAAgB,EAAE,SAAS,CAAC,CAAC;UAC7B,KAAK,EAAE,KAAK,CAAC;QACf,CAAC;MAAA;MAAA,UAEA;IAAK,EAET;EACH,CAAC;EACD,MAAM,WAAW,GAAG,UAAU,CAC5B,MAAyD,CACvD,GACE,CACE;IAAE,KAAK,EAAE,KAAK;IAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;EAAI,CAAC,EACzC;IAAE,KAAK,EAAE,MAAM;IAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;EAAK,CAAC,EAC3C;IAAE,KAAK,EAAE,OAAO;IAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;EAAM,CAAC,EAC7C;IAAE,KAAK,EAAE,MAAM;IAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;EAAK,CAAC,CAC5C,CACD,MAAM,CAAE,MAAM,IAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EACpF,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAEtC,CAAC;EAED,+BAGO,SAAS,CAAC,QAAQ,EAAE,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YACjE,SAAS,CAAC,IAAI,EAAE,kBAAkB,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,YAEjD,KAAK,CAAC,CAAC,8BAEb,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,WAAW,CAAC,CAAC;IAAA;IAAA,UACpB,SAAS,4BAEN,SAAS;EAEb,gCAIN,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,KAAK,CAAC,cAAc;IAAA;IAAA;MAAA,+BACO,KAAK,CAAC,KAAK,CAAC,cAAc;IAAA;EAAA,cAGpE,WAAW,CAAC,CAAC,8BACb,IAAI;IAAA,IACH,IAAI;MAAA,OAAE,gBAAC,KAAK,CAAC,KAAK,CAAC,YAAY,OAAI,KAAK,CAAC,KAAK,CAAC,WAAW;IAAA;IAAA,IAC1D,QAAQ;MAAA,yBACL,gBAAgB;QAAA;QAEf,KAAK,EAAE,MAAO,KAAK,CAAC,IAAI,KAAK,cAAc,GAAG,OAAO,GAAG,KAAK,CAAC,IAAK;QACnE,aAAa,EAAE,MAAM;QAAA,IACrB,SAAS;UAAA,OAAE,gBAAgB,CAAC,CAAC,CAAC,YAAY;QAAA;QAAA,IAC1C,OAAO;UAAA,OAAE,WAAW,CAAC,CAAC;QAAA;MAAA;IAAA;IAAA;MAAA,yBAIzB,iBAAiB;QAAA,IAAC,KAAK;UAAA,OAAE,KAAK,CAAC,KAAK;QAAA;QAAA,IAAE,IAAI;UAAA,OAAE,KAAK,CAAC,IAAI;QAAA;QAAA,IAAE,OAAO;UAAA,OAAE,WAAW,CAAC,CAAC;QAAA;QAAA,IAAE,QAAQ;UAAA,OAAE,KAAK,CAAC,QAAQ;QAAA;MAAA;IAAA;EAAA,cAE1G,KAAK,CAAC,KAAK,CAAC,cAAc,8BAC1B,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;IAAA;IAAA;MAAA,4DAI3B,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,mDACzC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB;IAAA;EAAA,gCAOhD,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,KAAK,CAAC,iBAAiB;IAAA;IAAA;MAAA;IAAA;EAAA;AAK/C,CAAC;;AAED;AACA,MAAM,eAAe,GAAI,KAOxB,IAAkB;EACjB,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,CAAC;EAC9C,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EACjE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,YAAY,CAAyB,IAAI,CAAC;EAChF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC;EAC1D,IAAI,iBAA2C;EAC/C,IAAI,sBAAsB,GAAG,CAAC;EAC9B,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;EACxE,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;EAChG,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;EAClE,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;EAClF,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM;IACnC,MAAM,OAAO,GAAG,IAAI,GAAG,CAA4B,CAAC;IACpD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;MAChC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;MACxC,IAAI,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;IACzC;IACA,OAAO,OAAO;EAChB,CAAC,CAAC;EACF,MAAM,SAAS,GAAG,MAAM;IACtB,cAAc,CAAC,IAAI,CAAC;IACpB,gBAAgB,CAAC,EAAE,CAAC;EACtB,CAAC;EACD,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,OAAe,KAAkB;IACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAc,yBAAyB,CAAC;IAC3G,MAAM,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,cAAc;IAC7C,OAAO,MAAM,GAAG,QAAQ,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;EACzE,CAAC;EACD,MAAM,SAAS,GAAG,CAAC,YAA0B,EAAE,KAAsB,EAAE,WAAuB,KAAK;IACjG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE;IAC9B,iBAAiB,GAAG,CAAC;IACrB,iBAAiB,GAAG,2BAA2B,CAAC;MAC9C,KAAK,EAAE,YAAY;MACnB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK;QAC7B,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;QACxC,OAAO,GAAG,GAAG;UAAE,EAAE,EAAE,KAAK,CAAC,EAAE;UAAE,GAAG,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAAE,CAAC,GAAG,IAAI;MACnF,CAAC;MACD,UAAU,EAAE,MAAM;QAChB,WAAW,CAAC,CAAC;QACb,sBAAsB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;QAChD,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;MAC5B,CAAC;MACD,SAAS,EAAE,cAAc;MACzB,QAAQ,EAAG,IAAI,IAAK;QAClB,SAAS,CAAC,CAAC;QACX,IAAI,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,EAAE,IAAI,CAAC;MAC3E,CAAC;MACD,QAAQ,EAAE;IACZ,CAAC,CAAC;EACJ,CAAC;EACD,SAAS,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;EACtC,iEAImC,wBAAe,KAAK,CAAC,CAAC,CAAC,MAAM,YAAK,KAAK,CAAC,OAAO,gDAAgD,GAAG,uCAEpE,KAAK,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM,YAAG,SAAS,4CAC1G,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,KAAK,CAAC,eAAe;IAAA;IAAA;MAAA,gCACK,gBAAgB,CAAC,CAAC,CAAC,SAAS;IAAA;EAAA,gCAEvE,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,QAAQ,CAAC,CAAC;IAAA;IAAA,UAClB,CAAC,GAAG,EAAE,KAAK,oDAGM,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,YAAG,SAAS,0BAEjH,GAAG;EAEP,gCAGJ,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,CAAC;IAAA;IAAA,UACd,IAAI,wDACqD,KAAK,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM,YAAG,SAAS,4CACtG,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,KAAK,CAAC,eAAe;MAAA;MAAA;QAAA,gCACS,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAG,UAAU,CAAC,CAAC,CAAC;MAAA;IAAA,gCAEtF,GAAG;MAAC,IAAI,EAAE,IAAI;MAAA,UACX,GAAG,IAAK;QACR,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,EAAE,KAAK,CAAC;QAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QAChD,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE;UACnE,OAAO,EAAE,MAAM;UACf,IAAI,EAAE,SAAS;UACf,KAAK,EAAE,MAAM;UACb,GAAG,EAAE,SAAS;UACd,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;QACzB,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM;UAClC,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC;UAC7B,MAAM,aAAa,GAAG,OAAO,IAAI,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;UAChH,MAAM,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC,MAAM,CAAE,KAAK,IAAK,KAAK,CAAC,EAAE,KAAK,aAAa,CAAC,EAAE,CAAC,GAAG,MAAM;UACnG,MAAM,YAAY,GAAG,aAAa,GAAG,CAAC,GAAG,CAAC;UAC1C,OAAO;YACL,OAAO,EAAE,aAAa;YACtB,aAAa,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;YAChD,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,YAAY;UAC3D,CAAC;QACH,CAAC,CAAC;QACF,wEAG2B,MAAM,iDACf,CAAC,SAAS,GAAG,MAAM,YAAG,SAAS,iDAC/B,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,YAAG,SAAS,sDAE1E,WAAW,CAAC,CAAC,EAAE,KAAK,IAAI,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,MAAM,YAAG,SAAS,4CAGnH,IAAI;UAAA,IACH,IAAI;YAAA,OAAE,KAAK,CAAC,KAAK,CAAC,cAAc;UAAA;UAAA,IAChC,QAAQ;YAAA,yBACL,IAAI;cAAC,IAAI,EAAE,IAAI;cAAA,UACZ,OAAO,sBACN,sBAAsB;gBAAA,IACrB,KAAK;kBAAA,OAAE,KAAK,CAAC,KAAK;gBAAA;gBAAA,IAClB,IAAI;kBAAA,OAAE,OAAO,CAAC,CAAC;gBAAA;gBAAA,IACf,WAAW;kBAAA,OAAE;oBACX,KAAK,EAAE,gCAAgC;oBACvC,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC;sBAAE,KAAK,EAAE;oBAAS,CAAC;kBAC/D,CAAC;gBAAA;cAAA;YAEJ;UAAA;UAAA;YAAA;cAKH,IAAI,EAAC,QAAQ;cAAA,SACP,gCAAgC;cAAA,oBACrB,MAAM;cAAA;gBAAA,OACX,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC;kBAAE,KAAK,EAAE;gBAAS,CAAC,CAAC;cAAA;YAAA,SAC7D,oBAAoB,CACtB,KAAK,CAAC,KAAK,EACX,MAAM;cACJ,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;cAC3C,OAAO;gBAAE,KAAK;gBAAE,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;gBAAE,MAAM,EAAE;cAAK,CAAC;YAC/E,CAAC,EACD,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,sBAAsB,EAChD,IACF,CAAC;UAAA;QAAA,gCAIF,IAAI;UAAA,IACH,IAAI;YAAA,OAAE,KAAK,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI;UAAA;UAAA,IACxC,QAAQ;YAAA,oDAGQ,OAAO,GAAG,MAAM,YAAG,SAAS,iDAC1B,CAAC,SAAS,GAAG,MAAM,YAAG,SAAS,0BAE5C,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;UAAA;UAAA,UAI9C,OAAO,sBACN,sBAAsB;YAAA,IACrB,KAAK;cAAA,OAAE,KAAK,CAAC,KAAK;YAAA;YAAA,IAClB,IAAI;cAAA,OAAE,OAAO,CAAC,CAAC;YAAA;YAAA,IACf,WAAW;cAAA,OAAE;gBACX,KAAK,EAAE,gCAAgC;gBACvC,YAAY,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;gBAC1C,cAAc,EAAE,CAAC,SAAS,GAAG,MAAM,GAAG,SAAS;gBAC/C,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC;kBAAE,KAAK,EAAE;gBAAS,CAAC;cAC/D,CAAC;YAAA;YAAA;cAAA,OAEA,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;YAAA;UAAA;QAE/C,gCAEF,IAAI;UAAC,IAAI,EAAE,QAAQ;UAAA,UAChB,KAAK,+CAEF,IAAI;YAAA,IAAC,IAAI;cAAA,OAAE,KAAK,CAAC,CAAC,CAAC,IAAI;YAAA;YAAA,UAAI,IAAI,mBAAe,iDAAwC,IAAI,CAAC,CAAC,SAAE;UAAI,cAClG,KAAK,CAAC,CAAC,CAAC,KAAK;QAEjB,gCAIF,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,UAAU,CAAC,CAAC,CAAC,OAAO;UAAA;UAAA;YAAA,gCAE3B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAE,KAAK,IAAK,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAE,EAAE,CAAC,EAAE,KAAK,IAAI,gBAAgB,CAAC,CAAC,CAAC,SAAS;UAAA;QAAA,gCAG9G,GAAG;UAAA,IAAC,IAAI;YAAA,OAAE,UAAU,CAAC,CAAC,CAAC,aAAa;UAAA;UAAA,UACjC,KAAK,sBACJ,SAAS;YACR,KAAK,EAAE,KAAK;YAAA,IACZ,KAAK;cAAA,OAAE,KAAK,CAAC,KAAK;YAAA;YAAA,IAClB,IAAI;cAAA,OAAE,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;YAAA;YACnC,OAAO;YAAA,IACP,MAAM;cAAA,OAAE,aAAa,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE;YAAA;YAAA,IACpC,iBAAiB;cAAA,OACf,KAAK,CAAC,KAAK,CAAC,WAAW,GACnB,CAAC,YAAY,EAAE,WAAW,KAAK,SAAS,CAAC,YAAY,EAAE,KAAK,EAAE,WAAW,CAAC,GAC1E,SAAS;YAAA;UAAA;QAGlB,gCAEF,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,UAAU,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC;UAAA;UAAA;YAAA,yBACrC,sBAAsB;cAAA,IAAC,KAAK;gBAAA,OAAE,KAAK,CAAC,KAAK;cAAA;cAAE,IAAI,EAAE,IAAI,IAAI,GAAG;cAAE,WAAW,EAAE;gBAAE,KAAK,EAAE;cAA2B,CAAC;cAAA;gBAAA,OAC9G,gBAAgB,CAAC,CAAC,CAAC,kBAAkB,CAAC;kBAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;gBAAY,CAAC,CAAC;cAAA;YAAA;UAAA;QAAA,gCAK9E,GAAG;UAAA,IAAC,IAAI;YAAA,OAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;UAAA;UAAA,UACzB,KAAK,iDAGS,KAAK,CAAC,QAAQ,YAAG,SAAS,mBAAI,KAAK,CAAC,KAAK,IAAI,MAAM,OAAC,qBACzD,KAAK,CAAC,QAAQ,GAAG;YAAE,kBAAkB,EAAE,KAAK,CAAC;UAAS,CAAC,GAAG,SAAS;QAE7E;MAKX;IAAC;EAGN;AAIT,CAAC;;AAED;;AAeA;;AAqBA;AACA,MAAM,cAAc,GAAG,IAAI;AAC3B,MAAM,kBAAkB,GAAG,KAAK;AAChC;AACA,MAAM,mBAAmB,GAAG,CAAC;AAC7B;AACA,MAAM,oBAAoB,GAAG,IAAI;AAEjC,MAAM,YAAY,GAAI,GAAW,IAAa;EAC5C,MAAM,CAAC,IAAI,GAAG,MAAM,EAAE,KAAK,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;EAC9D,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU;AAC5E,CAAC;AAED,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAE,KAAa,KACrD,MAAM,IAAI,KAAK,GAAG;EAAE,KAAK,EAAE,MAAM;EAAE,IAAI,EAAE;AAAM,CAAC,GAAG;EAAE,KAAK,EAAE,KAAK;EAAE,IAAI,EAAE;AAAO,CAAC;;AAEnF;AACA,MAAM,UAAU,GAAI,MAAyB,IAAkB;EAC7D,MAAM,KAAK,GAAG,IAAI,GAAG,CAAoB,CAAC;EAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;IAC1B,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,EAAE,SAAS,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE;IACjE,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;IAC3B,IAAI,IAAI,EAAE;MACR,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM;MAC9D,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM;MAC5D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC;MAClC;IACF;IACA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;MACb,GAAG;MACH,KAAK,EAAE;QAAE,GAAG,KAAK;QAAE,SAAS,EAAE,KAAK,CAAC,eAAe;QAAE,OAAO,EAAE,KAAK,CAAC;MAAc,CAAC;MACnF,QAAQ,EAAE,KAAK,CAAC,MAAM;MACtB,OAAO,EAAE,KAAK,CAAC,MAAM;MACrB,GAAG,EAAE,KAAK;MACV,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC;EACJ;EACA,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,EAC/B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC;EAC5G,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAC7B,CAAC,IAAI,EAAE,KAAK,KACV,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IACpC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAC5E,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CACpD,CAAC;AACH,CAAC;AAED,MAAM,aAAa,GAAG,MAAM;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,SAAS,GAAI,KAYlB,IAAkB;EACjB,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,CAAC;EAC9C,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EACjE,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EAC/D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EACjD,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;EAChH,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;EAC7E;EACA;EACA,MAAM,KAAK,GAAG,UAAU,CACtB,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EACzH,SAAS,EACT;IACE,MAAM,EAAE,CAAC,QAAQ,EAAE,IAAI,KAAK,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC;EACrF,CACF,CAAC;EACD,MAAM,KAAK,GAAG,UAAU,CACtB,MACE,QAAQ,CACL,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CACvD,GAAG,CAAE,IAAI,IAAK,IAAI,CAAC,GAAG,CAAE,GAAG,KAAM;IAAE,GAAG;IAAE,GAAG,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;EAAE,CAAC,CAAC,CAAC,CAAC,EAChG,SAAS,EACT;IAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,IAAI,KAAK,QAAQ,CAAC,GAAG,CAAE,IAAI,IAAK,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAE,IAAI,IAAK,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;EAAE,CACxH,CAAC;EACD,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;EAClE,MAAM,aAAa,GAAI,KAAa,IAAK,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;EACtH,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;EAClF,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;EACxD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,YAAY,CAAW,EAAE,CAAC;EAC9D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;EACjD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC;EAC9C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,YAAY,CAAgB,IAAI,CAAC;EACnE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,YAAY,CAAgB,IAAI,CAAC;EACjE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,YAAY,CAAgB,IAAI,CAAC;EAC7E,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,YAAY,CAAsB,IAAI,CAAC;EACrE;EACA,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EAC3D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC;EACpD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,YAAY,CAAyB,IAAI,CAAC;EAChF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC;EAC1D,MAAM,KAAK,GAAG,IAAI,GAAG,CAAsB,CAAC;EAC5C,IAAI,cAA0C;EAC9C,IAAI,iBAA2C;EAC/C,IAAI,kBAAkB,GAAG,CAAC;EAC1B,IAAI,WAAW,GAAG,OAAO;EACzB,IAAI,OAAsB,GAAG,IAAI;EACjC;EACA,IAAI,UAAyB,GAAG,IAAI;EAEpC,MAAM,SAAS,GAAG,UAAU,CAAC,MAA6B;IACxD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;IAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC;IACxB,OAAO,MAAM,IAAI,KAAK,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,IAAI;EACjE,CAAC,CAAC;EACF,MAAM,QAAQ,GAAI,GAAW,IAAK,QAAQ,CAAC,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;EAC/E,MAAM,OAAO,GAAI,KAAqB,KAA+B;IACnE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;IAC5B,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAC5D,MAAM,EAAE;EACV,CAAC,CAAC;EACF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;EACtE,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM;IACnC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK;IAC/B,MAAM,KAAK,GAAI,KAAoB,IAAK,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAC5G,OAAO,KAAK,GAAG;MAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;MAAE,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE;IAAE,CAAC,GAAG;MAAE,KAAK,EAAE,YAAY,CAAC,CAAC;MAAE,EAAE,EAAE,YAAY,CAAC;IAAE,CAAC;EAClH,CAAC,CAAC;EACF,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;EAC5H,MAAM,MAAM,GAAI,GAAW,IAAK,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE;EACpF;EACA,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM;IAClC,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC;IACzB,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;IAC9C,OAAO,OAAO,CAAC,CAAC,IAAI,MAAM,KAAK,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;EACpE,CAAC,CAAC;EACF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;EACjD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC;EAClD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC;EACrD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EACvD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC;EAChD,IAAI,QAAoC;EACxC,IAAI,cAA0C;EAC9C,IAAI,KAAK,GAAG,KAAK;EACjB,IAAI,UAAU,GAAG,KAAK;EACtB,IAAI,SAAwB,GAAG,IAAI;EACnC,IAAI,KAAK,GAAG,CAAC;EACb,IAAI,UAAU,GAAG,CAAC;EAClB,IAAI,WAAW,GAAG,CAAC;EACnB,IAAI,UAAU,GAAG,CAAC;EAClB,IAAI,UAAU,GAAG,CAAC;EAClB,IAAI,YAAY,GAAG,CAAC;EACpB,IAAI,UAAU,GAAG,CAAC;EAClB;EACA,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,YAAY,CAAgB,IAAI,CAAC;EACvE,IAAI,aAA4B,GAAG,IAAI;EACvC,IAAI,aAA+C,GAAG,IAAI;EAC1D,IAAI,WAAqE,GAAG,IAAI;EAChF,IAAI,cAAc,GAAG,KAAK;EAC1B,IAAI,QAAQ,GAAG,EAAE;EACjB,IAAI,aAAa,GAAG,EAAE;EACtB,IAAI,YAAY,GAAG,EAAE;EACrB,IAAI,UAAU,GAAG,EAAE;EACnB,IAAI,gBAAgB,GAAG,EAAE;EACzB,IAAI,cAAc,GAAG,EAAE;EAEvB,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM;IACtC,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC;IACzB,MAAM,QAAQ,GAAG,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,GAAI,KAAK,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,GAAI,IAAI;IAClG,IAAI,QAAQ,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,QAAQ;IAChE,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,OAAO,CAAC,CAAC;IACjE,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,KAAK;EAC1E,CAAC,CAAC;EACF,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM;IACpC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;IACnF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,CAAC;IAClD,OAAO;MAAE,KAAK;MAAE,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;IAAE,CAAC;EAC3F,CAAC,CAAC;EACF,MAAM,YAAY,GAAG,UAAU,CAC7B,MACE,OAAO,CAAC,CAAC,GACL,iBAAiB,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAC9E;IAAE,KAAK,EAAE,CAAC;IAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,eAAe,GAAG,CAAC;EAAE,CAAC,EAC3E,SAAS,EACT;IAAE,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC;EAAI,CAClF,CAAC;EACD;EACA,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM;IACrC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3D,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;MAC1F,MAAM,GAAG,GAAG,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,SAAS;MACpD,IAAI,GAAG,KAAK,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAE,CAAC;IAC9C;IACA,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;EACzB,CAAC,CAAC;EACF;EACA;EACA,IAAI,OAAuB,GAAG,IAAI;EAClC,cAAc,CACZ,EAAE,CACA,aAAa,EACb,MAAM;IACJ,MAAM,MAAM,GAAG,OAAO,QAAQ,KAAK,WAAW,GAAG,IAAI,GAAG,QAAQ,CAAC,aAAa;IAC9E,OAAO,GAAG,MAAM,IAAI,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI;EAChE,CAAC,EACD;IAAE,KAAK,EAAE;EAAK,CAChB,CACF,CAAC;EACD,YAAY,CACV,EAAE,CACA,aAAa,EACb,MAAM;IACJ,MAAM,OAAO,GAAG,OAAO;IACvB,OAAO,GAAG,IAAI;IACd,IAAI,OAAO,YAAY,WAAW,IAAI,OAAO,CAAC,WAAW,IAAI,QAAQ,CAAC,aAAa,KAAK,OAAO,EAC7F,OAAO,CAAC,KAAK,CAAC;MAAE,aAAa,EAAE;IAAK,CAAC,CAAC;EAC1C,CAAC,EACD;IAAE,KAAK,EAAE;EAAK,CAChB,CACF,CAAC;EACD,MAAM,YAAY,GAAG,MAAsB;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IACzC,OAAO,GAAG,KAAK,SAAS,GACpB,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,GACxC,IAAI,GACJ,MAAM,GACR,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;EACtE,CAAC;EACD,MAAM,aAAa,GAAG,MAAM;IAC1B,IAAI,CAAC,QAAQ,EAAE;IACf,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAc,2BAA2B,CAAC;IAC5E,MAAM,MAAM,GAAG,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC,MAAM;IAClD,IAAI,MAAM,IAAI,MAAM,GAAG,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC;IAC9C,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,YAAY,IAAI,cAAc,EAAE,qBAAqB,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;EAC3G,CAAC;EACD,MAAM,QAAQ,GAAI,IAAyB,IAAK;IAC9C,IAAI,CAAC,KAAK,EAAE;IACZ,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,IAAI,KAAK,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE;IACzD,MAAM,MAAM,GAAG,IAAI,KAAK,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW;IACvF,IACE,CAAC,MAAM,KACN,IAAI,KAAK,SAAS,GAAG,YAAY,KAAK,KAAK,IAAI,gBAAgB,KAAK,KAAK,GAAG,UAAU,KAAK,KAAK,IAAI,cAAc,KAAK,KAAK,CAAC,EAE9H;IACF,IAAI,IAAI,KAAK,SAAS,EAAE,YAAY,GAAG,KAAK,CAAC,KACxC,UAAU,GAAG,KAAK;IACvB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC;IACvB,IACE,MAAM,KAAK,IAAI,KACd,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,UAAU,CAAC,IAC5D,MAAM,IAAI,MAAM,IAChB,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EACjC;MACA,MAAM,OAAO,GAAG,MAAM;QACpB,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,EAAE;QACvF,IAAI,IAAI,KAAK,SAAS,EAAE,gBAAgB,GAAG,KAAK,CAAC,KAC5C,cAAc,GAAG,KAAK;QAC3B,MAAM,MAAM,GAAG,aAAa,MAAM,IAAI,KAAK,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,GAAG,IAAI;QACrF,IAAI,MAAM,EAAE;UACV,aAAa,GAAG,IAAI;UACpB,aAAa,GAAG,IAAI;UACpB,cAAc,CAAC,IAAI,CAAC;UACpB,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;QACjC;QACA,IAAI,IAAI,KAAK,OAAO,IAAI,WAAW,EAAE,OAAO,KAAK,MAAM,CAAC,iBAAiB,EAAE;UACzE,WAAW,GAAG,IAAI;UAClB,cAAc,GAAG,KAAK;UACtB,cAAc,CAAC,IAAI,CAAC;UACpB,KAAK,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC;UACtF,UAAU,CAAC,CAAC;QACd;QACA,IAAI,MAAM,EAAE,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;MAChD,CAAC;MACD,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;IACrD;EACF,CAAC;EACD;EACA,MAAM,aAAa,GAAG,MAAM;IAC1B,IAAI,CAAC,QAAQ,EAAE;IACf,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,SAAS,GAAG,kBAAkB,GAAG,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC;IAC9F,IAAI,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,kBAAkB,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;EACzH,CAAC;EACD,MAAM,aAAa,GAAG,MAAM;IAC1B,IAAI,CAAC,KAAK,EAAE;IACZ,MAAM;MAAE,KAAK;MAAE;IAAK,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC;IACrC,MAAM,KAAK,GAAG,GAAG,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;IACzC,IAAI,QAAQ,KAAK,KAAK,EAAE;IACxB,QAAQ,GAAG,KAAK;IAChB,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC;IAChC,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;MACpC,aAAa,GAAG,KAAK;MACrB,KAAK,CAAC,KAAK,CAAC,mBAAmB,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrF,CAAC,EAAE,GAAG,CAAC;EACT,CAAC;EACD,MAAM,SAAS,GAAG,MAAM;IACtB,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;IAC/B,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,aAAa,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;EACjE,CAAC;EACD,MAAM,UAAU,GAAG,CAAC,SAAS,GAAG,IAAI,KAAK;IACvC,IAAI,CAAC,QAAQ,EAAE;IACf,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS;IAC9B,YAAY,CAAC,GAAG,CAAC;IACjB,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/E,IAAI,IAAI,EAAE;MACR,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;MAC9B,IAAI,IAAI,KAAK,OAAO,CAAC,aAAa,CAAC,EAAE;QACnC,gBAAgB,CAAC,IAAI,CAAC;QACtB,IAAI,SAAS,IAAI,KAAK,EAAE;UACtB,aAAa,CAAC,IAAI,CAAC;UACnB,SAAS,CAAC,CAAC;QACb;MACF;IACF;IACA,aAAa,CAAC,CAAC;EACjB,CAAC;EACD,MAAM,UAAU,GAAG,MAAM;IACvB,IAAI,oBAAoB,CAAC,CAAC,EAAE;IAC5B,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvB,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;IAC/B,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,WAAW,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;EAC7D,CAAC;EACD,MAAM,WAAW,GAAG,MAAM;IACxB,IAAI,CAAC,QAAQ,EAAE;IACf,MAAM,MAAM,GAAG,WAAW;IAC1B,MAAM,GAAG,GAAG,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS;IACtE;IACA,IAAI,MAAM,IAAI,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,IAAI,GAAG,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE;IAC3G,WAAW,GAAG,IAAI;IAClB,IAAI,aAAa,KAAK,CAAC,CAAC,IAAI,aAAa,KAAK,CAAC,EAAE;MAC/C,cAAc,CAAC,IAAI,CAAC;MACpB,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;IACjC;IACA,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;IAC/B,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC;IACjC,UAAU,CAAC,CAAC;IACZ;IACA,IAAI,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3B,IAAI,cAAc,EAAE;MAClB,cAAc,GAAG,KAAK;MACtB,UAAU,CAAC,CAAC;IACd;EACF,CAAC;EACD,MAAM,WAAW,GAAG,MAAM;IACxB,IAAI,CAAC,QAAQ,EAAE;IACf,IAAI,aAAa,KAAK,CAAC,CAAC,IAAI,aAAa,KAAK,CAAC,EAAE;MAC/C,aAAa,GAAG,IAAI;MACpB,aAAa,GAAG,IAAI;MACpB,cAAc,CAAC,IAAI,CAAC;MACpB,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;IACjC;IACA,IAAI,CAAC,WAAW,EAAE;IAClB;IACA,WAAW,GAAG,IAAI;IAClB,cAAc,GAAG,KAAK;IACtB,cAAc,CAAC,IAAI,CAAC;IACpB,KAAK,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC;IACtF,QAAQ,CAAC,QAAQ,CAAC;MAAE,GAAG,EAAE,QAAQ,CAAC,SAAS;MAAE,QAAQ,EAAE;IAAU,CAAC,CAAC;EACrE,CAAC;EACD,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,MAAe,KAAK;IACnD,IAAI,CAAC,QAAQ,EAAE;IACf,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;IAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAClD,IAAI,MAAM,IAAI,CAAC,oBAAoB,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE;MACjG,QAAQ,CAAC,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC,CAAC;MACnF,UAAU,CAAC,CAAC;IACd;IACA,QAAQ,CAAC,QAAQ,CAAC;MAAE,GAAG,EAAE,MAAM;MAAE,QAAQ,EAAE,MAAM,IAAI,CAAC,oBAAoB,CAAC,CAAC,GAAG,QAAQ,GAAG;IAAU,CAAC,CAAC;IACtG,IAAI,GAAG,GAAG,OAAO,GAAG,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;IACxC,IAAI,CAAC,MAAM,IAAI,oBAAoB,CAAC,CAAC,EAAE;MACrC,UAAU,CAAC,CAAC;MACZ,WAAW,CAAC,CAAC;IACf;EACF,CAAC;EACD,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,MAAM,GAAG,IAAI,KAAK;IAC5C,IAAI,CAAC,QAAQ,EAAE;IACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9B,IAAI,CAAC,IAAI,EAAE;IACX;IACA,MAAM,OAAO,GAAG,GAAG,GAAG,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,GAAG,CAAC;IACvE,WAAW,GAAG;MAAE,IAAI;MAAE,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,SAAS,CAAC,CAAC;MAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,iBAAiB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG;IAAK,CAAC;IAC/H,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;IAC/B,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC;IACjC,IAAI,CAAC,OAAO,EACV,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;MACnC,WAAW,GAAG,IAAI;MAClB,cAAc,GAAG,KAAK;IACxB,CAAC,EAAE,IAAI,CAAC;IACV,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,CAAC;IAClD,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;EACzB,CAAC;EACD,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,GAAG,KAAK,KAAK;IACpE,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,KAAK;IAC5D,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC;IAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;IACxD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IAClC,IAAI,KAAK,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,OAAO,KAAK;IAC1D,MAAM,GAAG,GAAG,KAAK,GAAG,SAAS,CAAC,CAAC;IAC/B,KAAK,CAAC,MAAM,GAAI,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,GAAI,GAAG,EAAE,MAAM,CAAC;IAC1F,OAAO,IAAI;EACb,CAAC;EACD,MAAM,SAAS,GAAI,GAAW,IAAK,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;EACjE,MAAM,SAAS,GAAI,SAAiB,IAAK;IACvC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,KAAK;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CACnC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,EACvF,UAAU,CAAC,CACb,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE;MAClB,aAAa,GAAG,IAAI;MACpB,aAAa,GAAG,IAAI;MACpB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK;IAC1C,CAAC,MAAM;MACL;MACA,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC;MAC3B,MAAM,KAAK,GAAG,SAAS,KAAK,CAAC;MAC7B,MAAM,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK;MAC3C,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,GAAG,cAAc,GAAG,gBAAgB,MAAM,IAAI,EACxH,OAAO,KAAK;MACd,aAAa,GAAG,MAAM;MACtB,aAAa,GAAG,SAAS;MACzB,QAAQ,CAAC,KAAK,GAAG,OAAO,GAAG,SAAS,CAAC;IACvC;IACA;IACA,cAAc,CAAC,MAAM,CAAC;IACtB,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;IAC/B;IACA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;MACnC,IAAI,aAAa,KAAK,CAAC,CAAC,IAAI,aAAa,KAAK,CAAC,IAAI,WAAW,EAAE,OAAO,KAAK,MAAM,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC;IAC5H,CAAC,EAAE,IAAI,CAAC;IACR,OAAO,IAAI;EACb,CAAC;EACD,MAAM,OAAO,GAAG,MAAM;IACpB,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,KAAK;IACnE,cAAc,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACxC,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,IAAI;IACtD,cAAc,GAAG,KAAK;IACtB,OAAO,KAAK;EACd,CAAC;EACD,MAAM,SAAS,GAAI,GAAW,IAAK;IACjC,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC;IACzC,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,QAAQ,EAAE;IACpC,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IAC9E,IAAI,GAAG,KAAK,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC;EACnC,CAAC;EACD,MAAM,QAAQ,GAAG,MAAM;IACrB,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE;IACzB;IACA,IAAI,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE;IACxE,SAAS,GAAG,IAAI;IAChB,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK,EACR,KAAK,GAAG,qBAAqB,CAAC,MAAM;MAClC,KAAK,GAAG,CAAC;MACT,UAAU,CAAC,CAAC;MACZ,IAAI,CAAC,QAAQ,EAAE;MACf,aAAa,CAAC,CAAC;IACjB,CAAC,CAAC;EACN,CAAC;EACD;EACA,IAAI,aAAuB,GAAG,EAAE;EAChC,IAAI,WAAmD,GAAG,IAAI;EAC9D,cAAc,CACZ,EAAE,CACA,WAAW,EACV,KAAK,IAAK;IACT,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;IACpC,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC;IAC/B,WAAW,GAAG,IAAI,GAAG;MAAE,IAAI;MAAE,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,OAAO,CAAC,SAAS;IAAE,CAAC,GAAG,IAAI;IAC3E,MAAM,IAAI,GAAG,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,SAAS;IACvD;IACA,IAAI,IAAI,KAAK,SAAS,IAAI,WAAW,EAAE,YAAY,CAAC,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC;EACpG,CAAC,EACD;IAAE,KAAK,EAAE;EAAK,CAChB,CACF,CAAC;EACD,YAAY,CACV,EAAE,CACA,WAAW,EACX,MAAM;IACJ,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;IACpC,aAAa,CAAC,CAAC;IACf,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IACnC,MAAM,GAAG,GAAG,WAAW,GAAG,UAAU,CAAC,aAAa,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,SAAS;IACjF,MAAM,GAAG,GAAG,GAAG,KAAK,SAAS,IAAI,WAAW,GAAG,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC,SAAS;IAChH;IACA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC;IACrD,IAAI,KAAK,EAAE,QAAQ,CAAC,SAAS,GAAG,GAAG;IACnC,IAAI,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE;MAC1C,MAAM,GAAG,GAAG,aAAa;MACzB,aAAa,GAAG,IAAI;MACpB,aAAa,GAAG,IAAI;MACpB,UAAU,GAAG,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,UAAU;MACzD,IAAI,UAAU,KAAK,GAAG,EAAE;QACtB,UAAU,GAAG,IAAI;QACjB,MAAM,CAAC,GAAG,CAAC;QACX,cAAc,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;MACtC;IACF,CAAC,MAAM;MACL,IAAI,aAAa,KAAK,aAAa,KAAK,CAAC,CAAC,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,aAAa,KAAK,CAAC,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC;MACxH;MACA,IAAI,WAAW,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,OAAO,KAAK,KAAK,IAAI,WAAW,CAAC,OAAO,KAAK,MAAM,CAAC,iBAAiB,CAAC,EAAE;QACzH,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,EAAE,WAAW,CAAC,IAAI,CAAC;QAC1D,IAAI,MAAM,KAAK,SAAS,EAAE,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC;MAC9F;IACF;IACA,WAAW,GAAG,IAAI;IAClB,SAAS,GAAG,QAAQ,CAAC,SAAS;IAC9B,UAAU,CAAC,KAAK,CAAC;EACnB,CAAC,EACD;IAAE,KAAK,EAAE;EAAK,CAChB,CACF,CAAC;EACD,YAAY,CACV,EAAE,CACA,OAAO,EACN,GAAG,IAAK;IACP,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;IACrD,IAAI,GAAG,KAAK,aAAa,EAAE;MACzB,IAAI,aAAa,KAAK,MAAM,EAAE;QAC5B,aAAa,GAAG,IAAI;QACpB,aAAa,GAAG,IAAI;MACtB;MACA;IACF;IACA,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,GAAG;IACxC,aAAa,GAAG,aAAa,GAAG,MAAM,GAAG,IAAI;IAC7C,IAAI,aAAa,EAAE;IACnB,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IACrC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC;IAC3H,IAAI,UAAU,KAAK,GAAG,EAAE;MACtB,UAAU,GAAG,IAAI;MACjB,MAAM,CAAC,GAAG,CAAC;MACX,cAAc,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;IACtC;EACF,CAAC,EACD;IAAE,KAAK,EAAE;EAAK,CAChB,CACF,CAAC;EACD,YAAY,CACV,EAAE,CACA,cAAc,EACd,MAAM;IACJ,IAAI,UAAU,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;EACnC,CAAC,EACD;IAAE,KAAK,EAAE;EAAK,CAChB,CACF,CAAC;EACD;EACA,YAAY,CACV,EAAE,CAAC,UAAU,EAAG,MAAM,IAAK;IACzB,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE;IAC1B,UAAU,CAAC,IAAI,CAAC;IAChB,aAAa,CAAC,CAAC;IACf,aAAa,GAAG,UAAU,CAAC,CAAC;IAC5B,MAAM,GAAG,GAAG,UAAU,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC;IACrD,IAAI,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,GAAG,GAAG,GAAG,SAAS,CAAC,CAAC;IAClF;IACA;IACA,UAAU,GAAG,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;IACtF,IAAI,CAAC,UAAU,EAAE;MACf,aAAa,GAAG,OAAO,CAAC,CAAC;MACzB,aAAa,GAAG,OAAO;IACzB;IACA,UAAU,CAAC,KAAK,CAAC;IACjB,SAAS,GAAG,QAAQ,CAAC,SAAS;IAC9B,KAAK,GAAG,IAAI;IACZ,aAAa,CAAC,CAAC;IACf,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC;IACnD,MAAM,MAAM,GACV,OAAO,cAAc,KAAK,WAAW,GACjC,SAAS,GACT,IAAI,cAAc,CAAC,MAAM;MACvB,IAAI,CAAC,QAAQ,EAAE;MACf,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;MACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,GAAG,MAAM;MAC5C,aAAa,CAAC,CAAC;MACf,IAAI,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,EAAE;QACjC,QAAQ,CAAC,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;QAClD,IAAI,WAAW,EAAE;UACf,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC;UAChE,IAAI,MAAM,KAAK,SAAS,EAAE,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC;QAC9F;QACA,SAAS,GAAG,QAAQ,CAAC,SAAS;MAChC;MACA,UAAU,CAAC,KAAK,CAAC;IACnB,CAAC,CAAC;IACR,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;IACzB,MAAM,OAAO,GAAG,QAAQ;IACxB,SAAS,CAAC,MAAM;MACd,MAAM,EAAE,UAAU,CAAC,CAAC;MACpB,OAAO,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC;MACrD,KAAK,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC;MAC3H,IAAI,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC;MACtC,KAAK,GAAG,CAAC;MACT,KAAK,GAAG,KAAK;MACb,UAAU,CAAC,KAAK,CAAC;IACnB,CAAC,CAAC;EACJ,CAAC,CACH,CAAC;EAED,MAAM,WAAW,GAAG,UAAU,CAAC,MAC7B,UAAU,CAAC,CAAC,GACR,aAAa,CAAC,CAAC,CAAC,OAAO,CAAE,GAAG,IAAK,KAAK,CAAC,IAAI,CAAC;IAAE,MAAM,EAAE;EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAC7F,KAAK,CAAC,CAAC,CAAC,OAAO,CAAE,IAAI,IAAK,IAAI,CAAC,GAAG,CAAE,KAAK,IAAK,KAAK,CAAC,GAAG,CAAC,CAC9D,CAAC;EACD,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM;IACjC,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC;IAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC;IACpE,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK;IAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAK,QAAQ,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,IAAK,CAAC,EAC3H,OAAO,QAAQ,CAAC,CAAC;IACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAC7G,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK;IACvD,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC;IAC9B,OACE,IAAI,CAAC,IAAI,CAAE,GAAG,IAAK,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,IACxG,IAAI,CAAC,IAAI,CAAE,GAAG,IAAK,GAAG,IAAI,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,IAC/D,IAAI,CAAC,CAAC,CAAC,IACP,KAAK;EAET,CAAC,CAAC;EACF,MAAM,SAAS,GAAG,UAAU,CAAC,MAA6B;IACxD,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI;IACzB,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAE,KAAK,IAAK,KAAK,CAAC,MAAM,CAAC;IAC7G,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;IAClC,IAAI,CAAC,IAAI,CAAC,CAAC;IACX,OAAO;MAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAE;MAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;IAAG,CAAC;EAC1D,CAAC,CAAC;EACF,MAAM,MAAM,GAAG,CAAC,KAA4B,EAAE,GAAW,KAAK,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC;EACvH;EACA,MAAM,aAAa,GAAI,GAAW,IAAK;IACrC,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC;IACzB,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,OAAO,SAAS;IACnD,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,OAAO,QAAQ;IAC/C,OAAO,GAAG,KAAK,KAAK,CAAC,KAAK,GAAG,OAAO,GAAG,GAAG,KAAK,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,QAAQ;EAC9E,CAAC;EAED,MAAM,MAAM,GAAG,CAAC,MAAqB,EAAE,KAAoB,GAAG,MAAM,KAAK;IACvE,YAAY,CAAC,MAAM,CAAC;IACpB,WAAW,CAAC,KAAK,CAAC;EACpB,CAAC;EACD;EACA,YAAY,CAAC,EAAE,CAAC,SAAS,EAAG,KAAK,IAAK,KAAK,CAAC,KAAK,CAAC,iBAAiB,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE;IAAE,KAAK,EAAE;EAAK,CAAC,CAAC,CAAC;EACvH,SAAS,CAAC,MAAM;IACd,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC;EAC/D,CAAC,CAAC;EACF,YAAY,CAAC,EAAE,CAAC,SAAS,EAAG,KAAK,IAAK,KAAK,CAAC,UAAU,GAAG,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;EAChG,YAAY,CACV,EAAE,CACA,KAAK,EACL,MAAM;IACJ,IAAI,UAAU,CAAC,CAAC,EAAE;IAClB,UAAU,CAAC,IAAI,CAAC;IAChB,MAAM,GAAG,GAAG,UAAU;IACtB,UAAU,GAAG,IAAI;IACjB,IAAI,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;MACtC,MAAM,CAAC,GAAG,CAAC;MACX,cAAc,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC;EACrB,CAAC,EACD;IAAE,KAAK,EAAE;EAAK,CAChB,CACF,CAAC;EAED,MAAM,QAAQ,GAAI,GAAS,IACzB,GAAG,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE;IAClD,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,MAAM;IACb,GAAG,EAAE,SAAS;IACd,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;EACzB,CAAC,CAAC;EACJ,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,SAAS,GAAG,IAAI,KAClD,QAAQ,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE;IAC5D,GAAG,EAAE,SAAS;IACd,IAAI,SAAS,GAAG;MAAE,KAAK,EAAE;IAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;EACzB,CAAC,CAAC;EACJ,MAAM,aAAa,GAAG,CAAC,IAAU,EAAE,QAAiB,KAClD,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE;IAC/C,KAAK,EAAE,MAAM;IACb,GAAG,EAAE,SAAS;IACd,IAAI,QAAQ,GAAG;MAAE,IAAI,EAAE,SAAS;MAAE,MAAM,EAAE;IAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;EACzB,CAAC,CAAC;EACJ;EACA,MAAM,SAAS,GAAI,IAAe,IAAyB;IACzD,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,OAAO,EAAE,OAAO,SAAS;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IACzC,OAAO,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAC;MAC1C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;MACvB,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC;MAC5F,GAAG,EAAE,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,MAAM;IACxF,CAAC,CAAC;EACJ,CAAC;EACD;EACA,MAAM,WAAW,GAAI,IAAe,IAClC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC;EAClG;EACA,MAAM,QAAQ,GAAI,MAAc,KAAM;IACpC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChC,KAAK,EACH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAC3F,SAAS,GACT,QAAQ,CAAC,MAAM,CAAC,CACb,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE;MAAE,KAAK,EAAE,OAAO;MAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IAAS,CAAC,CAAC,CACpG,OAAO,CAAC,KAAK,EAAE,EAAE;EAC5B,CAAC,CAAC;EACF,MAAM,gBAAgB,GAAI,KAAqB,IAAK;IAClD,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,EAC5B,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE;MAC3E,OAAO,EAAE,MAAM;MACf,KAAK,EAAE,MAAM;MACb,GAAG,EAAE,SAAS;MACd,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC;IACJ,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IACrE,OAAO,gBAAgB,CAAC,CAAC,CAAC,oBAAoB,CAAC;MAAE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;MAAE,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;MAAE,KAAK,EAAE;IAAK,CAAC,CAAC;EACpI,CAAC;EACD,MAAM,aAAa,GAAI,IAAkB,IAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;EACpG,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,IAAkB,KAAM,aAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,SAAU;EACxI;EACA,MAAM,WAAW,GAAI,IAAkB,IAAK,aAAa,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC;EAC/H,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,IAAkB,KAAK;IACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IAChC,IAAI,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,KAC3C,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;EACnD,CAAC;EACD;EACA,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC;;EAErG;EACA,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,OAAe,KAAoB;IACzE,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE;MAC/B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;MACvB,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC;MACzC,IAAI,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG;IAC9G;IACA,OAAO,IAAI;EACb,CAAC;EACD,MAAM,SAAS,GAAI,GAAW,IAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;IAAE,aAAa,EAAE;EAAK,CAAC,CAAC;EACjF;EACA,MAAM,cAAc,GAAG,MAAM,cAAc,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,aAAa,KAAK,QAAQ,CAAC,IAAI;EACzH,MAAM,YAAY,GAAG,CAAC,YAAY,GAAG,IAAI,KAAK;IAC5C,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE;IAChB,UAAU,CAAC,IAAI,CAAC;IAChB,eAAe,CAAC,KAAK,CAAC;IACtB,IAAI,YAAY,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;EAC1C,CAAC;EACD,MAAM,gBAAgB,GAAG,MACvB,cAAc,EAAE,aAAa,CAAc,sEAAsE,CAAC,IAAI,IAAI;;EAE5H;AACF;AACA;AACA;EACE,MAAM,UAAU,GAAG,CAAC,KAAqB,EAAE,OAA6C,KAAK;IAC3F,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,EAAE,OAAO,KAAK;IAChD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAI,KAAK,CAAC,IAAI,CAAC;IAC7F,IAAI,CAAC,MAAM,EAAE,OAAO,KAAK;IACzB,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/B,UAAU,CAAC;MAAE,IAAI,EAAE,QAAQ;MAAE,KAAK;MAAE,MAAM;MAAE,MAAM,EAAE,OAAO,CAAC;IAAO,CAAC,CAAC;IACrE,OAAO,IAAI;EACb,CAAC;EACD,MAAM,cAAc,GAAG,MAAM;IAC3B,IAAI,OAAO,CAAC,CAAC,EAAE,IAAI,KAAK,QAAQ,EAAE,OAAO,KAAK;IAC9C,eAAe,CAAC,IAAI,CAAC;IACrB,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC3B,OAAO,IAAI;EACb,CAAC;EACD;AACF;AACA;AACA;EACE,MAAM,aAAa,GAAG,MAAO,UAAU,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,SAAS,CAAC,CAAE;EAC3E;EACA,MAAM,iBAAiB,GAAG,MAAM;IAC9B,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC;IACzB,IAAI,CAAC,KAAK,EAAE;IACZ,IAAI,UAAU,CAAC,KAAK,EAAE;MAAE,MAAM,EAAE;IAAK,CAAC,CAAC,EAAE;IACzC,IAAI,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;EAC5E,CAAC;EACD,OAAO,CAAC,MACN,KAAK,CAAC,QAAQ,GAAG;IACf,WAAW,EAAG,MAAM,IAAK;MACvB,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,IAAI;QAAE,KAAK,EAAE,aAAa,CAAC,CAAC;QAAE,IAAI,EAAE,aAAa,CAAC;MAAE,CAAC;MAC9E,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;MAC/B,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,IAAI;QAAE;MAAO,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAChG,CAAC;IACD,YAAY,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI;MAAE,KAAK,EAAE,aAAa,CAAC,CAAC;MAAE,IAAI,EAAE,aAAa,CAAC;IAAE,CAAC,CAAC;IAC7F,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7D,UAAU;IACV,UAAU,EAAE,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAC3C,QAAQ,EAAE,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;IAC1D,QAAQ,EAAE,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;IAC1C,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,OAAO;IACd,cAAc,EAAE;EAClB,CAAC,CACH,CAAC;EACD,SAAS,CAAC,MAAM,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;EACvC,MAAM,WAAW,GAAI,GAAW,IAAK;IACnC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;IAC7B,IAAI,CAAC,MAAM,EAAE;IACb,eAAe,CAAC,IAAI,CAAC;IACrB,UAAU,CAAC;MAAE,IAAI,EAAE,KAAK;MAAE,MAAM,EAAE,GAAG;MAAE;IAAO,CAAC,CAAC;EAClD,CAAC;EACD;EACA,MAAM,eAAe,GAAG,MAAM;IAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC;IACzB,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC;IACzB,IAAI,CAAC,OAAO,EAAE;IACd,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE;MAAE,MAAM,EAAE;IAAM,CAAC,CAAC,CAAC,KAC3F,YAAY,CAAC,KAAK,CAAC;EAC1B,CAAC;EAED,MAAM,MAAM,GAAI,MAAc,IAAK;IACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,EAAE,OAAO,CAAC;IACrD;IACA,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE;MAC5B,UAAU,GAAG,MAAM;MACnB,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC;IACzC,CAAC,MAAM,IAAI,IAAI,EAAE;MACf,UAAU,GAAG,MAAM;MACnB,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;IACvC;EACF,CAAC;EACD,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,MAAe,KAAK;IAClD,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;MAC9D,MAAM,CAAC,GAAG,CAAC;MACX;IACF;IACA,IAAI,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,KACrD,MAAM,CAAC,GAAG,CAAC;IAChB,IAAI,UAAU,CAAC,CAAC,EAAE;MAChB,SAAS,CAAC,GAAG,CAAC;MACd,cAAc,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC;IACrB,eAAe,CAAC,CAAC;EACnB,CAAC;EACD,MAAM,aAAa,GAAG,CAAC,KAAoB,EAAE,GAAW,KAAK;IAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;IAC5F,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC;IACzB,MAAM,KAAK,GAAG,OAAO,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3D;IACA;IACA,IAAI,KAAK,KAAM,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAM,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,GAAI,CAAC,EAAE;MAC/G,MAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC;MAChC,IAAI,KAAK,EAAE;QACT,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;QAC/C,eAAe,CAAC,IAAI,CAAC;QACrB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb;MACF;IACF;IACA,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;IACzB,MAAM,KAAK,GAAI,IAAY,IAAK,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAC/G,MAAM,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrI,MAAM,MAAM,GACV,KAAK,CAAC,GAAG,KAAK,WAAW,GACrB,KAAK,CAAC,CAAC,CAAC,CAAC,GACT,KAAK,CAAC,GAAG,KAAK,YAAY,GACxB,KAAK,CAAC,CAAC,CAAC,GACR,KAAK,CAAC,GAAG,KAAK,SAAS,GACrB,KAAK,CAAC,CAAC,CAAC,CAAC,GACT,KAAK,CAAC,GAAG,KAAK,WAAW,GACvB,KAAK,CAAC,CAAC,CAAC,GACR,KAAK,CAAC,GAAG,KAAK,MAAM,GAClB,KAAK,CAAC,CAAC,OAAO,CAAC,GACf,KAAK,CAAC,GAAG,KAAK,KAAK,GACjB,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,GAClB,IAAI;IACpB,IAAI,MAAM,EAAE;MACV,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;MACjC;IACF;IACA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,UAAU,EAAE;MACtD,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;MACzH,IAAI,UAAU,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE;QAClC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;QACjC;QACA,SAAS,CAAC,MAAM,CAAC;MACnB,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC;MACrB;IACF;IACA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAK,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAS,EAAE;MAC1F,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC;MAC1C,iBAAiB,CAAC,CAAC;MACnB;IACF;IACA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;MACrB,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC;MAC1C,WAAW,CAAC,GAAG,CAAC;MAChB;IACF;IACA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;MAC1B,IAAI,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,KAC5B,IAAI,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAC9B;MACL,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB;IACF;IACA;IACA,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,KAAK,aAAa,IAAK,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,KAAM,CAAC,EAAE;MACzF,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,KAAK,CAAC,eAAe,CAAC,CAAC;MACvB,OAAO,GAAG,GAAG;MACb,MAAM,IAAI,GAAI,KAAK,CAAC,aAAa,CAAiB,qBAAqB,CAAC,CAAC;MACzE,KAAK,CAAC,aAAa,EAAE,aAAa,CAChC,IAAI,UAAU,CAAC,aAAa,EAAE;QAAE,OAAO,EAAE,IAAI;QAAE,UAAU,EAAE,IAAI;QAAE,OAAO,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE;QAAE,OAAO,EAAE,IAAI,CAAC,GAAG,GAAG;MAAG,CAAC,CACpH,CAAC;IACH;EACF,CAAC;EAED,MAAM,WAAW,GAAI,KAAY,IAC/B,KAAK,CAAC,MAAM,YAAY,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,+DAA+D,CAAC,CAAC;EACnI,MAAM,WAAW,GAAG,CAAC,KAAiB,EAAE,GAAW,KAAK;IACtD,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,kBAAkB,EAAE;IAClE;IACA,IAAI,WAAW,KAAK,OAAO,EAAE;MAC3B,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC;MACzB,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE;MAAK,CAAC,CAAC,EAAE;MAC/F,MAAM,CAAC,GAAG,CAAC;MACX,YAAY,CAAC,KAAK,CAAC;MACnB;IACF;IACA,IAAI,KAAK,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KACvD,MAAM,CAAC,GAAG,CAAC;IAChB,SAAS,CAAC,GAAG,CAAC;IACd,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC;IACzB,IAAI,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE;MAAE,MAAM,EAAE;IAAM,CAAC,CAAC;EACjD,CAAC;EACD,MAAM,iBAAiB,GAAG,CAAC,KAAiB,EAAE,GAAW,KAAK;IAC5D,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,WAAW,KAAK,OAAO,EAAE;IACnD,KAAK,CAAC,cAAc,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC;IAC1C,IAAI,OAAO,CAAC,CAAC,EAAE,IAAI,KAAK,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,KAC9C,iBAAiB,CAAC,CAAC;EAC1B,CAAC;EACD;EACA,MAAM,UAAU,GAAG,CAAC,KAAiB,EAAE,GAAW,KAAK,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG;EACzG,MAAM,iBAAiB,GAAG,CAAC,KAAmB,EAAE,GAAW,KAAK;IAC9D,WAAW,GAAG,KAAK,CAAC,WAAW;IAC/B;IACA,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;IAChC,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;IACjG,iBAAiB,GAAG,CAAC;IACrB,iBAAiB,GAAG,2BAA2B,CAAC;MAC9C,KAAK;MACL,eAAe,EAAE,UAAU,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS;MACpD;MACA,aAAa,EAAE,IAAI;MACnB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC;MAC9D,UAAU,EAAE,MAAM;QAChB,kBAAkB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;QAC5C,YAAY,CAAC,KAAK,CAAC;QACnB,MAAM,CAAC,GAAG,CAAC;MACb,CAAC;MACD,SAAS,EAAG,OAAO,IAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC;MAC5C,QAAQ,EAAG,OAAO,IAAK;QACrB;QACA,kBAAkB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;QAC5C,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC;QACpB,SAAS,CAAC,OAAO,CAAC;QAClB,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC;QAC5C,mBAAmB,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE;UAAE,MAAM,EAAE,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC;QAAK,CAAC,CAAC,CAAC;MACtF,CAAC;MACD,QAAQ,EAAE,MAAM,MAAM,CAAC,GAAG;IAC5B,CAAC,CAAC;EACJ,CAAC;EACD,MAAM,UAAU,GAAG,MAAM;IACvB,YAAY,CAAC,KAAK,CAAC;IACnB,MAAM,GAAG,GAAG,OAAO;IACnB,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC;EACnD,CAAC;EACD;EACA,MAAM,SAAS,GAAG,UAAU,CAAC,MAAsB;IACjD,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE;IACzB,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,IAAI;MAAE,KAAK,EAAE,aAAa,CAAC,CAAC;MAAE,IAAI,EAAE,aAAa,CAAC;IAAE,CAAC;IAC9E,MAAM,GAAG,GACP,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE;MAC1C,WAAW,EAAG,MAAM,IAAK;QACvB,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;UAAE,MAAM,EAAE,IAAI;UAAE;QAAO,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;MAChG;IACF,CAAC,CAAC,IAAI,EAAE;IACV,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAE,IAAI,IAA8C,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC;IACjG,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAE,IAAI,IAA8B,OAAO,IAAI,IAAI,CAAC;IAC/E,MAAM,UAA4B,GAAG,CACnC,IAAI,WAAW,CAAC,KAAK,CAAC,GAClB,CAAC;MAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,eAAe;MAAE,IAAI,EAAE,eAAe;MAAE,MAAM,EAAE,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK;IAAE,CAAC,CAAC,GAClH,EAAE,CAAC,EACP,IAAI,WAAW,CAAC,MAAM,CAAC,GACnB,CAAC;MAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,gBAAgB;MAAE,IAAI,EAAE,qBAAqB;MAAE,MAAM,EAAE,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM;IAAE,CAAC,CAAC,GAC1H,EAAE,CAAC,EACP,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,GAC1B,CAAC;MAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,sBAAsB;MAAE,IAAI,EAAE,SAAS;MAAE,MAAM,EAAE,MAAM,MAAM,CAAC,IAAI;IAAE,CAAC,CAAC,GACnG,EAAE,CAAC,CACR;IACD,MAAM,MAAyB,GAAG,CAAC;MAAE,KAAK,EAAE;IAAQ,CAAC,EAAE,GAAG,QAAQ,EAAE;MAAE,KAAK,EAAE;IAAW,CAAC,CAAC,CAAC,MAAM,CAC9F,OAAO,IAAK,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CACtC,CAAC;IACD;IACA,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM;IAC/B,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC;MAAE,GAAG,KAAK;MAAE,YAAY,EAAE,gBAAgB,CAAC,KAAK;IAAE,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM;EAC/G,CAAC,CAAC;EAEF,MAAM,SAAS,GAAG,MAAM;IACtB,cAAc,CAAC,IAAI,CAAC;IACpB,gBAAgB,CAAC,EAAE,CAAC;EACtB,CAAC;EACD,MAAM,SAAS,GAAG,CAAC,YAA0B,EAAE,IAAe,EAAE,WAAuB,KAAK;IAC1F,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;IACxB,MAAM,OAAO,GAAG,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ;IAC1F,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC;IAChE,iBAAiB,GAAG,CAAC;IACrB,iBAAiB,GAAG,2BAA2B,CAAC;MAC9C,KAAK,EAAE,YAAY;MACnB,eAAe,EAAE,UAAU,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS;MACpD,aAAa,EAAE,IAAI;MACnB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK;QAC7B,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC;QAC3C,IAAI,CAAC,GAAG,EAAE,OAAO,IAAI;QACrB;QACA,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;QAC/F,OAAO;UAAE,EAAE,EAAE,KAAK,CAAC,EAAE;UAAE,KAAK,EAAE,KAAK,CAAC,KAAK;UAAE,GAAG,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAAE,CAAC;MAC1F,CAAC;MACD,UAAU,EAAE,MAAM;QAChB,WAAW,CAAC,CAAC;QACb,kBAAkB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;QAC5C,YAAY,CAAC,KAAK,CAAC;QACnB,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;MAC5B,CAAC;MACD,SAAS,EAAE,cAAc;MACzB,QAAQ,EAAG,IAAI,IAAK;QAClB;QACA,WAAW,CAAC,CAAC;QACb,kBAAkB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;QAC5C,SAAS,CAAC,CAAC;QACX,IAAI,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,EAAE,IAAI,CAAC;MAC3E,CAAC;MACD,QAAQ,EAAE;IACZ,CAAC,CAAC;EACJ,CAAC;;EAED;EACA,IAAI,QAAoC;EACxC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAkB,CAAC;EAC9C,MAAM,OAAO,GAAG,CAAC,OAAgB,EAAE,IAAY,KAAK;IAClD,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC;IACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE;IAC7F,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,YAAY,EAAE,cAAc,GAAG,QAAQ,EAAE,kBAAkB,GAAG,QAAQ,CAAC;IAClH,aAAa,CAAE,OAAO,IAAK;MACzB,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,OAAO,OAAO;MAC9C,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC;MACzB,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ;MACrB,OAAO,IAAI;IACb,CAAC,CAAC;IACF,IAAI,IAAI,KAAK,CAAC,EAAE;MACd,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;MACjC,UAAU,CAAC,OAAO,MAAM,GAAG,QAAQ,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;IAC9D;EACF,CAAC;EACD,MAAM,YAAY,GAAG,CAAC,OAAoB,EAAE,IAAY,KAAK;IAC3D,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;IAC1B,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;IAC3C,QAAQ,KAAK,IAAI,cAAc,CAAE,OAAO,IAAK;MAC3C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;QAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;QACvC,IAAI,KAAK,KAAK,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC;MACvD;IACF,CAAC,CAAC;IACF,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;IACzB,SAAS,CAAC,MAAM,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;EAC/C,CAAC;EACD;EACA,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,IAAY,EAAE,IAAY,KAAK;IAC9D,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC;IACtB,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,KAAK;IACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE;IAC7F,OAAO,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,oBAAoB,GAAG,QAAQ,IAAI,IAAI,GAAG,KAAK;EACzG,CAAC;EAED,YAAY,CAAC,MAAM;IACjB,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC;IACzB,MAAM,OAAO,GAAG,cAAc;IAC9B,IAAI,CAAC,OAAO,EAAE;IACd,IAAI,CAAC,OAAO,EAAE;MACZ,IAAI,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;MAC3D;IACF;IACA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC;IACnC,cAAc,CAAC,MAAM;MACnB,IAAI,OAAO,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;MACnD,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;MAC7C,IAAI,KAAK,EAAE,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC,CAAC;EACJ,CAAC,CAAC;EACF,OAAO,CAAC,MAAM;IACZ,MAAM,UAAU,GAAG,MAAM;MACvB,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC;MACzB,IAAI,OAAO,IAAI,cAAc,EAAE,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC;IACrF,CAAC;IACD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC7C,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC;IACnD,SAAS,CAAC,MAAM;MACd,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,CAAC;MAChD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC;IACxD,CAAC,CAAC;EACJ,CAAC,CAAC;EACF,SAAS,CAAC,MAAM;IACd,iBAAiB,GAAG,CAAC;IACrB,QAAQ,EAAE,UAAU,CAAC,CAAC;EACxB,CAAC,CAAC;EAEF,MAAM,UAAU,GAAI,MAAc,IAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAE,IAAI,IAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;EACtF;EACA,MAAM,SAAS,GAAI,IAAe,KAAM;IACtC,cAAc,EAAG,KAAmB,IAAK;MACvC,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;IAC5D,CAAC;IACD,cAAc,EAAE,MAAM;MACpB,IAAI,UAAU,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,CAAC;IAClD;EACF,CAAC,CAAC;EAEF,MAAM,OAAO,GAAG,CAAC,IAAwC,EAAE,SAAuB,KAAK;IACrF,MAAM,MAAM,GAAG,UAAU,CAAC,MACxB,eAAe,CACb,IAAI,CAAC,CAAC,CAAC,GAAG,CAAE,KAAK,IAAK,KAAK,CAAC,GAAG,CAAC,EAChC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAE,IAAI,KAAM;MAAE,IAAI;MAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ;MAAE,OAAO,EAAE,IAAI,CAAC,OAAO;MAAE,GAAG,EAAE,IAAI,CAAC;IAAI,CAAC,CAAC,CACjG,CACF,CAAC;IACD;IACA,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,mBAAmB;IAC1F,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,EAAE,MAAM,CAAC;IACvD,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;IACtE,uDAImB,UAAU,CAAC,CAAC,YAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,mBAAG,SAAS,kDAEzC,UAAU,CAAC,CAAC,GAAG,kBAAS,CAAC,CAAC,UAAG,CAAC,YAAG,SAAS,4BAClD,UAAU,CAAC,CAAC,GAAG;MAAE,2BAA2B,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAAE,CAAC,GAAG,SAAS,uCACnE,KAAK,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM,YAAG,SAAS,4CAElE,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,KAAK,CAAC,eAAe;MAAA;MAAA;QAAA,kDAElC,IAAI;UAAA,IACH,IAAI;YAAA,OAAE,QAAQ,CAAC,CAAC;UAAA;UAAA,IAChB,QAAQ;YAAA,yBACL,IAAI;cAAA,IAAC,IAAI;gBAAA,OAAE,WAAW,CAAC,MAAM,CAAC;cAAA;cAAA,IAAE,QAAQ;gBAAA,OAAE,UAAU,CAAC,CAAC;cAAA;cAAA;gBAAA,wDAK5C,gBAAgB,CAAC,CAAC,CAAC,sBAAsB,CAAC;kBAAE,IAAI,EAAE,UAAU,CAAC;gBAAE,CAAC,CAAC,wDAC5D,gBAAgB,CAAC,CAAC,CAAC,sBAAsB,CAAC;kBAAE,IAAI,EAAE,UAAU,CAAC;gBAAE,CAAC,CAAC,0BAG5E,UAAU,CAAC,CAAC;cAAA;YAAA;UAAA;UAAA,UAKjB,IAAI,sBACH,sBAAsB;YAAA,IACrB,KAAK;cAAA,OAAE,KAAK,CAAC,KAAK;YAAA;YAAA,IAClB,IAAI;cAAA,OAAE,IAAI,CAAC,CAAC;YAAA;YAAA,IACZ,WAAW;cAAA,OAAE;gBACX,KAAK,EAAE,+BAA+B;gBACtC,QAAQ,EAAE,CAAC,CAAC;gBACZ,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,sBAAsB,CAAC;kBAAE,IAAI,EAAE,UAAU,CAAC;gBAAE,CAAC,CAAC;gBACxE,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,sBAAsB,CAAC;kBAAE,IAAI,EAAE,UAAU,CAAC;gBAAE,CAAC;cAChF,CAAC;YAAA;YAAA;cAAA,OAEA,UAAU,CAAC,CAAC;YAAA;UAAA;QAEhB;MAAA;IAAA,gCAIN,GAAG;MAAA,IAAC,IAAI;QAAA,OAAE,IAAI,CAAC,CAAC;MAAA;MAAA,UACd,CAAC;QAAE,GAAG;QAAE;MAAI,CAAC,EAAE,MAAM,KAAK;QACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC;QAC7C,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QACtH,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC;QAC3B,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAE,GAAG,IAAK,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;QACvF,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;UAAE,GAAG,EAAE,CAAC;UAAE,KAAK,EAAE,EAAE;UAAE,MAAM,EAAE;QAAE,CAAC;QAC5E,kDAUc,SAAS,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,iDAC1B,KAAK,kDACF,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,OAAO,0CAC5C,GAAG,KAAK,QAAQ,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,mEAC9B,GAAG,iDACZ,CAAC,SAAS,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,qDAC7B,UAAU,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,MAAM,YAAG,SAAS,mDAC1D,UAAU,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,YAAG,SAAS,iDAChE,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,YAAG,SAAS,8CAC9D,GAAG,GAAG,QAAQ,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,2DACjC,aAAa,CAAC,GAAG,CAAC,sDACd,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,YAAG,SAAS,8CAchD,UAAU,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,KAAK,GAAG,GAAG,MAAM,YAAG,SAAS,+CACvD,GAAG,KAAK,QAAQ,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,iDACrC,CAAC,SAAS,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,iBAE9C,UAAU,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,YAChC,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,aACrC,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,8BAEhD,IAAI;UAAC,IAAI,EAAE,QAAQ;UAAA,UAChB,KAAK,+CAEF,IAAI;YAAA,IAAC,IAAI;cAAA,OAAE,KAAK,CAAC,CAAC,CAAC,IAAI;YAAA;YAAA,UAAI,IAAI,mBAAe,iDAAwC,IAAI,CAAC,CAAC,SAAE;UAAI,cAClG,KAAK,CAAC,CAAC,CAAC,KAAK;QAEjB,gCASF,GAAG;UAAA,IAAC,IAAI;YAAA,OAAE,IAAI,CAAC,CAAC;UAAA;UAAA,UACb,GAAG,IAAK;YACR,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,WAAW,GAAG,CAAC;YAChD,MAAM,SAAS,GAAG,MAAM;cACtB,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,SAAS;cAC1C,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;cAClF,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS;YACtE,CAAC;YACD,MAAM,OAAO,GAAG,MAAM;cACpB,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,SAAS;cACzC,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;cAClF,OAAO,QAAQ,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS;YAC/F,CAAC;YACD;cAAA,SAEU,6BAA6B;cAAA,IACnC,KAAK;gBAAA,OAAE;kBAAE,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC;kBAAE,oBAAoB,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI;gBAAE,CAAC;cAAA;cAAA,YAC7E,MAAM;cAAA;gBAAA,OACF,UAAU,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,SAAS;cAAA;cAAA;gBAAA,OAClF,GAAG,CAAC,eAAe,GAAG,MAAM,GAAG,SAAS;cAAA;cAAA;gBAAA,OACzC,GAAG,CAAC,cAAc,GAAG,MAAM,GAAG,SAAS;cAAA;YAAA,SACzD,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,8BAEtB,SAAS;cAAA,IACR,KAAK;gBAAA,OAAE,GAAG,CAAC,IAAI,CAAC,KAAK;cAAA;cAAA,IACrB,KAAK;gBAAA,OAAE,KAAK,CAAC,KAAK;cAAA;cAAA,IAClB,IAAI;gBAAA,OAAE,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;cAAA;cAAA,IAC5C,KAAK;gBAAA,OAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;cAAA;cAC1B,OAAO;cACP,GAAG;cAAA,IACH,eAAe;gBAAA,OAAE,GAAG,CAAC,eAAe;cAAA;cAAA,IACpC,cAAc;gBAAA,OAAE,GAAG,CAAC,cAAc;cAAA;cAAA,IAClC,SAAS;gBAAA,OAAE,SAAS,CAAC,CAAC;cAAA;cAAA,IACtB,OAAO;gBAAA,OAAE,OAAO,CAAC,CAAC;cAAA;cAAA,IAClB,MAAM;gBAAA,OAAE,aAAa,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;cAAA;cAAA,IAC7C,iBAAiB;gBAAA,OACf,KAAK,CAAC,KAAK,CAAC,WAAW,GACnB,CAAC,YAAY,EAAE,WAAW,KAAK,SAAS,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,GAC7E,SAAS;cAAA;YAAA;UAKvB;QAAC,gCAEF,GAAG;UAAA,IAAC,IAAI;YAAA,OAAE,IAAI,CAAC,CAAC,CAAC,KAAK;UAAA;UAAA,UACpB,CAAC,IAAI,EAAE,KAAK,2HAGkD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,qCAEtF,SAAS;YAAA,IACR,KAAK;cAAA,OAAE,IAAI,CAAC,KAAK;YAAA;YAAA,IACjB,KAAK;cAAA,OAAE,KAAK,CAAC,KAAK;YAAA;YAAA,IAClB,IAAI;cAAA,OAAE,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;YAAA;YACxC,OAAO;YAAA,IACP,WAAW;cAAA,OAAE,WAAW,CAAC,IAAI,CAAC;YAAA;YAAA,IAC9B,MAAM;cAAA,OAAE,aAAa,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE;YAAA;YAAA,IACzC,iBAAiB;cAAA,OACf,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,YAAY,EAAE,WAAW,KAAK,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,SAAS;YAAA;UAAA;QAItH,gCAEF,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;UAAA;UAAA;YAAA,0EAKM,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,gDAC3D,gBAAgB,CAAC,CAAC,CAAC,oBAAoB,CAAC;cAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM;cAAE;YAAM,CAAC,CAAC,iDAErE,CAAC,MAAM;cACpB,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC;cACzB,OAAO,OAAO,EAAE,IAAI,KAAK,KAAK,IAAI,gBAAO,CAAC,MAAM,qBAAK,GAAG;YAC1D,CAAC,EAAE,CAAC,mBAOyC,gBAAgB,CAAC,CAAC,CAAC,kBAAkB,CAAC;cAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YAAO,CAAC,CAAC,YAC7D,IAAI,CAAC,CAAC,CAAC,MAAM;UAAA;QAAA;MAMxE;IAAC;EAIT,CAAC;EAED,MAAM,UAAU,GAAG,0DAKI,KAAK,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM,YAAG,SAAS,4CAElE,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,KAAK,CAAC,eAAe;IAAA;IAAA;MAAA,gCAElC,gBAAgB,CAAC,CAAC,CAAC,SAAS;IAAA;EAAA,gCAGhC,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,QAAQ,CAAC,CAAC;IAAA;IAAA,UAClB,CAAC,GAAG,EAAE,KAAK,oDACiE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,0BACnH,GAAG;EAEP,IAGN;EAED,MAAM,IAAI,GAAG,4DAIG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,2DAIzB,wBAAe,KAAK,CAAC,CAAC,CAAC,MAAM,6BAAsB,mIAK1E,UAAU,CAAC,CAAC,8BACZ,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,CAAC;IAAA;IAAA,UAAG,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,MAAM,IAAI,EAAE,KAAK;EAAC,IAEnE;EAED,MAAM,aAAa,GAAI,GAAW,IAAK;IACrC,MAAM,IAAI,GAAG,UAAU,CAAC,MACtB,KAAK,CAAC,IAAI,CAAC;MAAE,MAAM,EAAE;IAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK;MACvC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;MACtC,OAAO;QAAE,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC;QAAE,GAAG,EAAE;MAAO,CAAC;IAC/C,CAAC,CACH,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,EAAE,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;EAChE,CAAC;EACD,MAAM,cAAc,GAAG,4DAML,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,iDAIjD,mBAAU,CAAC,CAAC,CAAC,MAAM,UAAG,CAAC,wIAYrC,UAAU,CAAC,CAAC,wDAC2E,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,qCAChH,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,aAAa,CAAC,CAAC;IAAA;IAAA,UAAG;EAAa,iCAG8B,UAAU,CAAC,CAAC,GAAG,MAAM,GAAG,OAAO,mBACxG,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAG1D;EAED,MAAM,OAAO,GAAI,MAAc,IAAK;IAClC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACpC;IACA,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC;IACxC,gCAE+C,QAAQ,CAAC,GAAG,CAAC,8BACvD,IAAI;MAAA,IACH,IAAI;QAAA,OAAE,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;MAAA;MAAA,IAC1B,QAAQ;QAAA,gCAA2C,gBAAgB,CAAC,CAAC,CAAC,sBAAsB;MAAA;MAAA;QAAA,kDAGzF,GAAG;UAAA,IAAC,IAAI;YAAA,OAAE,OAAO,CAAC,CAAC;UAAA;UAAA,UAChB,IAAI,+CAED,SAAS;YAAA,IACR,KAAK;cAAA,OAAE,IAAI,CAAC,KAAK;YAAA;YAAA,IACjB,KAAK;cAAA,OAAE,KAAK,CAAC,KAAK;YAAA;YAAA,IAClB,IAAI;cAAA,OAAE,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;YAAA;YAAA,IACxC,KAAK;cAAA,OAAE,SAAS,CAAC,IAAI,CAAC;YAAA;YACtB,OAAO;YAAA,IACP,GAAG;cAAA,OAAE,IAAI,CAAC,GAAG;YAAA;YAAA,IACb,WAAW;cAAA,OAAE,WAAW,CAAC,IAAI,CAAC;YAAA;UAAA;QAGnC;MAAA;IAAA,gCAKJ,IAAI;MACH,IAAI,EAAE,IAAI;MAAA,IACV,QAAQ;QAAA,yBACL,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,WAAW,CAAC,KAAK,CAAC;UAAA;UAAA;YAAA,yBAC3B,MAAM;cAAC,IAAI;cAAU,OAAO;cAAS,IAAI;cAAM,OAAO,EAAE,MAAM,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;cAAA;gBAAA,yBAEnF,gBAAgB,CAAC,CAAC,CAAC,eAAe;cAAA;YAAA;UAAA;QAAA;MAAA;MAAA,UAKvC,OAAO,sBACN,sBAAsB;QAAA,IACrB,KAAK;UAAA,OAAE,KAAK,CAAC,KAAK;QAAA;QAAA,IAClB,IAAI;UAAA,OAAE,OAAO,CAAC,CAAC;QAAA;QACf,WAAW,EAAE;UAAE,KAAK,EAAE,YAAY;UAAE,cAAc,EAAE,OAAO;UAAE,WAAW,EAAE;QAAK,CAAC;QAAA;UAAA,yBAG/E,gBAAgB,CAAC,CAAC,CAAC,eAAe;QAAA;MAAA;IAEtC,gCAEF,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,KAAK,CAAC,iBAAiB;MAAA;MAAA;QAAA,yBACtC,MAAM;UACL,IAAI;UACJ,OAAO;UACP,IAAI;UACJ,OAAO,EAAE,MAAM;YACb,MAAM,CAAC,MAAM,CAAC;YACd,UAAU,CAAC;cAAE,KAAK,EAAE,MAAM;cAAE,IAAI,EAAE;YAAO,CAAC,EAAE;cAAE,MAAM,EAAE;YAAK,CAAC,CAAC;UAC/D,CAAC;UAAA;YAAA,yBAGA,gBAAgB,CAAC,CAAC,CAAC,gBAAgB;UAAA;QAAA;MAAA;IAAA;EAMhD,CAAC;EAED,MAAM,QAAQ,GAAG,MAAO,UAAU,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,CAAE;EACjE,0BAEK,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,OAAO,CAAC,CAAC;IAAA;IAAA,IAAE,QAAQ;MAAA,OAAE,QAAQ,CAAC,CAAC;IAAA;IAAA;MAAA,yBACxC,WAAW;QAAA,IACV,KAAK;UAAA,OAAE,SAAS,CAAC,CAAC;QAAA;QAAA,IAClB,KAAK;UAAA,OAAE,gBAAgB,CAAC,CAAC,CAAC,wBAAwB;QAAA;QAClD,QAAQ,EAAE,CAAC,CAAC;QACZ,MAAM,EAAE,UAAU;QAAA;QAAA;UAAA,OAGjB,QAAQ,CAAC,CAAC;QAAA;MAAA;IAAA;EAAA,iDAQD,CAAC,MAAM;IACjB,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC;IACzB,IAAI,OAAO,EAAE,IAAI,KAAK,KAAK,EAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtE,gBAAO,gBAAgB,CAAC,CAAC,CAAC,mBAAmB;EAC/C,CAAC,EAAE,CAAC,gDACO,OAAO,CAAC,CAAC,EAAE,IAAI,+CACd,OAAO,CAAC,CAAC,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,4CAW/E,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,OAAO,CAAC,CAAC;IAAA;IAAE,KAAK;IAAA,UACxB,KAAK,IACL,KAAK,CAAC,IAAI,KAAK,QAAQ,GACnB,KAAK,CAAC,KAAK,CAAC,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;MACpD,MAAM,EAAE,KAAK,CAAC,MAAM;MACpB,KAAK,EAAE,MAAM;QACX,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC;MACzD;IACF,CAAC,CAAC,GACF,OAAO,CAAC,KAAK,CAAC,MAAM;EAAC;AAMrC,CAAC;AAED,MAAM,YAAY,GAAI,KAOrB,IAAkB;EACjB,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,CAAC;EAC9C,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EACjE,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC;EAC7D,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE;EAC1D,MAAM,iBAAiB,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC;EAC1D,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE;EACvD,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC;IAAE,MAAM,EAAE,WAAW,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG;EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,aAAa,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;EAClI,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,YAAY,CAAyB,IAAI,CAAC;EAChF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC;EAC1D,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC;EAChE,IAAI,eAA2C;EAC/C,IAAI,QAAoC;EACxC,IAAI,UAAsC;EAC1C,IAAI,OAAmC;EACvC,IAAI,SAAqC;EACzC,IAAI,iBAA6C;EACjD,IAAI,iBAA2C;EAC/C,IAAI,sBAAsB,GAAG,CAAC;EAC9B,MAAM,OAAO,GAAI,KAAW,IAAK,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;EACtD,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;EAChG,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM;IACnC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAkE,CAAC;IAC1F,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;MAChC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI;QAAE,MAAM,EAAE,EAAE;QAAE,KAAK,EAAE;MAAG,CAAC;MACrE,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;MACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;IACnC;IACA,OAAO,OAAO;EAChB,CAAC,CAAC;EACF,MAAM,gBAAgB,GAAG,MAAM;IAC7B,cAAc,CAAC,IAAI,CAAC;IACpB,gBAAgB,CAAC,EAAE,CAAC;EACtB,CAAC;EACD,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,OAAe,KAAkB;IACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAc,yBAAyB,CAAC;IAC3G,MAAM,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,cAAc;IAC7C,OAAO,MAAM,GAAG,QAAQ,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;EACzE,CAAC;EACD,MAAM,WAAW,GAAG,CAAC,OAAe,EAAE,OAAe,KAAkB;IACrE,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE,OAAO,IAAI;IACzC,MAAM,QAAQ,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC;IACrD;IACA,IAAI,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,IAAI;IAC3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK;IACjD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,GAAG,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;IACzG,IAAI,QAAQ,KAAK,IAAI,EAAE,OAAO,IAAI;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CACrB,WAAW,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EACvB,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAC9F,CAAC;IACD,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAG,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;EACrE,CAAC;EACD,MAAM,gBAAgB,GAAI,OAA2E,IAAK;IACxG,iBAAiB,GAAG,CAAC;IACrB,iBAAiB,GAAG,2BAA2B,CAAC,OAAO,CAAC;EAC1D,CAAC;EACD,MAAM,cAAc,GAAG,CAAC,YAA0B,EAAE,KAAsB,EAAE,WAAuB,KAAK;IACtG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE;IAC9B,MAAM,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,eAAe;IACrG,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IACvG,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAC5B,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CACnH,CAAC;IACD,gBAAgB,CAAC;MACf,KAAK,EAAE,YAAY;MACnB,eAAe;MACf,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK;QAC7B,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI;QACzB,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,aAAa,GAAG,MAAM,CAAC;QAClE,OAAO;UAAE,EAAE,EAAE,KAAK,CAAC,EAAE;UAAE,KAAK,EAAE,KAAK,CAAC,KAAK;UAAE,KAAK;UAAE,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC;UAAE,MAAM,EAAE;QAAM,CAAC;MAC9G,CAAC;MACD,UAAU,EAAE,MAAM;QAChB,WAAW,CAAC,CAAC;QACb,sBAAsB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;QAChD,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;MAC5B,CAAC;MACD,SAAS,EAAE,cAAc;MACzB,QAAQ,EAAG,IAAI,IAAK;QAClB,gBAAgB,CAAC,CAAC;QAClB,IAAI,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,EAAE,IAAI,CAAC;MAC3E,CAAC;MACD,QAAQ,EAAE;IACZ,CAAC,CAAC;EACJ,CAAC;EACD,MAAM,eAAe,GAAG,CAAC,YAA0B,EAAE,KAAsB,EAAE,WAAuB,KAAK;IACvG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE;IAC9B,gBAAgB,CAAC;MACf,KAAK,EAAE,YAAY;MACnB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK;QAC7B,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;QACxC,OAAO,GAAG,GAAG;UAAE,EAAE,EAAE,KAAK,CAAC,EAAE;UAAE,KAAK,EAAE,KAAK,CAAC,KAAK;UAAE,GAAG,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QAAE,CAAC,GAAG,IAAI;MACpI,CAAC;MACD,UAAU,EAAE,MAAM;QAChB,WAAW,CAAC,CAAC;QACb,sBAAsB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;QAChD,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;MAC5B,CAAC;MACD,SAAS,EAAE,cAAc;MACzB,QAAQ,EAAG,IAAI,IAAK;QAClB,gBAAgB,CAAC,CAAC;QAClB,IAAI,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,EAAE,IAAI,CAAC;MAC3E,CAAC;MACD,QAAQ,EAAE;IACZ,CAAC,CAAC;EACJ,CAAC;EACD,MAAM,UAAU,GAAI,YAA0B,IAAK;IACjD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,IAAI,YAAY,CAAC,WAAW,KAAK,OAAO,EAAE;IACzE,MAAM,MAAM,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC;IACtE,IAAI,CAAC,MAAM,EAAE;IACb,gBAAgB,CAAC;MACf,KAAK,EAAE,YAAY;MACnB,eAAe;MACf,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK;QAC7B,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI;QACzB,MAAM,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM;QACjD,MAAM,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO;QACnD,OAAO;UAAE,EAAE,EAAE,yBAAyB;UAAE,KAAK;UAAE,GAAG,EAAE,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;UAAE,MAAM,EAAE;QAAM,CAAC;MAC9F,CAAC;MACD,UAAU,EAAE,MAAM;QAChB,sBAAsB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;MAClD,CAAC;MACD,SAAS,EAAE,cAAc;MACzB,QAAQ,EAAG,IAAI,IAAK;QAClB,gBAAgB,CAAC,CAAC;QAClB,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;MACpC,CAAC;MACD,QAAQ,EAAE;IACZ,CAAC,CAAC;EACJ,CAAC;EACD,MAAM,eAAe,GAAG,CAAC,SAAe,EAAE,OAAa,KAAK;IAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IACnD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9D,OAAO;MACL,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAG,CAAC,YAAY,GAAG,aAAa,CAAC,CAAC,IAAI,KAAK,GAAI,GAAG,CAAC;MAClE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAG,CAAC,UAAU,GAAG,YAAY,IAAI,KAAK,GAAI,GAAG;IACpE,CAAC;EACH,CAAC;EACD,MAAM,WAAW,GAAI,KAAsB,IAAK,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;EAC/F,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;EAC/C,MAAM,gBAAgB,GAAI,KAAa,IAAM,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAE;EACtF,MAAM,eAAe,GAAI,OAA2B,IAA4B;IAC9E,IAAI,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE;IAC1B,MAAM,MAAM,GAAG,IAAI,GAAG,CAA8B,CAAC;IACrD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;MAC5B,IAAI,MAAM,CAAC,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;MAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;MAC3C,IAAI,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAErD,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5B,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,YAAY,EAAE,MAAM,CAAC;MACvB,CAAC,CAAC;IACN;IACA,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;EAC7B,CAAC;EACD;EACA;EACA,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM;IACtC,IAAI,MAAM,GAAG,6BAA6B;IAC1C,IAAI,SAAS,CAAC,CAAC,EAAE;MACf,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAE;MAC1B,MAAM,OAAO,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;MAC5G,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAE,MAAM,IAAK,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,KAAK;IAC7E;IACA,OAAO,eAAe,KAAK,CAAC,IAAI,CAAC,MAAM,YAAY,MAAM,SAAS;EACpE,CAAC,CAAC;EACF;EACA;EACA,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAsB,CAAC;EACnD,MAAM,aAAa,GAAI,MAAmB,IAAK;IAC7C,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,UAAU,EAAE;IAChD,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IACvB,KAAK,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE;MACvD,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,EAAE;MACpE,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU;MAClC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC;IACnC;EACF,CAAC;EACD,MAAM,SAAS,GAAI,UAA4B,IAAK;IAClD,IAAI,SAAS,CAAC,CAAC,EAAE;MACf,MAAM,SAAS,GAAG,GAAG,GAAG,UAAU,CAAC,KAAK;MACxC,OAAO;QACL,IAAI,EAAE,QAAQ,UAAU,CAAC,IAAI,GAAG,SAAS,cAAc;QACvD,KAAK,EAAE,QAAQ,SAAS;MAC1B,CAAC;IACH;IACA,MAAM,YAAY,GAAG,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC;IACvD,OAAO;MACL,IAAI,EAAE,GAAG,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,GAAI,UAAU,CAAC,IAAI,GAAG;MAC9F,KAAK,EAAE,GAAG,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,UAAU,CAAC,KAAK,GAAG,YAAY,GAAG,EAAE,GAAG,EAAE;IACnF,CAAC;EACH,CAAC;EACD,MAAM,eAAe,GAAI,GAAS,IAAK;IACrC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG;IACrB,IAAI,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI;IACxG,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;IACzC,IAAI,IAAI,GAAG,aAAa,CAAC,CAAC,IAAI,IAAI,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,IAAI;IACnE,OAAQ,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,GAAI,GAAG;EAC5F,CAAC;EACD,SAAS,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;EACtC,OAAO,CAAC,MAAM;IACZ,qBAAqB,CAAC,MAAM;MAC1B,IAAI,CAAC,eAAe,IAAI,CAAC,iBAAiB,EAAE;MAC5C,MAAM,SAAS,GAAG,iBAAiB,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,GAAG,eAAe,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG;MAC7G;MACA,MAAM,QAAQ,GAAG,oBAAoB,CAAC,CAAC,GAAG,MAAM,GAAG,QAAQ;MAC3D,eAAe,CAAC,QAAQ,CAAC;QAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,SAAS,GAAG,SAAS,CAAC;QAAE;MAAS,CAAC,CAAC;IACjG,CAAC,CAAC;EACJ,CAAC,CAAC;EACF,mDACiD,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM,gEAIrC,cAAc,CAAC,CAAC,qCAIjD,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI;IAAA;IAAA,UACjB,GAAG,IAAK;MACR,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;MACnF,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;MACvD,yBACG,sBAAsB;QAAA,IACrB,KAAK;UAAA,OAAE,KAAK,CAAC,KAAK;QAAA;QAAA,IAClB,IAAI;UAAA,OAAE,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG;QAAA;QAAA,IAClD,WAAW;UAAA,OAAE;YACX,KAAK,EAAE,6BAA6B;YACpC,cAAc,EAAE,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG;UAC1G,CAAC;QAAA;QAAA;UAAA,qDAE2D,KAAK,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,0BACrF,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,sBAE9B,IAAI;YAAC,IAAI,EAAE,QAAQ;YAAA,UAChB,KAAK,+CAEF,IAAI;cAAA,IAAC,IAAI;gBAAA,OAAE,KAAK,CAAC,CAAC,CAAC,IAAI;cAAA;cAAA,UAAI,IAAI,mBAAe,qDAA4C,IAAI,CAAC,CAAC,SAAE;YAAI,cACtG,KAAK,CAAC,CAAC,CAAC,KAAK;UAEjB;QAAA;MAAA;IAIT;EAAC,gCAGJ,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU;IAAA;IAAA;MAAA,6EAMJ,cAAc,CAAC,CAAC,8CAC3B,YAAG,KAAK,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,YAAK,YAGP,KAAK,CAAC,MAAM,CAAC,MAAM,8BACtE,GAAG;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,IAAI;QAAA;QAAA,UACjB,GAAG,IAAK;UACR,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;UACxD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,EAAE;UAC5D,MAAM,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,CAAE,KAAK,IAAK,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;UAChG;YAAA,SAEU,sCAAsC;YAAA,yBACrB,MAAM;YAAA;cAAA,OACf,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS;YAAA;YAAA;cAAA,OAE1E,WAAW,CAAC,CAAC,EAAE,MAAM,IAAI,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS;YAAA;YAAA;cAAA,OAEnG,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG,MAAM,GAAG,SAAS;YAAA;UAAA,SAC7D,oBAAoB,CACtB,KAAK,CAAC,KAAK,EACX,MAAM;YACJ,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;YAC3C,OAAO;cAAE,KAAK;cAAE,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;cAAE,MAAM,EAAE;YAAK,CAAC;UAC/E,CAAC,EACD,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,sBAC5B,CAAC,8CAGE,GAAG;YAAC,IAAI,EAAE,aAAa;YAAA,UAAI,KAAK,6BAAwC,KAAK,CAAC,KAAK;UAAO,gCAC1F,GAAG;YAAA,IAAC,IAAI;cAAA,OAAE,MAAM,CAAC,CAAC;YAAA;YAAA,UACf,KAAK,sBACJ,SAAS;cACR,KAAK,EAAE,KAAK;cAAA,IACZ,KAAK;gBAAA,OAAE,KAAK,CAAC,KAAK;cAAA;cAAA,IAClB,IAAI;gBAAA,OAAE,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;cAAA;cACnC,OAAO;cAAA,IACP,MAAM;gBAAA,OAAE,aAAa,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE;cAAA;cAAA,IACpC,iBAAiB;gBAAA,OACf,KAAK,CAAC,KAAK,CAAC,WAAW,GACnB,CAAC,YAAY,EAAE,WAAW,KAAK,eAAe,CAAC,YAAY,EAAE,KAAK,EAAE,WAAW,CAAC,GAChF,SAAS;cAAA;YAAA;UAGlB;QAKX;MAAC;IAAA;EAAA,2DASsF,cAAc,CAAC,CAAC,oDAIxE,mBAAU,KAAK,CAAC,CAAC,CAAC,MAAM,6BAAsB,8BAE5E,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,CAAC;IAAA;IAAA,UACd,IAAI,4DAMqB,IAAI,GAAG,iBAAiB,CAAC,CAAC,IAAI,IAAI,GAAG,eAAe,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,0BAEjG,GAAG,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EAE9B,gCAGJ,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI;IAAA;IAAA,UACjB,GAAG,IAAK;MACR,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;MACxD,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;MAC3F,sDAGkB,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,YAAG,SAAS,2DAEpD,mBAAU,KAAK,CAAC,CAAC,CAAC,MAAM,6BAAsB,8BAGrE,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,eAAe,CAAC,GAAG,CAAC,KAAK,IAAI;QAAA;QAAA;UAAA,kDACgB,YAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,UAAG;QAAA;MAAA,gCAEvF,GAAG;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,CAAC;QAAA;QAAA,UACd,IAAI;UAAA,SAEI,8BAA8B;UAAA;YAAA,OACb,IAAI,GAAG,iBAAiB,CAAC,CAAC,IAAI,IAAI,GAAG,eAAe,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS;UAAA;UAAA;YAAA,OAChF,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG,MAAM,GAAG,SAAS;UAAA;QAAA,SAC7D,oBAAoB,CACtB,KAAK,CAAC,KAAK,EACX,MAAM;UACJ,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;UAChD,OAAO;YAAE,KAAK;YAAE,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC;YAAE,MAAM,EAAE;UAAM,CAAC;QACtD,CAAC,EACD,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,sBAC5B,CAAC;MAGJ,gCAEF,GAAG;QAAA,IAAC,IAAI;UAAA,OAAE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAE,KAAK,IAAK,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAAA;QAAA,UAClF,KAAK,IAAK;UACV,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC;UACjC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM;UAC/E,oDAGgB,KAAK,GAAG,MAAM,YAAG,SAAS,4CACxB,YAAG,MAAM,CAAC,GAAG,UAAG,mCAAU,YAAG,MAAM,CAAC,MAAM,UAAG,8BAGxD,IAAI;YAAA,IAAC,IAAI;cAAA,OAAE,KAAK,CAAC,KAAK;YAAA;YAAA;cAAA,gCACqB,KAAK,CAAC,KAAK;YAAA;UAAA,cAGpD,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,YAAK,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;QAKhG;MAAC,gCAEF,GAAG;QAAA,IAAC,IAAI;UAAA,OAAE,OAAO,CAAC,CAAC;QAAA;QAAA,UAChB,UAAU,IAAK;UACf,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,IAAI,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,IAAI;UACtF,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK;UAC9B,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC;UACjC,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC;UACtC,MAAM,WAAW,GAAI,YAA0B,IAAK;YAClD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE;YAChC,YAAY,CAAC,cAAc,CAAC,CAAC;YAC7B,YAAY,CAAC,eAAe,CAAC,CAAC;YAC9B,gBAAgB,CAAC;cACf,KAAK,EAAE,YAAY;cACnB,eAAe;cACf,SAAS,EAAE,CAAC;cACZ,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK;gBAC7B,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC;gBAC7C,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI;gBACzB,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,CAAC;gBACxD,MAAM,GAAG,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU;gBACvD,OAAO;kBAAE,EAAE,EAAE,KAAK,CAAC,EAAE;kBAAE,KAAK,EAAE,KAAK,CAAC,KAAK;kBAAE,KAAK,EAAE,KAAK,CAAC,eAAe;kBAAE,GAAG;kBAAE,MAAM,EAAE;gBAAM,CAAC;cAC/F,CAAC;cACD,UAAU,EAAE,MAAM;gBAChB,sBAAsB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;gBAChD,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;cAC5B,CAAC;cACD,SAAS,EAAE,cAAc;cACzB,QAAQ,EAAG,IAAI,IAAK;gBAClB,gBAAgB,CAAC,CAAC;gBAClB,IAAI,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,EAAE,IAAI,CAAC;cAC7E,CAAC;cACD,QAAQ,EAAE;YACZ,CAAC,CAAC;UACJ,CAAC;UACD,kDAIW,YAAG,MAAM,CAAC,GAAG,UAAG,mCACb,YAAG,MAAM,CAAC,MAAM,UAAG,0CACrB,QAAQ,CAAC,IAAI,kDACZ,QAAQ,CAAC,KAAK,oDACV,MAAM,CAAC,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,qCAItC,SAAS;YACR,KAAK,EAAE,KAAK;YAAA,IACZ,KAAK;cAAA,OAAE,KAAK,CAAC,KAAK;YAAA;YAAA,IAClB,IAAI;cAAA,OAAE,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;YAAA;YACnC,IAAI;YAAA,IACJ,MAAM;cAAA,OAAE,aAAa,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE;YAAA;YAAA,IACpC,iBAAiB;cAAA,OACf,KAAK,CAAC,KAAK,CAAC,WAAW,GACnB,CAAC,YAAY,EAAE,WAAW,KAAK,cAAc,CAAC,YAAY,EAAE,KAAK,EAAE,WAAW,CAAC,GAC/E,SAAS;YAAA;UAAA,gCAGhB,IAAI;YAAA,IAAC,IAAI;cAAA,OAAE,KAAK,CAAC,KAAK,CAAC,aAAa;YAAA;YAAA;cAAA,6DAGrB,gBAAgB,CAAC,CAAC,CAAC,WAAW;YAAA;UAAA;QAYtD;MAAC,gCAEF,GAAG;QAAA,IAAC,IAAI;UAAA,OAAE,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAAA;QAAA,UACjC,QAAQ,IAAK;UACb,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,YAAY,CAAC;UAC9E,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE;UAC3C,MAAM,WAAW,GAAG,MAClB,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAE,KAAK,IAAK,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;UAChH,mDAKoB,YAAG,MAAM,CAAC,GAAG,UAAG,mCAAU,YAAG,MAAM,CAAC,MAAM,UAAG,oCACpD,WAAW,CAAC,CAAC,wDACR,gBAAgB,CAAC,CAAC,CAAC,uBAAuB,CAAC;YAAE,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC;UAAO,CAAC,CAAC,0BAMxC,QAAQ,CAAC,YAAY,CAAC,MAAM,sBAEpF,IAAI;YAAA,IAAC,IAAI;cAAA,OAAE,gBAAgB,CAAC,CAAC,KAAK,GAAG;YAAA;YAAA;cAAA,kDAC6B,YAAG,MAAM,CAAC,GAAG,UAAG,YAE5E,UAAU,CAAC,QAAQ,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,YAAK,UAAU,CAAC,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,8BAEvG,GAAG;gBAAA,IAAC,IAAI;kBAAA,OAAE,QAAQ,CAAC,YAAY;gBAAA;gBAAA,UAC5B,KAAK,sBAAM,SAAS;kBAAC,KAAK,EAAE,KAAK;kBAAA,IAAE,KAAK;oBAAA,OAAE,KAAK,CAAC,KAAK;kBAAA;kBAAA,IAAE,IAAI;oBAAA,OAAE,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;kBAAA;kBAAE,OAAO;gBAAA;cAAG;YAAA;UAAA;QAMpH;MAAC;IAIT;EAAC;AAMb,CAAC;AAED,MAAM,QAAQ,GAAI,KAAiF,IAAkB;EACnH,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EACjE,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;EAC5E,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;EAClF,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM;IACnC,MAAM,OAAO,GAAG,IAAI,GAAG,CAA4B,CAAC;IACpD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;MAChC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;MACxC,IAAI,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;IACzC;IACA,OAAO,OAAO;EAChB,CAAC,CAAC;EACF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM;IAC9B,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC;IAC5B,OAAO,KAAK,CAAC,IAAI,CAAC;MAAE,MAAM,EAAE;IAAG,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK;MAC9C,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC;MACnD,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE;UAAE,KAAK,EAAE,MAAM;UAAE,QAAQ,EAAE,OAAO,CAAC;QAAS,CAAC,CAAC;QACrG,IAAI,EAAE,QAAQ,CACX,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CACpC,IAAI,CAAC,CAAC,CACN,GAAG,CAAE,GAAG,IAAK;UACZ,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC;UAChD,OAAO;YACL,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;YACpC,OAAO,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC;YAC3B,OAAO,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC;YAClD,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO;UAC/C,CAAC;QACH,CAAC;MACL,CAAC;IACH,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,kDAEK,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,MAAM,CAAC,CAAC;IAAA;IAAA,UACf,KAAK,6BAEoC,KAAK,CAAC,KAAK,8BAE/C,GAAG;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,IAAI;MAAA;MAAA,UACjB,GAAG,sBACF,sBAAsB;QAAA,IACrB,KAAK;UAAA,OAAE,KAAK,CAAC,KAAK;QAAA;QAAA,IAClB,IAAI;UAAA,OAAE,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG;QAAA;QAAA,IACvD,WAAW;UAAA,OAAE;YACX,KAAK,EAAE,wBAAwB;YAC/B,YAAY,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,GAAG,SAAS;YAC9C,cAAc,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,GAAG;UACzC,CAAC;QAAA;QAAA;UAAA,QAEA,GAAG,CAAC,MAAM,oBACV,IAAI;YAAA,IAAC,IAAI;cAAA,OAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YAAA;YAAA,UACrB,KAAK,iDAGS,KAAK,CAAC,CAAC,CAAC,QAAQ,YAAG,SAAS,mBAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,MAAM,OAAC,wCACxD,GAAG,CAAC,OAAO,GAAG,MAAM,YAAG,SAAS,4BACrC,KAAK,CAAC,CAAC,CAAC,QAAQ,GAAG;cAAE,kBAAkB,EAAE,GAAG,CAAC,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC;YAAS,CAAC,GAAG,SAAS;UAEzG;QAAA;MAAA;IAGN;EAIR;AAIT,CAAC;AAED,MAAM,eAAe,GAAI,KAOxB,IAAkB;EACjB,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EACjE,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;EAClG,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAE,KAAK,IAAK,KAAK,CAAC,MAAM,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC;EAC3G,kDAEK,eAAe;IAAA,IACd,KAAK;MAAA,OAAE;QAAE,GAAG,KAAK,CAAC,KAAK;QAAE,eAAe,EAAE;MAAM,CAAC;IAAA;IAAA,IACjD,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI;IAAA;IAAA,IAChB,GAAG;MAAA,OAAE,KAAK,CAAC,GAAG;IAAA;IAAA,IACd,MAAM;MAAA,OAAE,KAAK,CAAC,MAAM;IAAA;IAAA,IACpB,MAAM;MAAA,OAAE,KAAK,CAAC,MAAM;IAAA;IACpB,OAAO;EAAA,cAIJ,KAAK,CAAC,YAAY,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE;IAClE,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,MAAM;IACb,GAAG,EAAE,SAAS;IACd,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;EACzB,CAAC,CAAC,8BAEH,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,cAAc,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;IAAA;IAAA,IAAE,QAAQ;MAAA,gCAAiD,KAAK,CAAC,MAAM,CAAC,QAAQ;IAAA;IAAA;MAAA,kDAElH,GAAG;QAAA,IAAC,IAAI;UAAA,OAAE,cAAc,CAAC,CAAC;QAAA;QAAA,UACvB,KAAK,sBAAM,SAAS;UAAC,KAAK,EAAE,KAAK;UAAA,IAAE,KAAK;YAAA,OAAE,KAAK,CAAC,KAAK;UAAA;UAAA,IAAE,IAAI;YAAA,OAAE,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;UAAA;QAAA;MAAI;IAAA;EAAA;AAO9G,CAAC;AAED,MAAM,YAAY,GAAI,KAAgC,6BAAkD,KAAK,CAAC,QAAQ,EAAO;AAE7H,MAAM,YAAY,GAA8B,KAAuB,IAAkB;EACvF,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC;EAChC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,CAAC;EAC9C;EACA;EACA,MAAM,eAAe,GAAG,mBAAmB,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC;EACnE,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE;IAC9B,IAAI,UAAU,GAAgB;MAC5B,OAAO,eAAe,CAAC,CAAC;IAC1B;EACF,CAAC,CAAC;EACF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,IAAI,OAAO;EACxC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,IAAI,CAAE,MAAM,IAAK,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK;EAC1F,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC;EAC3D,MAAM,QAAQ,GAAI,KAAoB,IAAK;IACzC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAC7C,OAAO,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;EAClE,CAAC;EACD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;EACnD,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;EACjF,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;EAC9C;EACA,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,YAAY,CAAc,IAAI,CAAC;EAC/D,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;EACtF,MAAM,YAAY,GAAG,UAAU,CAA2B,OAAO;IAC/D,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK;IACvB,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG;IACnB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI;IACrB,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK;IACvB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI;IACrB,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM;IACzB,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,QAAQ;IACrC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ;IAC7B,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI;IACrB,GAAG,KAAK,CAAC;EACX,CAAC,CAAC,CAAC;EACH,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM;IAC5B,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACrC,OAAO,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;EACnD,CAAC,CAAC;EACF,OAAO,CAAC,MAAM;IACZ,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC;IACtD,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,SAAS,CAAC;IACxD,SAAS,CAAC,MAAM;MACd,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC;MAC9B,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,SAAS,CAAC;IAC7D,CAAC,CAAC;EACJ,CAAC,CAAC;;EAEF;EACA,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,YAAY,CAAwB,IAAI,CAAC;EACzE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,YAAY,CAAqB,IAAI,CAAC;EAC5E,MAAM,SAAS,GAAG,MAAO,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,IAAK;EAC5E,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;EACrD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC;EACzF,MAAM,QAAQ,GAAI,GAAW,IAAK,QAAQ,CAAC,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;EAC/E;EACA,MAAM,QAAQ,GAAG,MAAM;IACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK;IAC7C,IAAI,KAAK,EAAE,OAAO,QAAQ,CAAC,KAAK,CAAC;IACjC,OAAO,IAAI,CAAC,CAAC,KAAK,OAAO,GAAI,QAAQ,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,IAAI,GAAI,IAAI;EACpF,CAAC;EACD,MAAM,EAAE,GAAG,CAAC,MAAY,EAAE,QAA0B,KAAK;IACvD,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,GAAG,MAAM,EAAE,QAAQ,CAAC;IAClD,IAAI,IAAI,EAAE,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,KACrC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC;EAC1C,CAAC;EACD,MAAM,IAAI,GAAI,SAAiB,IAAK;IAClC,IAAI,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE;IACtC,EAAE,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;EACpH,CAAC;EACD,MAAM,OAAO,GAAG,MAAM;IACpB,IAAI,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;IAC9B,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;EAC1C,CAAC;EACD,MAAM,MAAM,GAAI,QAAsB,IAAK;IACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC;IACtB,IAAI,GAAG,EAAE;MACP,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC;MACjB;IACF;IACA,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;IAC1C,IAAI,IAAI,EAAE,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,KACrC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC;EACrC,CAAC;EACD,MAAM,OAAO,GAAI,GAAW,IAAK;IAC/B,IAAI,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;IAChC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;EAC3B,CAAC;EACD,MAAM,QAAQ,GAAG,MACf,KAAK,gBAAgB,CAAC;IACpB,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAC5B,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IACvD,QAAQ,EAAG,GAAG,IACZ,QAAQ,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE;MAC5D,OAAO,EAAE,MAAM;MACf,GAAG,EAAE,SAAS;MACd,KAAK,EAAE,MAAM;MACb,IAAI,EAAE,SAAS;MACf,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC;IACJ,IAAI,EAAE;EACR,CAAC,CAAC;EACJ,MAAM,WAAW,GAAG,UAAU,CAAC,MAAyB;IACtD,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAW,MAAM,CAAE,MAAM,IAAK,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9H,MAAM,UAAU,GAAG;MAAE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG;MAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI;MAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK;MAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;IAAK,CAAC;IACjI,OAAO,CACL;MACE,EAAE,EAAE,gBAAgB;MACpB,KAAK,EAAE,IAAI,CAAC,oBAAoB;MAChC,WAAW,EAAE,IAAI,CAAC,+BAA+B;MACjD,QAAQ,EAAE,GAAG;MACb,IAAI,EAAE,sBAAsB;MAC5B,GAAG,EAAE;IACP,CAAC,EACD;MACE,EAAE,EAAE,eAAe;MACnB,KAAK,EAAE,IAAI,CAAC,mBAAmB;MAC/B,WAAW,EAAE,IAAI,CAAC,8BAA8B;MAChD,QAAQ,EAAE,GAAG;MACb,IAAI,EAAE,qBAAqB;MAC3B,GAAG,EAAE,MAAM,IAAI,CAAC,CAAC;IACnB,CAAC,EACD;MACE,EAAE,EAAE,mBAAmB;MACvB,KAAK,EAAE,IAAI,CAAC,uBAAuB;MACnC,WAAW,EAAE,IAAI,CAAC,kCAAkC;MACpD,QAAQ,EAAE,GAAG;MACb,IAAI,EAAE,oBAAoB;MAC1B,GAAG,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;IACpB,CAAC,EACD,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,MAAM;MACnC,EAAE,EAAE,iBAAiB,MAAM,EAAE;MAC7B,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC;QAAE,IAAI,EAAE,UAAU,CAAC,MAAM;MAAE,CAAC,CAAC;MAC7D,WAAW,EAAE,IAAI,CAAC,8BAA8B,CAAC;QAAE,IAAI,EAAE,UAAU,CAAC,MAAM;MAAE,CAAC,CAAC;MAC9E,QAAQ,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;MAC3B,IAAI,EAAE,sBAAsB;MAC5B,GAAG,EAAE,MAAM,MAAM,CAAC,MAAM;IAC1B,CAAC,CAAC,CAAC,EACH;MACE,EAAE,EAAE,eAAe;MACnB,KAAK,EAAE,IAAI,CAAC,mBAAmB;MAC/B,WAAW,EAAE,IAAI,CAAC,8BAA8B;MAChD,QAAQ,EAAE,GAAG;MACb,IAAI,EAAE,uBAAuB;MAC7B,GAAG,EAAE;IACP,CAAC,CACF;EACH,CAAC,CAAC;EACF,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;EACnF;EACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,KAAK,OAAO,KAAK,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC;EAC7E,YAAY,CAAC,MAAM;IACjB,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,GACrB,WAAW,CAAC,CAAC,CAAC,GAAG,CAAE,OAAO,IAAM,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG;MAAE,GAAG,OAAO;MAAE,QAAQ,EAAE;IAAU,CAAC,GAAG,OAAQ,CAAC,GACjI,WAAW,CAAC,CAAC;IACjB,OAAO,CAAC,MAAM,KAAK,CAAC,gBAAgB,GAAG,QAAQ,CAAC,CAAC;EACnD,CAAC,CAAC;EACF;EACA;EACA,IAAI,IAA6B;EACjC,OAAO,CAAC,MAAM;IACZ,MAAM,SAAS,GAAI,KAAoB,IAAK;MAC1C,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,EAAE;MAC7D,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;MACrH,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,MAAM,CAAC,CAAC,IAAI,QAAQ,CAAC,aAAa,CAAC,kDAAkD,CAAC,EAAE;MACvH,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;MAC3B,MAAM,UAAU,GAAG,MAAM,YAAY,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;MAC/E,IAAI,CAAC,UAAU,IAAI,MAAM,KAAK,QAAQ,CAAC,IAAI,IAAI,MAAM,KAAK,QAAQ,CAAC,eAAe,EAAE;MACpF,IACE,MAAM,YAAY,OAAO,IACzB,MAAM,CAAC,OAAO,CAAC,mHAAmH,CAAC,EAEnI;MACF,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC;IAC7C,SAAS,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;EACnE,CAAC,CAAC;EACF,MAAM,SAA4B,GAAG;IACnC,QAAQ;IACR,SAAS;IACT,QAAQ,EAAE,MAAO,KAAK,CAAC,gBAAgB,GAAG,WAAW,CAAC,CAAC,GAAG,EAAG;IAC7D;IACA,aAAa,EAAE,MACb,KAAK,qBAAqB,CACxB,WAAW,CAAC,CAAC,EACb,gBAAgB,CAAC,CAAC,EAClB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG;MAAE,eAAe,EAAE,YAAY;MAAE,mBAAmB,EAAE;IAAY,CACpF;EACJ,CAAC;EACD,MAAM,UAA8B,GAAG;IACrC,WAAW,EAAG,MAAM,IAAK;MACvB,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC;MACzB,IAAI,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAC7C,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC;IACzC,CAAC;IACD,YAAY,EAAE,MAAM;MAClB,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;MACrF,IAAI,MAAM,EAAE,OAAO,MAAM;MACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;MAC1C,OAAO;QAAE,KAAK;QAAE,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;QAAE,MAAM,EAAE;MAAK,CAAC;IAC/E,CAAC;IACD,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM;EACpF,CAAC;EACD,OAAO,CAAC,MAAM,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC;EAC7C,MAAM,SAAS,GAAI,YAA4B,KAAM;IACnD,KAAK;IACL,IAAI,EAAE,YAAY;IAClB,IAAI,IAAI,GAAG;MACT,OAAO,IAAI,CAAC,CAAC;IACf,CAAC;IACD,IAAI,GAAG,GAAG;MACR,OAAO,GAAG,CAAC,CAAC;IACd,CAAC;IACD,IAAI,MAAM,GAAG;MACX,OAAO,KAAK,CAAC,MAAM;IACrB,CAAC;IACD,IAAI,MAAM,GAAG;MACX,OAAO,YAAY,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,GAAG;MACV,OAAO,KAAK,CAAC,QAAQ,IAAK,CAAC,CAAC,EAAE,EAAE,CAAW;IAC7C,CAAC;IACD,QAAQ,EAAE;EACZ,CAAC,CAAC;EAEF,uBAC6B,iCAAwB,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,8BAAa,KAAK,CAAC,iBAAiB,GAAG,MAAM,YAAG,SAAS,4CAC5H,cAAc;IAAA,IACb,IAAI;MAAA,OAAE,IAAI,CAAC,CAAC;IAAA;IAAA,IACZ,IAAI;MAAA,OAAE,IAAI,CAAC,CAAC;IAAA;IAAA,IACZ,MAAM;MAAA,OAAE,YAAY,CAAC,CAAC;IAAA;IACtB,KAAK,EAAE,KAAK;IAAA,IACZ,QAAQ;MAAA,OAAE,oBAAI,CAAC,CAAC,KAAK,OAAO,IAAI,QAAQ,CAAC,CAAC,OAAG,QAAQ,CAAC,CAAC,GAAG,IAAI;IAAA;IAC9D,GAAG,EAAE;EAAS,gCAEf,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,CAAC,MAAM,CAAC,CAAC;IAAA;IAAA,IAAE,QAAQ;MAAA,yBAAG,YAAY;QAAA;UAAA,OAAE,KAAK,CAAC,QAAQ;QAAA;MAAA;IAAA;IAAA;MAAA,yBAC3D,IAAI;QAAA,IACH,IAAI;UAAA,OAAE,IAAI,CAAC,CAAC,KAAK,OAAO;QAAA;QAAA,IACxB,QAAQ;UAAA,yBACL,YAAY;YAAA;cAAA,yBACV,SAAS;gBACR,KAAK,EAAE,KAAK;gBAAA,IACZ,IAAI;kBAAA,OAAE,IAAI,CAAC,CAAC;gBAAA;gBAAA,IACZ,GAAG;kBAAA,OAAE,GAAG,CAAC,CAAC;gBAAA;gBAAA,IACV,MAAM;kBAAA,OAAE,gBAAgB,CAAC,CAAC;gBAAA;gBAAA,IAC1B,MAAM;kBAAA,OAAE,YAAY,CAAC,CAAC;gBAAA;gBACtB,UAAU,EAAE,WAAW;gBACvB,QAAQ,EAAG,IAAI,IAAK,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;gBACpC,QAAQ,EAAE;cAAc;YAAA;UAAA;QAAA;QAAA;UAAA,yBAK7B,IAAI;YAAA,IACH,IAAI;cAAA,OAAE,IAAI,CAAC,CAAC,KAAK,MAAM;YAAA;YAAA,IACvB,QAAQ;cAAA,yBACL,YAAY;gBAAA;kBAAA,yBACV,QAAQ;oBAAC,KAAK,EAAE,KAAK;oBAAA,IAAE,IAAI;sBAAA,OAAE,IAAI,CAAC,CAAC;oBAAA;oBAAA,IAAE,GAAG;sBAAA,OAAE,GAAG,CAAC,CAAC;oBAAA;oBAAA,IAAE,MAAM;sBAAA,OAAE,gBAAgB,CAAC,CAAC;oBAAA;kBAAA;gBAAA;cAAA;YAAA;YAAA;cAAA,yBAI/E,IAAI;gBAAA,IACH,IAAI;kBAAA,OAAE,IAAI,CAAC,CAAC,KAAK,cAAc;gBAAA;gBAAA,IAC/B,QAAQ;kBAAA,yBACL,YAAY;oBAAA;sBAAA,yBACV,eAAe;wBACd,KAAK,EAAE,KAAK;wBAAA,IACZ,IAAI;0BAAA,OAAE,IAAI,CAAC,CAAC;wBAAA;wBAAA,IACZ,GAAG;0BAAA,OAAE,GAAG,CAAC,CAAC;wBAAA;wBAAA,IACV,YAAY;0BAAA,OAAE,YAAY,CAAC,CAAC;wBAAA;wBAAA,IAC5B,MAAM;0BAAA,OAAE,gBAAgB,CAAC,CAAC;wBAAA;wBAAA,IAC1B,MAAM;0BAAA,OAAE,YAAY,CAAC,CAAC;wBAAA;sBAAA;oBAAA;kBAAA;gBAAA;gBAAA;kBAAA,yBAK3B,IAAI;oBAAA,IACH,IAAI;sBAAA,OAAE,QAAQ,CAAC,CAAC;oBAAA;oBAAA,IAChB,QAAQ;sBAAA,yBACL,YAAY;wBAAC,KAAK,EAAE,KAAK;wBAAA,IAAE,IAAI;0BAAA,OAAE,IAAI,CAAC,CAAC;wBAAA;wBAAA,IAAE,GAAG;0BAAA,OAAE,GAAG,CAAC,CAAC;wBAAA;wBAAA,IAAE,MAAM;0BAAA,OAAE,gBAAgB,CAAC,CAAC;wBAAA;wBAAA,IAAE,MAAM;0BAAA,OAAE,YAAY,CAAC,CAAC;wBAAA;wBAAA,IAAE,IAAI;0BAAA,OAAE,IAAI,CAAC,CAAC;wBAAA;sBAAA;oBAAA;oBAAA;sBAAA,yBAGvH,IAAI;wBAAA,IAAC,IAAI;0BAAA,OAAE,IAAI,CAAC,CAAC,KAAK,KAAK;wBAAA;wBAAA,IAAE,QAAQ;0BAAA,yBAAG,gBAAgB,qBAAK,SAAS,CAAC,MAAM,CAAC;wBAAA;wBAAA;0BAAA,yBAC5E,eAAe,qBAAK,SAAS,CAAC,KAAK,CAAC;wBAAA;sBAAA;oBAAA;kBAAA;gBAAA;cAAA;YAAA;UAAA;QAAA;MAAA;IAAA;EAAA;AASvD,CAAC;;AAED;AACA,MAAM,SAAS,GAAI,QAAgB,IAAK,CAAC,0BAA0B,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAElF;;AAGA,SAAS,QAAQ,CAAC,KAA4B,EAAe;EAC3D,OAAO,YAAY,CAAC,KAAK,CAAC;AAC5B;AAEA,eAAe,QAAQ","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["content/Calendar.tsx"],"sourcesContent":["import { Link, type LinkNavigateEvent } from \"@k2b/ssr/nav\";\nimport { dates as calendar, type DateContext } from \"@k2b/stdlib\";\nimport type { JSX, ParentProps } from \"solid-js\";\nimport { createComputed, createEffect, createMemo, createSignal, For, mergeProps, on, onCleanup, onMount, Show, untrack } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport type { DropdownAction, DropdownChoice, DropdownItem, DropdownSection } from \"../actions/Dropdown\";\nimport { GestureMenu } from \"../actions/GestureMenu\";\nimport SegmentedControl from \"../actions/SegmentedControl\";\nimport { useDateConfigLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { isWeekendColumn, isWeekendKey } from \"../intl/weekend\";\nimport { prefersReducedMotion } from \"../motion\";\nimport { CalendarDayView } from \"./CalendarDayView\";\nimport { CalendarWeekView } from \"./CalendarWeekView\";\nimport { addDayKeys } from \"./calendar-days\";\nimport { openCalendarGoTo, openCalendarShortcuts } from \"./calendar-dialogs\";\nimport { layoutCalendarIntervals } from \"./calendar-event-layout\";\nimport { useCalendarMessages } from \"./calendar-messages\";\nimport { fitMonthWeek, layoutMonthWeek, monthLaneCapacity } from \"./calendar-month-layout\";\nimport {\n MONTH_ROW_BLOCK,\n MONTH_ROWS_IN_VIEW,\n monthFocusRow,\n monthOfWeek,\n monthRenderWindow,\n monthRevealTop,\n monthRowOf,\n monthTodayDirection,\n monthVisibleRows,\n monthWeekKeys,\n} from \"./calendar-month-scroll\";\nimport { afterPointerRelease, calendarDayIndexAtPoint, calendarMinuteAtPoint, startCalendarPointerSession } from \"./calendar-pointer\";\nimport {\n type CalendarOwner,\n EventChip,\n eventHref,\n followCalendarHref,\n formatTime,\n type NormalizedEvent,\n ownerDateConfig,\n parseDate,\n placeCalendarPopover,\n textWidth,\n validDate,\n} from \"./calendar-shared\";\nimport { compactGermanDate, type TimeViewHandle, type TodayDirection } from \"./calendar-time-view\";\n\nexport type CalendarView = \"day\" | \"week\" | \"month\" | \"year\" | \"mobile-month\";\n\nexport type CalendarEventColor = \"blue\" | \"emerald\" | \"amber\" | \"red\" | \"violet\" | \"cyan\" | \"zinc\";\n\nexport type CalendarEvent = {\n id: string;\n title: string;\n start: Date | string;\n end?: Date | string;\n allDay?: boolean;\n color?: CalendarEventColor;\n colorHex?: string;\n href?: string;\n dataSpaceItemId?: string;\n meta?: string;\n description?: string;\n /**\n * `marker` draws a point in time, such as a deadline, as a colored marker\n * beside its title instead of a filled band.\n */\n display?: \"event\" | \"background\" | \"marker\";\n /**\n * Short text the accessible name adds after the title and time, for state the event shows only visually, such as\n * a priority flag in custom `renderEvent` content.\n */\n accessibleDetail?: string;\n /**\n * Day and week views with `dayHours`: the state of the entry's checkbox, such as a to-do's. Leave it out for entries\n * without one. With `onEventCheck` the reader can change it.\n */\n checked?: boolean;\n location?: string;\n calendarName?: string;\n attendees?: CalendarAttendee[];\n resources?: CalendarResource[];\n recurrence?: CalendarRecurrence;\n};\n\nexport type CalendarAttendee = {\n name: string;\n status?: \"accepted\" | \"declined\" | \"tentative\" | \"needs-action\";\n};\n\nexport type CalendarResource = {\n name: string;\n kind?: \"room\" | \"equipment\" | \"link\" | \"other\";\n};\n\nexport type CalendarRecurrence = {\n rrule: string;\n exdate?: Array<Date | string>;\n recurrenceId?: Date | string;\n};\n\nexport type CalendarLabels = Partial<{\n today: string;\n day: string;\n week: string;\n month: string;\n year: string;\n allDay: string;\n noEvents: string;\n previous: string;\n next: string;\n}>;\n\nexport type CalendarEventRenderContext = {\n compact: boolean;\n fill: boolean;\n start: Date;\n end: Date;\n allDay: boolean;\n durationHours: number;\n timeLabel: string;\n /** Month view: the start time to show before the title of a one-day timed entry; absent on bars and elsewhere. */\n leadingTime?: string;\n /** Day and week views: what is left of the event that is running now, such as \"27 min left\". */\n remaining?: string;\n /** Day and week views: the calendar draws the event's checkbox beside this content, so leave yours out. */\n checkbox?: boolean;\n /**\n * Day and week views with `dayHours`: the event is a band, a deadline, or an all-day entry of a timeline. Render the\n * title in `k2b-calendar-event__title` and the time in `k2b-calendar-event__meta` there, so the views size them.\n */\n timeline?: boolean;\n};\n\n/** The days a host loaded events for, from the first day `from` up to `to`, both `YYYY-MM-DD` or dates. */\nexport type CalendarRange = { from: Date | string; to: Date | string };\n\n/**\n * An action the calendar offers for keyboard shortcuts, the command palette, and its shortcuts dialog. The calendar\n * publishes its own through `onCommandsChange`; the host registers them with its shortcut dispatcher.\n */\nexport type CalendarCommand = {\n /** Unique on the page, such as `calendar.today`. */\n id: string;\n label: string;\n /** One key combination: a key such as `h`, or modifiers and a key such as `shift+n`. */\n shortcut?: string;\n /** One sentence for the command palette and the help, such as \"Show today in the calendar\". */\n description?: string;\n icon?: string;\n run: () => void;\n};\n\n/** An entry dragged into the day or week view from outside the calendar, such as a task from a list below it. */\nexport type CalendarExternalDrag = {\n title: string;\n color?: CalendarEventColor;\n colorHex?: string;\n /** The length it gets in the calendar. */\n minutes: number;\n};\n\n/** Actions of the calendar that the host starts from its own controls. */\nexport type CalendarController = {\n /**\n * Opens the quick create at the selection, or where a new entry fits: today at the next full hour while today is\n * shown, else at 09:00 of the first shown day. `create` reaches `renderQuickCreate` as in the month view's menu.\n */\n quickCreate: (create?: string) => void;\n /** The time a new entry takes, by the rule of `quickCreate`; all-day for days selected in the month view. */\n createTarget: () => CalendarEventTimeChange;\n /**\n * Day and week views with `dayHours`: follows a pointer that pressed an entry outside the calendar, shows where it\n * would go and whether it fits the free time there, and calls `onDrop` with the time where it is released. Escape\n * or a release outside the days cancels.\n */\n dragIn: (event: PointerEvent, item: CalendarExternalDrag, onDrop: (slot: CalendarEventTimeChange) => void) => void;\n};\n\n/** A view the application adds to the switcher; the calendar shows its header and toolbar, the application the body. */\nexport type CalendarCustomView<V extends string = string> = {\n value: V;\n label: string;\n /** Days the previous and next buttons and keys move, such as 14 for a two-week list. Defaults to one day. */\n days?: number;\n};\n\nexport type CalendarProps<V extends string = never> = {\n date: Date | string;\n events: CalendarEvent[];\n view?: CalendarView | V;\n views?: CalendarView[];\n /**\n * `false` leaves the view switcher out of the toolbar, for a host that shows the views elsewhere, such as tabs in\n * its page head. The view commands stay.\n */\n viewSwitcher?: boolean;\n /** Views after the built-in ones. While one is active, `children` is the body and the header pages by day. */\n customViews?: CalendarCustomView<V>[];\n /** The body of the active custom view. */\n children?: JSX.Element;\n labels?: CalendarLabels;\n /** stdlib date context used for timezone-aware rendering and calendar math. */\n dateConfig?: DateContext;\n /** Convenience override for dateConfig.timeZone. */\n timeZone?: string;\n firstDayOfWeek?: 0 | 1;\n withWeekNumbers?: boolean;\n startHour?: number;\n endHour?: number;\n /**\n * Waking hours `[start, end]` of the day and week views, such as `[6, 22]`. With them, a day runs from `start` to\n * `start` of the next day, so the night after `end` belongs to the day before. The day view becomes one stream of\n * days down the page and the week view a strip of days to scroll sideways; nights fold unless an entry lies in them.\n * `startHour`, `endHour`, and the visible hours do not apply then.\n */\n dayHours?: readonly [start: number, end: number];\n /** Loaded days of the continuous month view and the day/week views with `dayHours`, with an exclusive end. */\n range?: CalendarRange;\n /**\n * Called once when the reader nears the first loaded day, again once `range.from` moved.\n * May return a promise that settles once the range has grown; when it settles without moving that end, the\n * continuous month treats the end as reached, and Next/Previous past it go through the host's navigation.\n */\n onLoadEarlier?: () => unknown;\n /**\n * Called once when the reader nears the last loaded day, again once `range.to` moved.\n * May return a promise that settles once the range has grown; when it settles without moving that end, the\n * continuous month treats the end as reached, and Next/Previous past it go through the host's navigation.\n */\n onLoadLater?: () => unknown;\n /**\n * Scrolling views: the first and last visible day, and the focus date, after positioning and when they change.\n * Day/week views use their first day as focus. Continuous month uses the first selected day inside its focus month,\n * else the host's `date` when in that month, else today when in that month, else its first. Month rows count as\n * visible when more than half is on screen.\n */\n onVisibleDateChange?: (date: Date, last: Date, focus: Date) => void;\n visibleStartHour?: number;\n visibleEndHour?: number;\n allDayMaxHeightRem?: number;\n hideAllDay?: boolean;\n selectedDate?: Date | string;\n selectedEventId?: string;\n dayBadges?: Record<string, CalendarDayBadge>;\n // Methods, not function properties: props for custom views stay assignable to the plain props the overloads expose.\n getViewHref?(view: CalendarView | V): string;\n getDateHref?(date: Date, view: CalendarView | V): string;\n getEventHref?: (event: CalendarEvent) => string | undefined;\n renderEvent?: (event: CalendarEvent, context: CalendarEventRenderContext) => JSX.Element;\n /** Progressively enhance canonical calendar links after the app has loaded their target state. */\n onNavigate?: (event: LinkNavigateEvent) => void | Promise<void>;\n /** Progressively enhance canonical links without a document view transition. */\n onNavigateHref?: (href: string) => void;\n /** Optionally preload the target behind a canonical calendar link. */\n onPrefetch?: (href: string) => void;\n navigationPending?: boolean;\n onViewChange?(view: CalendarView | V): void;\n onDateChange?(date: Date, view: CalendarView | V): void;\n /** One activation contract for pointer and keyboard input. */\n onEventActivate?: (event: CalendarEvent) => void;\n /** Pointer gesture used for activation. Keyboard activation is always immediate. */\n eventActivation?: \"single\" | \"double\";\n onEventDrop?: (event: CalendarEvent, next: CalendarEventTimeChange) => void;\n onEventResize?: (event: CalendarEvent, next: CalendarEventTimeChange) => void;\n onSlotActivate?: (slot: CalendarEventTimeChange) => void;\n /**\n * Changes the checkbox of an entry with `checked`; leave it out when the reader may not change it. The box shows the\n * change at once; a returned promise that rejects puts it back.\n */\n onEventCheck?: (event: CalendarEvent, checked: boolean) => void | Promise<unknown>;\n /** Pointer gesture used for empty slots. Keyboard activation is always immediate. */\n slotActivation?: \"single\" | \"double\";\n /**\n * Month view: the selected days changed. `null` when no day is selected, for example after paging to another month\n * or switching to another view.\n */\n onSelectionChange?: (range: CalendarEventTimeChange | null) => void;\n /**\n * Month view: the application's entries of the menu that a right-click, Shift+F10, or a long press opens on a day or\n * on the selected days. The calendar heads them with the days and adds Open day, Open week, and Clear selection;\n * without this prop the menu has only those. `quickCreate` opens the quick create at the days, passing `create` on to\n * `renderQuickCreate`.\n */\n selectionMenu?: (range: CalendarEventTimeChange, controls: CalendarSelectionControls) => readonly DropdownItem[];\n /**\n * Month view: the content of the quick create at the selected days. It opens quietly after a click, keeping the\n * focus in the grid until the person types or tabs into it (Space still lists the day), and with the focus after a\n * drag, a double-click, Enter, N, or `quickCreate`.\n */\n renderQuickCreate?: (range: CalendarEventTimeChange, controls: CalendarQuickCreateControls) => JSX.Element;\n toolbarActions?: JSX.Element;\n /** Application controls, such as filters, right after the period title. */\n toolbarContent?: JSX.Element;\n /** The application's own commands, such as New event, listed after the calendar's in its shortcuts dialog. */\n commands?: readonly CalendarCommand[];\n /**\n * Receives the calendar's commands and `commands` whenever they change, to register them with the host's shortcut\n * dispatcher: Today (H), Next (J) and Previous (K), the views (1 to 4), and Go to (G). The calendar then also offers\n * its shortcuts dialog. Without a dispatcher the commands have no keys.\n */\n onCommandsChange?: (commands: readonly CalendarCommand[]) => void;\n /** Receives the calendar's controller once it mounts. */\n controller?: (controller: CalendarController) => void;\n class?: string;\n};\n\nexport type CalendarSelectionControls = {\n /** Opens the quick create at the days of the menu; `create` names what to create, as the application defines it. */\n quickCreate: (create?: string) => void;\n};\n\nexport type CalendarQuickCreateControls = {\n /** What the person asked to create through `quickCreate`; absent after a click, a drag, or the keyboard. */\n create?: string;\n /**\n * Closes the quick create, returns the focus to the selected day only while the focus is still in the quick create, and\n * leaves a newer selection in place; once another quick create replaced it, nothing.\n */\n close: () => void;\n};\n\nexport type CalendarEventTimeChange = {\n start: Date;\n end: Date;\n allDay?: boolean;\n};\n\nexport type CalendarDayBadge = {\n icon?: string;\n label: string;\n};\n\ntype CalendarPreview = CalendarEventTimeChange & {\n id: string;\n title?: string;\n};\n\ntype TimedEventLayout = {\n event: NormalizedEvent;\n lane: number;\n lanes: number;\n groupId: number;\n groupStartDate: Date;\n groupEndDate: Date;\n};\n\ntype TimedOverflowLayout = {\n groupId: number;\n hiddenEvents: NormalizedEvent[];\n groupStartDate: Date;\n groupEndDate: Date;\n};\n\nconst weekNumber = (date: Date): number => {\n const target = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n const day = target.getUTCDay() || 7;\n target.setUTCDate(target.getUTCDate() + 4 - day);\n const yearStart = new Date(Date.UTC(target.getUTCFullYear(), 0, 1));\n return Math.ceil(((target.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);\n};\nconst zonedWeekNumber = (date: Date, context?: DateContext): number => {\n if (!context?.timeZone) return weekNumber(date);\n const [year = \"1970\", month = \"1\", day = \"1\"] = calendar.formatDateKey(date, context).split(\"-\");\n return weekNumber(new Date(Date.UTC(Number(year), Number(month) - 1, Number(day))));\n};\n\nconst formatDay = (date: Date, context?: DateContext): string =>\n date.toLocaleDateString(context?.locale ?? \"en\", { weekday: \"short\", day: \"numeric\", timeZone: context?.timeZone });\nconst formatMonth = (date: Date, context?: DateContext): string => calendar.formatMonthYear(date, context);\nconst zonedYearMonth = (date: Date, context?: DateContext): { year: number; month: number } => {\n const [year = \"1970\", month = \"1\"] = calendar.formatDateKey(date, context).split(\"-\");\n return { year: Number(year), month: Number(month) - 1 };\n};\nconst zonedMonthDate = (year: number, month: number, context?: DateContext): Date => {\n const value = `${year}-${String(month + 1).padStart(2, \"0\")}-01T12:00`;\n if (!context?.timeZone) return parseDate(value);\n return new Date(calendar.zonedDateTimeToInstant(value, context.timeZone, { disambiguation: \"compatible\" }));\n};\n\nconst startOfDay = (date: Date, context?: DateContext): Date => calendar.startOfDay(date, context);\nconst endOfDay = (date: Date, context?: DateContext): Date => calendar.endOfDay(date, context);\nconst isStartOfDay = (date: Date, context?: DateContext): boolean => date.getTime() === startOfDay(date, context).getTime();\nconst addMinutes = (date: Date, minutes: number): Date => new Date(date.getTime() + minutes * 60 * 1000);\nconst zonedHour = (date: Date, context?: DateContext): number => {\n if (!context?.timeZone) return date.getHours() + date.getMinutes() / 60;\n const value = calendar.instantToZonedInput(date, context.timeZone);\n return Number(value.slice(11, 13)) + Number(value.slice(14, 16)) / 60;\n};\nconst zonedSlot = (day: Date, hour: number, context?: DateContext): Date => {\n return zonedMinuteSlot(day, hour * 60, context);\n};\nconst zonedMinuteSlot = (day: Date, minuteOfDay: number, context?: DateContext): Date => {\n const bounded = Math.max(0, Math.min(23 * 60 + 59, minuteOfDay));\n const hour = Math.floor(bounded / 60);\n const minute = bounded % 60;\n const value = `${calendar.formatDateKey(day, context)}T${String(hour).padStart(2, \"0\")}:${String(minute).padStart(2, \"0\")}`;\n if (!context?.timeZone) return parseDate(value);\n return new Date(calendar.zonedDateTimeToInstant(value, context.timeZone, { disambiguation: \"compatible\" }));\n};\nconst normalizeEvents = (events: CalendarEvent[], context?: DateContext): NormalizedEvent[] =>\n events.flatMap((event) => {\n const startDate = parseDate(event.start, context);\n if (!validDate(startDate)) return [];\n const parsedEnd = event.end ? parseDate(event.end, context) : null;\n const endDate = parsedEnd && validDate(parsedEnd) ? parsedEnd : new Date(startDate.getTime() + 60 * 60 * 1000);\n const duration = Math.max(60 * 60 * 1000, endDate.getTime() - startDate.getTime());\n const rangeEnd = endDate > startDate ? endDate : new Date(startDate.getTime() + duration);\n const startKey = calendar.formatDateKey(startDate, context);\n const endKey = calendar.formatDateKey(rangeEnd, context);\n if (!event.allDay && startKey === endKey) {\n return [\n {\n ...event,\n startDate,\n endDate: rangeEnd,\n sourceStartDate: startDate,\n sourceEndDate: rangeEnd,\n dayKey: startKey,\n },\n ];\n }\n const lastDay =\n event.allDay && isStartOfDay(rangeEnd, context)\n ? calendar.addDays(startOfDay(rangeEnd, context), -1, context)\n : startOfDay(rangeEnd, context);\n const days: NormalizedEvent[] = [];\n for (let day = startOfDay(startDate, context); day <= lastDay; day = calendar.addDays(day, 1, context)) {\n const segmentStart = day.getTime() === startOfDay(startDate, context).getTime() ? startDate : startOfDay(day, context);\n const segmentEnd = day.getTime() === startOfDay(rangeEnd, context).getTime() ? rangeEnd : endOfDay(day, context);\n days.push({\n ...event,\n startDate: segmentStart,\n endDate: segmentEnd,\n sourceStartDate: startDate,\n sourceEndDate: rangeEnd,\n dayKey: calendar.formatDateKey(day, context),\n allDay: event.allDay,\n });\n }\n return days;\n });\n\nconst moveEventTo = (event: NormalizedEvent, target: Date, allDay = false, context?: DateContext): CalendarEventTimeChange => {\n const duration = Math.max(30 * 60 * 1000, event.sourceEndDate.getTime() - event.sourceStartDate.getTime());\n const start = allDay ? startOfDay(target, context) : new Date(target);\n start.setSeconds(0, 0);\n return { start, end: new Date(start.getTime() + duration), allDay };\n};\n\nconst moveEventToDay = (event: NormalizedEvent, day: Date, context?: DateContext): CalendarEventTimeChange => {\n if (event.allDay) return moveEventTo(event, startOfDay(day, context), true, context);\n const localStart = context?.timeZone ? calendar.instantToZonedInput(event.sourceStartDate, context.timeZone) : null;\n const hour = localStart ? Number(localStart.slice(11, 13)) : event.sourceStartDate.getHours();\n const minute = localStart ? Number(localStart.slice(14, 16)) : event.sourceStartDate.getMinutes();\n return moveEventTo(event, zonedMinuteSlot(day, hour * 60 + minute, context), false, context);\n};\n\nconst eventTimeChanged = (event: NormalizedEvent, next: CalendarEventTimeChange): boolean =>\n event.sourceStartDate.getTime() !== next.start.getTime() ||\n event.sourceEndDate.getTime() !== next.end.getTime() ||\n Boolean(event.allDay) !== Boolean(next.allDay);\n\nconst previewSegments = (preview: CalendarPreview | null, days: Date[], context?: DateContext): NormalizedEvent[] =>\n preview\n ? normalizeEvents(\n [\n {\n id: `preview-${preview.id}`,\n title: preview.title ?? \"\",\n start: preview.start,\n end: preview.end,\n allDay: preview.allDay,\n color: \"blue\",\n },\n ],\n context,\n ).filter((event) => days.some((day) => event.dayKey === calendar.formatDateKey(day, context)))\n : [];\n\nconst timedEventLayouts = (events: NormalizedEvent[]): TimedEventLayout[] => {\n return layoutCalendarIntervals(events, (event) => ({\n start: event.startDate.getTime(),\n end: event.endDate.getTime(),\n })).map(({ item: event, lane, lanes, groupId, groupStart, groupEnd }) => ({\n event,\n lane,\n lanes,\n groupId,\n groupStartDate: new Date(groupStart),\n groupEndDate: new Date(groupEnd),\n }));\n};\n\nconst slotInteractionProps = (\n owner: CalendarOwner,\n slot: () => CalendarEventTimeChange,\n suppressed?: () => boolean,\n nativeControl = false,\n) => {\n const isSlotChild = (event: Event) => {\n if (!(event.target instanceof Element)) return false;\n const control = event.target.closest(\"a,button,[data-calendar-event]\");\n return Boolean(control && control !== event.currentTarget);\n };\n const interactive = Boolean(owner.onSlotActivate);\n const activate = (event: Event) => {\n if (!owner.onSlotActivate || isSlotChild(event) || suppressed?.()) return;\n event.preventDefault();\n owner.onSlotActivate(slot());\n };\n return {\n role: interactive && !nativeControl ? (\"button\" as const) : undefined,\n tabIndex: interactive && !nativeControl ? 0 : undefined,\n onClick: (event: MouseEvent) => {\n if (owner.slotActivation === \"double\") return;\n activate(event);\n },\n onDblClick: (event: MouseEvent) => {\n if (owner.slotActivation !== \"double\") return;\n activate(event);\n },\n onKeyDown: nativeControl\n ? undefined\n : (event: KeyboardEvent) => {\n if (event.key === \"Enter\" || event.key === \" \") activate(event);\n },\n };\n};\n\ntype CalendarNavigationLinkProps = ParentProps<{\n owner: CalendarOwner;\n href: string;\n /** Handles a plain click in place, such as gliding to a loaded day; `true` keeps the link from navigating. */\n intercept?: () => boolean;\n anchorProps?: Omit<JSX.AnchorHTMLAttributes<HTMLAnchorElement>, \"children\" | \"href\" | \"onClick\"> & {\n \"data-direction\"?: string;\n \"data-divider\"?: string;\n \"data-outside\"?: string;\n \"data-size\"?: string;\n \"data-today\"?: string;\n \"data-variant\"?: string;\n \"data-weekend\"?: string;\n };\n}>;\n\nconst plainClick = (event: MouseEvent) =>\n !event.defaultPrevented && event.button === 0 && !event.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey;\n\n/** A real anchor is the baseline; the optional handler only enhances it after hydration. */\nconst CalendarNavigationLink = (props: CalendarNavigationLinkProps): JSX.Element => {\n const preload = () => props.owner.onPrefetch?.(props.href);\n const intercepted = (event: MouseEvent) => {\n if (!props.intercept || !plainClick(event) || !props.intercept()) return false;\n event.preventDefault();\n return true;\n };\n const navigateHref: JSX.EventHandler<HTMLAnchorElement, MouseEvent> = (event) => {\n if (intercepted(event)) return;\n const anchor = event.currentTarget;\n if (\n !plainClick(event) ||\n (anchor.target && anchor.target !== \"_self\") ||\n anchor.hasAttribute(\"download\") ||\n new URL(anchor.href).origin !== window.location.origin\n ) {\n return;\n }\n event.preventDefault();\n props.owner.onNavigateHref?.(props.href);\n };\n return props.owner.onNavigateHref ? (\n <a {...props.anchorProps} href={props.href} onClick={navigateHref} onPointerEnter={preload} onFocus={preload}>\n {props.children}\n </a>\n ) : props.owner.onNavigate ? (\n <Link\n {...props.anchorProps}\n href={props.href}\n scroll=\"preserve\"\n onNavigate={props.owner.onNavigate}\n onClick={(event) => void intercepted(event)}\n onPointerEnter={preload}\n onFocus={preload}\n >\n {props.children}\n </Link>\n ) : (\n <a {...props.anchorProps} href={props.href} onClick={(event) => void intercepted(event)} onPointerEnter={preload} onFocus={preload}>\n {props.children}\n </a>\n );\n};\n\nconst CalendarViewLinks = <V extends string>(props: {\n owner: CalendarProps<V>;\n view: CalendarView | V;\n options: Array<{ value: CalendarView | V; label: string }>;\n /** The day selected in the month view: the other views open at it. */\n focusDay?: Date | null;\n}): JSX.Element => {\n const calendarMessages = useCalendarMessages();\n const refs: HTMLAnchorElement[] = [];\n const selectRelative = (currentIndex: number, direction: -1 | 1) => {\n if (props.options.length === 0) return;\n refs[(currentIndex + direction + props.options.length) % props.options.length]?.click();\n };\n const onKeyDown = (event: KeyboardEvent, index: number) => {\n if (event.key === \"ArrowRight\" || event.key === \"ArrowDown\") {\n event.preventDefault();\n selectRelative(index, 1);\n } else if (event.key === \"ArrowLeft\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n selectRelative(index, -1);\n } else if (event.key === \"Home\" || event.key === \"End\") {\n event.preventDefault();\n refs[event.key === \"Home\" ? 0 : props.options.length - 1]?.click();\n }\n };\n\n return (\n <div\n role=\"radiogroup\"\n aria-label={calendarMessages().calendarView}\n aria-orientation=\"horizontal\"\n class=\"k2b-segmented-control k2b-calendar-view-switcher\"\n >\n <For each={props.options}>\n {(option, index) => {\n const active = () => (props.view === \"mobile-month\" ? \"month\" : props.view) === option.value;\n const href = () => {\n const day = props.focusDay;\n const atDay = day && !active() ? props.owner.getDateHref?.(day, option.value) : undefined;\n return atDay ?? props.owner.getViewHref?.(option.value) ?? \"#\";\n };\n return (\n <CalendarNavigationLink\n owner={props.owner}\n href={href()}\n anchorProps={{\n ref: (element) => {\n refs[index()] = element;\n },\n role: \"radio\",\n \"aria-checked\": active(),\n tabIndex: active() ? 0 : -1,\n class: \"k2b-segmented-control__option\",\n \"data-divider\":\n index() < props.options.length - 1 &&\n !active() &&\n (props.view === \"mobile-month\" ? \"month\" : props.view) !== props.options[index() + 1]?.value\n ? \"true\"\n : undefined,\n onKeyDown: (event) => onKeyDown(event, index()),\n }}\n >\n {option.label}\n </CalendarNavigationLink>\n );\n }}\n </For>\n </div>\n );\n};\n\n/**\n * The same day some months later, or the last day of that month when it is shorter: a step from January 31 lands on\n * February 28, never in March. stdlib's `addMonths` runs over into the next month.\n */\nconst addMonthsClamped = (date: Date, months: number, dateConfig: DateContext): Date => {\n const moved = calendar.addMonths(date, months, dateConfig);\n if (calendar.formatDateKey(moved, dateConfig).slice(8) === calendar.formatDateKey(date, dateConfig).slice(8)) return moved;\n return calendar.addDays(calendar.startOfMonth(moved, dateConfig), -1, dateConfig);\n};\n\n/** Custom views page by day, like the day view. */\nconst adjacentCalendarDate = (\n date: Date,\n view: string,\n direction: -1 | 1,\n dateConfig: DateContext,\n customViews?: readonly CalendarCustomView[],\n) => {\n if (view === \"year\") return addMonthsClamped(date, direction * 12, dateConfig);\n if (view === \"month\" || view === \"mobile-month\") return addMonthsClamped(date, direction, dateConfig);\n const custom = customViews?.find((option) => option.value === view)?.days;\n const days = view === \"week\" ? 7 : custom && Number.isInteger(custom) && custom > 0 ? custom : 1;\n return calendar.addDays(date, direction * days, dateConfig);\n};\n\n/** Opens a view at a day through the host's callbacks. Hosts may keep the view and the date apart, so both hear it. */\nconst openViewAt = <V extends string>(\n owner: Pick<CalendarProps<V>, \"onViewChange\" | \"onDateChange\">,\n date: Date,\n view: CalendarView | V,\n) => {\n owner.onViewChange?.(view);\n owner.onDateChange?.(date, view);\n};\n\n/** What the header reads from the active view beyond the props: the days a day or week view shows, and its moves. */\ntype CalendarHeaderNav = {\n /** The day or week view with `dayHours`, which scrolls through its days by itself. */\n timeView: () => TimeViewHandle | null;\n monthView: () => MonthHandle | null;\n /** The commands of the shortcuts dialog; without them the header shows no shortcuts button. */\n commands: () => readonly CalendarCommand[];\n openShortcuts: () => void;\n};\n\nconst dayTitleOptions: Intl.DateTimeFormatOptions = { weekday: \"short\", day: \"numeric\", month: \"short\", year: \"numeric\" };\nconst weekTitleOptions: Intl.DateTimeFormatOptions = { day: \"numeric\", month: \"short\", year: \"numeric\" };\n\n/** Where today lies from the shown day or week before its view measured: the arrow of the Today button, or nothing. */\nconst todayDirectionOf = (view: string, date: Date, context: DateContext): TodayDirection => {\n const today = calendar.formatDateKey(new Date(), context);\n if (view === \"week\") {\n const start = calendar.formatDateKey(calendar.startOfWeek(date, context), context);\n const end = calendar.formatDateKey(calendar.addDays(calendar.startOfWeek(date, context), 6, context), context);\n return today < start ? \"left\" : today > end ? \"right\" : \"\";\n }\n const shown = calendar.formatDateKey(date, context);\n return today < shown ? \"up\" : today > shown ? \"down\" : \"\";\n};\n\nconst CalendarHeader = <V extends string>(props: {\n date: Date;\n view: CalendarView | V;\n labels: Required<CalendarLabels>;\n owner: CalendarProps<V>;\n focusDay?: Date | null;\n nav: CalendarHeaderNav;\n}): JSX.Element => {\n const calendarMessages = useCalendarMessages();\n const dateConfig = () => ownerDateConfig(props.owner);\n const timeView = () => props.nav.timeView();\n const monthView = () => props.nav.monthView();\n const scrollingView = () => timeView() ?? monthView();\n const parseKey = (key: string) => calendar.parseCalendarDate(key, dateConfig());\n /** The date the header pages from: the first day a day or week view shows, else the date. */\n const base = () => {\n const shown = timeView()?.visibleKeys().first;\n return shown ? parseKey(shown) : (monthView()?.stepFrom() ?? props.date);\n };\n const previous = () => adjacentCalendarDate(base(), props.view, -1, dateConfig(), props.owner.customViews);\n const next = () => adjacentCalendarDate(base(), props.view, 1, dateConfig(), props.owner.customViews);\n /** The day view's title, such as \"Fri, Oct 9, 2026\" or \"Fr, 9. Okt 2026\". */\n const formatDayTitle = (date: Date) =>\n compactGermanDate(\n new Intl.DateTimeFormat(dateConfig().locale ?? \"en\", { ...dayTitleOptions, timeZone: dateConfig().timeZone }).format(date),\n dateConfig().locale,\n true,\n );\n const formatRange = (from: Date, to: Date) =>\n compactGermanDate(\n new Intl.DateTimeFormat(dateConfig().locale ?? \"en\", { ...weekTitleOptions, timeZone: dateConfig().timeZone }).formatRange(from, to),\n dateConfig().locale,\n );\n /** The day and week views with `dayHours` name the days they show, also on the server before they measured. */\n const timeMode = () => Boolean(props.owner.dayHours) && (props.view === \"day\" || props.view === \"week\");\n const title = () => {\n const shown = timeView()?.visibleKeys();\n if (timeMode() && props.view === \"day\") return formatDayTitle(shown ? parseKey(shown.first) : props.date);\n if (timeMode()) {\n const start = shown ? parseKey(shown.first) : calendar.startOfWeek(props.date, dateConfig());\n return formatRange(start, shown ? parseKey(shown.last) : calendar.addDays(start, 6, dateConfig()));\n }\n if (props.view === \"year\")\n return new Intl.DateTimeFormat(dateConfig().locale ?? \"en\", { year: \"numeric\", timeZone: dateConfig().timeZone }).format(props.date);\n if (props.view !== \"week\" && props.view !== \"month\" && props.view !== \"mobile-month\")\n return props.date.toLocaleDateString(dateConfig().locale ?? \"en\", {\n weekday: \"long\",\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n timeZone: dateConfig().timeZone,\n });\n if (props.view === \"week\")\n return `${formatDay(calendar.startOfWeek(props.date, dateConfig()), dateConfig())} - ${formatDay(calendar.addDays(calendar.startOfWeek(props.date, dateConfig()), 6, dateConfig()), dateConfig())}`;\n return formatMonth(monthView()?.focusMonth() ?? props.date, dateConfig());\n };\n /**\n * The titles this view can show around the current date: the months of the year, the weeks of the month and across\n * each month boundary, or a day of each weekday in every month. Their widest one sets the title's width.\n */\n const titleWidths = createMemo(() => {\n const context = dateConfig();\n if (props.view === \"year\") return [];\n const { year } = zonedYearMonth(props.date, context);\n if (props.view === \"month\" || props.view === \"mobile-month\")\n return Array.from({ length: 12 }, (_, month) => formatMonth(zonedMonthDate(year, month, context), context));\n if (props.view === \"week\") {\n const first = calendar.startOfWeek(calendar.startOfMonth(props.date, context), context);\n const weeks = Array.from({ length: 6 }, (_, week) => {\n const start = calendar.addDays(first, week * 7, context);\n if (timeMode()) return formatRange(start, calendar.addDays(start, 6, context));\n return `${formatDay(start, context)} - ${formatDay(calendar.addDays(start, 6, context), context)}`;\n });\n if (timeMode()) {\n return [\n ...weeks,\n ...Array.from({ length: 12 }, (_, month) => {\n const day28 = calendar.addDays(zonedMonthDate(year, month, context), 27, context);\n return formatRange(day28, calendar.addDays(day28, 6, context));\n }),\n ];\n }\n return weeks;\n }\n return Array.from({ length: 12 }, (_, month) => month).flatMap((month) => {\n const first = zonedMonthDate(year, month, context);\n return Array.from({ length: 7 }, (_, offset) =>\n timeMode()\n ? formatDayTitle(calendar.addDays(first, 21 + offset, context))\n : calendar.addDays(first, 21 + offset, context).toLocaleDateString(context.locale ?? \"en\", {\n weekday: \"long\",\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n timeZone: context.timeZone,\n }),\n );\n });\n });\n const goDate = (date: Date) => props.owner.onDateChange?.(date, props.view);\n const goView = (view: CalendarView | V) => {\n // Like the switcher's links, the other views open at the day selected in the month view.\n const day = props.focusDay;\n if (day && props.owner.onDateChange && view !== props.view) {\n openViewAt(props.owner, day, view);\n return;\n }\n if (props.owner.onViewChange) {\n props.owner.onViewChange(view);\n return;\n }\n const href = props.owner.getViewHref?.(view);\n if (href) window.location.href = href;\n };\n /**\n * A previous or next button. Its element stays while its target changes, such as with each step through the months,\n * so a repeated click or Enter lands on the same button and keeps its focus.\n */\n const navButton = (date: () => Date, icon: string, label: string, direction: -1 | 1) => {\n const href = () => props.owner.getDateHref?.(date(), props.view);\n const step = () => scrollingView()?.step(direction) ?? false;\n const title = () => (props.nav.commands().length > 0 ? `${label} (${direction > 0 ? \"J\" : \"K\"})` : label);\n const link = (target: () => string) => (\n <CalendarNavigationLink\n owner={props.owner}\n href={target()}\n intercept={step}\n anchorProps={{ \"aria-label\": label, title: title(), class: \"k2b-calendar-header__nav-button\" }}\n >\n <i class={`ti ${icon}`} />\n </CalendarNavigationLink>\n );\n return (\n <Show\n when={Boolean((props.owner.onNavigateHref || props.owner.onNavigate) && href())}\n fallback={\n <Show when={props.owner.onDateChange} fallback={link(() => href() ?? \"#\")}>\n <button\n type=\"button\"\n aria-label={label}\n title={title()}\n class=\"k2b-calendar-header__nav-button\"\n onClick={() => {\n if (!step()) goDate(date());\n }}\n >\n <i class={`ti ${icon}`} />\n </button>\n </Show>\n }\n >\n {link(() => href() ?? \"#\")}\n </Show>\n );\n };\n /**\n * In the day and week views that scroll through their days, Today points where today lies, or shows a calm dot while\n * it is on screen; the icon keeps its place either way. The other views name their period in the title.\n */\n const direction = () =>\n timeMode() || monthView()\n ? (scrollingView()?.todayDirection() ?? todayDirectionOf(String(props.view), props.date, dateConfig())) || \"here\"\n : undefined;\n /** One arrow that the stylesheet turns toward today, or the dot while today shows. */\n const todayIcon = () => (\n <Show when={direction()}>\n {(current) => (\n <Show when={current() !== \"here\"} fallback={<i class=\"ti ti-point k2b-calendar-header__today-direction\" aria-hidden=\"true\" />}>\n <i class=\"ti ti-arrow-narrow-right k2b-calendar-header__today-direction\" aria-hidden=\"true\" />\n </Show>\n )}\n </Show>\n );\n const todayButton = () => {\n const today = calendar.today(dateConfig());\n const href = props.owner.getDateHref?.(today, props.view);\n const intercept = () => scrollingView()?.today() ?? false;\n const title = () => (props.nav.commands().length > 0 ? `${props.labels.today} (H)` : undefined);\n const label = (\n <>\n {todayIcon()}\n <span class=\"k2b-button__label\">{props.labels.today}</span>\n </>\n );\n return (props.owner.onNavigateHref || props.owner.onNavigate) && href ? (\n <CalendarNavigationLink\n owner={props.owner}\n href={href}\n intercept={intercept}\n anchorProps={{\n class: \"k2b-button k2b-calendar-header__today\",\n \"data-size\": \"sm\",\n \"data-variant\": \"input\",\n \"data-direction\": direction(),\n title: title(),\n }}\n >\n {label}\n </CalendarNavigationLink>\n ) : props.owner.onDateChange ? (\n <Button\n type=\"button\"\n variant=\"input\"\n size=\"sm\"\n class=\"k2b-calendar-header__today\"\n data-direction={direction()}\n title={title()}\n onClick={() => {\n if (!intercept()) goDate(today);\n }}\n >\n {todayIcon()}\n {props.labels.today}\n </Button>\n ) : (\n <CalendarNavigationLink\n owner={props.owner}\n href={href ?? \"#\"}\n intercept={intercept}\n anchorProps={{\n class: \"k2b-button k2b-calendar-header__today\",\n \"data-size\": \"sm\",\n \"data-variant\": \"input\",\n \"data-direction\": direction(),\n title: title(),\n }}\n >\n {label}\n </CalendarNavigationLink>\n );\n };\n const viewOptions = createMemo(\n (): Array<{ value: CalendarView | V; label: string }> => [\n ...(\n [\n { value: \"day\", label: props.labels.day },\n { value: \"week\", label: props.labels.week },\n { value: \"month\", label: props.labels.month },\n { value: \"year\", label: props.labels.year },\n ] satisfies Array<{ value: CalendarView; label: string }>\n ).filter((option) => !props.owner.views || props.owner.views.includes(option.value)),\n ...(props.owner.customViews ?? []),\n ],\n );\n\n return (\n <header class=\"k2b-calendar-header\" data-view-switcher={props.owner.viewSwitcher === false ? \"false\" : undefined}>\n <div class=\"k2b-calendar-header__navigation\">\n {navButton(previous, \"ti-chevron-left\", props.labels.previous, -1)}\n {navButton(next, \"ti-chevron-right\", props.labels.next, 1)}\n <div class=\"k2b-calendar-header__title\">\n <span>{title()}</span>\n {/* The widest title of the view reserves its width, so paging never moves what follows the title. */}\n <For each={titleWidths()}>\n {(candidate) => (\n <span class=\"k2b-calendar-header__title-size\" aria-hidden=\"true\">\n {candidate}\n </span>\n )}\n </For>\n </div>\n </div>\n <Show when={props.owner.toolbarContent}>\n <div class=\"k2b-calendar-header__content\">{props.owner.toolbarContent}</div>\n </Show>\n <div class=\"k2b-calendar-header__actions\">\n {todayButton()}\n <Show when={props.owner.viewSwitcher !== false}>\n <Show\n when={!props.owner.onViewChange && props.owner.getViewHref}\n fallback={\n <SegmentedControl\n class=\"k2b-calendar-view-switcher\"\n value={() => (props.view === \"mobile-month\" ? \"month\" : props.view)}\n onValueChange={goView}\n ariaLabel={calendarMessages().calendarView}\n options={viewOptions()}\n />\n }\n >\n <CalendarViewLinks owner={props.owner} view={props.view} options={viewOptions()} focusDay={props.focusDay} />\n </Show>\n </Show>\n {props.owner.toolbarActions}\n <Show when={props.nav.commands().length > 0}>\n <button\n type=\"button\"\n class=\"k2b-calendar-header__shortcuts\"\n aria-label={calendarMessages().calendarShortcuts}\n title={calendarMessages().calendarShortcuts}\n onClick={() => props.nav.openShortcuts()}\n >\n <i class=\"ti ti-keyboard\" aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n <Show when={props.owner.navigationPending}>\n <span class=\"k2b-calendar-header__progress\" aria-hidden=\"true\" />\n </Show>\n </header>\n );\n};\n\n/** The compact month of `mobile-month`: a picker whose days link to their agenda. */\nconst MonthPickerView = (props: {\n owner: CalendarOwner;\n date: Date;\n now: Date;\n events: NormalizedEvent[];\n labels: Required<CalendarLabels>;\n compact?: boolean;\n}): JSX.Element => {\n const calendarMessages = useCalendarMessages();\n const dateConfig = createMemo(() => ownerDateConfig(props.owner));\n const [movePreview, setMovePreview] = createSignal<CalendarPreview | null>(null);\n const [movingEventId, setMovingEventId] = createSignal(\"\");\n let cancelInteraction: (() => void) | undefined;\n let suppressSlotClickUntil = 0;\n const month = createMemo(() => zonedYearMonth(props.date, dateConfig()));\n const weeks = createMemo(() => calendar.getMonthGrid(month().year, month().month, dateConfig()));\n const weekdays = createMemo(() => calendar.weekdays(dateConfig()));\n const todayKey = createMemo(() => calendar.formatDateKey(props.now, dateConfig()));\n const eventsByDay = createMemo(() => {\n const grouped = new Map<string, NormalizedEvent[]>();\n for (const event of props.events) {\n const events = grouped.get(event.dayKey);\n if (events) events.push(event);\n else grouped.set(event.dayKey, [event]);\n }\n return grouped;\n });\n const clearMove = () => {\n setMovePreview(null);\n setMovingEventId(\"\");\n };\n const dayAtPoint = (clientX: number, clientY: number): Date | null => {\n const target = document.elementFromPoint(clientX, clientY)?.closest<HTMLElement>(\"[data-calendar-day-key]\");\n const dayKey = target?.dataset.calendarDayKey;\n return dayKey ? calendar.parseCalendarDate(dayKey, dateConfig()) : null;\n };\n const startMove = (pointerEvent: PointerEvent, event: NormalizedEvent, markDragged: () => void) => {\n if (!props.owner.onEventDrop) return;\n cancelInteraction?.();\n cancelInteraction = startCalendarPointerSession({\n event: pointerEvent,\n resolve: (clientX, clientY) => {\n const day = dayAtPoint(clientX, clientY);\n return day ? { id: event.id, ...moveEventToDay(event, day, dateConfig()) } : null;\n },\n onActivate: () => {\n markDragged();\n suppressSlotClickUntil = performance.now() + 400;\n setMovingEventId(event.id);\n },\n onPreview: setMovePreview,\n onCommit: (next) => {\n clearMove();\n if (eventTimeChanged(event, next)) props.owner.onEventDrop?.(event, next);\n },\n onCancel: clearMove,\n });\n };\n onCleanup(() => cancelInteraction?.());\n return (\n <div\n class=\"k2b-calendar-month\"\n // The mobile month is a bounded picker: finger-sized weeks that keep the selected day's agenda close below.\n style={{ \"grid-template-rows\": `auto repeat(${weeks().length}, ${props.compact ? \"minmax(2.75rem, auto)\" : \"minmax(5rem, 1fr)\"})` }}\n >\n <div class=\"k2b-calendar-month__weekdays\" data-week-numbers={props.owner.withWeekNumbers ? \"true\" : undefined}>\n <Show when={props.owner.withWeekNumbers}>\n <div class=\"k2b-calendar-month__weekday\">{calendarMessages().weekShort}</div>\n </Show>\n <For each={weekdays()}>\n {(day, index) => (\n <div\n class=\"k2b-calendar-month__weekday\"\n data-weekend={isWeekendColumn(index(), dateConfig().firstDayOfWeek ?? 1, dateConfig().locale) ? \"true\" : undefined}\n >\n {day}\n </div>\n )}\n </For>\n </div>\n <For each={weeks()}>\n {(week) => (\n <div class=\"k2b-calendar-month__week\" data-week-numbers={props.owner.withWeekNumbers ? \"true\" : undefined}>\n <Show when={props.owner.withWeekNumbers}>\n <div class=\"k2b-calendar-month__week-number\">{zonedWeekNumber(week[0]!, dateConfig())}</div>\n </Show>\n <For each={week}>\n {(day) => {\n const dayKey = calendar.formatDateKey(day, dateConfig());\n const events = eventsByDay().get(dayKey) ?? [];\n const href = props.owner.getDateHref?.(day, \"day\");\n const dayBadge = props.owner.dayBadges?.[dayKey];\n const sameMonth = calendar.isSameMonth(day, props.date, dateConfig());\n const isToday = dayKey === todayKey();\n const dayLabel = day.toLocaleDateString(dateConfig().locale ?? \"en\", {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n timeZone: dateConfig().timeZone,\n });\n const eventStack = createMemo(() => {\n const preview = movePreview();\n const previewForDay = preview && calendar.formatDateKey(preview.start, dateConfig()) === dayKey ? preview : null;\n const candidates = previewForDay ? events.filter((event) => event.id !== previewForDay.id) : events;\n const visibleLimit = previewForDay ? 2 : 3;\n return {\n preview: previewForDay,\n visibleEvents: candidates.slice(0, visibleLimit),\n hiddenCount: Math.max(0, candidates.length - visibleLimit),\n };\n });\n return (\n <div\n class=\"k2b-calendar-month__day\"\n data-calendar-day-key={dayKey}\n data-outside={!sameMonth ? \"true\" : undefined}\n data-weekend={isWeekendKey(dayKey, dateConfig().locale) ? \"true\" : undefined}\n data-drop-preview={\n movePreview()?.start && calendar.formatDateKey(movePreview()!.start, dateConfig()) === dayKey ? \"true\" : undefined\n }\n >\n <Show\n when={props.owner.onSlotActivate}\n fallback={\n <Show when={href}>\n {(dayHref) => (\n <CalendarNavigationLink\n owner={props.owner}\n href={dayHref()}\n anchorProps={{\n class: \"k2b-calendar-month__day-target\",\n \"aria-label\": calendarMessages().openDate({ label: dayLabel }),\n }}\n />\n )}\n </Show>\n }\n >\n <button\n type=\"button\"\n class=\"k2b-calendar-month__day-target\"\n data-interactive=\"true\"\n aria-label={calendarMessages().createEventOn({ label: dayLabel })}\n {...slotInteractionProps(\n props.owner,\n () => {\n const start = startOfDay(day, dateConfig());\n return { start, end: calendar.addDays(start, 1, dateConfig()), allDay: true };\n },\n () => performance.now() < suppressSlotClickUntil,\n true,\n )}\n />\n </Show>\n <div class=\"k2b-calendar-month__day-header\">\n <Show\n when={props.owner.onSlotActivate && href}\n fallback={\n <span\n class=\"k2b-calendar-month__day-number\"\n data-today={isToday ? \"true\" : undefined}\n data-outside={!sameMonth ? \"true\" : undefined}\n >\n {calendar.formatDayNumber(day, dateConfig())}\n </span>\n }\n >\n {(dayHref) => (\n <CalendarNavigationLink\n owner={props.owner}\n href={dayHref()}\n anchorProps={{\n class: \"k2b-calendar-month__day-number\",\n \"data-today\": isToday ? \"true\" : undefined,\n \"data-outside\": !sameMonth ? \"true\" : undefined,\n \"aria-label\": calendarMessages().openDate({ label: dayLabel }),\n }}\n >\n {calendar.formatDayNumber(day, dateConfig())}\n </CalendarNavigationLink>\n )}\n </Show>\n <Show when={dayBadge}>\n {(badge) => (\n <span class=\"k2b-calendar-month__badge\">\n <Show when={badge().icon}>{(icon) => <i class={`k2b-calendar-month__badge-icon ti ti-${icon()}`} />}</Show>\n {badge().label}\n </span>\n )}\n </Show>\n </div>\n <div class=\"k2b-calendar-month__events\">\n <Show when={eventStack().preview}>\n <div class=\"k2b-calendar-preview\">\n {props.events.find((event) => event.id === eventStack().preview!.id)?.title ?? calendarMessages().moveEvent}\n </div>\n </Show>\n <For each={eventStack().visibleEvents}>\n {(event) => (\n <EventChip\n event={event}\n owner={props.owner}\n href={eventHref(props.owner, event)}\n compact\n moving={movingEventId() === event.id}\n onMovePointerDown={\n props.owner.onEventDrop\n ? (pointerEvent, markDragged) => startMove(pointerEvent, event, markDragged)\n : undefined\n }\n />\n )}\n </For>\n <Show when={eventStack().hiddenCount > 0}>\n <CalendarNavigationLink owner={props.owner} href={href ?? \"#\"} anchorProps={{ class: \"k2b-calendar-month__more\" }}>\n {calendarMessages().calendarMoreEvents({ count: eventStack().hiddenCount })}\n </CalendarNavigationLink>\n </Show>\n </div>\n <div class=\"k2b-calendar-month__dots\">\n <For each={events.slice(0, 4)}>\n {(event) => (\n <span\n class=\"k2b-calendar-dot\"\n data-color={event.colorHex ? undefined : (event.color ?? \"blue\")}\n style={event.colorHex ? { \"background-color\": event.colorHex } : undefined}\n />\n )}\n </For>\n </div>\n </div>\n );\n }}\n </For>\n </div>\n )}\n </For>\n </div>\n );\n};\n\n/** One entry of the month grid: its whole range, and the days it covers as `YYYY-MM-DD` keys. */\ntype MonthItem = {\n /** Identifies the entry across the week rows it spans. */\n key: string;\n event: NormalizedEvent;\n firstKey: string;\n lastKey: string;\n /** All-day and multi-day entries are bars; the others stack in their day. */\n bar: boolean;\n /** Pieces of the entry per day, for the day list. */\n days: Map<string, NormalizedEvent>;\n};\n\ntype MonthSelection = { first: string; last: string };\n\n/** What the calendar's controller and header ask of the month view; the rest serves the month that scrolls. */\ntype MonthHandle = Pick<CalendarController, \"quickCreate\" | \"createTarget\"> & {\n /** The quiet quick create waits for the person to type its title. */\n typing: () => boolean;\n continuous: () => boolean;\n /** The 1st of the month in the middle of the view, which the title names. */\n focusMonth: () => Date;\n /** The 1st of the month the next step goes on from: where quick repeated steps head, else the month in focus. */\n stepFrom: () => Date;\n /** The day the view stands for, as `onVisibleDateChange` reports it as `focus`. */\n focusDay: () => Date;\n step: (direction: -1 | 1) => boolean;\n goTo: (key: string) => boolean;\n today: () => boolean;\n todayDirection: () => TodayDirection;\n};\n\ntype MonthPopover =\n | { kind: \"day\"; dayKey: string; anchor: HTMLElement }\n | { kind: \"create\"; range: MonthSelection; anchor: HTMLElement; create?: string };\n\n/** Lane height and gap of the month entries, in rem; the stylesheet reads both from the grid's custom properties. */\nconst MONTH_LANE_REM = 1.25;\nconst MONTH_LANE_GAP_REM = 0.125;\n/** Rows drawn before the browser has measured the cells, as in the server response. */\nconst MONTH_DEFAULT_LANES = 3;\n/** Room a bar keeps beside its title and date hint: padding, torn edge, gap, and an icon such as a task box or a flag. */\nconst MONTH_HINT_SLACK_REM = 2.25;\n\nconst dayKeyNumber = (key: string): number => {\n const [year = \"1970\", month = \"1\", day = \"1\"] = key.split(\"-\");\n return Date.UTC(Number(year), Number(month) - 1, Number(day)) / 86_400_000;\n};\n\nconst orderedSelection = (anchor: string, focus: string): MonthSelection =>\n anchor <= focus ? { first: anchor, last: focus } : { first: focus, last: anchor };\n\n/** Groups the per-day pieces of the events back into one entry each: bars first, then the others by time. */\nconst monthItems = (events: NormalizedEvent[]): MonthItem[] => {\n const items = new Map<string, MonthItem>();\n for (const piece of events) {\n const key = `${piece.id}\\u0000${piece.sourceStartDate.getTime()}`;\n const item = items.get(key);\n if (item) {\n if (piece.dayKey < item.firstKey) item.firstKey = piece.dayKey;\n if (piece.dayKey > item.lastKey) item.lastKey = piece.dayKey;\n item.days.set(piece.dayKey, piece);\n continue;\n }\n items.set(key, {\n key,\n event: { ...piece, startDate: piece.sourceStartDate, endDate: piece.sourceEndDate },\n firstKey: piece.dayKey,\n lastKey: piece.dayKey,\n bar: false,\n days: new Map([[piece.dayKey, piece]]),\n });\n }\n for (const item of items.values())\n item.bar = item.firstKey !== item.lastKey || Boolean(item.event.allDay && item.event.display !== \"marker\");\n return [...items.values()].sort(\n (left, right) =>\n Number(right.bar) - Number(left.bar) ||\n left.event.sourceStartDate.getTime() - right.event.sourceStartDate.getTime() ||\n left.event.title.localeCompare(right.event.title),\n );\n};\n\nconst PRINTABLE_KEY = /^.$/u;\n\n/**\n * The month grid. A click selects a day and never navigates, a drag or Shift selects a range, and the arrow keys move\n * the selection. The quick create opens at the selection: quietly after a click, with the focus after a drag, a\n * double-click, Enter, or N. Every event is one bar per week row in a lane it keeps on each of its days, and each\n * cell shows as many entries as its height holds.\n */\nconst MonthView = (props: {\n owner: CalendarOwner;\n date: Date;\n now: Date;\n events: NormalizedEvent[];\n labels: Required<CalendarLabels>;\n /** The first selected day, for the view switcher; `null` without a selection. */\n onFocusDay?: (date: Date | null) => void;\n /** The host's navigation, for a step past an end of `range` that the host has reached. */\n goToDate?: (date: Date) => void;\n /** Receives what the calendar's controller asks of the month view. */\n register?: (handle: MonthHandle | null) => void;\n}): JSX.Element => {\n const calendarMessages = useCalendarMessages();\n const dateConfig = createMemo(() => ownerDateConfig(props.owner));\n const continuous = createMemo(() => Boolean(props.owner.range));\n const [mounted, setMounted] = createSignal(false);\n const hostMonthKey = () => calendar.formatDateKey(calendar.startOfMonth(props.date, dateConfig()), dateConfig());\n const [focusMonthKey, setFocusMonthKey] = createSignal(untrack(hostMonthKey));\n // The shown month and its grid change only with the month, so a refresh of the same month keeps every cell and its\n // focus.\n const month = createMemo(\n () => zonedYearMonth(continuous() ? calendar.parseCalendarDate(focusMonthKey(), dateConfig()) : props.date, dateConfig()),\n undefined,\n {\n equals: (previous, next) => previous.year === next.year && previous.month === next.month,\n },\n );\n const weeks = createMemo(\n () =>\n calendar\n .getMonthGrid(month().year, month().month, dateConfig())\n .map((week) => week.map((day) => ({ day, key: calendar.formatDateKey(day, dateConfig()) }))),\n undefined,\n { equals: (previous, next) => previous.map((week) => week[0]?.key).join() === next.map((week) => week[0]?.key).join() },\n );\n const weekdays = createMemo(() => calendar.weekdays(dateConfig()));\n const weekendColumn = (index: number) => isWeekendColumn(index, dateConfig().firstDayOfWeek ?? 1, dateConfig().locale);\n const todayKey = createMemo(() => calendar.formatDateKey(props.now, dateConfig()));\n const items = createMemo(() => monthItems(props.events));\n const [capacities, setCapacities] = createSignal<number[]>([]);\n const [cellWidth, setCellWidth] = createSignal(0);\n const [barFont, setBarFont] = createSignal(\"\");\n const [anchorKey, setAnchorKey] = createSignal<string | null>(null);\n const [focusKey, setFocusKey] = createSignal<string | null>(null);\n const [focusedCellKey, setFocusedCellKey] = createSignal<string | null>(null);\n const [popover, setPopover] = createSignal<MonthPopover | null>(null);\n /** Whether the quick create holds the focus; until then the grid keeps it. */\n const [createActive, setCreateActive] = createSignal(false);\n const [linkedItem, setLinkedItem] = createSignal(\"\");\n const [movePreview, setMovePreview] = createSignal<CalendarPreview | null>(null);\n const [movingEventId, setMovingEventId] = createSignal(\"\");\n const cells = new Map<string, HTMLElement>();\n let popoverElement: HTMLDivElement | undefined;\n let cancelInteraction: (() => void) | undefined;\n let suppressClickUntil = 0;\n let lastPointer = \"mouse\";\n let menuKey: string | null = null;\n /** The day to select once paging with Page Up or Page Down has shown its month. */\n let pendingKey: string | null = null;\n\n const selection = createMemo((): MonthSelection | null => {\n const anchor = anchorKey();\n const focus = focusKey();\n return anchor && focus ? orderedSelection(anchor, focus) : null;\n });\n const parseKey = (key: string) => calendar.parseCalendarDate(key, dateConfig());\n const rangeOf = (range: MonthSelection): CalendarEventTimeChange => ({\n start: parseKey(range.first),\n end: calendar.addDays(parseKey(range.last), 1, dateConfig()),\n allDay: true,\n });\n const hostKey = () => calendar.formatDateKey(props.date, dateConfig());\n const loadedRange = createMemo(() => {\n const range = props.owner.range;\n const keyOf = (value: Date | string) => calendar.formatDateKey(parseDate(value, dateConfig()), dateConfig());\n return range ? { first: keyOf(range.from), to: keyOf(range.to) } : { first: hostMonthKey(), to: hostMonthKey() };\n });\n const loadedWeeks = createMemo(() => monthWeekKeys(loadedRange().first, loadedRange().to, dateConfig().firstDayOfWeek ?? 1));\n const loaded = (key: string) => key >= loadedRange().first && key < loadedRange().to;\n // The first paint starts at the month's first week. Mount adds the earlier weeks and positions synchronously.\n const trackWeeks = createMemo(() => {\n const all = loadedWeeks();\n const anchor = monthRowOf(all, hostMonthKey());\n return mounted() || anchor === undefined ? all : all.slice(anchor);\n });\n const [scrollTop, setScrollTop] = createSignal(0);\n const [rowHeight, setRowHeight] = createSignal(80);\n const [viewHeight, setViewHeight] = createSignal(400);\n const [labelShown, setLabelShown] = createSignal(false);\n const [pulseKey, setPulseKey] = createSignal(\"\");\n let scroller: HTMLDivElement | undefined;\n let weekdayElement: HTMLDivElement | undefined;\n let ready = false;\n let positioned = false;\n let silentTop: number | null = null;\n let frame = 0;\n let labelTimer = 0;\n let reportTimer = 0;\n let queueTimer = 0;\n let glideTimer = 0;\n let arrivalTimer = 0;\n let pulseTimer = 0;\n /** The month that quick repeated steps head for; the next step and the arrows' links go on from it. */\n const [queuedMonth, setQueuedMonth] = createSignal<string | null>(null);\n let pendingTarget: string | null = null;\n let pendingOrigin: \"mount\" | \"host\" | -1 | 1 | null = null;\n let glideTarget: { week: string; offset: number; expires: number } | null = null;\n let pulseOnArrival = false;\n let reported = \"\";\n let reportedFocus = \"\";\n let askedEarlier = \"\";\n let askedLater = \"\";\n let exhaustedEarlier = \"\";\n let exhaustedLater = \"\";\n\n const scrollFocusDay = createMemo(() => {\n const first = focusMonthKey();\n const range = selection();\n const selected = range && range.last >= first ? (range.first > first ? range.first : first) : null;\n if (selected?.slice(0, 7) === first.slice(0, 7)) return selected;\n if (hostKey().slice(0, 7) === first.slice(0, 7)) return hostKey();\n return todayKey().slice(0, 7) === first.slice(0, 7) ? todayKey() : first;\n });\n const visibleRange = createMemo(() => {\n const weeks = trackWeeks();\n const rows = monthVisibleRows(scrollTop(), viewHeight(), rowHeight(), weeks.length);\n const first = weeks[rows.first] ?? focusMonthKey();\n return { first, last: addDayKeys(weeks[Math.max(rows.first, rows.end - 1)] ?? first, 6) };\n });\n const renderWindow = createMemo(\n () =>\n mounted()\n ? monthRenderWindow(scrollTop(), viewHeight(), rowHeight(), trackWeeks().length)\n : { first: 0, end: Math.min(trackWeeks().length, MONTH_ROW_BLOCK * 2) },\n undefined,\n { equals: (left, right) => left.first === right.first && left.end === right.end },\n );\n /** The window's weeks, and those of the focused day, the selection's moving end, and an open popover's day. */\n const renderedWeeks = createMemo(() => {\n const weeks = trackWeeks();\n const window = renderWindow();\n const keys = new Set(weeks.slice(window.first, window.end));\n for (const key of [focusKey(), focusedCellKey(), popover()?.anchor.dataset.calendarDayKey]) {\n const row = key ? monthRowOf(weeks, key) : undefined;\n if (row !== undefined) keys.add(weeks[row]!);\n }\n return [...keys].sort();\n });\n // Rows keep their elements, but the list moves a kept row when the window passes it, and a browser drops the focus\n // from an element that moves. The focused element takes it back once the rows are in place.\n let refocus: Element | null = null;\n createComputed(\n on(\n renderedWeeks,\n () => {\n const active = typeof document === \"undefined\" ? null : document.activeElement;\n refocus = active && scroller?.contains(active) ? active : null;\n },\n { defer: true },\n ),\n );\n createEffect(\n on(\n renderedWeeks,\n () => {\n const element = refocus;\n refocus = null;\n if (element instanceof HTMLElement && element.isConnected && document.activeElement !== element)\n element.focus({ preventScroll: true });\n },\n { defer: true },\n ),\n );\n const placeOfToday = (): TodayDirection => {\n const weeks = trackWeeks();\n const row = monthRowOf(weeks, todayKey());\n return row === undefined\n ? todayKey() < (weeks[0] ?? focusMonthKey())\n ? \"up\"\n : \"down\"\n : monthTodayDirection(row, scrollTop(), viewHeight(), rowHeight());\n };\n const measureScroll = () => {\n if (!scroller) return;\n const row = scroller.querySelector<HTMLElement>(\".k2b-calendar-month__week\");\n const height = row?.getBoundingClientRect().height;\n if (height && height > 0) setRowHeight(height);\n setViewHeight(Math.max(0, scroller.clientHeight - (weekdayElement?.getBoundingClientRect().height ?? 0)));\n };\n const loadMore = (edge: \"earlier\" | \"later\") => {\n if (!ready) return;\n const range = loadedRange();\n const asked = edge === \"earlier\" ? range.first : range.to;\n const loader = edge === \"earlier\" ? props.owner.onLoadEarlier : props.owner.onLoadLater;\n if (\n !loader ||\n (edge === \"earlier\" ? askedEarlier === asked || exhaustedEarlier === asked : askedLater === asked || exhaustedLater === asked)\n )\n return;\n if (edge === \"earlier\") askedEarlier = asked;\n else askedLater = asked;\n const result = loader();\n if (\n result !== null &&\n (typeof result === \"object\" || typeof result === \"function\") &&\n \"then\" in result &&\n typeof result.then === \"function\"\n ) {\n const settled = () => {\n if (!ready || (edge === \"earlier\" ? loadedRange().first : loadedRange().to) !== asked) return;\n if (edge === \"earlier\") exhaustedEarlier = asked;\n else exhaustedLater = asked;\n const target = pendingOrigin === (edge === \"earlier\" ? -1 : 1) ? pendingTarget : null;\n if (target) {\n pendingTarget = null;\n pendingOrigin = null;\n setQueuedMonth(null);\n window.clearTimeout(queueTimer);\n }\n if (edge === \"later\" && glideTarget?.expires === Number.POSITIVE_INFINITY) {\n glideTarget = null;\n pulseOnArrival = false;\n setQueuedMonth(null);\n for (const timer of [queueTimer, glideTimer, arrivalTimer]) window.clearTimeout(timer);\n readScroll();\n }\n if (target) props.goToDate?.(parseKey(target));\n };\n void Promise.resolve(result).then(settled, settled);\n }\n };\n /** Asks for more weeks near either end; weeks inserted above a running glide would move its way, so it waits. */\n const loadNearEdges = () => {\n if (!scroller) return;\n if (!glideTarget && scroller.scrollTop < MONTH_ROWS_IN_VIEW * rowHeight()) loadMore(\"earlier\");\n if (scroller.scrollTop + viewHeight() > (trackWeeks().length - MONTH_ROWS_IN_VIEW * 2) * rowHeight()) loadMore(\"later\");\n };\n const reportVisible = () => {\n if (!ready) return;\n const { first, last } = untrack(visibleRange);\n const focus = untrack(scrollFocusDay);\n const value = `${first}/${last}/${focus}`;\n if (reported === value) return;\n reported = value;\n window.clearTimeout(reportTimer);\n reportTimer = window.setTimeout(() => {\n reportedFocus = focus;\n props.owner.onVisibleDateChange?.(parseKey(first), parseKey(last), parseKey(focus));\n }, 250);\n };\n const keepLabel = () => {\n window.clearTimeout(labelTimer);\n labelTimer = window.setTimeout(() => setLabelShown(false), 650);\n };\n const readScroll = (showLabel = true) => {\n if (!scroller) return;\n const top = scroller.scrollTop;\n setScrollTop(top);\n const weeks = trackWeeks();\n const week = weeks[monthFocusRow(top, viewHeight(), rowHeight(), weeks.length)];\n if (week) {\n const next = monthOfWeek(week);\n if (next !== untrack(focusMonthKey)) {\n setFocusMonthKey(next);\n if (showLabel && ready) {\n setLabelShown(true);\n keepLabel();\n }\n }\n }\n reportVisible();\n };\n const pulseToday = () => {\n if (prefersReducedMotion()) return;\n setPulseKey(todayKey());\n window.clearTimeout(pulseTimer);\n pulseTimer = window.setTimeout(() => setPulseKey(\"\"), 1000);\n };\n const finishGlide = () => {\n if (!scroller) return;\n const target = glideTarget;\n const row = target ? monthRowOf(trackWeeks(), target.week) : undefined;\n // A clamped glide may still be waiting for more weeks below; scrollend is not arrival then.\n if (target && row !== undefined && Math.abs(scroller.scrollTop - (row * rowHeight() + target.offset)) > 1) return;\n glideTarget = null;\n if (pendingOrigin !== -1 && pendingOrigin !== 1) {\n setQueuedMonth(null);\n window.clearTimeout(queueTimer);\n }\n window.clearTimeout(glideTimer);\n window.clearTimeout(arrivalTimer);\n readScroll();\n // A glide that lands near an end asks for the next weeks there, as the reader's own scrolling does.\n if (target) loadNearEdges();\n if (pulseOnArrival) {\n pulseOnArrival = false;\n pulseToday();\n }\n };\n const cancelGlide = () => {\n if (!scroller) return;\n if (pendingOrigin === -1 || pendingOrigin === 1) {\n pendingTarget = null;\n pendingOrigin = null;\n setQueuedMonth(null);\n window.clearTimeout(queueTimer);\n }\n if (!glideTarget) return;\n // A reader's wheel or touch takes over from navigation, including any target waiting for more weeks.\n glideTarget = null;\n pulseOnArrival = false;\n setQueuedMonth(null);\n for (const timer of [queueTimer, glideTimer, arrivalTimer]) window.clearTimeout(timer);\n scroller.scrollTo({ top: scroller.scrollTop, behavior: \"instant\" });\n };\n const issueGlide = (top: number, smooth: boolean) => {\n if (!scroller) return;\n const maximum = Math.max(0, scroller.scrollHeight - scroller.clientHeight);\n const target = Math.max(0, Math.min(top, maximum));\n if (smooth && !prefersReducedMotion() && Math.abs(target - scroller.scrollTop) > viewHeight() * 3) {\n scroller.scrollTop = target - Math.sign(target - scroller.scrollTop) * viewHeight();\n readScroll();\n }\n scroller.scrollTo({ top: target, behavior: smooth && !prefersReducedMotion() ? \"smooth\" : \"instant\" });\n if (top > maximum + 1) loadMore(\"later\");\n if (!smooth || prefersReducedMotion()) {\n readScroll();\n finishGlide();\n }\n };\n const glide = (top: number, smooth = true) => {\n if (!scroller) return;\n const row = Math.max(0, Math.min(trackWeeks().length - 1, Math.floor(top / rowHeight())));\n const week = trackWeeks()[row];\n if (!week) return;\n // A target past the loaded weeks waits for them however long they take; the reader's own scrolling ends the wait.\n const waiting = top > scroller.scrollHeight - scroller.clientHeight + 1;\n glideTarget = { week, offset: top - row * rowHeight(), expires: waiting ? Number.POSITIVE_INFINITY : performance.now() + 1600 };\n window.clearTimeout(glideTimer);\n window.clearTimeout(arrivalTimer);\n if (!waiting)\n glideTimer = window.setTimeout(() => {\n glideTarget = null;\n pulseOnArrival = false;\n }, 1600);\n arrivalTimer = window.setTimeout(finishGlide, 900);\n issueGlide(top, smooth);\n };\n const positionMonth = (key: string, smooth = true, reveal = false) => {\n if (!continuous() || !loaded(key) || !scroller) return false;\n const weeks = trackWeeks();\n const first = monthRowOf(weeks, `${key.slice(0, 7)}-01`);\n const row = monthRowOf(weeks, key);\n if (first === undefined || row === undefined) return false;\n const top = first * rowHeight();\n glide(reveal ? (monthRevealTop(row, top, viewHeight(), rowHeight()) ?? top) : top, smooth);\n return true;\n };\n const goToMonth = (key: string) => positionMonth(key, true, true);\n const stepMonth = (direction: -1 | 1) => {\n if (!continuous() || !scroller) return false;\n const target = calendar.formatDateKey(\n calendar.addMonths(parseKey(queuedMonth() ?? focusMonthKey()), direction, dateConfig()),\n dateConfig(),\n );\n if (loaded(target)) {\n pendingTarget = null;\n pendingOrigin = null;\n if (!positionMonth(target)) return false;\n } else {\n // A month past the loaded weeks asks for them and waits; an end the host has reached goes through its navigation.\n const range = loadedRange();\n const later = direction === 1;\n const edge = later ? range.to : range.first;\n if (!(later ? props.owner.onLoadLater : props.owner.onLoadEarlier) || (later ? exhaustedLater : exhaustedEarlier) === edge)\n return false;\n pendingTarget = target;\n pendingOrigin = direction;\n loadMore(later ? \"later\" : \"earlier\");\n }\n // Instant positioning may finish during positionMonth; queue afterwards so rapid clicks still accumulate.\n setQueuedMonth(target);\n window.clearTimeout(queueTimer);\n // A glide that waits for more weeks keeps its month queued until it arrives or the reader scrolls.\n queueTimer = window.setTimeout(() => {\n if (pendingOrigin !== -1 && pendingOrigin !== 1 && glideTarget?.expires !== Number.POSITIVE_INFINITY) setQueuedMonth(null);\n }, 1200);\n return true;\n };\n const goToday = () => {\n if (!continuous() || !loaded(todayKey()) || !scroller) return false;\n pulseOnArrival = !prefersReducedMotion();\n if (positionMonth(todayKey(), true, true)) return true;\n pulseOnArrival = false;\n return false;\n };\n const revealDay = (key: string) => {\n const row = monthRowOf(trackWeeks(), key);\n if (row === undefined || !scroller) return;\n const top = monthRevealTop(row, scroller.scrollTop, viewHeight(), rowHeight());\n if (top !== undefined) glide(top);\n };\n const onScroll = () => {\n if (!ready || !scroller) return;\n // Initial positioning and range rebasing are not the reader asking for more weeks.\n if (silentTop !== null && Math.abs(scroller.scrollTop - silentTop) < 1) return;\n silentTop = null;\n if (untrack(labelShown)) keepLabel();\n if (!frame)\n frame = requestAnimationFrame(() => {\n frame = 0;\n readScroll();\n if (!scroller) return;\n loadNearEdges();\n });\n };\n // Capture the old track before render effects change its height, then restore the same week and pixel below.\n let previousWeeks: string[] = [];\n let savedAnchor: { week: string; delta: number } | null = null;\n createComputed(\n on(\n loadedWeeks,\n (weeks) => {\n if (!untrack(mounted) || !scroller) return;\n const top = scroller.scrollTop;\n const row = Math.floor(top / untrack(rowHeight));\n const week = previousWeeks[row];\n savedAnchor = week ? { week, delta: top - row * untrack(rowHeight) } : null;\n const next = week ? monthRowOf(weeks, week) : undefined;\n // Move the render window before DOM updates, so even a larger rebase retains the visible rows' elements.\n if (next !== undefined && savedAnchor) setScrollTop(next * untrack(rowHeight) + savedAnchor.delta);\n },\n { defer: true },\n ),\n );\n createEffect(\n on(\n loadedWeeks,\n () => {\n if (!untrack(mounted) || !scroller) return;\n measureScroll();\n previousWeeks = untrack(trackWeeks);\n const row = savedAnchor ? monthRowOf(previousWeeks, savedAnchor.week) : undefined;\n const top = row !== undefined && savedAnchor ? row * untrack(rowHeight) + savedAnchor.delta : scroller.scrollTop;\n // Weeks added below move nothing, and writing the same position would stop a glide on its way.\n const moved = Math.abs(scroller.scrollTop - top) >= 1;\n if (moved) scroller.scrollTop = top;\n if (pendingTarget && loaded(pendingTarget)) {\n const key = pendingTarget;\n pendingTarget = null;\n pendingOrigin = null;\n positioned = positionMonth(key, positioned) || positioned;\n if (pendingKey === key) {\n pendingKey = null;\n select(key);\n queueMicrotask(() => focusCell(key));\n }\n } else {\n if (pendingTarget && (pendingOrigin === -1 || pendingOrigin === 1)) loadMore(pendingOrigin === -1 ? \"earlier\" : \"later\");\n // A glide goes on after the weeks above moved it, and one that waited at the end goes on into the new weeks.\n if (glideTarget && performance.now() < glideTarget.expires && (moved || glideTarget.expires === Number.POSITIVE_INFINITY)) {\n const target = monthRowOf(previousWeeks, glideTarget.week);\n if (target !== undefined) issueGlide(target * untrack(rowHeight) + glideTarget.offset, true);\n }\n }\n savedAnchor = null;\n silentTop = scroller.scrollTop;\n readScroll(false);\n },\n { defer: true },\n ),\n );\n createEffect(\n on(\n hostKey,\n (key) => {\n if (!continuous() || !untrack(mounted) || !scroller) return;\n if (key === reportedFocus) {\n if (pendingOrigin === \"host\") {\n pendingTarget = null;\n pendingOrigin = null;\n }\n return;\n }\n pendingTarget = loaded(key) ? null : key;\n pendingOrigin = pendingTarget ? \"host\" : null;\n if (pendingTarget) return;\n const visible = untrack(visibleRange);\n if (key.slice(0, 7) !== untrack(focusMonthKey).slice(0, 7) || key < visible.first || key > visible.last) positionMonth(key);\n if (pendingKey === key) {\n pendingKey = null;\n select(key);\n queueMicrotask(() => focusCell(key));\n }\n },\n { defer: true },\n ),\n );\n createEffect(\n on(\n scrollFocusDay,\n () => {\n if (continuous()) reportVisible();\n },\n { defer: true },\n ),\n );\n // The scrolling starts once the grid is on the page, also when a host passes `range` only later.\n createEffect(\n on(continuous, (active) => {\n if (!active || !scroller) return;\n setMounted(true);\n measureScroll();\n previousWeeks = trackWeeks();\n const row = monthRowOf(previousWeeks, hostMonthKey());\n if (row !== undefined && loaded(hostKey())) scroller.scrollTop = row * rowHeight();\n // Too few weeks below the month, such as the days of another view while the month's own load, cannot put its\n // first week on top yet; the month goes there once its weeks arrive.\n positioned = row !== undefined && Math.abs(scroller.scrollTop - row * rowHeight()) < 1;\n if (!positioned) {\n pendingTarget = hostKey();\n pendingOrigin = \"mount\";\n }\n readScroll(false);\n silentTop = scroller.scrollTop;\n ready = true;\n reportVisible();\n scroller.addEventListener(\"scrollend\", finishGlide);\n const resize =\n typeof ResizeObserver === \"undefined\"\n ? undefined\n : new ResizeObserver(() => {\n if (!scroller) return;\n const height = untrack(rowHeight);\n const position = scroller.scrollTop / height;\n measureScroll();\n if (height !== untrack(rowHeight)) {\n scroller.scrollTop = position * untrack(rowHeight);\n if (glideTarget) {\n const target = monthRowOf(untrack(trackWeeks), glideTarget.week);\n if (target !== undefined) issueGlide(target * untrack(rowHeight) + glideTarget.offset, true);\n }\n silentTop = scroller.scrollTop;\n }\n readScroll(false);\n });\n resize?.observe(scroller);\n const element = scroller;\n onCleanup(() => {\n resize?.disconnect();\n element.removeEventListener(\"scrollend\", finishGlide);\n for (const timer of [labelTimer, reportTimer, queueTimer, glideTimer, arrivalTimer, pulseTimer]) window.clearTimeout(timer);\n if (frame) cancelAnimationFrame(frame);\n frame = 0;\n ready = false;\n setMounted(false);\n });\n }),\n );\n\n const visibleKeys = createMemo(() =>\n continuous()\n ? renderedWeeks().flatMap((key) => Array.from({ length: 7 }, (_, day) => addDayKeys(key, day)))\n : weeks().flatMap((week) => week.map((entry) => entry.key)),\n );\n const rovingKey = createMemo(() => {\n const keys = visibleKeys();\n const focus = focusKey() ?? (continuous() ? focusedCellKey() : null);\n if (focus && keys.includes(focus)) return focus;\n if (keys.includes(todayKey()) && (!continuous() || (todayKey() >= visibleRange().first && todayKey() <= visibleRange().last)))\n return todayKey();\n const first = calendar.formatDateKey(zonedMonthDate(month().year, month().month, dateConfig()), dateConfig());\n if (!continuous() || keys.includes(first)) return first;\n const visible = visibleRange();\n return (\n keys.find((key) => key.slice(0, 7) === first.slice(0, 7) && key >= visible.first && key <= visible.last) ??\n keys.find((key) => key >= visible.first && key <= visible.last) ??\n keys[0] ??\n first\n );\n });\n const dropRange = createMemo((): MonthSelection | null => {\n const preview = movePreview();\n if (!preview) return null;\n const keys = previewSegments(preview, visibleKeys().map(parseKey), dateConfig()).map((piece) => piece.dayKey);\n if (keys.length === 0) return null;\n keys.sort();\n return { first: keys[0]!, last: keys[keys.length - 1]! };\n });\n const within = (range: MonthSelection | null, key: string) => Boolean(range && key >= range.first && key <= range.last);\n /** Where a day sits in the selection: alone, at its start or end, or in between. */\n const selectionPart = (key: string) => {\n const range = selection();\n if (!range || !within(range, key)) return undefined;\n if (range.first === range.last) return \"single\";\n return key === range.first ? \"start\" : key === range.last ? \"end\" : \"middle\";\n };\n\n const select = (anchor: string | null, focus: string | null = anchor) => {\n setAnchorKey(anchor);\n setFocusKey(focus);\n };\n // Selection survives scrolling; only paging starts a month without it. Switching views clears the host's selection.\n createEffect(on(selection, (range) => props.owner.onSelectionChange?.(range ? rangeOf(range) : null), { defer: true }));\n onCleanup(() => {\n if (untrack(selection)) props.owner.onSelectionChange?.(null);\n });\n createEffect(on(selection, (range) => props.onFocusDay?.(range ? parseKey(range.first) : null)));\n createEffect(\n on(\n month,\n () => {\n if (continuous()) return;\n setPopover(null);\n const key = pendingKey;\n pendingKey = null;\n if (key && visibleKeys().includes(key)) {\n select(key);\n queueMicrotask(() => focusCell(key));\n } else select(null);\n },\n { defer: true },\n ),\n );\n\n const dayLabel = (day: Date) =>\n day.toLocaleDateString(dateConfig().locale ?? \"en\", {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"numeric\",\n timeZone: dateConfig().timeZone,\n });\n const shortDayLabel = (key: string, withMonth = true) =>\n parseKey(key).toLocaleDateString(dateConfig().locale ?? \"en\", {\n day: \"numeric\",\n ...(withMonth ? { month: \"short\" } : {}),\n timeZone: dateConfig().timeZone,\n });\n const monthDayLabel = (date: Date, withTime: boolean) =>\n date.toLocaleString(dateConfig().locale ?? \"en\", {\n month: \"long\",\n day: \"numeric\",\n ...(withTime ? { hour: \"2-digit\", minute: \"2-digit\" } : {}),\n timeZone: dateConfig().timeZone,\n });\n /** A long event names the days it spans; a one-day event keeps the chip's own title and time. */\n const itemLabel = (item: MonthItem): string | undefined => {\n if (item.firstKey === item.lastKey) return undefined;\n const allDay = Boolean(item.event.allDay);\n return calendarMessages().calendarEventTime({\n title: item.event.title,\n start: monthDayLabel(allDay ? parseKey(item.firstKey) : item.event.sourceStartDate, !allDay),\n end: monthDayLabel(allDay ? parseKey(item.lastKey) : item.event.sourceEndDate, !allDay),\n });\n };\n /** The start time before the title of a one-day entry; bars and all-day entries show none. */\n const leadingTime = (item: MonthItem) =>\n item.bar || item.event.allDay ? undefined : formatTime(item.event.sourceStartDate, dateConfig());\n /** The day at a torn end of a bar, with its month when that day lies outside the shown month. */\n const hintDate = (target: string) => ({\n day: Number(target.slice(8, 10)),\n month:\n Number(target.slice(0, 4)) === month().year && Number(target.slice(5, 7)) === month().month + 1\n ? undefined\n : parseKey(target)\n .toLocaleDateString(dateConfig().locale ?? \"en\", { month: \"short\", timeZone: dateConfig().timeZone })\n .replace(/\\.$/, \"\"),\n });\n const selectionHeading = (range: MonthSelection) => {\n if (range.first === range.last)\n return parseKey(range.first).toLocaleDateString(dateConfig().locale ?? \"en\", {\n weekday: \"long\",\n month: \"long\",\n day: \"numeric\",\n timeZone: dateConfig().timeZone,\n });\n const days = dayKeyNumber(range.last) - dayKeyNumber(range.first) + 1;\n return calendarMessages().calendarSelectedDays({ start: shortDayLabel(range.first), end: shortDayLabel(range.last), count: days });\n };\n const viewAvailable = (view: CalendarView) => !props.owner.views || props.owner.views.includes(view);\n const viewHref = (key: string, view: CalendarView) => (viewAvailable(view) ? props.owner.getDateHref?.(parseKey(key), view) : undefined);\n /** Whether the calendar can open another view at a day: through a link, or through the host's date change. */\n const canOpenView = (view: CalendarView) => viewAvailable(view) && Boolean(props.owner.getDateHref || props.owner.onDateChange);\n const openView = (key: string, view: CalendarView) => {\n const href = viewHref(key, view);\n if (href) followCalendarHref(props.owner, href);\n else openViewAt(props.owner, parseKey(key), view);\n };\n /** The calendar's own entries of the day menu, Open day and Open week, need no application entries. */\n const hasMenu = () => Boolean(props.owner.selectionMenu) || canOpenView(\"day\") || canOpenView(\"week\");\n\n /** The day cell under a point, from the cells' boxes: a bar lies over days that are not its parent. */\n const dayKeyAtPoint = (clientX: number, clientY: number): string | null => {\n for (const [key, cell] of cells) {\n if (!cell.isConnected) continue;\n const rect = cell.getBoundingClientRect();\n if (clientX >= rect.left && clientX < rect.right && clientY >= rect.top && clientY < rect.bottom) return key;\n }\n return null;\n };\n const focusCell = (key: string) => cells.get(key)?.focus({ preventScroll: true });\n /** Whether the focus is in the popover, or fell to the page as it hid: only then does a close return it. */\n const focusInPopover = () => popoverElement?.contains(document.activeElement) || document.activeElement === document.body;\n const closePopover = (restoreFocus = true) => {\n if (!popover()) return;\n setPopover(null);\n setCreateActive(false);\n if (restoreFocus) focusCell(rovingKey());\n };\n const popoverFocusable = () =>\n popoverElement?.querySelector<HTMLElement>(\"input,textarea,select,button,a[href],[tabindex]:not([tabindex='-1'])\") ?? null;\n\n /**\n * Opens the quick create at the selection. Quietly, it only shows beside the grid, which keeps the focus until the\n * person types or tabs into it; otherwise it takes the focus at once.\n */\n const openCreate = (range: MonthSelection, options: { active: boolean; create?: string }) => {\n if (!props.owner.renderQuickCreate) return false;\n const anchor = cells.get(focusKey() && within(range, focusKey()!) ? focusKey()! : range.last);\n if (!anchor) return false;\n setCreateActive(options.active);\n setPopover({ kind: \"create\", range, anchor, create: options.create });\n return true;\n };\n const activateCreate = () => {\n if (popover()?.kind !== \"create\") return false;\n setCreateActive(true);\n popoverFocusable()?.focus();\n return true;\n };\n /**\n * The day to create on without a selection. The month that scrolls takes the day it stands for, today or the 1st of\n * the month in focus, never a day the keyboard last visited in another month.\n */\n const unselectedKey = () => (continuous() ? scrollFocusDay() : rovingKey());\n /** Enter, a double-click, and N create on the selection, with the quick create or the host's own create action. */\n const createOnSelection = () => {\n const range = selection();\n if (!range) return;\n if (openCreate(range, { active: true })) return;\n if (props.owner.onSlotActivate) props.owner.onSlotActivate(rangeOf(range));\n };\n onMount(() =>\n props.register?.({\n quickCreate: (create) => {\n const range = selection() ?? { first: unselectedKey(), last: unselectedKey() };\n select(range.first, range.last);\n if (!openCreate(range, { active: true, create })) props.owner.onSlotActivate?.(rangeOf(range));\n },\n createTarget: () => rangeOf(selection() ?? { first: unselectedKey(), last: unselectedKey() }),\n typing: () => popover()?.kind === \"create\" && !createActive(),\n continuous,\n focusMonth: () => parseKey(focusMonthKey()),\n stepFrom: () => parseKey(queuedMonth() ?? focusMonthKey()),\n focusDay: () => parseKey(scrollFocusDay()),\n step: stepMonth,\n goTo: goToMonth,\n today: goToday,\n todayDirection: placeOfToday,\n }),\n );\n onCleanup(() => props.register?.(null));\n const openDayList = (key: string) => {\n const anchor = cells.get(key);\n if (!anchor) return;\n setCreateActive(true);\n setPopover({ kind: \"day\", dayKey: key, anchor });\n };\n /** A quiet quick create follows the selection; any other popover closes when the selection changes. */\n const followSelection = () => {\n const current = popover();\n const range = selection();\n if (!current) return;\n if (current.kind === \"create\" && !createActive() && range) openCreate(range, { active: false });\n else closePopover(false);\n };\n\n const pageTo = (target: string) => {\n const date = parseKey(target);\n const href = props.owner.getDateHref?.(date, \"month\");\n // Only a month that is on its way may select the day, so a host that cannot page never leaves one behind.\n if (props.owner.onDateChange) {\n pendingKey = target;\n props.owner.onDateChange(date, \"month\");\n } else if (href) {\n pendingKey = target;\n followCalendarHref(props.owner, href);\n }\n };\n const moveFocus = (key: string, extend: boolean) => {\n if (continuous() ? !loaded(key) : !visibleKeys().includes(key)) {\n pageTo(key);\n return;\n }\n if (extend) select(anchorKey() ?? focusKey() ?? key, key);\n else select(key);\n if (continuous()) {\n revealDay(key);\n queueMicrotask(() => focusCell(key));\n } else focusCell(key);\n followSelection();\n };\n const onCellKeyDown = (event: KeyboardEvent, key: string) => {\n if (event.target !== event.currentTarget || event.ctrlKey || event.metaKey || event.altKey) return;\n const current = popover();\n const quiet = current?.kind === \"create\" && !createActive();\n // The quiet quick create takes over once the person types or tabs into it. Space stays the grid's key for the day\n // list; N is a title's first letter like any other, as the quick create it would open is already there.\n if (quiet && ((event.key === \"Tab\" && !event.shiftKey) || (PRINTABLE_KEY.test(event.key) && event.key !== \" \"))) {\n const field = popoverFocusable();\n if (field) {\n if (event.key === \"Tab\") event.preventDefault();\n setCreateActive(true);\n field.focus();\n return;\n }\n }\n const day = parseKey(key);\n const shift = (days: number) => calendar.formatDateKey(calendar.addDays(day, days, dateConfig()), dateConfig());\n const weekday = (dayKeyNumber(key) - dayKeyNumber(calendar.formatDateKey(calendar.startOfWeek(day, dateConfig()), dateConfig()))) % 7;\n const target =\n event.key === \"ArrowLeft\"\n ? shift(-1)\n : event.key === \"ArrowRight\"\n ? shift(1)\n : event.key === \"ArrowUp\"\n ? shift(-7)\n : event.key === \"ArrowDown\"\n ? shift(7)\n : event.key === \"Home\"\n ? shift(-weekday)\n : event.key === \"End\"\n ? shift(6 - weekday)\n : null;\n if (target) {\n event.preventDefault();\n moveFocus(target, event.shiftKey);\n return;\n }\n if (event.key === \"PageUp\" || event.key === \"PageDown\") {\n event.preventDefault();\n const target = calendar.formatDateKey(addMonthsClamped(day, event.key === \"PageUp\" ? -1 : 1, dateConfig()), dateConfig());\n if (continuous() && loaded(target)) {\n moveFocus(target, event.shiftKey);\n // The month's first week goes on top, unless the day lies in a sixth week that would then stay out of view.\n goToMonth(target);\n } else pageTo(target);\n return;\n }\n if (event.key === \"Enter\" || ((event.key === \"n\" || event.key === \"N\") && !event.shiftKey)) {\n event.preventDefault();\n if (!within(selection(), key)) select(key);\n createOnSelection();\n return;\n }\n if (event.key === \" \") {\n event.preventDefault();\n if (!within(selection(), key)) select(key);\n openDayList(key);\n return;\n }\n if (event.key === \"Escape\") {\n if (current) closePopover(false);\n else if (selection()) select(null);\n else return;\n event.preventDefault();\n return;\n }\n // The keyboard opens the day's menu where the day is, as a right-click there would.\n if (hasMenu() && (event.key === \"ContextMenu\" || (event.shiftKey && event.key === \"F10\"))) {\n event.preventDefault();\n event.stopPropagation();\n menuKey = key;\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n event.currentTarget?.dispatchEvent(\n new MouseEvent(\"contextmenu\", { bubbles: true, cancelable: true, clientX: rect.left + 12, clientY: rect.top + 12 }),\n );\n }\n };\n\n const fromControl = (event: Event) =>\n event.target instanceof Element && Boolean(event.target.closest(\"a,button,[data-calendar-event],.k2b-calendar-month__lanes > *\"));\n const onCellClick = (event: MouseEvent, key: string) => {\n if (fromControl(event) || performance.now() < suppressClickUntil) return;\n // A second tap on the one selected day opens the quick create, as a double-click does with a mouse.\n if (lastPointer === \"touch\") {\n const range = selection();\n if (range && range.first === key && range.last === key && openCreate(range, { active: true })) return;\n select(key);\n closePopover(false);\n return;\n }\n if (event.shiftKey && anchorKey()) select(anchorKey(), key);\n else select(key);\n focusCell(key);\n const range = selection();\n if (range) openCreate(range, { active: false });\n };\n const onCellDoubleClick = (event: MouseEvent, key: string) => {\n if (fromControl(event) || lastPointer === \"touch\") return;\n event.preventDefault();\n if (!within(selection(), key)) select(key);\n if (popover()?.kind === \"create\") activateCreate();\n else createOnSelection();\n };\n /** The day under the pointer: a bar that spans several days sits in the cell of its first day. */\n const pressedKey = (event: MouseEvent, key: string) => dayKeyAtPoint(event.clientX, event.clientY) ?? key;\n const onCellPointerDown = (event: PointerEvent, key: string) => {\n lastPointer = event.pointerType;\n // The menu acts on the pressed day, or on the selection when the press is inside it.\n menuKey = pressedKey(event, key);\n if (event.pointerType !== \"mouse\" || event.button !== 0 || event.shiftKey || fromControl(event)) return;\n cancelInteraction?.();\n cancelInteraction = startCalendarPointerSession({\n event,\n scrollContainer: continuous() ? scroller : undefined,\n // A drag along the last row on screen selects its days; the view scrolls once the pointer came from inside.\n armAutoScroll: true,\n resolve: (clientX, clientY) => dayKeyAtPoint(clientX, clientY),\n onActivate: () => {\n suppressClickUntil = performance.now() + 400;\n closePopover(false);\n select(key);\n },\n onPreview: (current) => select(key, current),\n onCommit: (current) => {\n // The click that ends a long drag, such as one that scrolled the view, must not select the pressed day again.\n suppressClickUntil = performance.now() + 400;\n select(key, current);\n focusCell(current);\n const range = orderedSelection(key, current);\n afterPointerRelease(() => openCreate(range, { active: range.first !== range.last }));\n },\n onCancel: () => select(key),\n });\n };\n const onMenuOpen = () => {\n closePopover(false);\n const key = menuKey;\n if (key && !within(selection(), key)) select(key);\n };\n // Until a day is selected, the menu acts on the day that takes focus, so it is never empty.\n const menuItems = createMemo((): DropdownItem[] => {\n if (!hasMenu()) return [];\n const range = selection() ?? { first: unselectedKey(), last: unselectedKey() };\n const own =\n props.owner.selectionMenu?.(rangeOf(range), {\n quickCreate: (create) => {\n select(range.first, range.last);\n if (!openCreate(range, { active: true, create })) props.owner.onSlotActivate?.(rangeOf(range));\n },\n }) ?? [];\n const actions = own.filter((item): item is DropdownAction | DropdownChoice => !(\"items\" in item));\n const sections = own.filter((item): item is DropdownSection => \"items\" in item);\n const navigation: DropdownAction[] = [\n ...(canOpenView(\"day\")\n ? [{ label: calendarMessages().calendarOpenDay, icon: \"ti ti-zoom-in\", action: () => openView(range.first, \"day\") }]\n : []),\n ...(canOpenView(\"week\")\n ? [{ label: calendarMessages().calendarOpenWeek, icon: \"ti ti-calendar-week\", action: () => openView(range.first, \"week\") }]\n : []),\n ...(range.first !== range.last\n ? [{ label: calendarMessages().calendarClearSelection, icon: \"ti ti-x\", action: () => select(null) }]\n : []),\n ];\n const groups: DropdownSection[] = [{ items: actions }, ...sections, { items: navigation }].filter(\n (section) => section.items.length > 0,\n );\n // The first group names the days the menu acts on, also when the calendar's own entries are all it has.\n const [first, ...rest] = groups;\n return first && !first.sectionLabel ? [{ ...first, sectionLabel: selectionHeading(range) }, ...rest] : groups;\n });\n\n const clearMove = () => {\n setMovePreview(null);\n setMovingEventId(\"\");\n };\n const startMove = (pointerEvent: PointerEvent, item: MonthItem, markDragged: () => void) => {\n if (!props.owner.onEventDrop) return;\n const event = item.event;\n const grabbed = dayKeyAtPoint(pointerEvent.clientX, pointerEvent.clientY) ?? item.firstKey;\n const firstDay = startOfDay(event.sourceStartDate, dateConfig());\n cancelInteraction?.();\n cancelInteraction = startCalendarPointerSession({\n event: pointerEvent,\n scrollContainer: continuous() ? scroller : undefined,\n armAutoScroll: true,\n resolve: (clientX, clientY) => {\n const key = dayKeyAtPoint(clientX, clientY);\n if (!key) return null;\n // The event moves by as many days as the pointer, wherever on the bar it was grabbed.\n const day = calendar.addDays(firstDay, dayKeyNumber(key) - dayKeyNumber(grabbed), dateConfig());\n return { id: event.id, title: event.title, ...moveEventToDay(event, day, dateConfig()) };\n },\n onActivate: () => {\n markDragged();\n suppressClickUntil = performance.now() + 400;\n closePopover(false);\n setMovingEventId(event.id);\n },\n onPreview: setMovePreview,\n onCommit: (next) => {\n // The click that ends a long move, such as one that scrolled the view, must not open the entry.\n markDragged();\n suppressClickUntil = performance.now() + 400;\n clearMove();\n if (eventTimeChanged(event, next)) props.owner.onEventDrop?.(event, next);\n },\n onCancel: clearMove,\n });\n };\n\n // Each week row measures the room below its day numbers; the rows only resize with the grid, never with content.\n let observer: ResizeObserver | undefined;\n const lanesOf = new WeakMap<Element, number>();\n const measure = (element: Element, week: number) => {\n const style = getComputedStyle(element);\n const rootSize = Number.parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;\n const capacity = monthLaneCapacity(element.clientHeight, MONTH_LANE_REM * rootSize, MONTH_LANE_GAP_REM * rootSize);\n setCapacities((current) => {\n if (current[week] === capacity) return current;\n const next = [...current];\n next[week] = capacity;\n return next;\n });\n if (week === 0) {\n setCellWidth(element.clientWidth);\n setBarFont(`600 ${0.6875 * rootSize}px ${style.fontFamily}`);\n }\n };\n const observeLanes = (element: HTMLElement, week: number) => {\n lanesOf.set(element, week);\n if (typeof ResizeObserver === \"undefined\") return;\n observer ??= new ResizeObserver((entries) => {\n for (const entry of entries) {\n const index = lanesOf.get(entry.target);\n if (index !== undefined) measure(entry.target, index);\n }\n });\n observer.observe(element);\n onCleanup(() => observer?.unobserve(element));\n };\n /** A date hint shows only when the bar holds its title and the hint whole; screen readers get the range anyway. */\n const hintFits = (title: string, hint: string, span: number) => {\n const width = cellWidth();\n const font = barFont();\n if (width <= 0 || !font) return false;\n const rootSize = Number.parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;\n return textWidth(title, font) + textWidth(hint, font) + MONTH_HINT_SLACK_REM * rootSize <= span * width;\n };\n\n createEffect(() => {\n const current = popover();\n const element = popoverElement;\n if (!element) return;\n if (!current) {\n if (element.matches(\":popover-open\")) element.hidePopover();\n return;\n }\n if (!element.matches(\":popover-open\")) element.showPopover();\n const focus = untrack(createActive);\n queueMicrotask(() => {\n if (popover() !== current || !element.isConnected) return;\n placeCalendarPopover(current.anchor, element);\n if (focus) popoverFocusable()?.focus();\n });\n });\n onMount(() => {\n const reposition = () => {\n const current = popover();\n if (current && popoverElement) placeCalendarPopover(current.anchor, popoverElement);\n };\n window.addEventListener(\"resize\", reposition);\n window.addEventListener(\"scroll\", reposition, true);\n onCleanup(() => {\n window.removeEventListener(\"resize\", reposition);\n window.removeEventListener(\"scroll\", reposition, true);\n });\n });\n onCleanup(() => {\n cancelInteraction?.();\n observer?.disconnect();\n });\n\n const dayEntries = (dayKey: string) => items().filter((item) => item.days.has(dayKey));\n /** Every bar of a long entry lights up with the one under the pointer. */\n const linkProps = (item: MonthItem) => ({\n onPointerEnter: (event: PointerEvent) => {\n if (event.pointerType === \"mouse\") setLinkedItem(item.key);\n },\n onPointerLeave: () => {\n if (linkedItem() === item.key) setLinkedItem(\"\");\n },\n });\n\n const weekRow = (week: () => { day: Date; key: string }[], weekIndex: () => number) => {\n const layout = createMemo(() =>\n layoutMonthWeek(\n week().map((entry) => entry.key),\n items().map((item) => ({ item, firstKey: item.firstKey, lastKey: item.lastKey, bar: item.bar })),\n ),\n );\n // The continuous rows are all as high as the first, so they share its measured capacity.\n const capacity = () => capacities()[continuous() ? 0 : weekIndex()] ?? MONTH_DEFAULT_LANES;\n const fit = createMemo(() => fitMonthWeek(layout(), capacity()));\n const weekHref = () => viewHref(week()[0]!.key, \"week\");\n const weekNumber = () => zonedWeekNumber(week()[0]!.day, dateConfig());\n return (\n <div\n class=\"k2b-calendar-month__week\"\n role=\"row\"\n data-week-key={continuous() ? week()[0]?.key : undefined}\n // Only some weeks render, and not in their order, so each continuous row names its place below the weekdays.\n aria-rowindex={continuous() ? weekIndex() + 2 : undefined}\n style={continuous() ? { \"--k2b-calendar-week-index\": String(weekIndex()) } : undefined}\n data-week-numbers={props.owner.withWeekNumbers ? \"true\" : undefined}\n >\n <Show when={props.owner.withWeekNumbers}>\n <div class=\"k2b-calendar-month__week-number\" role=\"rowheader\">\n <Show\n when={weekHref()}\n fallback={\n <Show when={canOpenView(\"week\")} fallback={weekNumber()}>\n <button\n type=\"button\"\n class=\"k2b-calendar-month__week-link\"\n tabIndex={-1}\n title={calendarMessages().calendarOpenWeekNumber({ week: weekNumber() })}\n aria-label={calendarMessages().calendarOpenWeekNumber({ week: weekNumber() })}\n onClick={() => openView(week()[0]!.key, \"week\")}\n >\n {weekNumber()}\n </button>\n </Show>\n }\n >\n {(href) => (\n <CalendarNavigationLink\n owner={props.owner}\n href={href()}\n anchorProps={{\n class: \"k2b-calendar-month__week-link\",\n tabIndex: -1,\n title: calendarMessages().calendarOpenWeekNumber({ week: weekNumber() }),\n \"aria-label\": calendarMessages().calendarOpenWeekNumber({ week: weekNumber() }),\n }}\n >\n {weekNumber()}\n </CalendarNavigationLink>\n )}\n </Show>\n </div>\n </Show>\n <For each={week()}>\n {({ day, key }, column) => {\n const dayBadge = props.owner.dayBadges?.[key];\n const sameMonth = () => calendar.isSameMonth(day, continuous() ? parseKey(focusMonthKey()) : props.date, dateConfig());\n const label = dayLabel(day);\n const bars = createMemo(() => fit().bars.filter((bar) => bar.startColumn === column()));\n const cell = () => fit().cells[column()] ?? { top: 0, shown: [], hidden: 0 };\n return (\n <div\n ref={(element) => {\n cells.set(key, element);\n onCleanup(() => {\n if (cells.get(key) === element) cells.delete(key);\n });\n }}\n class=\"k2b-calendar-month__day\"\n role=\"gridcell\"\n tabIndex={rovingKey() === key ? 0 : -1}\n aria-label={label}\n aria-selected={within(selection(), key) ? \"true\" : \"false\"}\n aria-current={key === todayKey() ? \"date\" : undefined}\n data-calendar-day-key={key}\n data-outside={!sameMonth() ? \"true\" : undefined}\n data-month-first={continuous() && key.endsWith(\"-01\") ? \"true\" : undefined}\n data-month-top={continuous() && Number(key.slice(8)) <= 7 ? \"true\" : undefined}\n data-weekend={isWeekendKey(key, dateConfig().locale) ? \"true\" : undefined}\n data-past={key < todayKey() ? \"true\" : undefined}\n data-selected={selectionPart(key)}\n data-drop-preview={within(dropRange(), key) ? \"true\" : undefined}\n onClick={(event) => onCellClick(event, key)}\n onDblClick={(event) => onCellDoubleClick(event, key)}\n onPointerDown={(event) => onCellPointerDown(event, key)}\n onContextMenu={(event) => {\n // The pressed day takes the focus, so closing the menu with Escape returns there.\n menuKey = pressedKey(event, key);\n if (hasMenu()) focusCell(menuKey);\n }}\n onKeyDown={(event) => onCellKeyDown(event, key)}\n >\n <div class=\"k2b-calendar-month__day-header\">\n <span\n class=\"k2b-calendar-month__day-number\"\n data-pulse={continuous() && pulseKey() === key ? \"true\" : undefined}\n data-today={key === todayKey() ? \"true\" : undefined}\n data-outside={!sameMonth() ? \"true\" : undefined}\n >\n {continuous() && key.endsWith(\"-01\")\n ? shortDayLabel(key).replace(/\\.$/, \"\")\n : calendar.formatDayNumber(day, dateConfig())}\n </span>\n <Show when={dayBadge}>\n {(badge) => (\n <span class=\"k2b-calendar-month__badge\">\n <Show when={badge().icon}>{(icon) => <i class={`k2b-calendar-month__badge-icon ti ti-${icon()}`} />}</Show>\n {badge().label}\n </span>\n )}\n </Show>\n </div>\n <div\n class=\"k2b-calendar-month__lanes\"\n ref={(element) => {\n if (column() === 0) observeLanes(element, continuous() ? 0 : weekIndex());\n }}\n >\n <For each={bars()}>\n {(bar) => {\n const span = bar.endColumn - bar.startColumn + 1;\n const startHint = () => {\n if (!bar.continuesBefore) return undefined;\n const hint = calendarMessages().calendarContinuesFrom(hintDate(bar.item.firstKey));\n return hintFits(bar.item.event.title, hint, span) ? hint : undefined;\n };\n const endHint = () => {\n if (!bar.continuesAfter) return undefined;\n const hint = calendarMessages().calendarContinuesUntil(hintDate(bar.item.lastKey));\n return hintFits(`${bar.item.event.title}${startHint() ?? \"\"}`, hint, span) ? hint : undefined;\n };\n return (\n <div\n class=\"k2b-calendar-month__segment\"\n style={{ \"--k2b-calendar-span\": String(span), \"--k2b-calendar-row\": String(bar.lane) }}\n data-bar=\"true\"\n data-linked={linkedItem() === bar.item.key && bar.item.firstKey !== bar.item.lastKey ? \"true\" : undefined}\n data-continues-before={bar.continuesBefore ? \"true\" : undefined}\n data-continues-after={bar.continuesAfter ? \"true\" : undefined}\n {...linkProps(bar.item)}\n >\n <EventChip\n event={bar.item.event}\n owner={props.owner}\n href={eventHref(props.owner, bar.item.event)}\n label={itemLabel(bar.item)}\n compact\n bar\n continuesBefore={bar.continuesBefore}\n continuesAfter={bar.continuesAfter}\n hintStart={startHint()}\n hintEnd={endHint()}\n moving={movingEventId() === bar.item.event.id}\n onMovePointerDown={\n props.owner.onEventDrop\n ? (pointerEvent, markDragged) => startMove(pointerEvent, bar.item, markDragged)\n : undefined\n }\n />\n </div>\n );\n }}\n </For>\n <For each={cell().shown}>\n {(item, index) => (\n <div\n class=\"k2b-calendar-month__segment\"\n style={{ \"--k2b-calendar-span\": \"1\", \"--k2b-calendar-row\": String(cell().top + index()) }}\n >\n <EventChip\n event={item.event}\n owner={props.owner}\n href={eventHref(props.owner, item.event)}\n compact\n leadingTime={leadingTime(item)}\n moving={movingEventId() === item.event.id}\n onMovePointerDown={\n props.owner.onEventDrop ? (pointerEvent, markDragged) => startMove(pointerEvent, item, markDragged) : undefined\n }\n />\n </div>\n )}\n </For>\n <Show when={cell().hidden > 0}>\n <button\n type=\"button\"\n class=\"k2b-calendar-month__more\"\n tabIndex={-1}\n style={{ \"--k2b-calendar-row\": String(cell().top + cell().shown.length) }}\n aria-label={calendarMessages().calendarMoreEventsOn({ count: cell().hidden, label })}\n aria-haspopup=\"dialog\"\n aria-expanded={(() => {\n const current = popover();\n return current?.kind === \"day\" && current.dayKey === key;\n })()}\n onClick={() => {\n const current = popover();\n if (current?.kind === \"day\" && current.dayKey === key) closePopover(false);\n else openDayList(key);\n }}\n >\n <span class=\"k2b-calendar-month__more-long\">{calendarMessages().calendarMoreEvents({ count: cell().hidden })}</span>\n <span class=\"k2b-calendar-month__more-short\">+{cell().hidden}</span>\n </button>\n </Show>\n </div>\n </div>\n );\n }}\n </For>\n </div>\n );\n };\n\n const weekdayRow = () => (\n <div\n ref={weekdayElement}\n class=\"k2b-calendar-month__weekdays\"\n role=\"row\"\n data-week-numbers={props.owner.withWeekNumbers ? \"true\" : undefined}\n >\n <Show when={props.owner.withWeekNumbers}>\n <div class=\"k2b-calendar-month__weekday\" role=\"columnheader\">\n {calendarMessages().weekShort}\n </div>\n </Show>\n <For each={weekdays()}>\n {(day, index) => (\n <div class=\"k2b-calendar-month__weekday\" role=\"columnheader\" data-weekend={weekendColumn(index()) ? \"true\" : undefined}>\n {day}\n </div>\n )}\n </For>\n </div>\n );\n\n const grid = () => (\n <div\n class=\"k2b-calendar-month\"\n role=\"grid\"\n aria-label={formatMonth(props.date, dateConfig())}\n aria-multiselectable=\"true\"\n data-lanes=\"true\"\n style={{\n \"grid-template-rows\": `auto repeat(${weeks().length}, minmax(5rem, 1fr))`,\n \"--k2b-calendar-lane\": `${MONTH_LANE_REM}rem`,\n \"--k2b-calendar-lane-gap\": `${MONTH_LANE_GAP_REM}rem`,\n }}\n >\n {weekdayRow()}\n <For each={weeks()}>{(week, index) => weekRow(() => week, index)}</For>\n </div>\n );\n\n const continuousRow = (key: string) => {\n const days = createMemo(() =>\n Array.from({ length: 7 }, (_, offset) => {\n const dayKey = addDayKeys(key, offset);\n return { day: parseKey(dayKey), key: dayKey };\n }),\n );\n return weekRow(days, () => monthRowOf(trackWeeks(), key) ?? 0);\n };\n const continuousGrid = () => (\n <div class=\"k2b-calendar-month-viewport\">\n <div\n ref={scroller}\n class=\"k2b-calendar-month\"\n role=\"grid\"\n aria-label={formatMonth(parseKey(focusMonthKey()), dateConfig())}\n aria-multiselectable=\"true\"\n data-lanes=\"true\"\n data-continuous=\"true\"\n aria-rowcount={trackWeeks().length + 1}\n onScroll={onScroll}\n onWheel={cancelGlide}\n onPointerDown={cancelGlide}\n onFocusIn={(event) => {\n const target = event.target;\n if (!(target instanceof Element)) return;\n const key = target.closest(\"[data-calendar-day-key]\")?.getAttribute(\"data-calendar-day-key\");\n if (key) setFocusedCellKey(key);\n }}\n style={{ \"--k2b-calendar-lane\": `${MONTH_LANE_REM}rem`, \"--k2b-calendar-lane-gap\": `${MONTH_LANE_GAP_REM}rem` }}\n >\n {weekdayRow()}\n <div class=\"k2b-calendar-month__track\" role=\"rowgroup\" style={{ \"--k2b-calendar-weeks\": String(trackWeeks().length) }}>\n <For each={renderedWeeks()}>{continuousRow}</For>\n </div>\n </div>\n <div class=\"k2b-calendar-month__scroll-label\" aria-hidden=\"true\" data-show={labelShown() ? \"true\" : \"false\"}>\n {formatMonth(parseKey(focusMonthKey()), dateConfig())}\n </div>\n </div>\n );\n\n const dayList = (dayKey: string) => {\n const day = parseKey(dayKey);\n const href = viewHref(dayKey, \"day\");\n // Read where it renders, so a refresh while the list is open updates it as it does the grid.\n const entries = () => dayEntries(dayKey);\n return (\n <div class=\"k2b-calendar-day-list\">\n <div class=\"k2b-calendar-day-list__title\">{dayLabel(day)}</div>\n <Show\n when={entries().length > 0}\n fallback={<p class=\"k2b-calendar-day-list__empty\">{calendarMessages().calendarNothingPlanned}</p>}\n >\n <ul class=\"k2b-calendar-day-list__events\">\n <For each={entries()}>\n {(item) => (\n <li>\n <EventChip\n event={item.event}\n owner={props.owner}\n href={eventHref(props.owner, item.event)}\n label={itemLabel(item)}\n compact\n bar={item.bar}\n leadingTime={leadingTime(item)}\n />\n </li>\n )}\n </For>\n </ul>\n </Show>\n <div class=\"k2b-calendar-day-list__actions\">\n <Show\n when={href}\n fallback={\n <Show when={canOpenView(\"day\")}>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => openView(dayKey, \"day\")}>\n <i class=\"ti ti-zoom-in\" aria-hidden=\"true\" />\n {calendarMessages().calendarOpenDay}\n </Button>\n </Show>\n }\n >\n {(dayHref) => (\n <CalendarNavigationLink\n owner={props.owner}\n href={dayHref()}\n anchorProps={{ class: \"k2b-button\", \"data-variant\": \"ghost\", \"data-size\": \"sm\" }}\n >\n <i class=\"ti ti-zoom-in\" aria-hidden=\"true\" />\n {calendarMessages().calendarOpenDay}\n </CalendarNavigationLink>\n )}\n </Show>\n <Show when={props.owner.renderQuickCreate}>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => {\n select(dayKey);\n openCreate({ first: dayKey, last: dayKey }, { active: true });\n }}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n {calendarMessages().calendarNewEvent}\n </Button>\n </Show>\n </div>\n </div>\n );\n };\n\n const viewGrid = () => (continuous() ? continuousGrid() : grid());\n return (\n <>\n <Show when={hasMenu()} fallback={viewGrid()}>\n <GestureMenu\n items={menuItems()}\n label={calendarMessages().calendarSelectionActions}\n tabIndex={-1}\n onOpen={onMenuOpen}\n class=\"k2b-calendar-month-menu\"\n >\n {viewGrid()}\n </GestureMenu>\n </Show>\n <div\n ref={popoverElement}\n class=\"k2b-calendar-popover\"\n popover=\"auto\"\n role=\"dialog\"\n aria-label={(() => {\n const current = popover();\n if (current?.kind === \"day\") return dayLabel(parseKey(current.dayKey));\n return calendarMessages().calendarQuickCreate;\n })()}\n data-kind={popover()?.kind}\n data-quiet={popover()?.kind === \"create\" && !createActive() ? \"true\" : undefined}\n onFocusIn={() => setCreateActive(true)}\n onToggle={(event) => {\n // A late close of the popover that another opening already replaced keeps the new one. Focus returns to the\n // grid only from inside the popover, never from what a click outside it chose.\n if (event.newState !== \"closed\" || !popover() || event.currentTarget.matches(\":popover-open\")) return;\n closePopover(focusInPopover());\n }}\n >\n {/* Keyed: another day or another selection replaces the content while the popover stays open. A late close, such\n as after a slow save, closes only the quick create that asked for it. */}\n <Show when={popover()} keyed>\n {(value) =>\n value.kind === \"create\"\n ? props.owner.renderQuickCreate?.(rangeOf(value.range), {\n create: value.create,\n close: () => {\n if (popover() === value) closePopover(focusInPopover());\n },\n })\n : dayList(value.dayKey)\n }\n </Show>\n </div>\n </>\n );\n};\n\nconst TimeGridView = (props: {\n owner: CalendarOwner;\n date: Date;\n now: Date;\n events: NormalizedEvent[];\n labels: Required<CalendarLabels>;\n days: Date[];\n}): JSX.Element => {\n const calendarMessages = useCalendarMessages();\n const dateConfig = createMemo(() => ownerDateConfig(props.owner));\n const gridStartHour = () => props.owner.visibleStartHour ?? 0;\n const gridEndHour = () => props.owner.visibleEndHour ?? 23;\n const businessStartHour = () => props.owner.startHour ?? 8;\n const businessEndHour = () => props.owner.endHour ?? 18;\n const hours = createMemo(() => Array.from({ length: gridEndHour() - gridStartHour() + 1 }, (_, index) => gridStartHour() + index));\n const [timePreview, setTimePreview] = createSignal<CalendarPreview | null>(null);\n const [movingEventId, setMovingEventId] = createSignal(\"\");\n const [expandedOverflow, setExpandedOverflow] = createSignal(\"\");\n let scrollContainer: HTMLDivElement | undefined;\n let timeGrid: HTMLDivElement | undefined;\n let timeGutter: HTMLDivElement | undefined;\n let daysRow: HTMLDivElement | undefined;\n let allDayRow: HTMLDivElement | undefined;\n let defaultHourMarker: HTMLDivElement | undefined;\n let cancelInteraction: (() => void) | undefined;\n let suppressSlotClickUntil = 0;\n const slotEnd = (start: Date) => addMinutes(start, 60);\n const previewEvents = createMemo(() => previewSegments(timePreview(), props.days, dateConfig()));\n const eventsByDay = createMemo(() => {\n const grouped = new Map<string, { allDay: NormalizedEvent[]; timed: NormalizedEvent[] }>();\n for (const event of props.events) {\n const bucket = grouped.get(event.dayKey) ?? { allDay: [], timed: [] };\n (event.allDay ? bucket.allDay : bucket.timed).push(event);\n grouped.set(event.dayKey, bucket);\n }\n return grouped;\n });\n const clearInteraction = () => {\n setTimePreview(null);\n setMovingEventId(\"\");\n };\n const dayAtPoint = (clientX: number, clientY: number): Date | null => {\n const target = document.elementFromPoint(clientX, clientY)?.closest<HTMLElement>(\"[data-calendar-day-key]\");\n const dayKey = target?.dataset.calendarDayKey;\n return dayKey ? calendar.parseCalendarDate(dayKey, dateConfig()) : null;\n };\n const timeAtPoint = (clientX: number, clientY: number): Date | null => {\n if (!timeGrid || !timeGutter) return null;\n const gridRect = timeGrid.getBoundingClientRect();\n const gutterRect = timeGutter.getBoundingClientRect();\n // The gutter stays in view while the days scroll sideways under it, so the days start one gutter after the grid.\n if (clientX < gutterRect.right) return null;\n const daysLeft = gridRect.left + gutterRect.width;\n const dayIndex = calendarDayIndexAtPoint(clientX, daysLeft, gridRect.right - daysLeft, props.days.length);\n if (dayIndex === null) return null;\n const minute = Math.min(\n gridEndHour() * 60 + 45,\n calendarMinuteAtPoint(clientY, gridRect.top, gridRect.height, gridStartHour(), gridEndHour()),\n );\n return zonedMinuteSlot(props.days[dayIndex]!, minute, dateConfig());\n };\n const beginInteraction = (options: Parameters<typeof startCalendarPointerSession<CalendarPreview>>[0]) => {\n cancelInteraction?.();\n cancelInteraction = startCalendarPointerSession(options);\n };\n const startTimedMove = (pointerEvent: PointerEvent, event: NormalizedEvent, markDragged: () => void) => {\n if (!props.owner.onEventDrop) return;\n const pointerStart = timeAtPoint(pointerEvent.clientX, pointerEvent.clientY) ?? event.sourceStartDate;\n const duration = Math.max(15 * 60_000, event.sourceEndDate.getTime() - event.sourceStartDate.getTime());\n const offsetMinutes = Math.max(\n 0,\n Math.min(duration / 60_000, Math.round((pointerStart.getTime() - event.sourceStartDate.getTime()) / 900_000) * 15),\n );\n beginInteraction({\n event: pointerEvent,\n scrollContainer,\n resolve: (clientX, clientY) => {\n const pointer = timeAtPoint(clientX, clientY);\n if (!pointer) return null;\n const start = new Date(pointer.getTime() - offsetMinutes * 60_000);\n return { id: event.id, title: event.title, start, end: new Date(start.getTime() + duration), allDay: false };\n },\n onActivate: () => {\n markDragged();\n suppressSlotClickUntil = performance.now() + 400;\n setMovingEventId(event.id);\n },\n onPreview: setTimePreview,\n onCommit: (next) => {\n clearInteraction();\n if (eventTimeChanged(event, next)) props.owner.onEventDrop?.(event, next);\n },\n onCancel: clearInteraction,\n });\n };\n const startAllDayMove = (pointerEvent: PointerEvent, event: NormalizedEvent, markDragged: () => void) => {\n if (!props.owner.onEventDrop) return;\n beginInteraction({\n event: pointerEvent,\n resolve: (clientX, clientY) => {\n const day = dayAtPoint(clientX, clientY);\n return day ? { id: event.id, title: event.title, ...moveEventTo(event, startOfDay(day, dateConfig()), true, dateConfig()) } : null;\n },\n onActivate: () => {\n markDragged();\n suppressSlotClickUntil = performance.now() + 400;\n setMovingEventId(event.id);\n },\n onPreview: setTimePreview,\n onCommit: (next) => {\n clearInteraction();\n if (eventTimeChanged(event, next)) props.owner.onEventDrop?.(event, next);\n },\n onCancel: clearInteraction,\n });\n };\n const startRange = (pointerEvent: PointerEvent) => {\n if (!props.owner.onSlotActivate || pointerEvent.pointerType === \"touch\") return;\n const anchor = timeAtPoint(pointerEvent.clientX, pointerEvent.clientY);\n if (!anchor) return;\n beginInteraction({\n event: pointerEvent,\n scrollContainer,\n resolve: (clientX, clientY) => {\n const current = timeAtPoint(clientX, clientY);\n if (!current) return null;\n const start = current < anchor ? current : anchor;\n const endBase = current < anchor ? anchor : current;\n return { id: \"calendar-create-preview\", start, end: addMinutes(endBase, 15), allDay: false };\n },\n onActivate: () => {\n suppressSlotClickUntil = performance.now() + 400;\n },\n onPreview: setTimePreview,\n onCommit: (next) => {\n clearInteraction();\n props.owner.onSlotActivate?.(next);\n },\n onCancel: clearInteraction,\n });\n };\n const timeRangeLayout = (startDate: Date, endDate: Date) => {\n const start = zonedHour(startDate, dateConfig());\n const end = zonedHour(endDate, dateConfig());\n const visibleStart = Math.max(gridStartHour(), start);\n const visibleEnd = Math.min(gridEndHour() + 1, end);\n const total = Math.max(1, gridEndHour() - gridStartHour() + 1);\n return {\n top: Math.max(0, ((visibleStart - gridStartHour()) / total) * 100),\n height: Math.max(1.25, ((visibleEnd - visibleStart) / total) * 100),\n };\n };\n const eventLayout = (event: NormalizedEvent) => timeRangeLayout(event.startDate, event.endDate);\n const isDayView = () => props.days.length === 1;\n const visibleLaneCount = (lanes: number) => (isDayView() ? lanes : Math.min(lanes, 3));\n const overflowLayouts = (layouts: TimedEventLayout[]): TimedOverflowLayout[] => {\n if (isDayView()) return [];\n const groups = new Map<number, TimedOverflowLayout>();\n for (const layout of layouts) {\n if (layout.lane < visibleLaneCount(layout.lanes)) continue;\n const existing = groups.get(layout.groupId);\n if (existing) existing.hiddenEvents.push(layout.event);\n else\n groups.set(layout.groupId, {\n groupId: layout.groupId,\n hiddenEvents: [layout.event],\n groupStartDate: layout.groupStartDate,\n groupEndDate: layout.groupEndDate,\n });\n }\n return [...groups.values()];\n };\n // A week shares 36 rem between its days; a single day takes 12 rem per overlapping lane. The 40 rem grid is wider\n // than one or two lanes, so only three or more make the day scroll, and one lane fits beside a tablet drawer.\n const columnTemplate = createMemo(() => {\n let dayMin = \"var(--k2b-calendar-day-min)\";\n if (isDayView()) {\n const day = props.days[0]!;\n const layouts = timedEventLayouts(eventsByDay().get(calendar.formatDateKey(day, dateConfig()))?.timed ?? []);\n dayMin = `${Math.max(1, ...layouts.map((layout) => layout.lanes)) * 12}rem`;\n }\n return `4rem repeat(${props.days.length}, minmax(${dayMin}, 1fr))`;\n });\n // The hours scroll sideways themselves; the day and all-day rows follow, also when focus scrolls one of them.\n // A row's scroll event from our own write arrives a frame late; echoing it back would undo a smooth scroll or fling.\n const followed = new WeakMap<HTMLElement, number>();\n const followColumns = (source: HTMLElement) => {\n if (followed.get(source) === source.scrollLeft) return;\n followed.delete(source);\n for (const row of [scrollContainer, daysRow, allDayRow]) {\n if (!row || row === source || row.scrollLeft === source.scrollLeft) continue;\n row.scrollLeft = source.scrollLeft;\n followed.set(row, row.scrollLeft);\n }\n };\n const laneStyle = (layoutItem: TimedEventLayout) => {\n if (isDayView()) {\n const laneWidth = 100 / layoutItem.lanes;\n return {\n left: `calc(${layoutItem.lane * laneWidth}% + 0.25rem)`,\n width: `calc(${laneWidth}% - 0.5rem)`,\n };\n }\n const visibleLanes = visibleLaneCount(layoutItem.lanes);\n return {\n left: `${layoutItem.lanes <= 1 ? 0 : (28 / Math.max(1, visibleLanes - 1)) * layoutItem.lane}%`,\n width: `${layoutItem.lanes <= 1 ? 100 : layoutItem.lanes > visibleLanes ? 68 : 72}%`,\n };\n };\n const currentTimeLine = (day: Date) => {\n const now = props.now;\n if (calendar.formatDateKey(day, dateConfig()) !== calendar.formatDateKey(now, dateConfig())) return null;\n const hour = zonedHour(now, dateConfig());\n if (hour < gridStartHour() || hour > gridEndHour() + 1) return null;\n return ((hour - gridStartHour()) / Math.max(1, gridEndHour() - gridStartHour() + 1)) * 100;\n };\n onCleanup(() => cancelInteraction?.());\n onMount(() => {\n requestAnimationFrame(() => {\n if (!scrollContainer || !defaultHourMarker) return;\n const targetTop = defaultHourMarker.getBoundingClientRect().top - scrollContainer.getBoundingClientRect().top;\n // Reduced motion jumps to the business hours instead of gliding there, like every transition of the library.\n const behavior = prefersReducedMotion() ? \"auto\" : \"smooth\";\n scrollContainer.scrollTo({ top: Math.max(0, scrollContainer.scrollTop + targetTop), behavior });\n });\n });\n return (\n <div class=\"k2b-calendar-time-grid\" data-view={isDayView() ? \"day\" : \"week\"}>\n <div\n ref={daysRow}\n class=\"k2b-calendar-time-grid__days\"\n style={{ \"grid-template-columns\": columnTemplate() }}\n onScroll={(event) => followColumns(event.currentTarget)}\n >\n <div class=\"k2b-calendar-time-grid__corner\" />\n <For each={props.days}>\n {(day) => {\n const dayBadge = props.owner.dayBadges?.[calendar.formatDateKey(day, dateConfig())];\n const today = () => calendar.isToday(day, dateConfig());\n return (\n <CalendarNavigationLink\n owner={props.owner}\n href={props.owner.getDateHref?.(day, \"day\") ?? \"#\"}\n anchorProps={{\n class: \"k2b-calendar-time-grid__day\",\n \"data-weekend\": isWeekendKey(calendar.formatDateKey(day, dateConfig()), dateConfig().locale) ? \"true\" : undefined,\n }}\n >\n <span class=\"k2b-calendar-time-grid__day-label\" data-today={today() ? \"true\" : undefined}>\n {formatDay(day, dateConfig())}\n </span>\n <Show when={dayBadge}>\n {(badge) => (\n <span class=\"k2b-calendar-time-grid__badge\">\n <Show when={badge().icon}>{(icon) => <i class={`k2b-calendar-time-grid__badge-icon ti ti-${icon()}`} />}</Show>\n {badge().label}\n </span>\n )}\n </Show>\n </CalendarNavigationLink>\n );\n }}\n </For>\n </div>\n <Show when={!props.owner.hideAllDay}>\n <div\n ref={allDayRow}\n class=\"k2b-calendar-time-grid__all-day\"\n onScroll={(event) => followColumns(event.currentTarget)}\n style={{\n \"grid-template-columns\": columnTemplate(),\n \"max-height\": `${props.owner.allDayMaxHeightRem ?? 7}rem`,\n }}\n >\n <div class=\"k2b-calendar-time-grid__all-day-label\">{props.labels.allDay}</div>\n <For each={props.days}>\n {(day) => {\n const dayKey = calendar.formatDateKey(day, dateConfig());\n const allDay = () => eventsByDay().get(dayKey)?.allDay ?? [];\n const previewAllDay = previewEvents().filter((event) => event.dayKey === dayKey && event.allDay);\n return (\n <div\n class=\"k2b-calendar-time-grid__all-day-cell\"\n data-calendar-day-key={dayKey}\n data-weekend={isWeekendKey(dayKey, dateConfig().locale) ? \"true\" : undefined}\n data-drop-preview={\n timePreview()?.allDay && calendar.formatDateKey(timePreview()!.start, dateConfig()) === dayKey ? \"true\" : undefined\n }\n data-interactive={props.owner.onSlotActivate ? \"true\" : undefined}\n {...slotInteractionProps(\n props.owner,\n () => {\n const start = startOfDay(day, dateConfig());\n return { start, end: calendar.addDays(start, 1, dateConfig()), allDay: true };\n },\n () => performance.now() < suppressSlotClickUntil,\n )}\n >\n <div class=\"k2b-calendar-time-grid__all-day-events\">\n <For each={previewAllDay}>{(event) => <div class=\"k2b-calendar-preview\">{event.title}</div>}</For>\n <For each={allDay()}>\n {(event) => (\n <EventChip\n event={event}\n owner={props.owner}\n href={eventHref(props.owner, event)}\n compact\n moving={movingEventId() === event.id}\n onMovePointerDown={\n props.owner.onEventDrop\n ? (pointerEvent, markDragged) => startAllDayMove(pointerEvent, event, markDragged)\n : undefined\n }\n />\n )}\n </For>\n </div>\n </div>\n );\n }}\n </For>\n </div>\n </Show>\n <div\n ref={scrollContainer}\n class=\"k2b-calendar-time-grid__scroll k2b-detail-trail\"\n onScroll={(event) => followColumns(event.currentTarget)}\n >\n <div ref={timeGrid} class=\"k2b-calendar-time-grid__grid\" style={{ \"grid-template-columns\": columnTemplate() }}>\n <div\n ref={timeGutter}\n class=\"k2b-calendar-time-grid__gutter\"\n style={{ \"grid-template-rows\": `repeat(${hours().length}, minmax(4rem, 1fr))` }}\n >\n <For each={hours()}>\n {(hour) => (\n <div\n ref={(element) => {\n if (hour === businessStartHour()) defaultHourMarker = element;\n }}\n class=\"k2b-calendar-time-grid__hour\"\n data-outside-business={hour < businessStartHour() || hour > businessEndHour() ? \"true\" : undefined}\n >\n {`${hour}`.padStart(2, \"0\")}:00\n </div>\n )}\n </For>\n </div>\n <For each={props.days}>\n {(day) => {\n const dayKey = calendar.formatDateKey(day, dateConfig());\n const layouts = createMemo(() => timedEventLayouts(eventsByDay().get(dayKey)?.timed ?? []));\n return (\n <div\n class=\"k2b-calendar-time-grid__column\"\n data-weekend={isWeekendKey(dayKey, dateConfig().locale) ? \"true\" : undefined}\n style={{\n \"grid-template-rows\": `repeat(${hours().length}, minmax(4rem, 1fr))`,\n }}\n >\n <Show when={currentTimeLine(day) !== null}>\n <div class=\"k2b-calendar-time-grid__now\" style={{ top: `${currentTimeLine(day) ?? 0}%` }} />\n </Show>\n <For each={hours()}>\n {(hour) => (\n <div\n class=\"k2b-calendar-time-grid__slot\"\n data-outside-business={hour < businessStartHour() || hour > businessEndHour() ? \"true\" : undefined}\n data-interactive={props.owner.onSlotActivate ? \"true\" : undefined}\n {...slotInteractionProps(\n props.owner,\n () => {\n const start = zonedSlot(day, hour, dateConfig());\n return { start, end: slotEnd(start), allDay: false };\n },\n () => performance.now() < suppressSlotClickUntil,\n )}\n onPointerDown={startRange}\n />\n )}\n </For>\n <For each={previewEvents().filter((event) => event.dayKey === dayKey && !event.allDay)}>\n {(event) => {\n const layout = eventLayout(event);\n const short = event.endDate.getTime() - event.startDate.getTime() < 60 * 60_000;\n return (\n <div\n class=\"k2b-calendar-preview k2b-calendar-preview--timed\"\n data-short={short ? \"true\" : undefined}\n style={{ top: `${layout.top}%`, height: `${layout.height}%` }}\n >\n <div class=\"k2b-calendar-preview__content\">\n <Show when={event.title}>\n <div class=\"k2b-calendar-preview__title\">{event.title}</div>\n </Show>\n <div class=\"k2b-calendar-preview__label\">\n {formatTime(event.startDate, dateConfig())} - {formatTime(event.endDate, dateConfig())}\n </div>\n </div>\n </div>\n );\n }}\n </For>\n <For each={layouts()}>\n {(layoutItem) => {\n if (!isDayView() && layoutItem.lane >= visibleLaneCount(layoutItem.lanes)) return null;\n const event = layoutItem.event;\n const layout = eventLayout(event);\n const position = laneStyle(layoutItem);\n const resizeStart = (pointerEvent: PointerEvent) => {\n if (!props.owner.onEventResize) return;\n pointerEvent.preventDefault();\n pointerEvent.stopPropagation();\n beginInteraction({\n event: pointerEvent,\n scrollContainer,\n threshold: 1,\n resolve: (clientX, clientY) => {\n const pointer = timeAtPoint(clientX, clientY);\n if (!pointer) return null;\n const minimumEnd = addMinutes(event.sourceStartDate, 15);\n const end = pointer > minimumEnd ? pointer : minimumEnd;\n return { id: event.id, title: event.title, start: event.sourceStartDate, end, allDay: false };\n },\n onActivate: () => {\n suppressSlotClickUntil = performance.now() + 400;\n setMovingEventId(event.id);\n },\n onPreview: setTimePreview,\n onCommit: (next) => {\n clearInteraction();\n if (eventTimeChanged(event, next)) props.owner.onEventResize?.(event, next);\n },\n onCancel: clearInteraction,\n });\n };\n return (\n <div\n class=\"k2b-calendar-time-grid__event-position\"\n style={{\n top: `${layout.top}%`,\n height: `${layout.height}%`,\n left: position.left,\n width: position.width,\n \"z-index\": String(20 + layoutItem.lane),\n }}\n >\n <div class=\"k2b-calendar-time-grid__event-frame\">\n <EventChip\n event={event}\n owner={props.owner}\n href={eventHref(props.owner, event)}\n fill\n moving={movingEventId() === event.id}\n onMovePointerDown={\n props.owner.onEventDrop\n ? (pointerEvent, markDragged) => startTimedMove(pointerEvent, event, markDragged)\n : undefined\n }\n />\n <Show when={props.owner.onEventResize}>\n <button\n type=\"button\"\n aria-label={calendarMessages().resizeEvent}\n draggable={false}\n class=\"k2b-calendar-time-grid__resize\"\n onPointerDown={resizeStart}\n onDragStart={(event) => event.preventDefault()}\n >\n <span class=\"k2b-calendar-time-grid__resize-icon\" aria-hidden=\"true\" />\n </button>\n </Show>\n </div>\n </div>\n );\n }}\n </For>\n <For each={overflowLayouts(layouts())}>\n {(overflow) => {\n const layout = timeRangeLayout(overflow.groupStartDate, overflow.groupEndDate);\n const key = `${dayKey}-${overflow.groupId}`;\n const hiddenTitle = () =>\n overflow.hiddenEvents.map((event) => `${formatTime(event.startDate, dateConfig())} ${event.title}`).join(\"\\n\");\n return (\n <>\n <button\n type=\"button\"\n class=\"k2b-calendar-time-grid__overflow\"\n style={{ top: `${layout.top}%`, height: `${layout.height}%` }}\n title={hiddenTitle()}\n aria-label={calendarMessages().hiddenOverlappingEvents({ count: overflow.hiddenEvents.length })}\n onClick={(event) => {\n event.stopPropagation();\n setExpandedOverflow(expandedOverflow() === key ? \"\" : key);\n }}\n >\n <span class=\"k2b-calendar-time-grid__overflow-count\">+{overflow.hiddenEvents.length}</span>\n </button>\n <Show when={expandedOverflow() === key}>\n <div class=\"k2b-calendar-time-grid__overflow-menu\" style={{ top: `${layout.top}%` }}>\n <div class=\"k2b-calendar-time-grid__overflow-title\">\n {formatTime(overflow.groupStartDate, dateConfig())} - {formatTime(overflow.groupEndDate, dateConfig())}\n </div>\n <For each={overflow.hiddenEvents}>\n {(event) => <EventChip event={event} owner={props.owner} href={eventHref(props.owner, event)} compact />}\n </For>\n </div>\n </Show>\n </>\n );\n }}\n </For>\n </div>\n );\n }}\n </For>\n </div>\n </div>\n </div>\n );\n};\n\nconst YearView = (props: { owner: CalendarOwner; date: Date; now: Date; events: NormalizedEvent[] }): JSX.Element => {\n const dateConfig = createMemo(() => ownerDateConfig(props.owner));\n const year = createMemo(() => zonedYearMonth(props.date, dateConfig()).year);\n const todayKey = createMemo(() => calendar.formatDateKey(props.now, dateConfig()));\n const eventsByDay = createMemo(() => {\n const grouped = new Map<string, NormalizedEvent[]>();\n for (const event of props.events) {\n const events = grouped.get(event.dayKey);\n if (events) events.push(event);\n else grouped.set(event.dayKey, [event]);\n }\n return grouped;\n });\n const months = createMemo(() => {\n const context = dateConfig();\n return Array.from({ length: 12 }, (_, month) => {\n const date = zonedMonthDate(year(), month, context);\n return {\n date,\n label: date.toLocaleDateString(context.locale ?? \"en\", { month: \"long\", timeZone: context.timeZone }),\n days: calendar\n .getMonthGrid(year(), month, context)\n .flat()\n .map((day) => {\n const key = calendar.formatDateKey(day, context);\n return {\n date: day,\n events: eventsByDay().get(key) ?? [],\n isToday: key === todayKey(),\n outside: !calendar.isSameMonth(day, date, context),\n number: calendar.formatDayNumber(day, context),\n };\n }),\n };\n });\n });\n\n return (\n <div class=\"k2b-calendar-year\">\n <For each={months()}>\n {(month) => (\n <div class=\"k2b-calendar-year__month\">\n <div class=\"k2b-calendar-year__title\">{month.label}</div>\n <div class=\"k2b-calendar-year__grid\">\n <For each={month.days}>\n {(day) => (\n <CalendarNavigationLink\n owner={props.owner}\n href={props.owner.getDateHref?.(day.date, \"day\") ?? \"#\"}\n anchorProps={{\n class: \"k2b-calendar-year__day\",\n \"data-today\": day.isToday ? \"true\" : undefined,\n \"data-outside\": day.outside ? \"true\" : undefined,\n }}\n >\n {day.number}\n <Show when={day.events[0]}>\n {(event) => (\n <span\n class=\"k2b-calendar-year__indicator\"\n data-color={event().colorHex ? undefined : (event().color ?? \"blue\")}\n data-today={day.isToday ? \"true\" : undefined}\n style={event().colorHex ? { \"background-color\": day.isToday ? \"white\" : event().colorHex } : undefined}\n />\n )}\n </Show>\n </CalendarNavigationLink>\n )}\n </For>\n </div>\n </div>\n )}\n </For>\n </div>\n );\n};\n\nconst MobileMonthView = (props: {\n owner: CalendarOwner;\n date: Date;\n now: Date;\n selectedDate: Date;\n events: NormalizedEvent[];\n labels: Required<CalendarLabels>;\n}): JSX.Element => {\n const dateConfig = createMemo(() => ownerDateConfig(props.owner));\n const selectedDateKey = createMemo(() => calendar.formatDateKey(props.selectedDate, dateConfig()));\n const selectedEvents = createMemo(() => props.events.filter((event) => event.dayKey === selectedDateKey()));\n return (\n <div class=\"k2b-calendar-mobile-month\">\n <MonthPickerView\n owner={{ ...props.owner, withWeekNumbers: false }}\n date={props.date}\n now={props.now}\n events={props.events}\n labels={props.labels}\n compact\n />\n <div class=\"k2b-calendar-mobile-month__agenda\">\n <div class=\"k2b-calendar-mobile-month__title\">\n {props.selectedDate.toLocaleDateString(dateConfig().locale ?? \"en\", {\n weekday: \"long\",\n month: \"long\",\n day: \"numeric\",\n timeZone: dateConfig().timeZone,\n })}\n </div>\n <Show when={selectedEvents().length > 0} fallback={<div class=\"k2b-calendar-mobile-month__empty\">{props.labels.noEvents}</div>}>\n <div class=\"k2b-calendar-mobile-month__events\">\n <For each={selectedEvents()}>\n {(event) => <EventChip event={event} owner={props.owner} href={eventHref(props.owner, event)} />}\n </For>\n </div>\n </Show>\n </div>\n </div>\n );\n};\n\nconst CalendarBody = (props: { children: JSX.Element }): JSX.Element => <div class=\"k2b-calendar-body\">{props.children}</div>;\n\nconst CalendarRoot = <V extends string = never>(props: CalendarProps<V>): JSX.Element => {\n const messages = useUiMessages();\n const calendarMessages = useCalendarMessages();\n // Subviews derive their date config from the owner props, so the inherited\n // render locale is merged here once; an explicit dateConfig.locale wins.\n const localizedConfig = useDateConfigLocale(() => props.dateConfig);\n const owner = mergeProps(props, {\n get dateConfig(): DateContext {\n return localizedConfig();\n },\n });\n const view = () => props.view ?? \"month\";\n const custom = () => props.customViews?.some((option) => option.value === view()) ?? false;\n const dateConfig = createMemo(() => ownerDateConfig(owner));\n const safeDate = (value: Date | string) => {\n const parsed = parseDate(value, dateConfig());\n return validDate(parsed) ? parsed : calendar.today(dateConfig());\n };\n const date = createMemo(() => safeDate(props.date));\n const selectedDate = createMemo(() => safeDate(props.selectedDate ?? props.date));\n const [now, setNow] = createSignal(new Date());\n /** The first day selected in the month view, so the view switcher opens the other views at it. */\n const [focusDay, setFocusDay] = createSignal<Date | null>(null);\n const normalizedEvents = createMemo(() => normalizeEvents(props.events, dateConfig()));\n const mergedLabels = createMemo<Required<CalendarLabels>>(() => ({\n today: messages().today,\n day: messages().day,\n week: messages().week,\n month: messages().month,\n year: messages().year,\n allDay: messages().allDay,\n noEvents: calendarMessages().noEvents,\n previous: messages().previous,\n next: messages().next,\n ...props.labels,\n }));\n const days = createMemo(() => {\n if (view() === \"day\") return [date()];\n return calendar.getWeekDays(date(), dateConfig());\n });\n onMount(() => {\n const updateNow = () => setNow(new Date());\n const interval = window.setInterval(updateNow, 60_000);\n document.addEventListener(\"visibilitychange\", updateNow);\n onCleanup(() => {\n window.clearInterval(interval);\n document.removeEventListener(\"visibilitychange\", updateNow);\n });\n });\n\n // The day and week views with `dayHours` scroll through their days; the header and the commands ask them first.\n const [timeView, setTimeView] = createSignal<TimeViewHandle | null>(null);\n const [monthCreate, setMonthCreate] = createSignal<MonthHandle | null>(null);\n const monthView = () => (monthCreate()?.continuous() ? monthCreate() : null);\n const scrollingView = () => timeView() ?? monthView();\n const timeMode = () => Boolean(props.dayHours) && (view() === \"day\" || view() === \"week\");\n const parseKey = (key: string) => calendar.parseCalendarDate(key, dateConfig());\n /** The first shown day of a day or week view, or the selected day of the month view, for the other views. */\n const shownDay = () => {\n const first = timeView()?.visibleKeys().first;\n if (first) return parseKey(first);\n return view() === \"month\" ? (focusDay() ?? monthView()?.focusDay() ?? null) : null;\n };\n const go = (target: Date, nextView: CalendarView | V) => {\n const href = props.getDateHref?.(target, nextView);\n if (href) followCalendarHref(owner, href);\n else openViewAt(props, target, nextView);\n };\n const step = (direction: -1 | 1) => {\n if (scrollingView()?.step(direction)) return;\n go(adjacentCalendarDate(monthView()?.stepFrom() ?? shownDay() ?? date(), view(), direction, dateConfig(), props.customViews), view());\n };\n const goToday = () => {\n if (scrollingView()?.today()) return;\n go(calendar.today(dateConfig()), view());\n };\n const goView = (nextView: CalendarView) => {\n const day = shownDay();\n if (day) {\n go(day, nextView);\n return;\n }\n const href = props.getViewHref?.(nextView);\n if (href) followCalendarHref(owner, href);\n else props.onViewChange?.(nextView);\n };\n const goToKey = (key: string) => {\n if (scrollingView()?.goTo(key)) return;\n go(parseKey(key), view());\n };\n const openGoTo = () =>\n void openCalendarGoTo({\n messages: calendarMessages(),\n today: calendar.formatDateKey(new Date(), dateConfig()),\n describe: (key) =>\n parseKey(key).toLocaleDateString(dateConfig().locale ?? \"en\", {\n weekday: \"long\",\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n timeZone: dateConfig().timeZone,\n }),\n onGo: goToKey,\n });\n const ownCommands = createMemo((): CalendarCommand[] => {\n const text = calendarMessages();\n const available = ([\"day\", \"week\", \"month\", \"year\"] as const).filter((option) => !props.views || props.views.includes(option));\n const viewLabels = { day: mergedLabels().day, week: mergedLabels().week, month: mergedLabels().month, year: mergedLabels().year };\n return [\n {\n id: \"calendar.today\",\n label: text.calendarCommandToday,\n description: text.calendarCommandTodayDescription,\n shortcut: \"h\",\n icon: \"ti ti-calendar-event\",\n run: goToday,\n },\n {\n id: \"calendar.next\",\n label: text.calendarCommandNext,\n description: text.calendarCommandNextDescription,\n shortcut: \"j\",\n icon: \"ti ti-chevron-right\",\n run: () => step(1),\n },\n {\n id: \"calendar.previous\",\n label: text.calendarCommandPrevious,\n description: text.calendarCommandPreviousDescription,\n shortcut: \"k\",\n icon: \"ti ti-chevron-left\",\n run: () => step(-1),\n },\n ...available.map((option, index) => ({\n id: `calendar.view.${option}`,\n label: text.calendarCommandView({ view: viewLabels[option] }),\n description: text.calendarCommandViewDescription({ view: viewLabels[option] }),\n shortcut: String(index + 1),\n icon: \"ti ti-layout-columns\",\n run: () => goView(option),\n })),\n {\n id: \"calendar.goto\",\n label: text.calendarCommandGoTo,\n description: text.calendarCommandGoToDescription,\n shortcut: \"g\",\n icon: \"ti ti-calendar-search\",\n run: openGoTo,\n },\n ];\n });\n const allCommands = createMemo(() => [...ownCommands(), ...(props.commands ?? [])]);\n /** While the month's quiet quick create waits for typing, a single key is the first letter of a title. */\n const typing = () => view() === \"month\" && (monthCreate()?.typing() ?? false);\n createEffect(() => {\n const commands = typing()\n ? allCommands().map((command) => (command.shortcut && singleKey(command.shortcut) ? { ...command, shortcut: undefined } : command))\n : allCommands();\n untrack(() => props.onCommandsChange?.(commands));\n });\n // The arrow keys page like J and K while the keyboard is in the calendar or nowhere, unless something there uses\n // them, such as the grid of the week or the month.\n let root: HTMLElement | undefined;\n onMount(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"ArrowLeft\" && event.key !== \"ArrowRight\") return;\n if (event.defaultPrevented || event.isComposing || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) return;\n if (!props.onCommandsChange || custom() || document.querySelector('dialog[open], [role=\"dialog\"][aria-modal=\"true\"]')) return;\n const target = event.target;\n const inCalendar = target instanceof Element && Boolean(root?.contains(target));\n if (!inCalendar && target !== document.body && target !== document.documentElement) return;\n if (\n target instanceof Element &&\n target.closest(\"input, textarea, select, [contenteditable]:not([contenteditable=false]), [role=textbox], [popover], [role=dialog]\")\n )\n return;\n event.preventDefault();\n step(event.key === \"ArrowRight\" ? 1 : -1);\n };\n window.addEventListener(\"keydown\", onKeyDown);\n onCleanup(() => window.removeEventListener(\"keydown\", onKeyDown));\n });\n const headerNav: CalendarHeaderNav = {\n timeView,\n monthView,\n commands: () => (props.onCommandsChange ? allCommands() : []),\n // The arrow keys page like J and K, so the list names them beside those keys.\n openShortcuts: () =>\n void openCalendarShortcuts(\n allCommands(),\n calendarMessages(),\n custom() ? {} : { \"calendar.next\": \"arrowright\", \"calendar.previous\": \"arrowleft\" },\n ),\n };\n const controller: CalendarController = {\n quickCreate: (create) => {\n const active = timeView();\n if (active) active.controller.quickCreate(create);\n else monthCreate()?.quickCreate(create);\n },\n createTarget: () => {\n const active = timeView()?.controller.createTarget() ?? monthCreate()?.createTarget();\n if (active) return active;\n const start = calendar.today(dateConfig());\n return { start, end: calendar.addDays(start, 1, dateConfig()), allDay: true };\n },\n dragIn: (event, item, onDrop) => timeView()?.controller.dragIn(event, item, onDrop),\n };\n onMount(() => props.controller?.(controller));\n const timeProps = (timeViewName: \"day\" | \"week\") => ({\n owner,\n view: timeViewName,\n get date() {\n return date();\n },\n get now() {\n return now();\n },\n get events() {\n return props.events;\n },\n get labels() {\n return mergedLabels();\n },\n get hours() {\n return props.dayHours ?? ([0, 24] as const);\n },\n register: setTimeView,\n });\n\n return (\n <section ref={root} class={`k2b-content-calendar ${props.class ?? \"\"}`} aria-busy={props.navigationPending ? \"true\" : undefined}>\n <CalendarHeader\n date={date()}\n view={view()}\n labels={mergedLabels()}\n owner={owner}\n focusDay={view() === \"month\" || timeView() ? shownDay() : null}\n nav={headerNav}\n />\n <Show when={!custom()} fallback={<CalendarBody>{props.children}</CalendarBody>}>\n <Show\n when={view() !== \"month\"}\n fallback={\n <CalendarBody>\n <MonthView\n owner={owner}\n date={date()}\n now={now()}\n events={normalizedEvents()}\n labels={mergedLabels()}\n onFocusDay={setFocusDay}\n goToDate={(date) => go(date, view())}\n register={setMonthCreate}\n />\n </CalendarBody>\n }\n >\n <Show\n when={view() !== \"year\"}\n fallback={\n <CalendarBody>\n <YearView owner={owner} date={date()} now={now()} events={normalizedEvents()} />\n </CalendarBody>\n }\n >\n <Show\n when={view() !== \"mobile-month\"}\n fallback={\n <CalendarBody>\n <MobileMonthView\n owner={owner}\n date={date()}\n now={now()}\n selectedDate={selectedDate()}\n events={normalizedEvents()}\n labels={mergedLabels()}\n />\n </CalendarBody>\n }\n >\n <Show\n when={timeMode()}\n fallback={\n <TimeGridView owner={owner} date={date()} now={now()} events={normalizedEvents()} labels={mergedLabels()} days={days()} />\n }\n >\n <Show when={view() === \"day\"} fallback={<CalendarWeekView {...timeProps(\"week\")} />}>\n <CalendarDayView {...timeProps(\"day\")} />\n </Show>\n </Show>\n </Show>\n </Show>\n </Show>\n </Show>\n </section>\n );\n};\n\n/** A shortcut without Ctrl, Meta, or Mod, which typing would set off. */\nconst singleKey = (shortcut: string) => !/(^|\\+)(ctrl|meta|mod)\\+/i.test(shortcut);\n\n/** JSX infers the values of `customViews`; inference from the last signature, as in `createComponent`, sees plain props. */\nfunction Calendar<V extends string = never>(props: CalendarProps<V>): JSX.Element;\nfunction Calendar(props: CalendarProps): JSX.Element;\nfunction Calendar(props: CalendarProps<string>): JSX.Element {\n return CalendarRoot(props);\n}\n\nexport default Calendar;\n"],"mappings":"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","ignoreList":[]}
|