@k2b/ui 0.26.0 → 0.28.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 (231) hide show
  1. package/README.md +1 -1
  2. package/dist/base.css +147 -2
  3. package/dist/browser/actions/ContextMenu.js +30 -4
  4. package/dist/browser/actions/ContextMenu.js.map +1 -1
  5. package/dist/browser/actions/Dropdown.js +184 -158
  6. package/dist/browser/actions/Dropdown.js.map +1 -1
  7. package/dist/browser/actions/GestureMenu.js +71 -138
  8. package/dist/browser/actions/GestureMenu.js.map +1 -1
  9. package/dist/browser/actions/Toolbar.js +379 -48
  10. package/dist/browser/actions/Toolbar.js.map +1 -1
  11. package/dist/browser/actions/index.js.map +1 -1
  12. package/dist/browser/actions/menu-rows.js +15 -0
  13. package/dist/browser/actions/menu-rows.js.map +1 -0
  14. package/dist/browser/actions/menu-sheet.js +154 -0
  15. package/dist/browser/actions/menu-sheet.js.map +1 -0
  16. package/dist/browser/actions/toolbar-messages.js +20 -0
  17. package/dist/browser/actions/toolbar-messages.js.map +1 -0
  18. package/dist/browser/chart-inspection.js +3 -0
  19. package/dist/browser/chart-inspection.js.map +1 -0
  20. package/dist/browser/chat/ChatComposer.js +1020 -431
  21. package/dist/browser/chat/ChatComposer.js.map +1 -1
  22. package/dist/browser/chat/chat-behavior.js +4 -0
  23. package/dist/browser/chat/chat-behavior.js.map +1 -1
  24. package/dist/browser/chat/chat-messages.js +33 -1
  25. package/dist/browser/chat/chat-messages.js.map +1 -1
  26. package/dist/browser/chat/command-search.js +173 -0
  27. package/dist/browser/chat/command-search.js.map +1 -0
  28. package/dist/browser/chat/composer-document.js +1 -1
  29. package/dist/browser/chat/composer-document.js.map +1 -1
  30. package/dist/browser/chat/index.js +2 -0
  31. package/dist/browser/chat/index.js.map +1 -1
  32. package/dist/browser/chat/reaction-people.js +15 -0
  33. package/dist/browser/chat/reaction-people.js.map +1 -0
  34. package/dist/browser/content/CalendarDayView.js +28 -3
  35. package/dist/browser/content/CalendarDayView.js.map +1 -1
  36. package/dist/browser/content/Chart.js +6 -15
  37. package/dist/browser/content/Chart.js.map +1 -1
  38. package/dist/browser/content/ChartSnapshotView.js +7 -10
  39. package/dist/browser/content/ChartSnapshotView.js.map +1 -1
  40. package/dist/browser/content/MessageRow.js +330 -448
  41. package/dist/browser/content/MessageRow.js.map +1 -1
  42. package/dist/browser/content/ReactionBar.js +419 -0
  43. package/dist/browser/content/ReactionBar.js.map +1 -0
  44. package/dist/browser/content/chart-inspection-core.js +557 -0
  45. package/dist/browser/content/chart-inspection-core.js.map +1 -0
  46. package/dist/browser/content/chart-inspection.js +10 -445
  47. package/dist/browser/content/chart-inspection.js.map +1 -1
  48. package/dist/browser/content/chart-line-gaps.js +1 -1
  49. package/dist/browser/content/chart-line-gaps.js.map +1 -1
  50. package/dist/browser/content/chart-snapshot.js +1 -1
  51. package/dist/browser/content/chart-snapshot.js.map +1 -1
  52. package/dist/browser/content/index.js +1 -0
  53. package/dist/browser/content/index.js.map +1 -1
  54. package/dist/browser/feedback/dialog-core.js +135 -23
  55. package/dist/browser/feedback/dialog-core.js.map +1 -1
  56. package/dist/browser/index.js +1 -0
  57. package/dist/browser/index.js.map +1 -1
  58. package/dist/browser/input-mode.js +40 -0
  59. package/dist/browser/input-mode.js.map +1 -0
  60. package/dist/browser/inputs/Combobox.js +4 -2
  61. package/dist/browser/inputs/Combobox.js.map +1 -1
  62. package/dist/browser/inputs/FileDropTarget.js +24 -9
  63. package/dist/browser/inputs/FileDropTarget.js.map +1 -1
  64. package/dist/browser/inputs/FileInputs.js +2 -2
  65. package/dist/browser/inputs/FileInputs.js.map +1 -1
  66. package/dist/browser/inputs/SelectChip.js +52 -12
  67. package/dist/browser/inputs/SelectChip.js.map +1 -1
  68. package/dist/browser/inputs/emoji/EmojiPicker.js +13 -0
  69. package/dist/browser/inputs/emoji/EmojiPicker.js.map +1 -1
  70. package/dist/browser/inputs/file-drop.js.map +1 -1
  71. package/dist/browser/layout/AppWorkspace.js +708 -515
  72. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  73. package/dist/browser/layout/BottomSheet.js +8 -0
  74. package/dist/browser/layout/BottomSheet.js.map +1 -1
  75. package/dist/browser/layout/DetailPanel.js +283 -197
  76. package/dist/browser/layout/DetailPanel.js.map +1 -1
  77. package/dist/browser/layout/Discussion.js +233 -185
  78. package/dist/browser/layout/Discussion.js.map +1 -1
  79. package/dist/browser/layout/TableOfContents.js +10 -2
  80. package/dist/browser/layout/TableOfContents.js.map +1 -1
  81. package/dist/browser/layout/app-workspace-controller.js +155 -23
  82. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  83. package/dist/browser/layout/app-workspace-state.js +5 -1
  84. package/dist/browser/layout/app-workspace-state.js.map +1 -1
  85. package/dist/browser/layout/detail-panel-messages.js +35 -0
  86. package/dist/browser/layout/detail-panel-messages.js.map +1 -0
  87. package/dist/browser/layout/index.js +1 -1
  88. package/dist/browser/layout/index.js.map +1 -1
  89. package/dist/browser/surfaces/Avatar.js +50 -20
  90. package/dist/browser/surfaces/Avatar.js.map +1 -1
  91. package/dist/browser/surfaces/AvatarStack.js +406 -0
  92. package/dist/browser/surfaces/AvatarStack.js.map +1 -0
  93. package/dist/browser/surfaces/avatar-messages.js +8 -2
  94. package/dist/browser/surfaces/avatar-messages.js.map +1 -1
  95. package/dist/browser/surfaces/index.js +1 -0
  96. package/dist/browser/surfaces/index.js.map +1 -1
  97. package/dist/ssr/actions/ContextMenu.js +21 -3
  98. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  99. package/dist/ssr/actions/Dropdown.js +140 -72
  100. package/dist/ssr/actions/Dropdown.js.map +1 -1
  101. package/dist/ssr/actions/GestureMenu.js +52 -106
  102. package/dist/ssr/actions/GestureMenu.js.map +1 -1
  103. package/dist/ssr/actions/Toolbar.js +294 -14
  104. package/dist/ssr/actions/Toolbar.js.map +1 -1
  105. package/dist/ssr/actions/index.js.map +1 -1
  106. package/dist/ssr/actions/menu-rows.js +15 -0
  107. package/dist/ssr/actions/menu-rows.js.map +1 -0
  108. package/dist/ssr/actions/menu-sheet.js +138 -0
  109. package/dist/ssr/actions/menu-sheet.js.map +1 -0
  110. package/dist/ssr/actions/toolbar-messages.js +20 -0
  111. package/dist/ssr/actions/toolbar-messages.js.map +1 -0
  112. package/dist/ssr/chart-inspection.js +3 -0
  113. package/dist/ssr/chart-inspection.js.map +1 -0
  114. package/dist/ssr/chat/ChatComposer.js +604 -113
  115. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  116. package/dist/ssr/chat/chat-behavior.js +4 -0
  117. package/dist/ssr/chat/chat-behavior.js.map +1 -1
  118. package/dist/ssr/chat/chat-messages.js +33 -1
  119. package/dist/ssr/chat/chat-messages.js.map +1 -1
  120. package/dist/ssr/chat/command-search.js +173 -0
  121. package/dist/ssr/chat/command-search.js.map +1 -0
  122. package/dist/ssr/chat/composer-document.js +1 -1
  123. package/dist/ssr/chat/composer-document.js.map +1 -1
  124. package/dist/ssr/chat/index.js +2 -0
  125. package/dist/ssr/chat/index.js.map +1 -1
  126. package/dist/ssr/chat/reaction-people.js +15 -0
  127. package/dist/ssr/chat/reaction-people.js.map +1 -0
  128. package/dist/ssr/content/CalendarDayView.js +28 -3
  129. package/dist/ssr/content/CalendarDayView.js.map +1 -1
  130. package/dist/ssr/content/Chart.js +6 -15
  131. package/dist/ssr/content/Chart.js.map +1 -1
  132. package/dist/ssr/content/ChartSnapshotView.js +7 -10
  133. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  134. package/dist/ssr/content/MessageRow.js +98 -152
  135. package/dist/ssr/content/MessageRow.js.map +1 -1
  136. package/dist/ssr/content/ReactionBar.js +304 -0
  137. package/dist/ssr/content/ReactionBar.js.map +1 -0
  138. package/dist/ssr/content/chart-inspection-core.js +557 -0
  139. package/dist/ssr/content/chart-inspection-core.js.map +1 -0
  140. package/dist/ssr/content/chart-inspection.js +10 -445
  141. package/dist/ssr/content/chart-inspection.js.map +1 -1
  142. package/dist/ssr/content/chart-line-gaps.js +1 -1
  143. package/dist/ssr/content/chart-line-gaps.js.map +1 -1
  144. package/dist/ssr/content/chart-snapshot.js +1 -1
  145. package/dist/ssr/content/chart-snapshot.js.map +1 -1
  146. package/dist/ssr/content/index.js +1 -0
  147. package/dist/ssr/content/index.js.map +1 -1
  148. package/dist/ssr/feedback/dialog-core.js +135 -23
  149. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  150. package/dist/ssr/index.js +1 -0
  151. package/dist/ssr/index.js.map +1 -1
  152. package/dist/ssr/input-mode.js +40 -0
  153. package/dist/ssr/input-mode.js.map +1 -0
  154. package/dist/ssr/inputs/Combobox.js +4 -2
  155. package/dist/ssr/inputs/Combobox.js.map +1 -1
  156. package/dist/ssr/inputs/FileDropTarget.js +17 -5
  157. package/dist/ssr/inputs/FileDropTarget.js.map +1 -1
  158. package/dist/ssr/inputs/FileInputs.js +2 -2
  159. package/dist/ssr/inputs/FileInputs.js.map +1 -1
  160. package/dist/ssr/inputs/SelectChip.js +44 -11
  161. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  162. package/dist/ssr/inputs/emoji/EmojiPicker.js +12 -0
  163. package/dist/ssr/inputs/emoji/EmojiPicker.js.map +1 -1
  164. package/dist/ssr/inputs/file-drop.js.map +1 -1
  165. package/dist/ssr/layout/AppWorkspace.js +242 -105
  166. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  167. package/dist/ssr/layout/BottomSheet.js +8 -0
  168. package/dist/ssr/layout/BottomSheet.js.map +1 -1
  169. package/dist/ssr/layout/DetailPanel.js +112 -58
  170. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  171. package/dist/ssr/layout/Discussion.js +63 -36
  172. package/dist/ssr/layout/Discussion.js.map +1 -1
  173. package/dist/ssr/layout/TableOfContents.js +10 -2
  174. package/dist/ssr/layout/TableOfContents.js.map +1 -1
  175. package/dist/ssr/layout/app-workspace-controller.js +155 -23
  176. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  177. package/dist/ssr/layout/app-workspace-state.js +5 -1
  178. package/dist/ssr/layout/app-workspace-state.js.map +1 -1
  179. package/dist/ssr/layout/detail-panel-messages.js +35 -0
  180. package/dist/ssr/layout/detail-panel-messages.js.map +1 -0
  181. package/dist/ssr/layout/index.js +1 -1
  182. package/dist/ssr/layout/index.js.map +1 -1
  183. package/dist/ssr/surfaces/Avatar.js +20 -2
  184. package/dist/ssr/surfaces/Avatar.js.map +1 -1
  185. package/dist/ssr/surfaces/AvatarStack.js +286 -0
  186. package/dist/ssr/surfaces/AvatarStack.js.map +1 -0
  187. package/dist/ssr/surfaces/avatar-messages.js +8 -2
  188. package/dist/ssr/surfaces/avatar-messages.js.map +1 -1
  189. package/dist/ssr/surfaces/index.js +1 -0
  190. package/dist/ssr/surfaces/index.js.map +1 -1
  191. package/dist/styles.css +1 -1
  192. package/dist/types/actions/ContextMenu.d.ts +8 -0
  193. package/dist/types/actions/Dropdown.d.ts +12 -5
  194. package/dist/types/actions/GestureMenu.d.ts +6 -4
  195. package/dist/types/actions/Toolbar.d.ts +20 -0
  196. package/dist/types/actions/index.d.ts +1 -1
  197. package/dist/types/actions/menu-rows.d.ts +5 -0
  198. package/dist/types/actions/menu-sheet.d.ts +22 -0
  199. package/dist/types/actions/toolbar-messages.d.ts +8 -0
  200. package/dist/types/chart-inspection.d.ts +2 -0
  201. package/dist/types/chat/ChatComposer.d.ts +51 -2
  202. package/dist/types/chat/chat-behavior.d.ts +4 -0
  203. package/dist/types/chat/chat-messages.d.ts +17 -2
  204. package/dist/types/chat/command-search.d.ts +41 -0
  205. package/dist/types/chat/index.d.ts +3 -1
  206. package/dist/types/chat/reaction-people.d.ts +9 -0
  207. package/dist/types/content/Chart.d.ts +2 -2
  208. package/dist/types/content/MessageRow.d.ts +3 -10
  209. package/dist/types/content/ReactionBar.d.ts +32 -0
  210. package/dist/types/content/chart-inspection-core.d.ts +61 -0
  211. package/dist/types/content/chart-inspection.d.ts +4 -20
  212. package/dist/types/content/chart-snapshot.d.ts +1 -1
  213. package/dist/types/content/index.d.ts +2 -1
  214. package/dist/types/feedback/dialog-core.d.ts +16 -1
  215. package/dist/types/index.d.ts +1 -0
  216. package/dist/types/input-mode.d.ts +7 -0
  217. package/dist/types/inputs/FileDropTarget.d.ts +6 -3
  218. package/dist/types/inputs/SelectChip.d.ts +6 -0
  219. package/dist/types/inputs/file-drop.d.ts +2 -0
  220. package/dist/types/layout/AppWorkspace.d.ts +13 -1
  221. package/dist/types/layout/BottomSheet.d.ts +8 -0
  222. package/dist/types/layout/DetailPanel.d.ts +11 -0
  223. package/dist/types/layout/Discussion.d.ts +8 -0
  224. package/dist/types/layout/TableOfContents.d.ts +2 -0
  225. package/dist/types/layout/detail-panel-messages.d.ts +15 -0
  226. package/dist/types/layout/index.d.ts +1 -1
  227. package/dist/types/surfaces/Avatar.d.ts +12 -0
  228. package/dist/types/surfaces/AvatarStack.d.ts +41 -0
  229. package/dist/types/surfaces/avatar-messages.d.ts +3 -0
  230. package/dist/types/surfaces/index.d.ts +3 -1
  231. package/package.json +9 -4
