@k2b/ui 0.25.0 → 0.27.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.
Files changed (111) hide show
  1. package/dist/browser/actions/GestureMenu.js +2 -2
  2. package/dist/browser/actions/GestureMenu.js.map +1 -1
  3. package/dist/browser/chat/ChatComposer.js +811 -406
  4. package/dist/browser/chat/ChatComposer.js.map +1 -1
  5. package/dist/browser/chat/chat-behavior.js +4 -0
  6. package/dist/browser/chat/chat-behavior.js.map +1 -1
  7. package/dist/browser/chat/chat-messages.js +14 -0
  8. package/dist/browser/chat/chat-messages.js.map +1 -1
  9. package/dist/browser/chat/command-search.js +170 -0
  10. package/dist/browser/chat/command-search.js.map +1 -0
  11. package/dist/browser/chat/composer-document.js +1 -1
  12. package/dist/browser/chat/composer-document.js.map +1 -1
  13. package/dist/browser/chat/index.js.map +1 -1
  14. package/dist/browser/content/Calendar.js +8 -7
  15. package/dist/browser/content/Calendar.js.map +1 -1
  16. package/dist/browser/content/CalendarDayView.js +32 -6
  17. package/dist/browser/content/CalendarDayView.js.map +1 -1
  18. package/dist/browser/content/CalendarWeekView.js +4 -3
  19. package/dist/browser/content/CalendarWeekView.js.map +1 -1
  20. package/dist/browser/content/Timeline.js +3 -3
  21. package/dist/browser/content/Timeline.js.map +1 -1
  22. package/dist/browser/content/calendar-time-view.js +0 -1
  23. package/dist/browser/content/calendar-time-view.js.map +1 -1
  24. package/dist/browser/index.js +1 -0
  25. package/dist/browser/index.js.map +1 -1
  26. package/dist/browser/inputs/Combobox.js +26 -5
  27. package/dist/browser/inputs/Combobox.js.map +1 -1
  28. package/dist/browser/inputs/QrScanner.js +2 -1
  29. package/dist/browser/inputs/QrScanner.js.map +1 -1
  30. package/dist/browser/inputs/SelectChip.js +43 -12
  31. package/dist/browser/inputs/SelectChip.js.map +1 -1
  32. package/dist/browser/layout/AppWorkspace.js +720 -528
  33. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  34. package/dist/browser/layout/BottomSheet.js +8 -0
  35. package/dist/browser/layout/BottomSheet.js.map +1 -1
  36. package/dist/browser/layout/app-workspace-controller.js +159 -27
  37. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  38. package/dist/browser/layout/app-workspace-state.js +5 -1
  39. package/dist/browser/layout/app-workspace-state.js.map +1 -1
  40. package/dist/browser/layout/index.js +1 -1
  41. package/dist/browser/layout/index.js.map +1 -1
  42. package/dist/browser/layout/scroll-fade.js +14 -9
  43. package/dist/browser/layout/scroll-fade.js.map +1 -1
  44. package/dist/browser/layout/sidebar-scroll-memory.js +38 -0
  45. package/dist/browser/layout/sidebar-scroll-memory.js.map +1 -0
  46. package/dist/browser/motion.js +7 -0
  47. package/dist/browser/motion.js.map +1 -0
  48. package/dist/ssr/actions/GestureMenu.js +2 -2
  49. package/dist/ssr/actions/GestureMenu.js.map +1 -1
  50. package/dist/ssr/chat/ChatComposer.js +410 -93
  51. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  52. package/dist/ssr/chat/chat-behavior.js +4 -0
  53. package/dist/ssr/chat/chat-behavior.js.map +1 -1
  54. package/dist/ssr/chat/chat-messages.js +14 -0
  55. package/dist/ssr/chat/chat-messages.js.map +1 -1
  56. package/dist/ssr/chat/command-search.js +170 -0
  57. package/dist/ssr/chat/command-search.js.map +1 -0
  58. package/dist/ssr/chat/composer-document.js +1 -1
  59. package/dist/ssr/chat/composer-document.js.map +1 -1
  60. package/dist/ssr/chat/index.js.map +1 -1
  61. package/dist/ssr/content/Calendar.js +8 -7
  62. package/dist/ssr/content/Calendar.js.map +1 -1
  63. package/dist/ssr/content/CalendarDayView.js +32 -6
  64. package/dist/ssr/content/CalendarDayView.js.map +1 -1
  65. package/dist/ssr/content/CalendarWeekView.js +4 -3
  66. package/dist/ssr/content/CalendarWeekView.js.map +1 -1
  67. package/dist/ssr/content/Timeline.js +3 -3
  68. package/dist/ssr/content/Timeline.js.map +1 -1
  69. package/dist/ssr/content/calendar-time-view.js +0 -1
  70. package/dist/ssr/content/calendar-time-view.js.map +1 -1
  71. package/dist/ssr/index.js +1 -0
  72. package/dist/ssr/index.js.map +1 -1
  73. package/dist/ssr/inputs/Combobox.js +22 -5
  74. package/dist/ssr/inputs/Combobox.js.map +1 -1
  75. package/dist/ssr/inputs/QrScanner.js +2 -1
  76. package/dist/ssr/inputs/QrScanner.js.map +1 -1
  77. package/dist/ssr/inputs/SelectChip.js +35 -11
  78. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  79. package/dist/ssr/layout/AppWorkspace.js +254 -118
  80. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  81. package/dist/ssr/layout/BottomSheet.js +8 -0
  82. package/dist/ssr/layout/BottomSheet.js.map +1 -1
  83. package/dist/ssr/layout/app-workspace-controller.js +159 -27
  84. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  85. package/dist/ssr/layout/app-workspace-state.js +5 -1
  86. package/dist/ssr/layout/app-workspace-state.js.map +1 -1
  87. package/dist/ssr/layout/index.js +1 -1
  88. package/dist/ssr/layout/index.js.map +1 -1
  89. package/dist/ssr/layout/scroll-fade.js +14 -9
  90. package/dist/ssr/layout/scroll-fade.js.map +1 -1
  91. package/dist/ssr/layout/sidebar-scroll-memory.js +38 -0
  92. package/dist/ssr/layout/sidebar-scroll-memory.js.map +1 -0
  93. package/dist/ssr/motion.js +7 -0
  94. package/dist/ssr/motion.js.map +1 -0
  95. package/dist/styles.css +1 -1
  96. package/dist/types/chat/ChatComposer.d.ts +44 -2
  97. package/dist/types/chat/chat-behavior.d.ts +4 -0
  98. package/dist/types/chat/chat-messages.d.ts +7 -0
  99. package/dist/types/chat/command-search.d.ts +39 -0
  100. package/dist/types/chat/index.d.ts +1 -1
  101. package/dist/types/content/calendar-time-view.d.ts +0 -1
  102. package/dist/types/index.d.ts +1 -0
  103. package/dist/types/inputs/Combobox.d.ts +1 -0
  104. package/dist/types/inputs/SelectChip.d.ts +4 -0
  105. package/dist/types/layout/AppWorkspace.d.ts +13 -1
  106. package/dist/types/layout/BottomSheet.d.ts +8 -0
  107. package/dist/types/layout/index.d.ts +1 -1
  108. package/dist/types/layout/scroll-fade.d.ts +2 -0
  109. package/dist/types/layout/sidebar-scroll-memory.d.ts +6 -0
  110. package/dist/types/motion.d.ts +6 -0
  111. package/package.json +4 -4
@@ -36,11 +36,11 @@ var _tmpl$ = /*#__PURE__*/_$template(`<p class=k2b-calendar-days__more>`),
36
36
  _tmpl$20 = /*#__PURE__*/_$template(`<span class=k2b-calendar-days__badge-day>`),
37
37
  _tmpl$21 = /*#__PURE__*/_$template(`<span class=k2b-calendar-days__badge data-run=true><!$><!/><!$><!/><!$><!/>`);
38
38
  import { createComputed, createEffect, createMemo, createSignal, createUniqueId, For, on, onCleanup, onMount, Show, untrack } from "solid-js";
39
+ import { prefersReducedMotion } from "../motion";
39
40
  import { brakedScroll, GESTURE_GAP_MS, SETTLE_RADIUS, settleTarget, stopCrossing, stopIndexAt, wheelPixels } from "./calendar-day-scroll";
40
41
  import { addDayKeys, DAY_MINUTES, dayGroups, dayHeightTerms, dayKeyRange, dayMinuteAt, dayY, dayYTerms, markerLanes, readDayGeometry, termsCss } from "./calendar-days";
41
42
  import { EventChip, eventHref } from "./calendar-shared";
42
- import { AllDayChips, createTimeView, dayBands, dayGaps, daySummary, eventAccent, foldedEntries, gapAside, isNearNow, longDay, markerAbove, nightHours, reducedMotion, shortDay, soonNote, TimeBand, TimeCheck, TimeGap, TimeMarker, TimeOverlays, TimeQuickCreate } from "./calendar-time-view";
43
- const groupId = group => group.kind === "day" ? `d:${group.key}` : `e:${group.keys.join(",")}`;
43
+ import { AllDayChips, createTimeView, dayBands, dayGaps, daySummary, eventAccent, foldedEntries, gapAside, isNearNow, longDay, markerAbove, nightHours, shortDay, soonNote, TimeBand, TimeCheck, TimeGap, TimeMarker, TimeOverlays, TimeQuickCreate } from "./calendar-time-view";
44
44
  const groupFirst = group => group.kind === "day" ? group.key : group.keys[0];
45
45
 
