@k2b/ui 0.28.0 → 0.30.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 (278) hide show
  1. package/README.md +1 -1
  2. package/dist/base.css +2 -2
  3. package/dist/browser/actions/ContextMenu.js +5 -0
  4. package/dist/browser/actions/ContextMenu.js.map +1 -1
  5. package/dist/browser/actions/DragAndDrop.js +89 -0
  6. package/dist/browser/actions/DragAndDrop.js.map +1 -0
  7. package/dist/browser/actions/Dropdown.js +6 -3
  8. package/dist/browser/actions/Dropdown.js.map +1 -1
  9. package/dist/browser/actions/FilterChip.js +137 -7
  10. package/dist/browser/actions/FilterChip.js.map +1 -1
  11. package/dist/browser/actions/GestureMenu.js +26 -3
  12. package/dist/browser/actions/GestureMenu.js.map +1 -1
  13. package/dist/browser/actions/SegmentedControl.js +5 -9
  14. package/dist/browser/actions/SegmentedControl.js.map +1 -1
  15. package/dist/browser/actions/SpotlightSearch.js +6 -3
  16. package/dist/browser/actions/SpotlightSearch.js.map +1 -1
  17. package/dist/browser/actions/Tabs.js +5 -2
  18. package/dist/browser/actions/Tabs.js.map +1 -1
  19. package/dist/browser/actions/ViewTabs.js +294 -0
  20. package/dist/browser/actions/ViewTabs.js.map +1 -0
  21. package/dist/browser/actions/drag-and-drop-messages.js +75 -0
  22. package/dist/browser/actions/drag-and-drop-messages.js.map +1 -0
  23. package/dist/browser/actions/drag-and-drop.js +692 -0
  24. package/dist/browser/actions/drag-and-drop.js.map +1 -0
  25. package/dist/browser/actions/filter-messages.js +6 -2
  26. package/dist/browser/actions/filter-messages.js.map +1 -1
  27. package/dist/browser/actions/index.js +3 -1
  28. package/dist/browser/actions/index.js.map +1 -1
  29. package/dist/browser/chat/ChatComposer.js +1229 -605
  30. package/dist/browser/chat/ChatComposer.js.map +1 -1
  31. package/dist/browser/chat/ChatDecision.js +814 -0
  32. package/dist/browser/chat/ChatDecision.js.map +1 -0
  33. package/dist/browser/chat/ChatPrimitives.js +292 -153
  34. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  35. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  36. package/dist/browser/chat/chat-messages.js +14 -0
  37. package/dist/browser/chat/chat-messages.js.map +1 -1
  38. package/dist/browser/chat/command-search.js +35 -17
  39. package/dist/browser/chat/command-search.js.map +1 -1
  40. package/dist/browser/chat/index.js +10 -3
  41. package/dist/browser/chat/index.js.map +1 -1
  42. package/dist/browser/chat/types.js.map +1 -1
  43. package/dist/browser/content/Calendar.js +146 -119
  44. package/dist/browser/content/Calendar.js.map +1 -1
  45. package/dist/browser/content/CalendarWeekView.js +291 -266
  46. package/dist/browser/content/CalendarWeekView.js.map +1 -1
  47. package/dist/browser/content/Chart.js +54 -71
  48. package/dist/browser/content/Chart.js.map +1 -1
  49. package/dist/browser/content/DataTable.js +224 -155
  50. package/dist/browser/content/DataTable.js.map +1 -1
  51. package/dist/browser/content/FileBrowser.js +2 -2
  52. package/dist/browser/content/FileBrowser.js.map +1 -1
  53. package/dist/browser/content/FileTree.js +42 -36
  54. package/dist/browser/content/FileTree.js.map +1 -1
  55. package/dist/browser/content/FileTypeIcon.js +72 -0
  56. package/dist/browser/content/FileTypeIcon.js.map +1 -0
  57. package/dist/browser/content/FileView.js +2 -2
  58. package/dist/browser/content/FileView.js.map +1 -1
  59. package/dist/browser/content/ReferenceChip.js +162 -0
  60. package/dist/browser/content/ReferenceChip.js.map +1 -0
  61. package/dist/browser/content/calendar-pointer.js +9 -0
  62. package/dist/browser/content/calendar-pointer.js.map +1 -1
  63. package/dist/browser/content/calendar-time-view.js +6 -3
  64. package/dist/browser/content/calendar-time-view.js.map +1 -1
  65. package/dist/browser/content/data-table-messages.js +4 -2
  66. package/dist/browser/content/data-table-messages.js.map +1 -1
  67. package/dist/browser/content/index.js +2 -0
  68. package/dist/browser/content/index.js.map +1 -1
  69. package/dist/browser/feedback/MovedHint.js +197 -0
  70. package/dist/browser/feedback/MovedHint.js.map +1 -0
  71. package/dist/browser/feedback/dialog-core.js +66 -9
  72. package/dist/browser/feedback/dialog-core.js.map +1 -1
  73. package/dist/browser/feedback/index.js +1 -0
  74. package/dist/browser/feedback/index.js.map +1 -1
  75. package/dist/browser/feedback/prompts.js +6 -1
  76. package/dist/browser/feedback/prompts.js.map +1 -1
  77. package/dist/browser/inputs/DatePicker.js +337 -212
  78. package/dist/browser/inputs/DatePicker.js.map +1 -1
  79. package/dist/browser/inputs/date-picker.js +59 -5
  80. package/dist/browser/inputs/date-picker.js.map +1 -1
  81. package/dist/browser/intl/messages.js +12 -0
  82. package/dist/browser/intl/messages.js.map +1 -1
  83. package/dist/browser/intl/weekend.js +39 -0
  84. package/dist/browser/intl/weekend.js.map +1 -0
  85. package/dist/browser/layout/AppOverview.js +1 -2
  86. package/dist/browser/layout/AppOverview.js.map +1 -1
  87. package/dist/browser/layout/AppWorkspace.js +947 -531
  88. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  89. package/dist/browser/layout/PageTitle.js +3 -2
  90. package/dist/browser/layout/PageTitle.js.map +1 -1
  91. package/dist/browser/layout/PanelDialog.js +88 -86
  92. package/dist/browser/layout/PanelDialog.js.map +1 -1
  93. package/dist/browser/layout/ResizeSeparator.js +81 -0
  94. package/dist/browser/layout/ResizeSeparator.js.map +1 -0
  95. package/dist/browser/layout/SettingsModal.js +2 -2
  96. package/dist/browser/layout/SettingsModal.js.map +1 -1
  97. package/dist/browser/layout/SidebarSwitcher.js +19 -11
  98. package/dist/browser/layout/SidebarSwitcher.js.map +1 -1
  99. package/dist/browser/layout/TabBar.js +16 -13
  100. package/dist/browser/layout/TabBar.js.map +1 -1
  101. package/dist/browser/layout/app-host-width.js +44 -0
  102. package/dist/browser/layout/app-host-width.js.map +1 -0
  103. package/dist/browser/layout/app-workspace-controller.js +337 -44
  104. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  105. package/dist/browser/layout/index.js +4 -1
  106. package/dist/browser/layout/index.js.map +1 -1
  107. package/dist/browser/layout/resize-separator.js +90 -0
  108. package/dist/browser/layout/resize-separator.js.map +1 -0
  109. package/dist/browser/layout/workspace-messages.js +12 -2
  110. package/dist/browser/layout/workspace-messages.js.map +1 -1
  111. package/dist/browser/surfaces/LinkCard.js +1 -1
  112. package/dist/browser/surfaces/LinkCard.js.map +1 -1
  113. package/dist/browser/surfaces/Placeholder.js +45 -11
  114. package/dist/browser/surfaces/Placeholder.js.map +1 -1
  115. package/dist/browser/surfaces/StatCell.js +23 -0
  116. package/dist/browser/surfaces/StatCell.js.map +1 -1
  117. package/dist/browser/widgets/Widget.js +1 -1
  118. package/dist/browser/widgets/Widget.js.map +1 -1
  119. package/dist/ssr/actions/ContextMenu.js +5 -0
  120. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  121. package/dist/ssr/actions/DragAndDrop.js +63 -0
  122. package/dist/ssr/actions/DragAndDrop.js.map +1 -0
  123. package/dist/ssr/actions/Dropdown.js +5 -2
  124. package/dist/ssr/actions/Dropdown.js.map +1 -1
  125. package/dist/ssr/actions/FilterChip.js +59 -7
  126. package/dist/ssr/actions/FilterChip.js.map +1 -1
  127. package/dist/ssr/actions/GestureMenu.js +26 -3
  128. package/dist/ssr/actions/GestureMenu.js.map +1 -1
  129. package/dist/ssr/actions/SegmentedControl.js +1 -2
  130. package/dist/ssr/actions/SegmentedControl.js.map +1 -1
  131. package/dist/ssr/actions/SpotlightSearch.js +2 -2
  132. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  133. package/dist/ssr/actions/Tabs.js +2 -2
  134. package/dist/ssr/actions/Tabs.js.map +1 -1
  135. package/dist/ssr/actions/ViewTabs.js +211 -0
  136. package/dist/ssr/actions/ViewTabs.js.map +1 -0
  137. package/dist/ssr/actions/drag-and-drop-messages.js +75 -0
  138. package/dist/ssr/actions/drag-and-drop-messages.js.map +1 -0
  139. package/dist/ssr/actions/drag-and-drop.js +692 -0
  140. package/dist/ssr/actions/drag-and-drop.js.map +1 -0
  141. package/dist/ssr/actions/filter-messages.js +6 -2
  142. package/dist/ssr/actions/filter-messages.js.map +1 -1
  143. package/dist/ssr/actions/index.js +3 -1
  144. package/dist/ssr/actions/index.js.map +1 -1
  145. package/dist/ssr/chat/ChatComposer.js +668 -136
  146. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  147. package/dist/ssr/chat/ChatDecision.js +479 -0
  148. package/dist/ssr/chat/ChatDecision.js.map +1 -0
  149. package/dist/ssr/chat/ChatPrimitives.js +95 -24
  150. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  151. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  152. package/dist/ssr/chat/chat-messages.js +14 -0
  153. package/dist/ssr/chat/chat-messages.js.map +1 -1
  154. package/dist/ssr/chat/command-search.js +35 -17
  155. package/dist/ssr/chat/command-search.js.map +1 -1
  156. package/dist/ssr/chat/index.js +10 -3
  157. package/dist/ssr/chat/index.js.map +1 -1
  158. package/dist/ssr/chat/types.js.map +1 -1
  159. package/dist/ssr/content/Calendar.js +112 -103
  160. package/dist/ssr/content/Calendar.js.map +1 -1
  161. package/dist/ssr/content/CalendarWeekView.js +42 -28
  162. package/dist/ssr/content/CalendarWeekView.js.map +1 -1
  163. package/dist/ssr/content/Chart.js +19 -23
  164. package/dist/ssr/content/Chart.js.map +1 -1
  165. package/dist/ssr/content/DataTable.js +78 -31
  166. package/dist/ssr/content/DataTable.js.map +1 -1
  167. package/dist/ssr/content/FileBrowser.js +2 -2
  168. package/dist/ssr/content/FileBrowser.js.map +1 -1
  169. package/dist/ssr/content/FileTree.js +21 -14
  170. package/dist/ssr/content/FileTree.js.map +1 -1
  171. package/dist/ssr/content/FileTypeIcon.js +50 -0
  172. package/dist/ssr/content/FileTypeIcon.js.map +1 -0
  173. package/dist/ssr/content/FileView.js +2 -2
  174. package/dist/ssr/content/FileView.js.map +1 -1
  175. package/dist/ssr/content/ReferenceChip.js +121 -0
  176. package/dist/ssr/content/ReferenceChip.js.map +1 -0
  177. package/dist/ssr/content/calendar-pointer.js +9 -0
  178. package/dist/ssr/content/calendar-pointer.js.map +1 -1
  179. package/dist/ssr/content/calendar-time-view.js +6 -3
  180. package/dist/ssr/content/calendar-time-view.js.map +1 -1
  181. package/dist/ssr/content/data-table-messages.js +4 -2
  182. package/dist/ssr/content/data-table-messages.js.map +1 -1
  183. package/dist/ssr/content/index.js +2 -0
  184. package/dist/ssr/content/index.js.map +1 -1
  185. package/dist/ssr/feedback/MovedHint.js +166 -0
  186. package/dist/ssr/feedback/MovedHint.js.map +1 -0
  187. package/dist/ssr/feedback/dialog-core.js +66 -9
  188. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  189. package/dist/ssr/feedback/index.js +1 -0
  190. package/dist/ssr/feedback/index.js.map +1 -1
  191. package/dist/ssr/feedback/prompts.js +6 -1
  192. package/dist/ssr/feedback/prompts.js.map +1 -1
  193. package/dist/ssr/inputs/DatePicker.js +138 -69
  194. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  195. package/dist/ssr/inputs/date-picker.js +59 -5
  196. package/dist/ssr/inputs/date-picker.js.map +1 -1
  197. package/dist/ssr/intl/messages.js +12 -0
  198. package/dist/ssr/intl/messages.js.map +1 -1
  199. package/dist/ssr/intl/weekend.js +39 -0
  200. package/dist/ssr/intl/weekend.js.map +1 -0
  201. package/dist/ssr/layout/AppOverview.js +1 -2
  202. package/dist/ssr/layout/AppOverview.js.map +1 -1
  203. package/dist/ssr/layout/AppWorkspace.js +457 -116
  204. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  205. package/dist/ssr/layout/PageTitle.js +3 -2
  206. package/dist/ssr/layout/PageTitle.js.map +1 -1
  207. package/dist/ssr/layout/PanelDialog.js +7 -6
  208. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  209. package/dist/ssr/layout/ResizeSeparator.js +45 -0
  210. package/dist/ssr/layout/ResizeSeparator.js.map +1 -0
  211. package/dist/ssr/layout/SettingsModal.js +2 -2
  212. package/dist/ssr/layout/SettingsModal.js.map +1 -1
  213. package/dist/ssr/layout/SidebarSwitcher.js +19 -11
  214. package/dist/ssr/layout/SidebarSwitcher.js.map +1 -1
  215. package/dist/ssr/layout/TabBar.js +2 -2
  216. package/dist/ssr/layout/TabBar.js.map +1 -1
  217. package/dist/ssr/layout/app-host-width.js +44 -0
  218. package/dist/ssr/layout/app-host-width.js.map +1 -0
  219. package/dist/ssr/layout/app-workspace-controller.js +337 -44
  220. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  221. package/dist/ssr/layout/index.js +4 -1
  222. package/dist/ssr/layout/index.js.map +1 -1
  223. package/dist/ssr/layout/resize-separator.js +90 -0
  224. package/dist/ssr/layout/resize-separator.js.map +1 -0
  225. package/dist/ssr/layout/workspace-messages.js +12 -2
  226. package/dist/ssr/layout/workspace-messages.js.map +1 -1
  227. package/dist/ssr/surfaces/LinkCard.js +1 -1
  228. package/dist/ssr/surfaces/LinkCard.js.map +1 -1
  229. package/dist/ssr/surfaces/Placeholder.js +25 -6
  230. package/dist/ssr/surfaces/Placeholder.js.map +1 -1
  231. package/dist/ssr/surfaces/StatCell.js +23 -0
  232. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  233. package/dist/ssr/widgets/Widget.js +1 -1
  234. package/dist/ssr/widgets/Widget.js.map +1 -1
  235. package/dist/styles.css +1 -1
  236. package/dist/types/actions/ContextMenu.d.ts +1 -0
  237. package/dist/types/actions/DragAndDrop.d.ts +29 -0
  238. package/dist/types/actions/Dropdown.d.ts +4 -0
  239. package/dist/types/actions/FilterChip.d.ts +22 -0
  240. package/dist/types/actions/ViewTabs.d.ts +30 -0
  241. package/dist/types/actions/drag-and-drop-messages.d.ts +35 -0
  242. package/dist/types/actions/drag-and-drop.d.ts +36 -0
  243. package/dist/types/actions/filter-messages.d.ts +2 -0
  244. package/dist/types/actions/index.d.ts +6 -2
  245. package/dist/types/chat/ChatComposer.d.ts +71 -1
  246. package/dist/types/chat/ChatDecision.d.ts +149 -0
  247. package/dist/types/chat/ChatPrimitives.d.ts +14 -1
  248. package/dist/types/chat/ChatTimeline.d.ts +2 -1
  249. package/dist/types/chat/chat-messages.d.ts +7 -0
  250. package/dist/types/chat/command-search.d.ts +5 -0
  251. package/dist/types/chat/index.d.ts +28 -5
  252. package/dist/types/chat/types.d.ts +54 -1
  253. package/dist/types/content/Chart.d.ts +9 -3
  254. package/dist/types/content/DataTable.d.ts +3 -0
  255. package/dist/types/content/FileTypeIcon.d.ts +27 -0
  256. package/dist/types/content/ReferenceChip.d.ts +49 -0
  257. package/dist/types/content/calendar-pointer.d.ts +6 -0
  258. package/dist/types/content/data-table-messages.d.ts +1 -0
  259. package/dist/types/content/index.d.ts +3 -0
  260. package/dist/types/feedback/MovedHint.d.ts +25 -0
  261. package/dist/types/feedback/dialog-core.d.ts +5 -2
  262. package/dist/types/feedback/index.d.ts +2 -0
  263. package/dist/types/feedback/prompts.d.ts +2 -0
  264. package/dist/types/inputs/DatePicker.d.ts +7 -0
  265. package/dist/types/inputs/date-picker.d.ts +25 -1
  266. package/dist/types/intl/messages.d.ts +6 -0
  267. package/dist/types/intl/weekend.d.ts +12 -0
  268. package/dist/types/layout/AppWorkspace.d.ts +48 -10
  269. package/dist/types/layout/ResizeSeparator.d.ts +9 -0
  270. package/dist/types/layout/TabBar.d.ts +7 -0
  271. package/dist/types/layout/app-host-width.d.ts +6 -0
  272. package/dist/types/layout/app-workspace-controller.d.ts +2 -0
  273. package/dist/types/layout/index.d.ts +5 -2
  274. package/dist/types/layout/resize-separator.d.ts +18 -0
  275. package/dist/types/layout/workspace-messages.d.ts +5 -0
  276. package/dist/types/surfaces/Placeholder.d.ts +2 -1
  277. package/dist/types/surfaces/StatCell.d.ts +6 -0
  278. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["content/calendar-time-view.tsx"],"sourcesContent":["import { dates as calendar, type DateContext } from \"@k2b/stdlib\";\nimport { createEffect, createMemo, createSignal, For, on, onCleanup, onMount, Show, untrack } from \"solid-js\";\nimport { announce } from \"../feedback/announce\";\nimport type { CalendarController, CalendarEvent, CalendarEventTimeChange, CalendarExternalDrag, CalendarLabels } from \"./Calendar\";\nimport {\n addDayKeys,\n buildDays,\n type CalendarDayHours,\n clockAt,\n DAY_MINUTES,\n type DayEntry,\n type DayGap,\n type DayGeometry,\n type DayLane,\n type DayModel,\n type DaySpan,\n dayKeyOf,\n dayLanes,\n dayMinuteAt,\n dayTopTerms,\n dayYTerms,\n freeGaps,\n GAP_LABEL_MINUTES,\n GAP_LONG_MINUTES,\n gapProposal,\n instantInDay,\n instantsInDay,\n minuteInDay,\n readDayGeometry,\n resizedInDay,\n snapMinutes,\n subtractTerms,\n termsCss,\n wakeMinutes,\n} from \"./calendar-days\";\nimport { useCalendarMessages } from \"./calendar-messages\";\nimport { startCalendarPointerSession } from \"./calendar-pointer\";\nimport {\n type CalendarOwner,\n type CalendarStop,\n EventChip,\n eventHref,\n type NormalizedEvent,\n ownerDateConfig,\n parseDate,\n placeCalendarPopover,\n validDate,\n} from \"./calendar-shared\";\n\n/**\n * Shared state and parts of the day and week views with `dayHours`: the time model of the loaded days, the selection,\n * the quick create, pointer gestures, and the pieces both views draw into a day's timeline.\n */\n\nexport type TodayDirection = \"left\" | \"right\" | \"up\" | \"down\" | \"\";\n\n/** What the header and the calendar's controller ask of the active day or week view. */\nexport type TimeViewHandle = {\n /** The first and last day the reader sees. */\n visibleKeys: () => { first: string; last: string };\n /** Moves by a day (day view) or a week (week view) when that is loaded; `false` leaves it to the header's link. */\n step: (direction: -1 | 1) => boolean;\n /** Shows a day when it is loaded; `false` leaves it to navigation. */\n goTo: (key: string) => boolean;\n /** Shows today and now when they are loaded. */\n today: () => boolean;\n todayDirection: () => TodayDirection;\n controller: CalendarController;\n};\n\nexport type TimeViewProps = {\n owner: CalendarOwner;\n view: \"day\" | \"week\";\n date: Date;\n now: Date;\n events: readonly CalendarEvent[];\n labels: Required<CalendarLabels>;\n hours: CalendarDayHours;\n register: (handle: TimeViewHandle | null) => void;\n};\n\nexport type TimeSelection = { key: string; start?: number; end?: number };\n\ntype Ghost = {\n key: string;\n start: number;\n end: number;\n title: string;\n time: string;\n colorHex?: string;\n color?: string;\n warn?: boolean;\n fit?: { fits: boolean; text: string };\n};\n\ntype QuickCreate = {\n range: CalendarEventTimeChange;\n anchor: Element | DOMRect;\n create?: string;\n key: string;\n start?: number;\n end?: number;\n};\n\nexport type BodyHit = { key: string; element: HTMLElement; geometry: DayGeometry; minute: number };\n\nconst COLOR_TOKENS: Record<string, string> = {\n blue: \"#3b82f6\",\n emerald: \"#10b981\",\n amber: \"#f59e0b\",\n red: \"#ef4444\",\n violet: \"#8b5cf6\",\n cyan: \"#06b6d4\",\n zinc: \"#a1a1aa\",\n};\nexport const eventAccent = (event: Pick<CalendarEvent, \"color\" | \"colorHex\">): string =>\n event.colorHex ?? COLOR_TOKENS[event.color ?? \"blue\"]!;\n\n/** Minimum minutes an overlap counts for a band, about the height of its title. */\nconst LANE_MINUTES = 20;\n\n/** Swallows the click a browser sends right after a gesture ends, never the next one. */\nexport const swallowNextClick = () => {\n const stop = (event: Event) => {\n event.stopPropagation();\n event.preventDefault();\n };\n window.addEventListener(\"click\", stop, { capture: true, once: true });\n window.setTimeout(() => window.removeEventListener(\"click\", stop, { capture: true }), 120);\n};\n\nexport const createTimeView = (props: TimeViewProps) => {\n const messages = useCalendarMessages();\n const dateConfig = createMemo((): DateContext => ownerDateConfig(props.owner));\n const hours = () => props.hours;\n const wake = createMemo(() => wakeMinutes(props.hours));\n const keyOf = (date: Date) => calendar.formatDateKey(date, dateConfig());\n const parseKey = (key: string) => calendar.parseCalendarDate(key, dateConfig());\n\n /** The loaded days: the host's range, or the day or the week of the date. */\n const range = createMemo(\n () => {\n const context = dateConfig();\n const loaded = props.owner.range;\n if (loaded) {\n const from = parseDate(loaded.from, context);\n const to = parseDate(loaded.to, context);\n if (validDate(from) && validDate(to)) {\n const first = calendar.formatDateKey(from, context);\n const last = calendar.formatDateKey(new Date(Math.max(from.getTime(), to.getTime() - 1)), context);\n return { first, last };\n }\n }\n const key = calendar.formatDateKey(props.date, context);\n if (props.view === \"day\") return { first: key, last: key };\n const start = calendar.formatDateKey(calendar.startOfWeek(props.date, context), context);\n return { first: start, last: addDayKeys(start, 6) };\n },\n undefined,\n { equals: (left, right) => left.first === right.first && left.last === right.last },\n );\n const anchorKey = createMemo(() => keyOf(props.date));\n\n /** Checkbox states the reader just set, shown until the host's events agree or drop the entry. */\n const [checks, setChecks] = createSignal<Record<string, boolean>>({});\n const [justChecked, setJustChecked] = createSignal<ReadonlySet<string>>(new Set());\n createEffect(\n on(\n () => props.events,\n (events) => {\n const current = untrack(checks);\n const ids = Object.keys(current);\n if (ids.length === 0) return;\n const next = { ...current };\n for (const id of ids) {\n const event = events.find((candidate) => candidate.id === id);\n if (!event || event.checked === current[id]) delete next[id];\n }\n setChecks(next);\n },\n { defer: true },\n ),\n );\n const checkedOf = (event: CalendarEvent): boolean | undefined =>\n event.checked === undefined ? undefined : (checks()[event.id] ?? event.checked);\n /** What Space on an entry's chip does: check its box, where it has one the reader may change. */\n const checkOf = (event: CalendarEvent) =>\n checkedOf(event) !== undefined && props.owner.onEventCheck ? () => toggleCheck(event) : undefined;\n const forgetJustChecked = (id: string) =>\n setJustChecked((value) => {\n if (!value.has(id)) return value;\n const rest = new Set(value);\n rest.delete(id);\n return rest;\n });\n /** Today's day for a moment after its last open to-do was checked off, which its heading celebrates. */\n const [cheered, setCheered] = createSignal<string | null>(null);\n let cheerTimer = 0;\n // The server renders the view too, and has no window.\n onCleanup(() => clearTimeout(cheerTimer));\n /** The entries with a checkbox on a day: its deadlines, the to-dos planned into its hours, and the ones due all day. */\n const dueOn = (key: string) => {\n const model = dayOf(key);\n return [\n ...model.markers.map((marker) => marker.item),\n ...model.bands.map((band) => band.item),\n ...model.spans.filter((span) => span.marker && span.firstKey === key).map((span) => span.item),\n ].filter((item) => item.checked !== undefined);\n };\n const toggleCheck = (event: CalendarEvent) => {\n const current = checkedOf(event);\n if (current === undefined || !props.owner.onEventCheck) return;\n const next = !current;\n setChecks((value) => ({ ...value, [event.id]: next }));\n if (next) {\n setJustChecked((value) => new Set([...value, event.id]));\n window.setTimeout(() => forgetJustChecked(event.id), 1100);\n const today = nowKey();\n const due = dueOn(today);\n if (due.includes(event) && due.every((item) => checkedOf(item))) {\n // The heading shows it only for a moment, so a screen reader hears it once instead.\n announce(messages().calendarAllDone);\n setCheered(today);\n window.clearTimeout(cheerTimer);\n cheerTimer = window.setTimeout(() => setCheered(null), 2200);\n }\n } else setCheered(null);\n // A change the host refuses puts the box back as it was.\n void Promise.resolve(props.owner.onEventCheck(event, next)).catch(() => {\n forgetJustChecked(event.id);\n if (next) setCheered(null);\n setChecks((value) => {\n if (value[event.id] !== next) return value;\n const rest = { ...value };\n delete rest[event.id];\n return rest;\n });\n });\n };\n\n const entries = createMemo((): DayEntry<CalendarEvent>[] => {\n const context = dateConfig();\n return props.events.flatMap((event) => {\n const start = parseDate(event.start, context);\n if (!validDate(start)) return [];\n const marker = event.display === \"marker\";\n const parsedEnd = event.end ? parseDate(event.end, context) : null;\n let end = parsedEnd && validDate(parsedEnd) && parsedEnd > start ? parsedEnd : null;\n if (!end)\n end = event.allDay\n ? calendar.addDays(calendar.startOfDay(start, context), 1, context)\n : marker\n ? start\n : new Date(start.getTime() + 3_600_000);\n return [{ item: event, start, end, allDay: Boolean(event.allDay), marker }];\n });\n });\n const days = createMemo(() => buildDays(range().first, range().last, entries(), props.hours, dateConfig()));\n const emptyModel = (key: string): DayModel<CalendarEvent> => ({ key, bands: [], markers: [], spans: [], night: false, empty: true });\n const dayOf = (key: string) => days().get(key) ?? emptyModel(key);\n const sourceOf = createMemo(() => new Map(entries().map((entry) => [entry.item, entry])));\n\n /** The day that holds now: before the start hour still the day before. */\n const nowKey = createMemo(() => dayKeyOf(props.now, props.hours, dateConfig()));\n const nowMinute = createMemo(() => minuteInDay(nowKey(), props.now, props.hours, dateConfig()));\n /** Now as a minute of a day: past days lie wholly before it, coming days after. */\n const nowIn = (key: string) => (key === nowKey() ? nowMinute() : key < nowKey() ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY);\n const calendarToday = createMemo(() => keyOf(props.now));\n const clock = (minute: number) => clockAt(minute, props.hours);\n const duration = (minutes: number) => messages().calendarDuration({ minutes: Math.max(1, Math.round(minutes)) });\n const instant = (key: string, minute: number) => instantInDay(key, minute, props.hours, dateConfig());\n const slot = (key: string, start: number, end: number) => instantsInDay(key, start, end, props.hours, dateConfig());\n const dayStartMinute = (hour: number) => Math.max(0, (hour - props.hours[0]) * 60);\n\n /** A day's timed piece as the event chip reads it. */\n const normalized = (event: CalendarEvent, key: string): NormalizedEvent => {\n const source = sourceOf().get(event);\n const start = source?.start ?? parseDate(event.start, dateConfig());\n const end = source?.end ?? start;\n return { ...event, startDate: start, endDate: end, sourceStartDate: start, sourceEndDate: end, dayKey: key };\n };\n\n const [selection, setSelection] = createSignal<TimeSelection | null>(null);\n const [touchDraft, setTouchDraft] = createSignal<{ key: string; start: number; end: number } | null>(null);\n const [activeKey, setActiveKey] = createSignal<string | null>(null);\n const [ghost, setGhost] = createSignal<Ghost | null>(null);\n const [movingId, setMovingId] = createSignal(\"\");\n const [dragging, setDragging] = createSignal<\"\" | \"move\" | \"start\" | \"end\" | \"draw\" | \"external\">(\"\");\n const [nightOverrides, setNightOverrides] = createSignal<Record<string, boolean>>({});\n const [quick, setQuick] = createSignal<QuickCreate | null>(null);\n\n const rangeOfSelection = (value: TimeSelection): CalendarEventTimeChange =>\n value.start === undefined || value.end === undefined\n ? { start: parseKey(value.key), end: calendar.addDays(parseKey(value.key), 1, dateConfig()), allDay: true }\n : { ...slot(value.key, value.start, value.end), allDay: false };\n createEffect(on(selection, (value) => props.owner.onSelectionChange?.(value ? rangeOfSelection(value) : null), { defer: true }));\n onCleanup(() => {\n if (untrack(selection)) props.owner.onSelectionChange?.(null);\n });\n\n // Body elements of the days on screen, for pointer positions.\n const bodies = new Map<string, { element: HTMLElement; expanded: () => boolean }>();\n const registerBody = (key: string, element: HTMLElement, expanded: () => boolean) => {\n bodies.set(key, { element, expanded });\n onCleanup(() => {\n if (bodies.get(key)?.element === element) bodies.delete(key);\n });\n };\n const bodyAt = (clientX: number, clientY: number): BodyHit | null => {\n for (const [key, body] of bodies) {\n if (!body.element.isConnected) continue;\n const rect = body.element.getBoundingClientRect();\n if (clientX < rect.left || clientX >= rect.right || clientY < rect.top || clientY >= rect.bottom) continue;\n const geometry = readDayGeometry(body.element, wake(), body.expanded());\n return { key, element: body.element, geometry, minute: dayMinuteAt(geometry, clientY - rect.top) };\n }\n return null;\n };\n const limitOf = (key: string) => (bodies.get(key)?.expanded() ? DAY_MINUTES : wake());\n const nightOpen = (key: string, model: DayModel<CalendarEvent>) => nightOverrides()[key] ?? model.night;\n const setNight = (key: string, open: boolean) => setNightOverrides((value) => ({ ...value, [key]: open }));\n\n /** The gap under a minute while dragging, and whether `need` minutes fit it; the gap shows \"fits\" or how much is missing. */\n const fitAt = (key: string, minute: number, need: number, span?: { start: number; end: number }) => {\n const gap = freeGaps(dayOf(key).bands, wake(), Number.NEGATIVE_INFINITY).find(\n (candidate) => minute >= candidate.start && minute < candidate.end,\n );\n if (!gap) return null;\n const fits = gap.end - gap.start >= need;\n if (fits && span && (span.start < gap.start || span.end > gap.end)) return null;\n return {\n gap,\n fits,\n text: fits ? messages().calendarFits : messages().calendarTooShort({ duration: duration(need - (gap.end - gap.start)) }),\n };\n };\n const [gapHit, setGapHit] = createSignal<{ key: string; start: number; fits: boolean; text: string } | null>(null);\n const overlapAt = (key: string, start: number, end: number, except?: string) =>\n dayOf(key).bands.find((band) => band.item.id !== except && band.start < end && band.end > start)?.item ?? null;\n\n const openQuickCreate = (key: string, start: number | undefined, end: number | undefined, anchor: Element | DOMRect, create?: string) => {\n const range = rangeOfSelection({ key, start, end });\n setTouchDraft(null);\n if (!props.owner.renderQuickCreate) {\n props.owner.onSlotActivate?.(range);\n return;\n }\n setSelection({ key, start, end });\n setQuick({ range, anchor, create, key, start, end });\n };\n const canCreate = () => Boolean(props.owner.renderQuickCreate || props.owner.onSlotActivate);\n\n /** The time a new entry takes: the selection, today's next full hour while today shows, else 09:00 of the first day. */\n const createTarget = (visible: { first: string; last: string }): { key: string; start: number; end: number } => {\n const current = selection();\n if (current && current.start !== undefined && current.end !== undefined)\n return { key: current.key, start: current.start, end: current.end };\n const nine = dayStartMinute(9);\n const nextHour = (key: string) => {\n const minute = Math.ceil((nowMinute() + 1) / 60) * 60;\n return key === nowKey() ? (minute <= wake() - 60 ? minute : null) : nine;\n };\n let key: string;\n let start: number | null;\n if (current) {\n key = current.key;\n start = key === nowKey() ? nextHour(key) : nine;\n } else if (nowKey() >= visible.first && nowKey() <= visible.last) {\n key = nowKey();\n start = nextHour(key);\n } else {\n key = visible.first;\n start = nine;\n }\n if (start === null) {\n key = addDayKeys(key, 1);\n start = nine;\n }\n return { key, start, end: start + 60 };\n };\n\n // Pointer gestures: moving and resizing bands and markers, drawing a new event, and dragging entries in.\n let cancelGesture: (() => void) | undefined;\n onCleanup(() => cancelGesture?.());\n const step = (event: { shiftKey: boolean }) => (event.shiftKey ? 5 : 15);\n const shiftHeld = { current: false };\n const trackShift = (event: KeyboardEvent) => {\n shiftHeld.current = event.shiftKey;\n };\n onMount(() => {\n window.addEventListener(\"keydown\", trackShift, true);\n window.addEventListener(\"keyup\", trackShift, true);\n onCleanup(() => {\n window.removeEventListener(\"keydown\", trackShift, true);\n window.removeEventListener(\"keyup\", trackShift, true);\n });\n });\n const endGesture = () => {\n setGhost(null);\n setGapHit(null);\n setMovingId(\"\");\n setDragging(\"\");\n };\n\n const startMove = (pointerEvent: PointerEvent, event: CalendarEvent, key: string, start: number, end: number, scroller?: HTMLElement) => {\n const marker = event.display === \"marker\";\n if (!props.owner.onEventDrop) return;\n const body = bodies.get(key);\n if (!body) return;\n const rect = body.element.getBoundingClientRect();\n const geometry = readDayGeometry(body.element, wake(), body.expanded());\n const grab = dayMinuteAt(geometry, pointerEvent.clientY - rect.top) - start;\n const length = end - start;\n cancelGesture?.();\n cancelGesture = startCalendarPointerSession({\n event: pointerEvent,\n scrollContainer: scroller,\n resolve: (clientX, clientY) => {\n const hit = bodyAt(clientX, clientY);\n if (!hit) return null;\n const limit = limitOf(hit.key);\n const from = Math.max(\n 0,\n Math.min(limit - Math.max(length, 15), snapMinutes(hit.minute - grab, step({ shiftKey: shiftHeld.current }))),\n );\n return { key: hit.key, start: from, end: from + length };\n },\n onActivate: () => {\n setMovingId(event.id);\n setDragging(\"move\");\n setSelection(null);\n },\n onPreview: (next) => {\n const clash = marker ? null : overlapAt(next.key, next.start, next.end, event.id);\n const fit = marker ? null : fitAt(next.key, next.start + (next.end - next.start) / 2, next.end - next.start, next);\n setGapHit(fit ? { key: next.key, start: fit.gap.start, fits: fit.fits, text: fit.text } : null);\n const time = marker\n ? messages().calendarDue({ time: clock(next.start) })\n : `${clock(next.start)}–${clock(next.end)} · ${duration(next.end - next.start)}`;\n setGhost({\n key: next.key,\n start: next.start,\n end: marker ? next.start + 20 : next.end,\n title: event.title,\n time: clash ? `${time} · ${messages().calendarOverlaps({ title: clash.title })}` : time,\n colorHex: eventAccent(event),\n warn: Boolean(clash),\n fit: fit ? { fits: fit.fits, text: fit.text } : undefined,\n });\n },\n onCommit: (next) => {\n endGesture();\n swallowNextClick();\n if (next.key === key && next.start === start && next.end === end) return;\n const source = sourceOf().get(event);\n // A moved entry keeps its real length, also when it lands across a clock change.\n const startDate = instant(next.key, next.start);\n const endDate = marker\n ? startDate\n : source\n ? new Date(startDate.getTime() + source.end.getTime() - source.start.getTime())\n : slot(next.key, next.start, next.end).end;\n if (source && source.start.getTime() === startDate.getTime() && source.end.getTime() === endDate.getTime()) return;\n props.owner.onEventDrop?.(event, { start: startDate, end: endDate, allDay: false });\n },\n onCancel: endGesture,\n });\n };\n\n const startResize = (\n pointerEvent: PointerEvent,\n event: CalendarEvent,\n key: string,\n start: number,\n end: number,\n edge: \"start\" | \"end\",\n scroller?: HTMLElement,\n ) => {\n if (!props.owner.onEventResize) return;\n pointerEvent.preventDefault();\n pointerEvent.stopPropagation();\n const body = bodies.get(key);\n if (!body) return;\n cancelGesture?.();\n cancelGesture = startCalendarPointerSession({\n event: pointerEvent,\n scrollContainer: scroller,\n threshold: 1,\n resolve: (_clientX, clientY) => {\n const rect = body.element.getBoundingClientRect();\n const geometry = readDayGeometry(body.element, wake(), body.expanded());\n const minute = snapMinutes(dayMinuteAt(geometry, clientY - rect.top), step({ shiftKey: shiftHeld.current }));\n const limit = limitOf(key);\n const size = step({ shiftKey: shiftHeld.current });\n return edge === \"end\"\n ? { start, end: Math.max(start + size, Math.min(limit, minute)) }\n : { start: Math.max(0, Math.min(end - size, minute)), end };\n },\n onActivate: () => {\n setMovingId(event.id);\n setDragging(edge);\n },\n onPreview: (next) =>\n setGhost({\n key,\n start: next.start,\n end: next.end,\n title: event.title,\n time: `${clock(next.start)}–${clock(next.end)} · ${duration(next.end - next.start)}`,\n colorHex: eventAccent(event),\n }),\n onCommit: (next) => {\n endGesture();\n swallowNextClick();\n if (next.start === start && next.end === end) return;\n const source = sourceOf().get(event);\n const range = source ? resizedInDay(source, edge, key, next, props.hours, dateConfig()) : slot(key, next.start, next.end);\n props.owner.onEventResize?.(event, { ...range, allDay: false });\n },\n onCancel: endGesture,\n });\n };\n\n /** Drawing on free time: a new event with its live length, on a 15-minute grid, with Shift on 5 minutes. */\n const startDraw = (pointerEvent: PointerEvent, key: string, scroller?: HTMLElement) => {\n if (!canCreate() || pointerEvent.pointerType !== \"mouse\") return;\n const body = bodies.get(key);\n if (!body) return;\n const minuteAt = (clientY: number) => {\n const rect = body.element.getBoundingClientRect();\n const geometry = readDayGeometry(body.element, wake(), body.expanded());\n return Math.max(0, Math.min(limitOf(key), dayMinuteAt(geometry, clientY - rect.top)));\n };\n const origin = minuteAt(pointerEvent.clientY);\n cancelGesture?.();\n cancelGesture = startCalendarPointerSession({\n event: pointerEvent,\n scrollContainer: scroller,\n resolve: (_clientX, clientY) => {\n const size = step({ shiftKey: shiftHeld.current });\n const minute = minuteAt(clientY);\n const from = Math.floor(Math.min(origin, minute) / size) * size;\n let to = Math.ceil(Math.max(origin, minute) / size) * size;\n if (to - from < size) to = from + size;\n return { start: from, end: Math.min(to, limitOf(key)) };\n },\n onActivate: () => {\n setDragging(\"draw\");\n setSelection(null);\n setTouchDraft(null);\n },\n onPreview: (next) =>\n setGhost({\n key,\n start: next.start,\n end: next.end,\n title: messages().calendarNewEvent,\n time: `${clock(next.start)}–${clock(next.end)} · ${duration(next.end - next.start)}`,\n }),\n onCommit: (next) => {\n const anchor = document.querySelector<HTMLElement>(\".k2b-calendar-ghost[data-live]\")?.getBoundingClientRect() ?? body.element;\n endGesture();\n swallowNextClick();\n openQuickCreate(key, next.start, next.end, anchor);\n },\n onCancel: endGesture,\n });\n };\n\n /** Follows a pointer that pressed an entry outside the calendar into its free time. */\n const dragIn = (\n pointerEvent: PointerEvent,\n item: CalendarExternalDrag,\n onDrop: (slot: CalendarEventTimeChange) => void,\n scroller?: HTMLElement,\n ) => {\n if (pointerEvent.button !== 0 || !pointerEvent.isPrimary) return;\n cancelGesture?.();\n cancelGesture = undefined;\n const length = Math.max(15, Math.round(item.minutes));\n const color = item.colorHex ?? COLOR_TOKENS[item.color ?? \"blue\"]!;\n let token: HTMLElement | undefined;\n let spring: { element: Element; timer: number } | undefined;\n const target =\n pointerEvent.target instanceof HTMLElement ? pointerEvent.target.closest<HTMLElement>(\"li, [data-calendar-drag-source]\") : null;\n let held = false;\n let cleaned = false;\n const preventContextMenu = (event: Event) => event.preventDefault();\n const preventScroll = (event: TouchEvent) => {\n if (held) event.preventDefault();\n };\n const cleanup = () => {\n if (cleaned) return;\n cleaned = true;\n document.removeEventListener(\"touchmove\", preventScroll);\n window.removeEventListener(\"contextmenu\", preventContextMenu, true);\n if (pointerEvent.pointerType === \"touch\") held = false;\n if (target) delete target.dataset.lifted;\n token?.remove();\n token = undefined;\n if (spring) window.clearTimeout(spring.timer);\n spring = undefined;\n endGesture();\n };\n const begin = () => {\n cancelGesture = startCalendarPointerSession({\n event: pointerEvent,\n scrollContainer: scroller,\n armAutoScroll: true,\n threshold: held && pointerEvent.pointerType !== \"mouse\" ? 1 : 6,\n resolve: (clientX, clientY) => {\n const hit = bodyAt(clientX, clientY);\n if (!hit || hit.minute >= limitOf(hit.key)) return { key: \"\", start: 0, end: 0, clash: null };\n const fit = fitAt(hit.key, hit.minute, length);\n let start = snapMinutes(hit.minute - length / 2, 15);\n if (fit?.fits) start = Math.max(fit.gap.start, Math.min(fit.gap.end - length, start));\n start = Math.max(0, Math.min(limitOf(hit.key) - length, start));\n return { key: hit.key, start, end: start + length, clash: overlapAt(hit.key, start, start + length), fit };\n },\n onActivate: () => {\n setDragging(\"external\");\n setSelection(null);\n token = document.createElement(\"div\");\n token.className = \"k2b-calendar-token\";\n token.textContent = item.title;\n token.style.setProperty(\"--k2b-calendar-accent\", color);\n token.setAttribute(\"aria-hidden\", \"true\");\n document.body.append(token);\n },\n onMove: (clientX, clientY) => {\n if (token) token.style.transform = `translate(${clientX + 12}px, ${clientY + 10}px)`;\n // A folded run of empty days opens when the entry rests on it.\n const empty = document.elementFromPoint(clientX, clientY)?.closest(\"[data-calendar-unfold]\");\n if (empty && spring?.element !== empty) {\n if (spring) window.clearTimeout(spring.timer);\n spring = { element: empty, timer: window.setTimeout(() => (empty as HTMLElement).click(), 650) };\n } else if (!empty && spring) {\n window.clearTimeout(spring.timer);\n spring = undefined;\n }\n },\n onPreview: (next) => {\n if (token) token.dataset.hidden = next.key ? \"true\" : \"false\";\n if (!next.key) {\n setGhost(null);\n setGapHit(null);\n return;\n }\n setGapHit(next.fit ? { key: next.key, start: next.fit.gap.start, fits: next.fit.fits, text: next.fit.text } : null);\n const time = `${clock(next.start)}–${clock(next.end)} · ${duration(length)}`;\n setGhost({\n key: next.key,\n start: next.start,\n end: next.end,\n title: item.title,\n time: next.clash ? `${time} · ${messages().calendarOverlaps({ title: next.clash.title })}` : time,\n colorHex: color,\n warn: Boolean(next.clash),\n fit: next.fit ? { fits: next.fit.fits, text: next.fit.text } : undefined,\n });\n },\n onCommit: (next) => {\n swallowNextClick();\n if (next.key) onDrop({ ...slot(next.key, next.start, next.end), allDay: false });\n },\n onEnd: cleanup,\n });\n };\n if (pointerEvent.pointerType === \"mouse\") {\n begin();\n return;\n }\n // A finger first holds the entry still, so a short swipe keeps scrolling the list it sits in.\n const origin = { x: pointerEvent.clientX, y: pointerEvent.clientY };\n const abort = () => {\n window.clearTimeout(timer);\n window.removeEventListener(\"pointermove\", watch);\n window.removeEventListener(\"pointerup\", abort);\n window.removeEventListener(\"pointercancel\", abort);\n window.removeEventListener(\"contextmenu\", preventContextMenu, true);\n if (target) delete target.dataset.lifted;\n if (cancelGesture === abort) cancelGesture = undefined;\n };\n const watch = (event: PointerEvent) => {\n if (event.pointerId === pointerEvent.pointerId && Math.hypot(event.clientX - origin.x, event.clientY - origin.y) > 10) abort();\n };\n const timer = window.setTimeout(() => {\n abort();\n held = true;\n if (target) target.dataset.lifted = \"true\";\n navigator.vibrate?.(8);\n document.addEventListener(\"touchmove\", preventScroll, { passive: false });\n window.addEventListener(\"contextmenu\", preventContextMenu, true);\n begin();\n }, 420);\n window.addEventListener(\"pointermove\", watch);\n window.addEventListener(\"pointerup\", abort);\n window.addEventListener(\"pointercancel\", abort);\n window.addEventListener(\"contextmenu\", preventContextMenu, true);\n cancelGesture = abort;\n };\n\n return {\n props,\n messages,\n dateConfig,\n hours,\n wake,\n range,\n anchorKey,\n days,\n dayOf,\n keyOf,\n parseKey,\n nowKey,\n nowMinute,\n nowIn,\n calendarToday,\n clock,\n duration,\n instant,\n normalized,\n checkedOf,\n toggleCheck,\n checkOf,\n justChecked,\n cheered,\n selection,\n setSelection,\n touchDraft,\n setTouchDraft,\n activeKey,\n setActiveKey,\n ghost,\n gapHit,\n movingId,\n dragging,\n nightOpen,\n setNight,\n quick,\n setQuick,\n openQuickCreate,\n canCreate,\n createTarget,\n rangeOfSelection,\n registerBody,\n bodyAt,\n limitOf,\n startMove,\n startResize,\n startDraw,\n dragIn,\n dayStartMinute,\n };\n};\n\nexport type TimeView = ReturnType<typeof createTimeView>;\n\n/**\n * German short dates read \"Fr 9. Okt\", without the dots of the abbreviations; with `comma`, a title such as\n * \"Fr, 9. Okt 2026\" keeps the comma after the day.\n */\nexport const compactGermanDate = (text: string, locale: string | undefined, comma = false) =>\n locale?.startsWith(\"de\")\n ? text\n .replace(comma ? /\\b(Mo|Di|Mi|Do|Fr|Sa|So)\\./g : /\\b(Mo|Di|Mi|Do|Fr|Sa|So)\\.,?/g, \"$1\")\n .replace(/\\b(Jan|Feb|Mär|Apr|Jun|Jul|Aug|Sep|Sept|Okt|Nov|Dez)\\./g, \"$1\")\n : text;\n\n/** A short day such as \"Fri 9\" or \"Fr 9.\", in the calendar's locale. */\nexport const shortDay = (view: TimeView, key: string, withMonth = false) =>\n compactGermanDate(\n view.parseKey(key).toLocaleDateString(view.dateConfig().locale ?? \"en\", {\n weekday: \"short\",\n day: \"numeric\",\n ...(withMonth ? { month: \"short\" } : {}),\n timeZone: view.dateConfig().timeZone,\n }),\n view.dateConfig().locale,\n );\n\n/** A long day such as \"Friday, October 9\", with the year when it is not this year's. */\nexport const longDay = (view: TimeView, key: string) =>\n view.parseKey(key).toLocaleDateString(view.dateConfig().locale ?? \"en\", {\n weekday: \"long\",\n month: \"long\",\n day: \"numeric\",\n ...(key.slice(0, 4) !== view.calendarToday().slice(0, 4) ? { year: \"numeric\" } : {}),\n timeZone: view.dateConfig().timeZone,\n });\n\nconst CHECK_PATH = \"M4.6 8.3l2.3 2.3 4.6-4.9\";\n\n/** A to-do's checkbox: it draws its check, and the title beside it strikes through. */\nexport const TimeCheck = (props: { view: TimeView; event: CalendarEvent; tabIndex?: number }) => {\n const checked = () => props.view.checkedOf(props.event) ?? false;\n const box = (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <rect x=\"1.75\" y=\"1.75\" width=\"12.5\" height=\"12.5\" rx=\"3.5\" />\n <path d={CHECK_PATH} />\n </svg>\n );\n return (\n <Show\n when={props.view.props.owner.onEventCheck}\n fallback={\n <span class=\"k2b-calendar-check\" data-checked={checked() ? \"true\" : undefined} aria-hidden=\"true\">\n {box}\n </span>\n }\n >\n <button\n type=\"button\"\n class=\"k2b-calendar-check\"\n role=\"checkbox\"\n aria-checked={checked() ? \"true\" : \"false\"}\n aria-label={props.view.messages().calendarDone({ title: props.event.title })}\n tabIndex={props.tabIndex}\n data-checked={checked() ? \"true\" : undefined}\n data-just-checked={props.view.justChecked().has(props.event.id) ? \"true\" : undefined}\n onPointerDown={(event) => event.stopPropagation()}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n props.view.toggleCheck(props.event);\n }}\n >\n {box}\n </button>\n </Show>\n );\n};\n\n/** A timed entry in a day's timeline: a band as long as the entry, side by side with overlapping ones. */\nexport const TimeBand = (props: {\n view: TimeView;\n band: DayLane<CalendarEvent>;\n dayKey: string;\n expanded: boolean;\n compact?: boolean;\n /** Day view: a tall band shows its place. */\n showLocation?: boolean;\n /** The height of an hour on a wide screen, for the band's size class and title lines. */\n hourPx: number;\n tabIndex?: number;\n stop?: CalendarStop;\n scroller?: () => HTMLElement | undefined;\n}) => {\n const view = props.view;\n const event = () => props.band.item;\n const wake = () => view.wake();\n const limit = () => (props.expanded ? DAY_MINUTES : wake());\n const visibleStart = () => Math.max(0, props.band.start);\n const visibleEnd = () => Math.min(limit(), props.band.end);\n const top = () => dayTopTerms(wake(), props.expanded, visibleStart());\n const bottom = () => dayYTerms(wake(), props.expanded, visibleEnd());\n const now = () => view.nowIn(props.dayKey);\n const running = () => now() >= props.band.start && now() < props.band.end && Number.isFinite(now());\n const past = () => now() >= props.band.end;\n const length = () => props.band.end - props.band.start;\n const pixels = () => (length() / 60) * props.hourPx - 2;\n const size = () => (pixels() < 27 ? \"xs\" : pixels() < 40 ? \"s\" : \"m\");\n const checked = () => view.checkedOf(event());\n const remaining = () => (running() ? view.messages().calendarRemaining({ duration: view.duration(props.band.end - now()) }) : undefined);\n const lines = () => Math.max(1, Math.floor((pixels() - 24) / 15));\n return (\n <div\n class=\"k2b-calendar-band\"\n data-calendar-entry={event().id}\n data-size={size()}\n data-past={past() ? \"true\" : undefined}\n data-running={running() ? \"true\" : undefined}\n data-checked={checked() ? \"true\" : undefined}\n data-checkbox={checked() !== undefined ? \"true\" : undefined}\n data-just-checked={view.justChecked().has(event().id) ? \"true\" : undefined}\n data-cut-bottom={props.band.end > limit() ? \"true\" : undefined}\n data-moving={view.movingId() === event().id ? \"true\" : undefined}\n data-display={event().display}\n style={{\n \"--k2b-calendar-accent\": eventAccent(event()),\n \"--k2b-calendar-lane\": String(props.band.lane),\n \"--k2b-calendar-lanes\": String(props.band.lanes),\n \"--k2b-calendar-lines\": String(lines()),\n \"--k2b-calendar-progress\": running() ? `${(((now() - props.band.start) / length()) * 100).toFixed(1)}%` : undefined,\n top: `calc(${termsCss(top())} + 1px)`,\n height: `max(var(--k2b-calendar-band-min), calc(${termsCss(subtractTerms(bottom(), top()))} - 2px))`,\n }}\n >\n <Show when={running()}>\n <span class=\"k2b-calendar-band__fill\" aria-hidden=\"true\" />\n </Show>\n <Show when={checked() !== undefined}>\n <TimeCheck view={view} event={event()} tabIndex={props.tabIndex === undefined ? undefined : -1} />\n </Show>\n <EventChip\n event={view.normalized(event(), props.dayKey)}\n owner={view.props.owner}\n href={eventHref(view.props.owner, event())}\n fill\n timeline\n compact={props.compact}\n timeLabel={`${view.clock(props.band.start)}–${view.clock(props.band.end)}`}\n showLocation={props.showLocation && size() === \"m\" && pixels() >= 64}\n remaining={remaining()}\n checkbox={checked() !== undefined}\n onCheck={view.checkOf(event())}\n moving={view.movingId() === event().id}\n tabIndex={props.tabIndex}\n stop={props.stop}\n onMovePointerDown={\n view.props.owner.onEventDrop\n ? (pointerEvent) => view.startMove(pointerEvent, event(), props.dayKey, props.band.start, props.band.end, props.scroller?.())\n : undefined\n }\n />\n <Show when={view.props.owner.onEventResize}>\n <span\n class=\"k2b-calendar-band__grip\"\n data-edge=\"start\"\n aria-hidden=\"true\"\n onPointerDown={(pointerEvent) =>\n view.startResize(pointerEvent, event(), props.dayKey, props.band.start, props.band.end, \"start\", props.scroller?.())\n }\n />\n <Show when={props.band.end <= limit()}>\n <span\n class=\"k2b-calendar-band__grip\"\n data-edge=\"end\"\n aria-hidden=\"true\"\n onPointerDown={(pointerEvent) =>\n view.startResize(pointerEvent, event(), props.dayKey, props.band.start, props.band.end, \"end\", props.scroller?.())\n }\n />\n </Show>\n </Show>\n </div>\n );\n};\n\n/** A point in time such as a deadline: a dashed line across the day and a pill with its checkbox and title. */\nexport const TimeMarker = (props: {\n view: TimeView;\n event: CalendarEvent;\n minute: number;\n dayKey: string;\n expanded: boolean;\n above: boolean;\n /** The pill's place among deadlines whose pills would cover each other, from the left. */\n lane: number;\n lanes: number;\n showTime: boolean;\n tabIndex?: number;\n stop?: CalendarStop;\n scroller?: () => HTMLElement | undefined;\n}) => {\n const view = props.view;\n const checked = () => view.checkedOf(props.event);\n const past = () => view.nowIn(props.dayKey) >= props.minute;\n return (\n <div\n class=\"k2b-calendar-marker\"\n data-calendar-entry={props.event.id}\n data-past={past() ? \"true\" : undefined}\n data-overdue={past() && checked() === false ? \"true\" : undefined}\n data-checked={checked() ? \"true\" : undefined}\n data-just-checked={view.justChecked().has(props.event.id) ? \"true\" : undefined}\n data-above={props.above ? \"true\" : undefined}\n data-moving={view.movingId() === props.event.id ? \"true\" : undefined}\n style={{\n \"--k2b-calendar-accent\": eventAccent(props.event),\n \"--k2b-calendar-marker-lane\": String(props.lane),\n \"--k2b-calendar-marker-lanes\": String(props.lanes),\n top: termsCss(dayTopTerms(view.wake(), props.expanded, props.minute)),\n }}\n >\n <span class=\"k2b-calendar-marker__line\" aria-hidden=\"true\" />\n <span class=\"k2b-calendar-marker__pill\">\n <Show when={checked() !== undefined}>\n <TimeCheck view={view} event={props.event} tabIndex={props.tabIndex === undefined ? undefined : -1} />\n </Show>\n <EventChip\n event={view.normalized(props.event, props.dayKey)}\n owner={view.props.owner}\n href={eventHref(view.props.owner, props.event)}\n compact\n timeline\n checkbox={checked() !== undefined}\n onCheck={view.checkOf(props.event)}\n tabIndex={props.tabIndex}\n stop={props.stop}\n trailing={\n <Show when={props.showTime}>\n <span class=\"k2b-calendar-marker__time\">{view.clock(props.minute)}</span>\n </Show>\n }\n onMovePointerDown={\n view.props.owner.onEventDrop\n ? (pointerEvent) => view.startMove(pointerEvent, props.event, props.dayKey, props.minute, props.minute, props.scroller?.())\n : undefined\n }\n />\n </span>\n </div>\n );\n};\n\n/** Free time between entries, labelled from an hour on; activating it creates there. */\nexport const TimeGap = (props: {\n view: TimeView;\n gap: DayGap;\n dayKey: string;\n expanded: boolean;\n /** A deadline pill near the middle moves the label aside. */\n aside: boolean;\n tabIndex?: number;\n stop?: CalendarStop;\n}) => {\n const view = props.view;\n const length = () => props.gap.end - props.gap.start;\n const proposal = () => gapProposal(props.gap, view.hours());\n const label = () => view.messages().calendarFree({ duration: view.duration(length()) });\n const hit = () => {\n const current = view.gapHit();\n return current && current.key === props.dayKey && current.start === props.gap.start ? current : null;\n };\n const top = () => dayYTerms(view.wake(), props.expanded, props.gap.start);\n /**\n * Shorter free time is hidden until something is dragged into it, and past free time has no label, so neither is a\n * keyboard stop.\n */\n const labelled = () => length() >= GAP_LABEL_MINUTES;\n const stop = () => (labelled() && !props.gap.past ? props.stop : undefined);\n return (\n <div\n class=\"k2b-calendar-gap\"\n data-short={labelled() ? undefined : \"true\"}\n data-long={length() >= GAP_LONG_MINUTES ? \"true\" : undefined}\n data-past={props.gap.past ? \"true\" : undefined}\n data-aside={props.aside ? \"true\" : undefined}\n data-hit={hit() ? (hit()!.fits ? \"fit\" : \"short\") : undefined}\n style={{ top: termsCss(top()), height: termsCss(subtractTerms(dayYTerms(view.wake(), props.expanded, props.gap.end), top())) }}\n >\n <span class=\"k2b-calendar-gap__zone\" aria-hidden=\"true\" />\n <Show when={view.canCreate()}>\n <button\n type=\"button\"\n class=\"k2b-calendar-gap__button\"\n tabIndex={labelled() ? (props.tabIndex ?? (props.gap.past ? -1 : 0)) : -1}\n data-stop={stop()?.id}\n data-col={stop()?.column}\n data-minute={stop()?.minute}\n aria-label={view.messages().calendarFreeAction({\n duration: view.duration(length()),\n from: view.clock(props.gap.start),\n to: view.clock(props.gap.end),\n start: view.clock(proposal()[0]),\n end: view.clock(proposal()[1]),\n })}\n title={view.messages().calendarCreateAt({ start: view.clock(proposal()[0]), end: view.clock(proposal()[1]) })}\n onClick={(event) => {\n event.stopPropagation();\n view.openQuickCreate(props.dayKey, proposal()[0], proposal()[1], event.currentTarget);\n }}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n <span class=\"k2b-calendar-gap__text\">{hit() ? hit()!.text : label()}</span>\n </button>\n </Show>\n </div>\n );\n};\n\n/** The preview of a drag, a draw, or an entry dragged in, and the selected slot. */\nexport const TimeOverlays = (props: { view: TimeView; dayKey: string; expanded: boolean }) => {\n const view = props.view;\n const ghost = () => {\n const current = view.ghost();\n return current && current.key === props.dayKey ? current : null;\n };\n const selected = () => {\n const current = view.selection();\n return current && current.key === props.dayKey && current.start !== undefined && current.end !== undefined ? current : null;\n };\n const draft = () => {\n const current = view.touchDraft();\n return current && current.key === props.dayKey ? current : null;\n };\n const box = (start: number, end: number) => {\n const top = dayTopTerms(view.wake(), props.expanded, start);\n return { top: termsCss(top), height: termsCss(subtractTerms(dayYTerms(view.wake(), props.expanded, end), top)) };\n };\n return (\n <>\n <Show when={selected()}>\n {(slot) => <span class=\"k2b-calendar-slot\" style={box(slot().start!, slot().end!)} aria-hidden=\"true\" />}\n </Show>\n <Show when={draft()}>\n {(slot) => (\n <div class=\"k2b-calendar-draft\" style={box(slot().start, slot().end)}>\n <span\n class=\"k2b-calendar-draft__grip\"\n data-edge=\"start\"\n aria-hidden=\"true\"\n onPointerDown={(event) => startDraftResize(view, event, \"start\")}\n />\n <button\n type=\"button\"\n class=\"k2b-calendar-draft__open\"\n aria-label={view.messages().calendarCreateAt({ start: view.clock(slot().start), end: view.clock(slot().end) })}\n onClick={(event) => view.openQuickCreate(slot().key, slot().start, slot().end, event.currentTarget)}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n <span>\n {view.clock(slot().start)}–{view.clock(slot().end)} · {view.duration(slot().end - slot().start)}\n </span>\n </button>\n <span\n class=\"k2b-calendar-draft__grip\"\n data-edge=\"end\"\n aria-hidden=\"true\"\n onPointerDown={(event) => startDraftResize(view, event, \"end\")}\n />\n </div>\n )}\n </Show>\n <Show when={ghost()}>\n {(current) => (\n <div\n class=\"k2b-calendar-ghost\"\n data-live=\"true\"\n data-size={current().end - current().start < 40 ? \"s\" : \"m\"}\n data-warn={current().warn ? \"true\" : undefined}\n style={{ ...box(current().start, current().end), \"--k2b-calendar-accent\": current().colorHex ?? \"var(--k2b-action)\" }}\n aria-hidden=\"true\"\n >\n <span class=\"k2b-calendar-ghost__title\">{current().title}</span>\n <span class=\"k2b-calendar-ghost__time\">{current().time}</span>\n <Show when={current().fit}>\n {(fit) => (\n <span class=\"k2b-calendar-ghost__fit\" data-fit={fit().fits ? \"fit\" : \"short\"}>\n {fit().text}\n </span>\n )}\n </Show>\n </div>\n )}\n </Show>\n </>\n );\n};\n\n/** The handles of a tapped slot change its start or end. */\nconst startDraftResize = (view: TimeView, pointerEvent: PointerEvent, edge: \"start\" | \"end\") => {\n const draft = view.touchDraft();\n if (!draft) return;\n pointerEvent.preventDefault();\n pointerEvent.stopPropagation();\n startCalendarPointerSession({\n event: pointerEvent,\n threshold: 1,\n resolve: (clientX, clientY) => {\n const hit = view.bodyAt(clientX, clientY);\n if (!hit || hit.key !== draft.key) return null;\n const minute = snapMinutes(hit.minute, 15);\n const current = view.touchDraft() ?? draft;\n return edge === \"end\"\n ? { ...current, end: Math.max(current.start + 15, Math.min(view.limitOf(draft.key), minute)) }\n : { ...current, start: Math.max(0, Math.min(current.end - 15, minute)) };\n },\n onPreview: (next) => {\n view.setTouchDraft(next);\n view.setSelection({ key: next.key, start: next.start, end: next.end });\n },\n onCommit: () => swallowNextClick(),\n });\n};\n\n/** Free time of a day with the gap of now trimmed, as both views draw it. */\nexport const dayGaps = (view: TimeView, key: string) => freeGaps(view.dayOf(key).bands, view.wake(), view.nowIn(key));\n\n/** The bands of a day with their lanes, cut to what its timeline draws. */\nexport const dayBands = (view: TimeView, key: string, expanded: boolean) => {\n const limit = expanded ? DAY_MINUTES : view.wake();\n const visible = view.dayOf(key).bands.filter((band) => Math.min(limit, band.end) > Math.max(0, band.start));\n return dayLanes(visible, LANE_MINUTES);\n};\n\n/** Entries the folded night hides, as chips with their time. */\nexport const foldedEntries = (view: TimeView, key: string) => {\n const model = view.dayOf(key);\n const wake = view.wake();\n return [\n ...model.bands\n .filter((band) => band.end > wake)\n .map((band) => ({\n event: band.item,\n time: band.start >= wake ? view.clock(band.start) : view.messages().calendarUntil({ time: view.clock(band.end) }),\n })),\n ...model.markers.filter((marker) => marker.minute >= wake).map((marker) => ({ event: marker.item, time: view.clock(marker.minute) })),\n ];\n};\n\n/** The quick create at a slot or gap, as in the month view. */\nexport const TimeQuickCreate = (props: { view: TimeView }) => {\n const view = props.view;\n let element: HTMLDivElement | undefined;\n let returnFocus: HTMLElement | null = null;\n createEffect(() => {\n const current = view.quick();\n if (!element) return;\n if (!current) {\n if (element.matches(\":popover-open\")) element.hidePopover();\n return;\n }\n returnFocus = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n if (!element.matches(\":popover-open\")) element.showPopover();\n queueMicrotask(() => {\n if (view.quick() !== current || !element?.isConnected) return;\n placeCalendarPopover(current.anchor, element);\n element.querySelector<HTMLElement>(\"input,textarea,select,button,a[href],[tabindex]:not([tabindex='-1'])\")?.focus();\n });\n });\n /** Whether the focus is in the popover, or fell to the page as it hid: only then does a close return it. */\n const focusInPopover = () => element?.contains(document.activeElement) || document.activeElement === document.body;\n const close = (restore: boolean) => {\n const current = view.quick();\n if (!current) return;\n const selection = view.selection();\n view.setQuick(null);\n // A late close must leave a newer selection in place.\n if (selection?.key === current.key && selection.start === current.start && selection.end === current.end) view.setSelection(null);\n if (restore && returnFocus?.isConnected) returnFocus.focus({ preventScroll: true });\n };\n return (\n <div\n ref={element}\n class=\"k2b-calendar-popover\"\n popover=\"auto\"\n role=\"dialog\"\n aria-label={view.messages().calendarQuickCreate}\n data-kind=\"create\"\n onToggle={(event) => {\n if (event.newState !== \"closed\" || !view.quick() || event.currentTarget.matches(\":popover-open\")) return;\n close(focusInPopover());\n }}\n >\n <Show when={view.quick()} keyed>\n {(value) =>\n view.props.owner.renderQuickCreate?.(value.range, {\n create: value.create,\n close: () => {\n if (view.quick() === value) close(focusInPopover());\n },\n })\n }\n </Show>\n </div>\n );\n};\n\n/** All-day entries of a day as chips: bars with torn ends where they go on, and points due that day. */\nexport const AllDayChips = (props: { view: TimeView; dayKey: string; spans: readonly DaySpan<CalendarEvent>[] }) => {\n const view = props.view;\n return (\n <For each={props.spans}>\n {(span) => {\n const event = span.item;\n const checked = () => view.checkedOf(event);\n return (\n <span\n class=\"k2b-calendar-allday-chip\"\n data-bar={span.marker ? undefined : \"true\"}\n data-checkbox={checked() !== undefined ? \"true\" : undefined}\n data-checked={checked() ? \"true\" : undefined}\n data-just-checked={view.justChecked().has(event.id) ? \"true\" : undefined}\n style={{ \"--k2b-calendar-accent\": eventAccent(event) }}\n >\n <Show when={checked() !== undefined}>\n <TimeCheck view={view} event={event} />\n </Show>\n <EventChip\n event={view.normalized(event, props.dayKey)}\n owner={view.props.owner}\n href={eventHref(view.props.owner, event)}\n compact\n timeline\n bar={!span.marker}\n checkbox={checked() !== undefined}\n onCheck={view.checkOf(event)}\n continuesBefore={span.firstKey < props.dayKey}\n continuesAfter={span.lastKey > props.dayKey}\n />\n </span>\n );\n }}\n </For>\n );\n};\n\n/** Hour labels and lines of a day's timeline with the night open, and the date at midnight. */\nexport const nightHours = (wake: number) => {\n const hours: number[] = [];\n for (let minute = wake + 60; minute < DAY_MINUTES; minute += 60) hours.push(minute);\n return hours;\n};\n\nexport const isNearNow = (view: TimeView, key: string, minute: number) => key === view.nowKey() && Math.abs(view.nowMinute() - minute) < 14;\n\n/** Whether a marker sits right above a band's start, so its pill goes above the line. */\nexport const markerAbove = (model: DayModel<CalendarEvent>, minute: number) =>\n model.bands.some((band) => band.start >= minute - 10 && band.start <= minute + 20);\n\n/** Whether a deadline pill sits near the middle of a gap, so the gap's label moves aside. */\nexport const gapAside = (model: DayModel<CalendarEvent>, gap: DayGap) => {\n const middle = (gap.start + gap.end) / 2;\n return model.markers.some(\n (marker) => marker.minute > gap.start - 10 && marker.minute < gap.end + 10 && Math.abs(marker.minute - middle) < 25,\n );\n};\n\n/** A day's counts for its header: events and all-day entries, to-dos and deadlines. */\nexport const daySummary = (view: TimeView, key: string) => {\n const model = view.dayOf(key);\n const isTask = (event: CalendarEvent) => event.display === \"marker\" || event.checked !== undefined;\n const all = [\n ...model.bands.map((band) => band.item),\n ...model.markers.map((marker) => marker.item),\n ...model.spans.map((span) => span.item),\n ];\n const tasks = all.filter(isTask).length;\n return view.messages().calendarDaySummary({ events: all.length - tasks, tasks });\n};\n\n/** What starts within the next hour today, such as \"Planning in 12 min\". */\nexport const soonNote = (view: TimeView, key: string) => {\n if (key !== view.nowKey()) return \"\";\n const now = view.nowMinute();\n const next = view\n .dayOf(key)\n .bands.filter((band) => band.start > now && band.start - now <= 60 && !view.checkedOf(band.item))\n .sort((left, right) => left.start - right.start)[0];\n return next ? view.messages().calendarSoon({ title: next.item.title, duration: view.duration(next.start - now) }) : \"\";\n};\n\n/** The busy minutes of a day's waking hours, merged, with the color of the first entry, for the thin load line. */\nexport const dayLoad = (view: TimeView, key: string) => {\n const pieces = view\n .dayOf(key)\n .bands.map((band) => ({ start: Math.max(0, band.start), end: Math.min(view.wake(), band.end), color: eventAccent(band.item) }))\n .filter((piece) => piece.end > piece.start)\n .sort((left, right) => left.start - right.start);\n const merged: typeof pieces = [];\n for (const piece of pieces) {\n const last = merged[merged.length - 1];\n if (last && piece.start <= last.end) last.end = Math.max(last.end, piece.end);\n else merged.push({ ...piece });\n }\n return merged;\n};\n\n/** Day keys of the week that holds a day, from its first day. */\nexport const weekKeysOf = (view: TimeView, key: string) => {\n const start = view.keyOf(calendar.startOfWeek(view.parseKey(key), view.dateConfig()));\n return Array.from({ length: 7 }, (_, index) => addDayKeys(start, index));\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/calendar-time-view.tsx"],"sourcesContent":["import { dates as calendar, type DateContext } from \"@k2b/stdlib\";\nimport { createEffect, createMemo, createSignal, For, on, onCleanup, onMount, Show, untrack } from \"solid-js\";\nimport { announce } from \"../feedback/announce\";\nimport type { CalendarController, CalendarEvent, CalendarEventTimeChange, CalendarExternalDrag, CalendarLabels } from \"./Calendar\";\nimport {\n addDayKeys,\n buildDays,\n type CalendarDayHours,\n clockAt,\n DAY_MINUTES,\n type DayEntry,\n type DayGap,\n type DayGeometry,\n type DayLane,\n type DayModel,\n type DaySpan,\n dayKeyOf,\n dayLanes,\n dayMinuteAt,\n dayTopTerms,\n dayYTerms,\n freeGaps,\n GAP_LABEL_MINUTES,\n GAP_LONG_MINUTES,\n gapProposal,\n instantInDay,\n instantsInDay,\n minuteInDay,\n readDayGeometry,\n resizedInDay,\n snapMinutes,\n subtractTerms,\n termsCss,\n wakeMinutes,\n} from \"./calendar-days\";\nimport { useCalendarMessages } from \"./calendar-messages\";\nimport { afterPointerRelease, startCalendarPointerSession } from \"./calendar-pointer\";\nimport {\n type CalendarOwner,\n type CalendarStop,\n EventChip,\n eventHref,\n type NormalizedEvent,\n ownerDateConfig,\n parseDate,\n placeCalendarPopover,\n validDate,\n} from \"./calendar-shared\";\n\n/**\n * Shared state and parts of the day and week views with `dayHours`: the time model of the loaded days, the selection,\n * the quick create, pointer gestures, and the pieces both views draw into a day's timeline.\n */\n\nexport type TodayDirection = \"left\" | \"right\" | \"up\" | \"down\" | \"\";\n\n/** What the header and the calendar's controller ask of the active day or week view. */\nexport type TimeViewHandle = {\n /** The first and last day the reader sees. */\n visibleKeys: () => { first: string; last: string };\n /** Moves by a day (day view) or a week (week view) when that is loaded; `false` leaves it to the header's link. */\n step: (direction: -1 | 1) => boolean;\n /** Shows a day when it is loaded; `false` leaves it to navigation. */\n goTo: (key: string) => boolean;\n /** Shows today and now when they are loaded. */\n today: () => boolean;\n todayDirection: () => TodayDirection;\n controller: CalendarController;\n};\n\nexport type TimeViewProps = {\n owner: CalendarOwner;\n view: \"day\" | \"week\";\n date: Date;\n now: Date;\n events: readonly CalendarEvent[];\n labels: Required<CalendarLabels>;\n hours: CalendarDayHours;\n register: (handle: TimeViewHandle | null) => void;\n};\n\nexport type TimeSelection = { key: string; start?: number; end?: number };\n\ntype Ghost = {\n key: string;\n start: number;\n end: number;\n title: string;\n time: string;\n colorHex?: string;\n color?: string;\n warn?: boolean;\n fit?: { fits: boolean; text: string };\n};\n\ntype QuickCreate = {\n range: CalendarEventTimeChange;\n anchor: Element | DOMRect;\n create?: string;\n key: string;\n start?: number;\n end?: number;\n};\n\nexport type BodyHit = { key: string; element: HTMLElement; geometry: DayGeometry; minute: number };\n\nconst COLOR_TOKENS: Record<string, string> = {\n blue: \"#3b82f6\",\n emerald: \"#10b981\",\n amber: \"#f59e0b\",\n red: \"#ef4444\",\n violet: \"#8b5cf6\",\n cyan: \"#06b6d4\",\n zinc: \"#a1a1aa\",\n};\nexport const eventAccent = (event: Pick<CalendarEvent, \"color\" | \"colorHex\">): string =>\n event.colorHex ?? COLOR_TOKENS[event.color ?? \"blue\"]!;\n\n/** Minimum minutes an overlap counts for a band, about the height of its title. */\nconst LANE_MINUTES = 20;\n\n/** Swallows the click a browser sends right after a gesture ends, never the next one. */\nexport const swallowNextClick = () => {\n const stop = (event: Event) => {\n event.stopPropagation();\n event.preventDefault();\n };\n window.addEventListener(\"click\", stop, { capture: true, once: true });\n window.setTimeout(() => window.removeEventListener(\"click\", stop, { capture: true }), 120);\n};\n\nexport const createTimeView = (props: TimeViewProps) => {\n const messages = useCalendarMessages();\n const dateConfig = createMemo((): DateContext => ownerDateConfig(props.owner));\n const hours = () => props.hours;\n const wake = createMemo(() => wakeMinutes(props.hours));\n const keyOf = (date: Date) => calendar.formatDateKey(date, dateConfig());\n const parseKey = (key: string) => calendar.parseCalendarDate(key, dateConfig());\n\n /** The loaded days: the host's range, or the day or the week of the date. */\n const range = createMemo(\n () => {\n const context = dateConfig();\n const loaded = props.owner.range;\n if (loaded) {\n const from = parseDate(loaded.from, context);\n const to = parseDate(loaded.to, context);\n if (validDate(from) && validDate(to)) {\n const first = calendar.formatDateKey(from, context);\n const last = calendar.formatDateKey(new Date(Math.max(from.getTime(), to.getTime() - 1)), context);\n return { first, last };\n }\n }\n const key = calendar.formatDateKey(props.date, context);\n if (props.view === \"day\") return { first: key, last: key };\n const start = calendar.formatDateKey(calendar.startOfWeek(props.date, context), context);\n return { first: start, last: addDayKeys(start, 6) };\n },\n undefined,\n { equals: (left, right) => left.first === right.first && left.last === right.last },\n );\n const anchorKey = createMemo(() => keyOf(props.date));\n\n /** Checkbox states the reader just set, shown until the host's events agree or drop the entry. */\n const [checks, setChecks] = createSignal<Record<string, boolean>>({});\n const [justChecked, setJustChecked] = createSignal<ReadonlySet<string>>(new Set());\n createEffect(\n on(\n () => props.events,\n (events) => {\n const current = untrack(checks);\n const ids = Object.keys(current);\n if (ids.length === 0) return;\n const next = { ...current };\n for (const id of ids) {\n const event = events.find((candidate) => candidate.id === id);\n if (!event || event.checked === current[id]) delete next[id];\n }\n setChecks(next);\n },\n { defer: true },\n ),\n );\n const checkedOf = (event: CalendarEvent): boolean | undefined =>\n event.checked === undefined ? undefined : (checks()[event.id] ?? event.checked);\n /** What Space on an entry's chip does: check its box, where it has one the reader may change. */\n const checkOf = (event: CalendarEvent) =>\n checkedOf(event) !== undefined && props.owner.onEventCheck ? () => toggleCheck(event) : undefined;\n const forgetJustChecked = (id: string) =>\n setJustChecked((value) => {\n if (!value.has(id)) return value;\n const rest = new Set(value);\n rest.delete(id);\n return rest;\n });\n /** Today's day for a moment after its last open to-do was checked off, which its heading celebrates. */\n const [cheered, setCheered] = createSignal<string | null>(null);\n let cheerTimer = 0;\n // The server renders the view too, and has no window.\n onCleanup(() => clearTimeout(cheerTimer));\n /** The entries with a checkbox on a day: its deadlines, the to-dos planned into its hours, and the ones due all day. */\n const dueOn = (key: string) => {\n const model = dayOf(key);\n return [\n ...model.markers.map((marker) => marker.item),\n ...model.bands.map((band) => band.item),\n ...model.spans.filter((span) => span.marker && span.firstKey === key).map((span) => span.item),\n ].filter((item) => item.checked !== undefined);\n };\n const toggleCheck = (event: CalendarEvent) => {\n const current = checkedOf(event);\n if (current === undefined || !props.owner.onEventCheck) return;\n const next = !current;\n setChecks((value) => ({ ...value, [event.id]: next }));\n if (next) {\n setJustChecked((value) => new Set([...value, event.id]));\n window.setTimeout(() => forgetJustChecked(event.id), 1100);\n const today = nowKey();\n const due = dueOn(today);\n if (due.includes(event) && due.every((item) => checkedOf(item))) {\n // The heading shows it only for a moment, so a screen reader hears it once instead.\n announce(messages().calendarAllDone);\n setCheered(today);\n window.clearTimeout(cheerTimer);\n cheerTimer = window.setTimeout(() => setCheered(null), 2200);\n }\n } else setCheered(null);\n // A change the host refuses puts the box back as it was.\n void Promise.resolve(props.owner.onEventCheck(event, next)).catch(() => {\n forgetJustChecked(event.id);\n if (next) setCheered(null);\n setChecks((value) => {\n if (value[event.id] !== next) return value;\n const rest = { ...value };\n delete rest[event.id];\n return rest;\n });\n });\n };\n\n const entries = createMemo((): DayEntry<CalendarEvent>[] => {\n const context = dateConfig();\n return props.events.flatMap((event) => {\n const start = parseDate(event.start, context);\n if (!validDate(start)) return [];\n const marker = event.display === \"marker\";\n const parsedEnd = event.end ? parseDate(event.end, context) : null;\n let end = parsedEnd && validDate(parsedEnd) && parsedEnd > start ? parsedEnd : null;\n if (!end)\n end = event.allDay\n ? calendar.addDays(calendar.startOfDay(start, context), 1, context)\n : marker\n ? start\n : new Date(start.getTime() + 3_600_000);\n return [{ item: event, start, end, allDay: Boolean(event.allDay), marker }];\n });\n });\n const days = createMemo(() => buildDays(range().first, range().last, entries(), props.hours, dateConfig()));\n const emptyModel = (key: string): DayModel<CalendarEvent> => ({ key, bands: [], markers: [], spans: [], night: false, empty: true });\n const dayOf = (key: string) => days().get(key) ?? emptyModel(key);\n const sourceOf = createMemo(() => new Map(entries().map((entry) => [entry.item, entry])));\n\n /** The day that holds now: before the start hour still the day before. */\n const nowKey = createMemo(() => dayKeyOf(props.now, props.hours, dateConfig()));\n const nowMinute = createMemo(() => minuteInDay(nowKey(), props.now, props.hours, dateConfig()));\n /** Now as a minute of a day: past days lie wholly before it, coming days after. */\n const nowIn = (key: string) => (key === nowKey() ? nowMinute() : key < nowKey() ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY);\n const calendarToday = createMemo(() => keyOf(props.now));\n const clock = (minute: number) => clockAt(minute, props.hours);\n const duration = (minutes: number) => messages().calendarDuration({ minutes: Math.max(1, Math.round(minutes)) });\n const instant = (key: string, minute: number) => instantInDay(key, minute, props.hours, dateConfig());\n const slot = (key: string, start: number, end: number) => instantsInDay(key, start, end, props.hours, dateConfig());\n const dayStartMinute = (hour: number) => Math.max(0, (hour - props.hours[0]) * 60);\n\n /** A day's timed piece as the event chip reads it. */\n const normalized = (event: CalendarEvent, key: string): NormalizedEvent => {\n const source = sourceOf().get(event);\n const start = source?.start ?? parseDate(event.start, dateConfig());\n const end = source?.end ?? start;\n return { ...event, startDate: start, endDate: end, sourceStartDate: start, sourceEndDate: end, dayKey: key };\n };\n\n const [selection, setSelection] = createSignal<TimeSelection | null>(null);\n const [touchDraft, setTouchDraft] = createSignal<{ key: string; start: number; end: number } | null>(null);\n const [activeKey, setActiveKey] = createSignal<string | null>(null);\n const [ghost, setGhost] = createSignal<Ghost | null>(null);\n const [movingId, setMovingId] = createSignal(\"\");\n const [dragging, setDragging] = createSignal<\"\" | \"move\" | \"start\" | \"end\" | \"draw\" | \"external\">(\"\");\n const [nightOverrides, setNightOverrides] = createSignal<Record<string, boolean>>({});\n const [quick, setQuick] = createSignal<QuickCreate | null>(null);\n\n const rangeOfSelection = (value: TimeSelection): CalendarEventTimeChange =>\n value.start === undefined || value.end === undefined\n ? { start: parseKey(value.key), end: calendar.addDays(parseKey(value.key), 1, dateConfig()), allDay: true }\n : { ...slot(value.key, value.start, value.end), allDay: false };\n createEffect(on(selection, (value) => props.owner.onSelectionChange?.(value ? rangeOfSelection(value) : null), { defer: true }));\n onCleanup(() => {\n if (untrack(selection)) props.owner.onSelectionChange?.(null);\n });\n\n // Body elements of the days on screen, for pointer positions.\n const bodies = new Map<string, { element: HTMLElement; expanded: () => boolean }>();\n const registerBody = (key: string, element: HTMLElement, expanded: () => boolean) => {\n bodies.set(key, { element, expanded });\n onCleanup(() => {\n if (bodies.get(key)?.element === element) bodies.delete(key);\n });\n };\n const bodyAt = (clientX: number, clientY: number): BodyHit | null => {\n for (const [key, body] of bodies) {\n if (!body.element.isConnected) continue;\n const rect = body.element.getBoundingClientRect();\n if (clientX < rect.left || clientX >= rect.right || clientY < rect.top || clientY >= rect.bottom) continue;\n const geometry = readDayGeometry(body.element, wake(), body.expanded());\n return { key, element: body.element, geometry, minute: dayMinuteAt(geometry, clientY - rect.top) };\n }\n return null;\n };\n const limitOf = (key: string) => (bodies.get(key)?.expanded() ? DAY_MINUTES : wake());\n const nightOpen = (key: string, model: DayModel<CalendarEvent>) => nightOverrides()[key] ?? model.night;\n const setNight = (key: string, open: boolean) => setNightOverrides((value) => ({ ...value, [key]: open }));\n\n /** The gap under a minute while dragging, and whether `need` minutes fit it; the gap shows \"fits\" or how much is missing. */\n const fitAt = (key: string, minute: number, need: number, span?: { start: number; end: number }) => {\n const gap = freeGaps(dayOf(key).bands, wake(), Number.NEGATIVE_INFINITY).find(\n (candidate) => minute >= candidate.start && minute < candidate.end,\n );\n if (!gap) return null;\n const fits = gap.end - gap.start >= need;\n if (fits && span && (span.start < gap.start || span.end > gap.end)) return null;\n return {\n gap,\n fits,\n text: fits ? messages().calendarFits : messages().calendarTooShort({ duration: duration(need - (gap.end - gap.start)) }),\n };\n };\n const [gapHit, setGapHit] = createSignal<{ key: string; start: number; fits: boolean; text: string } | null>(null);\n const overlapAt = (key: string, start: number, end: number, except?: string) =>\n dayOf(key).bands.find((band) => band.item.id !== except && band.start < end && band.end > start)?.item ?? null;\n\n const openQuickCreate = (key: string, start: number | undefined, end: number | undefined, anchor: Element | DOMRect, create?: string) => {\n const range = rangeOfSelection({ key, start, end });\n setTouchDraft(null);\n if (!props.owner.renderQuickCreate) {\n props.owner.onSlotActivate?.(range);\n return;\n }\n setSelection({ key, start, end });\n setQuick({ range, anchor, create, key, start, end });\n };\n const canCreate = () => Boolean(props.owner.renderQuickCreate || props.owner.onSlotActivate);\n\n /** The time a new entry takes: the selection, today's next full hour while today shows, else 09:00 of the first day. */\n const createTarget = (visible: { first: string; last: string }): { key: string; start: number; end: number } => {\n const current = selection();\n if (current && current.start !== undefined && current.end !== undefined)\n return { key: current.key, start: current.start, end: current.end };\n const nine = dayStartMinute(9);\n const nextHour = (key: string) => {\n const minute = Math.ceil((nowMinute() + 1) / 60) * 60;\n return key === nowKey() ? (minute <= wake() - 60 ? minute : null) : nine;\n };\n let key: string;\n let start: number | null;\n if (current) {\n key = current.key;\n start = key === nowKey() ? nextHour(key) : nine;\n } else if (nowKey() >= visible.first && nowKey() <= visible.last) {\n key = nowKey();\n start = nextHour(key);\n } else {\n key = visible.first;\n start = nine;\n }\n if (start === null) {\n key = addDayKeys(key, 1);\n start = nine;\n }\n return { key, start, end: start + 60 };\n };\n\n // Pointer gestures: moving and resizing bands and markers, drawing a new event, and dragging entries in.\n let cancelGesture: (() => void) | undefined;\n onCleanup(() => cancelGesture?.());\n const step = (event: { shiftKey: boolean }) => (event.shiftKey ? 5 : 15);\n const shiftHeld = { current: false };\n const trackShift = (event: KeyboardEvent) => {\n shiftHeld.current = event.shiftKey;\n };\n onMount(() => {\n window.addEventListener(\"keydown\", trackShift, true);\n window.addEventListener(\"keyup\", trackShift, true);\n onCleanup(() => {\n window.removeEventListener(\"keydown\", trackShift, true);\n window.removeEventListener(\"keyup\", trackShift, true);\n });\n });\n const endGesture = () => {\n setGhost(null);\n setGapHit(null);\n setMovingId(\"\");\n setDragging(\"\");\n };\n\n const startMove = (pointerEvent: PointerEvent, event: CalendarEvent, key: string, start: number, end: number, scroller?: HTMLElement) => {\n const marker = event.display === \"marker\";\n if (!props.owner.onEventDrop) return;\n const body = bodies.get(key);\n if (!body) return;\n const rect = body.element.getBoundingClientRect();\n const geometry = readDayGeometry(body.element, wake(), body.expanded());\n const grab = dayMinuteAt(geometry, pointerEvent.clientY - rect.top) - start;\n const length = end - start;\n cancelGesture?.();\n cancelGesture = startCalendarPointerSession({\n event: pointerEvent,\n scrollContainer: scroller,\n resolve: (clientX, clientY) => {\n const hit = bodyAt(clientX, clientY);\n if (!hit) return null;\n const limit = limitOf(hit.key);\n const from = Math.max(\n 0,\n Math.min(limit - Math.max(length, 15), snapMinutes(hit.minute - grab, step({ shiftKey: shiftHeld.current }))),\n );\n return { key: hit.key, start: from, end: from + length };\n },\n onActivate: () => {\n setMovingId(event.id);\n setDragging(\"move\");\n setSelection(null);\n },\n onPreview: (next) => {\n const clash = marker ? null : overlapAt(next.key, next.start, next.end, event.id);\n const fit = marker ? null : fitAt(next.key, next.start + (next.end - next.start) / 2, next.end - next.start, next);\n setGapHit(fit ? { key: next.key, start: fit.gap.start, fits: fit.fits, text: fit.text } : null);\n const time = marker\n ? messages().calendarDue({ time: clock(next.start) })\n : `${clock(next.start)}–${clock(next.end)} · ${duration(next.end - next.start)}`;\n setGhost({\n key: next.key,\n start: next.start,\n end: marker ? next.start + 20 : next.end,\n title: event.title,\n time: clash ? `${time} · ${messages().calendarOverlaps({ title: clash.title })}` : time,\n colorHex: eventAccent(event),\n warn: Boolean(clash),\n fit: fit ? { fits: fit.fits, text: fit.text } : undefined,\n });\n },\n onCommit: (next) => {\n endGesture();\n swallowNextClick();\n if (next.key === key && next.start === start && next.end === end) return;\n const source = sourceOf().get(event);\n // A moved entry keeps its real length, also when it lands across a clock change.\n const startDate = instant(next.key, next.start);\n const endDate = marker\n ? startDate\n : source\n ? new Date(startDate.getTime() + source.end.getTime() - source.start.getTime())\n : slot(next.key, next.start, next.end).end;\n if (source && source.start.getTime() === startDate.getTime() && source.end.getTime() === endDate.getTime()) return;\n props.owner.onEventDrop?.(event, { start: startDate, end: endDate, allDay: false });\n },\n onCancel: endGesture,\n });\n };\n\n const startResize = (\n pointerEvent: PointerEvent,\n event: CalendarEvent,\n key: string,\n start: number,\n end: number,\n edge: \"start\" | \"end\",\n scroller?: HTMLElement,\n ) => {\n if (!props.owner.onEventResize) return;\n pointerEvent.preventDefault();\n pointerEvent.stopPropagation();\n const body = bodies.get(key);\n if (!body) return;\n cancelGesture?.();\n cancelGesture = startCalendarPointerSession({\n event: pointerEvent,\n scrollContainer: scroller,\n threshold: 1,\n resolve: (_clientX, clientY) => {\n const rect = body.element.getBoundingClientRect();\n const geometry = readDayGeometry(body.element, wake(), body.expanded());\n const minute = snapMinutes(dayMinuteAt(geometry, clientY - rect.top), step({ shiftKey: shiftHeld.current }));\n const limit = limitOf(key);\n const size = step({ shiftKey: shiftHeld.current });\n return edge === \"end\"\n ? { start, end: Math.max(start + size, Math.min(limit, minute)) }\n : { start: Math.max(0, Math.min(end - size, minute)), end };\n },\n onActivate: () => {\n setMovingId(event.id);\n setDragging(edge);\n },\n onPreview: (next) =>\n setGhost({\n key,\n start: next.start,\n end: next.end,\n title: event.title,\n time: `${clock(next.start)}–${clock(next.end)} · ${duration(next.end - next.start)}`,\n colorHex: eventAccent(event),\n }),\n onCommit: (next) => {\n endGesture();\n swallowNextClick();\n if (next.start === start && next.end === end) return;\n const source = sourceOf().get(event);\n const range = source ? resizedInDay(source, edge, key, next, props.hours, dateConfig()) : slot(key, next.start, next.end);\n props.owner.onEventResize?.(event, { ...range, allDay: false });\n },\n onCancel: endGesture,\n });\n };\n\n /** Drawing on free time: a new event with its live length, on a 15-minute grid, with Shift on 5 minutes. */\n const startDraw = (pointerEvent: PointerEvent, key: string, scroller?: HTMLElement) => {\n if (!canCreate() || pointerEvent.pointerType !== \"mouse\") return;\n const body = bodies.get(key);\n if (!body) return;\n const minuteAt = (clientY: number) => {\n const rect = body.element.getBoundingClientRect();\n const geometry = readDayGeometry(body.element, wake(), body.expanded());\n return Math.max(0, Math.min(limitOf(key), dayMinuteAt(geometry, clientY - rect.top)));\n };\n const origin = minuteAt(pointerEvent.clientY);\n cancelGesture?.();\n cancelGesture = startCalendarPointerSession({\n event: pointerEvent,\n scrollContainer: scroller,\n resolve: (_clientX, clientY) => {\n const size = step({ shiftKey: shiftHeld.current });\n const minute = minuteAt(clientY);\n const from = Math.floor(Math.min(origin, minute) / size) * size;\n let to = Math.ceil(Math.max(origin, minute) / size) * size;\n if (to - from < size) to = from + size;\n return { start: from, end: Math.min(to, limitOf(key)) };\n },\n onActivate: () => {\n setDragging(\"draw\");\n setSelection(null);\n setTouchDraft(null);\n },\n onPreview: (next) =>\n setGhost({\n key,\n start: next.start,\n end: next.end,\n title: messages().calendarNewEvent,\n time: `${clock(next.start)}–${clock(next.end)} · ${duration(next.end - next.start)}`,\n }),\n onCommit: (next) => {\n const anchor = document.querySelector<HTMLElement>(\".k2b-calendar-ghost[data-live]\")?.getBoundingClientRect() ?? body.element;\n swallowNextClick();\n // The ghost stays until the quick create replaces it, so the slot never blinks.\n afterPointerRelease(() => {\n endGesture();\n openQuickCreate(key, next.start, next.end, anchor);\n });\n },\n onCancel: endGesture,\n });\n };\n\n /** Follows a pointer that pressed an entry outside the calendar into its free time. */\n const dragIn = (\n pointerEvent: PointerEvent,\n item: CalendarExternalDrag,\n onDrop: (slot: CalendarEventTimeChange) => void,\n scroller?: HTMLElement,\n ) => {\n if (pointerEvent.button !== 0 || !pointerEvent.isPrimary) return;\n cancelGesture?.();\n cancelGesture = undefined;\n const length = Math.max(15, Math.round(item.minutes));\n const color = item.colorHex ?? COLOR_TOKENS[item.color ?? \"blue\"]!;\n let token: HTMLElement | undefined;\n let spring: { element: Element; timer: number } | undefined;\n const target =\n pointerEvent.target instanceof HTMLElement ? pointerEvent.target.closest<HTMLElement>(\"li, [data-calendar-drag-source]\") : null;\n let held = false;\n let cleaned = false;\n const preventContextMenu = (event: Event) => event.preventDefault();\n const preventScroll = (event: TouchEvent) => {\n if (held) event.preventDefault();\n };\n const cleanup = () => {\n if (cleaned) return;\n cleaned = true;\n document.removeEventListener(\"touchmove\", preventScroll);\n window.removeEventListener(\"contextmenu\", preventContextMenu, true);\n if (pointerEvent.pointerType === \"touch\") held = false;\n if (target) delete target.dataset.lifted;\n token?.remove();\n token = undefined;\n if (spring) window.clearTimeout(spring.timer);\n spring = undefined;\n endGesture();\n };\n const begin = () => {\n cancelGesture = startCalendarPointerSession({\n event: pointerEvent,\n scrollContainer: scroller,\n armAutoScroll: true,\n threshold: held && pointerEvent.pointerType !== \"mouse\" ? 1 : 6,\n resolve: (clientX, clientY) => {\n const hit = bodyAt(clientX, clientY);\n if (!hit || hit.minute >= limitOf(hit.key)) return { key: \"\", start: 0, end: 0, clash: null };\n const fit = fitAt(hit.key, hit.minute, length);\n let start = snapMinutes(hit.minute - length / 2, 15);\n if (fit?.fits) start = Math.max(fit.gap.start, Math.min(fit.gap.end - length, start));\n start = Math.max(0, Math.min(limitOf(hit.key) - length, start));\n return { key: hit.key, start, end: start + length, clash: overlapAt(hit.key, start, start + length), fit };\n },\n onActivate: () => {\n setDragging(\"external\");\n setSelection(null);\n token = document.createElement(\"div\");\n token.className = \"k2b-calendar-token\";\n token.textContent = item.title;\n token.style.setProperty(\"--k2b-calendar-accent\", color);\n token.setAttribute(\"aria-hidden\", \"true\");\n document.body.append(token);\n },\n onMove: (clientX, clientY) => {\n if (token) token.style.transform = `translate(${clientX + 12}px, ${clientY + 10}px)`;\n // A folded run of empty days opens when the entry rests on it.\n const empty = document.elementFromPoint(clientX, clientY)?.closest(\"[data-calendar-unfold]\");\n if (empty && spring?.element !== empty) {\n if (spring) window.clearTimeout(spring.timer);\n spring = { element: empty, timer: window.setTimeout(() => (empty as HTMLElement).click(), 650) };\n } else if (!empty && spring) {\n window.clearTimeout(spring.timer);\n spring = undefined;\n }\n },\n onPreview: (next) => {\n if (token) token.dataset.hidden = next.key ? \"true\" : \"false\";\n if (!next.key) {\n setGhost(null);\n setGapHit(null);\n return;\n }\n setGapHit(next.fit ? { key: next.key, start: next.fit.gap.start, fits: next.fit.fits, text: next.fit.text } : null);\n const time = `${clock(next.start)}–${clock(next.end)} · ${duration(length)}`;\n setGhost({\n key: next.key,\n start: next.start,\n end: next.end,\n title: item.title,\n time: next.clash ? `${time} · ${messages().calendarOverlaps({ title: next.clash.title })}` : time,\n colorHex: color,\n warn: Boolean(next.clash),\n fit: next.fit ? { fits: next.fit.fits, text: next.fit.text } : undefined,\n });\n },\n onCommit: (next) => {\n swallowNextClick();\n if (next.key) onDrop({ ...slot(next.key, next.start, next.end), allDay: false });\n },\n onEnd: cleanup,\n });\n };\n if (pointerEvent.pointerType === \"mouse\") {\n begin();\n return;\n }\n // A finger first holds the entry still, so a short swipe keeps scrolling the list it sits in.\n const origin = { x: pointerEvent.clientX, y: pointerEvent.clientY };\n const abort = () => {\n window.clearTimeout(timer);\n window.removeEventListener(\"pointermove\", watch);\n window.removeEventListener(\"pointerup\", abort);\n window.removeEventListener(\"pointercancel\", abort);\n window.removeEventListener(\"contextmenu\", preventContextMenu, true);\n if (target) delete target.dataset.lifted;\n if (cancelGesture === abort) cancelGesture = undefined;\n };\n const watch = (event: PointerEvent) => {\n if (event.pointerId === pointerEvent.pointerId && Math.hypot(event.clientX - origin.x, event.clientY - origin.y) > 10) abort();\n };\n const timer = window.setTimeout(() => {\n abort();\n held = true;\n if (target) target.dataset.lifted = \"true\";\n navigator.vibrate?.(8);\n document.addEventListener(\"touchmove\", preventScroll, { passive: false });\n window.addEventListener(\"contextmenu\", preventContextMenu, true);\n begin();\n }, 420);\n window.addEventListener(\"pointermove\", watch);\n window.addEventListener(\"pointerup\", abort);\n window.addEventListener(\"pointercancel\", abort);\n window.addEventListener(\"contextmenu\", preventContextMenu, true);\n cancelGesture = abort;\n };\n\n return {\n props,\n messages,\n dateConfig,\n hours,\n wake,\n range,\n anchorKey,\n days,\n dayOf,\n keyOf,\n parseKey,\n nowKey,\n nowMinute,\n nowIn,\n calendarToday,\n clock,\n duration,\n instant,\n normalized,\n checkedOf,\n toggleCheck,\n checkOf,\n justChecked,\n cheered,\n selection,\n setSelection,\n touchDraft,\n setTouchDraft,\n activeKey,\n setActiveKey,\n ghost,\n gapHit,\n movingId,\n dragging,\n nightOpen,\n setNight,\n quick,\n setQuick,\n openQuickCreate,\n canCreate,\n createTarget,\n rangeOfSelection,\n registerBody,\n bodyAt,\n limitOf,\n startMove,\n startResize,\n startDraw,\n dragIn,\n dayStartMinute,\n };\n};\n\nexport type TimeView = ReturnType<typeof createTimeView>;\n\n/**\n * German short dates read \"Fr 9. Okt\", without the dots of the abbreviations; with `comma`, a title such as\n * \"Fr, 9. Okt 2026\" keeps the comma after the day.\n */\nexport const compactGermanDate = (text: string, locale: string | undefined, comma = false) =>\n locale?.startsWith(\"de\")\n ? text\n .replace(comma ? /\\b(Mo|Di|Mi|Do|Fr|Sa|So)\\./g : /\\b(Mo|Di|Mi|Do|Fr|Sa|So)\\.,?/g, \"$1\")\n .replace(/\\b(Jan|Feb|Mär|Apr|Jun|Jul|Aug|Sep|Sept|Okt|Nov|Dez)\\./g, \"$1\")\n : text;\n\n/** A short day such as \"Fri 9\" or \"Fr 9.\", in the calendar's locale. */\nexport const shortDay = (view: TimeView, key: string, withMonth = false) =>\n compactGermanDate(\n view.parseKey(key).toLocaleDateString(view.dateConfig().locale ?? \"en\", {\n weekday: \"short\",\n day: \"numeric\",\n ...(withMonth ? { month: \"short\" } : {}),\n timeZone: view.dateConfig().timeZone,\n }),\n view.dateConfig().locale,\n );\n\n/** A long day such as \"Friday, October 9\", with the year when it is not this year's. */\nexport const longDay = (view: TimeView, key: string) =>\n view.parseKey(key).toLocaleDateString(view.dateConfig().locale ?? \"en\", {\n weekday: \"long\",\n month: \"long\",\n day: \"numeric\",\n ...(key.slice(0, 4) !== view.calendarToday().slice(0, 4) ? { year: \"numeric\" } : {}),\n timeZone: view.dateConfig().timeZone,\n });\n\nconst CHECK_PATH = \"M4.6 8.3l2.3 2.3 4.6-4.9\";\n\n/** A to-do's checkbox: it draws its check, and the title beside it strikes through. */\nexport const TimeCheck = (props: { view: TimeView; event: CalendarEvent; tabIndex?: number }) => {\n const checked = () => props.view.checkedOf(props.event) ?? false;\n const box = (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <rect x=\"1.75\" y=\"1.75\" width=\"12.5\" height=\"12.5\" rx=\"3.5\" />\n <path d={CHECK_PATH} />\n </svg>\n );\n return (\n <Show\n when={props.view.props.owner.onEventCheck}\n fallback={\n <span class=\"k2b-calendar-check\" data-checked={checked() ? \"true\" : undefined} aria-hidden=\"true\">\n {box}\n </span>\n }\n >\n <button\n type=\"button\"\n class=\"k2b-calendar-check\"\n role=\"checkbox\"\n aria-checked={checked() ? \"true\" : \"false\"}\n aria-label={props.view.messages().calendarDone({ title: props.event.title })}\n tabIndex={props.tabIndex}\n data-checked={checked() ? \"true\" : undefined}\n data-just-checked={props.view.justChecked().has(props.event.id) ? \"true\" : undefined}\n onPointerDown={(event) => event.stopPropagation()}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n props.view.toggleCheck(props.event);\n }}\n >\n {box}\n </button>\n </Show>\n );\n};\n\n/** A timed entry in a day's timeline: a band as long as the entry, side by side with overlapping ones. */\nexport const TimeBand = (props: {\n view: TimeView;\n band: DayLane<CalendarEvent>;\n dayKey: string;\n expanded: boolean;\n compact?: boolean;\n /** Day view: a tall band shows its place. */\n showLocation?: boolean;\n /** The height of an hour on a wide screen, for the band's size class and title lines. */\n hourPx: number;\n tabIndex?: number;\n stop?: CalendarStop;\n scroller?: () => HTMLElement | undefined;\n}) => {\n const view = props.view;\n const event = () => props.band.item;\n const wake = () => view.wake();\n const limit = () => (props.expanded ? DAY_MINUTES : wake());\n const visibleStart = () => Math.max(0, props.band.start);\n const visibleEnd = () => Math.min(limit(), props.band.end);\n const top = () => dayTopTerms(wake(), props.expanded, visibleStart());\n const bottom = () => dayYTerms(wake(), props.expanded, visibleEnd());\n const now = () => view.nowIn(props.dayKey);\n const running = () => now() >= props.band.start && now() < props.band.end && Number.isFinite(now());\n const past = () => now() >= props.band.end;\n const length = () => props.band.end - props.band.start;\n const pixels = () => (length() / 60) * props.hourPx - 2;\n const size = () => (pixels() < 27 ? \"xs\" : pixels() < 40 ? \"s\" : \"m\");\n const checked = () => view.checkedOf(event());\n const remaining = () => (running() ? view.messages().calendarRemaining({ duration: view.duration(props.band.end - now()) }) : undefined);\n const lines = () => Math.max(1, Math.floor((pixels() - 24) / 15));\n return (\n <div\n class=\"k2b-calendar-band\"\n data-calendar-entry={event().id}\n data-size={size()}\n data-past={past() ? \"true\" : undefined}\n data-running={running() ? \"true\" : undefined}\n data-checked={checked() ? \"true\" : undefined}\n data-checkbox={checked() !== undefined ? \"true\" : undefined}\n data-just-checked={view.justChecked().has(event().id) ? \"true\" : undefined}\n data-cut-bottom={props.band.end > limit() ? \"true\" : undefined}\n data-moving={view.movingId() === event().id ? \"true\" : undefined}\n data-display={event().display}\n style={{\n \"--k2b-calendar-accent\": eventAccent(event()),\n \"--k2b-calendar-lane\": String(props.band.lane),\n \"--k2b-calendar-lanes\": String(props.band.lanes),\n \"--k2b-calendar-lines\": String(lines()),\n \"--k2b-calendar-progress\": running() ? `${(((now() - props.band.start) / length()) * 100).toFixed(1)}%` : undefined,\n top: `calc(${termsCss(top())} + 1px)`,\n height: `max(var(--k2b-calendar-band-min), calc(${termsCss(subtractTerms(bottom(), top()))} - 2px))`,\n }}\n >\n <Show when={running()}>\n <span class=\"k2b-calendar-band__fill\" aria-hidden=\"true\" />\n </Show>\n <Show when={checked() !== undefined}>\n <TimeCheck view={view} event={event()} tabIndex={props.tabIndex === undefined ? undefined : -1} />\n </Show>\n <EventChip\n event={view.normalized(event(), props.dayKey)}\n owner={view.props.owner}\n href={eventHref(view.props.owner, event())}\n fill\n timeline\n compact={props.compact}\n timeLabel={`${view.clock(props.band.start)}–${view.clock(props.band.end)}`}\n showLocation={props.showLocation && size() === \"m\" && pixels() >= 64}\n remaining={remaining()}\n checkbox={checked() !== undefined}\n onCheck={view.checkOf(event())}\n moving={view.movingId() === event().id}\n tabIndex={props.tabIndex}\n stop={props.stop}\n onMovePointerDown={\n view.props.owner.onEventDrop\n ? (pointerEvent) => view.startMove(pointerEvent, event(), props.dayKey, props.band.start, props.band.end, props.scroller?.())\n : undefined\n }\n />\n <Show when={view.props.owner.onEventResize}>\n <span\n class=\"k2b-calendar-band__grip\"\n data-edge=\"start\"\n aria-hidden=\"true\"\n onPointerDown={(pointerEvent) =>\n view.startResize(pointerEvent, event(), props.dayKey, props.band.start, props.band.end, \"start\", props.scroller?.())\n }\n />\n <Show when={props.band.end <= limit()}>\n <span\n class=\"k2b-calendar-band__grip\"\n data-edge=\"end\"\n aria-hidden=\"true\"\n onPointerDown={(pointerEvent) =>\n view.startResize(pointerEvent, event(), props.dayKey, props.band.start, props.band.end, \"end\", props.scroller?.())\n }\n />\n </Show>\n </Show>\n </div>\n );\n};\n\n/** A point in time such as a deadline: a dashed line across the day and a pill with its checkbox and title. */\nexport const TimeMarker = (props: {\n view: TimeView;\n event: CalendarEvent;\n minute: number;\n dayKey: string;\n expanded: boolean;\n above: boolean;\n /** The pill's place among deadlines whose pills would cover each other, from the left. */\n lane: number;\n lanes: number;\n showTime: boolean;\n tabIndex?: number;\n stop?: CalendarStop;\n scroller?: () => HTMLElement | undefined;\n}) => {\n const view = props.view;\n const checked = () => view.checkedOf(props.event);\n const past = () => view.nowIn(props.dayKey) >= props.minute;\n return (\n <div\n class=\"k2b-calendar-marker\"\n data-calendar-entry={props.event.id}\n data-past={past() ? \"true\" : undefined}\n data-overdue={past() && checked() === false ? \"true\" : undefined}\n data-checked={checked() ? \"true\" : undefined}\n data-just-checked={view.justChecked().has(props.event.id) ? \"true\" : undefined}\n data-above={props.above ? \"true\" : undefined}\n data-moving={view.movingId() === props.event.id ? \"true\" : undefined}\n style={{\n \"--k2b-calendar-accent\": eventAccent(props.event),\n \"--k2b-calendar-marker-lane\": String(props.lane),\n \"--k2b-calendar-marker-lanes\": String(props.lanes),\n top: termsCss(dayTopTerms(view.wake(), props.expanded, props.minute)),\n }}\n >\n <span class=\"k2b-calendar-marker__line\" aria-hidden=\"true\" />\n <span class=\"k2b-calendar-marker__pill\">\n <Show when={checked() !== undefined}>\n <TimeCheck view={view} event={props.event} tabIndex={props.tabIndex === undefined ? undefined : -1} />\n </Show>\n <EventChip\n event={view.normalized(props.event, props.dayKey)}\n owner={view.props.owner}\n href={eventHref(view.props.owner, props.event)}\n compact\n timeline\n checkbox={checked() !== undefined}\n onCheck={view.checkOf(props.event)}\n tabIndex={props.tabIndex}\n stop={props.stop}\n trailing={\n <Show when={props.showTime}>\n <span class=\"k2b-calendar-marker__time\">{view.clock(props.minute)}</span>\n </Show>\n }\n onMovePointerDown={\n view.props.owner.onEventDrop\n ? (pointerEvent) => view.startMove(pointerEvent, props.event, props.dayKey, props.minute, props.minute, props.scroller?.())\n : undefined\n }\n />\n </span>\n </div>\n );\n};\n\n/** Free time between entries, labelled from an hour on; activating it creates there. */\nexport const TimeGap = (props: {\n view: TimeView;\n gap: DayGap;\n dayKey: string;\n expanded: boolean;\n /** A deadline pill near the middle moves the label aside. */\n aside: boolean;\n tabIndex?: number;\n stop?: CalendarStop;\n}) => {\n const view = props.view;\n const length = () => props.gap.end - props.gap.start;\n const proposal = () => gapProposal(props.gap, view.hours());\n const label = () => view.messages().calendarFree({ duration: view.duration(length()) });\n const hit = () => {\n const current = view.gapHit();\n return current && current.key === props.dayKey && current.start === props.gap.start ? current : null;\n };\n const top = () => dayYTerms(view.wake(), props.expanded, props.gap.start);\n /**\n * Shorter free time is hidden until something is dragged into it, and past free time has no label, so neither is a\n * keyboard stop.\n */\n const labelled = () => length() >= GAP_LABEL_MINUTES;\n const stop = () => (labelled() && !props.gap.past ? props.stop : undefined);\n return (\n <div\n class=\"k2b-calendar-gap\"\n data-short={labelled() ? undefined : \"true\"}\n data-long={length() >= GAP_LONG_MINUTES ? \"true\" : undefined}\n data-past={props.gap.past ? \"true\" : undefined}\n data-aside={props.aside ? \"true\" : undefined}\n data-hit={hit() ? (hit()!.fits ? \"fit\" : \"short\") : undefined}\n style={{ top: termsCss(top()), height: termsCss(subtractTerms(dayYTerms(view.wake(), props.expanded, props.gap.end), top())) }}\n >\n <span class=\"k2b-calendar-gap__zone\" aria-hidden=\"true\" />\n <Show when={view.canCreate()}>\n <button\n type=\"button\"\n class=\"k2b-calendar-gap__button\"\n tabIndex={labelled() ? (props.tabIndex ?? (props.gap.past ? -1 : 0)) : -1}\n data-stop={stop()?.id}\n data-col={stop()?.column}\n data-minute={stop()?.minute}\n aria-label={view.messages().calendarFreeAction({\n duration: view.duration(length()),\n from: view.clock(props.gap.start),\n to: view.clock(props.gap.end),\n start: view.clock(proposal()[0]),\n end: view.clock(proposal()[1]),\n })}\n title={view.messages().calendarCreateAt({ start: view.clock(proposal()[0]), end: view.clock(proposal()[1]) })}\n onClick={(event) => {\n event.stopPropagation();\n view.openQuickCreate(props.dayKey, proposal()[0], proposal()[1], event.currentTarget);\n }}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n <span class=\"k2b-calendar-gap__text\">{hit() ? hit()!.text : label()}</span>\n </button>\n </Show>\n </div>\n );\n};\n\n/** The preview of a drag, a draw, or an entry dragged in, and the selected slot. */\nexport const TimeOverlays = (props: { view: TimeView; dayKey: string; expanded: boolean }) => {\n const view = props.view;\n const ghost = () => {\n const current = view.ghost();\n return current && current.key === props.dayKey ? current : null;\n };\n const selected = () => {\n const current = view.selection();\n return current && current.key === props.dayKey && current.start !== undefined && current.end !== undefined ? current : null;\n };\n const draft = () => {\n const current = view.touchDraft();\n return current && current.key === props.dayKey ? current : null;\n };\n const box = (start: number, end: number) => {\n const top = dayTopTerms(view.wake(), props.expanded, start);\n return { top: termsCss(top), height: termsCss(subtractTerms(dayYTerms(view.wake(), props.expanded, end), top)) };\n };\n return (\n <>\n <Show when={selected()}>\n {(slot) => <span class=\"k2b-calendar-slot\" style={box(slot().start!, slot().end!)} aria-hidden=\"true\" />}\n </Show>\n <Show when={draft()}>\n {(slot) => (\n <div class=\"k2b-calendar-draft\" style={box(slot().start, slot().end)}>\n <span\n class=\"k2b-calendar-draft__grip\"\n data-edge=\"start\"\n aria-hidden=\"true\"\n onPointerDown={(event) => startDraftResize(view, event, \"start\")}\n />\n <button\n type=\"button\"\n class=\"k2b-calendar-draft__open\"\n aria-label={view.messages().calendarCreateAt({ start: view.clock(slot().start), end: view.clock(slot().end) })}\n onClick={(event) => view.openQuickCreate(slot().key, slot().start, slot().end, event.currentTarget)}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n <span>\n {view.clock(slot().start)}–{view.clock(slot().end)} · {view.duration(slot().end - slot().start)}\n </span>\n </button>\n <span\n class=\"k2b-calendar-draft__grip\"\n data-edge=\"end\"\n aria-hidden=\"true\"\n onPointerDown={(event) => startDraftResize(view, event, \"end\")}\n />\n </div>\n )}\n </Show>\n <Show when={ghost()}>\n {(current) => (\n <div\n class=\"k2b-calendar-ghost\"\n data-live=\"true\"\n data-size={current().end - current().start < 40 ? \"s\" : \"m\"}\n data-warn={current().warn ? \"true\" : undefined}\n style={{ ...box(current().start, current().end), \"--k2b-calendar-accent\": current().colorHex ?? \"var(--k2b-action)\" }}\n aria-hidden=\"true\"\n >\n <span class=\"k2b-calendar-ghost__title\">{current().title}</span>\n <span class=\"k2b-calendar-ghost__time\">{current().time}</span>\n <Show when={current().fit}>\n {(fit) => (\n <span class=\"k2b-calendar-ghost__fit\" data-fit={fit().fits ? \"fit\" : \"short\"}>\n {fit().text}\n </span>\n )}\n </Show>\n </div>\n )}\n </Show>\n </>\n );\n};\n\n/** The handles of a tapped slot change its start or end. */\nconst startDraftResize = (view: TimeView, pointerEvent: PointerEvent, edge: \"start\" | \"end\") => {\n const draft = view.touchDraft();\n if (!draft) return;\n pointerEvent.preventDefault();\n pointerEvent.stopPropagation();\n startCalendarPointerSession({\n event: pointerEvent,\n threshold: 1,\n resolve: (clientX, clientY) => {\n const hit = view.bodyAt(clientX, clientY);\n if (!hit || hit.key !== draft.key) return null;\n const minute = snapMinutes(hit.minute, 15);\n const current = view.touchDraft() ?? draft;\n return edge === \"end\"\n ? { ...current, end: Math.max(current.start + 15, Math.min(view.limitOf(draft.key), minute)) }\n : { ...current, start: Math.max(0, Math.min(current.end - 15, minute)) };\n },\n onPreview: (next) => {\n view.setTouchDraft(next);\n view.setSelection({ key: next.key, start: next.start, end: next.end });\n },\n onCommit: () => swallowNextClick(),\n });\n};\n\n/** Free time of a day with the gap of now trimmed, as both views draw it. */\nexport const dayGaps = (view: TimeView, key: string) => freeGaps(view.dayOf(key).bands, view.wake(), view.nowIn(key));\n\n/** The bands of a day with their lanes, cut to what its timeline draws. */\nexport const dayBands = (view: TimeView, key: string, expanded: boolean) => {\n const limit = expanded ? DAY_MINUTES : view.wake();\n const visible = view.dayOf(key).bands.filter((band) => Math.min(limit, band.end) > Math.max(0, band.start));\n return dayLanes(visible, LANE_MINUTES);\n};\n\n/** Entries the folded night hides, as chips with their time. */\nexport const foldedEntries = (view: TimeView, key: string) => {\n const model = view.dayOf(key);\n const wake = view.wake();\n return [\n ...model.bands\n .filter((band) => band.end > wake)\n .map((band) => ({\n event: band.item,\n time: band.start >= wake ? view.clock(band.start) : view.messages().calendarUntil({ time: view.clock(band.end) }),\n })),\n ...model.markers.filter((marker) => marker.minute >= wake).map((marker) => ({ event: marker.item, time: view.clock(marker.minute) })),\n ];\n};\n\n/** The quick create at a slot or gap, as in the month view. */\nexport const TimeQuickCreate = (props: { view: TimeView }) => {\n const view = props.view;\n let element: HTMLDivElement | undefined;\n let returnFocus: HTMLElement | null = null;\n createEffect(() => {\n const current = view.quick();\n if (!element) return;\n if (!current) {\n if (element.matches(\":popover-open\")) element.hidePopover();\n return;\n }\n returnFocus = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n if (!element.matches(\":popover-open\")) element.showPopover();\n queueMicrotask(() => {\n if (view.quick() !== current || !element?.isConnected) return;\n placeCalendarPopover(current.anchor, element);\n element.querySelector<HTMLElement>(\"input,textarea,select,button,a[href],[tabindex]:not([tabindex='-1'])\")?.focus();\n });\n });\n /** Whether the focus is in the popover, or fell to the page as it hid: only then does a close return it. */\n const focusInPopover = () => element?.contains(document.activeElement) || document.activeElement === document.body;\n const close = (restore: boolean) => {\n const current = view.quick();\n if (!current) return;\n const selection = view.selection();\n view.setQuick(null);\n // A late close must leave a newer selection in place.\n if (selection?.key === current.key && selection.start === current.start && selection.end === current.end) view.setSelection(null);\n if (restore && returnFocus?.isConnected) returnFocus.focus({ preventScroll: true });\n };\n return (\n <div\n ref={element}\n class=\"k2b-calendar-popover\"\n popover=\"auto\"\n role=\"dialog\"\n aria-label={view.messages().calendarQuickCreate}\n data-kind=\"create\"\n onToggle={(event) => {\n if (event.newState !== \"closed\" || !view.quick() || event.currentTarget.matches(\":popover-open\")) return;\n close(focusInPopover());\n }}\n >\n <Show when={view.quick()} keyed>\n {(value) =>\n view.props.owner.renderQuickCreate?.(value.range, {\n create: value.create,\n close: () => {\n if (view.quick() === value) close(focusInPopover());\n },\n })\n }\n </Show>\n </div>\n );\n};\n\n/** All-day entries of a day as chips: bars with torn ends where they go on, and points due that day. */\nexport const AllDayChips = (props: { view: TimeView; dayKey: string; spans: readonly DaySpan<CalendarEvent>[] }) => {\n const view = props.view;\n return (\n <For each={props.spans}>\n {(span) => {\n const event = span.item;\n const checked = () => view.checkedOf(event);\n return (\n <span\n class=\"k2b-calendar-allday-chip\"\n data-bar={span.marker ? undefined : \"true\"}\n data-checkbox={checked() !== undefined ? \"true\" : undefined}\n data-checked={checked() ? \"true\" : undefined}\n data-just-checked={view.justChecked().has(event.id) ? \"true\" : undefined}\n style={{ \"--k2b-calendar-accent\": eventAccent(event) }}\n >\n <Show when={checked() !== undefined}>\n <TimeCheck view={view} event={event} />\n </Show>\n <EventChip\n event={view.normalized(event, props.dayKey)}\n owner={view.props.owner}\n href={eventHref(view.props.owner, event)}\n compact\n timeline\n bar={!span.marker}\n checkbox={checked() !== undefined}\n onCheck={view.checkOf(event)}\n continuesBefore={span.firstKey < props.dayKey}\n continuesAfter={span.lastKey > props.dayKey}\n />\n </span>\n );\n }}\n </For>\n );\n};\n\n/** Hour labels and lines of a day's timeline with the night open, and the date at midnight. */\nexport const nightHours = (wake: number) => {\n const hours: number[] = [];\n for (let minute = wake + 60; minute < DAY_MINUTES; minute += 60) hours.push(minute);\n return hours;\n};\n\nexport const isNearNow = (view: TimeView, key: string, minute: number) => key === view.nowKey() && Math.abs(view.nowMinute() - minute) < 14;\n\n/** Whether a marker sits right above a band's start, so its pill goes above the line. */\nexport const markerAbove = (model: DayModel<CalendarEvent>, minute: number) =>\n model.bands.some((band) => band.start >= minute - 10 && band.start <= minute + 20);\n\n/** Whether a deadline pill sits near the middle of a gap, so the gap's label moves aside. */\nexport const gapAside = (model: DayModel<CalendarEvent>, gap: DayGap) => {\n const middle = (gap.start + gap.end) / 2;\n return model.markers.some(\n (marker) => marker.minute > gap.start - 10 && marker.minute < gap.end + 10 && Math.abs(marker.minute - middle) < 25,\n );\n};\n\n/** A day's counts for its header: events and all-day entries, to-dos and deadlines. */\nexport const daySummary = (view: TimeView, key: string) => {\n const model = view.dayOf(key);\n const isTask = (event: CalendarEvent) => event.display === \"marker\" || event.checked !== undefined;\n const all = [\n ...model.bands.map((band) => band.item),\n ...model.markers.map((marker) => marker.item),\n ...model.spans.map((span) => span.item),\n ];\n const tasks = all.filter(isTask).length;\n return view.messages().calendarDaySummary({ events: all.length - tasks, tasks });\n};\n\n/** What starts within the next hour today, such as \"Planning in 12 min\". */\nexport const soonNote = (view: TimeView, key: string) => {\n if (key !== view.nowKey()) return \"\";\n const now = view.nowMinute();\n const next = view\n .dayOf(key)\n .bands.filter((band) => band.start > now && band.start - now <= 60 && !view.checkedOf(band.item))\n .sort((left, right) => left.start - right.start)[0];\n return next ? view.messages().calendarSoon({ title: next.item.title, duration: view.duration(next.start - now) }) : \"\";\n};\n\n/** The busy minutes of a day's waking hours, merged, with the color of the first entry, for the thin load line. */\nexport const dayLoad = (view: TimeView, key: string) => {\n const pieces = view\n .dayOf(key)\n .bands.map((band) => ({ start: Math.max(0, band.start), end: Math.min(view.wake(), band.end), color: eventAccent(band.item) }))\n .filter((piece) => piece.end > piece.start)\n .sort((left, right) => left.start - right.start);\n const merged: typeof pieces = [];\n for (const piece of pieces) {\n const last = merged[merged.length - 1];\n if (last && piece.start <= last.end) last.end = Math.max(last.end, piece.end);\n else merged.push({ ...piece });\n }\n return merged;\n};\n\n/** Day keys of the week that holds a day, from its first day. */\nexport const weekKeysOf = (view: TimeView, key: string) => {\n const start = view.keyOf(calendar.startOfWeek(view.parseKey(key), view.dateConfig()));\n return Array.from({ length: 7 }, (_, index) => addDayKeys(start, index));\n};\n"],"mappings":"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","ignoreList":[]}