@@ -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 { 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 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: 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":"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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":"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","ignoreList":[]}
@@ -28,6 +28,7 @@ import { suppressTextSelection } from "../internal/text-selection";
28
28
  import { useLocale } from "../intl/locale";
29
29
  import { useUiMessages } from "../intl/messages";
30
30
  import { createChartInspection } from "./chart-inspection";
31
+ import { closeChartInspectionOnOutside } from "./chart-inspection-core";
31
32
  import { lineGapsSvg } from "./chart-line-gaps";
32
33
  import { DEFAULT_MAP_VIEWPORT, normalizeMapViewport, panMapViewport, zoomMapViewport } from "./chart-map-viewport";
33
34
  import { useChartMessages } from "./chart-messages";
@@ -424,21 +425,11 @@ const Chart = props => {
424
425
  });
425
426
  onMount(() => {
426
427
  if (!containerRef) return;
427
- const outside = event => {
428
- if (event.target instanceof Node && !containerRef?.contains(event.target)) closeChartTooltip();
429
- };
430
- window.addEventListener("pointerdown", outside);
431
- const scroll = event => {
432
- if (event.target instanceof Node && chartTooltipRef?.contains(event.target)) return;
433
- closeChartTooltip();
434
- };
435
- window.addEventListener("scroll", scroll, true);
436
- window.addEventListener("resize", closeChartTooltip);
437
- onCleanup(() => {
438
- window.removeEventListener("pointerdown", outside);
439
- window.removeEventListener("scroll", scroll, true);
440
- window.removeEventListener("resize", closeChartTooltip);
441
- });
428
+ onCleanup(closeChartInspectionOnOutside({
429
+ container: () => containerRef,
430
+ tooltip: () => chartTooltipRef,
431
+ close: closeChartTooltip
432
+ }));
442
433
  });
443
434
  const chartStyle = () => props.style ?? (props.kind === "stateTimeline" ? {
444
435
  height: `${stateTimelineHeight(props.rows.length, props.legend !== false)}px`