@k2b/ui 0.41.0 → 0.43.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 +22 -0
- package/dist/browser/actions/Dropdown.js +220 -110
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/index.js.map +1 -1
- package/dist/browser/actions/menu-search.js +166 -0
- package/dist/browser/actions/menu-search.js.map +1 -0
- package/dist/browser/actions/menu-sheet.js +107 -13
- package/dist/browser/actions/menu-sheet.js.map +1 -1
- package/dist/browser/content/CalendarWeekView.js +13 -1
- package/dist/browser/content/CalendarWeekView.js.map +1 -1
- package/dist/browser/content/CountryMap.js +241 -0
- package/dist/browser/content/CountryMap.js.map +1 -0
- package/dist/browser/content/world-countries.js +9 -0
- package/dist/browser/content/world-countries.js.map +1 -0
- package/dist/browser/country-map.js +3 -0
- package/dist/browser/country-map.js.map +1 -0
- package/dist/browser/inputs/IconChoices.js +121 -0
- package/dist/browser/inputs/IconChoices.js.map +1 -0
- package/dist/browser/inputs/index.js +1 -0
- package/dist/browser/inputs/index.js.map +1 -1
- package/dist/browser/intl/messages.js +6 -0
- package/dist/browser/intl/messages.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +118 -93
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- package/dist/browser/text-editor/format.js +11 -7
- package/dist/browser/text-editor/format.js.map +1 -1
- package/dist/browser/text-editor/table.js +39 -11
- package/dist/browser/text-editor/table.js.map +1 -1
- package/dist/browser/text-editor.js +1 -1
- package/dist/browser/text-editor.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +118 -40
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/index.js.map +1 -1
- package/dist/ssr/actions/menu-search.js +113 -0
- package/dist/ssr/actions/menu-search.js.map +1 -0
- package/dist/ssr/actions/menu-sheet.js +82 -13
- package/dist/ssr/actions/menu-sheet.js.map +1 -1
- package/dist/ssr/content/CalendarWeekView.js +13 -1
- package/dist/ssr/content/CalendarWeekView.js.map +1 -1
- package/dist/ssr/content/CountryMap.js +135 -0
- package/dist/ssr/content/CountryMap.js.map +1 -0
- package/dist/ssr/content/world-countries.js +9 -0
- package/dist/ssr/content/world-countries.js.map +1 -0
- package/dist/ssr/country-map.js +3 -0
- package/dist/ssr/country-map.js.map +1 -0
- package/dist/ssr/inputs/IconChoices.js +59 -0
- package/dist/ssr/inputs/IconChoices.js.map +1 -0
- package/dist/ssr/inputs/index.js +1 -0
- package/dist/ssr/inputs/index.js.map +1 -1
- package/dist/ssr/intl/messages.js +6 -0
- package/dist/ssr/intl/messages.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +40 -20
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- package/dist/ssr/text-editor/format.js +11 -7
- package/dist/ssr/text-editor/format.js.map +1 -1
- package/dist/ssr/text-editor/table.js +39 -11
- package/dist/ssr/text-editor/table.js.map +1 -1
- package/dist/ssr/text-editor.js +1 -1
- package/dist/ssr/text-editor.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/Dropdown.d.ts +34 -3
- package/dist/types/actions/index.d.ts +1 -1
- package/dist/types/actions/menu-search.d.ts +27 -0
- package/dist/types/actions/menu-sheet.d.ts +5 -1
- package/dist/types/content/CountryMap.d.ts +21 -0
- package/dist/types/content/world-countries.d.ts +6 -0
- package/dist/types/country-map.d.ts +2 -0
- package/dist/types/inputs/IconChoices.d.ts +19 -0
- package/dist/types/inputs/index.d.ts +2 -0
- package/dist/types/intl/messages.d.ts +3 -0
- package/dist/types/layout/AppWorkspace.d.ts +6 -1
- package/dist/types/text-editor/table.d.ts +2 -0
- package/dist/types/text-editor.d.ts +1 -1
- package/package.json +9 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["content/CalendarWeekView.tsx"],"sourcesContent":["import { dates as calendar } from \"@k2b/stdlib\";\nimport {\n createComputed,\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n on,\n onCleanup,\n onMount,\n Show,\n untrack,\n} from \"solid-js\";\nimport { isWeekendKey } from \"../intl/weekend\";\nimport { prefersReducedMotion } from \"../motion\";\nimport type { CalendarEvent } from \"./Calendar\";\nimport { GESTURE_GAP_MS, snapToColumn, type WheelAxis, wheelAxis, wheelDelta, wheelPixels } from \"./calendar-day-scroll\";\nimport {\n addDayKeys,\n DAY_MINUTES,\n type DaySpan,\n dayHeightTerms,\n dayKeyNumber,\n dayKeyRange,\n dayMinuteAt,\n dayY,\n dayYTerms,\n markerLanes,\n readDayGeometry,\n termsCss,\n} from \"./calendar-days\";\nimport { layoutMonthWeek } from \"./calendar-month-layout\";\nimport { startCalendarPointerSession } from \"./calendar-pointer\";\nimport { EventChip, eventHref, followCalendarHref, textWidth } from \"./calendar-shared\";\nimport {\n createTimeView,\n dayBands,\n dayGaps,\n dayLoad,\n eventAccent,\n foldedEntries,\n gapAside,\n isNearNow,\n longDay,\n markerAbove,\n nightHours,\n swallowNextClick,\n TimeBand,\n TimeCheck,\n TimeGap,\n TimeMarker,\n TimeOverlays,\n TimeQuickCreate,\n type TimeView,\n type TimeViewHandle,\n type TimeViewProps,\n weekKeysOf,\n} from \"./calendar-time-view\";\n\n/** Room a bar keeps beside its title and date hint: padding, torn edge, gap, and an icon such as a task box. */\nconst HINT_SLACK_PX = 36;\n\n/**\n * The week view with `dayHours`: the loaded days side by side in one strip, seven on a wide screen and three on a\n * phone. A trackpad, Shift with the wheel, or a finger scroll it sideways day by day; each gesture keeps the axis it\n * started on, and the strip settles on a day edge. The arrows move by whole weeks.\n */\nexport const CalendarWeekView = (props: TimeViewProps) => {\n const view = createTimeView(props);\n const [mounted, setMounted] = createSignal(false);\n const [firstIndex, setFirstIndex] = createSignal(0);\n const [visibleCount, setVisibleCount] = createSignal(7);\n /** The week whose nights decide whether the night rows open, set by navigation, not by free scrolling. */\n const [nightWeek, setNightWeek] = createSignal(untrack(view.anchorKey));\n const [nightOverride, setNightOverride] = createSignal<boolean | null>(null);\n const [roving, setRoving] = createSignal(\"\");\n let scroller: HTMLDivElement | undefined;\n const helpId = createUniqueId();\n\n const anchorWeek = () => weekKeysOf(view, view.anchorKey());\n // The server and the first render draw only the shown week, so the strip never flashes the days before it.\n const keys = createMemo(() => {\n const { first, last } = view.range();\n if (mounted()) return dayKeyRange(first, last);\n const week = anchorWeek();\n return week[0]! >= first && week[6]! <= last ? week : dayKeyRange(first, last);\n });\n const indexOf = (key: string) => dayKeyNumber(key) - dayKeyNumber(keys()[0]!);\n const nightsOpen = createMemo(() => {\n const override = nightOverride();\n if (override !== null) return override;\n return weekKeysOf(view, nightWeek()).some((key) => view.dayOf(key).night);\n });\n createEffect(on(nightWeek, () => setNightOverride(null), { defer: true }));\n const wake = () => view.wake();\n\n // Columns and scrolling.\n /** The exact width of a day column: columns are a seventh or a third of the strip, rarely whole pixels. */\n const columnWidth = () => scroller?.querySelector<HTMLElement>(\"[data-calendar-column]\")?.getBoundingClientRect().width ?? 0;\n const gutterWidth = () => scroller?.querySelector<HTMLElement>(\".k2b-calendar-week__gutter\")?.offsetWidth ?? 0;\n const leftOf = (index: number) => index * columnWidth();\n const visibleIndex = () => {\n const width = columnWidth();\n return width > 0 && scroller ? Math.round(scroller.scrollLeft / width) : 0;\n };\n const visibleKeys = () => {\n const first = keys()[Math.min(keys().length - 1, Math.max(0, firstIndex()))] ?? view.anchorKey();\n return { first, last: addDayKeys(first, visibleCount() - 1) };\n };\n /** Now shows in the hours while today is among the days in view, like the prototype's week. */\n const nowShown = () => {\n const { first, last } = visibleKeys();\n const today = view.nowKey();\n return today >= first && today <= last && view.nowMinute() >= 0 && view.nowMinute() < (nightsOpen() ? DAY_MINUTES : wake());\n };\n\n let settling = false;\n let glideTarget: number | null = null;\n let glideTimer = 0;\n const glideTo = (left: number, top?: number) => {\n if (!scroller) return;\n const target = Math.max(0, Math.min(left, scroller.scrollWidth - scroller.clientWidth));\n glideTarget = target;\n window.clearTimeout(glideTimer);\n glideTimer = window.setTimeout(() => {\n glideTarget = null;\n }, 1600);\n scroller.scrollTo({ left: target, ...(top === undefined ? {} : { top }), behavior: prefersReducedMotion() ? \"instant\" : \"smooth\" });\n };\n /** The scroll position of a minute in the timeline, with now in the upper third. */\n const topFor = (minute: number) => {\n if (!scroller) return 0;\n const body = scroller.querySelector<HTMLElement>(\"[data-calendar-body]\");\n const head = scroller.querySelector<HTMLElement>(\".k2b-calendar-week__top\");\n if (!body || !head) return 0;\n const geometry = readDayGeometry(body, wake(), nightsOpen());\n const offset = body.getBoundingClientRect().top - scroller.getBoundingClientRect().top + scroller.scrollTop - head.offsetHeight;\n return Math.max(0, offset + dayY(geometry, minute) - (scroller.clientHeight - head.offsetHeight) / 3);\n };\n /** The first column of a week: its first day, or on a phone a day of it kept inside the week. */\n const columnFor = (key: string, phoneDay?: string) => {\n const week = weekKeysOf(view, key);\n if (visibleCount() >= 7 || !phoneDay) return indexOf(week[0]!);\n const day = Math.max(0, Math.min(7 - visibleCount(), dayKeyNumber(phoneDay) - dayKeyNumber(week[0]!)));\n return indexOf(week[day]!);\n };\n const positionAt = (key: string) => {\n if (!scroller) return;\n measureCount();\n const today = view.nowKey();\n const inWeek = weekKeysOf(view, key).includes(today);\n scroller.scrollLeft = leftOf(columnFor(key, key));\n scroller.scrollTop = inWeek ? topFor(view.nowMinute()) : topFor(60);\n lastLeft = scroller.scrollLeft;\n syncFirst();\n };\n const measureCount = () => {\n const width = columnWidth();\n if (!scroller || width <= 0) return;\n // Whole-pixel columns leave a few pixels at the right edge; the strip ends at its last whole day instead of\n // showing a sliver of the next one.\n const room = scroller.clientWidth + (Number.parseFloat(scroller.style.marginRight) || 0) - gutterWidth();\n const count = Math.max(1, Math.round(room / width));\n setVisibleCount(count);\n const rest = Math.floor(room - count * width);\n scroller.style.marginRight = rest > 0 ? `${rest}px` : \"\";\n };\n let reportTimer = 0;\n let reported = \"\";\n const syncFirst = () => {\n const index = visibleIndex();\n if (index !== untrack(firstIndex)) setFirstIndex(index);\n if (!untrack(keys)[index]) return;\n // The host learns the days the reader sees once they changed, after the scroll calmed down.\n const { first, last } = untrack(visibleKeys);\n if (`${first}/${last}` === reported) return;\n reported = `${first}/${last}`;\n window.clearTimeout(reportTimer);\n reportTimer = window.setTimeout(\n () => props.owner.onVisibleDateChange?.(view.parseKey(first), view.parseKey(last), view.parseKey(first)),\n 250,\n );\n };\n\n // A gesture keeps its axis; the strip settles on a day edge once the scroll rests.\n let axis: WheelAxis | null = null;\n let lastWheel = 0;\n let fingers = 0;\n let restTimer = 0;\n let ready = false;\n /** Whether a wheel or a finger moved the strip since it last settled, and the way it last moved. */\n let gesture = false;\n let heading = 0;\n let headingFrom = 0;\n const settle = () => {\n if (!scroller || fingers > 0 || settling || glideTarget !== null || view.dragging()) return;\n const width = columnWidth();\n const space = Number.parseFloat(getComputedStyle(scroller).scrollPaddingRight) || 0;\n // A gesture rests on the nearest edge. A scroll without one, such as a reveal, goes on its way, so what it brought\n // into view stays there; with end space, a revealed day can rest with its end beside the drawer.\n const target = snapToColumn(\n scroller.scrollLeft,\n width,\n space > 0 ? scroller.clientWidth - gutterWidth() - space : undefined,\n gesture ? 0 : heading,\n );\n gesture = false;\n if (Math.abs(target - scroller.scrollLeft) <= 0.5) return;\n settling = true;\n scroller.scrollTo({ left: target, behavior: prefersReducedMotion() ? \"instant\" : \"smooth\" });\n window.setTimeout(() => {\n settling = false;\n }, 450);\n };\n const onWheel = (event: WheelEvent) => {\n if (!scroller || event.ctrlKey || view.dragging()) return;\n // A gesture that goes on takes over from a glide onto a day start; the strip settles again once it rests.\n settling = false;\n gesture = true;\n if (event.timeStamp - lastWheel > GESTURE_GAP_MS || axis === null) axis = wheelAxis(event.deltaX, event.deltaY, event.shiftKey);\n lastWheel = event.timeStamp;\n const delta = wheelPixels(\n wheelDelta(axis, event.deltaX, event.deltaY, event.shiftKey),\n event.deltaMode,\n axis === \"x\" ? scroller.clientWidth : scroller.clientHeight,\n );\n if (axis === \"x\") {\n event.preventDefault();\n glideTarget = null;\n scroller.scrollLeft += delta;\n } else if (event.deltaX !== 0) {\n // A trackpad's slight sideways drift in a vertical gesture would move the days; only the vertical part counts.\n event.preventDefault();\n scroller.scrollTop += delta;\n }\n };\n let askedEarlier = \"\";\n let askedLater = \"\";\n /** The last scroll position the strip read, to tell which way the reader moves. */\n let lastLeft = 0;\n /**\n * Asks for the week before or after once the reader moves within a week of an end. Days loaded before the strip push\n * it on by a week, so only moving toward an end asks; a glide may load later days, which push nothing.\n */\n const loadMore = () => {\n if (!scroller || !ready || view.dragging()) return;\n const width = columnWidth();\n const { first, last } = view.range();\n const left = scroller.scrollLeft;\n const direction = Math.sign(left - lastLeft);\n lastLeft = left;\n if (direction < 0 && glideTarget === null && left < width * 7 - 1 && props.owner.onLoadEarlier && askedEarlier !== first) {\n askedEarlier = first;\n void props.owner.onLoadEarlier();\n }\n if (\n direction > 0 &&\n left + scroller.clientWidth > scroller.scrollWidth - width * 7 + 1 &&\n props.owner.onLoadLater &&\n askedLater !== last\n ) {\n askedLater = last;\n void props.owner.onLoadLater();\n }\n };\n let frame = 0;\n const onScroll = () => {\n if (!scroller) return;\n if (glideTarget !== null && Math.abs(scroller.scrollLeft - glideTarget) < 2) glideTarget = null;\n if (Math.abs(scroller.scrollLeft - headingFrom) > 0.5) heading = Math.sign(scroller.scrollLeft - headingFrom);\n headingFrom = scroller.scrollLeft;\n if (!frame)\n frame = requestAnimationFrame(() => {\n frame = 0;\n syncFirst();\n loadMore();\n rememberAnchor();\n });\n window.clearTimeout(restTimer);\n restTimer = window.setTimeout(settle, fingers > 0 ? 160 : 140);\n };\n\n // Days loaded before the strip's first day shift it; the view keeps its days in place.\n let anchor: { key: string; offset: number } | null = null;\n /** A day the host moved to before its days loaded; it goes on screen once they arrive. */\n let pendingTarget: string | null = null;\n /** Notes the day at the start of the strip, read against the days the strip draws, which may still be the old ones. */\n const rememberAnchor = (drawn = untrack(keys)) => {\n if (!scroller) return;\n const width = columnWidth();\n if (width <= 0) return;\n const index = Math.floor(scroller.scrollLeft / width);\n const key = drawn[index];\n if (key) anchor = { key, offset: scroller.scrollLeft - index * width };\n };\n // Before the days change the strip, note its place from the page as it stands. A computation runs before any render\n // effect touches the page, so no row has shrunk the strip yet.\n createComputed(\n on(\n keys,\n (next, drawn) => {\n if (!untrack(mounted) || !drawn) return;\n rememberAnchor(drawn);\n // Days that come in before the strip move every index; the first day in view stays the same day, so what\n // depends on the days in view, such as the all-day row, never sees the days that came in.\n const shift = dayKeyNumber(drawn[0]!) - dayKeyNumber(next[0]!);\n if (shift !== 0) setFirstIndex((index) => index + shift);\n },\n { defer: true },\n ),\n );\n createEffect(\n on(\n keys,\n () => {\n if (!untrack(mounted) || !scroller) return;\n if (pendingTarget && loaded(pendingTarget)) {\n positionAt(pendingTarget);\n pendingTarget = null;\n rememberAnchor();\n syncFirst();\n return;\n }\n if (!anchor) return;\n const index = indexOf(anchor.key);\n const left = leftOf(index) + anchor.offset;\n if (Math.abs(scroller.scrollLeft - left) > 0.5) scroller.scrollLeft = left;\n lastLeft = scroller.scrollLeft;\n },\n { defer: true },\n ),\n );\n\n /** The day width the strip last kept its first day for. */\n let measuredWidth = 0;\n onMount(() => {\n setMounted(true);\n queueMicrotask(() => {\n positionAt(view.anchorKey());\n rememberAnchor();\n ready = true;\n });\n const observer =\n typeof ResizeObserver === \"undefined\"\n ? undefined\n : new ResizeObserver(() => {\n if (!scroller) return;\n // A reveal the scroll handler has not read yet wins over keeping the first day.\n const unread = Math.abs(scroller.scrollLeft - lastLeft) > 0.5;\n const before = untrack(firstIndex);\n measureCount();\n // Only days of a new width move the strip back onto its first day. Setting scrollLeft stops a smooth scroll\n // on its way, such as a reveal, so a drawer's padding or the strip's own trim must not.\n const width = columnWidth();\n const resized = Math.abs(width - measuredWidth) > 0.01;\n measuredWidth = width;\n if (resized && !unread && Math.abs(scroller.scrollLeft - leftOf(before)) > 0.5) scroller.scrollLeft = leftOf(before);\n lastLeft = scroller.scrollLeft;\n syncFirst();\n });\n if (scroller) observer?.observe(scroller);\n onCleanup(() => {\n observer?.disconnect();\n window.clearTimeout(restTimer);\n window.clearTimeout(reportTimer);\n window.clearTimeout(glideTimer);\n if (frame) cancelAnimationFrame(frame);\n });\n });\n createEffect(\n on(\n view.anchorKey,\n (key) => {\n if (!untrack(mounted)) return;\n setNightWeek(key);\n pendingTarget = loaded(key) ? null : key;\n if (pendingTarget) return;\n if (key === untrack(visibleKeys).first) {\n rememberAnchor();\n return;\n }\n queueMicrotask(() => {\n positionAt(key);\n rememberAnchor();\n });\n },\n { defer: true },\n ),\n );\n\n const loaded = (key: string) => key >= view.range().first && key <= view.range().last;\n const handle: TimeViewHandle = {\n visibleKeys,\n step: (direction) => {\n const first = visibleKeys().first;\n const week = weekKeysOf(view, first);\n // From the middle of a week the arrows go to the start of a week first.\n const target = direction > 0 ? addDayKeys(week[0]!, 7) : first === week[0] ? addDayKeys(week[0]!, -7) : week[0]!;\n const last = addDayKeys(target, Math.min(6, visibleCount() - 1));\n if (!loaded(target) || !loaded(last)) return false;\n setNightWeek(target);\n glideTo(leftOf(indexOf(target)));\n return true;\n },\n goTo: (key) => {\n if (!loaded(key)) return false;\n setNightWeek(key);\n view.setSelection({ key });\n glideTo(leftOf(columnFor(key, key)));\n return true;\n },\n today: () => {\n const today = view.nowKey();\n const week = weekKeysOf(view, today);\n if (!loaded(week[0]!) || !loaded(week[6]!)) return false;\n setNightWeek(today);\n queueMicrotask(() => glideTo(leftOf(columnFor(today, today)), topFor(view.nowMinute())));\n return true;\n },\n todayDirection: () => {\n const today = view.nowKey();\n const { first, last } = visibleKeys();\n if (today < first) return \"left\";\n if (today > last) return \"right\";\n return \"\";\n },\n controller: {\n quickCreate: (create) => {\n const target = view.createTarget(visibleKeys());\n const column = scroller?.querySelector<HTMLElement>(`[data-calendar-body=\"${target.key}\"]`);\n view.openQuickCreate(\n target.key,\n target.start,\n target.end,\n slotRect(target.key, target.start, target.end) ?? column ?? scroller!,\n create,\n );\n },\n createTarget: () => view.rangeOfSelection(view.createTarget(visibleKeys())),\n dragIn: (event, item, onDrop) => view.dragIn(event, item, onDrop, scroller),\n },\n };\n const slotRect = (key: string, start: number, end: number): DOMRect | null => {\n const body = scroller?.querySelector<HTMLElement>(`[data-calendar-body=\"${key}\"]`);\n if (!body || !scroller) return null;\n const rect = body.getBoundingClientRect();\n const bounds = scroller.getBoundingClientRect();\n if (rect.right < bounds.left + gutterWidth() || rect.left > bounds.right) return null;\n const geometry = readDayGeometry(body, wake(), nightsOpen());\n const top = rect.top + dayY(geometry, start);\n const bottom = rect.top + dayY(geometry, end);\n if (bottom < bounds.top + 40 || top > bounds.bottom - 20) return null;\n return new DOMRect(\n rect.left,\n Math.max(bounds.top, top),\n rect.width,\n Math.max(8, Math.min(bottom, bounds.bottom) - Math.max(bounds.top, top)),\n );\n };\n onMount(() => props.register(handle));\n onCleanup(() => props.register(null));\n\n // The all-day row: one bar per week, with a torn edge where an event goes on in the week before or after.\n const allDay = createMemo(() => {\n const all = keys();\n const spans = new Map<CalendarEvent, DaySpan<CalendarEvent>>();\n for (const key of all) for (const span of view.dayOf(key).spans) spans.set(span.item, span);\n const entries = [...spans.values()]\n .sort((left, right) => left.firstKey.localeCompare(right.firstKey) || right.lastKey.localeCompare(left.lastKey))\n .map((span) => ({ item: span, firstKey: span.firstKey, lastKey: span.lastKey, bar: !span.marker }));\n const weeks: { offset: number; keys: string[] }[] = [];\n for (let index = 0; index < all.length; ) {\n const week = weekKeysOf(view, all[index]!).filter((key) => key >= all[0]! && key <= all[all.length - 1]!);\n const offset = indexOf(week[0]!);\n weeks.push({ offset, keys: week });\n index = offset + week.length;\n }\n return weeks.map((week) => {\n const layout = layoutMonthWeek(week.keys, entries);\n const lanes = Math.max(0, ...layout.bars.map((bar) => bar.lane + 1));\n return { ...week, layout, rows: lanes + Math.max(0, ...layout.singles.map((singles) => singles.length)) };\n });\n });\n /**\n * The rows the weeks in view need, as in a week of its own. A week that loads off screen never changes them, so the\n * hours stay where they are; its entries below these rows wait hidden until it comes into view.\n */\n const allDayRows = createMemo(() => {\n const first = firstIndex();\n const last = first + visibleCount() - 1;\n return Math.max(\n 1,\n ...allDay()\n .filter((week) => week.offset <= last && week.offset + week.keys.length - 1 >= first)\n .map((week) => week.rows),\n );\n });\n\n // Keyboard: one tab stop in the grid; the arrows move between days, entries, and free time. Only what is drawn can\n // take the focus.\n const stops = () =>\n [...(scroller?.querySelectorAll<HTMLElement>(\"[data-stop]\") ?? [])].filter((stop) => stop.getClientRects().length > 0);\n const focusDayKey = () => {\n const current = view.selection()?.key;\n const { first, last } = visibleKeys();\n if (current && current >= first && current <= last) return current;\n return view.nowKey() >= first && view.nowKey() <= last ? view.nowKey() : first;\n };\n const rovingId = () => roving() || `h:${focusDayKey()}`;\n const tabOf = (id: string) => (rovingId() === id ? 0 : -1);\n // An entry that leaves the days gives the grid's tab stop back to a heading after the page has updated.\n createEffect(\n on(\n view.days,\n () => {\n queueMicrotask(() => {\n if (!scroller || !roving()) return;\n if ([...scroller.querySelectorAll<HTMLElement>(\"[data-stop]\")].some((stop) => stop.dataset.stop === roving())) return;\n setRoving(\"\");\n if (!document.activeElement || document.activeElement === document.body) {\n scroller.querySelector<HTMLElement>(`[data-stop=\"h:${focusDayKey()}\"]`)?.focus({ preventScroll: true });\n }\n });\n },\n { defer: true },\n ),\n );\n const onKeyDown = (event: KeyboardEvent) => {\n const current = event.target instanceof HTMLElement ? event.target.closest<HTMLElement>(\"[data-stop]\") : null;\n if (!current || event.altKey || event.metaKey || event.ctrlKey) return;\n const direction = { ArrowUp: \"up\", ArrowDown: \"down\", ArrowLeft: \"left\", ArrowRight: \"right\", Home: \"home\", End: \"end\" }[event.key];\n if (!direction) return;\n event.preventDefault();\n const all = stops();\n const column = Number(current.dataset.col);\n const minute = Number(current.dataset.minute);\n const inColumn = (index: number) =>\n all\n .filter((stop) => Number(stop.dataset.col) === index)\n .sort((left, right) => Number(left.dataset.minute) - Number(right.dataset.minute));\n const list = inColumn(column);\n const position = list.indexOf(current);\n let next: HTMLElement | undefined;\n if (direction === \"down\") next = list[position + 1];\n else if (direction === \"up\") next = list[position - 1];\n else if (direction === \"home\") next = list[0];\n else if (direction === \"end\") next = list[list.length - 1];\n else {\n const other = inColumn(column + (direction === \"left\" ? -1 : 1));\n next = other.reduce<HTMLElement | undefined>(\n (best, stop) =>\n Math.abs(Number(stop.dataset.minute) - minute) < Math.abs(Number(best?.dataset.minute ?? Number.POSITIVE_INFINITY) - minute)\n ? stop\n : best,\n undefined,\n );\n }\n if (!next) return;\n setRoving(next.dataset.stop ?? \"\");\n next.focus({ preventScroll: Boolean(next.closest(\".k2b-calendar-week__top\")) });\n const index = Number(next.dataset.col);\n const first = untrack(firstIndex);\n if (index < first) glideTo(leftOf(index));\n else if (index >= first + visibleCount()) glideTo(leftOf(index - visibleCount() + 1));\n };\n\n const openDay = (key: string) => {\n const href = props.owner.views && !props.owner.views.includes(\"day\") ? undefined : props.owner.getDateHref?.(view.parseKey(key), \"day\");\n if (href) followCalendarHref(props.owner, href);\n else {\n props.owner.onViewChange?.(\"day\");\n props.owner.onDateChange?.(view.parseKey(key), \"day\");\n }\n };\n let lastPointer = \"mouse\";\n\n // The all-day row: drag across days for one all-day event; a double-click creates on one day.\n const startAllDayRange = (pointerEvent: PointerEvent, row: HTMLElement) => {\n if (pointerEvent.pointerType !== \"mouse\" || pointerEvent.button !== 0 || !view.canCreate()) return;\n const keyAt = (clientX: number) => {\n const width = columnWidth();\n const rect = row.getBoundingClientRect();\n const index = Math.max(0, Math.min(keys().length - 1, Math.floor((clientX - rect.left) / width)));\n return keys()[index]!;\n };\n const origin = keyAt(pointerEvent.clientX);\n startCalendarPointerSession({\n event: pointerEvent,\n resolve: (clientX) => keyAt(clientX),\n onPreview: (key) => setRangeSelection(origin < key ? { first: origin, last: key } : { first: key, last: origin }),\n onCommit: (key) => {\n swallowNextClick();\n const range = origin < key ? { first: origin, last: key } : { first: key, last: origin };\n const cells = scroller?.querySelector<HTMLElement>(\".k2b-calendar-week__range\");\n setRangeSelection(null);\n const start = view.parseKey(range.first);\n const end = calendar.addDays(view.parseKey(range.last), 1, view.dateConfig());\n if (props.owner.renderQuickCreate)\n view.setQuick({ range: { start, end, allDay: true }, anchor: cells?.getBoundingClientRect() ?? row, key: range.first });\n else props.owner.onSlotActivate?.({ start, end, allDay: true });\n },\n onCancel: () => setRangeSelection(null),\n });\n };\n const [rangeSelection, setRangeSelection] = createSignal<{ first: string; last: string } | null>(null);\n\n return (\n <div class=\"k2b-calendar-week\" data-view=\"week\" data-dragging={view.dragging() || undefined}>\n <div\n ref={scroller}\n class=\"k2b-calendar-week__scroll k2b-detail-trail\"\n role=\"group\"\n aria-label={view.messages().calendarWeek}\n aria-describedby={helpId}\n onScroll={onScroll}\n onWheel={onWheel}\n onKeyDown={onKeyDown}\n onFocusIn={(event) => {\n const stop = event.target instanceof HTMLElement ? event.target.closest<HTMLElement>(\"[data-stop]\") : null;\n if (stop?.dataset.stop) setRoving(stop.dataset.stop);\n }}\n onTouchStart={(event) => {\n fingers = event.touches.length;\n gesture = true;\n glideTarget = null;\n }}\n onTouchEnd={(event) => {\n fingers = event.touches.length;\n onScroll();\n }}\n onTouchCancel={(event) => {\n fingers = event.touches.length;\n }}\n style={{ \"--k2b-calendar-days\": String(keys().length) }}\n >\n <div class=\"k2b-calendar-week__grid\">\n <div class=\"k2b-calendar-week__top\">\n <div class=\"k2b-calendar-week__corner\" aria-hidden=\"true\">\n {view.messages().calendarWeekNumber({ week: isoWeek(visibleKeys().first) })}\n </div>\n <For each={keys()}>\n {(key) => {\n const today = () => key === view.calendarToday();\n const selected = () => {\n const current = view.selection();\n return Boolean(current && current.key === key && current.start === undefined);\n };\n const badge = () => props.owner.dayBadges?.[key];\n const load = () => dayLoad(view, key);\n const date = () => view.parseKey(key);\n return (\n <button\n type=\"button\"\n class=\"k2b-calendar-week__head\"\n data-calendar-head={key}\n data-stop={`h:${key}`}\n data-col={indexOf(key)}\n data-minute={-2}\n tabIndex={tabOf(`h:${key}`)}\n aria-pressed={selected() ? \"true\" : \"false\"}\n aria-label={[longDay(view, key), today() ? view.props.labels.today : \"\", badge()?.label ?? \"\"]\n .filter(Boolean)\n .join(\", \")}\n data-today={today() ? \"true\" : undefined}\n data-weekend={isWeekendKey(key, view.dateConfig().locale) ? \"true\" : undefined}\n data-past={key < view.calendarToday() ? \"true\" : undefined}\n data-cheer={view.cheered() === key ? \"true\" : undefined}\n style={{ \"grid-column\": String(indexOf(key) + 2) }}\n onPointerDown={(event) => {\n lastPointer = event.pointerType;\n // The heading stays on top: focusing it must not scroll the grid.\n if (event.button === 0) {\n event.preventDefault();\n event.currentTarget.focus({ preventScroll: true });\n }\n }}\n onClick={(event) => {\n if (event.detail >= 2 || (selected() && lastPointer !== \"mouse\")) {\n openDay(key);\n return;\n }\n view.setTouchDraft(null);\n view.setSelection(selected() ? null : { key });\n }}\n >\n <span class=\"k2b-calendar-week__weekday\">\n {date()\n .toLocaleDateString(view.dateConfig().locale ?? \"en\", { weekday: \"short\", timeZone: view.dateConfig().timeZone })\n .replace(/\\.$/, \"\")}\n </span>\n <span class=\"k2b-calendar-week__number\">{calendar.formatDayNumber(date(), view.dateConfig())}</span>\n <span class=\"k2b-calendar-week__extra\">\n <Show when={badge()}>\n {(current) => (\n <span class=\"k2b-calendar-week__badge\">\n <Show when={current().icon}>{(icon) => <i class={`ti ti-${icon()}`} aria-hidden=\"true\" />}</Show>\n {current().label}\n </span>\n )}\n </Show>\n </span>\n <span class=\"k2b-calendar-week__load\" aria-hidden=\"true\">\n <For each={load()}>\n {(piece) => <span style={{ width: `${((piece.end - piece.start) / wake()) * 100}%`, background: piece.color }} />}\n </For>\n </span>\n <span class=\"k2b-calendar-week__cheer\" aria-hidden=\"true\">\n <i class=\"ti ti-confetti\" aria-hidden=\"true\" />\n <span class=\"k2b-calendar-week__cheer-long\">{view.messages().calendarAllDone}</span>\n <span class=\"k2b-calendar-week__cheer-short\">{view.messages().calendarAllDoneShort}</span>\n </span>\n </button>\n );\n }}\n </For>\n <div class=\"k2b-calendar-week__all-day-label\" aria-hidden=\"true\">\n <span class=\"k2b-calendar-week__all-day-long\">{view.messages().calendarAllDayRow}</span>\n <span class=\"k2b-calendar-week__all-day-short\">{view.messages().calendarAllDayRowShort}</span>\n </div>\n <div\n class=\"k2b-calendar-week__all-day\"\n role=\"group\"\n aria-label={view.messages().calendarAllDayAndDue}\n style={{ \"grid-template-rows\": `repeat(${allDayRows()}, var(--k2b-calendar-all-day-row))` }}\n onPointerDown={(event) => {\n if (event.target instanceof Element && event.target.closest(\"a,button,[data-calendar-event]\")) return;\n startAllDayRange(event, event.currentTarget);\n }}\n onDblClick={(event) => {\n if (!(event.target instanceof Element) || event.target.closest(\"a,button,[data-calendar-event]\")) return;\n const width = columnWidth();\n const rect = event.currentTarget.getBoundingClientRect();\n const key = keys()[Math.max(0, Math.min(keys().length - 1, Math.floor((event.clientX - rect.left) / width)))]!;\n const start = view.parseKey(key);\n const range = { start, end: calendar.addDays(start, 1, view.dateConfig()), allDay: true };\n if (props.owner.renderQuickCreate)\n view.setQuick({ range, anchor: new DOMRect(rect.left + indexOf(key) * width, rect.top, width, rect.height), key });\n else props.owner.onSlotActivate?.(range);\n }}\n >\n {/* The weekend band runs on through the all-day row; positioned, it takes no cell from the bars. */}\n <For each={keys()}>\n {(key, index) => (\n <Show when={isWeekendKey(key, view.dateConfig().locale)}>\n <span class=\"k2b-calendar-week__weekend\" style={{ \"grid-column\": `${index() + 1} / span 1` }} aria-hidden=\"true\" />\n </Show>\n )}\n </For>\n <Show when={rangeSelection()}>\n {(range) => (\n <div\n class=\"k2b-calendar-week__range\"\n style={{ \"grid-column\": `${indexOf(range().first) + 1} / ${indexOf(range().last) + 2}`, \"grid-row\": \"1 / -1\" }}\n aria-hidden=\"true\"\n />\n )}\n </Show>\n <For each={allDay()}>\n {(week) => (\n <>\n <For each={week.layout.bars}>\n {(bar) => {\n const span = bar.endColumn - bar.startColumn + 1;\n const event = bar.item.item;\n const checked = () => view.checkedOf(event);\n const hint = (target: string, kind: \"from\" | \"until\", before = \"\") => {\n const text =\n kind === \"from\"\n ? view.messages().calendarContinuesFrom(hintDate(view, target, visibleKeys().first))\n : view.messages().calendarContinuesUntil(hintDate(view, target, visibleKeys().first));\n const font = `600 11px ${typeof document === \"undefined\" ? \"sans-serif\" : getComputedStyle(document.body).fontFamily}`;\n return textWidth(`${event.title}${before}`, font) + textWidth(text, font) + HINT_SLACK_PX <=\n span * columnWidthSignal()\n ? text\n : undefined;\n };\n const start = () => (bar.continuesBefore ? hint(bar.item.firstKey, \"from\") : undefined);\n const end = () => (bar.continuesAfter ? hint(bar.item.lastKey, \"until\", start() ?? \"\") : undefined);\n return (\n <div\n class=\"k2b-calendar-week__slot\"\n data-checkbox={checked() !== undefined ? \"true\" : undefined}\n data-checked={checked() ? \"true\" : undefined}\n data-just-checked={view.justChecked().has(event.id) ? \"true\" : undefined}\n style={{\n \"grid-column\": `${week.offset + bar.startColumn + 1} / ${week.offset + bar.endColumn + 2}`,\n \"grid-row\": String(bar.lane + 1),\n \"--k2b-calendar-accent\": eventAccent(event),\n display: bar.lane + 1 > allDayRows() ? \"none\" : undefined,\n }}\n >\n <Show when={checked() !== undefined}>\n <TimeCheck view={view} event={event} tabIndex={-1} />\n </Show>\n <EventChip\n event={view.normalized(event, bar.item.firstKey)}\n owner={props.owner}\n href={eventHref(props.owner, event)}\n label={spanLabel(view, bar.item)}\n compact\n timeline\n bar\n checkbox={checked() !== undefined}\n onCheck={view.checkOf(event)}\n continuesBefore={bar.continuesBefore}\n continuesAfter={bar.continuesAfter}\n hintStart={start()}\n hintEnd={end()}\n tabIndex={tabOf(`a:${event.id}:${week.offset}`)}\n stop={{\n id: `a:${event.id}:${week.offset}`,\n column: week.offset + bar.startColumn,\n minute: -1 + bar.lane / 100,\n }}\n />\n </div>\n );\n }}\n </For>\n <For each={week.layout.singles}>\n {(singles, column) => {\n const lanes = () =>\n Math.max(\n 0,\n ...week.layout.bars\n .filter((bar) => bar.startColumn <= column() && bar.endColumn >= column())\n .map((bar) => bar.lane + 1),\n );\n return (\n <For each={singles}>\n {(span, row) => {\n const event = span.item;\n const checked = () => view.checkedOf(event);\n const id = `a:${event.id}:${week.offset}`;\n return (\n <div\n class=\"k2b-calendar-week__slot\"\n data-checkbox={checked() !== undefined ? \"true\" : undefined}\n data-checked={checked() ? \"true\" : undefined}\n data-just-checked={view.justChecked().has(event.id) ? \"true\" : undefined}\n style={{\n \"grid-column\": String(week.offset + column() + 1),\n \"grid-row\": String(lanes() + row() + 1),\n \"--k2b-calendar-accent\": eventAccent(event),\n display: lanes() + row() + 1 > allDayRows() ? \"none\" : undefined,\n }}\n >\n <Show when={checked() !== undefined}>\n <TimeCheck view={view} event={event} tabIndex={-1} />\n </Show>\n <EventChip\n event={view.normalized(event, span.firstKey)}\n owner={props.owner}\n href={eventHref(props.owner, event)}\n compact\n timeline\n checkbox={checked() !== undefined}\n onCheck={view.checkOf(event)}\n tabIndex={tabOf(id)}\n stop={{ id, column: week.offset + column(), minute: -1 + (lanes() + row()) / 100 }}\n />\n </div>\n );\n }}\n </For>\n );\n }}\n </For>\n </>\n )}\n </For>\n </div>\n </div>\n <div class=\"k2b-calendar-week__body\" style={{ height: termsCss(dayHeightTerms(wake(), nightsOpen())) }}>\n <div class=\"k2b-calendar-week__gutter\">\n <For each={Array.from({ length: wake() / 60 + 1 }, (_, index) => index * 60)}>\n {(minute) => (\n <span\n class=\"k2b-calendar-week__hour\"\n data-near-now={nowShown() && isNearNow(view, view.nowKey(), minute) ? \"true\" : undefined}\n style={{ top: termsCss(dayYTerms(wake(), nightsOpen(), minute)) }}\n aria-hidden=\"true\"\n >\n {view.clock(minute)}\n </span>\n )}\n </For>\n <Show when={nightsOpen()}>\n <For each={nightHours(wake())}>\n {(minute) => (\n <span\n class=\"k2b-calendar-week__hour\"\n data-night=\"true\"\n style={{ top: termsCss(dayYTerms(wake(), true, minute)) }}\n aria-hidden=\"true\"\n >\n {view.clock(minute)}\n </span>\n )}\n </For>\n </Show>\n <button\n type=\"button\"\n class=\"k2b-calendar-week__moon\"\n aria-expanded={nightsOpen() ? \"true\" : \"false\"}\n aria-label={\n nightsOpen()\n ? view.messages().calendarFoldNights\n : view.messages().calendarOpenNights({ from: view.clock(wake()).slice(0, 2), to: view.clock(DAY_MINUTES).slice(0, 2) })\n }\n title={\n nightsOpen()\n ? view.messages().calendarFoldNights\n : view.messages().calendarOpenNights({ from: view.clock(wake()).slice(0, 2), to: view.clock(DAY_MINUTES).slice(0, 2) })\n }\n data-open={nightsOpen() ? \"true\" : undefined}\n style={{ top: termsCss(dayYTerms(wake(), nightsOpen(), nightsOpen() ? wake() : wake() + 1)) }}\n onClick={() => setNightOverride(!nightsOpen())}\n >\n <i class=\"ti ti-moon\" aria-hidden=\"true\" />\n <i class={`ti ${nightsOpen() ? \"ti-chevron-up\" : \"ti-chevron-down\"}`} aria-hidden=\"true\" />\n </button>\n <Show when={nowShown()}>\n <span\n class=\"k2b-calendar-week__now-time\"\n style={{ top: termsCss(dayYTerms(wake(), nightsOpen(), view.nowMinute())) }}\n aria-hidden=\"true\"\n >\n {view.clock(view.nowMinute())}\n </span>\n </Show>\n </div>\n <div class=\"k2b-calendar-week__lines\" aria-hidden=\"true\">\n <For each={Array.from({ length: wake() / 60 + 1 }, (_, index) => index * 60)}>\n {(minute) => <span class=\"k2b-calendar-week__line\" style={{ top: termsCss(dayYTerms(wake(), nightsOpen(), minute)) }} />}\n </For>\n <Show\n when={nightsOpen()}\n fallback={\n <span class=\"k2b-calendar-week__fold\" style={{ top: `calc(${termsCss(dayYTerms(wake(), false, wake()))} + 3px)` }} />\n }\n >\n <span\n class=\"k2b-calendar-night\"\n style={{ top: termsCss(dayYTerms(wake(), true, wake())), height: termsCss([0, (DAY_MINUTES - wake()) / 60, 1, 0]) }}\n />\n <For each={nightHours(wake())}>\n {(minute) => (\n <span\n class=\"k2b-calendar-week__line\"\n data-midnight={view.clock(minute) === \"00:00\" ? \"true\" : undefined}\n style={{ top: termsCss(dayYTerms(wake(), true, minute)) }}\n />\n )}\n </For>\n </Show>\n <Show when={nowShown()}>\n <span class=\"k2b-calendar-week__now-line\" style={{ top: termsCss(dayYTerms(wake(), nightsOpen(), view.nowMinute())) }} />\n </Show>\n </div>\n <For each={keys()}>\n {(key) => (\n <WeekColumn\n view={view}\n dayKey={key}\n column={indexOf(key)}\n expanded={nightsOpen()}\n tabOf={tabOf}\n lastPointer={() => lastPointer}\n setLastPointer={(value) => {\n lastPointer = value;\n }}\n scroller={() => scroller}\n />\n )}\n </For>\n </div>\n </div>\n </div>\n <p class=\"k2b-calendar-sr\" id={helpId}>\n {view.messages().calendarKeyboardHelp}\n </p>\n <TimeQuickCreate view={view} />\n </div>\n );\n\n function columnWidthSignal() {\n // Read through the visible count so a resize recomputes the hints.\n visibleCount();\n return columnWidth();\n }\n};\n\nconst WeekColumn = (props: {\n view: TimeView;\n dayKey: string;\n column: number;\n expanded: boolean;\n tabOf: (id: string) => number;\n lastPointer: () => string;\n setLastPointer: (value: string) => void;\n scroller: () => HTMLElement | undefined;\n}) => {\n const view = props.view;\n const model = createMemo(() => view.dayOf(props.dayKey));\n const wake = () => view.wake();\n const bands = createMemo(() => dayBands(view, props.dayKey, props.expanded));\n const gaps = createMemo(() => dayGaps(view, props.dayKey));\n const markers = () => model().markers.filter((marker) => marker.minute < (props.expanded ? DAY_MINUTES : wake()));\n /** Deadlines whose pills would cover each other share the width; keyed by marker, so rows keep their elements. */\n const lanes = createMemo(() => new Map(markerLanes(markers(), wake()).map((entry) => [entry.item, entry])));\n const folded = () => (props.expanded ? [] : foldedEntries(view, props.dayKey));\n const isEmptyTarget = (target: EventTarget | null) =>\n target instanceof Element &&\n !target.closest(\n \"a,button,[data-calendar-event],.k2b-calendar-band,.k2b-calendar-marker,.k2b-calendar-draft,.k2b-calendar-week__fold-cell\",\n );\n const minuteAt = (element: HTMLElement, clientY: number) => {\n const geometry = readDayGeometry(element, wake(), props.expanded);\n return Math.max(\n 0,\n Math.min((props.expanded ? DAY_MINUTES : wake()) - 15, dayMinuteAt(geometry, clientY - element.getBoundingClientRect().top)),\n );\n };\n const nowMinute = () => (props.dayKey === view.nowKey() ? view.nowMinute() : null);\n const selected = () => view.selection()?.key === props.dayKey;\n /** The quarter hour under the mouse on empty time, as a line with its time, to aim a drag at. */\n const [hover, setHover] = createSignal<number | null>(null);\n const timeline = createMemo(() =>\n [\n ...gaps().map((gap) => ({ at: gap.start, kind: \"gap\" as const, gap })),\n ...bands().map((band) => ({ at: Math.max(0, band.start), kind: \"band\" as const, band })),\n ...markers().map((marker) => ({ at: marker.minute, kind: \"marker\" as const, marker })),\n ].sort((left, right) => left.at - right.at),\n );\n return (\n <div\n ref={(element) => view.registerBody(props.dayKey, element, () => props.expanded)}\n class=\"k2b-calendar-week__column\"\n data-calendar-column=\"\"\n data-calendar-body={props.dayKey}\n data-expanded={props.expanded ? \"true\" : \"false\"}\n data-today={props.dayKey === view.calendarToday() ? \"true\" : undefined}\n data-weekend={isWeekendKey(props.dayKey, view.dateConfig().locale) ? \"true\" : undefined}\n data-selected={selected() ? \"true\" : undefined}\n data-active={view.activeKey() === props.dayKey ? \"true\" : undefined}\n role=\"group\"\n aria-label={longDay(view, props.dayKey)}\n style={{ \"grid-column\": String(props.column + 2), height: termsCss(dayHeightTerms(wake(), props.expanded)) }}\n onPointerDown={(event) => {\n props.setLastPointer(event.pointerType);\n if (event.button !== 0 || !isEmptyTarget(event.target)) return;\n view.startDraw(event, props.dayKey, props.scroller());\n }}\n // Some engines send a tap as touch events only; a tap is a tap either way.\n onTouchStart={() => props.setLastPointer(\"touch\")}\n // Listening on the column itself, not through delegation, makes it a tap target on iOS.\n on:click={(event) => {\n if (!isEmptyTarget(event.target)) return;\n const minute = Math.floor(minuteAt(event.currentTarget, event.clientY) / 30) * 30;\n const end = Math.min(minute + 60, props.expanded ? DAY_MINUTES : wake());\n if (props.lastPointer() === \"mouse\") {\n if (!view.canCreate()) return;\n view.setTouchDraft(null);\n view.setSelection({ key: props.dayKey, start: minute, end });\n return;\n }\n // A first tap on a column shows its free time; the next one proposes an hour there.\n if (view.activeKey() !== props.dayKey) {\n view.setActiveKey(props.dayKey);\n view.setTouchDraft(null);\n view.setSelection({ key: props.dayKey });\n return;\n }\n if (!view.canCreate()) return;\n view.setTouchDraft({ key: props.dayKey, start: minute, end });\n view.setSelection({ key: props.dayKey, start: minute, end });\n }}\n onDblClick={(event) => {\n if (!isEmptyTarget(event.target) || props.lastPointer() !== \"mouse\") return;\n const minute = Math.floor(minuteAt(event.currentTarget, event.clientY) / 30) * 30;\n view.openQuickCreate(props.dayKey, minute, Math.min(minute + 60, props.expanded ? DAY_MINUTES : wake()), event.currentTarget);\n }}\n onPointerMove={(event) => {\n if (event.pointerType !== \"mouse\" || view.dragging() || !isEmptyTarget(event.target)) return setHover(null);\n setHover(Math.floor(minuteAt(event.currentTarget, event.clientY) / 15) * 15);\n }}\n onPointerLeave={() => setHover(null)}\n >\n <For each={timeline()}>\n {(entry) =>\n entry.kind === \"gap\" ? (\n <TimeGap\n view={view}\n gap={entry.gap}\n dayKey={props.dayKey}\n expanded={props.expanded}\n aside={gapAside(model(), entry.gap)}\n tabIndex={props.tabOf(`g:${props.dayKey}:${entry.gap.start}`)}\n stop={{ id: `g:${props.dayKey}:${entry.gap.start}`, column: props.column, minute: entry.gap.start + 0.5 }}\n />\n ) : entry.kind === \"band\" ? (\n <TimeBand\n view={view}\n band={entry.band}\n dayKey={props.dayKey}\n expanded={props.expanded}\n hourPx={48}\n tabIndex={props.tabOf(`b:${entry.band.item.id}:${props.dayKey}`)}\n stop={{ id: `b:${entry.band.item.id}:${props.dayKey}`, column: props.column, minute: entry.band.start }}\n scroller={props.scroller}\n />\n ) : (\n <TimeMarker\n view={view}\n event={entry.marker.item}\n minute={entry.marker.minute}\n dayKey={props.dayKey}\n expanded={props.expanded}\n above={markerAbove(model(), entry.marker.minute)}\n lane={lanes().get(entry.marker)?.lane ?? 0}\n lanes={lanes().get(entry.marker)?.lanes ?? 1}\n showTime={false}\n tabIndex={props.tabOf(`m:${entry.marker.item.id}`)}\n stop={{ id: `m:${entry.marker.item.id}`, column: props.column, minute: entry.marker.minute }}\n scroller={props.scroller}\n />\n )\n }\n </For>\n <Show when={!props.expanded && folded().length > 0}>\n <div class=\"k2b-calendar-week__fold-cell\" style={{ top: `calc(${termsCss(dayYTerms(wake(), false, wake()))} + 3px)` }}>\n <ul class=\"k2b-calendar-fold__chips\">\n {/* The arrows reach the entries of a folded night after the waking hours, and Space checks a to-do off. */}\n <For each={folded()}>\n {(entry, index) => {\n const checked = () => view.checkedOf(entry.event);\n return (\n <li\n data-checkbox={checked() !== undefined ? \"true\" : undefined}\n data-checked={checked() ? \"true\" : undefined}\n style={{ \"--k2b-calendar-accent\": eventAccent(entry.event) }}\n >\n <Show when={checked() !== undefined}>\n <TimeCheck view={view} event={entry.event} tabIndex={-1} />\n </Show>\n <EventChip\n event={view.normalized(entry.event, props.dayKey)}\n owner={view.props.owner}\n href={eventHref(view.props.owner, entry.event)}\n compact\n timeline\n leadingTime={entry.time}\n checkbox={checked() !== undefined}\n onCheck={view.checkOf(entry.event)}\n tabIndex={props.tabOf(`f:${entry.event.id}:${props.dayKey}`)}\n stop={{ id: `f:${entry.event.id}:${props.dayKey}`, column: props.column, minute: wake() + index() / 100 }}\n />\n </li>\n );\n }}\n </For>\n </ul>\n </div>\n </Show>\n <TimeOverlays view={view} dayKey={props.dayKey} expanded={props.expanded} />\n <Show when={hover() !== null}>\n <span class=\"k2b-calendar-hover\" style={{ top: termsCss(dayYTerms(wake(), props.expanded, hover()!)) }} aria-hidden=\"true\">\n {view.clock(hover()!)}\n </span>\n </Show>\n <Show when={nowMinute() !== null && nowMinute()! >= 0 && nowMinute()! < (props.expanded ? DAY_MINUTES : wake())}>\n <div class=\"k2b-calendar-now\" style={{ top: termsCss(dayYTerms(wake(), props.expanded, nowMinute()!)) }} aria-hidden=\"true\" />\n </Show>\n </div>\n );\n};\n\n/** ISO week number of a day key. */\nconst isoWeek = (key: string) => {\n const date = new Date(`${key}T00:00:00Z`);\n const day = date.getUTCDay() || 7;\n date.setUTCDate(date.getUTCDate() + 4 - day);\n const yearStart = new Date(Date.UTC(date.getUTCFullYear(), 0, 1));\n return Math.ceil(((date.getTime() - yearStart.getTime()) / 86_400_000 + 1) / 7);\n};\n\n/** The day at a torn end of a bar, with its month when it lies in another month than the shown week. */\nconst hintDate = (view: TimeView, target: string, shown: string) => ({\n day: Number(target.slice(8, 10)),\n month:\n target.slice(0, 7) === shown.slice(0, 7)\n ? undefined\n : view\n .parseKey(target)\n .toLocaleDateString(view.dateConfig().locale ?? \"en\", { month: \"short\", timeZone: view.dateConfig().timeZone })\n .replace(/\\.$/, \"\"),\n});\n\n/** A long entry's accessible name names the days it spans. */\nconst spanLabel = (view: TimeView, span: DaySpan<CalendarEvent>) => {\n if (span.firstKey === span.lastKey) return undefined;\n const format = (key: string) =>\n view\n .parseKey(key)\n .toLocaleDateString(view.dateConfig().locale ?? \"en\", { month: \"long\", day: \"numeric\", timeZone: view.dateConfig().timeZone });\n return view.messages().calendarEventTime({ title: span.item.title, start: format(span.firstKey), end: format(span.lastKey) });\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["content/CalendarWeekView.tsx"],"sourcesContent":["import { dates as calendar } from \"@k2b/stdlib\";\nimport {\n createComputed,\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n on,\n onCleanup,\n onMount,\n Show,\n untrack,\n} from \"solid-js\";\nimport { isWeekendKey } from \"../intl/weekend\";\nimport { prefersReducedMotion } from \"../motion\";\nimport type { CalendarEvent } from \"./Calendar\";\nimport { GESTURE_GAP_MS, snapToColumn, type WheelAxis, wheelAxis, wheelDelta, wheelPixels } from \"./calendar-day-scroll\";\nimport {\n addDayKeys,\n DAY_MINUTES,\n type DaySpan,\n dayHeightTerms,\n dayKeyNumber,\n dayKeyRange,\n dayMinuteAt,\n dayY,\n dayYTerms,\n markerLanes,\n readDayGeometry,\n termsCss,\n} from \"./calendar-days\";\nimport { layoutMonthWeek } from \"./calendar-month-layout\";\nimport { startCalendarPointerSession } from \"./calendar-pointer\";\nimport { EventChip, eventHref, followCalendarHref, textWidth } from \"./calendar-shared\";\nimport {\n createTimeView,\n dayBands,\n dayGaps,\n dayLoad,\n eventAccent,\n foldedEntries,\n gapAside,\n isNearNow,\n longDay,\n markerAbove,\n nightHours,\n swallowNextClick,\n TimeBand,\n TimeCheck,\n TimeGap,\n TimeMarker,\n TimeOverlays,\n TimeQuickCreate,\n type TimeView,\n type TimeViewHandle,\n type TimeViewProps,\n weekKeysOf,\n} from \"./calendar-time-view\";\n\n/** Room a bar keeps beside its title and date hint: padding, torn edge, gap, and an icon such as a task box. */\nconst HINT_SLACK_PX = 36;\n\n/**\n * The week view with `dayHours`: the loaded days side by side in one strip, seven on a wide screen and three on a\n * phone. A trackpad, Shift with the wheel, or a finger scroll it sideways day by day; each gesture keeps the axis it\n * started on, and the strip settles on a day edge. The arrows move by whole weeks.\n */\nexport const CalendarWeekView = (props: TimeViewProps) => {\n const view = createTimeView(props);\n const [mounted, setMounted] = createSignal(false);\n const [firstIndex, setFirstIndex] = createSignal(0);\n const [visibleCount, setVisibleCount] = createSignal(7);\n /** The week whose nights decide whether the night rows open, set by navigation, not by free scrolling. */\n const [nightWeek, setNightWeek] = createSignal(untrack(view.anchorKey));\n const [nightOverride, setNightOverride] = createSignal<boolean | null>(null);\n const [roving, setRoving] = createSignal(\"\");\n let scroller: HTMLDivElement | undefined;\n const helpId = createUniqueId();\n\n const anchorWeek = () => weekKeysOf(view, view.anchorKey());\n // The server and the first render draw only the shown week, so the strip never flashes the days before it.\n const keys = createMemo(() => {\n const { first, last } = view.range();\n if (mounted()) return dayKeyRange(first, last);\n const week = anchorWeek();\n return week[0]! >= first && week[6]! <= last ? week : dayKeyRange(first, last);\n });\n const indexOf = (key: string) => dayKeyNumber(key) - dayKeyNumber(keys()[0]!);\n const nightsOpen = createMemo(() => {\n const override = nightOverride();\n if (override !== null) return override;\n return weekKeysOf(view, nightWeek()).some((key) => view.dayOf(key).night);\n });\n createEffect(on(nightWeek, () => setNightOverride(null), { defer: true }));\n const wake = () => view.wake();\n\n // Columns and scrolling.\n /** The exact width of a day column: columns are a seventh or a third of the strip, rarely whole pixels. */\n const columnWidth = () => scroller?.querySelector<HTMLElement>(\"[data-calendar-column]\")?.getBoundingClientRect().width ?? 0;\n const gutterWidth = () => scroller?.querySelector<HTMLElement>(\".k2b-calendar-week__gutter\")?.offsetWidth ?? 0;\n const leftOf = (index: number) => index * columnWidth();\n const visibleIndex = () => {\n const width = columnWidth();\n return width > 0 && scroller ? Math.round(scroller.scrollLeft / width) : 0;\n };\n const visibleKeys = () => {\n const first = keys()[Math.min(keys().length - 1, Math.max(0, firstIndex()))] ?? view.anchorKey();\n return { first, last: addDayKeys(first, visibleCount() - 1) };\n };\n /** Now shows in the hours while today is among the days in view, like the prototype's week. */\n const nowShown = () => {\n const { first, last } = visibleKeys();\n const today = view.nowKey();\n return today >= first && today <= last && view.nowMinute() >= 0 && view.nowMinute() < (nightsOpen() ? DAY_MINUTES : wake());\n };\n\n let settling = false;\n let glideTarget: number | null = null;\n let glideTimer = 0;\n const glideTo = (left: number, top?: number) => {\n if (!scroller) return;\n const target = Math.max(0, Math.min(left, scroller.scrollWidth - scroller.clientWidth));\n glideTarget = target;\n window.clearTimeout(glideTimer);\n glideTimer = window.setTimeout(() => {\n glideTarget = null;\n }, 1600);\n scroller.scrollTo({ left: target, ...(top === undefined ? {} : { top }), behavior: prefersReducedMotion() ? \"instant\" : \"smooth\" });\n };\n /** The scroll position of a minute in the timeline, with now in the upper third. */\n const topFor = (minute: number) => {\n if (!scroller) return 0;\n const body = scroller.querySelector<HTMLElement>(\"[data-calendar-body]\");\n const head = scroller.querySelector<HTMLElement>(\".k2b-calendar-week__top\");\n if (!body || !head) return 0;\n const geometry = readDayGeometry(body, wake(), nightsOpen());\n const offset = body.getBoundingClientRect().top - scroller.getBoundingClientRect().top + scroller.scrollTop - head.offsetHeight;\n return Math.max(0, offset + dayY(geometry, minute) - (scroller.clientHeight - head.offsetHeight) / 3);\n };\n /** The first column of a week: its first day, or on a phone a day of it kept inside the week. */\n const columnFor = (key: string, phoneDay?: string) => {\n const week = weekKeysOf(view, key);\n if (visibleCount() >= 7 || !phoneDay) return indexOf(week[0]!);\n const day = Math.max(0, Math.min(7 - visibleCount(), dayKeyNumber(phoneDay) - dayKeyNumber(week[0]!)));\n return indexOf(week[day]!);\n };\n const positionAt = (key: string) => {\n if (!scroller) return;\n measureCount();\n const today = view.nowKey();\n const inWeek = weekKeysOf(view, key).includes(today);\n scroller.scrollLeft = leftOf(columnFor(key, key));\n scroller.scrollTop = inWeek ? topFor(view.nowMinute()) : topFor(60);\n lastLeft = scroller.scrollLeft;\n syncFirst();\n };\n const measureCount = () => {\n const width = columnWidth();\n if (!scroller || width <= 0) return;\n // Whole-pixel columns leave a few pixels at the right edge; the strip ends at its last whole day instead of\n // showing a sliver of the next one.\n const room = scroller.clientWidth + (Number.parseFloat(scroller.style.marginRight) || 0) - gutterWidth();\n const count = Math.max(1, Math.round(room / width));\n setVisibleCount(count);\n const rest = Math.floor(room - count * width);\n scroller.style.marginRight = rest > 0 ? `${rest}px` : \"\";\n };\n let reportTimer = 0;\n let reported = \"\";\n const syncFirst = () => {\n const index = visibleIndex();\n if (index !== untrack(firstIndex)) setFirstIndex(index);\n if (!untrack(keys)[index]) return;\n // The host learns the days the reader sees once they changed, after the scroll calmed down.\n const { first, last } = untrack(visibleKeys);\n if (`${first}/${last}` === reported) return;\n reported = `${first}/${last}`;\n window.clearTimeout(reportTimer);\n reportTimer = window.setTimeout(\n () => props.owner.onVisibleDateChange?.(view.parseKey(first), view.parseKey(last), view.parseKey(first)),\n 250,\n );\n };\n\n // A gesture keeps its axis; the strip settles on a day edge once the scroll rests.\n let axis: WheelAxis | null = null;\n let lastWheel = 0;\n let fingers = 0;\n let restTimer = 0;\n let restFrame = 0;\n let ready = false;\n /** Whether a wheel or a finger moved the strip since it last settled, and the way it last moved. */\n let gesture = false;\n let heading = 0;\n let headingFrom = 0;\n const settle = () => {\n if (!scroller || fingers > 0 || settling || glideTarget !== null || view.dragging()) return;\n const width = columnWidth();\n const space = Number.parseFloat(getComputedStyle(scroller).scrollPaddingRight) || 0;\n // A gesture rests on the nearest edge. A scroll without one, such as a reveal, goes on its way, so what it brought\n // into view stays there; with end space, a revealed day can rest with its end beside the drawer.\n const target = snapToColumn(\n scroller.scrollLeft,\n width,\n space > 0 ? scroller.clientWidth - gutterWidth() - space : undefined,\n gesture ? 0 : heading,\n );\n gesture = false;\n if (Math.abs(target - scroller.scrollLeft) <= 0.5) return;\n settling = true;\n scroller.scrollTo({ left: target, behavior: prefersReducedMotion() ? \"instant\" : \"smooth\" });\n window.setTimeout(() => {\n settling = false;\n }, 450);\n };\n /**\n * A busy page runs the rest timer before the scroll event of a reveal still on its way, and a settle then would stop\n * that reveal short of what it brings into view. Two frames tell: a scroll still moving reports before them and starts over.\n */\n const settleOnceStill = () => {\n restFrame = requestAnimationFrame(() => {\n restFrame = requestAnimationFrame(settle);\n });\n };\n const onWheel = (event: WheelEvent) => {\n if (!scroller || event.ctrlKey || view.dragging()) return;\n // A gesture that goes on takes over from a glide onto a day start; the strip settles again once it rests.\n settling = false;\n gesture = true;\n if (event.timeStamp - lastWheel > GESTURE_GAP_MS || axis === null) axis = wheelAxis(event.deltaX, event.deltaY, event.shiftKey);\n lastWheel = event.timeStamp;\n const delta = wheelPixels(\n wheelDelta(axis, event.deltaX, event.deltaY, event.shiftKey),\n event.deltaMode,\n axis === \"x\" ? scroller.clientWidth : scroller.clientHeight,\n );\n if (axis === \"x\") {\n event.preventDefault();\n glideTarget = null;\n scroller.scrollLeft += delta;\n } else if (event.deltaX !== 0) {\n // A trackpad's slight sideways drift in a vertical gesture would move the days; only the vertical part counts.\n event.preventDefault();\n scroller.scrollTop += delta;\n }\n };\n let askedEarlier = \"\";\n let askedLater = \"\";\n /** The last scroll position the strip read, to tell which way the reader moves. */\n let lastLeft = 0;\n /**\n * Asks for the week before or after once the reader moves within a week of an end. Days loaded before the strip push\n * it on by a week, so only moving toward an end asks; a glide may load later days, which push nothing.\n */\n const loadMore = () => {\n if (!scroller || !ready || view.dragging()) return;\n const width = columnWidth();\n const { first, last } = view.range();\n const left = scroller.scrollLeft;\n const direction = Math.sign(left - lastLeft);\n lastLeft = left;\n if (direction < 0 && glideTarget === null && left < width * 7 - 1 && props.owner.onLoadEarlier && askedEarlier !== first) {\n askedEarlier = first;\n void props.owner.onLoadEarlier();\n }\n if (\n direction > 0 &&\n left + scroller.clientWidth > scroller.scrollWidth - width * 7 + 1 &&\n props.owner.onLoadLater &&\n askedLater !== last\n ) {\n askedLater = last;\n void props.owner.onLoadLater();\n }\n };\n let frame = 0;\n const onScroll = () => {\n if (!scroller) return;\n if (glideTarget !== null && Math.abs(scroller.scrollLeft - glideTarget) < 2) glideTarget = null;\n if (Math.abs(scroller.scrollLeft - headingFrom) > 0.5) heading = Math.sign(scroller.scrollLeft - headingFrom);\n headingFrom = scroller.scrollLeft;\n if (!frame)\n frame = requestAnimationFrame(() => {\n frame = 0;\n syncFirst();\n loadMore();\n rememberAnchor();\n });\n window.clearTimeout(restTimer);\n cancelAnimationFrame(restFrame);\n restTimer = window.setTimeout(settleOnceStill, fingers > 0 ? 160 : 140);\n };\n\n // Days loaded before the strip's first day shift it; the view keeps its days in place.\n let anchor: { key: string; offset: number } | null = null;\n /** A day the host moved to before its days loaded; it goes on screen once they arrive. */\n let pendingTarget: string | null = null;\n /** Notes the day at the start of the strip, read against the days the strip draws, which may still be the old ones. */\n const rememberAnchor = (drawn = untrack(keys)) => {\n if (!scroller) return;\n const width = columnWidth();\n if (width <= 0) return;\n const index = Math.floor(scroller.scrollLeft / width);\n const key = drawn[index];\n if (key) anchor = { key, offset: scroller.scrollLeft - index * width };\n };\n // Before the days change the strip, note its place from the page as it stands. A computation runs before any render\n // effect touches the page, so no row has shrunk the strip yet.\n createComputed(\n on(\n keys,\n (next, drawn) => {\n if (!untrack(mounted) || !drawn) return;\n rememberAnchor(drawn);\n // Days that come in before the strip move every index; the first day in view stays the same day, so what\n // depends on the days in view, such as the all-day row, never sees the days that came in.\n const shift = dayKeyNumber(drawn[0]!) - dayKeyNumber(next[0]!);\n if (shift !== 0) setFirstIndex((index) => index + shift);\n },\n { defer: true },\n ),\n );\n createEffect(\n on(\n keys,\n () => {\n if (!untrack(mounted) || !scroller) return;\n if (pendingTarget && loaded(pendingTarget)) {\n positionAt(pendingTarget);\n pendingTarget = null;\n rememberAnchor();\n syncFirst();\n return;\n }\n if (!anchor) return;\n const index = indexOf(anchor.key);\n const left = leftOf(index) + anchor.offset;\n if (Math.abs(scroller.scrollLeft - left) > 0.5) scroller.scrollLeft = left;\n lastLeft = scroller.scrollLeft;\n },\n { defer: true },\n ),\n );\n\n /** The day width the strip last kept its first day for. */\n let measuredWidth = 0;\n onMount(() => {\n setMounted(true);\n queueMicrotask(() => {\n positionAt(view.anchorKey());\n rememberAnchor();\n ready = true;\n });\n const observer =\n typeof ResizeObserver === \"undefined\"\n ? undefined\n : new ResizeObserver(() => {\n if (!scroller) return;\n // A reveal the scroll handler has not read yet wins over keeping the first day.\n const unread = Math.abs(scroller.scrollLeft - lastLeft) > 0.5;\n const before = untrack(firstIndex);\n measureCount();\n // Only days of a new width move the strip back onto its first day. Setting scrollLeft stops a smooth scroll\n // on its way, such as a reveal, so a drawer's padding or the strip's own trim must not.\n const width = columnWidth();\n const resized = Math.abs(width - measuredWidth) > 0.01;\n measuredWidth = width;\n if (resized && !unread && Math.abs(scroller.scrollLeft - leftOf(before)) > 0.5) scroller.scrollLeft = leftOf(before);\n lastLeft = scroller.scrollLeft;\n syncFirst();\n });\n if (scroller) observer?.observe(scroller);\n onCleanup(() => {\n observer?.disconnect();\n window.clearTimeout(restTimer);\n cancelAnimationFrame(restFrame);\n window.clearTimeout(reportTimer);\n window.clearTimeout(glideTimer);\n if (frame) cancelAnimationFrame(frame);\n });\n });\n createEffect(\n on(\n view.anchorKey,\n (key) => {\n if (!untrack(mounted)) return;\n setNightWeek(key);\n pendingTarget = loaded(key) ? null : key;\n if (pendingTarget) return;\n if (key === untrack(visibleKeys).first) {\n rememberAnchor();\n return;\n }\n queueMicrotask(() => {\n positionAt(key);\n rememberAnchor();\n });\n },\n { defer: true },\n ),\n );\n\n const loaded = (key: string) => key >= view.range().first && key <= view.range().last;\n const handle: TimeViewHandle = {\n visibleKeys,\n step: (direction) => {\n const first = visibleKeys().first;\n const week = weekKeysOf(view, first);\n // From the middle of a week the arrows go to the start of a week first.\n const target = direction > 0 ? addDayKeys(week[0]!, 7) : first === week[0] ? addDayKeys(week[0]!, -7) : week[0]!;\n const last = addDayKeys(target, Math.min(6, visibleCount() - 1));\n if (!loaded(target) || !loaded(last)) return false;\n setNightWeek(target);\n glideTo(leftOf(indexOf(target)));\n return true;\n },\n goTo: (key) => {\n if (!loaded(key)) return false;\n setNightWeek(key);\n view.setSelection({ key });\n glideTo(leftOf(columnFor(key, key)));\n return true;\n },\n today: () => {\n const today = view.nowKey();\n const week = weekKeysOf(view, today);\n if (!loaded(week[0]!) || !loaded(week[6]!)) return false;\n setNightWeek(today);\n queueMicrotask(() => glideTo(leftOf(columnFor(today, today)), topFor(view.nowMinute())));\n return true;\n },\n todayDirection: () => {\n const today = view.nowKey();\n const { first, last } = visibleKeys();\n if (today < first) return \"left\";\n if (today > last) return \"right\";\n return \"\";\n },\n controller: {\n quickCreate: (create) => {\n const target = view.createTarget(visibleKeys());\n const column = scroller?.querySelector<HTMLElement>(`[data-calendar-body=\"${target.key}\"]`);\n view.openQuickCreate(\n target.key,\n target.start,\n target.end,\n slotRect(target.key, target.start, target.end) ?? column ?? scroller!,\n create,\n );\n },\n createTarget: () => view.rangeOfSelection(view.createTarget(visibleKeys())),\n dragIn: (event, item, onDrop) => view.dragIn(event, item, onDrop, scroller),\n },\n };\n const slotRect = (key: string, start: number, end: number): DOMRect | null => {\n const body = scroller?.querySelector<HTMLElement>(`[data-calendar-body=\"${key}\"]`);\n if (!body || !scroller) return null;\n const rect = body.getBoundingClientRect();\n const bounds = scroller.getBoundingClientRect();\n if (rect.right < bounds.left + gutterWidth() || rect.left > bounds.right) return null;\n const geometry = readDayGeometry(body, wake(), nightsOpen());\n const top = rect.top + dayY(geometry, start);\n const bottom = rect.top + dayY(geometry, end);\n if (bottom < bounds.top + 40 || top > bounds.bottom - 20) return null;\n return new DOMRect(\n rect.left,\n Math.max(bounds.top, top),\n rect.width,\n Math.max(8, Math.min(bottom, bounds.bottom) - Math.max(bounds.top, top)),\n );\n };\n onMount(() => props.register(handle));\n onCleanup(() => props.register(null));\n\n // The all-day row: one bar per week, with a torn edge where an event goes on in the week before or after.\n const allDay = createMemo(() => {\n const all = keys();\n const spans = new Map<CalendarEvent, DaySpan<CalendarEvent>>();\n for (const key of all) for (const span of view.dayOf(key).spans) spans.set(span.item, span);\n const entries = [...spans.values()]\n .sort((left, right) => left.firstKey.localeCompare(right.firstKey) || right.lastKey.localeCompare(left.lastKey))\n .map((span) => ({ item: span, firstKey: span.firstKey, lastKey: span.lastKey, bar: !span.marker }));\n const weeks: { offset: number; keys: string[] }[] = [];\n for (let index = 0; index < all.length; ) {\n const week = weekKeysOf(view, all[index]!).filter((key) => key >= all[0]! && key <= all[all.length - 1]!);\n const offset = indexOf(week[0]!);\n weeks.push({ offset, keys: week });\n index = offset + week.length;\n }\n return weeks.map((week) => {\n const layout = layoutMonthWeek(week.keys, entries);\n const lanes = Math.max(0, ...layout.bars.map((bar) => bar.lane + 1));\n return { ...week, layout, rows: lanes + Math.max(0, ...layout.singles.map((singles) => singles.length)) };\n });\n });\n /**\n * The rows the weeks in view need, as in a week of its own. A week that loads off screen never changes them, so the\n * hours stay where they are; its entries below these rows wait hidden until it comes into view.\n */\n const allDayRows = createMemo(() => {\n const first = firstIndex();\n const last = first + visibleCount() - 1;\n return Math.max(\n 1,\n ...allDay()\n .filter((week) => week.offset <= last && week.offset + week.keys.length - 1 >= first)\n .map((week) => week.rows),\n );\n });\n\n // Keyboard: one tab stop in the grid; the arrows move between days, entries, and free time. Only what is drawn can\n // take the focus.\n const stops = () =>\n [...(scroller?.querySelectorAll<HTMLElement>(\"[data-stop]\") ?? [])].filter((stop) => stop.getClientRects().length > 0);\n const focusDayKey = () => {\n const current = view.selection()?.key;\n const { first, last } = visibleKeys();\n if (current && current >= first && current <= last) return current;\n return view.nowKey() >= first && view.nowKey() <= last ? view.nowKey() : first;\n };\n const rovingId = () => roving() || `h:${focusDayKey()}`;\n const tabOf = (id: string) => (rovingId() === id ? 0 : -1);\n // An entry that leaves the days gives the grid's tab stop back to a heading after the page has updated.\n createEffect(\n on(\n view.days,\n () => {\n queueMicrotask(() => {\n if (!scroller || !roving()) return;\n if ([...scroller.querySelectorAll<HTMLElement>(\"[data-stop]\")].some((stop) => stop.dataset.stop === roving())) return;\n setRoving(\"\");\n if (!document.activeElement || document.activeElement === document.body) {\n scroller.querySelector<HTMLElement>(`[data-stop=\"h:${focusDayKey()}\"]`)?.focus({ preventScroll: true });\n }\n });\n },\n { defer: true },\n ),\n );\n const onKeyDown = (event: KeyboardEvent) => {\n const current = event.target instanceof HTMLElement ? event.target.closest<HTMLElement>(\"[data-stop]\") : null;\n if (!current || event.altKey || event.metaKey || event.ctrlKey) return;\n const direction = { ArrowUp: \"up\", ArrowDown: \"down\", ArrowLeft: \"left\", ArrowRight: \"right\", Home: \"home\", End: \"end\" }[event.key];\n if (!direction) return;\n event.preventDefault();\n const all = stops();\n const column = Number(current.dataset.col);\n const minute = Number(current.dataset.minute);\n const inColumn = (index: number) =>\n all\n .filter((stop) => Number(stop.dataset.col) === index)\n .sort((left, right) => Number(left.dataset.minute) - Number(right.dataset.minute));\n const list = inColumn(column);\n const position = list.indexOf(current);\n let next: HTMLElement | undefined;\n if (direction === \"down\") next = list[position + 1];\n else if (direction === \"up\") next = list[position - 1];\n else if (direction === \"home\") next = list[0];\n else if (direction === \"end\") next = list[list.length - 1];\n else {\n const other = inColumn(column + (direction === \"left\" ? -1 : 1));\n next = other.reduce<HTMLElement | undefined>(\n (best, stop) =>\n Math.abs(Number(stop.dataset.minute) - minute) < Math.abs(Number(best?.dataset.minute ?? Number.POSITIVE_INFINITY) - minute)\n ? stop\n : best,\n undefined,\n );\n }\n if (!next) return;\n setRoving(next.dataset.stop ?? \"\");\n next.focus({ preventScroll: Boolean(next.closest(\".k2b-calendar-week__top\")) });\n const index = Number(next.dataset.col);\n const first = untrack(firstIndex);\n if (index < first) glideTo(leftOf(index));\n else if (index >= first + visibleCount()) glideTo(leftOf(index - visibleCount() + 1));\n };\n\n const openDay = (key: string) => {\n const href = props.owner.views && !props.owner.views.includes(\"day\") ? undefined : props.owner.getDateHref?.(view.parseKey(key), \"day\");\n if (href) followCalendarHref(props.owner, href);\n else {\n props.owner.onViewChange?.(\"day\");\n props.owner.onDateChange?.(view.parseKey(key), \"day\");\n }\n };\n let lastPointer = \"mouse\";\n\n // The all-day row: drag across days for one all-day event; a double-click creates on one day.\n const startAllDayRange = (pointerEvent: PointerEvent, row: HTMLElement) => {\n if (pointerEvent.pointerType !== \"mouse\" || pointerEvent.button !== 0 || !view.canCreate()) return;\n const keyAt = (clientX: number) => {\n const width = columnWidth();\n const rect = row.getBoundingClientRect();\n const index = Math.max(0, Math.min(keys().length - 1, Math.floor((clientX - rect.left) / width)));\n return keys()[index]!;\n };\n const origin = keyAt(pointerEvent.clientX);\n startCalendarPointerSession({\n event: pointerEvent,\n resolve: (clientX) => keyAt(clientX),\n onPreview: (key) => setRangeSelection(origin < key ? { first: origin, last: key } : { first: key, last: origin }),\n onCommit: (key) => {\n swallowNextClick();\n const range = origin < key ? { first: origin, last: key } : { first: key, last: origin };\n const cells = scroller?.querySelector<HTMLElement>(\".k2b-calendar-week__range\");\n setRangeSelection(null);\n const start = view.parseKey(range.first);\n const end = calendar.addDays(view.parseKey(range.last), 1, view.dateConfig());\n if (props.owner.renderQuickCreate)\n view.setQuick({ range: { start, end, allDay: true }, anchor: cells?.getBoundingClientRect() ?? row, key: range.first });\n else props.owner.onSlotActivate?.({ start, end, allDay: true });\n },\n onCancel: () => setRangeSelection(null),\n });\n };\n const [rangeSelection, setRangeSelection] = createSignal<{ first: string; last: string } | null>(null);\n\n return (\n <div class=\"k2b-calendar-week\" data-view=\"week\" data-dragging={view.dragging() || undefined}>\n <div\n ref={scroller}\n class=\"k2b-calendar-week__scroll k2b-detail-trail\"\n role=\"group\"\n aria-label={view.messages().calendarWeek}\n aria-describedby={helpId}\n onScroll={onScroll}\n onWheel={onWheel}\n onKeyDown={onKeyDown}\n onFocusIn={(event) => {\n const stop = event.target instanceof HTMLElement ? event.target.closest<HTMLElement>(\"[data-stop]\") : null;\n if (stop?.dataset.stop) setRoving(stop.dataset.stop);\n }}\n onTouchStart={(event) => {\n fingers = event.touches.length;\n gesture = true;\n glideTarget = null;\n }}\n onTouchEnd={(event) => {\n fingers = event.touches.length;\n onScroll();\n }}\n onTouchCancel={(event) => {\n fingers = event.touches.length;\n }}\n style={{ \"--k2b-calendar-days\": String(keys().length) }}\n >\n <div class=\"k2b-calendar-week__grid\">\n <div class=\"k2b-calendar-week__top\">\n <div class=\"k2b-calendar-week__corner\" aria-hidden=\"true\">\n {view.messages().calendarWeekNumber({ week: isoWeek(visibleKeys().first) })}\n </div>\n <For each={keys()}>\n {(key) => {\n const today = () => key === view.calendarToday();\n const selected = () => {\n const current = view.selection();\n return Boolean(current && current.key === key && current.start === undefined);\n };\n const badge = () => props.owner.dayBadges?.[key];\n const load = () => dayLoad(view, key);\n const date = () => view.parseKey(key);\n return (\n <button\n type=\"button\"\n class=\"k2b-calendar-week__head\"\n data-calendar-head={key}\n data-stop={`h:${key}`}\n data-col={indexOf(key)}\n data-minute={-2}\n tabIndex={tabOf(`h:${key}`)}\n aria-pressed={selected() ? \"true\" : \"false\"}\n aria-label={[longDay(view, key), today() ? view.props.labels.today : \"\", badge()?.label ?? \"\"]\n .filter(Boolean)\n .join(\", \")}\n data-today={today() ? \"true\" : undefined}\n data-weekend={isWeekendKey(key, view.dateConfig().locale) ? \"true\" : undefined}\n data-past={key < view.calendarToday() ? \"true\" : undefined}\n data-cheer={view.cheered() === key ? \"true\" : undefined}\n style={{ \"grid-column\": String(indexOf(key) + 2) }}\n onPointerDown={(event) => {\n lastPointer = event.pointerType;\n // The heading stays on top: focusing it must not scroll the grid.\n if (event.button === 0) {\n event.preventDefault();\n event.currentTarget.focus({ preventScroll: true });\n }\n }}\n onClick={(event) => {\n if (event.detail >= 2 || (selected() && lastPointer !== \"mouse\")) {\n openDay(key);\n return;\n }\n view.setTouchDraft(null);\n view.setSelection(selected() ? null : { key });\n }}\n >\n <span class=\"k2b-calendar-week__weekday\">\n {date()\n .toLocaleDateString(view.dateConfig().locale ?? \"en\", { weekday: \"short\", timeZone: view.dateConfig().timeZone })\n .replace(/\\.$/, \"\")}\n </span>\n <span class=\"k2b-calendar-week__number\">{calendar.formatDayNumber(date(), view.dateConfig())}</span>\n <span class=\"k2b-calendar-week__extra\">\n <Show when={badge()}>\n {(current) => (\n <span class=\"k2b-calendar-week__badge\">\n <Show when={current().icon}>{(icon) => <i class={`ti ti-${icon()}`} aria-hidden=\"true\" />}</Show>\n {current().label}\n </span>\n )}\n </Show>\n </span>\n <span class=\"k2b-calendar-week__load\" aria-hidden=\"true\">\n <For each={load()}>\n {(piece) => <span style={{ width: `${((piece.end - piece.start) / wake()) * 100}%`, background: piece.color }} />}\n </For>\n </span>\n <span class=\"k2b-calendar-week__cheer\" aria-hidden=\"true\">\n <i class=\"ti ti-confetti\" aria-hidden=\"true\" />\n <span class=\"k2b-calendar-week__cheer-long\">{view.messages().calendarAllDone}</span>\n <span class=\"k2b-calendar-week__cheer-short\">{view.messages().calendarAllDoneShort}</span>\n </span>\n </button>\n );\n }}\n </For>\n <div class=\"k2b-calendar-week__all-day-label\" aria-hidden=\"true\">\n <span class=\"k2b-calendar-week__all-day-long\">{view.messages().calendarAllDayRow}</span>\n <span class=\"k2b-calendar-week__all-day-short\">{view.messages().calendarAllDayRowShort}</span>\n </div>\n <div\n class=\"k2b-calendar-week__all-day\"\n role=\"group\"\n aria-label={view.messages().calendarAllDayAndDue}\n style={{ \"grid-template-rows\": `repeat(${allDayRows()}, var(--k2b-calendar-all-day-row))` }}\n onPointerDown={(event) => {\n if (event.target instanceof Element && event.target.closest(\"a,button,[data-calendar-event]\")) return;\n startAllDayRange(event, event.currentTarget);\n }}\n onDblClick={(event) => {\n if (!(event.target instanceof Element) || event.target.closest(\"a,button,[data-calendar-event]\")) return;\n const width = columnWidth();\n const rect = event.currentTarget.getBoundingClientRect();\n const key = keys()[Math.max(0, Math.min(keys().length - 1, Math.floor((event.clientX - rect.left) / width)))]!;\n const start = view.parseKey(key);\n const range = { start, end: calendar.addDays(start, 1, view.dateConfig()), allDay: true };\n if (props.owner.renderQuickCreate)\n view.setQuick({ range, anchor: new DOMRect(rect.left + indexOf(key) * width, rect.top, width, rect.height), key });\n else props.owner.onSlotActivate?.(range);\n }}\n >\n {/* The weekend band runs on through the all-day row; positioned, it takes no cell from the bars. */}\n <For each={keys()}>\n {(key, index) => (\n <Show when={isWeekendKey(key, view.dateConfig().locale)}>\n <span class=\"k2b-calendar-week__weekend\" style={{ \"grid-column\": `${index() + 1} / span 1` }} aria-hidden=\"true\" />\n </Show>\n )}\n </For>\n <Show when={rangeSelection()}>\n {(range) => (\n <div\n class=\"k2b-calendar-week__range\"\n style={{ \"grid-column\": `${indexOf(range().first) + 1} / ${indexOf(range().last) + 2}`, \"grid-row\": \"1 / -1\" }}\n aria-hidden=\"true\"\n />\n )}\n </Show>\n <For each={allDay()}>\n {(week) => (\n <>\n <For each={week.layout.bars}>\n {(bar) => {\n const span = bar.endColumn - bar.startColumn + 1;\n const event = bar.item.item;\n const checked = () => view.checkedOf(event);\n const hint = (target: string, kind: \"from\" | \"until\", before = \"\") => {\n const text =\n kind === \"from\"\n ? view.messages().calendarContinuesFrom(hintDate(view, target, visibleKeys().first))\n : view.messages().calendarContinuesUntil(hintDate(view, target, visibleKeys().first));\n const font = `600 11px ${typeof document === \"undefined\" ? \"sans-serif\" : getComputedStyle(document.body).fontFamily}`;\n return textWidth(`${event.title}${before}`, font) + textWidth(text, font) + HINT_SLACK_PX <=\n span * columnWidthSignal()\n ? text\n : undefined;\n };\n const start = () => (bar.continuesBefore ? hint(bar.item.firstKey, \"from\") : undefined);\n const end = () => (bar.continuesAfter ? hint(bar.item.lastKey, \"until\", start() ?? \"\") : undefined);\n return (\n <div\n class=\"k2b-calendar-week__slot\"\n data-checkbox={checked() !== undefined ? \"true\" : undefined}\n data-checked={checked() ? \"true\" : undefined}\n data-just-checked={view.justChecked().has(event.id) ? \"true\" : undefined}\n style={{\n \"grid-column\": `${week.offset + bar.startColumn + 1} / ${week.offset + bar.endColumn + 2}`,\n \"grid-row\": String(bar.lane + 1),\n \"--k2b-calendar-accent\": eventAccent(event),\n display: bar.lane + 1 > allDayRows() ? \"none\" : undefined,\n }}\n >\n <Show when={checked() !== undefined}>\n <TimeCheck view={view} event={event} tabIndex={-1} />\n </Show>\n <EventChip\n event={view.normalized(event, bar.item.firstKey)}\n owner={props.owner}\n href={eventHref(props.owner, event)}\n label={spanLabel(view, bar.item)}\n compact\n timeline\n bar\n checkbox={checked() !== undefined}\n onCheck={view.checkOf(event)}\n continuesBefore={bar.continuesBefore}\n continuesAfter={bar.continuesAfter}\n hintStart={start()}\n hintEnd={end()}\n tabIndex={tabOf(`a:${event.id}:${week.offset}`)}\n stop={{\n id: `a:${event.id}:${week.offset}`,\n column: week.offset + bar.startColumn,\n minute: -1 + bar.lane / 100,\n }}\n />\n </div>\n );\n }}\n </For>\n <For each={week.layout.singles}>\n {(singles, column) => {\n const lanes = () =>\n Math.max(\n 0,\n ...week.layout.bars\n .filter((bar) => bar.startColumn <= column() && bar.endColumn >= column())\n .map((bar) => bar.lane + 1),\n );\n return (\n <For each={singles}>\n {(span, row) => {\n const event = span.item;\n const checked = () => view.checkedOf(event);\n const id = `a:${event.id}:${week.offset}`;\n return (\n <div\n class=\"k2b-calendar-week__slot\"\n data-checkbox={checked() !== undefined ? \"true\" : undefined}\n data-checked={checked() ? \"true\" : undefined}\n data-just-checked={view.justChecked().has(event.id) ? \"true\" : undefined}\n style={{\n \"grid-column\": String(week.offset + column() + 1),\n \"grid-row\": String(lanes() + row() + 1),\n \"--k2b-calendar-accent\": eventAccent(event),\n display: lanes() + row() + 1 > allDayRows() ? \"none\" : undefined,\n }}\n >\n <Show when={checked() !== undefined}>\n <TimeCheck view={view} event={event} tabIndex={-1} />\n </Show>\n <EventChip\n event={view.normalized(event, span.firstKey)}\n owner={props.owner}\n href={eventHref(props.owner, event)}\n compact\n timeline\n checkbox={checked() !== undefined}\n onCheck={view.checkOf(event)}\n tabIndex={tabOf(id)}\n stop={{ id, column: week.offset + column(), minute: -1 + (lanes() + row()) / 100 }}\n />\n </div>\n );\n }}\n </For>\n );\n }}\n </For>\n </>\n )}\n </For>\n </div>\n </div>\n <div class=\"k2b-calendar-week__body\" style={{ height: termsCss(dayHeightTerms(wake(), nightsOpen())) }}>\n <div class=\"k2b-calendar-week__gutter\">\n <For each={Array.from({ length: wake() / 60 + 1 }, (_, index) => index * 60)}>\n {(minute) => (\n <span\n class=\"k2b-calendar-week__hour\"\n data-near-now={nowShown() && isNearNow(view, view.nowKey(), minute) ? \"true\" : undefined}\n style={{ top: termsCss(dayYTerms(wake(), nightsOpen(), minute)) }}\n aria-hidden=\"true\"\n >\n {view.clock(minute)}\n </span>\n )}\n </For>\n <Show when={nightsOpen()}>\n <For each={nightHours(wake())}>\n {(minute) => (\n <span\n class=\"k2b-calendar-week__hour\"\n data-night=\"true\"\n style={{ top: termsCss(dayYTerms(wake(), true, minute)) }}\n aria-hidden=\"true\"\n >\n {view.clock(minute)}\n </span>\n )}\n </For>\n </Show>\n <button\n type=\"button\"\n class=\"k2b-calendar-week__moon\"\n aria-expanded={nightsOpen() ? \"true\" : \"false\"}\n aria-label={\n nightsOpen()\n ? view.messages().calendarFoldNights\n : view.messages().calendarOpenNights({ from: view.clock(wake()).slice(0, 2), to: view.clock(DAY_MINUTES).slice(0, 2) })\n }\n title={\n nightsOpen()\n ? view.messages().calendarFoldNights\n : view.messages().calendarOpenNights({ from: view.clock(wake()).slice(0, 2), to: view.clock(DAY_MINUTES).slice(0, 2) })\n }\n data-open={nightsOpen() ? \"true\" : undefined}\n style={{ top: termsCss(dayYTerms(wake(), nightsOpen(), nightsOpen() ? wake() : wake() + 1)) }}\n onClick={() => setNightOverride(!nightsOpen())}\n >\n <i class=\"ti ti-moon\" aria-hidden=\"true\" />\n <i class={`ti ${nightsOpen() ? \"ti-chevron-up\" : \"ti-chevron-down\"}`} aria-hidden=\"true\" />\n </button>\n <Show when={nowShown()}>\n <span\n class=\"k2b-calendar-week__now-time\"\n style={{ top: termsCss(dayYTerms(wake(), nightsOpen(), view.nowMinute())) }}\n aria-hidden=\"true\"\n >\n {view.clock(view.nowMinute())}\n </span>\n </Show>\n </div>\n <div class=\"k2b-calendar-week__lines\" aria-hidden=\"true\">\n <For each={Array.from({ length: wake() / 60 + 1 }, (_, index) => index * 60)}>\n {(minute) => <span class=\"k2b-calendar-week__line\" style={{ top: termsCss(dayYTerms(wake(), nightsOpen(), minute)) }} />}\n </For>\n <Show\n when={nightsOpen()}\n fallback={\n <span class=\"k2b-calendar-week__fold\" style={{ top: `calc(${termsCss(dayYTerms(wake(), false, wake()))} + 3px)` }} />\n }\n >\n <span\n class=\"k2b-calendar-night\"\n style={{ top: termsCss(dayYTerms(wake(), true, wake())), height: termsCss([0, (DAY_MINUTES - wake()) / 60, 1, 0]) }}\n />\n <For each={nightHours(wake())}>\n {(minute) => (\n <span\n class=\"k2b-calendar-week__line\"\n data-midnight={view.clock(minute) === \"00:00\" ? \"true\" : undefined}\n style={{ top: termsCss(dayYTerms(wake(), true, minute)) }}\n />\n )}\n </For>\n </Show>\n <Show when={nowShown()}>\n <span class=\"k2b-calendar-week__now-line\" style={{ top: termsCss(dayYTerms(wake(), nightsOpen(), view.nowMinute())) }} />\n </Show>\n </div>\n <For each={keys()}>\n {(key) => (\n <WeekColumn\n view={view}\n dayKey={key}\n column={indexOf(key)}\n expanded={nightsOpen()}\n tabOf={tabOf}\n lastPointer={() => lastPointer}\n setLastPointer={(value) => {\n lastPointer = value;\n }}\n scroller={() => scroller}\n />\n )}\n </For>\n </div>\n </div>\n </div>\n <p class=\"k2b-calendar-sr\" id={helpId}>\n {view.messages().calendarKeyboardHelp}\n </p>\n <TimeQuickCreate view={view} />\n </div>\n );\n\n function columnWidthSignal() {\n // Read through the visible count so a resize recomputes the hints.\n visibleCount();\n return columnWidth();\n }\n};\n\nconst WeekColumn = (props: {\n view: TimeView;\n dayKey: string;\n column: number;\n expanded: boolean;\n tabOf: (id: string) => number;\n lastPointer: () => string;\n setLastPointer: (value: string) => void;\n scroller: () => HTMLElement | undefined;\n}) => {\n const view = props.view;\n const model = createMemo(() => view.dayOf(props.dayKey));\n const wake = () => view.wake();\n const bands = createMemo(() => dayBands(view, props.dayKey, props.expanded));\n const gaps = createMemo(() => dayGaps(view, props.dayKey));\n const markers = () => model().markers.filter((marker) => marker.minute < (props.expanded ? DAY_MINUTES : wake()));\n /** Deadlines whose pills would cover each other share the width; keyed by marker, so rows keep their elements. */\n const lanes = createMemo(() => new Map(markerLanes(markers(), wake()).map((entry) => [entry.item, entry])));\n const folded = () => (props.expanded ? [] : foldedEntries(view, props.dayKey));\n const isEmptyTarget = (target: EventTarget | null) =>\n target instanceof Element &&\n !target.closest(\n \"a,button,[data-calendar-event],.k2b-calendar-band,.k2b-calendar-marker,.k2b-calendar-draft,.k2b-calendar-week__fold-cell\",\n );\n const minuteAt = (element: HTMLElement, clientY: number) => {\n const geometry = readDayGeometry(element, wake(), props.expanded);\n return Math.max(\n 0,\n Math.min((props.expanded ? DAY_MINUTES : wake()) - 15, dayMinuteAt(geometry, clientY - element.getBoundingClientRect().top)),\n );\n };\n const nowMinute = () => (props.dayKey === view.nowKey() ? view.nowMinute() : null);\n const selected = () => view.selection()?.key === props.dayKey;\n /** The quarter hour under the mouse on empty time, as a line with its time, to aim a drag at. */\n const [hover, setHover] = createSignal<number | null>(null);\n const timeline = createMemo(() =>\n [\n ...gaps().map((gap) => ({ at: gap.start, kind: \"gap\" as const, gap })),\n ...bands().map((band) => ({ at: Math.max(0, band.start), kind: \"band\" as const, band })),\n ...markers().map((marker) => ({ at: marker.minute, kind: \"marker\" as const, marker })),\n ].sort((left, right) => left.at - right.at),\n );\n return (\n <div\n ref={(element) => view.registerBody(props.dayKey, element, () => props.expanded)}\n class=\"k2b-calendar-week__column\"\n data-calendar-column=\"\"\n data-calendar-body={props.dayKey}\n data-expanded={props.expanded ? \"true\" : \"false\"}\n data-today={props.dayKey === view.calendarToday() ? \"true\" : undefined}\n data-weekend={isWeekendKey(props.dayKey, view.dateConfig().locale) ? \"true\" : undefined}\n data-selected={selected() ? \"true\" : undefined}\n data-active={view.activeKey() === props.dayKey ? \"true\" : undefined}\n role=\"group\"\n aria-label={longDay(view, props.dayKey)}\n style={{ \"grid-column\": String(props.column + 2), height: termsCss(dayHeightTerms(wake(), props.expanded)) }}\n onPointerDown={(event) => {\n props.setLastPointer(event.pointerType);\n if (event.button !== 0 || !isEmptyTarget(event.target)) return;\n view.startDraw(event, props.dayKey, props.scroller());\n }}\n // Some engines send a tap as touch events only; a tap is a tap either way.\n onTouchStart={() => props.setLastPointer(\"touch\")}\n // Listening on the column itself, not through delegation, makes it a tap target on iOS.\n on:click={(event) => {\n if (!isEmptyTarget(event.target)) return;\n const minute = Math.floor(minuteAt(event.currentTarget, event.clientY) / 30) * 30;\n const end = Math.min(minute + 60, props.expanded ? DAY_MINUTES : wake());\n if (props.lastPointer() === \"mouse\") {\n if (!view.canCreate()) return;\n view.setTouchDraft(null);\n view.setSelection({ key: props.dayKey, start: minute, end });\n return;\n }\n // A first tap on a column shows its free time; the next one proposes an hour there.\n if (view.activeKey() !== props.dayKey) {\n view.setActiveKey(props.dayKey);\n view.setTouchDraft(null);\n view.setSelection({ key: props.dayKey });\n return;\n }\n if (!view.canCreate()) return;\n view.setTouchDraft({ key: props.dayKey, start: minute, end });\n view.setSelection({ key: props.dayKey, start: minute, end });\n }}\n onDblClick={(event) => {\n if (!isEmptyTarget(event.target) || props.lastPointer() !== \"mouse\") return;\n const minute = Math.floor(minuteAt(event.currentTarget, event.clientY) / 30) * 30;\n view.openQuickCreate(props.dayKey, minute, Math.min(minute + 60, props.expanded ? DAY_MINUTES : wake()), event.currentTarget);\n }}\n onPointerMove={(event) => {\n if (event.pointerType !== \"mouse\" || view.dragging() || !isEmptyTarget(event.target)) return setHover(null);\n setHover(Math.floor(minuteAt(event.currentTarget, event.clientY) / 15) * 15);\n }}\n onPointerLeave={() => setHover(null)}\n >\n <For each={timeline()}>\n {(entry) =>\n entry.kind === \"gap\" ? (\n <TimeGap\n view={view}\n gap={entry.gap}\n dayKey={props.dayKey}\n expanded={props.expanded}\n aside={gapAside(model(), entry.gap)}\n tabIndex={props.tabOf(`g:${props.dayKey}:${entry.gap.start}`)}\n stop={{ id: `g:${props.dayKey}:${entry.gap.start}`, column: props.column, minute: entry.gap.start + 0.5 }}\n />\n ) : entry.kind === \"band\" ? (\n <TimeBand\n view={view}\n band={entry.band}\n dayKey={props.dayKey}\n expanded={props.expanded}\n hourPx={48}\n tabIndex={props.tabOf(`b:${entry.band.item.id}:${props.dayKey}`)}\n stop={{ id: `b:${entry.band.item.id}:${props.dayKey}`, column: props.column, minute: entry.band.start }}\n scroller={props.scroller}\n />\n ) : (\n <TimeMarker\n view={view}\n event={entry.marker.item}\n minute={entry.marker.minute}\n dayKey={props.dayKey}\n expanded={props.expanded}\n above={markerAbove(model(), entry.marker.minute)}\n lane={lanes().get(entry.marker)?.lane ?? 0}\n lanes={lanes().get(entry.marker)?.lanes ?? 1}\n showTime={false}\n tabIndex={props.tabOf(`m:${entry.marker.item.id}`)}\n stop={{ id: `m:${entry.marker.item.id}`, column: props.column, minute: entry.marker.minute }}\n scroller={props.scroller}\n />\n )\n }\n </For>\n <Show when={!props.expanded && folded().length > 0}>\n <div class=\"k2b-calendar-week__fold-cell\" style={{ top: `calc(${termsCss(dayYTerms(wake(), false, wake()))} + 3px)` }}>\n <ul class=\"k2b-calendar-fold__chips\">\n {/* The arrows reach the entries of a folded night after the waking hours, and Space checks a to-do off. */}\n <For each={folded()}>\n {(entry, index) => {\n const checked = () => view.checkedOf(entry.event);\n return (\n <li\n data-checkbox={checked() !== undefined ? \"true\" : undefined}\n data-checked={checked() ? \"true\" : undefined}\n style={{ \"--k2b-calendar-accent\": eventAccent(entry.event) }}\n >\n <Show when={checked() !== undefined}>\n <TimeCheck view={view} event={entry.event} tabIndex={-1} />\n </Show>\n <EventChip\n event={view.normalized(entry.event, props.dayKey)}\n owner={view.props.owner}\n href={eventHref(view.props.owner, entry.event)}\n compact\n timeline\n leadingTime={entry.time}\n checkbox={checked() !== undefined}\n onCheck={view.checkOf(entry.event)}\n tabIndex={props.tabOf(`f:${entry.event.id}:${props.dayKey}`)}\n stop={{ id: `f:${entry.event.id}:${props.dayKey}`, column: props.column, minute: wake() + index() / 100 }}\n />\n </li>\n );\n }}\n </For>\n </ul>\n </div>\n </Show>\n <TimeOverlays view={view} dayKey={props.dayKey} expanded={props.expanded} />\n <Show when={hover() !== null}>\n <span class=\"k2b-calendar-hover\" style={{ top: termsCss(dayYTerms(wake(), props.expanded, hover()!)) }} aria-hidden=\"true\">\n {view.clock(hover()!)}\n </span>\n </Show>\n <Show when={nowMinute() !== null && nowMinute()! >= 0 && nowMinute()! < (props.expanded ? DAY_MINUTES : wake())}>\n <div class=\"k2b-calendar-now\" style={{ top: termsCss(dayYTerms(wake(), props.expanded, nowMinute()!)) }} aria-hidden=\"true\" />\n </Show>\n </div>\n );\n};\n\n/** ISO week number of a day key. */\nconst isoWeek = (key: string) => {\n const date = new Date(`${key}T00:00:00Z`);\n const day = date.getUTCDay() || 7;\n date.setUTCDate(date.getUTCDate() + 4 - day);\n const yearStart = new Date(Date.UTC(date.getUTCFullYear(), 0, 1));\n return Math.ceil(((date.getTime() - yearStart.getTime()) / 86_400_000 + 1) / 7);\n};\n\n/** The day at a torn end of a bar, with its month when it lies in another month than the shown week. */\nconst hintDate = (view: TimeView, target: string, shown: string) => ({\n day: Number(target.slice(8, 10)),\n month:\n target.slice(0, 7) === shown.slice(0, 7)\n ? undefined\n : view\n .parseKey(target)\n .toLocaleDateString(view.dateConfig().locale ?? \"en\", { month: \"short\", timeZone: view.dateConfig().timeZone })\n .replace(/\\.$/, \"\"),\n});\n\n/** A long entry's accessible name names the days it spans. */\nconst spanLabel = (view: TimeView, span: DaySpan<CalendarEvent>) => {\n if (span.firstKey === span.lastKey) return undefined;\n const format = (key: string) =>\n view\n .parseKey(key)\n .toLocaleDateString(view.dateConfig().locale ?? \"en\", { month: \"long\", day: \"numeric\", timeZone: view.dateConfig().timeZone });\n return view.messages().calendarEventTime({ title: span.item.title, start: format(span.firstKey), end: format(span.lastKey) });\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,KAAK,IAAI,QAAQ,QAAQ,aAAa;AAC/C,SACE,cAAc,EACd,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,cAAc,EACd,GAAG,EACH,EAAE,EACF,SAAS,EACT,OAAO,EACP,IAAI,EACJ,OAAO,QACF,UAAU;AACjB,SAAS,YAAY,QAAQ,iBAAiB;AAC9C,SAAS,oBAAoB,QAAQ,WAAW;AAEhD,SAAS,cAAc,EAAE,YAAY,EAAkB,SAAS,EAAE,UAAU,EAAE,WAAW,QAAQ,uBAAuB;AACxH,SACE,UAAU,EACV,WAAW,EAEX,cAAc,EACd,YAAY,EACZ,WAAW,EACX,WAAW,EACX,IAAI,EACJ,SAAS,EACT,WAAW,EACX,eAAe,EACf,QAAQ,QACH,iBAAiB;AACxB,SAAS,eAAe,QAAQ,yBAAyB;AACzD,SAAS,2BAA2B,QAAQ,oBAAoB;AAChE,SAAS,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,SAAS,QAAQ,mBAAmB;AACvF,SACE,cAAc,EACd,QAAQ,EACR,OAAO,EACP,OAAO,EACP,WAAW,EACX,aAAa,EACb,QAAQ,EACR,SAAS,EACT,OAAO,EACP,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,OAAO,EACP,UAAU,EACV,YAAY,EACZ,eAAe,EAIf,UAAU,QACL,sBAAsB;;AAE7B;AACA,MAAM,aAAa,GAAG,EAAE;;AAExB;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM,gBAAgB,GAAI,KAAoB,IAAK;EACxD,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC;EAClC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EACjD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;EACnD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;EACvD;EACA,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;EACvE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,YAAY,CAAiB,IAAI,CAAC;EAC5E,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC;EAC5C,IAAI,QAAoC;EACxC,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC;EAE/B,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;EAC3D;EACA,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM;IAC5B,MAAM;MAAE,KAAK;MAAE;IAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,OAAO,CAAC,CAAC,EAAE,OAAO,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;IAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC;IACzB,OAAO,IAAI,CAAC,CAAC,CAAC,IAAK,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAK,IAAI,GAAG,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;EAChF,CAAC,CAAC;EACF,MAAM,OAAO,GAAI,GAAW,IAAK,YAAY,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;EAC7E,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM;IAClC,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC;IAChC,IAAI,QAAQ,KAAK,IAAI,EAAE,OAAO,QAAQ;IACtC,OAAO,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAE,GAAG,IAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;EAC3E,CAAC,CAAC;EACF,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,gBAAgB,CAAC,IAAI,CAAC,EAAE;IAAE,KAAK,EAAE;EAAK,CAAC,CAAC,CAAC;EAC1E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;;EAE9B;EACA;EACA,MAAM,WAAW,GAAG,MAAM,QAAQ,EAAE,aAAa,CAAc,wBAAwB,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;EAC5H,MAAM,WAAW,GAAG,MAAM,QAAQ,EAAE,aAAa,CAAc,4BAA4B,CAAC,EAAE,WAAW,IAAI,CAAC;EAC9G,MAAM,MAAM,GAAI,KAAa,IAAK,KAAK,GAAG,WAAW,CAAC,CAAC;EACvD,MAAM,YAAY,GAAG,MAAM;IACzB,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC;IAC3B,OAAO,KAAK,GAAG,CAAC,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC;EAC5E,CAAC;EACD,MAAM,WAAW,GAAG,MAAM;IACxB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;IAChG,OAAO;MAAE,KAAK;MAAE,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC;IAAE,CAAC;EAC/D,CAAC;EACD;EACA,MAAM,QAAQ,GAAG,MAAM;IACrB,MAAM;MAAE,KAAK;MAAE;IAAK,CAAC,GAAG,WAAW,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC;EAC7H,CAAC;EAED,IAAI,QAAQ,GAAG,KAAK;EACpB,IAAI,WAA0B,GAAG,IAAI;EACrC,IAAI,UAAU,GAAG,CAAC;EAClB,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,GAAY,KAAK;IAC9C,IAAI,CAAC,QAAQ,EAAE;IACf,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IACvF,WAAW,GAAG,MAAM;IACpB,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;IAC/B,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;MACnC,WAAW,GAAG,IAAI;IACpB,CAAC,EAAE,IAAI,CAAC;IACR,QAAQ,CAAC,QAAQ,CAAC;MAAE,IAAI,EAAE,MAAM;MAAE,IAAI,GAAG,KAAK,SAAS,GAAG,CAAC,CAAC,GAAG;QAAE;MAAI,CAAC,CAAC;MAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC,GAAG,SAAS,GAAG;IAAS,CAAC,CAAC;EACrI,CAAC;EACD;EACA,MAAM,MAAM,GAAI,MAAc,IAAK;IACjC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;IACvB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAc,sBAAsB,CAAC;IACxE,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAc,yBAAyB,CAAC;IAC3E,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;IAC5B,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY;IAC/H,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;EACvG,CAAC;EACD;EACA,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,QAAiB,KAAK;IACpD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;IAClC,IAAI,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC;IAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;IACtG,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAE,CAAC;EAC5B,CAAC;EACD,MAAM,UAAU,GAAI,GAAW,IAAK;IAClC,IAAI,CAAC,QAAQ,EAAE;IACf,YAAY,CAAC,CAAC;IACd,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;IACpD,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjD,QAAQ,CAAC,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;IACnE,QAAQ,GAAG,QAAQ,CAAC,UAAU;IAC9B,SAAS,CAAC,CAAC;EACb,CAAC;EACD,MAAM,YAAY,GAAG,MAAM;IACzB,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC;IAC3B,IAAI,CAAC,QAAQ,IAAI,KAAK,IAAI,CAAC,EAAE;IAC7B;IACA;IACA,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;IACxG,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;IACnD,eAAe,CAAC,KAAK,CAAC;IACtB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;IAC7C,QAAQ,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI,GAAG,EAAE;EAC1D,CAAC;EACD,IAAI,WAAW,GAAG,CAAC;EACnB,IAAI,QAAQ,GAAG,EAAE;EACjB,MAAM,SAAS,GAAG,MAAM;IACtB,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC;IAC5B,IAAI,KAAK,KAAK,OAAO,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC;IACvD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE;IAC3B;IACA,MAAM;MAAE,KAAK;MAAE;IAAK,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAC5C,IAAI,GAAG,KAAK,IAAI,IAAI,EAAE,KAAK,QAAQ,EAAE;IACrC,QAAQ,GAAG,GAAG,KAAK,IAAI,IAAI,EAAE;IAC7B,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC;IAChC,WAAW,GAAG,MAAM,CAAC,UAAU,CAC7B,MAAM,KAAK,CAAC,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EACxG,GACF,CAAC;EACH,CAAC;;EAED;EACA,IAAI,IAAsB,GAAG,IAAI;EACjC,IAAI,SAAS,GAAG,CAAC;EACjB,IAAI,OAAO,GAAG,CAAC;EACf,IAAI,SAAS,GAAG,CAAC;EACjB,IAAI,SAAS,GAAG,CAAC;EACjB,IAAI,KAAK,GAAG,KAAK;EACjB;EACA,IAAI,OAAO,GAAG,KAAK;EACnB,IAAI,OAAO,GAAG,CAAC;EACf,IAAI,WAAW,GAAG,CAAC;EACnB,MAAM,MAAM,GAAG,MAAM;IACnB,IAAI,CAAC,QAAQ,IAAI,OAAO,GAAG,CAAC,IAAI,QAAQ,IAAI,WAAW,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE;IACrF,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC;IACnF;IACA;IACA,MAAM,MAAM,GAAG,YAAY,CACzB,QAAQ,CAAC,UAAU,EACnB,KAAK,EACL,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC,CAAC,GAAG,KAAK,GAAG,SAAS,EACpE,OAAO,GAAG,CAAC,GAAG,OAChB,CAAC;IACD,OAAO,GAAG,KAAK;IACf,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,EAAE;IACnD,QAAQ,GAAG,IAAI;IACf,QAAQ,CAAC,QAAQ,CAAC;MAAE,IAAI,EAAE,MAAM;MAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC,GAAG,SAAS,GAAG;IAAS,CAAC,CAAC;IAC5F,MAAM,CAAC,UAAU,CAAC,MAAM;MACtB,QAAQ,GAAG,KAAK;IAClB,CAAC,EAAE,GAAG,CAAC;EACT,CAAC;EACD;AACF;AACA;AACA;EACE,MAAM,eAAe,GAAG,MAAM;IAC5B,SAAS,GAAG,qBAAqB,CAAC,MAAM;MACtC,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC;IAC3C,CAAC,CAAC;EACJ,CAAC;EACD,MAAM,OAAO,GAAI,KAAiB,IAAK;IACrC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE;IACnD;IACA,QAAQ,GAAG,KAAK;IAChB,OAAO,GAAG,IAAI;IACd,IAAI,KAAK,CAAC,SAAS,GAAG,SAAS,GAAG,cAAc,IAAI,IAAI,KAAK,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;IAC/H,SAAS,GAAG,KAAK,CAAC,SAAS;IAC3B,MAAM,KAAK,GAAG,WAAW,CACvB,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,EAC5D,KAAK,CAAC,SAAS,EACf,IAAI,KAAK,GAAG,GAAG,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC,YACjD,CAAC;IACD,IAAI,IAAI,KAAK,GAAG,EAAE;MAChB,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,WAAW,GAAG,IAAI;MAClB,QAAQ,CAAC,UAAU,IAAI,KAAK;IAC9B,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;MAC7B;MACA,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,QAAQ,CAAC,SAAS,IAAI,KAAK;IAC7B;EACF,CAAC;EACD,IAAI,YAAY,GAAG,EAAE;EACrB,IAAI,UAAU,GAAG,EAAE;EACnB;EACA,IAAI,QAAQ,GAAG,CAAC;EAChB;AACF;AACA;AACA;EACE,MAAM,QAAQ,GAAG,MAAM;IACrB,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE;IAC5C,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC;IAC3B,MAAM;MAAE,KAAK;MAAE;IAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;IAC5C,QAAQ,GAAG,IAAI;IACf,IAAI,SAAS,GAAG,CAAC,IAAI,WAAW,KAAK,IAAI,IAAI,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,aAAa,IAAI,YAAY,KAAK,KAAK,EAAE;MACxH,YAAY,GAAG,KAAK;MACpB,KAAK,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAClC;IACA,IACE,SAAS,GAAG,CAAC,IACb,IAAI,GAAG,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,IAClE,KAAK,CAAC,KAAK,CAAC,WAAW,IACvB,UAAU,KAAK,IAAI,EACnB;MACA,UAAU,GAAG,IAAI;MACjB,KAAK,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAChC;EACF,CAAC;EACD,IAAI,KAAK,GAAG,CAAC;EACb,MAAM,QAAQ,GAAG,MAAM;IACrB,IAAI,CAAC,QAAQ,EAAE;IACf,IAAI,WAAW,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI;IAC/F,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,WAAW,CAAC;IAC7G,WAAW,GAAG,QAAQ,CAAC,UAAU;IACjC,IAAI,CAAC,KAAK,EACR,KAAK,GAAG,qBAAqB,CAAC,MAAM;MAClC,KAAK,GAAG,CAAC;MACT,SAAS,CAAC,CAAC;MACX,QAAQ,CAAC,CAAC;MACV,cAAc,CAAC,CAAC;IAClB,CAAC,CAAC;IACJ,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;IAC9B,oBAAoB,CAAC,SAAS,CAAC;IAC/B,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,eAAe,EAAE,OAAO,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;EACzE,CAAC;;EAED;EACA,IAAI,MAA8C,GAAG,IAAI;EACzD;EACA,IAAI,aAA4B,GAAG,IAAI;EACvC;EACA,MAAM,cAAc,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK;IAChD,IAAI,CAAC,QAAQ,EAAE;IACf,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC;IAC3B,IAAI,KAAK,IAAI,CAAC,EAAE;IAChB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC;IACrD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;IACxB,IAAI,GAAG,EAAE,MAAM,GAAG;MAAE,GAAG;MAAE,MAAM,EAAE,QAAQ,CAAC,UAAU,GAAG,KAAK,GAAG;IAAM,CAAC;EACxE,CAAC;EACD;EACA;EACA,cAAc,CACZ,EAAE,CACA,IAAI,EACJ,CAAC,IAAI,EAAE,KAAK,KAAK;IACf,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE;IACjC,cAAc,CAAC,KAAK,CAAC;IACrB;IACA;IACA,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC;IAC9D,IAAI,KAAK,KAAK,CAAC,EAAE,aAAa,CAAE,KAAK,IAAK,KAAK,GAAG,KAAK,CAAC;EAC1D,CAAC,EACD;IAAE,KAAK,EAAE;EAAK,CAChB,CACF,CAAC;EACD,YAAY,CACV,EAAE,CACA,IAAI,EACJ,MAAM;IACJ,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;IACpC,IAAI,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE;MAC1C,UAAU,CAAC,aAAa,CAAC;MACzB,aAAa,GAAG,IAAI;MACpB,cAAc,CAAC,CAAC;MAChB,SAAS,CAAC,CAAC;MACX;IACF;IACA,IAAI,CAAC,MAAM,EAAE;IACb,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM;IAC1C,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE,QAAQ,CAAC,UAAU,GAAG,IAAI;IAC1E,QAAQ,GAAG,QAAQ,CAAC,UAAU;EAChC,CAAC,EACD;IAAE,KAAK,EAAE;EAAK,CAChB,CACF,CAAC;;EAED;EACA,IAAI,aAAa,GAAG,CAAC;EACrB,OAAO,CAAC,MAAM;IACZ,UAAU,CAAC,IAAI,CAAC;IAChB,cAAc,CAAC,MAAM;MACnB,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;MAC5B,cAAc,CAAC,CAAC;MAChB,KAAK,GAAG,IAAI;IACd,CAAC,CAAC;IACF,MAAM,QAAQ,GACZ,OAAO,cAAc,KAAK,WAAW,GACjC,SAAS,GACT,IAAI,cAAc,CAAC,MAAM;MACvB,IAAI,CAAC,QAAQ,EAAE;MACf;MACA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,GAAG,GAAG;MAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;MAClC,YAAY,CAAC,CAAC;MACd;MACA;MACA,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC;MAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,aAAa,CAAC,GAAG,IAAI;MACtD,aAAa,GAAG,KAAK;MACrB,IAAI,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;MACpH,QAAQ,GAAG,QAAQ,CAAC,UAAU;MAC9B,SAAS,CAAC,CAAC;IACb,CAAC,CAAC;IACR,IAAI,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC;IACzC,SAAS,CAAC,MAAM;MACd,QAAQ,EAAE,UAAU,CAAC,CAAC;MACtB,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;MAC9B,oBAAoB,CAAC,SAAS,CAAC;MAC/B,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC;MAChC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;MAC/B,IAAI,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC;IACxC,CAAC,CAAC;EACJ,CAAC,CAAC;EACF,YAAY,CACV,EAAE,CACA,IAAI,CAAC,SAAS,EACb,GAAG,IAAK;IACP,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;IACvB,YAAY,CAAC,GAAG,CAAC;IACjB,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,GAAG;IACxC,IAAI,aAAa,EAAE;IACnB,IAAI,GAAG,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE;MACtC,cAAc,CAAC,CAAC;MAChB;IACF;IACA,cAAc,CAAC,MAAM;MACnB,UAAU,CAAC,GAAG,CAAC;MACf,cAAc,CAAC,CAAC;IAClB,CAAC,CAAC;EACJ,CAAC,EACD;IAAE,KAAK,EAAE;EAAK,CAChB,CACF,CAAC;EAED,MAAM,MAAM,GAAI,GAAW,IAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;EACrF,MAAM,MAAsB,GAAG;IAC7B,WAAW;IACX,IAAI,EAAG,SAAS,IAAK;MACnB,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK;MACjC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;MACpC;MACA,MAAM,MAAM,GAAG,SAAS,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE;MAChH,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;MAChE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK;MAClD,YAAY,CAAC,MAAM,CAAC;MACpB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;MAChC,OAAO,IAAI;IACb,CAAC;IACD,IAAI,EAAG,GAAG,IAAK;MACb,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK;MAC9B,YAAY,CAAC,GAAG,CAAC;MACjB,IAAI,CAAC,YAAY,CAAC;QAAE;MAAI,CAAC,CAAC;MAC1B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;MACpC,OAAO,IAAI;IACb,CAAC;IACD,KAAK,EAAE,MAAM;MACX,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;MAC3B,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;MACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,EAAE,OAAO,KAAK;MACxD,YAAY,CAAC,KAAK,CAAC;MACnB,cAAc,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;MACxF,OAAO,IAAI;IACb,CAAC;IACD,cAAc,EAAE,MAAM;MACpB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;MAC3B,MAAM;QAAE,KAAK;QAAE;MAAK,CAAC,GAAG,WAAW,CAAC,CAAC;MACrC,IAAI,KAAK,GAAG,KAAK,EAAE,OAAO,MAAM;MAChC,IAAI,KAAK,GAAG,IAAI,EAAE,OAAO,OAAO;MAChC,OAAO,EAAE;IACX,CAAC;IACD,UAAU,EAAE;MACV,WAAW,EAAG,MAAM,IAAK;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,QAAQ,EAAE,aAAa,CAAc,wBAAwB,MAAM,CAAC,GAAG,IAAI,CAAC;QAC3F,IAAI,CAAC,eAAe,CAClB,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,GAAG,EACV,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,IAAI,QAAS,EACrE,MACF,CAAC;MACH,CAAC;MACD,YAAY,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;MAC3E,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ;IAC5E;EACF,CAAC;EACD,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,GAAW,KAAqB;IAC5E,MAAM,IAAI,GAAG,QAAQ,EAAE,aAAa,CAAc,wBAAwB,GAAG,IAAI,CAAC;IAClF,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAC/C,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI;IACrF,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;IAC7C,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,OAAO,IAAI;IACrE,OAAO,IAAI,OAAO,CAChB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EACzB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CACzE,CAAC;EACH,CAAC;EACD,OAAO,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;EACrC,SAAS,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;EAErC;EACA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC;IAClB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAwC,CAAC;IAC9D,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;IAC3F,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAChC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAC/G,GAAG,CAAE,IAAI,KAAM;MAAE,IAAI,EAAE,IAAI;MAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ;MAAE,OAAO,EAAE,IAAI,CAAC,OAAO;MAAE,GAAG,EAAE,CAAC,IAAI,CAAC;IAAO,CAAC,CAAC,CAAC;IACrG,MAAM,KAA2C,GAAG,EAAE;IACtD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,GAAI;MACxC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAE,CAAC,CAAC,MAAM,CAAE,GAAG,IAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAE,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;MACzG,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC;MAChC,KAAK,CAAC,IAAI,CAAC;QAAE,MAAM;QAAE,IAAI,EAAE;MAAK,CAAC,CAAC;MAClC,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM;IAC9B;IACA,OAAO,KAAK,CAAC,GAAG,CAAE,IAAI,IAAK;MACzB,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;MAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAE,GAAG,IAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;MACpE,OAAO;QAAE,GAAG,IAAI;QAAE,MAAM;QAAE,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAE,OAAO,IAAK,OAAO,CAAC,MAAM,CAAC;MAAE,CAAC;IAC3G,CAAC,CAAC;EACJ,CAAC,CAAC;EACF;AACF;AACA;AACA;EACE,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM;IAClC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,KAAK,GAAG,YAAY,CAAC,CAAC,GAAG,CAAC;IACvC,OAAO,IAAI,CAAC,GAAG,CACb,CAAC,EACD,GAAG,MAAM,CAAC,CAAC,CACR,MAAM,CAAE,IAAI,IAAK,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CACpF,GAAG,CAAE,IAAI,IAAK,IAAI,CAAC,IAAI,CAC5B,CAAC;EACH,CAAC,CAAC;;EAEF;EACA;EACA,MAAM,KAAK,GAAG,MACZ,CAAC,IAAI,QAAQ,EAAE,gBAAgB,CAAc,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAE,IAAI,IAAK,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;EACxH,MAAM,WAAW,GAAG,MAAM;IACxB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG;IACrC,MAAM;MAAE,KAAK;MAAE;IAAK,CAAC,GAAG,WAAW,CAAC,CAAC;IACrC,IAAI,OAAO,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,IAAI,IAAI,EAAE,OAAO,OAAO;IAClE,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK;EAChF,CAAC;EACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,EAAE;EACvD,MAAM,KAAK,GAAI,EAAU,IAAM,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAE;EAC1D;EACA,YAAY,CACV,EAAE,CACA,IAAI,CAAC,IAAI,EACT,MAAM;IACJ,cAAc,CAAC,MAAM;MACnB,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE;MAC5B,IAAI,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAc,aAAa,CAAC,CAAC,CAAC,IAAI,CAAE,IAAI,IAAK,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE;MAC/G,SAAS,CAAC,EAAE,CAAC;MACb,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,aAAa,KAAK,QAAQ,CAAC,IAAI,EAAE;QACvE,QAAQ,CAAC,aAAa,CAAc,iBAAiB,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;UAAE,aAAa,EAAE;QAAK,CAAC,CAAC;MACzG;IACF,CAAC,CAAC;EACJ,CAAC,EACD;IAAE,KAAK,EAAE;EAAK,CAChB,CACF,CAAC;EACD,MAAM,SAAS,GAAI,KAAoB,IAAK;IAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,YAAY,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAc,aAAa,CAAC,GAAG,IAAI;IAC7G,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;IAChE,MAAM,SAAS,GAAG;MAAE,OAAO,EAAE,IAAI;MAAE,SAAS,EAAE,MAAM;MAAE,SAAS,EAAE,MAAM;MAAE,UAAU,EAAE,OAAO;MAAE,IAAI,EAAE,MAAM;MAAE,GAAG,EAAE;IAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IACnI,IAAI,CAAC,SAAS,EAAE;IAChB,KAAK,CAAC,cAAc,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC;IACnB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7C,MAAM,QAAQ,GAAI,KAAa,IAC7B,GAAG,CACA,MAAM,CAAE,IAAI,IAAK,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CACpD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtF,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IACtC,IAAI,IAA6B;IACjC,IAAI,SAAS,KAAK,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,KAC/C,IAAI,SAAS,KAAK,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,KAClD,IAAI,SAAS,KAAK,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KACzC,IAAI,SAAS,KAAK,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KACtD;MACH,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,SAAS,KAAK,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;MAChE,IAAI,GAAG,KAAK,CAAC,MAAM,CACjB,CAAC,IAAI,EAAE,IAAI,KACT,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC,GACxH,IAAI,GACJ,IAAI,EACV,SACF,CAAC;IACH;IACA,IAAI,CAAC,IAAI,EAAE;IACX,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;IAClC,IAAI,CAAC,KAAK,CAAC;MAAE,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC;IAAE,CAAC,CAAC;IAC/E,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;IACjC,IAAI,KAAK,GAAG,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KACrC,IAAI,KAAK,IAAI,KAAK,GAAG,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EACvF,CAAC;EAED,MAAM,OAAO,GAAI,GAAW,IAAK;IAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;IACvI,IAAI,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,KAC3C;MACH,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;MACjC,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;IACvD;EACF,CAAC;EACD,IAAI,WAAW,GAAG,OAAO;;EAEzB;EACA,MAAM,gBAAgB,GAAG,CAAC,YAA0B,EAAE,GAAgB,KAAK;IACzE,IAAI,YAAY,CAAC,WAAW,KAAK,OAAO,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE;IAC5F,MAAM,KAAK,GAAI,OAAe,IAAK;MACjC,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC;MAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC;MACxC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC;MACjG,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IACtB,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC;IAC1C,2BAA2B,CAAC;MAC1B,KAAK,EAAE,YAAY;MACnB,OAAO,EAAG,OAAO,IAAK,KAAK,CAAC,OAAO,CAAC;MACpC,SAAS,EAAG,GAAG,IAAK,iBAAiB,CAAC,MAAM,GAAG,GAAG,GAAG;QAAE,KAAK,EAAE,MAAM;QAAE,IAAI,EAAE;MAAI,CAAC,GAAG;QAAE,KAAK,EAAE,GAAG;QAAE,IAAI,EAAE;MAAO,CAAC,CAAC;MACjH,QAAQ,EAAG,GAAG,IAAK;QACjB,gBAAgB,CAAC,CAAC;QAClB,MAAM,KAAK,GAAG,MAAM,GAAG,GAAG,GAAG;UAAE,KAAK,EAAE,MAAM;UAAE,IAAI,EAAE;QAAI,CAAC,GAAG;UAAE,KAAK,EAAE,GAAG;UAAE,IAAI,EAAE;QAAO,CAAC;QACxF,MAAM,KAAK,GAAG,QAAQ,EAAE,aAAa,CAAc,2BAA2B,CAAC;QAC/E,iBAAiB,CAAC,IAAI,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC7E,IAAI,KAAK,CAAC,KAAK,CAAC,iBAAiB,EAC/B,IAAI,CAAC,QAAQ,CAAC;UAAE,KAAK,EAAE;YAAE,KAAK;YAAE,GAAG;YAAE,MAAM,EAAE;UAAK,CAAC;UAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC,IAAI,GAAG;UAAE,GAAG,EAAE,KAAK,CAAC;QAAM,CAAC,CAAC,CAAC,KACrH,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG;UAAE,KAAK;UAAE,GAAG;UAAE,MAAM,EAAE;QAAK,CAAC,CAAC;MACjE,CAAC;MACD,QAAQ,EAAE,MAAM,iBAAiB,CAAC,IAAI;IACxC,CAAC,CAAC;EACJ,CAAC;EACD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,YAAY,CAAyC,IAAI,CAAC;EAEtG,+DACiE,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,SAAS,uDAK3E,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,8DACtB,MAAM,qEAoBQ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,mBAK9C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK;EAAE,CAAC,CAAC,8BAE5E,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,IAAI,CAAC,CAAC;IAAA;IAAA,UACb,GAAG,IAAK;MACR,MAAM,KAAK,GAAG,MAAM,GAAG,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC;MAChD,MAAM,QAAQ,GAAG,MAAM;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,KAAK,GAAG,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC;MAC/E,CAAC;MACD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC;MAChD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;MACrC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;MACrC,oEAIwB,GAAG,iBACZ,cAAK,GAAG,SAAE,sCACX,OAAO,CAAC,GAAG,CAAC,qDAEZ,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,iDACb,QAAQ,CAAC,CAAC,GAAG,MAAM,GAAG,OAAO,iDAC/B,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAC3F,MAAM,CAAC,OAAO,CAAC,CACf,IAAI,CAAC,IAAI,CAAC,+CACD,KAAK,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,iDAC1B,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,YAAG,SAAS,8CACnE,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,+CAC9C,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,GAAG,GAAG,MAAM,YAAG,SAAS,6DAC/B,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,mBAmB7C,IAAI,CAAC,CAAC,CACJ,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE;QAAE,OAAO,EAAE,OAAO;QAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;MAAS,CAAC,CAAC,CAChH,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,YAEkB,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,8BAEzF,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,KAAK,CAAC,CAAC;QAAA;QAAA,UACf,OAAO,8CAEJ,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,OAAO,CAAC,CAAC,CAAC,IAAI;UAAA;UAAA,UAAI,IAAI,mBAAe,kBAAS,IAAI,CAAC,CAAC,SAAE;QAAuB,cACxF,OAAO,CAAC,CAAC,CAAC,KAAK;MAEnB,gCAIF,GAAG;QAAA,IAAC,IAAI;UAAA,OAAE,IAAI,CAAC,CAAC;QAAA;QAAA,UACb,KAAK,gDAA2B,GAAI,CAAC,cAAK,CAAC,GAAG,mBAAG,KAAK,CAAC,KAAK,oBAAI,IAAI,CAAC,CAAC,UAAI,GAAG,GAAG,gDAAc,KAAK,CAAC,KAAK;MAAM,cAKtE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,YAC9B,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,oBAAoB;IAI1F;EAAC,cAG8C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,YAChC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,sBAAsB,yCAK1E,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,oBAAoB,2DACjB,mBAAU,UAAU,CAAC,CAAC,2CAAoC,8BAkBxF,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,IAAI,CAAC,CAAC;IAAA;IAAA,UACd,CAAC,GAAG,EAAE,KAAK,uBACT,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;MAAA;MAAA;QAAA,yDACY,GAAG,cAAK,CAAC,CAAC,UAAG,CAAC,WAAW;MAAA;IAAA;EAE7F,gCAEF,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,cAAc,CAAC,CAAC;IAAA;IAAA,UACxB,KAAK,sDAGqB,GAAG,gBAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,UAAG,CAAC,MAAM,gBAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,UAAG,CAAC,EAAE;EAGzF,gCAEF,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,MAAM,CAAC,CAAC;IAAA;IAAA,UACf,IAAI,uBAED,GAAG;MAAA,IAAC,IAAI;QAAA,OAAE,IAAI,CAAC,MAAM,CAAC,IAAI;MAAA;MAAA,UACvB,GAAG,IAAK;QACR,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,WAAW,GAAG,CAAC;QAChD,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI;QAC3B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAC3C,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,IAAsB,EAAE,MAAM,GAAG,EAAE,KAAK;UACpE,MAAM,IAAI,GACR,IAAI,KAAK,MAAM,GACX,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAClF,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;UACzF,MAAM,IAAI,GAAG,YAAY,OAAO,QAAQ,KAAK,WAAW,GAAG,YAAY,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;UACtH,OAAO,SAAS,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,aAAa,IACvF,IAAI,GAAG,iBAAiB,CAAC,CAAC,GACxB,IAAI,GACJ,SAAS;QACf,CAAC;QACD,MAAM,KAAK,GAAG,MAAO,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,SAAU;QACvF,MAAM,GAAG,GAAG,MAAO,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,SAAU;QACnG,sDAGmB,OAAO,CAAC,CAAC,KAAK,SAAS,GAAG,MAAM,YAAG,SAAS,iDAC7C,OAAO,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,sDACzB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,MAAM,YAAG,SAAS,oDAEvD,GAAG,aAAI,CAAC,MAAM,mBAAG,GAAG,CAAC,WAAW,UAAG,CAAC,MAAM,aAAI,CAAC,MAAM,mBAAG,GAAG,CAAC,SAAS,UAAG,CAAC,EAAE,8CAC9E,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,kEACP,WAAW,CAAC,KAAK,CAAC,2CAClC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,qBAAY,SAAS,qCAG1D,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,OAAO,CAAC,CAAC,KAAK,SAAS;UAAA;UAAA;YAAA,yBAChC,SAAS;cAAC,IAAI,EAAE,IAAI;cAAE,KAAK,EAAE,KAAK;cAAE,QAAQ,EAAE,CAAC;YAAC;UAAA;QAAA,gCAElD,SAAS;UAAA,IACR,KAAK;YAAA,OAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;UAAA;UAAA,IAChD,KAAK;YAAA,OAAE,KAAK,CAAC,KAAK;UAAA;UAAA,IAClB,IAAI;YAAA,OAAE,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;UAAA;UAAA,IACnC,KAAK;YAAA,OAAE,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;UAAA;UAChC,OAAO;UACP,QAAQ;UACR,GAAG;UAAA,IACH,QAAQ;YAAA,OAAE,OAAO,CAAC,CAAC,KAAK,SAAS;UAAA;UAAA,IACjC,OAAO;YAAA,OAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;UAAA;UAAA,IAC5B,eAAe;YAAA,OAAE,GAAG,CAAC,eAAe;UAAA;UAAA,IACpC,cAAc;YAAA,OAAE,GAAG,CAAC,cAAc;UAAA;UAAA,IAClC,SAAS;YAAA,OAAE,KAAK,CAAC,CAAC;UAAA;UAAA,IAClB,OAAO;YAAA,OAAE,GAAG,CAAC,CAAC;UAAA;UAAA,IACd,QAAQ;YAAA,OAAE,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;UAAA;UAAA,IAC/C,IAAI;YAAA,OAAE;cACJ,EAAE,EAAE,KAAK,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;cAClC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,WAAW;cACrC,MAAM,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG;YAC1B,CAAC;UAAA;QAAA;MAIT;IAAC,sBAEF,GAAG;MAAA,IAAC,IAAI;QAAA,OAAE,IAAI,CAAC,MAAM,CAAC,OAAO;MAAA;MAAA,UAC3B,CAAC,OAAO,EAAE,MAAM,KAAK;QACpB,MAAM,KAAK,GAAG,MACZ,IAAI,CAAC,GAAG,CACN,CAAC,EACD,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAChB,MAAM,CAAE,GAAG,IAAK,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,CACzE,GAAG,CAAE,GAAG,IAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAC9B,CAAC;QACH,yBACG,GAAG;UAAC,IAAI,EAAE,OAAO;UAAA,UACf,CAAC,IAAI,EAAE,GAAG,KAAK;YACd,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI;YACvB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAC3C,MAAM,EAAE,GAAG,KAAK,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;YACzC,sDAGmB,OAAO,CAAC,CAAC,KAAK,SAAS,GAAG,MAAM,YAAG,SAAS,iDAC7C,OAAO,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,sDACzB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,MAAM,YAAG,SAAS,6DAEvD,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,qDACrC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,kEACd,WAAW,CAAC,KAAK,CAAC,2CAClC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,qBAAY,SAAS,qCAGjE,IAAI;cAAA,IAAC,IAAI;gBAAA,OAAE,OAAO,CAAC,CAAC,KAAK,SAAS;cAAA;cAAA;gBAAA,yBAChC,SAAS;kBAAC,IAAI,EAAE,IAAI;kBAAE,KAAK,EAAE,KAAK;kBAAE,QAAQ,EAAE,CAAC;gBAAC;cAAA;YAAA,gCAElD,SAAS;cAAA,IACR,KAAK;gBAAA,OAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;cAAA;cAAA,IAC5C,KAAK;gBAAA,OAAE,KAAK,CAAC,KAAK;cAAA;cAAA,IAClB,IAAI;gBAAA,OAAE,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;cAAA;cACnC,OAAO;cACP,QAAQ;cAAA,IACR,QAAQ;gBAAA,OAAE,OAAO,CAAC,CAAC,KAAK,SAAS;cAAA;cAAA,IACjC,OAAO;gBAAA,OAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;cAAA;cAAA,IAC5B,QAAQ;gBAAA,OAAE,KAAK,CAAC,EAAE,CAAC;cAAA;cAAA,IACnB,IAAI;gBAAA,OAAE;kBAAE,EAAE;kBAAE,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;kBAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI;gBAAI,CAAC;cAAA;YAAA;UAI1F;QAAC;MAGP;IAAC;EAGN,4CAI+C,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,qCAE/F,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI,CAAC;QAAE,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG;MAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,GAAG,EAAE,CAAC;IAAA;IAAA,UACxE,MAAM,oDAGW,QAAQ,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,YAAG,SAAS,qDAC1E,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,mBAG9D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;EAEtB,gCAEF,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,UAAU,CAAC,CAAC;IAAA;IAAA;MAAA,yBACrB,GAAG;QAAA,IAAC,IAAI;UAAA,OAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAAA;QAAA,UACzB,MAAM,wDAIU,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,mBAGtD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;MAEtB;IAAA;EAAA,qCAMY,UAAU,CAAC,CAAC,GAAG,MAAM,GAAG,OAAO,wCAE5C,UAAU,CAAC,CAAC,YACR,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,mBAClC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;EAAE,CAAC,CAAC,0CAGzH,UAAU,CAAC,CAAC,YACR,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,mBAClC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;EAAE,CAAC,CAAC,8CAEhH,UAAU,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,qDAC9B,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAIjF,MAAM,UAAU,CAAC,CAAC,GAAG,eAAe,GAAG,iBAAiB,EAAE,6BAErE,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,QAAQ,CAAC,CAAC;IAAA;IAAA;MAAA,yDAGJ,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,mBAGxE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAAA;EAAA,gCAKhC,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,IAAI,CAAC;QAAE,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG;MAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,GAAG,EAAE,CAAC;IAAA;IAAA,UACxE,MAAM,wDAAyD,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;EAAM,gCAEzH,IAAI;IAAA,IACH,IAAI;MAAA,OAAE,UAAU,CAAC,CAAC;IAAA;IAAA,IAClB,QAAQ;MAAA,kDAC8C,iBAAQ,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAS;IAAA;IAAA;MAAA,2DAKjG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,mDAAU,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,6BAElH,GAAG;QAAA,IAAC,IAAI;UAAA,OAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAAA;QAAA,UACzB,MAAM,oDAGW,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO,GAAG,MAAM,YAAG,SAAS,qDACpD,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;MAE1D;IAAA;EAAA,gCAGJ,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,QAAQ,CAAC,CAAC;IAAA;IAAA;MAAA,0DACoC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAAA;EAAA,gCAGtH,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,IAAI,CAAC,CAAC;IAAA;IAAA,UACb,GAAG,sBACF,UAAU;MACT,IAAI,EAAE,IAAI;MACV,MAAM,EAAE,GAAG;MAAA,IACX,MAAM;QAAA,OAAE,OAAO,CAAC,GAAG,CAAC;MAAA;MAAA,IACpB,QAAQ;QAAA,OAAE,UAAU,CAAC,CAAC;MAAA;MACtB,KAAK,EAAE,KAAK;MACZ,WAAW,EAAE,MAAM,WAAW;MAC9B,cAAc,EAAG,KAAK,IAAK;QACzB,WAAW,GAAG,KAAK;MACrB,CAAC;MACD,QAAQ,EAAE,MAAM;IAAQ;EAE3B,mCAKsB,MAAM,0BAClC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,oBAAoB,8BAEtC,eAAe;IAAC,IAAI,EAAE;EAAI;EAI/B,SAAS,iBAAiB,GAAG;IAC3B;IACA,YAAY,CAAC,CAAC;IACd,OAAO,WAAW,CAAC,CAAC;EACtB;AACF,CAAC;AAED,MAAM,UAAU,GAAI,KASnB,IAAK;EACJ,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI;EACvB,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;EACxD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;EAC9B,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;EAC5E,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;EAC1D,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAE,MAAM,IAAK,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACjH;EACA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAE,KAAK,IAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;EAC3G,MAAM,MAAM,GAAG,MAAO,KAAK,CAAC,QAAQ,GAAG,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAE;EAC9E,MAAM,aAAa,GAAI,MAA0B,IAC/C,MAAM,YAAY,OAAO,IACzB,CAAC,MAAM,CAAC,OAAO,CACb,0HACF,CAAC;EACH,MAAM,QAAQ,GAAG,CAAC,OAAoB,EAAE,OAAe,KAAK;IAC1D,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;IACjE,OAAO,IAAI,CAAC,GAAG,CACb,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,CAC7H,CAAC;EACH,CAAC;EACD,MAAM,SAAS,GAAG,MAAO,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAK;EAClF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,MAAM;EAC7D;EACA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAgB,IAAI,CAAC;EAC3D,MAAM,QAAQ,GAAG,UAAU,CAAC,MAC1B,CACE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAE,GAAG,KAAM;IAAE,EAAE,EAAE,GAAG,CAAC,KAAK;IAAE,IAAI,EAAE,KAAc;IAAE;EAAI,CAAC,CAAC,CAAC,EACtE,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAE,IAAI,KAAM;IAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAe;IAAE;EAAK,CAAC,CAAC,CAAC,EACxF,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAE,MAAM,KAAM;IAAE,EAAE,EAAE,MAAM,CAAC,MAAM;IAAE,IAAI,EAAE,QAAiB;IAAE;EAAO,CAAC,CAAC,CAAC,CACvF,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAC5C,CAAC;EACD,qEAKwB,KAAK,CAAC,MAAM,kDACjB,KAAK,CAAC,QAAQ,GAAG,MAAM,GAAG,OAAO,wCACpC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,iDACxD,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,YAAG,SAAS,kDACxE,QAAQ,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,gDACjC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,MAAM,YAAG,SAAS,uDAEvD,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,6DACf,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,mDAAU,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,qCAyCzG,GAAG;IAAA,IAAC,IAAI;MAAA,OAAE,QAAQ,CAAC,CAAC;IAAA;IAAA,UACjB,KAAK,IACL,KAAK,CAAC,IAAI,KAAK,KAAK,qBACjB,OAAO;MACN,IAAI,EAAE,IAAI;MAAA,IACV,GAAG;QAAA,OAAE,KAAK,CAAC,GAAG;MAAA;MAAA,IACd,MAAM;QAAA,OAAE,KAAK,CAAC,MAAM;MAAA;MAAA,IACpB,QAAQ;QAAA,OAAE,KAAK,CAAC,QAAQ;MAAA;MAAA,IACxB,KAAK;QAAA,OAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC;MAAA;MAAA,IACnC,QAAQ;QAAA,OAAE,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;MAAA;MAAA,IAC7D,IAAI;QAAA,OAAE;UAAE,EAAE,EAAE,KAAK,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE;UAAE,MAAM,EAAE,KAAK,CAAC,MAAM;UAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG;QAAI,CAAC;MAAA;IAAA,KAEzG,KAAK,CAAC,IAAI,KAAK,MAAM,qBACtB,QAAQ;MACP,IAAI,EAAE,IAAI;MAAA,IACV,IAAI;QAAA,OAAE,KAAK,CAAC,IAAI;MAAA;MAAA,IAChB,MAAM;QAAA,OAAE,KAAK,CAAC,MAAM;MAAA;MAAA,IACpB,QAAQ;QAAA,OAAE,KAAK,CAAC,QAAQ;MAAA;MACxB,MAAM,EAAE,EAAE;MAAA,IACV,QAAQ;QAAA,OAAE,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;MAAA;MAAA,IAChE,IAAI;QAAA,OAAE;UAAE,EAAE,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE;UAAE,MAAM,EAAE,KAAK,CAAC,MAAM;UAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;QAAM,CAAC;MAAA;MAAA,IACvG,QAAQ;QAAA,OAAE,KAAK,CAAC,QAAQ;MAAA;IAAA,uBAGzB,UAAU;MACT,IAAI,EAAE,IAAI;MAAA,IACV,KAAK;QAAA,OAAE,KAAK,CAAC,MAAM,CAAC,IAAI;MAAA;MAAA,IACxB,MAAM;QAAA,OAAE,KAAK,CAAC,MAAM,CAAC,MAAM;MAAA;MAAA,IAC3B,MAAM;QAAA,OAAE,KAAK,CAAC,MAAM;MAAA;MAAA,IACpB,QAAQ;QAAA,OAAE,KAAK,CAAC,QAAQ;MAAA;MAAA,IACxB,KAAK;QAAA,OAAE,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;MAAA;MAAA,IAChD,IAAI;QAAA,OAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC;MAAA;MAAA,IAC1C,KAAK;QAAA,OAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC;MAAA;MAC5C,QAAQ,EAAE,KAAK;MAAA,IACf,QAAQ;QAAA,OAAE,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;MAAA;MAAA,IAClD,IAAI;QAAA,OAAE;UAAE,EAAE,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE;UAAE,MAAM,EAAE,KAAK,CAAC,MAAM;UAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QAAO,CAAC;MAAA;MAAA,IAC5F,QAAQ;QAAA,OAAE,KAAK,CAAC,QAAQ;MAAA;IAAA;EAE3B,gCAGJ,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,gBAAC,KAAK,CAAC,QAAQ,OAAI,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;IAAA;IAAA;MAAA,kDACQ,iBAAQ,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAS,8BAG9G,GAAG;QAAA,IAAC,IAAI;UAAA,OAAE,MAAM,CAAC,CAAC;QAAA;QAAA,UAChB,CAAC,KAAK,EAAE,KAAK,KAAK;UACjB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;UACjD,uDAEmB,OAAO,CAAC,CAAC,KAAK,SAAS,GAAG,MAAM,YAAG,SAAS,iDAC7C,OAAO,CAAC,CAAC,GAAG,MAAM,YAAG,SAAS,uEACV,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,qCAEzD,IAAI;YAAA,IAAC,IAAI;cAAA,OAAE,OAAO,CAAC,CAAC,KAAK,SAAS;YAAA;YAAA;cAAA,yBAChC,SAAS;gBAAC,IAAI,EAAE,IAAI;gBAAA,IAAE,KAAK;kBAAA,OAAE,KAAK,CAAC,KAAK;gBAAA;gBAAE,QAAQ,EAAE,CAAC;cAAC;YAAA;UAAA,gCAExD,SAAS;YAAA,IACR,KAAK;cAAA,OAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YAAA;YAAA,IACjD,KAAK;cAAA,OAAE,IAAI,CAAC,KAAK,CAAC,KAAK;YAAA;YAAA,IACvB,IAAI;cAAA,OAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;YAAA;YAC9C,OAAO;YACP,QAAQ;YAAA,IACR,WAAW;cAAA,OAAE,KAAK,CAAC,IAAI;YAAA;YAAA,IACvB,QAAQ;cAAA,OAAE,OAAO,CAAC,CAAC,KAAK,SAAS;YAAA;YAAA,IACjC,OAAO;cAAA,OAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;YAAA;YAAA,IAClC,QAAQ;cAAA,OAAE,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YAAA;YAAA,IAC5D,IAAI;cAAA,OAAE;gBAAE,EAAE,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE;gBAAE,MAAM,EAAE,KAAK,CAAC,MAAM;gBAAE,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG;cAAI,CAAC;YAAA;UAAA;QAIjH;MAAC;IAAA;EAAA,gCAKR,YAAY;IAAC,IAAI,EAAE,IAAI;IAAA,IAAE,MAAM;MAAA,OAAE,KAAK,CAAC,MAAM;IAAA;IAAA,IAAE,QAAQ;MAAA,OAAE,KAAK,CAAC,QAAQ;IAAA;EAAA,gCACvE,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,KAAK,CAAC,CAAC,KAAK,IAAI;IAAA;IAAA;MAAA,2DACqB,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAE,CAAC,CAAC,mBACjG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAE,CAAC;IAAA;EAAA,gCAGxB,IAAI;IAAA,IAAC,IAAI;MAAA,OAAE,yBAAS,CAAC,CAAC,KAAK,IAAI,IAAI,SAAS,CAAC,CAAC,IAAK,CAAC,QAAI,SAAS,CAAC,CAAC,IAAK,KAAK,CAAC,QAAQ,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC;IAAA;IAAA;MAAA,2DACjE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAE,CAAC,CAAC;IAAA;EAAA;AAI7G,CAAC;;AAED;AACA,MAAM,OAAO,GAAI,GAAW,IAAK;EAC/B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;EACzC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC;EACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;EAC5C,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EACjE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,CAAC,CAAC;AACjF,CAAC;;AAED;AACA,MAAM,QAAQ,GAAG,CAAC,IAAc,EAAE,MAAc,EAAE,KAAa,MAAM;EACnE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;EAChC,KAAK,EACH,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GACpC,SAAS,GACT,IAAI,CACD,QAAQ,CAAC,MAAM,CAAC,CAChB,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE;IAAE,KAAK,EAAE,OAAO;IAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;EAAS,CAAC,CAAC,CAC9G,OAAO,CAAC,KAAK,EAAE,EAAE;AAC5B,CAAC,CAAC;;AAEF;AACA,MAAM,SAAS,GAAG,CAAC,IAAc,EAAE,IAA4B,KAAK;EAClE,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,OAAO,EAAE,OAAO,SAAS;EACpD,MAAM,MAAM,GAAI,GAAW,IACzB,IAAI,CACD,QAAQ,CAAC,GAAG,CAAC,CACb,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM;IAAE,GAAG,EAAE,SAAS;IAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;EAAS,CAAC,CAAC;EAClI,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;IAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO;EAAE,CAAC,CAAC;AAC/H,CAAC","ignoreList":[]}
|