@@ -6,12 +6,14 @@ const dataTableMessages = i18n.define({
6
6
  en: {
7
7
  dataTable: "Data table",
8
8
  noColumns: "No columns.",
9
- noRecords: "No records"
9
+ noRecords: "No records",
10
+ loadingRows: "Loading rows"
10
11
  },
11
12
  de: {
12
13
  dataTable: "Datentabelle",
13
14
  noColumns: "Keine Spalten.",
14
- noRecords: "Keine Einträge"
15
+ noRecords: "Keine Einträge",
16
+ loadingRows: "Zeilen werden geladen"
15
17
  }
16
18
  }
17
19
  });
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["content/data-table-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst dataTableMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n dataTable: \"Data table\",\n noColumns: \"No columns.\",\n noRecords: \"No records\",\n },\n de: {\n dataTable: \"Datentabelle\",\n noColumns: \"Keine Spalten.\",\n noRecords: \"Keine Einträge\",\n },\n },\n});\n\nexport type DataTableMessages = ReturnType<(typeof dataTableMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useDataTableMessages = (): (() => DataTableMessages) => {\n const locale = useLocale();\n return () => dataTableMessages.resolve([locale()]).t;\n};\n\nexport const checkDataTableMessages = () => dataTableMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC;EACpC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,SAAS,EAAE,YAAY;MACvB,SAAS,EAAE,aAAa;MACxB,SAAS,EAAE;IACb,CAAC;IACD,EAAE,EAAE;MACF,SAAS,EAAE,cAAc;MACzB,SAAS,EAAE,gBAAgB;MAC3B,SAAS,EAAE;IACb;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,oBAAoB,GAAG,MAAiC;EACnE,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,OAAO,MAAM,sBAAsB,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/data-table-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst dataTableMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n dataTable: \"Data table\",\n noColumns: \"No columns.\",\n noRecords: \"No records\",\n loadingRows: \"Loading rows\",\n },\n de: {\n dataTable: \"Datentabelle\",\n noColumns: \"Keine Spalten.\",\n noRecords: \"Keine Einträge\",\n loadingRows: \"Zeilen werden geladen\",\n },\n },\n});\n\nexport type DataTableMessages = ReturnType<(typeof dataTableMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useDataTableMessages = (): (() => DataTableMessages) => {\n const locale = useLocale();\n return () => dataTableMessages.resolve([locale()]).t;\n};\n\nexport const checkDataTableMessages = () => dataTableMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC;EACpC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,SAAS,EAAE,YAAY;MACvB,SAAS,EAAE,aAAa;MACxB,SAAS,EAAE,YAAY;MACvB,WAAW,EAAE;IACf,CAAC;IACD,EAAE,EAAE;MACF,SAAS,EAAE,cAAc;MACzB,SAAS,EAAE,gBAAgB;MAC3B,SAAS,EAAE,gBAAgB;MAC3B,WAAW,EAAE;IACf;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,oBAAoB,GAAG,MAAiC;EACnE,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,OAAO,MAAM,sBAAsB,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -14,6 +14,7 @@ export { DocCode, DocConceptGrid, DocInlineCode, DocLead, DocNote, DocPage, DocR
14
14
  export { FileBrowserPanel, openFileBrowser } from "./FileBrowser";
15
15
  export { FileGrid } from "./FileGrid";
16
16
  export { default as FileTree } from "./FileTree";
17
+ export { FileTypeIcon, fileTypeOf } from "./FileTypeIcon";
17
18
  export { canPreviewFile, default as FileView, formatFileViewSize, getFileViewPreviewKind } from "./FileView";
18
19
  export { Kbd } from "./Kbd";
19
20
  export { LabelChip } from "./LabelChip";
@@ -27,6 +28,7 @@ export { Pagination } from "./Pagination";
27
28
  export { default as PdfPreview } from "./PdfPreview";
28
29
  export { default as RangePicker } from "./RangePicker";
29
30
  export { ReactionBar } from "./ReactionBar";
31
+ export { REFERENCE_CHIP_MAX_CHARACTERS, ReferenceChip, truncateMiddle } from "./ReferenceChip";
30
32
  export { Steps } from "./Steps";
31
33
  export { default as StructuredDataPreview, isStructuredDataValue } from "./StructuredDataPreview";
32
34
  export { default as Timeline } from "./Timeline";