46
46
  /**
@@ -74,8 +74,34 @@ export const CalendarDayView = props => {
74
74
  // Today and the day the reader opened never fold, so a day opened from the month shows its hours to create in.
75
75
  const groups = createMemo(() => dayGroups(keys(), key => view.dayOf(key).empty, new Set([view.nowKey(), view.anchorKey(), ...unfolded()])));
76
76
  const unfold = keys => setUnfolded(value => new Set([...value, ...keys]));
77
- const groupIds = createMemo(() => groups().map(groupId));
78
- const groupsById = createMemo(() => new Map(groups().map(group => [groupId(group), group])));
77
+ let runs = 0;
78
+ // Keep a run's identity so focus on its button survives days joining it at either end.
79
+ const entries = createMemo(previous => {
80
+ const taken = new Set();
81
+ return groups().map(group => {
82
+ if (group.kind === "day") return {
83
+ id: `d:${group.key}`,
84
+ group
85
+ };
86
+ const continued = previous.find(({
87
+ id,
88
+ group: old
89
+ }) => old.kind === "empty" && !taken.has(id) && old.keys.some(key => group.keys.includes(key)));
90
+ const id = continued?.id ?? `e:${++runs}`;
91
+ taken.add(id);
92
+ return {
93
+ id,
94
+ group
95
+ };
96
+ });
97
+ }, []);
98
+ const groupIds = createMemo(() => entries().map(({
99
+ id
100
+ }) => id));
101
+ const groupsById = createMemo(() => new Map(entries().map(({
102
+ id,
103
+ group
104
+ }) => [id, group])));
79
105
 
80
106
  // Where each group starts in the scroll, measured after every change of the groups and on resize.
81
107
  let sections = [];
@@ -145,7 +171,7 @@ export const CalendarDayView = props => {
145
171
  };
146
172
  scroller.scrollTo({
147
173
  top: target,
148
- behavior: reducedMotion() ? "instant" : "smooth"
174
+ behavior: prefersReducedMotion() ? "instant" : "smooth"
149
175
  });
150
176
  };
151
177
 
@@ -185,7 +211,7 @@ export const CalendarDayView = props => {
185
211
  settling = true;
186
212
  scroller.scrollTo({
187
213
  top: target,
188
- behavior: reducedMotion() ? "instant" : "smooth"
214
+ behavior: prefersReducedMotion() ? "instant" : "smooth"
189
215
  });
190
216
  window.setTimeout(() => {
191
217
  settling = false;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["content/CalendarDayView.tsx"],"sourcesContent":["import {\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 { brakedScroll, GESTURE_GAP_MS, SETTLE_RADIUS, settleTarget, stopCrossing, stopIndexAt, wheelPixels } from \"./calendar-day-scroll\";\nimport {\n addDayKeys,\n DAY_MINUTES,\n type DayGroup,\n dayGroups,\n dayHeightTerms,\n dayKeyRange,\n dayMinuteAt,\n dayY,\n dayYTerms,\n markerLanes,\n readDayGeometry,\n termsCss,\n} from \"./calendar-days\";\nimport { EventChip, eventHref } from \"./calendar-shared\";\nimport {\n AllDayChips,\n createTimeView,\n dayBands,\n dayGaps,\n daySummary,\n eventAccent,\n foldedEntries,\n gapAside,\n isNearNow,\n longDay,\n markerAbove,\n nightHours,\n reducedMotion,\n shortDay,\n soonNote,\n TimeBand,\n TimeCheck,\n TimeGap,\n TimeMarker,\n TimeOverlays,\n TimeQuickCreate,\n type TimeView,\n type TimeViewHandle,\n type TimeViewProps,\n} from \"./calendar-time-view\";\n\nconst groupId = (group: DayGroup) => (group.kind === \"day\" ? `d:${group.key}` : `e:${group.keys.join(\",\")}`);\nconst groupFirst = (group: DayGroup) => (group.kind === \"day\" ? group.key : group.keys[0]!);\n\n/**\n * The day view with `dayHours`: the loaded days one below the other in a single scroll, each with its heading kept on\n * top while it is in view. Runs of empty days fold into one row. The view slows down and settles at each day start,\n * and a line at the top of the heading fills while a day start passes.\n */\nexport const CalendarDayView = (props: TimeViewProps) => {\n const view = createTimeView(props);\n const [mounted, setMounted] = createSignal(false);\n const [unfolded, setUnfolded] = createSignal<ReadonlySet<string>>(new Set());\n const [topKey, setTopKey] = createSignal(untrack(view.anchorKey));\n const [hover, setHover] = createSignal<{ key: string; minute: number } | null>(null);\n /** Where today's day lies from the view, kept current while scrolling for the Today button's arrow. */\n const [todayPlace, setTodayPlace] = createSignal<\"up\" | \"down\" | \"\">(\"\");\n let scroller: HTMLDivElement | undefined;\n let track: HTMLDivElement | undefined;\n const helpId = createUniqueId();\n\n // The server and the first render start at the shown day, so the page never flashes the days before it; once\n // mounted the earlier days join above it without moving the view.\n const keys = createMemo(() => {\n const { first, last } = view.range();\n const anchor = view.anchorKey();\n const from = mounted() || anchor < first || anchor > last ? first : anchor;\n return dayKeyRange(from, last);\n });\n // Today and the day the reader opened never fold, so a day opened from the month shows its hours to create in.\n const groups = createMemo(() =>\n dayGroups(keys(), (key) => view.dayOf(key).empty, new Set([view.nowKey(), view.anchorKey(), ...unfolded()])),\n );\n const unfold = (keys: readonly string[]) => setUnfolded((value) => new Set([...value, ...keys]));\n const groupIds = createMemo(() => groups().map(groupId));\n const groupsById = createMemo(() => new Map(groups().map((group) => [groupId(group), group])));\n\n // Where each group starts in the scroll, measured after every change of the groups and on resize.\n let sections: HTMLElement[] = [];\n let tops: number[] = [];\n const measure = () => {\n if (!track) return;\n sections = [...track.querySelectorAll<HTMLElement>(\":scope > [data-calendar-group]\")];\n tops = sections.map((section) => section.offsetTop);\n };\n const keysOf = (section: HTMLElement | undefined) => (section?.dataset.calendarKeys ?? \"\").split(\",\").filter(Boolean);\n const sectionOf = (key: string) => sections.find((section) => keysOf(section).includes(key));\n\n /** The group at the top of the view and how far into it the view is, kept across changes above it. */\n let anchor: { key: string; delta: 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 /** The last scroll position the view read, to tell the reader's direction. */\n let lastScrollTop = 0;\n const rememberAnchor = () => {\n if (!scroller || sections.length === 0) return;\n const index = stopIndexAt(tops, scroller.scrollTop);\n const section = sections[index];\n if (section) anchor = { key: keysOf(section)[0]!, delta: scroller.scrollTop - tops[index]! };\n };\n const restoreAnchor = () => {\n if (!scroller || !anchor) return;\n const saved = anchor;\n let index = sections.findIndex((section) => keysOf(section).includes(saved.key));\n if (index < 0) index = sections.findIndex((section) => keysOf(section)[0]! >= saved.key);\n if (index < 0) return;\n const top = tops[index]! + Math.min(saved.delta, sections[index]!.offsetHeight - 1);\n if (Math.abs(scroller.scrollTop - top) > 0.5) scroller.scrollTop = top;\n lastScrollTop = scroller.scrollTop;\n };\n\n /** The scroll position of a minute of a day, or of the day's start without a minute. */\n const topFor = (key: string, minute?: number) => {\n const section = sectionOf(key);\n if (!section) return null;\n const index = sections.indexOf(section);\n const body = section.querySelector<HTMLElement>(\"[data-calendar-body]\");\n if (minute === undefined || !body) return tops[index]!;\n const geometry = readDayGeometry(body, view.wake(), body.dataset.expanded === \"true\");\n return tops[index]! + body.offsetTop + dayY(geometry, minute);\n };\n\n // Gliding: arrows, Today, and Go to scroll smoothly; the stops and loading wait until the glide arrived.\n let glideTarget: number | null = null;\n let glideTimer = 0;\n const glide = (top: number) => {\n if (!scroller) return;\n const target = Math.round(Math.max(0, Math.min(top, scroller.scrollHeight - scroller.clientHeight)));\n glideTarget = target;\n window.clearTimeout(glideTimer);\n glideTimer = window.setTimeout(() => {\n glideTarget = null;\n }, 1600);\n // What the view keeps in place from now on is where the glide arrives, not where it started.\n const index = stopIndexAt(tops, target);\n const section = sections[index];\n if (section) anchor = { key: keysOf(section)[0]!, delta: target - tops[index]! };\n scroller.scrollTo({ top: target, behavior: reducedMotion() ? \"instant\" : \"smooth\" });\n };\n\n /** Puts a day on screen: now in the upper third today, else an hour before its first entry, else its start. */\n const positionAt = (key: string) => {\n if (!scroller) return;\n measure();\n if (key === view.nowKey()) {\n const top = topFor(key, view.nowMinute());\n // Now in the upper third, but never showing the end of the day before above the day's own heading.\n if (top !== null) scroller.scrollTop = Math.max(topFor(key) ?? 0, top - scroller.clientHeight / 3);\n lastScrollTop = scroller.scrollTop;\n return;\n }\n const model = view.dayOf(key);\n const first = Math.min(\n ...model.bands.map((band) => band.start),\n ...model.markers.map((marker) => marker.minute),\n Number.POSITIVE_INFINITY,\n );\n const start = topFor(key);\n if (start === null) return;\n const entry = Number.isFinite(first) && first > 120 ? topFor(key, first - 60) : null;\n scroller.scrollTop = entry === null ? start : Math.max(start, entry - 44);\n lastScrollTop = scroller.scrollTop;\n };\n\n // Input: the wheel brakes at day starts; a resting scroll glides onto a near one.\n let lastInput: \"wheel\" | \"touch\" | \"other\" = \"other\";\n let fingers = 0;\n let settling = false;\n let restTimer = 0;\n let frame = 0;\n let ready = false;\n let carry = 0;\n let lastWheel = 0;\n const settle = () => {\n if (!scroller || fingers > 0 || settling || glideTarget !== null || view.dragging()) return;\n const target = settleTarget(tops.slice(1), scroller.scrollTop, lastInput === \"touch\" ? SETTLE_RADIUS.touch : SETTLE_RADIUS.wheel);\n if (target === undefined) return;\n settling = true;\n scroller.scrollTo({ top: target, behavior: reducedMotion() ? \"instant\" : \"smooth\" });\n window.setTimeout(() => {\n settling = false;\n }, 450);\n };\n const onWheel = (event: WheelEvent) => {\n if (!scroller || event.ctrlKey || Math.abs(event.deltaX) > Math.abs(event.deltaY) || view.dragging()) return;\n const delta = wheelPixels(event.deltaY, event.deltaMode, scroller.clientHeight);\n const top = scroller.scrollTop;\n const max = scroller.scrollHeight - scroller.clientHeight;\n // At the ends the wheel asks for more days instead.\n if ((delta > 0 && top >= max - 1) || (delta < 0 && top <= 1)) {\n loadMore(delta > 0 ? \"later\" : \"earlier\");\n return;\n }\n if (event.timeStamp - lastWheel > GESTURE_GAP_MS) carry = 0;\n // A gesture that goes on takes over from a glide onto a day start; the view settles again once it rests.\n settling = false;\n lastWheel = event.timeStamp;\n const next = brakedScroll(tops, top + carry, delta);\n lastInput = \"wheel\";\n if (next === undefined) {\n carry = 0;\n return;\n }\n event.preventDefault();\n glideTarget = null;\n const bounded = Math.max(0, Math.min(max, next));\n scroller.scrollTop = bounded;\n // Steps too small for a pixel add up instead of vanishing.\n carry = bounded - scroller.scrollTop;\n };\n\n // Loading: each end asks once per range, and only after the view settled at its first position.\n let askedEarlier = \"\";\n let askedLater = \"\";\n const loadMore = (edge: \"earlier\" | \"later\") => {\n // Days that come in above move the view, so they wait for a glide to arrive; days below move nothing.\n if (!ready || view.dragging() || (edge === \"earlier\" && glideTarget !== null)) return;\n const { first, last } = view.range();\n if (edge === \"earlier\" && props.owner.onLoadEarlier && askedEarlier !== first) {\n askedEarlier = first;\n void props.owner.onLoadEarlier();\n }\n if (edge === \"later\" && props.owner.onLoadLater && askedLater !== last) {\n askedLater = last;\n void props.owner.onLoadLater();\n }\n };\n\n let reportTimer = 0;\n let reported = \"\";\n /** Tells the host the days the reader sees once they changed, after the scroll calmed down. */\n const reportVisible = () => {\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 const updateChrome = () => {\n if (!scroller) return;\n const top = scroller.scrollTop;\n const index = stopIndexAt(tops, top);\n const key = keysOf(sections[index])[0];\n if (key && key !== untrack(topKey)) setTopKey(key);\n reportVisible();\n for (const [position, section] of sections.entries()) {\n const head = section.firstElementChild as HTMLElement | null;\n if (!head) continue;\n const crossing = position > 0 ? stopCrossing(tops[position]!, top) : 0;\n if (crossing > 0) head.style.setProperty(\"--k2b-calendar-cross\", String(crossing));\n else if (head.style.getPropertyValue(\"--k2b-calendar-cross\")) head.style.removeProperty(\"--k2b-calendar-cross\");\n }\n setTodayPlace(placeOfToday());\n // Only the reader's own scrolling asks for more: days that came in above push the view down, and runs of empty\n // days are short, so asking whenever the view is near an end would load one empty week after the other.\n const direction = Math.sign(top - lastScrollTop);\n lastScrollTop = top;\n if (direction > 0 && top + scroller.clientHeight > scroller.scrollHeight - 2 * scroller.clientHeight) loadMore(\"later\");\n else if (direction < 0 && top < scroller.clientHeight) loadMore(\"earlier\");\n rememberAnchor();\n };\n const onScroll = () => {\n if (!scroller) return;\n if (glideTarget !== null && Math.abs(scroller.scrollTop - glideTarget) < 2) glideTarget = null;\n if (!frame)\n frame = requestAnimationFrame(() => {\n frame = 0;\n updateChrome();\n });\n window.clearTimeout(restTimer);\n restTimer = window.setTimeout(settle, lastInput === \"touch\" ? 90 : 160);\n };\n\n onMount(() => {\n setMounted(true);\n queueMicrotask(() => {\n positionAt(view.anchorKey());\n rememberAnchor();\n ready = true;\n updateChrome();\n });\n const observer =\n typeof ResizeObserver === \"undefined\"\n ? undefined\n : new ResizeObserver(() => {\n measure();\n // A glide owns the scroll until it arrives; putting the view back meanwhile would stop it.\n if (glideTarget === null) restoreAnchor();\n });\n if (track) observer?.observe(track);\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 // Before new days or an unfolded run change the page, note where the reader is from the page as it stands: the\n // place remembered in the last frame can be a scroll behind on a busy page. A computation runs before any render\n // effect touches the page.\n createComputed(\n on(\n () => [groupIds(), view.days()] as const,\n () => {\n if (!untrack(mounted)) return;\n measure();\n rememberAnchor();\n },\n { defer: true },\n ),\n );\n // New days above or below, a folded night, or an unfolded run: keep what the reader looks at in place.\n createEffect(\n on(\n () => [groupIds(), view.days()] as const,\n () => {\n if (!untrack(mounted)) return;\n measure();\n if (pendingTarget && loaded(pendingTarget)) {\n positionAt(pendingTarget);\n pendingTarget = null;\n rememberAnchor();\n } else restoreAnchor();\n updateChrome();\n },\n { defer: true },\n ),\n );\n // Another date from the host puts that day on screen.\n createEffect(\n on(\n view.anchorKey,\n (key) => {\n if (!untrack(mounted)) return;\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 updateChrome();\n });\n },\n { defer: true },\n ),\n );\n\n /** Whether today's day is above, below, or in the view. */\n const placeOfToday = (): \"up\" | \"down\" | \"\" => {\n const key = view.nowKey();\n if (!scroller) return \"\";\n const section = sectionOf(key);\n if (!section) return key < untrack(topKey) ? \"up\" : \"down\";\n const index = sections.indexOf(section);\n const top = scroller.scrollTop;\n if (tops[index]! + section.offsetHeight < top) return \"up\";\n if (tops[index]! > top + scroller.clientHeight) return \"down\";\n return \"\";\n };\n const visibleKeys = () => {\n const first = topKey();\n if (!scroller || sections.length === 0) return { first, last: first };\n const bottom = scroller.scrollTop + scroller.clientHeight;\n const index = stopIndexAt(tops, bottom - 1);\n const keysAtBottom = keysOf(sections[index]);\n return { first, last: keysAtBottom[keysAtBottom.length - 1] ?? first };\n };\n const loaded = (key: string) => key >= view.range().first && key <= view.range().last;\n const goTo = (key: string) => {\n if (!loaded(key) || !scroller) return false;\n // A day inside a run of empty days opens on its own, so the view goes to that day and not to the run.\n if (untrack(groups).some((group) => group.kind === \"empty\" && group.keys.includes(key))) unfold([key]);\n measure();\n const top = topFor(key);\n if (top === null) return false;\n glide(top);\n return true;\n };\n const handle: TimeViewHandle = {\n visibleKeys,\n step: (direction) => {\n if (!scroller) return false;\n measure();\n const top = scroller.scrollTop;\n const index = stopIndexAt(tops, top);\n const target = direction > 0 ? tops[index + 1] : top - tops[index]! > 8 ? tops[index] : tops[index - 1];\n if (target === undefined) return false;\n glide(target);\n return true;\n },\n goTo,\n today: () => {\n const key = view.nowKey();\n if (!loaded(key) || !scroller) return false;\n measure();\n const top = topFor(key, view.nowMinute());\n if (top === null) return false;\n glide(Math.max(topFor(key) ?? 0, top - scroller.clientHeight / 3));\n return true;\n },\n todayDirection: () => {\n const key = view.nowKey();\n const { first, last } = view.range();\n if (key < first) return \"up\";\n if (key > last) return \"down\";\n return todayPlace();\n },\n controller: {\n quickCreate: (create) => {\n const target = view.createTarget(visibleKeys());\n const body = scroller?.querySelector<HTMLElement>(`[data-calendar-body=\"${target.key}\"]`);\n view.openQuickCreate(\n target.key,\n target.start,\n target.end,\n anchorFor(target.key, target.start, target.end) ?? body ?? scroller!,\n create,\n );\n },\n createTarget: () => {\n const target = view.createTarget(visibleKeys());\n return view.rangeOfSelection(target);\n },\n dragIn: (event, item, onDrop) => view.dragIn(event, item, onDrop, scroller),\n },\n };\n /** The place of a slot on screen for the quick create, when it is in view. */\n const anchorFor = (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 const geometry = readDayGeometry(body, view.wake(), body.dataset.expanded === \"true\");\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 const left = rect.left + 56;\n const clampedTop = Math.max(bounds.top, top);\n return new DOMRect(left, clampedTop, Math.min(rect.right - left, 320), Math.max(8, Math.min(bottom, bounds.bottom) - clampedTop));\n };\n onMount(() => props.register(handle));\n onCleanup(() => props.register(null));\n\n /** Tab into the stream lands on the first stop on screen, not on the first loaded day weeks above. */\n let tabbedAt = -1e9;\n onMount(() => {\n const note = (event: KeyboardEvent) => {\n if (event.key === \"Tab\") {\n tabbedAt = performance.now();\n if (scroller) restingTop = scroller.scrollTop;\n }\n };\n window.addEventListener(\"keydown\", note, true);\n onCleanup(() => window.removeEventListener(\"keydown\", note, true));\n });\n let restingTop = 0;\n const onFocusIn = (event: FocusEvent) => {\n if (!scroller) return;\n const from = event.relatedTarget instanceof Node ? event.relatedTarget : null;\n if (performance.now() - tabbedAt > 400 || (from && scroller.contains(from))) {\n restingTop = scroller.scrollTop;\n return;\n }\n // Undo the scroll to the focused stop, which some engines make before this runs and some after; a stop on screen\n // keeps the focus.\n if (Math.abs(scroller.scrollTop - restingTop) >= 1) scroller.scrollTop = restingTop;\n const bounds = scroller.getBoundingClientRect();\n const visible = (element: Element) => {\n const rect = element.getBoundingClientRect();\n return rect.height > 0 && rect.top >= bounds.top - 1 && rect.bottom <= bounds.bottom + 1;\n };\n if (event.target instanceof Element && visible(event.target)) return;\n const stops = [...scroller.querySelectorAll<HTMLElement>(\"a[href],button:not([tabindex='-1'])\")].filter(visible);\n const back = Boolean(from && scroller.compareDocumentPosition(from) & Node.DOCUMENT_POSITION_FOLLOWING);\n (back ? stops[stops.length - 1] : stops[0])?.focus({ preventScroll: true });\n };\n\n return (\n <div class=\"k2b-calendar-days\" data-view=\"day\" data-dragging={view.dragging() || undefined}>\n <div\n ref={scroller}\n class=\"k2b-calendar-days__scroll k2b-detail-trail\"\n tabIndex={-1}\n aria-describedby={helpId}\n onScroll={onScroll}\n onWheel={onWheel}\n onTouchStart={(event) => {\n fingers = event.touches.length;\n lastInput = \"touch\";\n glideTarget = null;\n }}\n onTouchEnd={(event) => {\n fingers = event.touches.length;\n }}\n onTouchCancel={(event) => {\n fingers = event.touches.length;\n }}\n onFocusIn={onFocusIn}\n >\n <div ref={track} class=\"k2b-calendar-days__track\">\n <For each={groupIds()}>\n {(id) => {\n const group = () => groupsById().get(id);\n return (\n <Show when={group()}>\n {(current) =>\n current().kind === \"day\" ? (\n <DaySection view={view} dayKey={groupFirst(current())} hover={hover} setHover={setHover} scroller={() => scroller} />\n ) : (\n <EmptyRun view={view} keys={(current() as Extract<DayGroup, { kind: \"empty\" }>).keys} onUnfold={unfold} />\n )\n }\n </Show>\n );\n }}\n </For>\n <Show when={props.owner.onLoadLater}>\n <p class=\"k2b-calendar-days__more\">{view.messages().calendarMoreDays}</p>\n </Show>\n </div>\n </div>\n <p class=\"k2b-calendar-sr\" id={helpId}>\n {view.messages().calendarDayKeyboardHelp}\n </p>\n <TimeQuickCreate view={view} />\n </div>\n );\n};\n\nconst DaySection = (props: {\n view: TimeView;\n dayKey: string;\n hover: () => { key: string; minute: number } | null;\n setHover: (value: { key: string; minute: number } | null) => void;\n scroller: () => HTMLElement | undefined;\n}) => {\n const view = props.view;\n const model = createMemo(() => view.dayOf(props.dayKey));\n const expanded = () => view.nightOpen(props.dayKey, model());\n const headingId = createUniqueId();\n const badge = () => view.props.owner.dayBadges?.[props.dayKey];\n const today = () => props.dayKey === view.calendarToday();\n const selectedDay = () => {\n const current = view.selection();\n return Boolean(current && current.key === props.dayKey && current.start === undefined);\n };\n const soon = () => soonNote(view, props.dayKey);\n const wake = () => view.wake();\n const nowMinute = () => (props.dayKey === view.nowKey() ? view.nowMinute() : null);\n const bands = createMemo(() => dayBands(view, props.dayKey, expanded()));\n const gaps = createMemo(() => dayGaps(view, props.dayKey));\n const markers = () => model().markers.filter((marker) => marker.minute < (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 = () => (expanded() ? [] : foldedEntries(view, props.dayKey));\n const nightLabel = () =>\n view.messages().calendarNight({ from: shortDay(view, props.dayKey), to: shortDay(view, addDayKeys(props.dayKey, 1)) });\n const foldLabel = () =>\n view.messages().calendarNightHours({\n from: view.clock(wake()).slice(0, 2),\n to: view.clock(DAY_MINUTES).slice(0, 2),\n });\n\n // Gaps, bands, and markers in one time order, so Tab runs through the day as it reads. Unchanged rows keep their\n // elements and focus when the clock updates the gaps.\n const timeline = createMemo<\n Array<\n | { at: number; kind: \"gap\"; gap: ReturnType<typeof gaps>[number] }\n | { at: number; kind: \"band\"; band: ReturnType<typeof bands>[number] }\n | { at: number; kind: \"marker\"; marker: ReturnType<typeof markers>[number] }\n >\n >(\n (previous) =>\n [\n ...gaps().map(\n (gap) =>\n previous.find(\n (row) => row.kind === \"gap\" && row.gap.start === gap.start && row.gap.end === gap.end && row.gap.past === gap.past,\n ) ?? { at: gap.start, kind: \"gap\" as const, gap },\n ),\n ...bands().map(\n (band) =>\n previous.find((row) => row.kind === \"band\" && row.band === band) ?? {\n at: Math.max(0, band.start),\n kind: \"band\" as const,\n band,\n },\n ),\n ...markers().map(\n (marker) =>\n previous.find((row) => row.kind === \"marker\" && row.marker === marker) ?? {\n at: marker.minute,\n kind: \"marker\" as const,\n marker,\n },\n ),\n ].sort((left, right) => left.at - right.at),\n [],\n );\n\n const isEmptyTarget = (target: EventTarget | null) =>\n target instanceof Element &&\n !target.closest(\"a,button,[data-calendar-event],.k2b-calendar-band,.k2b-calendar-marker,.k2b-calendar-draft,.k2b-calendar-fold\");\n const minuteAt = (element: HTMLElement, clientY: number) => {\n const geometry = readDayGeometry(element, wake(), expanded());\n const rect = element.getBoundingClientRect();\n return Math.max(0, Math.min((expanded() ? DAY_MINUTES : wake()) - 15, dayMinuteAt(geometry, clientY - rect.top)));\n };\n let lastPointer = \"mouse\";\n\n return (\n <section\n class=\"k2b-calendar-days__day\"\n data-calendar-group=\"\"\n data-calendar-keys={props.dayKey}\n aria-labelledby={headingId}\n data-today={today() ? \"true\" : undefined}\n data-past={props.dayKey < view.nowKey() ? \"true\" : undefined}\n data-selected={selectedDay() ? \"true\" : undefined}\n >\n <header class=\"k2b-calendar-days__head\">\n <h2 class=\"k2b-calendar-days__title\" id={headingId}>\n <button\n type=\"button\"\n class=\"k2b-calendar-days__title-button\"\n aria-pressed={selectedDay() ? \"true\" : \"false\"}\n onClick={() => {\n view.setTouchDraft(null);\n view.setSelection(selectedDay() ? null : { key: props.dayKey });\n }}\n >\n <Show when={today()}>\n <span class=\"k2b-calendar-days__today\">{view.props.labels.today}</span>\n </Show>\n <span class=\"k2b-calendar-days__long\">{longDay(view, props.dayKey)}</span>\n <span class=\"k2b-calendar-days__short\">{shortDay(view, props.dayKey, true)}</span>\n </button>\n </h2>\n <span class=\"k2b-calendar-days__note\" data-cheer={view.cheered() === props.dayKey ? \"true\" : undefined}>\n <span class=\"k2b-calendar-days__soon\">\n <Show when={soon()}>\n <i class=\"ti ti-clock\" aria-hidden=\"true\" />\n <span>{soon()}</span>\n </Show>\n </span>\n {/* Screen readers hear it as an announcement; this only marks the moment. */}\n <span class=\"k2b-calendar-days__cheer\" aria-hidden=\"true\">\n <i class=\"ti ti-confetti\" aria-hidden=\"true\" />\n {view.messages().calendarAllDone}\n </span>\n </span>\n <Show when={badge()}>\n {(current) => (\n <span class=\"k2b-calendar-days__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 class=\"k2b-calendar-days__summary\">{daySummary(view, props.dayKey)}</span>\n </header>\n <Show when={model().spans.length > 0}>\n <div class=\"k2b-calendar-days__all-day\" role=\"group\" aria-label={view.messages().calendarAllDayAndDue}>\n <AllDayChips view={view} dayKey={props.dayKey} spans={model().spans} />\n </div>\n </Show>\n {/* biome-ignore lint/a11y/noStaticElementInteractions: free time is reached through its gap buttons; the pointer adds drawing and slots. */}\n <div\n ref={(element) => view.registerBody(props.dayKey, element, expanded)}\n class=\"k2b-calendar-days__body\"\n data-calendar-body={props.dayKey}\n data-expanded={expanded() ? \"true\" : \"false\"}\n style={{ height: termsCss(dayHeightTerms(wake(), expanded())) }}\n onPointerDown={(event) => {\n lastPointer = 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={() => {\n lastPointer = \"touch\";\n }}\n // Listening on the timeline itself, not through delegation, makes it a tap target on iOS.\n on:click={(event) => {\n if (!isEmptyTarget(event.target) || !view.canCreate()) return;\n const minute = Math.floor(minuteAt(event.currentTarget, event.clientY) / 30) * 30;\n const end = Math.min(minute + 60, expanded() ? DAY_MINUTES : wake());\n if (lastPointer === \"mouse\") {\n view.setTouchDraft(null);\n view.setSelection({ key: props.dayKey, start: minute, end });\n return;\n }\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) || 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, expanded() ? DAY_MINUTES : wake()), event.currentTarget);\n }}\n onPointerMove={(event) => {\n if (event.pointerType !== \"mouse\" || view.dragging() || !isEmptyTarget(event.target)) {\n if (props.hover()?.key === props.dayKey) props.setHover(null);\n return;\n }\n const minute = Math.floor(minuteAt(event.currentTarget, event.clientY) / 15) * 15;\n props.setHover({ key: props.dayKey, minute });\n }}\n onPointerLeave={() => {\n if (props.hover()?.key === props.dayKey) props.setHover(null);\n }}\n >\n <For each={Array.from({ length: wake() / 60 + 1 }, (_, index) => index * 60)}>\n {(minute) => (\n <>\n <span class=\"k2b-calendar-days__line\" style={{ top: termsCss(dayYTerms(wake(), expanded(), minute)) }} aria-hidden=\"true\" />\n <span\n class=\"k2b-calendar-days__hour\"\n data-near-now={isNearNow(view, props.dayKey, minute) ? \"true\" : undefined}\n style={{ top: termsCss(dayYTerms(wake(), expanded(), minute)) }}\n aria-hidden=\"true\"\n >\n {view.clock(minute)}\n </span>\n </>\n )}\n </For>\n <Show\n when={expanded()}\n fallback={\n <div class=\"k2b-calendar-fold\" style={{ top: `calc(${termsCss(dayYTerms(wake(), false, wake()))} + 3px)` }}>\n <button\n type=\"button\"\n class=\"k2b-calendar-fold__toggle\"\n aria-expanded=\"false\"\n aria-label={view.messages().calendarOpenNight}\n onClick={() => view.setNight(props.dayKey, true)}\n >\n <i class=\"ti ti-moon\" aria-hidden=\"true\" />\n <span>{foldLabel()}</span>\n <i class=\"ti ti-chevron-down\" aria-hidden=\"true\" />\n </button>\n <Show when={folded().length > 0}>\n <ul class=\"k2b-calendar-fold__chips\">\n <For each={folded()}>\n {(entry) => {\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} />\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 />\n </li>\n );\n }}\n </For>\n </ul>\n </Show>\n </div>\n }\n >\n <span\n class=\"k2b-calendar-night\"\n style={{ top: termsCss(dayYTerms(wake(), true, wake())), height: termsCss(dayHeightTermsNight(wake())) }}\n aria-hidden=\"true\"\n />\n <button\n type=\"button\"\n class=\"k2b-calendar-night__bar\"\n aria-expanded=\"true\"\n style={{ top: termsCss(dayYTerms(wake(), true, wake())) }}\n onClick={() => view.setNight(props.dayKey, false)}\n >\n <i class=\"ti ti-moon\" aria-hidden=\"true\" />\n <span>{nightLabel()}</span>\n <span class=\"k2b-calendar-night__action\">\n {view.messages().calendarFoldNight}\n <i class=\"ti ti-chevron-up\" aria-hidden=\"true\" />\n </span>\n </button>\n <For each={nightHours(wake())}>\n {(minute) => (\n <>\n <span\n class=\"k2b-calendar-days__line\"\n data-midnight={view.clock(minute) === \"00:00\" ? \"true\" : undefined}\n style={{ top: termsCss(dayYTerms(wake(), true, minute)) }}\n aria-hidden=\"true\"\n />\n <span\n class=\"k2b-calendar-days__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 <Show when={view.clock(minute) === \"00:00\"}>\n <span class=\"k2b-calendar-days__midnight\" style={{ top: termsCss(dayYTerms(wake(), true, minute)) }} aria-hidden=\"true\">\n {shortDay(view, addDayKeys(props.dayKey, 1), true)}\n </span>\n </Show>\n </>\n )}\n </For>\n </Show>\n <For each={timeline()}>\n {(entry) =>\n entry.kind === \"gap\" ? (\n <TimeGap view={view} gap={entry.gap} dayKey={props.dayKey} expanded={expanded()} aside={gapAside(model(), entry.gap)} />\n ) : entry.kind === \"band\" ? (\n <TimeBand\n view={view}\n band={entry.band}\n dayKey={props.dayKey}\n expanded={expanded()}\n showLocation\n hourPx={56}\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={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\n scroller={props.scroller}\n />\n )\n }\n </For>\n <TimeOverlays view={view} dayKey={props.dayKey} expanded={expanded()} />\n <Show when={props.hover()?.key === props.dayKey && props.hover()}>\n {(current) => (\n <span class=\"k2b-calendar-hover\" style={{ top: termsCss(dayYTerms(wake(), expanded(), current().minute)) }} aria-hidden=\"true\">\n {view.clock(current().minute)}\n </span>\n )}\n </Show>\n <Show when={nowMinute() !== null && nowMinute()! >= 0 && nowMinute()! < (expanded() ? DAY_MINUTES : wake())}>\n <div class=\"k2b-calendar-now\" style={{ top: termsCss(dayYTerms(wake(), expanded(), nowMinute()!)) }} aria-hidden=\"true\">\n <span class=\"k2b-calendar-now__time\">{view.clock(nowMinute()!)}</span>\n </div>\n </Show>\n </div>\n </section>\n );\n};\n\nconst dayHeightTermsNight = (wake: number) => {\n const total = dayHeightTerms(wake, true);\n return [0, total[1], total[2], 0] as const;\n};\n\nconst EmptyRun = (props: { view: TimeView; keys: string[]; onUnfold: (keys: readonly string[]) => void }) => {\n const view = props.view;\n const headingId = createUniqueId();\n const first = () => props.keys[0]!;\n const last = () => props.keys[props.keys.length - 1]!;\n const title = () => (props.keys.length === 1 ? longDay(view, first()) : `${shortDay(view, first())} – ${shortDay(view, last(), true)}`);\n return (\n <section\n class=\"k2b-calendar-days__day\"\n data-calendar-group=\"\"\n data-calendar-keys={props.keys.join(\",\")}\n data-empty=\"true\"\n data-past={last() < view.nowKey() ? \"true\" : undefined}\n aria-labelledby={headingId}\n >\n <header class=\"k2b-calendar-days__head\">\n <h2 class=\"k2b-calendar-days__title\" id={headingId}>\n <span class=\"k2b-calendar-days__run\">{title()}</span>\n </h2>\n <span class=\"k2b-calendar-days__note\" />\n <For each={props.keys.filter((key) => view.props.owner.dayBadges?.[key])}>\n {(key) => {\n const badge = view.props.owner.dayBadges![key]!;\n return (\n <span class=\"k2b-calendar-days__badge\" data-run=\"true\">\n <Show when={props.keys.length > 1}>\n <span class=\"k2b-calendar-days__badge-day\">{shortDay(view, key).split(/[\\s,.]/)[0]}</span>\n </Show>\n <Show when={badge.icon}>{(icon) => <i class={`ti ti-${icon()}`} aria-hidden=\"true\" />}</Show>\n {badge.label}\n </span>\n );\n }}\n </For>\n <span class=\"k2b-calendar-days__summary\">\n {props.keys.length > 1 ? view.messages().calendarDayCount({ count: props.keys.length }) : \"\"}\n </span>\n </header>\n <button type=\"button\" class=\"k2b-calendar-days__empty\" data-calendar-unfold=\"\" onClick={() => props.onUnfold(props.keys)}>\n <span>{view.messages().calendarNothingPlannedShort}</span>\n <span class=\"k2b-calendar-days__empty-action\">\n <i class=\"ti ti-arrows-vertical\" aria-hidden=\"true\" />\n {view.messages().calendarUnfoldDays({ count: props.keys.length })}\n </span>\n </button>\n </section>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/CalendarDayView.tsx"],"sourcesContent":["import {\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 { prefersReducedMotion } from \"../motion\";\nimport { brakedScroll, GESTURE_GAP_MS, SETTLE_RADIUS, settleTarget, stopCrossing, stopIndexAt, wheelPixels } from \"./calendar-day-scroll\";\nimport {\n addDayKeys,\n DAY_MINUTES,\n type DayGroup,\n dayGroups,\n dayHeightTerms,\n dayKeyRange,\n dayMinuteAt,\n dayY,\n dayYTerms,\n markerLanes,\n readDayGeometry,\n termsCss,\n} from \"./calendar-days\";\nimport { EventChip, eventHref } from \"./calendar-shared\";\nimport {\n AllDayChips,\n createTimeView,\n dayBands,\n dayGaps,\n daySummary,\n eventAccent,\n foldedEntries,\n gapAside,\n isNearNow,\n longDay,\n markerAbove,\n nightHours,\n shortDay,\n soonNote,\n TimeBand,\n TimeCheck,\n TimeGap,\n TimeMarker,\n TimeOverlays,\n TimeQuickCreate,\n type TimeView,\n type TimeViewHandle,\n type TimeViewProps,\n} from \"./calendar-time-view\";\n\nconst groupFirst = (group: DayGroup) => (group.kind === \"day\" ? group.key : group.keys[0]!);\n\n/**\n * The day view with `dayHours`: the loaded days one below the other in a single scroll, each with its heading kept on\n * top while it is in view. Runs of empty days fold into one row. The view slows down and settles at each day start,\n * and a line at the top of the heading fills while a day start passes.\n */\nexport const CalendarDayView = (props: TimeViewProps) => {\n const view = createTimeView(props);\n const [mounted, setMounted] = createSignal(false);\n const [unfolded, setUnfolded] = createSignal<ReadonlySet<string>>(new Set());\n const [topKey, setTopKey] = createSignal(untrack(view.anchorKey));\n const [hover, setHover] = createSignal<{ key: string; minute: number } | null>(null);\n /** Where today's day lies from the view, kept current while scrolling for the Today button's arrow. */\n const [todayPlace, setTodayPlace] = createSignal<\"up\" | \"down\" | \"\">(\"\");\n let scroller: HTMLDivElement | undefined;\n let track: HTMLDivElement | undefined;\n const helpId = createUniqueId();\n\n // The server and the first render start at the shown day, so the page never flashes the days before it; once\n // mounted the earlier days join above it without moving the view.\n const keys = createMemo(() => {\n const { first, last } = view.range();\n const anchor = view.anchorKey();\n const from = mounted() || anchor < first || anchor > last ? first : anchor;\n return dayKeyRange(from, last);\n });\n // Today and the day the reader opened never fold, so a day opened from the month shows its hours to create in.\n const groups = createMemo(() =>\n dayGroups(keys(), (key) => view.dayOf(key).empty, new Set([view.nowKey(), view.anchorKey(), ...unfolded()])),\n );\n const unfold = (keys: readonly string[]) => setUnfolded((value) => new Set([...value, ...keys]));\n let runs = 0;\n // Keep a run's identity so focus on its button survives days joining it at either end.\n const entries = createMemo<Array<{ id: string; group: DayGroup }>>((previous) => {\n const taken = new Set<string>();\n return groups().map((group) => {\n if (group.kind === \"day\") return { id: `d:${group.key}`, group };\n const continued = previous.find(\n ({ id, group: old }) => old.kind === \"empty\" && !taken.has(id) && old.keys.some((key) => group.keys.includes(key)),\n );\n const id = continued?.id ?? `e:${++runs}`;\n taken.add(id);\n return { id, group };\n });\n }, []);\n const groupIds = createMemo(() => entries().map(({ id }) => id));\n const groupsById = createMemo(() => new Map(entries().map(({ id, group }) => [id, group])));\n\n // Where each group starts in the scroll, measured after every change of the groups and on resize.\n let sections: HTMLElement[] = [];\n let tops: number[] = [];\n const measure = () => {\n if (!track) return;\n sections = [...track.querySelectorAll<HTMLElement>(\":scope > [data-calendar-group]\")];\n tops = sections.map((section) => section.offsetTop);\n };\n const keysOf = (section: HTMLElement | undefined) => (section?.dataset.calendarKeys ?? \"\").split(\",\").filter(Boolean);\n const sectionOf = (key: string) => sections.find((section) => keysOf(section).includes(key));\n\n /** The group at the top of the view and how far into it the view is, kept across changes above it. */\n let anchor: { key: string; delta: 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 /** The last scroll position the view read, to tell the reader's direction. */\n let lastScrollTop = 0;\n const rememberAnchor = () => {\n if (!scroller || sections.length === 0) return;\n const index = stopIndexAt(tops, scroller.scrollTop);\n const section = sections[index];\n if (section) anchor = { key: keysOf(section)[0]!, delta: scroller.scrollTop - tops[index]! };\n };\n const restoreAnchor = () => {\n if (!scroller || !anchor) return;\n const saved = anchor;\n let index = sections.findIndex((section) => keysOf(section).includes(saved.key));\n if (index < 0) index = sections.findIndex((section) => keysOf(section)[0]! >= saved.key);\n if (index < 0) return;\n const top = tops[index]! + Math.min(saved.delta, sections[index]!.offsetHeight - 1);\n if (Math.abs(scroller.scrollTop - top) > 0.5) scroller.scrollTop = top;\n lastScrollTop = scroller.scrollTop;\n };\n\n /** The scroll position of a minute of a day, or of the day's start without a minute. */\n const topFor = (key: string, minute?: number) => {\n const section = sectionOf(key);\n if (!section) return null;\n const index = sections.indexOf(section);\n const body = section.querySelector<HTMLElement>(\"[data-calendar-body]\");\n if (minute === undefined || !body) return tops[index]!;\n const geometry = readDayGeometry(body, view.wake(), body.dataset.expanded === \"true\");\n return tops[index]! + body.offsetTop + dayY(geometry, minute);\n };\n\n // Gliding: arrows, Today, and Go to scroll smoothly; the stops and loading wait until the glide arrived.\n let glideTarget: number | null = null;\n let glideTimer = 0;\n const glide = (top: number) => {\n if (!scroller) return;\n const target = Math.round(Math.max(0, Math.min(top, scroller.scrollHeight - scroller.clientHeight)));\n glideTarget = target;\n window.clearTimeout(glideTimer);\n glideTimer = window.setTimeout(() => {\n glideTarget = null;\n }, 1600);\n // What the view keeps in place from now on is where the glide arrives, not where it started.\n const index = stopIndexAt(tops, target);\n const section = sections[index];\n if (section) anchor = { key: keysOf(section)[0]!, delta: target - tops[index]! };\n scroller.scrollTo({ top: target, behavior: prefersReducedMotion() ? \"instant\" : \"smooth\" });\n };\n\n /** Puts a day on screen: now in the upper third today, else an hour before its first entry, else its start. */\n const positionAt = (key: string) => {\n if (!scroller) return;\n measure();\n if (key === view.nowKey()) {\n const top = topFor(key, view.nowMinute());\n // Now in the upper third, but never showing the end of the day before above the day's own heading.\n if (top !== null) scroller.scrollTop = Math.max(topFor(key) ?? 0, top - scroller.clientHeight / 3);\n lastScrollTop = scroller.scrollTop;\n return;\n }\n const model = view.dayOf(key);\n const first = Math.min(\n ...model.bands.map((band) => band.start),\n ...model.markers.map((marker) => marker.minute),\n Number.POSITIVE_INFINITY,\n );\n const start = topFor(key);\n if (start === null) return;\n const entry = Number.isFinite(first) && first > 120 ? topFor(key, first - 60) : null;\n scroller.scrollTop = entry === null ? start : Math.max(start, entry - 44);\n lastScrollTop = scroller.scrollTop;\n };\n\n // Input: the wheel brakes at day starts; a resting scroll glides onto a near one.\n let lastInput: \"wheel\" | \"touch\" | \"other\" = \"other\";\n let fingers = 0;\n let settling = false;\n let restTimer = 0;\n let frame = 0;\n let ready = false;\n let carry = 0;\n let lastWheel = 0;\n const settle = () => {\n if (!scroller || fingers > 0 || settling || glideTarget !== null || view.dragging()) return;\n const target = settleTarget(tops.slice(1), scroller.scrollTop, lastInput === \"touch\" ? SETTLE_RADIUS.touch : SETTLE_RADIUS.wheel);\n if (target === undefined) return;\n settling = true;\n scroller.scrollTo({ top: target, behavior: prefersReducedMotion() ? \"instant\" : \"smooth\" });\n window.setTimeout(() => {\n settling = false;\n }, 450);\n };\n const onWheel = (event: WheelEvent) => {\n if (!scroller || event.ctrlKey || Math.abs(event.deltaX) > Math.abs(event.deltaY) || view.dragging()) return;\n const delta = wheelPixels(event.deltaY, event.deltaMode, scroller.clientHeight);\n const top = scroller.scrollTop;\n const max = scroller.scrollHeight - scroller.clientHeight;\n // At the ends the wheel asks for more days instead.\n if ((delta > 0 && top >= max - 1) || (delta < 0 && top <= 1)) {\n loadMore(delta > 0 ? \"later\" : \"earlier\");\n return;\n }\n if (event.timeStamp - lastWheel > GESTURE_GAP_MS) carry = 0;\n // A gesture that goes on takes over from a glide onto a day start; the view settles again once it rests.\n settling = false;\n lastWheel = event.timeStamp;\n const next = brakedScroll(tops, top + carry, delta);\n lastInput = \"wheel\";\n if (next === undefined) {\n carry = 0;\n return;\n }\n event.preventDefault();\n glideTarget = null;\n const bounded = Math.max(0, Math.min(max, next));\n scroller.scrollTop = bounded;\n // Steps too small for a pixel add up instead of vanishing.\n carry = bounded - scroller.scrollTop;\n };\n\n // Loading: each end asks once per range, and only after the view settled at its first position.\n let askedEarlier = \"\";\n let askedLater = \"\";\n const loadMore = (edge: \"earlier\" | \"later\") => {\n // Days that come in above move the view, so they wait for a glide to arrive; days below move nothing.\n if (!ready || view.dragging() || (edge === \"earlier\" && glideTarget !== null)) return;\n const { first, last } = view.range();\n if (edge === \"earlier\" && props.owner.onLoadEarlier && askedEarlier !== first) {\n askedEarlier = first;\n void props.owner.onLoadEarlier();\n }\n if (edge === \"later\" && props.owner.onLoadLater && askedLater !== last) {\n askedLater = last;\n void props.owner.onLoadLater();\n }\n };\n\n let reportTimer = 0;\n let reported = \"\";\n /** Tells the host the days the reader sees once they changed, after the scroll calmed down. */\n const reportVisible = () => {\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 const updateChrome = () => {\n if (!scroller) return;\n const top = scroller.scrollTop;\n const index = stopIndexAt(tops, top);\n const key = keysOf(sections[index])[0];\n if (key && key !== untrack(topKey)) setTopKey(key);\n reportVisible();\n for (const [position, section] of sections.entries()) {\n const head = section.firstElementChild as HTMLElement | null;\n if (!head) continue;\n const crossing = position > 0 ? stopCrossing(tops[position]!, top) : 0;\n if (crossing > 0) head.style.setProperty(\"--k2b-calendar-cross\", String(crossing));\n else if (head.style.getPropertyValue(\"--k2b-calendar-cross\")) head.style.removeProperty(\"--k2b-calendar-cross\");\n }\n setTodayPlace(placeOfToday());\n // Only the reader's own scrolling asks for more: days that came in above push the view down, and runs of empty\n // days are short, so asking whenever the view is near an end would load one empty week after the other.\n const direction = Math.sign(top - lastScrollTop);\n lastScrollTop = top;\n if (direction > 0 && top + scroller.clientHeight > scroller.scrollHeight - 2 * scroller.clientHeight) loadMore(\"later\");\n else if (direction < 0 && top < scroller.clientHeight) loadMore(\"earlier\");\n rememberAnchor();\n };\n const onScroll = () => {\n if (!scroller) return;\n if (glideTarget !== null && Math.abs(scroller.scrollTop - glideTarget) < 2) glideTarget = null;\n if (!frame)\n frame = requestAnimationFrame(() => {\n frame = 0;\n updateChrome();\n });\n window.clearTimeout(restTimer);\n restTimer = window.setTimeout(settle, lastInput === \"touch\" ? 90 : 160);\n };\n\n onMount(() => {\n setMounted(true);\n queueMicrotask(() => {\n positionAt(view.anchorKey());\n rememberAnchor();\n ready = true;\n updateChrome();\n });\n const observer =\n typeof ResizeObserver === \"undefined\"\n ? undefined\n : new ResizeObserver(() => {\n measure();\n // A glide owns the scroll until it arrives; putting the view back meanwhile would stop it.\n if (glideTarget === null) restoreAnchor();\n });\n if (track) observer?.observe(track);\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 // Before new days or an unfolded run change the page, note where the reader is from the page as it stands: the\n // place remembered in the last frame can be a scroll behind on a busy page. A computation runs before any render\n // effect touches the page.\n createComputed(\n on(\n () => [groupIds(), view.days()] as const,\n () => {\n if (!untrack(mounted)) return;\n measure();\n rememberAnchor();\n },\n { defer: true },\n ),\n );\n // New days above or below, a folded night, or an unfolded run: keep what the reader looks at in place.\n createEffect(\n on(\n () => [groupIds(), view.days()] as const,\n () => {\n if (!untrack(mounted)) return;\n measure();\n if (pendingTarget && loaded(pendingTarget)) {\n positionAt(pendingTarget);\n pendingTarget = null;\n rememberAnchor();\n } else restoreAnchor();\n updateChrome();\n },\n { defer: true },\n ),\n );\n // Another date from the host puts that day on screen.\n createEffect(\n on(\n view.anchorKey,\n (key) => {\n if (!untrack(mounted)) return;\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 updateChrome();\n });\n },\n { defer: true },\n ),\n );\n\n /** Whether today's day is above, below, or in the view. */\n const placeOfToday = (): \"up\" | \"down\" | \"\" => {\n const key = view.nowKey();\n if (!scroller) return \"\";\n const section = sectionOf(key);\n if (!section) return key < untrack(topKey) ? \"up\" : \"down\";\n const index = sections.indexOf(section);\n const top = scroller.scrollTop;\n if (tops[index]! + section.offsetHeight < top) return \"up\";\n if (tops[index]! > top + scroller.clientHeight) return \"down\";\n return \"\";\n };\n const visibleKeys = () => {\n const first = topKey();\n if (!scroller || sections.length === 0) return { first, last: first };\n const bottom = scroller.scrollTop + scroller.clientHeight;\n const index = stopIndexAt(tops, bottom - 1);\n const keysAtBottom = keysOf(sections[index]);\n return { first, last: keysAtBottom[keysAtBottom.length - 1] ?? first };\n };\n const loaded = (key: string) => key >= view.range().first && key <= view.range().last;\n const goTo = (key: string) => {\n if (!loaded(key) || !scroller) return false;\n // A day inside a run of empty days opens on its own, so the view goes to that day and not to the run.\n if (untrack(groups).some((group) => group.kind === \"empty\" && group.keys.includes(key))) unfold([key]);\n measure();\n const top = topFor(key);\n if (top === null) return false;\n glide(top);\n return true;\n };\n const handle: TimeViewHandle = {\n visibleKeys,\n step: (direction) => {\n if (!scroller) return false;\n measure();\n const top = scroller.scrollTop;\n const index = stopIndexAt(tops, top);\n const target = direction > 0 ? tops[index + 1] : top - tops[index]! > 8 ? tops[index] : tops[index - 1];\n if (target === undefined) return false;\n glide(target);\n return true;\n },\n goTo,\n today: () => {\n const key = view.nowKey();\n if (!loaded(key) || !scroller) return false;\n measure();\n const top = topFor(key, view.nowMinute());\n if (top === null) return false;\n glide(Math.max(topFor(key) ?? 0, top - scroller.clientHeight / 3));\n return true;\n },\n todayDirection: () => {\n const key = view.nowKey();\n const { first, last } = view.range();\n if (key < first) return \"up\";\n if (key > last) return \"down\";\n return todayPlace();\n },\n controller: {\n quickCreate: (create) => {\n const target = view.createTarget(visibleKeys());\n const body = scroller?.querySelector<HTMLElement>(`[data-calendar-body=\"${target.key}\"]`);\n view.openQuickCreate(\n target.key,\n target.start,\n target.end,\n anchorFor(target.key, target.start, target.end) ?? body ?? scroller!,\n create,\n );\n },\n createTarget: () => {\n const target = view.createTarget(visibleKeys());\n return view.rangeOfSelection(target);\n },\n dragIn: (event, item, onDrop) => view.dragIn(event, item, onDrop, scroller),\n },\n };\n /** The place of a slot on screen for the quick create, when it is in view. */\n const anchorFor = (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 const geometry = readDayGeometry(body, view.wake(), body.dataset.expanded === \"true\");\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 const left = rect.left + 56;\n const clampedTop = Math.max(bounds.top, top);\n return new DOMRect(left, clampedTop, Math.min(rect.right - left, 320), Math.max(8, Math.min(bottom, bounds.bottom) - clampedTop));\n };\n onMount(() => props.register(handle));\n onCleanup(() => props.register(null));\n\n /** Tab into the stream lands on the first stop on screen, not on the first loaded day weeks above. */\n let tabbedAt = -1e9;\n onMount(() => {\n const note = (event: KeyboardEvent) => {\n if (event.key === \"Tab\") {\n tabbedAt = performance.now();\n if (scroller) restingTop = scroller.scrollTop;\n }\n };\n window.addEventListener(\"keydown\", note, true);\n onCleanup(() => window.removeEventListener(\"keydown\", note, true));\n });\n let restingTop = 0;\n const onFocusIn = (event: FocusEvent) => {\n if (!scroller) return;\n const from = event.relatedTarget instanceof Node ? event.relatedTarget : null;\n if (performance.now() - tabbedAt > 400 || (from && scroller.contains(from))) {\n restingTop = scroller.scrollTop;\n return;\n }\n // Undo the scroll to the focused stop, which some engines make before this runs and some after; a stop on screen\n // keeps the focus.\n if (Math.abs(scroller.scrollTop - restingTop) >= 1) scroller.scrollTop = restingTop;\n const bounds = scroller.getBoundingClientRect();\n const visible = (element: Element) => {\n const rect = element.getBoundingClientRect();\n return rect.height > 0 && rect.top >= bounds.top - 1 && rect.bottom <= bounds.bottom + 1;\n };\n if (event.target instanceof Element && visible(event.target)) return;\n const stops = [...scroller.querySelectorAll<HTMLElement>(\"a[href],button:not([tabindex='-1'])\")].filter(visible);\n const back = Boolean(from && scroller.compareDocumentPosition(from) & Node.DOCUMENT_POSITION_FOLLOWING);\n (back ? stops[stops.length - 1] : stops[0])?.focus({ preventScroll: true });\n };\n\n return (\n <div class=\"k2b-calendar-days\" data-view=\"day\" data-dragging={view.dragging() || undefined}>\n <div\n ref={scroller}\n class=\"k2b-calendar-days__scroll k2b-detail-trail\"\n tabIndex={-1}\n aria-describedby={helpId}\n onScroll={onScroll}\n onWheel={onWheel}\n onTouchStart={(event) => {\n fingers = event.touches.length;\n lastInput = \"touch\";\n glideTarget = null;\n }}\n onTouchEnd={(event) => {\n fingers = event.touches.length;\n }}\n onTouchCancel={(event) => {\n fingers = event.touches.length;\n }}\n onFocusIn={onFocusIn}\n >\n <div ref={track} class=\"k2b-calendar-days__track\">\n <For each={groupIds()}>\n {(id) => {\n const group = () => groupsById().get(id);\n return (\n <Show when={group()}>\n {(current) =>\n current().kind === \"day\" ? (\n <DaySection view={view} dayKey={groupFirst(current())} hover={hover} setHover={setHover} scroller={() => scroller} />\n ) : (\n <EmptyRun view={view} keys={(current() as Extract<DayGroup, { kind: \"empty\" }>).keys} onUnfold={unfold} />\n )\n }\n </Show>\n );\n }}\n </For>\n <Show when={props.owner.onLoadLater}>\n <p class=\"k2b-calendar-days__more\">{view.messages().calendarMoreDays}</p>\n </Show>\n </div>\n </div>\n <p class=\"k2b-calendar-sr\" id={helpId}>\n {view.messages().calendarDayKeyboardHelp}\n </p>\n <TimeQuickCreate view={view} />\n </div>\n );\n};\n\nconst DaySection = (props: {\n view: TimeView;\n dayKey: string;\n hover: () => { key: string; minute: number } | null;\n setHover: (value: { key: string; minute: number } | null) => void;\n scroller: () => HTMLElement | undefined;\n}) => {\n const view = props.view;\n const model = createMemo(() => view.dayOf(props.dayKey));\n const expanded = () => view.nightOpen(props.dayKey, model());\n const headingId = createUniqueId();\n const badge = () => view.props.owner.dayBadges?.[props.dayKey];\n const today = () => props.dayKey === view.calendarToday();\n const selectedDay = () => {\n const current = view.selection();\n return Boolean(current && current.key === props.dayKey && current.start === undefined);\n };\n const soon = () => soonNote(view, props.dayKey);\n const wake = () => view.wake();\n const nowMinute = () => (props.dayKey === view.nowKey() ? view.nowMinute() : null);\n const bands = createMemo(() => dayBands(view, props.dayKey, expanded()));\n const gaps = createMemo(() => dayGaps(view, props.dayKey));\n const markers = () => model().markers.filter((marker) => marker.minute < (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 = () => (expanded() ? [] : foldedEntries(view, props.dayKey));\n const nightLabel = () =>\n view.messages().calendarNight({ from: shortDay(view, props.dayKey), to: shortDay(view, addDayKeys(props.dayKey, 1)) });\n const foldLabel = () =>\n view.messages().calendarNightHours({\n from: view.clock(wake()).slice(0, 2),\n to: view.clock(DAY_MINUTES).slice(0, 2),\n });\n\n // Gaps, bands, and markers in one time order, so Tab runs through the day as it reads. Unchanged rows keep their\n // elements and focus when the clock updates the gaps.\n const timeline = createMemo<\n Array<\n | { at: number; kind: \"gap\"; gap: ReturnType<typeof gaps>[number] }\n | { at: number; kind: \"band\"; band: ReturnType<typeof bands>[number] }\n | { at: number; kind: \"marker\"; marker: ReturnType<typeof markers>[number] }\n >\n >(\n (previous) =>\n [\n ...gaps().map(\n (gap) =>\n previous.find(\n (row) => row.kind === \"gap\" && row.gap.start === gap.start && row.gap.end === gap.end && row.gap.past === gap.past,\n ) ?? { at: gap.start, kind: \"gap\" as const, gap },\n ),\n ...bands().map(\n (band) =>\n previous.find((row) => row.kind === \"band\" && row.band === band) ?? {\n at: Math.max(0, band.start),\n kind: \"band\" as const,\n band,\n },\n ),\n ...markers().map(\n (marker) =>\n previous.find((row) => row.kind === \"marker\" && row.marker === marker) ?? {\n at: marker.minute,\n kind: \"marker\" as const,\n marker,\n },\n ),\n ].sort((left, right) => left.at - right.at),\n [],\n );\n\n const isEmptyTarget = (target: EventTarget | null) =>\n target instanceof Element &&\n !target.closest(\"a,button,[data-calendar-event],.k2b-calendar-band,.k2b-calendar-marker,.k2b-calendar-draft,.k2b-calendar-fold\");\n const minuteAt = (element: HTMLElement, clientY: number) => {\n const geometry = readDayGeometry(element, wake(), expanded());\n const rect = element.getBoundingClientRect();\n return Math.max(0, Math.min((expanded() ? DAY_MINUTES : wake()) - 15, dayMinuteAt(geometry, clientY - rect.top)));\n };\n let lastPointer = \"mouse\";\n\n return (\n <section\n class=\"k2b-calendar-days__day\"\n data-calendar-group=\"\"\n data-calendar-keys={props.dayKey}\n aria-labelledby={headingId}\n data-today={today() ? \"true\" : undefined}\n data-past={props.dayKey < view.nowKey() ? \"true\" : undefined}\n data-selected={selectedDay() ? \"true\" : undefined}\n >\n <header class=\"k2b-calendar-days__head\">\n <h2 class=\"k2b-calendar-days__title\" id={headingId}>\n <button\n type=\"button\"\n class=\"k2b-calendar-days__title-button\"\n aria-pressed={selectedDay() ? \"true\" : \"false\"}\n onClick={() => {\n view.setTouchDraft(null);\n view.setSelection(selectedDay() ? null : { key: props.dayKey });\n }}\n >\n <Show when={today()}>\n <span class=\"k2b-calendar-days__today\">{view.props.labels.today}</span>\n </Show>\n <span class=\"k2b-calendar-days__long\">{longDay(view, props.dayKey)}</span>\n <span class=\"k2b-calendar-days__short\">{shortDay(view, props.dayKey, true)}</span>\n </button>\n </h2>\n <span class=\"k2b-calendar-days__note\" data-cheer={view.cheered() === props.dayKey ? \"true\" : undefined}>\n <span class=\"k2b-calendar-days__soon\">\n <Show when={soon()}>\n <i class=\"ti ti-clock\" aria-hidden=\"true\" />\n <span>{soon()}</span>\n </Show>\n </span>\n {/* Screen readers hear it as an announcement; this only marks the moment. */}\n <span class=\"k2b-calendar-days__cheer\" aria-hidden=\"true\">\n <i class=\"ti ti-confetti\" aria-hidden=\"true\" />\n {view.messages().calendarAllDone}\n </span>\n </span>\n <Show when={badge()}>\n {(current) => (\n <span class=\"k2b-calendar-days__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 class=\"k2b-calendar-days__summary\">{daySummary(view, props.dayKey)}</span>\n </header>\n <Show when={model().spans.length > 0}>\n <div class=\"k2b-calendar-days__all-day\" role=\"group\" aria-label={view.messages().calendarAllDayAndDue}>\n <AllDayChips view={view} dayKey={props.dayKey} spans={model().spans} />\n </div>\n </Show>\n {/* biome-ignore lint/a11y/noStaticElementInteractions: free time is reached through its gap buttons; the pointer adds drawing and slots. */}\n <div\n ref={(element) => view.registerBody(props.dayKey, element, expanded)}\n class=\"k2b-calendar-days__body\"\n data-calendar-body={props.dayKey}\n data-expanded={expanded() ? \"true\" : \"false\"}\n style={{ height: termsCss(dayHeightTerms(wake(), expanded())) }}\n onPointerDown={(event) => {\n lastPointer = 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={() => {\n lastPointer = \"touch\";\n }}\n // Listening on the timeline itself, not through delegation, makes it a tap target on iOS.\n on:click={(event) => {\n if (!isEmptyTarget(event.target) || !view.canCreate()) return;\n const minute = Math.floor(minuteAt(event.currentTarget, event.clientY) / 30) * 30;\n const end = Math.min(minute + 60, expanded() ? DAY_MINUTES : wake());\n if (lastPointer === \"mouse\") {\n view.setTouchDraft(null);\n view.setSelection({ key: props.dayKey, start: minute, end });\n return;\n }\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) || 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, expanded() ? DAY_MINUTES : wake()), event.currentTarget);\n }}\n onPointerMove={(event) => {\n if (event.pointerType !== \"mouse\" || view.dragging() || !isEmptyTarget(event.target)) {\n if (props.hover()?.key === props.dayKey) props.setHover(null);\n return;\n }\n const minute = Math.floor(minuteAt(event.currentTarget, event.clientY) / 15) * 15;\n props.setHover({ key: props.dayKey, minute });\n }}\n onPointerLeave={() => {\n if (props.hover()?.key === props.dayKey) props.setHover(null);\n }}\n >\n <For each={Array.from({ length: wake() / 60 + 1 }, (_, index) => index * 60)}>\n {(minute) => (\n <>\n <span class=\"k2b-calendar-days__line\" style={{ top: termsCss(dayYTerms(wake(), expanded(), minute)) }} aria-hidden=\"true\" />\n <span\n class=\"k2b-calendar-days__hour\"\n data-near-now={isNearNow(view, props.dayKey, minute) ? \"true\" : undefined}\n style={{ top: termsCss(dayYTerms(wake(), expanded(), minute)) }}\n aria-hidden=\"true\"\n >\n {view.clock(minute)}\n </span>\n </>\n )}\n </For>\n <Show\n when={expanded()}\n fallback={\n <div class=\"k2b-calendar-fold\" style={{ top: `calc(${termsCss(dayYTerms(wake(), false, wake()))} + 3px)` }}>\n <button\n type=\"button\"\n class=\"k2b-calendar-fold__toggle\"\n aria-expanded=\"false\"\n aria-label={view.messages().calendarOpenNight}\n onClick={() => view.setNight(props.dayKey, true)}\n >\n <i class=\"ti ti-moon\" aria-hidden=\"true\" />\n <span>{foldLabel()}</span>\n <i class=\"ti ti-chevron-down\" aria-hidden=\"true\" />\n </button>\n <Show when={folded().length > 0}>\n <ul class=\"k2b-calendar-fold__chips\">\n <For each={folded()}>\n {(entry) => {\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} />\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 />\n </li>\n );\n }}\n </For>\n </ul>\n </Show>\n </div>\n }\n >\n <span\n class=\"k2b-calendar-night\"\n style={{ top: termsCss(dayYTerms(wake(), true, wake())), height: termsCss(dayHeightTermsNight(wake())) }}\n aria-hidden=\"true\"\n />\n <button\n type=\"button\"\n class=\"k2b-calendar-night__bar\"\n aria-expanded=\"true\"\n style={{ top: termsCss(dayYTerms(wake(), true, wake())) }}\n onClick={() => view.setNight(props.dayKey, false)}\n >\n <i class=\"ti ti-moon\" aria-hidden=\"true\" />\n <span>{nightLabel()}</span>\n <span class=\"k2b-calendar-night__action\">\n {view.messages().calendarFoldNight}\n <i class=\"ti ti-chevron-up\" aria-hidden=\"true\" />\n </span>\n </button>\n <For each={nightHours(wake())}>\n {(minute) => (\n <>\n <span\n class=\"k2b-calendar-days__line\"\n data-midnight={view.clock(minute) === \"00:00\" ? \"true\" : undefined}\n style={{ top: termsCss(dayYTerms(wake(), true, minute)) }}\n aria-hidden=\"true\"\n />\n <span\n class=\"k2b-calendar-days__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 <Show when={view.clock(minute) === \"00:00\"}>\n <span class=\"k2b-calendar-days__midnight\" style={{ top: termsCss(dayYTerms(wake(), true, minute)) }} aria-hidden=\"true\">\n {shortDay(view, addDayKeys(props.dayKey, 1), true)}\n </span>\n </Show>\n </>\n )}\n </For>\n </Show>\n <For each={timeline()}>\n {(entry) =>\n entry.kind === \"gap\" ? (\n <TimeGap view={view} gap={entry.gap} dayKey={props.dayKey} expanded={expanded()} aside={gapAside(model(), entry.gap)} />\n ) : entry.kind === \"band\" ? (\n <TimeBand\n view={view}\n band={entry.band}\n dayKey={props.dayKey}\n expanded={expanded()}\n showLocation\n hourPx={56}\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={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\n scroller={props.scroller}\n />\n )\n }\n </For>\n <TimeOverlays view={view} dayKey={props.dayKey} expanded={expanded()} />\n <Show when={props.hover()?.key === props.dayKey && props.hover()}>\n {(current) => (\n <span class=\"k2b-calendar-hover\" style={{ top: termsCss(dayYTerms(wake(), expanded(), current().minute)) }} aria-hidden=\"true\">\n {view.clock(current().minute)}\n </span>\n )}\n </Show>\n <Show when={nowMinute() !== null && nowMinute()! >= 0 && nowMinute()! < (expanded() ? DAY_MINUTES : wake())}>\n <div class=\"k2b-calendar-now\" style={{ top: termsCss(dayYTerms(wake(), expanded(), nowMinute()!)) }} aria-hidden=\"true\">\n <span class=\"k2b-calendar-now__time\">{view.clock(nowMinute()!)}</span>\n </div>\n </Show>\n </div>\n </section>\n );\n};\n\nconst dayHeightTermsNight = (wake: number) => {\n const total = dayHeightTerms(wake, true);\n return [0, total[1], total[2], 0] as const;\n};\n\nconst EmptyRun = (props: { view: TimeView; keys: string[]; onUnfold: (keys: readonly string[]) => void }) => {\n const view = props.view;\n const headingId = createUniqueId();\n const first = () => props.keys[0]!;\n const last = () => props.keys[props.keys.length - 1]!;\n const title = () => (props.keys.length === 1 ? longDay(view, first()) : `${shortDay(view, first())} – ${shortDay(view, last(), true)}`);\n return (\n <section\n class=\"k2b-calendar-days__day\"\n data-calendar-group=\"\"\n data-calendar-keys={props.keys.join(\",\")}\n data-empty=\"true\"\n data-past={last() < view.nowKey() ? \"true\" : undefined}\n aria-labelledby={headingId}\n >\n <header class=\"k2b-calendar-days__head\">\n <h2 class=\"k2b-calendar-days__title\" id={headingId}>\n <span class=\"k2b-calendar-days__run\">{title()}</span>\n </h2>\n <span class=\"k2b-calendar-days__note\" />\n <For each={props.keys.filter((key) => view.props.owner.dayBadges?.[key])}>\n {(key) => {\n const badge = view.props.owner.dayBadges![key]!;\n return (\n <span class=\"k2b-calendar-days__badge\" data-run=\"true\">\n <Show when={props.keys.length > 1}>\n <span class=\"k2b-calendar-days__badge-day\">{shortDay(view, key).split(/[\\s,.]/)[0]}</span>\n </Show>\n <Show when={badge.icon}>{(icon) => <i class={`ti ti-${icon()}`} aria-hidden=\"true\" />}</Show>\n {badge.label}\n </span>\n );\n }}\n </For>\n <span class=\"k2b-calendar-days__summary\">\n {props.keys.length > 1 ? view.messages().calendarDayCount({ count: props.keys.length }) : \"\"}\n </span>\n </header>\n <button type=\"button\" class=\"k2b-calendar-days__empty\" data-calendar-unfold=\"\" onClick={() => props.onUnfold(props.keys)}>\n <span>{view.messages().calendarNothingPlannedShort}</span>\n <span class=\"k2b-calendar-days__empty-action\">\n <i class=\"ti ti-arrows-vertical\" aria-hidden=\"true\" />\n {view.messages().calendarUnfoldDays({ count: props.keys.length })}\n </span>\n </button>\n </section>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,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,oBAAoB,QAAQ,WAAW;AAChD,SAAS,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,QAAQ,uBAAuB;AACzI,SACE,UAAU,EACV,WAAW,EAEX,SAAS,EACT,cAAc,EACd,WAAW,EACX,WAAW,EACX,IAAI,EACJ,SAAS,EACT,WAAW,EACX,eAAe,EACf,QAAQ,QACH,iBAAiB;AACxB,SAAS,SAAS,EAAE,SAAS,QAAQ,mBAAmB;AACxD,SACE,WAAW,EACX,cAAc,EACd,QAAQ,EACR,OAAO,EACP,UAAU,EACV,WAAW,EACX,aAAa,EACb,QAAQ,EACR,SAAS,EACT,OAAO,EACP,WAAW,EACX,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,OAAO,EACP,UAAU,EACV,YAAY,EACZ,eAAe,QAIV,sBAAsB;AAE7B,MAAM,UAAU,GAAI,KAAe,IAAM,KAAK,CAAC,IAAI,KAAK,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAG;;AAE3F;AACA;AACA;AACA;AACA;AACA,OAAO,MAAM,eAAe,GAAI,KAAoB,IAAK;EACvD,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC;EAClC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EACjD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,YAAY,CAAsB,IAAI,GAAG,CAAC,CAAC,CAAC;EAC5E,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;EACjE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAyC,IAAI,CAAC;EACpF;EACA,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,YAAY,CAAqB,EAAE,CAAC;EACxE,IAAI,QAAoC;EACxC,IAAI,KAAiC;EACrC,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC;;EAE/B;EACA;EACA,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM;IAC5B,MAAM;MAAE,KAAK;MAAE;IAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,IAAI,MAAM,GAAG,KAAK,IAAI,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM;IAC1E,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;EAChC,CAAC,CAAC;EACF;EACA,MAAM,MAAM,GAAG,UAAU,CAAC,MACxB,SAAS,CAAC,IAAI,CAAC,CAAC,EAAG,GAAG,IAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAC7G,CAAC;EACD,MAAM,MAAM,GAAI,IAAuB,IAAK,WAAW,CAAE,KAAK,IAAK,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;EAChG,IAAI,IAAI,GAAG,CAAC;EACZ;EACA,MAAM,OAAO,GAAG,UAAU,CAA0C,QAAQ,IAAK;IAC/E,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS,CAAC;IAC/B,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,CAAE,KAAK,IAAK;MAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,OAAO;QAAE,EAAE,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE;QAAE;MAAM,CAAC;MAChE,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAC7B,CAAC;QAAE,EAAE;QAAE,KAAK,EAAE;MAAI,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,GAAG,IAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CACnH,CAAC;MACD,MAAM,EAAE,GAAG,SAAS,EAAE,EAAE,IAAI,KAAK,EAAE,IAAI,EAAE;MACzC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;MACb,OAAO;QAAE,EAAE;QAAE;MAAM,CAAC;IACtB,CAAC,CAAC;EACJ,CAAC,EAAE,EAAE,CAAC;EACN,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAAE;EAAG,CAAC,KAAK,EAAE,CAAC,CAAC;EAChE,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAAE,EAAE;IAAE;EAAM,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;;EAE3F;EACA,IAAI,QAAuB,GAAG,EAAE;EAChC,IAAI,IAAc,GAAG,EAAE;EACvB,MAAM,OAAO,GAAG,MAAM;IACpB,IAAI,CAAC,KAAK,EAAE;IACZ,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAc,gCAAgC,CAAC,CAAC;IACrF,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAE,OAAO,IAAK,OAAO,CAAC,SAAS,CAAC;EACrD,CAAC;EACD,MAAM,MAAM,GAAI,OAAgC,IAAK,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;EACrH,MAAM,SAAS,GAAI,GAAW,IAAK,QAAQ,CAAC,IAAI,CAAE,OAAO,IAAK,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;;EAE5F;EACA,IAAI,MAA6C,GAAG,IAAI;EACxD;EACA,IAAI,aAA4B,GAAG,IAAI;EACvC;EACA,IAAI,aAAa,GAAG,CAAC;EACrB,MAAM,cAAc,GAAG,MAAM;IAC3B,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;IACxC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;IACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC/B,IAAI,OAAO,EAAE,MAAM,GAAG;MAAE,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE;MAAE,KAAK,EAAE,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;IAAG,CAAC;EAC9F,CAAC;EACD,MAAM,aAAa,GAAG,MAAM;IAC1B,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE;IAC1B,MAAM,KAAK,GAAG,MAAM;IACpB,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAE,OAAO,IAAK,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChF,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAE,OAAO,IAAK,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAK,KAAK,CAAC,GAAG,CAAC;IACxF,IAAI,KAAK,GAAG,CAAC,EAAE;IACf,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAE,YAAY,GAAG,CAAC,CAAC;IACnF,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,QAAQ,CAAC,SAAS,GAAG,GAAG;IACtE,aAAa,GAAG,QAAQ,CAAC,SAAS;EACpC,CAAC;;EAED;EACA,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,MAAe,KAAK;IAC/C,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC;IAC9B,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI;IACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAc,sBAAsB,CAAC;IACvE,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC;IACrD,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC;IACrF,OAAO,IAAI,CAAC,KAAK,CAAC,GAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;EAC/D,CAAC;;EAED;EACA,IAAI,WAA0B,GAAG,IAAI;EACrC,IAAI,UAAU,GAAG,CAAC;EAClB,MAAM,KAAK,GAAI,GAAW,IAAK;IAC7B,IAAI,CAAC,QAAQ,EAAE;IACf,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IACpG,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;IACA,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC;IACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC/B,IAAI,OAAO,EAAE,MAAM,GAAG;MAAE,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE;MAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK;IAAG,CAAC;IAChF,QAAQ,CAAC,QAAQ,CAAC;MAAE,GAAG,EAAE,MAAM;MAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC,GAAG,SAAS,GAAG;IAAS,CAAC,CAAC;EAC7F,CAAC;;EAED;EACA,MAAM,UAAU,GAAI,GAAW,IAAK;IAClC,IAAI,CAAC,QAAQ,EAAE;IACf,OAAO,CAAC,CAAC;IACT,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE;MACzB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;MACzC;MACA,IAAI,GAAG,KAAK,IAAI,EAAE,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAC;MAClG,aAAa,GAAG,QAAQ,CAAC,SAAS;MAClC;IACF;IACA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAE,IAAI,IAAK,IAAI,CAAC,KAAK,CAAC,EACxC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAE,MAAM,IAAK,MAAM,CAAC,MAAM,CAAC,EAC/C,MAAM,CAAC,iBACT,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;IACzB,IAAI,KAAK,KAAK,IAAI,EAAE;IACpB,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,KAAK,GAAG,EAAE,CAAC,GAAG,IAAI;IACpF,QAAQ,CAAC,SAAS,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,EAAE,CAAC;IACzE,aAAa,GAAG,QAAQ,CAAC,SAAS;EACpC,CAAC;;EAED;EACA,IAAI,SAAsC,GAAG,OAAO;EACpD,IAAI,OAAO,GAAG,CAAC;EACf,IAAI,QAAQ,GAAG,KAAK;EACpB,IAAI,SAAS,GAAG,CAAC;EACjB,IAAI,KAAK,GAAG,CAAC;EACb,IAAI,KAAK,GAAG,KAAK;EACjB,IAAI,KAAK,GAAG,CAAC;EACb,IAAI,SAAS,GAAG,CAAC;EACjB,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,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,GAAG,aAAa,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;IACjI,IAAI,MAAM,KAAK,SAAS,EAAE;IAC1B,QAAQ,GAAG,IAAI;IACf,QAAQ,CAAC,QAAQ,CAAC;MAAE,GAAG,EAAE,MAAM;MAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC,GAAG,SAAS,GAAG;IAAS,CAAC,CAAC;IAC3F,MAAM,CAAC,UAAU,CAAC,MAAM;MACtB,QAAQ,GAAG,KAAK;IAClB,CAAC,EAAE,GAAG,CAAC;EACT,CAAC;EACD,MAAM,OAAO,GAAI,KAAiB,IAAK;IACrC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE;IACtG,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,YAAY,CAAC;IAC/E,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS;IAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY;IACzD;IACA,IAAK,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,IAAM,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAE,EAAE;MAC5D,QAAQ,CAAC,KAAK,GAAG,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;MACzC;IACF;IACA,IAAI,KAAK,CAAC,SAAS,GAAG,SAAS,GAAG,cAAc,EAAE,KAAK,GAAG,CAAC;IAC3D;IACA,QAAQ,GAAG,KAAK;IAChB,SAAS,GAAG,KAAK,CAAC,SAAS;IAC3B,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,KAAK,EAAE,KAAK,CAAC;IACnD,SAAS,GAAG,OAAO;IACnB,IAAI,IAAI,KAAK,SAAS,EAAE;MACtB,KAAK,GAAG,CAAC;MACT;IACF;IACA,KAAK,CAAC,cAAc,CAAC,CAAC;IACtB,WAAW,GAAG,IAAI;IAClB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAChD,QAAQ,CAAC,SAAS,GAAG,OAAO;IAC5B;IACA,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC,SAAS;EACtC,CAAC;;EAED;EACA,IAAI,YAAY,GAAG,EAAE;EACrB,IAAI,UAAU,GAAG,EAAE;EACnB,MAAM,QAAQ,GAAI,IAAyB,IAAK;IAC9C;IACA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAK,IAAI,KAAK,SAAS,IAAI,WAAW,KAAK,IAAK,EAAE;IAC/E,MAAM;MAAE,KAAK;MAAE;IAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,aAAa,IAAI,YAAY,KAAK,KAAK,EAAE;MAC7E,YAAY,GAAG,KAAK;MACpB,KAAK,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAClC;IACA,IAAI,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,IAAI,UAAU,KAAK,IAAI,EAAE;MACtE,UAAU,GAAG,IAAI;MACjB,KAAK,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAChC;EACF,CAAC;EAED,IAAI,WAAW,GAAG,CAAC;EACnB,IAAI,QAAQ,GAAG,EAAE;EACjB;EACA,MAAM,aAAa,GAAG,MAAM;IAC1B,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;EACD,MAAM,YAAY,GAAG,MAAM;IACzB,IAAI,CAAC,QAAQ,EAAE;IACf,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS;IAC9B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC;IACpC,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,GAAG,IAAI,GAAG,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC;IAClD,aAAa,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE;MACpD,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAuC;MAC5D,IAAI,CAAC,IAAI,EAAE;MACX,MAAM,QAAQ,GAAG,QAAQ,GAAG,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAG,GAAG,CAAC,GAAG,CAAC;MACtE,IAAI,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,sBAAsB,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAC9E,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,sBAAsB,CAAC;IACjH;IACA,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC;IAC7B;IACA;IACA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC;IAChD,aAAa,GAAG,GAAG;IACnB,IAAI,SAAS,GAAG,CAAC,IAAI,GAAG,GAAG,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,GAAG,CAAC,GAAG,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,KACnH,IAAI,SAAS,GAAG,CAAC,IAAI,GAAG,GAAG,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC;IAC1E,cAAc,CAAC,CAAC;EAClB,CAAC;EACD,MAAM,QAAQ,GAAG,MAAM;IACrB,IAAI,CAAC,QAAQ,EAAE;IACf,IAAI,WAAW,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI;IAC9F,IAAI,CAAC,KAAK,EACR,KAAK,GAAG,qBAAqB,CAAC,MAAM;MAClC,KAAK,GAAG,CAAC;MACT,YAAY,CAAC,CAAC;IAChB,CAAC,CAAC;IACJ,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;IAC9B,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,KAAK,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC;EACzE,CAAC;EAED,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;MACZ,YAAY,CAAC,CAAC;IAChB,CAAC,CAAC;IACF,MAAM,QAAQ,GACZ,OAAO,cAAc,KAAK,WAAW,GACjC,SAAS,GACT,IAAI,cAAc,CAAC,MAAM;MACvB,OAAO,CAAC,CAAC;MACT;MACA,IAAI,WAAW,KAAK,IAAI,EAAE,aAAa,CAAC,CAAC;IAC3C,CAAC,CAAC;IACR,IAAI,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC;IACnC,SAAS,CAAC,MAAM;MACd,QAAQ,EAAE,UAAU,CAAC,CAAC;MACtB,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;MAC9B,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;EACA;EACA;EACA,cAAc,CACZ,EAAE,CACA,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAU,EACxC,MAAM;IACJ,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;IACvB,OAAO,CAAC,CAAC;IACT,cAAc,CAAC,CAAC;EAClB,CAAC,EACD;IAAE,KAAK,EAAE;EAAK,CAChB,CACF,CAAC;EACD;EACA,YAAY,CACV,EAAE,CACA,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAU,EACxC,MAAM;IACJ,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;IACvB,OAAO,CAAC,CAAC;IACT,IAAI,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE;MAC1C,UAAU,CAAC,aAAa,CAAC;MACzB,aAAa,GAAG,IAAI;MACpB,cAAc,CAAC,CAAC;IAClB,CAAC,MAAM,aAAa,CAAC,CAAC;IACtB,YAAY,CAAC,CAAC;EAChB,CAAC,EACD;IAAE,KAAK,EAAE;EAAK,CAChB,CACF,CAAC;EACD;EACA,YAAY,CACV,EAAE,CACA,IAAI,CAAC,SAAS,EACb,GAAG,IAAK;IACP,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;IACvB,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;MAChB,YAAY,CAAC,CAAC;IAChB,CAAC,CAAC;EACJ,CAAC,EACD;IAAE,KAAK,EAAE;EAAK,CAChB,CACF,CAAC;;EAED;EACA,MAAM,YAAY,GAAG,MAA0B;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE;IACxB,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC;IAC9B,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM;IAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;IACvC,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS;IAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAI,OAAO,CAAC,YAAY,GAAG,GAAG,EAAE,OAAO,IAAI;IAC1D,IAAI,IAAI,CAAC,KAAK,CAAC,GAAI,GAAG,GAAG,QAAQ,CAAC,YAAY,EAAE,OAAO,MAAM;IAC7D,OAAO,EAAE;EACX,CAAC;EACD,MAAM,WAAW,GAAG,MAAM;IACxB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC;IACtB,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO;MAAE,KAAK;MAAE,IAAI,EAAE;IAAM,CAAC;IACrE,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,YAAY;IACzD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,OAAO;MAAE,KAAK;MAAE,IAAI,EAAE,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI;IAAM,CAAC;EACxE,CAAC;EACD,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,IAAI,GAAI,GAAW,IAAK;IAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,KAAK;IAC3C;IACA,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAE,KAAK,IAAK,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;IACtG,OAAO,CAAC,CAAC;IACT,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IACvB,IAAI,GAAG,KAAK,IAAI,EAAE,OAAO,KAAK;IAC9B,KAAK,CAAC,GAAG,CAAC;IACV,OAAO,IAAI;EACb,CAAC;EACD,MAAM,MAAsB,GAAG;IAC7B,WAAW;IACX,IAAI,EAAG,SAAS,IAAK;MACnB,IAAI,CAAC,QAAQ,EAAE,OAAO,KAAK;MAC3B,OAAO,CAAC,CAAC;MACT,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS;MAC9B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC;MACpC,MAAM,MAAM,GAAG,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;MACvG,IAAI,MAAM,KAAK,SAAS,EAAE,OAAO,KAAK;MACtC,KAAK,CAAC,MAAM,CAAC;MACb,OAAO,IAAI;IACb,CAAC;IACD,IAAI;IACJ,KAAK,EAAE,MAAM;MACX,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;MACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,KAAK;MAC3C,OAAO,CAAC,CAAC;MACT,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;MACzC,IAAI,GAAG,KAAK,IAAI,EAAE,OAAO,KAAK;MAC9B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;MAClE,OAAO,IAAI;IACb,CAAC;IACD,cAAc,EAAE,MAAM;MACpB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;MACzB,MAAM;QAAE,KAAK;QAAE;MAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;MACpC,IAAI,GAAG,GAAG,KAAK,EAAE,OAAO,IAAI;MAC5B,IAAI,GAAG,GAAG,IAAI,EAAE,OAAO,MAAM;MAC7B,OAAO,UAAU,CAAC,CAAC;IACrB,CAAC;IACD,UAAU,EAAE;MACV,WAAW,EAAG,MAAM,IAAK;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,QAAQ,EAAE,aAAa,CAAc,wBAAwB,MAAM,CAAC,GAAG,IAAI,CAAC;QACzF,IAAI,CAAC,eAAe,CAClB,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,GAAG,EACV,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,QAAS,EACpE,MACF,CAAC;MACH,CAAC;MACD,YAAY,EAAE,MAAM;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;MACtC,CAAC;MACD,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ;IAC5E;EACF,CAAC;EACD;EACA,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,GAAW,KAAqB;IAC7E,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,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC;IACrF,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,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE;IAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;IAC5C,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC;EACnI,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,IAAI,QAAQ,GAAG,CAAC,GAAG;EACnB,OAAO,CAAC,MAAM;IACZ,MAAM,IAAI,GAAI,KAAoB,IAAK;MACrC,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;QACvB,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,QAAQ,EAAE,UAAU,GAAG,QAAQ,CAAC,SAAS;MAC/C;IACF,CAAC;IACD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC;IAC9C,SAAS,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;EACpE,CAAC,CAAC;EACF,IAAI,UAAU,GAAG,CAAC;EAClB,MAAM,SAAS,GAAI,KAAiB,IAAK;IACvC,IAAI,CAAC,QAAQ,EAAE;IACf,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,YAAY,IAAI,GAAG,KAAK,CAAC,aAAa,GAAG,IAAI;IAC7E,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,GAAG,GAAG,IAAK,IAAI,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAE,EAAE;MAC3E,UAAU,GAAG,QAAQ,CAAC,SAAS;MAC/B;IACF;IACA;IACA;IACA,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,SAAS,GAAG,UAAU;IACnF,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAI,OAAgB,IAAK;MACpC,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;MAC5C,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;IAC1F,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,YAAY,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;IAC9D,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAc,qCAAqC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IAChH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,2BAA2B,CAAC;IACvG,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;MAAE,aAAa,EAAE;IAAK,CAAC,CAAC;EAC7E,CAAC;EAED;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA,kBAoBiB,SAAS;IAAA,sCAHJ,KAAK,IAAK;MACxB,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM;IAChC,CAAC;IAAA,mBALY,KAAK,IAAK;MACrB,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM;IAChC,CAAC;IAAA,qBAPc,KAAK,IAAK;MACvB,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM;MAC9B,SAAS,GAAG,OAAO;MACnB,WAAW,GAAG,IAAI;IACpB,CAAC;IAAA,gCALQ,OAAO;IAAA,iCADN,QAAQ;IAAA,YAJb,QAAQ;IAAA,oDAAR,QAAQ;IAAA,0CAGK,MAAM;IAAA,aAgBd,KAAK;IAAA,sDAAL,KAAK;IAAA,kCACZ,GAAG;MAAA,IAAC,IAAI;QAAA,OAAE,QAAQ,CAAC,CAAC;MAAA;MAAA,UACjB,EAAE,IAAK;QACP,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,yBACG,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,KAAK,CAAC,CAAC;UAAA;UAAA,UACf,OAAO,IACP,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,qBACrB,UAAU;YAAC,IAAI,EAAE,IAAI;YAAA,IAAE,MAAM;cAAA,OAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;YAAA;YAAE,KAAK,EAAE,KAAK;YAAE,QAAQ,EAAE,QAAQ;YAAE,QAAQ,EAAE,MAAM;UAAQ,uBAEhH,QAAQ;YAAC,IAAI,EAAE,IAAI;YAAA,IAAE,IAAI;cAAA,OAAG,OAAO,CAAC,CAAC,CAA0C,IAAI;YAAA;YAAE,QAAQ,EAAE;UAAM;QACvG;MAIT;IAAC;IAAA,kCAEF,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,KAAK,CAAC,WAAW;MAAA;MAAA;QAAA;QAAA,sBACG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB;QAAA;MAAA;IAAA;IAAA,4BAI3C,MAAM;IAAA,sBAClC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,uBAAuB;IAAA,iCAEzC,eAAe;MAAC,IAAI,EAAE;IAAI;IAAA,qDA9CiC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,SAAS;IAAA;IAAA;EAAA;AAiD9F,CAAC;AAED,MAAM,UAAU,GAAI,KAMnB,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,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;EAC5D,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC;EAClC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;EAC9D,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC;EACzD,MAAM,WAAW,GAAG,MAAM;IACxB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,KAAK,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC;EACxF,CAAC;EACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;EAC/C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;EAC9B,MAAM,SAAS,GAAG,MAAO,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAK;EAClF,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;EACxE,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,QAAQ,CAAC,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EAC7G;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,QAAQ,CAAC,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAE;EAC1E,MAAM,UAAU,GAAG,MACjB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;IAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;EAAE,CAAC,CAAC;EACxH,MAAM,SAAS,GAAG,MAChB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACjC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACpC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;EACxC,CAAC,CAAC;;EAEJ;EACA;EACA,MAAM,QAAQ,GAAG,UAAU,CAOxB,QAAQ,IACP,CACE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CACV,GAAG,IACF,QAAQ,CAAC,IAAI,CACV,GAAG,IAAK,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAChH,CAAC,IAAI;IAAE,EAAE,EAAE,GAAG,CAAC,KAAK;IAAE,IAAI,EAAE,KAAc;IAAE;EAAI,CACpD,CAAC,EACD,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CACX,IAAI,IACH,QAAQ,CAAC,IAAI,CAAE,GAAG,IAAK,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;IAClE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;IAC3B,IAAI,EAAE,MAAe;IACrB;EACF,CACJ,CAAC,EACD,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CACb,MAAM,IACL,QAAQ,CAAC,IAAI,CAAE,GAAG,IAAK,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI;IACxE,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,IAAI,EAAE,QAAiB;IACvB;EACF,CACJ,CAAC,CACF,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,EAC7C,EACF,CAAC;EAED,MAAM,aAAa,GAAI,MAA0B,IAC/C,MAAM,YAAY,OAAO,IACzB,CAAC,MAAM,CAAC,OAAO,CAAC,+GAA+G,CAAC;EAClI,MAAM,QAAQ,GAAG,CAAC,OAAoB,EAAE,OAAe,KAAK;IAC1D,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;EACnH,CAAC;EACD,IAAI,WAAW,GAAG,OAAO;EAEzB;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA,0CAKqB,SAAS;IAAA,6BAMiB,SAAS;IAAA,iBAKrC,MAAM;MACb,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;MACxB,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,GAAG;QAAE,GAAG,EAAE,KAAK,CAAC;MAAO,CAAC,CAAC;IACjE,CAAC;IAAA,mCAEA,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,CAAC;MAAA;MAAA;QAAA;QAAA,uBACuB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK;QAAA;MAAA;IAAA;IAAA,uBAE1B,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;IAAA,uBAC1B,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;IAAA,mCAKzE,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,IAAI,CAAC,CAAC;MAAA;MAAA;QAAA;UAAA;UAAA,iBAET,IAAI;UAAA;QAAA;MAAA;IAAA;IAAA,uBAMZ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe;IAAA,mCAGnC,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,CAAC;MAAA;MAAA,UACf,OAAO;QAAA;UAAA;UAAA;UAAA;UAAA;QAAA,mCAEJ,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,OAAO,CAAC,CAAC,CAAC,IAAI;UAAA;UAAA,UAAI,IAAI;YAAA;YAAA,mCAAe,SAAS,IAAI,CAAC,CAAC,EAAE;YAAA;UAAA;QAAuB;QAAA,uBACxF,OAAO,CAAC,CAAC,CAAC,KAAK;QAAA;MAAA;IAEnB;IAAA,uBAEuC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;IAAA,mCAEzE,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;MAAA;MAAA;QAAA;QAAA,mCAE/B,WAAW;UAAC,IAAI,EAAE,IAAI;UAAA,IAAE,MAAM;YAAA,OAAE,KAAK,CAAC,MAAM;UAAA;UAAA,IAAE,KAAK;YAAA,OAAE,KAAK,CAAC,CAAC,CAAC,KAAK;UAAA;QAAA;QAAA,oDADJ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,oBAAoB;QAAA;MAAA;IAAA;IAAA,wCA8CrF,MAAM;MACpB,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC/D,CAAC;IAAA,uBAVe,KAAK,IAAK;MACxB,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;QACpF,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC7D;MACF;MACA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;MACjF,KAAK,CAAC,QAAQ,CAAC;QAAE,GAAG,EAAE,KAAK,CAAC,MAAM;QAAE;MAAO,CAAC,CAAC;IAC/C,CAAC;IAAA,oBAZY,KAAK,IAAK;MACrB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,WAAW,KAAK,OAAO,EAAE;MAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;MACjF,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC3H,CAAC;IAAA,oCAhBU,KAAK,IAAK;MACnB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE;MACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;MACjF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC;MACpE,IAAI,WAAW,KAAK,OAAO,EAAE;QAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,YAAY,CAAC;UAAE,GAAG,EAAE,KAAK,CAAC,MAAM;UAAE,KAAK,EAAE,MAAM;UAAE;QAAI,CAAC,CAAC;QAC5D;MACF;MACA,IAAI,CAAC,aAAa,CAAC;QAAE,GAAG,EAAE,KAAK,CAAC,MAAM;QAAE,KAAK,EAAE,MAAM;QAAE;MAAI,CAAC,CAAC;MAC7D,IAAI,CAAC,YAAY,CAAC;QAAE,GAAG,EAAE,KAAK,CAAC,MAAM;QAAE,KAAK,EAAE,MAAM;QAAE;MAAI,CAAC,CAAC;IAC9D,CAAC;IAAA,sBAfa,MAAM;MAClB,WAAW,GAAG,OAAO;IACvB,CAAC;IAAA,uBARe,KAAK,IAAK;MACxB,WAAW,GAAG,KAAK,CAAC,WAAW;MAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;MACxD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvD,CAAC;IAAA,MATK,OAAO,IAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC;IAAA,mCA4CnE,GAAG;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,IAAI,CAAC;UAAE,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG;QAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,GAAG,EAAE,CAAC;MAAA;MAAA,UACxE,MAAM;QAAA;QAAA,kDAEgD,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAAA;MAAA;QAAA;QAAA,uBAOhG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAAA;UAAA,YAJJ,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS;YAAA,QAC3D,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;UAAA;UAAA;UAAA;QAAA;UAAA;UAAA;QAAA;QAAA;MAAA;IAMlE;IAAA,mCAEF,IAAI;MAAA,IACH,IAAI;QAAA,OAAE,QAAQ,CAAC,CAAC;MAAA;MAAA,IAChB,QAAQ;QAAA;UAAA;YAAA;YAAA;YAAA;YAAA;YAAA;UAAA,iBAOO,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;UAAA,iBAGzC,SAAS;UAAA,mCAGjB,IAAI;YAAA,IAAC,IAAI;cAAA,OAAE,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;YAAA;YAAA;cAAA;cAAA,mCAE1B,GAAG;gBAAA,IAAC,IAAI;kBAAA,OAAE,MAAM,CAAC,CAAC;gBAAA;gBAAA,UACf,KAAK,IAAK;kBACV,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;kBACjD;oBAAA;sBAAA;sBAAA;sBAAA;sBAAA;oBAAA,mCAMK,IAAI;sBAAA,IAAC,IAAI;wBAAA,OAAE,OAAO,CAAC,CAAC,KAAK,SAAS;sBAAA;sBAAA;wBAAA,yBAChC,SAAS;0BAAC,IAAI,EAAE,IAAI;0BAAA,IAAE,KAAK;4BAAA,OAAE,KAAK,CAAC,KAAK;0BAAA;wBAAA;sBAAA;oBAAA;oBAAA,mCAE1C,SAAS;sBAAA,IACR,KAAK;wBAAA,OAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;sBAAA;sBAAA,IACjD,KAAK;wBAAA,OAAE,IAAI,CAAC,KAAK,CAAC,KAAK;sBAAA;sBAAA,IACvB,IAAI;wBAAA,OAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;sBAAA;sBAC9C,OAAO;sBACP,QAAQ;sBAAA,IACR,WAAW;wBAAA,OAAE,KAAK,CAAC,IAAI;sBAAA;sBAAA,IACvB,QAAQ;wBAAA,OAAE,OAAO,CAAC,CAAC,KAAK,SAAS;sBAAA;sBAAA,IACjC,OAAO;wBAAA,OAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;sBAAA;oBAAA;oBAAA;sBAAA,YAfrB,OAAO,CAAC,CAAC,KAAK,SAAS,GAAG,MAAM,GAAG,SAAS;wBAAA,QAC7C,OAAO,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS;wBAAA,QACV,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;sBAAA;sBAAA;sBAAA;sBAAA;oBAAA;sBAAA;sBAAA;sBAAA;oBAAA;oBAAA;kBAAA;gBAiBhE;cAAC;cAAA;YAAA;UAAA;UAAA;YAAA,YAtCoC,QAAQ,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;cAAA,QAKxF,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB;YAAA;YAAA;YAAA;UAAA;YAAA;YAAA;UAAA;UAAA;UAAA;QAAA;MAAA;MAAA;QAAA;UAAA;UAAA;YAAA,UA0CnC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;cAAA,OAAU,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAA;YAAA;YAAA;UAAA;YAAA;YAAA;UAAA;UAAA;QAAA;UAAA;YAAA;YAAA;YAAA;YAAA;YAAA;YAAA;UAAA,iBAQ7F,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC;UAAA,iBAG1C,UAAU;UAAA,uBAEd,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB;UAAA,kDANtB,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;UAAA;UAAA;QAAA,wBAUxD,GAAG;UAAA,IAAC,IAAI;YAAA,OAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;UAAA;UAAA,UACzB,MAAM;YAAA;YAAA;cAAA,YAIa,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO,GAAG,MAAM,GAAG,SAAS;gBAAA,QACpD,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;cAAA;cAAA;cAAA;YAAA;cAAA;cAAA;YAAA;YAAA;UAAA;YAAA;YAAA,uBAStD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YAAA,kDAHL,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAAA;UAAA,wBAKxD,IAAI;YAAA,IAAC,IAAI;cAAA,OAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO;YAAA;YAAA;cAAA;cAAA,uBAErC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC;cAAA,kDADI,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;cAAA;YAAA;UAAA;QAKtG;MAAA;IAAA;IAAA,mCAGJ,GAAG;MAAA,IAAC,IAAI;QAAA,OAAE,QAAQ,CAAC,CAAC;MAAA;MAAA,UACjB,KAAK,IACL,KAAK,CAAC,IAAI,KAAK,KAAK,qBACjB,OAAO;QAAC,IAAI,EAAE,IAAI;QAAA,IAAE,GAAG;UAAA,OAAE,KAAK,CAAC,GAAG;QAAA;QAAA,IAAE,MAAM;UAAA,OAAE,KAAK,CAAC,MAAM;QAAA;QAAA,IAAE,QAAQ;UAAA,OAAE,QAAQ,CAAC,CAAC;QAAA;QAAA,IAAE,KAAK;UAAA,OAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC;QAAA;MAAA,KAClH,KAAK,CAAC,IAAI,KAAK,MAAM,qBACtB,QAAQ;QACP,IAAI,EAAE,IAAI;QAAA,IACV,IAAI;UAAA,OAAE,KAAK,CAAC,IAAI;QAAA;QAAA,IAChB,MAAM;UAAA,OAAE,KAAK,CAAC,MAAM;QAAA;QAAA,IACpB,QAAQ;UAAA,OAAE,QAAQ,CAAC,CAAC;QAAA;QACpB,YAAY;QACZ,MAAM,EAAE,EAAE;QAAA,IACV,QAAQ;UAAA,OAAE,KAAK,CAAC,QAAQ;QAAA;MAAA,uBAGzB,UAAU;QACT,IAAI,EAAE,IAAI;QAAA,IACV,KAAK;UAAA,OAAE,KAAK,CAAC,MAAM,CAAC,IAAI;QAAA;QAAA,IACxB,MAAM;UAAA,OAAE,KAAK,CAAC,MAAM,CAAC,MAAM;QAAA;QAAA,IAC3B,MAAM;UAAA,OAAE,KAAK,CAAC,MAAM;QAAA;QAAA,IACpB,QAAQ;UAAA,OAAE,QAAQ,CAAC,CAAC;QAAA;QAAA,IACpB,KAAK;UAAA,OAAE,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QAAA;QAAA,IAChD,IAAI;UAAA,OAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC;QAAA;QAAA,IAC1C,KAAK;UAAA,OAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC;QAAA;QAC5C,QAAQ;QAAA,IACR,QAAQ;UAAA,OAAE,KAAK,CAAC,QAAQ;QAAA;MAAA;IAE3B;IAAA,mCAGJ,YAAY;MAAC,IAAI,EAAE,IAAI;MAAA,IAAE,MAAM;QAAA,OAAE,KAAK,CAAC,MAAM;MAAA;MAAA,IAAE,QAAQ;QAAA,OAAE,QAAQ,CAAC,CAAC;MAAA;IAAA;IAAA,mCACnE,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,kBAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,MAAM,OAAI,KAAK,CAAC,KAAK,CAAC,CAAC;MAAA;MAAA,UAC5D,OAAO;QAAA;QAAA,uBAEJ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAAA,kDADgB,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAAA;MAAA;IAGzG;IAAA,mCAEF,IAAI;MAAA,IAAC,IAAI;QAAA,OAAE,yBAAS,CAAC,CAAC,KAAK,IAAI,IAAI,SAAS,CAAC,CAAC,IAAK,CAAC,QAAI,SAAS,CAAC,CAAC,IAAK,QAAQ,CAAC,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC;MAAA;MAAA;QAAA;UAAA;QAAA,uBAEjE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAE,CAAC;QAAA,kDADpB,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAE,CAAC,CAAC;QAAA;MAAA;IAAA;IAAA;MAAA,WArPjF,KAAK,CAAC,MAAM;QAAA,OAEpB,KAAK,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS;QAAA,OAC7B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS;QAAA,OAC7C,WAAW,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS;QAAA,OAO7B,WAAW,CAAC,CAAC,GAAG,MAAM,GAAG,OAAO;QAAA,OAaA,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS;QAAA,OAgClF,KAAK,CAAC,MAAM;QAAA,OACjB,QAAQ,CAAC,CAAC,GAAG,MAAM,GAAG,OAAO;QAAA,OAC3B,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA;IAAA;IAAA;EAAA;AAkMrE,CAAC;AAED,MAAM,mBAAmB,GAAI,IAAY,IAAK;EAC5C,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;EACxC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,QAAQ,GAAI,KAAsF,IAAK;EAC3G,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI;EACvB,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC;EAClC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAE;EAClC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE;EACrD,MAAM,KAAK,GAAG,MAAO,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAG;EACvI;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA,0CAOqB,SAAS;IAAA,6BAGiB,SAAS;IAAA,iBACV,KAAK;IAAA,mCAG5C,GAAG;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAE,GAAG,IAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;MAAA;MAAA,UACpE,GAAG,IAAK;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAE,GAAG,CAAE;QAC/C;UAAA;YAAA;YAAA;YAAA;YAAA;YAAA;YAAA;UAAA,mCAEK,IAAI;YAAA,IAAC,IAAI;cAAA,OAAE,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YAAA;YAAA;cAAA;cAAA,uBACa,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;cAAA;YAAA;UAAA;UAAA,mCAEnF,IAAI;YAAA,IAAC,IAAI;cAAA,OAAE,KAAK,CAAC,IAAI;YAAA;YAAA,UAAI,IAAI;cAAA;cAAA,oCAAe,SAAS,IAAI,CAAC,CAAC,EAAE;cAAA;YAAA;UAAuB;UAAA,uBACpF,KAAK,CAAC,KAAK;UAAA;QAAA;MAGlB;IAAC;IAAA;MAAA,uBAGA,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;MAAA,aAArB,QAAwB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC;QAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;MAAO,CAAC,CAAC,GAAG,EAAE;IAAA;IAAA,iBAGR,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IAAA,uBAC/G,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,2BAA2B;IAAA,uBAG/C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC;MAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;IAAO,CAAC,CAAC;IAAA;MAAA,YAhCjD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAAA,QAE7B,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;IAAA;IAAA;IAAA;EAAA;AAmC5D,CAAC;AAAC","ignoreList":[]}
@@ -33,12 +33,13 @@ var _tmpl$ = /*#__PURE__*/_$template(`<span class=k2b-calendar-week__now-time ar
33
33
  _tmpl$17 = /*#__PURE__*/_$template(`<li><!$><!/><!$><!/>`);
34
34
  import { dates as calendar } from "@k2b/stdlib";
35
35
  import { createComputed, createEffect, createMemo, createSignal, createUniqueId, For, on, onCleanup, onMount, Show, untrack } from "solid-js";
36
+ import { prefersReducedMotion } from "../motion";
36
37
  import { GESTURE_GAP_MS, snapToColumn, wheelAxis, wheelDelta, wheelPixels } from "./calendar-day-scroll";
37
38
  import { addDayKeys, DAY_MINUTES, dayHeightTerms, dayKeyNumber, dayKeyRange, dayMinuteAt, dayY, dayYTerms, markerLanes, readDayGeometry, termsCss } from "./calendar-days";
38
39
  import { layoutMonthWeek } from "./calendar-month-layout";
39
40
  import { startCalendarPointerSession } from "./calendar-pointer";
40
41
  import { EventChip, eventHref, followCalendarHref, textWidth } from "./calendar-shared";
41
- import { createTimeView, dayBands, dayGaps, dayLoad, eventAccent, foldedEntries, gapAside, isNearNow, longDay, markerAbove, nightHours, reducedMotion, swallowNextClick, TimeBand, TimeCheck, TimeGap, TimeMarker, TimeOverlays, TimeQuickCreate, weekKeysOf } from "./calendar-time-view";
42
+ import { createTimeView, dayBands, dayGaps, dayLoad, eventAccent, foldedEntries, gapAside, isNearNow, longDay, markerAbove, nightHours, swallowNextClick, TimeBand, TimeCheck, TimeGap, TimeMarker, TimeOverlays, TimeQuickCreate, weekKeysOf } from "./calendar-time-view";
42
43
 
43
44
  /** Room a bar keeps beside its title and date hint: padding, torn edge, gap, and an icon such as a task box. */
44
45
  const HINT_SLACK_PX = 36;
@@ -122,7 +123,7 @@ export const CalendarWeekView = props => {
122
123
  ...(top === undefined ? {} : {
123
124
  top
124
125
  }),
125
- behavior: reducedMotion() ? "instant" : "smooth"
126
+ behavior: prefersReducedMotion() ? "instant" : "smooth"
126
127
  });
127
128
  };
128
129
  /** The scroll position of a minute in the timeline, with now in the upper third. */
@@ -202,7 +203,7 @@ export const CalendarWeekView = props => {
202
203
  settling = true;
203
204
  scroller.scrollTo({
204
205
  left: target,
205
- behavior: reducedMotion() ? "instant" : "smooth"
206
+ behavior: prefersReducedMotion() ? "instant" : "smooth"
206
207
  });
207
208
  window.setTimeout(() => {
208
209
  settling = false;