@k2b/ui 0.21.0 → 0.23.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 (610) hide show
  1. package/dist/browser/actions/ContextMenu.js +3 -1
  2. package/dist/browser/actions/ContextMenu.js.map +1 -1
  3. package/dist/browser/actions/FilterChip.js +3 -1
  4. package/dist/browser/actions/FilterChip.js.map +1 -1
  5. package/dist/browser/actions/SpotlightSearch.js +3 -1
  6. package/dist/browser/actions/SpotlightSearch.js.map +1 -1
  7. package/dist/browser/actions/filter-messages.js +20 -0
  8. package/dist/browser/actions/filter-messages.js.map +1 -0
  9. package/dist/browser/actions/spotlight-messages.js +16 -0
  10. package/dist/browser/actions/spotlight-messages.js.map +1 -0
  11. package/dist/browser/chat/ChatComposer.js +47 -41
  12. package/dist/browser/chat/ChatComposer.js.map +1 -1
  13. package/dist/browser/chat/ChatPrimitives.js +25 -23
  14. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  15. package/dist/browser/chat/ChatRoot.js +3 -3
  16. package/dist/browser/chat/ChatRoot.js.map +1 -1
  17. package/dist/browser/chat/ChatTimeline.js +12 -12
  18. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  19. package/dist/browser/chat/chat-messages.js +236 -0
  20. package/dist/browser/chat/chat-messages.js.map +1 -0
  21. package/dist/browser/content/Calendar.js +1096 -1060
  22. package/dist/browser/content/Calendar.js.map +1 -1
  23. package/dist/browser/content/CalendarDayView.js +1187 -0
  24. package/dist/browser/content/CalendarDayView.js.map +1 -0
  25. package/dist/browser/content/CalendarWeekView.js +1571 -0
  26. package/dist/browser/content/CalendarWeekView.js.map +1 -0
  27. package/dist/browser/content/Chart.js +15 -8
  28. package/dist/browser/content/Chart.js.map +1 -1
  29. package/dist/browser/content/ChartExplorer.js +185 -85
  30. package/dist/browser/content/ChartExplorer.js.map +1 -1
  31. package/dist/browser/content/ChartExplorerControls.js +9 -7
  32. package/dist/browser/content/ChartExplorerControls.js.map +1 -1
  33. package/dist/browser/content/ChartFilterControls.js +93 -34
  34. package/dist/browser/content/ChartFilterControls.js.map +1 -1
  35. package/dist/browser/content/ChartSnapshotView.js +3 -3
  36. package/dist/browser/content/ChartSnapshotView.js.map +1 -1
  37. package/dist/browser/content/DataTable.js +238 -201
  38. package/dist/browser/content/DataTable.js.map +1 -1
  39. package/dist/browser/content/Docs.js +3 -1
  40. package/dist/browser/content/Docs.js.map +1 -1
  41. package/dist/browser/content/FileBrowser.js +30 -26
  42. package/dist/browser/content/FileBrowser.js.map +1 -1
  43. package/dist/browser/content/FileTree.js +9 -7
  44. package/dist/browser/content/FileTree.js.map +1 -1
  45. package/dist/browser/content/FileView.js +37 -28
  46. package/dist/browser/content/FileView.js.map +1 -1
  47. package/dist/browser/content/Lightbox.js +9 -7
  48. package/dist/browser/content/Lightbox.js.map +1 -1
  49. package/dist/browser/content/LogEntriesTable.js +3 -3
  50. package/dist/browser/content/LogEntriesTable.js.map +1 -1
  51. package/dist/browser/content/MessageRow.js +24 -22
  52. package/dist/browser/content/MessageRow.js.map +1 -1
  53. package/dist/browser/content/Pagination.js +7 -7
  54. package/dist/browser/content/Pagination.js.map +1 -1
  55. package/dist/browser/content/PdfPreview.js +15 -13
  56. package/dist/browser/content/PdfPreview.js.map +1 -1
  57. package/dist/browser/content/RangePicker.js +3 -1
  58. package/dist/browser/content/RangePicker.js.map +1 -1
  59. package/dist/browser/content/StructuredDataPreview.js +3 -1
  60. package/dist/browser/content/StructuredDataPreview.js.map +1 -1
  61. package/dist/browser/content/Timeline.js +13 -11
  62. package/dist/browser/content/Timeline.js.map +1 -1
  63. package/dist/browser/content/VideoPlayer.js +5 -5
  64. package/dist/browser/content/VideoPlayer.js.map +1 -1
  65. package/dist/browser/content/VirtualFeed.js +6 -4
  66. package/dist/browser/content/VirtualFeed.js.map +1 -1
  67. package/dist/browser/content/ZoomPanViewport.js +10 -7
  68. package/dist/browser/content/ZoomPanViewport.js.map +1 -1
  69. package/dist/browser/content/calendar-day-scroll.js +98 -0
  70. package/dist/browser/content/calendar-day-scroll.js.map +1 -0
  71. package/dist/browser/content/calendar-days.js +408 -0
  72. package/dist/browser/content/calendar-days.js.map +1 -0
  73. package/dist/browser/content/calendar-dialogs.js +236 -0
  74. package/dist/browser/content/calendar-dialogs.js.map +1 -0
  75. package/dist/browser/content/calendar-messages.js +249 -3
  76. package/dist/browser/content/calendar-messages.js.map +1 -1
  77. package/dist/browser/content/calendar-pointer.js +19 -6
  78. package/dist/browser/content/calendar-pointer.js.map +1 -1
  79. package/dist/browser/content/calendar-shared.js +328 -0
  80. package/dist/browser/content/calendar-shared.js.map +1 -0
  81. package/dist/browser/content/calendar-time-view.js +1649 -0
  82. package/dist/browser/content/calendar-time-view.js.map +1 -0
  83. package/dist/browser/content/chart-messages.js +146 -0
  84. package/dist/browser/content/chart-messages.js.map +1 -0
  85. package/dist/browser/content/collection-selection.js +2 -0
  86. package/dist/browser/content/collection-selection.js.map +1 -1
  87. package/dist/browser/content/data-table-messages.js +24 -0
  88. package/dist/browser/content/data-table-messages.js.map +1 -0
  89. package/dist/browser/content/docs-messages.js +24 -0
  90. package/dist/browser/content/docs-messages.js.map +1 -0
  91. package/dist/browser/content/feed-messages.js +34 -0
  92. package/dist/browser/content/feed-messages.js.map +1 -0
  93. package/dist/browser/content/file-browser-messages.js +69 -0
  94. package/dist/browser/content/file-browser-messages.js.map +1 -0
  95. package/dist/browser/content/file-view-messages.js +64 -0
  96. package/dist/browser/content/file-view-messages.js.map +1 -0
  97. package/dist/browser/content/index.js.map +1 -1
  98. package/dist/browser/content/lightbox-messages.js +36 -0
  99. package/dist/browser/content/lightbox-messages.js.map +1 -0
  100. package/dist/browser/content/log-entries-messages.js +20 -0
  101. package/dist/browser/content/log-entries-messages.js.map +1 -0
  102. package/dist/browser/content/markdown-info-block-messages.js +24 -0
  103. package/dist/browser/content/markdown-info-block-messages.js.map +1 -0
  104. package/dist/browser/content/markdown-info-blocks.js +3 -3
  105. package/dist/browser/content/markdown-info-blocks.js.map +1 -1
  106. package/dist/browser/content/markdown-links.js +2 -2
  107. package/dist/browser/content/markdown-links.js.map +1 -1
  108. package/dist/browser/content/markdown-reference-messages.js +30 -0
  109. package/dist/browser/content/markdown-reference-messages.js.map +1 -0
  110. package/dist/browser/content/pagination-messages.js +38 -0
  111. package/dist/browser/content/pagination-messages.js.map +1 -0
  112. package/dist/browser/content/pdf-messages.js +43 -0
  113. package/dist/browser/content/pdf-messages.js.map +1 -0
  114. package/dist/browser/content/range-picker-messages.js +20 -0
  115. package/dist/browser/content/range-picker-messages.js.map +1 -0
  116. package/dist/browser/content/structured-data-messages.js +22 -0
  117. package/dist/browser/content/structured-data-messages.js.map +1 -0
  118. package/dist/browser/content/timeline-messages.js +62 -0
  119. package/dist/browser/content/timeline-messages.js.map +1 -0
  120. package/dist/browser/content/video-messages.js +24 -0
  121. package/dist/browser/content/video-messages.js.map +1 -0
  122. package/dist/browser/content/viewport-messages.js +28 -0
  123. package/dist/browser/content/viewport-messages.js.map +1 -0
  124. package/dist/browser/feedback/HoverPreview.js +34 -6
  125. package/dist/browser/feedback/HoverPreview.js.map +1 -1
  126. package/dist/browser/feedback/InstallGuide.js +18 -18
  127. package/dist/browser/feedback/InstallGuide.js.map +1 -1
  128. package/dist/browser/feedback/install-messages.js +104 -0
  129. package/dist/browser/feedback/install-messages.js.map +1 -0
  130. package/dist/browser/feedback/prompt-messages.js +65 -0
  131. package/dist/browser/feedback/prompt-messages.js.map +1 -0
  132. package/dist/browser/feedback/prompts.js +14 -11
  133. package/dist/browser/feedback/prompts.js.map +1 -1
  134. package/dist/browser/feedback/toast-messages.js +18 -0
  135. package/dist/browser/feedback/toast-messages.js.map +1 -0
  136. package/dist/browser/feedback/toast.js +4 -3
  137. package/dist/browser/feedback/toast.js.map +1 -1
  138. package/dist/browser/index.js +1 -1
  139. package/dist/browser/index.js.map +1 -1
  140. package/dist/browser/inputs/AutocompleteEditor.js +6 -4
  141. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
  142. package/dist/browser/inputs/AutocompleteSelect.js +10 -8
  143. package/dist/browser/inputs/AutocompleteSelect.js.map +1 -1
  144. package/dist/browser/inputs/ChoiceGroups.js +4 -0
  145. package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
  146. package/dist/browser/inputs/ChoiceInputs.js +5 -5
  147. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  148. package/dist/browser/inputs/Combobox.js +3 -2
  149. package/dist/browser/inputs/Combobox.js.map +1 -1
  150. package/dist/browser/inputs/FileDropTarget.js +6 -6
  151. package/dist/browser/inputs/FileDropTarget.js.map +1 -1
  152. package/dist/browser/inputs/FileInputs.js +30 -21
  153. package/dist/browser/inputs/FileInputs.js.map +1 -1
  154. package/dist/browser/inputs/MultiSelectInput.js +7 -5
  155. package/dist/browser/inputs/MultiSelectInput.js.map +1 -1
  156. package/dist/browser/inputs/NumberInput.js +4 -2
  157. package/dist/browser/inputs/NumberInput.js.map +1 -1
  158. package/dist/browser/inputs/QrScanner.js +5 -5
  159. package/dist/browser/inputs/QrScanner.js.map +1 -1
  160. package/dist/browser/inputs/Select.js +7 -5
  161. package/dist/browser/inputs/Select.js.map +1 -1
  162. package/dist/browser/inputs/SelectChip.js +3 -3
  163. package/dist/browser/inputs/SelectChip.js.map +1 -1
  164. package/dist/browser/inputs/SignatureInput.js +9 -3
  165. package/dist/browser/inputs/SignatureInput.js.map +1 -1
  166. package/dist/browser/inputs/SpecialInputs.js +4 -2
  167. package/dist/browser/inputs/SpecialInputs.js.map +1 -1
  168. package/dist/browser/inputs/TagEditor.js +8 -6
  169. package/dist/browser/inputs/TagEditor.js.map +1 -1
  170. package/dist/browser/inputs/TagsInput.js +5 -5
  171. package/dist/browser/inputs/TagsInput.js.map +1 -1
  172. package/dist/browser/inputs/TemplateEditor.js +5 -5
  173. package/dist/browser/inputs/TemplateEditor.js.map +1 -1
  174. package/dist/browser/inputs/TextInput.js +3 -1
  175. package/dist/browser/inputs/TextInput.js.map +1 -1
  176. package/dist/browser/inputs/completion-messages.js +24 -0
  177. package/dist/browser/inputs/completion-messages.js.map +1 -0
  178. package/dist/browser/inputs/file-drop-messages.js +63 -0
  179. package/dist/browser/inputs/file-drop-messages.js.map +1 -0
  180. package/dist/browser/inputs/file-drop.js.map +1 -1
  181. package/dist/browser/inputs/file-input-messages.js +60 -0
  182. package/dist/browser/inputs/file-input-messages.js.map +1 -0
  183. package/dist/browser/inputs/icon-messages.js +22 -0
  184. package/dist/browser/inputs/icon-messages.js.map +1 -0
  185. package/dist/browser/inputs/input-messages.js +38 -0
  186. package/dist/browser/inputs/input-messages.js.map +1 -0
  187. package/dist/browser/inputs/markdown/MarkdownEditor.js +10 -6
  188. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  189. package/dist/browser/inputs/markdown/Toolbar.js +13 -13
  190. package/dist/browser/inputs/markdown/Toolbar.js.map +1 -1
  191. package/dist/browser/inputs/markdown/editor-messages.js +43 -0
  192. package/dist/browser/inputs/markdown/editor-messages.js.map +1 -0
  193. package/dist/browser/inputs/markdown/toolbar-messages.js +40 -0
  194. package/dist/browser/inputs/markdown/toolbar-messages.js.map +1 -0
  195. package/dist/browser/inputs/qr-messages.js +26 -0
  196. package/dist/browser/inputs/qr-messages.js.map +1 -0
  197. package/dist/browser/inputs/select-messages.js +63 -0
  198. package/dist/browser/inputs/select-messages.js.map +1 -0
  199. package/dist/browser/inputs/tag-messages.js +44 -0
  200. package/dist/browser/inputs/tag-messages.js.map +1 -0
  201. package/dist/browser/inputs/template-messages.js +22 -0
  202. package/dist/browser/inputs/template-messages.js.map +1 -0
  203. package/dist/browser/internal/render-error-messages.js +20 -0
  204. package/dist/browser/internal/render-error-messages.js.map +1 -0
  205. package/dist/browser/internal/render-error.js +3 -1
  206. package/dist/browser/internal/render-error.js.map +1 -1
  207. package/dist/browser/internal/text-selection.js +101 -0
  208. package/dist/browser/internal/text-selection.js.map +1 -0
  209. package/dist/browser/intl/messages.js +6 -1155
  210. package/dist/browser/intl/messages.js.map +1 -1
  211. package/dist/browser/layout/AppWorkspace.js +594 -425
  212. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  213. package/dist/browser/layout/BottomSheet.js +6 -1
  214. package/dist/browser/layout/BottomSheet.js.map +1 -1
  215. package/dist/browser/layout/Discussion.js +8 -5
  216. package/dist/browser/layout/Discussion.js.map +1 -1
  217. package/dist/browser/layout/FloatingWindow.js +8 -5
  218. package/dist/browser/layout/FloatingWindow.js.map +1 -1
  219. package/dist/browser/layout/Navigation.js +7 -6
  220. package/dist/browser/layout/Navigation.js.map +1 -1
  221. package/dist/browser/layout/PageTitle.js +373 -0
  222. package/dist/browser/layout/PageTitle.js.map +1 -0
  223. package/dist/browser/layout/PanelDialog.js +8 -6
  224. package/dist/browser/layout/PanelDialog.js.map +1 -1
  225. package/dist/browser/layout/Panes.js +23 -15
  226. package/dist/browser/layout/Panes.js.map +1 -1
  227. package/dist/browser/layout/PullToRefresh.js +13 -4
  228. package/dist/browser/layout/PullToRefresh.js.map +1 -1
  229. package/dist/browser/layout/Settings.js +14 -12
  230. package/dist/browser/layout/Settings.js.map +1 -1
  231. package/dist/browser/layout/SettingsCollection.js +6 -5
  232. package/dist/browser/layout/SettingsCollection.js.map +1 -1
  233. package/dist/browser/layout/SettingsModal.js +3 -1
  234. package/dist/browser/layout/SettingsModal.js.map +1 -1
  235. package/dist/browser/layout/app-workspace-controller.js +821 -12
  236. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  237. package/dist/browser/layout/app-workspace-state.js +3 -2
  238. package/dist/browser/layout/app-workspace-state.js.map +1 -1
  239. package/dist/browser/layout/floating-window-messages.js +28 -0
  240. package/dist/browser/layout/floating-window-messages.js.map +1 -0
  241. package/dist/browser/layout/index.js +2 -0
  242. package/dist/browser/layout/index.js.map +1 -1
  243. package/dist/browser/layout/navigation-model.js.map +1 -1
  244. package/dist/browser/layout/page-title-controller.js +169 -0
  245. package/dist/browser/layout/page-title-controller.js.map +1 -0
  246. package/dist/browser/layout/panel-dialog-messages.js +20 -0
  247. package/dist/browser/layout/panel-dialog-messages.js.map +1 -0
  248. package/dist/browser/layout/panes-messages.js +48 -0
  249. package/dist/browser/layout/panes-messages.js.map +1 -0
  250. package/dist/browser/layout/refresh-messages.js +20 -0
  251. package/dist/browser/layout/refresh-messages.js.map +1 -0
  252. package/dist/browser/layout/settings-messages.js +54 -0
  253. package/dist/browser/layout/settings-messages.js.map +1 -0
  254. package/dist/browser/layout/workspace-messages.js +56 -0
  255. package/dist/browser/layout/workspace-messages.js.map +1 -0
  256. package/dist/browser/surfaces/Avatar.js +5 -5
  257. package/dist/browser/surfaces/Avatar.js.map +1 -1
  258. package/dist/browser/surfaces/ResourceCard.js +4 -2
  259. package/dist/browser/surfaces/ResourceCard.js.map +1 -1
  260. package/dist/browser/surfaces/StatCell.js +18 -6
  261. package/dist/browser/surfaces/StatCell.js.map +1 -1
  262. package/dist/browser/surfaces/Tag.js +3 -3
  263. package/dist/browser/surfaces/Tag.js.map +1 -1
  264. package/dist/browser/surfaces/avatar-messages.js +26 -0
  265. package/dist/browser/surfaces/avatar-messages.js.map +1 -0
  266. package/dist/browser/surfaces/resource-messages.js +26 -0
  267. package/dist/browser/surfaces/resource-messages.js.map +1 -0
  268. package/dist/browser/widgets/Widget.js +6 -0
  269. package/dist/browser/widgets/Widget.js.map +1 -1
  270. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  271. package/dist/ssr/actions/FilterChip.js +3 -1
  272. package/dist/ssr/actions/FilterChip.js.map +1 -1
  273. package/dist/ssr/actions/SpotlightSearch.js +3 -1
  274. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  275. package/dist/ssr/actions/filter-messages.js +20 -0
  276. package/dist/ssr/actions/filter-messages.js.map +1 -0
  277. package/dist/ssr/actions/spotlight-messages.js +16 -0
  278. package/dist/ssr/actions/spotlight-messages.js.map +1 -0
  279. package/dist/ssr/chat/ChatComposer.js +47 -41
  280. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  281. package/dist/ssr/chat/ChatPrimitives.js +23 -21
  282. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  283. package/dist/ssr/chat/ChatRoot.js +3 -3
  284. package/dist/ssr/chat/ChatRoot.js.map +1 -1
  285. package/dist/ssr/chat/ChatTimeline.js +11 -11
  286. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  287. package/dist/ssr/chat/chat-messages.js +236 -0
  288. package/dist/ssr/chat/chat-messages.js.map +1 -0
  289. package/dist/ssr/content/Calendar.js +534 -346
  290. package/dist/ssr/content/Calendar.js.map +1 -1
  291. package/dist/ssr/content/CalendarDayView.js +800 -0
  292. package/dist/ssr/content/CalendarDayView.js.map +1 -0
  293. package/dist/ssr/content/CalendarWeekView.js +1069 -0
  294. package/dist/ssr/content/CalendarWeekView.js.map +1 -0
  295. package/dist/ssr/content/Chart.js +12 -5
  296. package/dist/ssr/content/Chart.js.map +1 -1
  297. package/dist/ssr/content/ChartExplorer.js +98 -37
  298. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  299. package/dist/ssr/content/ChartExplorerControls.js +9 -7
  300. package/dist/ssr/content/ChartExplorerControls.js.map +1 -1
  301. package/dist/ssr/content/ChartFilterControls.js +52 -8
  302. package/dist/ssr/content/ChartFilterControls.js.map +1 -1
  303. package/dist/ssr/content/ChartSnapshotView.js +3 -3
  304. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  305. package/dist/ssr/content/DataTable.js +77 -53
  306. package/dist/ssr/content/DataTable.js.map +1 -1
  307. package/dist/ssr/content/Docs.js +3 -1
  308. package/dist/ssr/content/Docs.js.map +1 -1
  309. package/dist/ssr/content/FileBrowser.js +30 -26
  310. package/dist/ssr/content/FileBrowser.js.map +1 -1
  311. package/dist/ssr/content/FileTree.js +9 -7
  312. package/dist/ssr/content/FileTree.js.map +1 -1
  313. package/dist/ssr/content/FileView.js +37 -28
  314. package/dist/ssr/content/FileView.js.map +1 -1
  315. package/dist/ssr/content/Lightbox.js +8 -6
  316. package/dist/ssr/content/Lightbox.js.map +1 -1
  317. package/dist/ssr/content/LogEntriesTable.js +3 -3
  318. package/dist/ssr/content/LogEntriesTable.js.map +1 -1
  319. package/dist/ssr/content/MessageRow.js +24 -22
  320. package/dist/ssr/content/MessageRow.js.map +1 -1
  321. package/dist/ssr/content/Pagination.js +6 -6
  322. package/dist/ssr/content/Pagination.js.map +1 -1
  323. package/dist/ssr/content/PdfPreview.js +15 -13
  324. package/dist/ssr/content/PdfPreview.js.map +1 -1
  325. package/dist/ssr/content/RangePicker.js +3 -1
  326. package/dist/ssr/content/RangePicker.js.map +1 -1
  327. package/dist/ssr/content/StructuredDataPreview.js +3 -1
  328. package/dist/ssr/content/StructuredDataPreview.js.map +1 -1
  329. package/dist/ssr/content/Timeline.js +13 -11
  330. package/dist/ssr/content/Timeline.js.map +1 -1
  331. package/dist/ssr/content/VideoPlayer.js +5 -5
  332. package/dist/ssr/content/VideoPlayer.js.map +1 -1
  333. package/dist/ssr/content/VirtualFeed.js +6 -4
  334. package/dist/ssr/content/VirtualFeed.js.map +1 -1
  335. package/dist/ssr/content/ZoomPanViewport.js +7 -4
  336. package/dist/ssr/content/ZoomPanViewport.js.map +1 -1
  337. package/dist/ssr/content/calendar-day-scroll.js +98 -0
  338. package/dist/ssr/content/calendar-day-scroll.js.map +1 -0
  339. package/dist/ssr/content/calendar-days.js +408 -0
  340. package/dist/ssr/content/calendar-days.js.map +1 -0
  341. package/dist/ssr/content/calendar-dialogs.js +159 -0
  342. package/dist/ssr/content/calendar-dialogs.js.map +1 -0
  343. package/dist/ssr/content/calendar-messages.js +249 -3
  344. package/dist/ssr/content/calendar-messages.js.map +1 -1
  345. package/dist/ssr/content/calendar-pointer.js +19 -6
  346. package/dist/ssr/content/calendar-pointer.js.map +1 -1
  347. package/dist/ssr/content/calendar-shared.js +261 -0
  348. package/dist/ssr/content/calendar-shared.js.map +1 -0
  349. package/dist/ssr/content/calendar-time-view.js +1306 -0
  350. package/dist/ssr/content/calendar-time-view.js.map +1 -0
  351. package/dist/ssr/content/chart-messages.js +146 -0
  352. package/dist/ssr/content/chart-messages.js.map +1 -0
  353. package/dist/ssr/content/collection-selection.js +2 -0
  354. package/dist/ssr/content/collection-selection.js.map +1 -1
  355. package/dist/ssr/content/data-table-messages.js +24 -0
  356. package/dist/ssr/content/data-table-messages.js.map +1 -0
  357. package/dist/ssr/content/docs-messages.js +24 -0
  358. package/dist/ssr/content/docs-messages.js.map +1 -0
  359. package/dist/ssr/content/feed-messages.js +34 -0
  360. package/dist/ssr/content/feed-messages.js.map +1 -0
  361. package/dist/ssr/content/file-browser-messages.js +69 -0
  362. package/dist/ssr/content/file-browser-messages.js.map +1 -0
  363. package/dist/ssr/content/file-view-messages.js +64 -0
  364. package/dist/ssr/content/file-view-messages.js.map +1 -0
  365. package/dist/ssr/content/index.js.map +1 -1
  366. package/dist/ssr/content/lightbox-messages.js +36 -0
  367. package/dist/ssr/content/lightbox-messages.js.map +1 -0
  368. package/dist/ssr/content/log-entries-messages.js +20 -0
  369. package/dist/ssr/content/log-entries-messages.js.map +1 -0
  370. package/dist/ssr/content/markdown-info-block-messages.js +24 -0
  371. package/dist/ssr/content/markdown-info-block-messages.js.map +1 -0
  372. package/dist/ssr/content/markdown-info-blocks.js +3 -3
  373. package/dist/ssr/content/markdown-info-blocks.js.map +1 -1
  374. package/dist/ssr/content/markdown-links.js +2 -2
  375. package/dist/ssr/content/markdown-links.js.map +1 -1
  376. package/dist/ssr/content/markdown-reference-messages.js +30 -0
  377. package/dist/ssr/content/markdown-reference-messages.js.map +1 -0
  378. package/dist/ssr/content/pagination-messages.js +38 -0
  379. package/dist/ssr/content/pagination-messages.js.map +1 -0
  380. package/dist/ssr/content/pdf-messages.js +43 -0
  381. package/dist/ssr/content/pdf-messages.js.map +1 -0
  382. package/dist/ssr/content/range-picker-messages.js +20 -0
  383. package/dist/ssr/content/range-picker-messages.js.map +1 -0
  384. package/dist/ssr/content/structured-data-messages.js +22 -0
  385. package/dist/ssr/content/structured-data-messages.js.map +1 -0
  386. package/dist/ssr/content/timeline-messages.js +62 -0
  387. package/dist/ssr/content/timeline-messages.js.map +1 -0
  388. package/dist/ssr/content/video-messages.js +24 -0
  389. package/dist/ssr/content/video-messages.js.map +1 -0
  390. package/dist/ssr/content/viewport-messages.js +28 -0
  391. package/dist/ssr/content/viewport-messages.js.map +1 -0
  392. package/dist/ssr/feedback/HoverPreview.js +34 -6
  393. package/dist/ssr/feedback/HoverPreview.js.map +1 -1
  394. package/dist/ssr/feedback/InstallGuide.js +18 -18
  395. package/dist/ssr/feedback/InstallGuide.js.map +1 -1
  396. package/dist/ssr/feedback/install-messages.js +104 -0
  397. package/dist/ssr/feedback/install-messages.js.map +1 -0
  398. package/dist/ssr/feedback/prompt-messages.js +65 -0
  399. package/dist/ssr/feedback/prompt-messages.js.map +1 -0
  400. package/dist/ssr/feedback/prompts.js +14 -11
  401. package/dist/ssr/feedback/prompts.js.map +1 -1
  402. package/dist/ssr/feedback/toast-messages.js +18 -0
  403. package/dist/ssr/feedback/toast-messages.js.map +1 -0
  404. package/dist/ssr/feedback/toast.js +4 -3
  405. package/dist/ssr/feedback/toast.js.map +1 -1
  406. package/dist/ssr/index.js +1 -1
  407. package/dist/ssr/index.js.map +1 -1
  408. package/dist/ssr/inputs/AutocompleteEditor.js +5 -3
  409. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
  410. package/dist/ssr/inputs/AutocompleteSelect.js +10 -8
  411. package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -1
  412. package/dist/ssr/inputs/ChoiceGroups.js +4 -0
  413. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
  414. package/dist/ssr/inputs/ChoiceInputs.js +5 -5
  415. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  416. package/dist/ssr/inputs/Combobox.js +3 -1
  417. package/dist/ssr/inputs/Combobox.js.map +1 -1
  418. package/dist/ssr/inputs/FileDropTarget.js +6 -6
  419. package/dist/ssr/inputs/FileDropTarget.js.map +1 -1
  420. package/dist/ssr/inputs/FileInputs.js +29 -20
  421. package/dist/ssr/inputs/FileInputs.js.map +1 -1
  422. package/dist/ssr/inputs/MultiSelectInput.js +7 -5
  423. package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
  424. package/dist/ssr/inputs/NumberInput.js +4 -2
  425. package/dist/ssr/inputs/NumberInput.js.map +1 -1
  426. package/dist/ssr/inputs/QrScanner.js +4 -4
  427. package/dist/ssr/inputs/QrScanner.js.map +1 -1
  428. package/dist/ssr/inputs/Select.js +7 -5
  429. package/dist/ssr/inputs/Select.js.map +1 -1
  430. package/dist/ssr/inputs/SelectChip.js +3 -3
  431. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  432. package/dist/ssr/inputs/SignatureInput.js +9 -3
  433. package/dist/ssr/inputs/SignatureInput.js.map +1 -1
  434. package/dist/ssr/inputs/SpecialInputs.js +4 -2
  435. package/dist/ssr/inputs/SpecialInputs.js.map +1 -1
  436. package/dist/ssr/inputs/TagEditor.js +8 -6
  437. package/dist/ssr/inputs/TagEditor.js.map +1 -1
  438. package/dist/ssr/inputs/TagsInput.js +5 -5
  439. package/dist/ssr/inputs/TagsInput.js.map +1 -1
  440. package/dist/ssr/inputs/TemplateEditor.js +5 -5
  441. package/dist/ssr/inputs/TemplateEditor.js.map +1 -1
  442. package/dist/ssr/inputs/TextInput.js +3 -1
  443. package/dist/ssr/inputs/TextInput.js.map +1 -1
  444. package/dist/ssr/inputs/completion-messages.js +24 -0
  445. package/dist/ssr/inputs/completion-messages.js.map +1 -0
  446. package/dist/ssr/inputs/file-drop-messages.js +63 -0
  447. package/dist/ssr/inputs/file-drop-messages.js.map +1 -0
  448. package/dist/ssr/inputs/file-drop.js.map +1 -1
  449. package/dist/ssr/inputs/file-input-messages.js +60 -0
  450. package/dist/ssr/inputs/file-input-messages.js.map +1 -0
  451. package/dist/ssr/inputs/icon-messages.js +22 -0
  452. package/dist/ssr/inputs/icon-messages.js.map +1 -0
  453. package/dist/ssr/inputs/input-messages.js +38 -0
  454. package/dist/ssr/inputs/input-messages.js.map +1 -0
  455. package/dist/ssr/inputs/markdown/MarkdownEditor.js +9 -5
  456. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  457. package/dist/ssr/inputs/markdown/Toolbar.js +13 -13
  458. package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -1
  459. package/dist/ssr/inputs/markdown/editor-messages.js +43 -0
  460. package/dist/ssr/inputs/markdown/editor-messages.js.map +1 -0
  461. package/dist/ssr/inputs/markdown/toolbar-messages.js +40 -0
  462. package/dist/ssr/inputs/markdown/toolbar-messages.js.map +1 -0
  463. package/dist/ssr/inputs/qr-messages.js +26 -0
  464. package/dist/ssr/inputs/qr-messages.js.map +1 -0
  465. package/dist/ssr/inputs/select-messages.js +63 -0
  466. package/dist/ssr/inputs/select-messages.js.map +1 -0
  467. package/dist/ssr/inputs/tag-messages.js +44 -0
  468. package/dist/ssr/inputs/tag-messages.js.map +1 -0
  469. package/dist/ssr/inputs/template-messages.js +22 -0
  470. package/dist/ssr/inputs/template-messages.js.map +1 -0
  471. package/dist/ssr/internal/render-error-messages.js +20 -0
  472. package/dist/ssr/internal/render-error-messages.js.map +1 -0
  473. package/dist/ssr/internal/render-error.js +3 -1
  474. package/dist/ssr/internal/render-error.js.map +1 -1
  475. package/dist/ssr/internal/text-selection.js +101 -0
  476. package/dist/ssr/internal/text-selection.js.map +1 -0
  477. package/dist/ssr/intl/messages.js +6 -1155
  478. package/dist/ssr/intl/messages.js.map +1 -1
  479. package/dist/ssr/layout/AppWorkspace.js +219 -103
  480. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  481. package/dist/ssr/layout/BottomSheet.js +1 -0
  482. package/dist/ssr/layout/BottomSheet.js.map +1 -1
  483. package/dist/ssr/layout/Discussion.js +8 -5
  484. package/dist/ssr/layout/Discussion.js.map +1 -1
  485. package/dist/ssr/layout/FloatingWindow.js +8 -5
  486. package/dist/ssr/layout/FloatingWindow.js.map +1 -1
  487. package/dist/ssr/layout/Navigation.js +6 -5
  488. package/dist/ssr/layout/Navigation.js.map +1 -1
  489. package/dist/ssr/layout/PageTitle.js +256 -0
  490. package/dist/ssr/layout/PageTitle.js.map +1 -0
  491. package/dist/ssr/layout/PanelDialog.js +8 -6
  492. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  493. package/dist/ssr/layout/Panes.js +22 -14
  494. package/dist/ssr/layout/Panes.js.map +1 -1
  495. package/dist/ssr/layout/PullToRefresh.js +13 -4
  496. package/dist/ssr/layout/PullToRefresh.js.map +1 -1
  497. package/dist/ssr/layout/Settings.js +14 -12
  498. package/dist/ssr/layout/Settings.js.map +1 -1
  499. package/dist/ssr/layout/SettingsCollection.js +6 -5
  500. package/dist/ssr/layout/SettingsCollection.js.map +1 -1
  501. package/dist/ssr/layout/SettingsModal.js +3 -1
  502. package/dist/ssr/layout/SettingsModal.js.map +1 -1
  503. package/dist/ssr/layout/app-workspace-controller.js +821 -12
  504. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  505. package/dist/ssr/layout/app-workspace-state.js +3 -2
  506. package/dist/ssr/layout/app-workspace-state.js.map +1 -1
  507. package/dist/ssr/layout/floating-window-messages.js +28 -0
  508. package/dist/ssr/layout/floating-window-messages.js.map +1 -0
  509. package/dist/ssr/layout/index.js +2 -0
  510. package/dist/ssr/layout/index.js.map +1 -1
  511. package/dist/ssr/layout/navigation-model.js.map +1 -1
  512. package/dist/ssr/layout/page-title-controller.js +169 -0
  513. package/dist/ssr/layout/page-title-controller.js.map +1 -0
  514. package/dist/ssr/layout/panel-dialog-messages.js +20 -0
  515. package/dist/ssr/layout/panel-dialog-messages.js.map +1 -0
  516. package/dist/ssr/layout/panes-messages.js +48 -0
  517. package/dist/ssr/layout/panes-messages.js.map +1 -0
  518. package/dist/ssr/layout/refresh-messages.js +20 -0
  519. package/dist/ssr/layout/refresh-messages.js.map +1 -0
  520. package/dist/ssr/layout/settings-messages.js +54 -0
  521. package/dist/ssr/layout/settings-messages.js.map +1 -0
  522. package/dist/ssr/layout/workspace-messages.js +56 -0
  523. package/dist/ssr/layout/workspace-messages.js.map +1 -0
  524. package/dist/ssr/surfaces/Avatar.js +5 -5
  525. package/dist/ssr/surfaces/Avatar.js.map +1 -1
  526. package/dist/ssr/surfaces/ResourceCard.js +4 -2
  527. package/dist/ssr/surfaces/ResourceCard.js.map +1 -1
  528. package/dist/ssr/surfaces/StatCell.js +2 -2
  529. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  530. package/dist/ssr/surfaces/Tag.js +3 -3
  531. package/dist/ssr/surfaces/Tag.js.map +1 -1
  532. package/dist/ssr/surfaces/avatar-messages.js +26 -0
  533. package/dist/ssr/surfaces/avatar-messages.js.map +1 -0
  534. package/dist/ssr/surfaces/resource-messages.js +26 -0
  535. package/dist/ssr/surfaces/resource-messages.js.map +1 -0
  536. package/dist/ssr/widgets/Widget.js +6 -0
  537. package/dist/ssr/widgets/Widget.js.map +1 -1
  538. package/dist/styles.css +1 -1
  539. package/dist/types/actions/filter-messages.d.ts +8 -0
  540. package/dist/types/actions/spotlight-messages.d.ts +8 -0
  541. package/dist/types/chat/chat-messages.d.ts +116 -0
  542. package/dist/types/content/Calendar.d.ts +91 -0
  543. package/dist/types/content/CalendarDayView.d.ts +7 -0
  544. package/dist/types/content/CalendarWeekView.d.ts +7 -0
  545. package/dist/types/content/ChartExplorer.d.ts +36 -1
  546. package/dist/types/content/ChartFilterControls.d.ts +6 -1
  547. package/dist/types/content/DataTable.d.ts +7 -0
  548. package/dist/types/content/FileView.d.ts +0 -10
  549. package/dist/types/content/calendar-day-scroll.d.ts +42 -0
  550. package/dist/types/content/calendar-days.d.ts +192 -0
  551. package/dist/types/content/calendar-dialogs.d.ts +22 -0
  552. package/dist/types/content/calendar-messages.d.ts +119 -1
  553. package/dist/types/content/calendar-pointer.d.ts +9 -0
  554. package/dist/types/content/calendar-shared.d.ts +69 -0
  555. package/dist/types/content/calendar-time-view.d.ts +252 -0
  556. package/dist/types/content/chart-messages.d.ts +37 -0
  557. package/dist/types/content/data-table-messages.d.ts +10 -0
  558. package/dist/types/content/docs-messages.d.ts +10 -0
  559. package/dist/types/content/feed-messages.d.ts +15 -0
  560. package/dist/types/content/file-browser-messages.d.ts +33 -0
  561. package/dist/types/content/file-view-messages.d.ts +30 -0
  562. package/dist/types/content/index.d.ts +2 -2
  563. package/dist/types/content/lightbox-messages.d.ts +16 -0
  564. package/dist/types/content/log-entries-messages.d.ts +8 -0
  565. package/dist/types/content/markdown-info-block-messages.d.ts +12 -0
  566. package/dist/types/content/markdown-reference-messages.d.ts +15 -0
  567. package/dist/types/content/pagination-messages.d.ts +17 -0
  568. package/dist/types/content/pdf-messages.d.ts +20 -0
  569. package/dist/types/content/range-picker-messages.d.ts +8 -0
  570. package/dist/types/content/structured-data-messages.d.ts +9 -0
  571. package/dist/types/content/timeline-messages.d.ts +29 -0
  572. package/dist/types/content/video-messages.d.ts +10 -0
  573. package/dist/types/content/viewport-messages.d.ts +12 -0
  574. package/dist/types/feedback/install-messages.d.ts +50 -0
  575. package/dist/types/feedback/prompt-messages.d.ts +31 -0
  576. package/dist/types/feedback/toast-messages.d.ts +9 -0
  577. package/dist/types/index.d.ts +1 -0
  578. package/dist/types/inputs/completion-messages.d.ts +10 -0
  579. package/dist/types/inputs/file-drop-messages.d.ts +30 -0
  580. package/dist/types/inputs/file-drop.d.ts +3 -3
  581. package/dist/types/inputs/file-input-messages.d.ts +28 -0
  582. package/dist/types/inputs/icon-messages.d.ts +9 -0
  583. package/dist/types/inputs/input-messages.d.ts +17 -0
  584. package/dist/types/inputs/markdown/editor-messages.d.ts +20 -0
  585. package/dist/types/inputs/markdown/toolbar-messages.d.ts +18 -0
  586. package/dist/types/inputs/qr-messages.d.ts +11 -0
  587. package/dist/types/inputs/select-messages.d.ts +30 -0
  588. package/dist/types/inputs/tag-messages.d.ts +20 -0
  589. package/dist/types/inputs/template-messages.d.ts +9 -0
  590. package/dist/types/internal/render-error-messages.d.ts +8 -0
  591. package/dist/types/internal/text-selection.d.ts +18 -0
  592. package/dist/types/intl/messages.d.ts +3 -544
  593. package/dist/types/layout/AppWorkspace.d.ts +42 -5
  594. package/dist/types/layout/PageTitle.d.ts +65 -0
  595. package/dist/types/layout/app-workspace-controller.d.ts +12 -0
  596. package/dist/types/layout/app-workspace-state.d.ts +3 -2
  597. package/dist/types/layout/floating-window-messages.d.ts +12 -0
  598. package/dist/types/layout/index.d.ts +3 -0
  599. package/dist/types/layout/navigation-model.d.ts +7 -0
  600. package/dist/types/layout/page-title-controller.d.ts +13 -0
  601. package/dist/types/layout/panel-dialog-messages.d.ts +8 -0
  602. package/dist/types/layout/panes-messages.d.ts +22 -0
  603. package/dist/types/layout/refresh-messages.d.ts +8 -0
  604. package/dist/types/layout/settings-messages.d.ts +25 -0
  605. package/dist/types/layout/workspace-messages.d.ts +26 -0
  606. package/dist/types/surfaces/StatCell.d.ts +5 -0
  607. package/dist/types/surfaces/avatar-messages.d.ts +11 -0
  608. package/dist/types/surfaces/resource-messages.d.ts +11 -0
  609. package/dist/types/widgets/Widget.d.ts +5 -1
  610. package/package.json +1 -1
@@ -0,0 +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\nexport const reducedMotion = () =>\n typeof window !== \"undefined\" && typeof window.matchMedia === \"function\" && window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\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 const close = (restore: boolean) => {\n if (!view.quick()) return;\n view.setQuick(null);\n 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(event.currentTarget.contains(document.activeElement) || document.activeElement === document.body);\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(true);\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":[]}
@@ -0,0 +1,146 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const chartMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ chartView: "Chart view",
8
+ chartDiagram: "Diagram",
9
+ chartData: "Table",
10
+ chartSeries: "Series visibility",
11
+ chartOnly: "Only",
12
+ chartShowAll: "Show all",
13
+ chartShowing: "Showing",
14
+ chartSelectedDatum: "Selected data point",
15
+ chartReference: "Reference",
16
+ chartCurrent: "Current",
17
+ chartPinReference: "Pin as reference",
18
+ chartRemoveComparison: "Remove comparison",
19
+ chartPreviousData: "The chart and table still show the last loaded filters",
20
+ chartCopyData: "Copy data",
21
+ chartCopyFailed: "Could not copy data",
22
+ chartLegend: "Legend",
23
+ chartRowsShown: ({
24
+ shown,
25
+ total
26
+ }) => `Showing ${shown} of ${total} rows. Sort to see others; Copy data copies all of them.`,
27
+ interactiveLineChart: "Interactive line chart",
28
+ interactiveChart: "Interactive chart. Use arrow keys to inspect, Enter to select, Escape to dismiss. On maps and timelines use Alt with arrow keys to inspect.",
29
+ chartFields: ({
30
+ key
31
+ }) => {
32
+ const labels = {
33
+ x: "X",
34
+ y: "Y",
35
+ value: "Value",
36
+ percent: "Share",
37
+ total: "Total",
38
+ from: "From",
39
+ to: "To",
40
+ upperInclusive: "Includes upper bound",
41
+ count: "Count",
42
+ q1: "Lower quartile",
43
+ q2: "Median",
44
+ q3: "Upper quartile",
45
+ whiskerLow: "Lower whisker",
46
+ whiskerHigh: "Upper whisker",
47
+ min: "Minimum",
48
+ max: "Maximum",
49
+ threshold: "Threshold",
50
+ delta: "Change",
51
+ latitude: "Latitude",
52
+ longitude: "Longitude",
53
+ size: "Size",
54
+ state: "State",
55
+ duration: "Duration",
56
+ detail: "Detail",
57
+ errY: "Y error",
58
+ errYHigh: "Upper Y error",
59
+ errYLow: "Lower Y error",
60
+ errX: "X error",
61
+ errXHigh: "Upper X error",
62
+ errXLow: "Lower X error"
63
+ };
64
+ return labels[key] ?? key;
65
+ },
66
+ interactiveMap: "Interactive map",
67
+ interactiveTimeline: "Interactive timeline",
68
+ series: "Series",
69
+ resetMapView: "Reset map view",
70
+ resetTimelineView: "Reset timeline view"
71
+ },
72
+ de: {
73
+ chartView: "Diagrammansicht",
74
+ chartDiagram: "Diagramm",
75
+ chartData: "Tabelle",
76
+ chartSeries: "Sichtbare Datenreihen",
77
+ chartOnly: "Nur diese",
78
+ chartShowAll: "Alle anzeigen",
79
+ chartShowing: "Angezeigt",
80
+ chartSelectedDatum: "Ausgewählter Datenpunkt",
81
+ chartReference: "Vergleich",
82
+ chartCurrent: "Aktuell",
83
+ chartPinReference: "Als Vergleich merken",
84
+ chartRemoveComparison: "Vergleich entfernen",
85
+ chartPreviousData: "Diagramm und Tabelle zeigen weiterhin die zuletzt geladenen Filter",
86
+ chartCopyData: "Daten kopieren",
87
+ chartCopyFailed: "Daten konnten nicht kopiert werden",
88
+ chartLegend: "Legende",
89
+ chartRowsShown: ({
90
+ shown,
91
+ total
92
+ }) => `${shown} von ${total} Zeilen werden angezeigt. Sortiere, um andere zu sehen; „Daten kopieren“ kopiert alle.`,
93
+ interactiveLineChart: "Interaktives Liniendiagramm",
94
+ interactiveChart: "Interaktives Diagramm. Pfeiltasten zum Erkunden, Enter zum Auswählen, Escape zum Schließen. In Karten und Zeitleisten Alt mit Pfeiltasten zum Erkunden.",
95
+ chartFields: ({
96
+ key
97
+ }) => {
98
+ const labels = {
99
+ x: "X",
100
+ y: "Y",
101
+ value: "Wert",
102
+ percent: "Anteil",
103
+ total: "Gesamt",
104
+ from: "Von",
105
+ to: "Bis",
106
+ upperInclusive: "Obergrenze enthalten",
107
+ count: "Anzahl",
108
+ q1: "Unteres Quartil",
109
+ q2: "Median",
110
+ q3: "Oberes Quartil",
111
+ whiskerLow: "Unterer Whisker",
112
+ whiskerHigh: "Oberer Whisker",
113
+ min: "Minimum",
114
+ max: "Maximum",
115
+ threshold: "Schwellenwert",
116
+ delta: "Änderung",
117
+ latitude: "Breitengrad",
118
+ longitude: "Längengrad",
119
+ size: "Größe",
120
+ state: "Zustand",
121
+ duration: "Dauer",
122
+ detail: "Details",
123
+ errY: "Y-Fehler",
124
+ errYHigh: "Oberer Y-Fehler",
125
+ errYLow: "Unterer Y-Fehler",
126
+ errX: "X-Fehler",
127
+ errXHigh: "Oberer X-Fehler",
128
+ errXLow: "Unterer X-Fehler"
129
+ };
130
+ return labels[key] ?? key;
131
+ },
132
+ interactiveMap: "Interaktive Karte",
133
+ interactiveTimeline: "Interaktive Zeitachse",
134
+ series: "Datenreihe",
135
+ resetMapView: "Kartenansicht zurücksetzen",
136
+ resetTimelineView: "Zeitachsenansicht zurücksetzen"
137
+ }
138
+ }
139
+ });
140
+ /** Resolved from the inherited render locale. */
141
+ export const useChartMessages = () => {
142
+ const locale = useLocale();
143
+ return () => chartMessages.resolve([locale()]).t;
144
+ };
145
+ export const checkChartMessages = () => chartMessages.check();
146
+ //# sourceMappingURL=chart-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/chart-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst chartMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n chartView: \"Chart view\",\n chartDiagram: \"Diagram\",\n chartData: \"Table\",\n chartSeries: \"Series visibility\",\n chartOnly: \"Only\",\n chartShowAll: \"Show all\",\n chartShowing: \"Showing\",\n chartSelectedDatum: \"Selected data point\",\n chartReference: \"Reference\",\n chartCurrent: \"Current\",\n chartPinReference: \"Pin as reference\",\n chartRemoveComparison: \"Remove comparison\",\n chartPreviousData: \"The chart and table still show the last loaded filters\",\n chartCopyData: \"Copy data\",\n chartCopyFailed: \"Could not copy data\",\n chartLegend: \"Legend\",\n chartRowsShown: ({ shown, total }: { shown: string; total: string }) =>\n `Showing ${shown} of ${total} rows. Sort to see others; Copy data copies all of them.`,\n interactiveLineChart: \"Interactive line chart\",\n interactiveChart:\n \"Interactive chart. Use arrow keys to inspect, Enter to select, Escape to dismiss. On maps and timelines use Alt with arrow keys to inspect.\",\n chartFields: ({ key }: { key: string }) => {\n const labels: Record<string, string> = {\n x: \"X\",\n y: \"Y\",\n value: \"Value\",\n percent: \"Share\",\n total: \"Total\",\n from: \"From\",\n to: \"To\",\n upperInclusive: \"Includes upper bound\",\n count: \"Count\",\n q1: \"Lower quartile\",\n q2: \"Median\",\n q3: \"Upper quartile\",\n whiskerLow: \"Lower whisker\",\n whiskerHigh: \"Upper whisker\",\n min: \"Minimum\",\n max: \"Maximum\",\n threshold: \"Threshold\",\n delta: \"Change\",\n latitude: \"Latitude\",\n longitude: \"Longitude\",\n size: \"Size\",\n state: \"State\",\n duration: \"Duration\",\n detail: \"Detail\",\n errY: \"Y error\",\n errYHigh: \"Upper Y error\",\n errYLow: \"Lower Y error\",\n errX: \"X error\",\n errXHigh: \"Upper X error\",\n errXLow: \"Lower X error\",\n };\n return labels[key] ?? key;\n },\n interactiveMap: \"Interactive map\",\n interactiveTimeline: \"Interactive timeline\",\n series: \"Series\",\n resetMapView: \"Reset map view\",\n resetTimelineView: \"Reset timeline view\",\n },\n de: {\n chartView: \"Diagrammansicht\",\n chartDiagram: \"Diagramm\",\n chartData: \"Tabelle\",\n chartSeries: \"Sichtbare Datenreihen\",\n chartOnly: \"Nur diese\",\n chartShowAll: \"Alle anzeigen\",\n chartShowing: \"Angezeigt\",\n chartSelectedDatum: \"Ausgewählter Datenpunkt\",\n chartReference: \"Vergleich\",\n chartCurrent: \"Aktuell\",\n chartPinReference: \"Als Vergleich merken\",\n chartRemoveComparison: \"Vergleich entfernen\",\n chartPreviousData: \"Diagramm und Tabelle zeigen weiterhin die zuletzt geladenen Filter\",\n chartCopyData: \"Daten kopieren\",\n chartCopyFailed: \"Daten konnten nicht kopiert werden\",\n chartLegend: \"Legende\",\n chartRowsShown: ({ shown, total }: { shown: string; total: string }) =>\n `${shown} von ${total} Zeilen werden angezeigt. Sortiere, um andere zu sehen; „Daten kopieren“ kopiert alle.`,\n interactiveLineChart: \"Interaktives Liniendiagramm\",\n interactiveChart:\n \"Interaktives Diagramm. Pfeiltasten zum Erkunden, Enter zum Auswählen, Escape zum Schließen. In Karten und Zeitleisten Alt mit Pfeiltasten zum Erkunden.\",\n chartFields: ({ key }: { key: string }) => {\n const labels: Record<string, string> = {\n x: \"X\",\n y: \"Y\",\n value: \"Wert\",\n percent: \"Anteil\",\n total: \"Gesamt\",\n from: \"Von\",\n to: \"Bis\",\n upperInclusive: \"Obergrenze enthalten\",\n count: \"Anzahl\",\n q1: \"Unteres Quartil\",\n q2: \"Median\",\n q3: \"Oberes Quartil\",\n whiskerLow: \"Unterer Whisker\",\n whiskerHigh: \"Oberer Whisker\",\n min: \"Minimum\",\n max: \"Maximum\",\n threshold: \"Schwellenwert\",\n delta: \"Änderung\",\n latitude: \"Breitengrad\",\n longitude: \"Längengrad\",\n size: \"Größe\",\n state: \"Zustand\",\n duration: \"Dauer\",\n detail: \"Details\",\n errY: \"Y-Fehler\",\n errYHigh: \"Oberer Y-Fehler\",\n errYLow: \"Unterer Y-Fehler\",\n errX: \"X-Fehler\",\n errXHigh: \"Oberer X-Fehler\",\n errXLow: \"Unterer X-Fehler\",\n };\n return labels[key] ?? key;\n },\n interactiveMap: \"Interaktive Karte\",\n interactiveTimeline: \"Interaktive Zeitachse\",\n series: \"Datenreihe\",\n resetMapView: \"Kartenansicht zurücksetzen\",\n resetTimelineView: \"Zeitachsenansicht zurücksetzen\",\n },\n },\n});\n\nexport type ChartMessages = ReturnType<(typeof chartMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useChartMessages = (): (() => ChartMessages) => {\n const locale = useLocale();\n return () => chartMessages.resolve([locale()]).t;\n};\n\nexport const checkChartMessages = () => chartMessages.check();\n"],"mappings":"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","ignoreList":[]}
@@ -67,6 +67,8 @@ export function createCollectionSelection(options) {
67
67
  });
68
68
  };
69
69
  const keyDown = (event, id, columns = 1) => {
70
+ // Alt combinations belong to the host, for example Alt+↑ to the page above.
71
+ if (event.altKey) return false;
70
72
  const ids = options.ids();
71
73
  const index = ids.indexOf(id);
72
74
  let next;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["content/collection-selection.ts"],"sourcesContent":["import { batch, createEffect, createSignal, onCleanup } from \"solid-js\";\n\nexport type SelectionModifiers = { shiftKey?: boolean; ctrlKey?: boolean; metaKey?: boolean };\nexport type CollectionSelection = ReturnType<typeof createCollectionSelection>;\n\n/**\n * One selection and focus model shared by alternate presentations of a collection.\n *\n * `ids` is the collection in display order. `isDisabled` marks items that stay in focus order, so the keyboard and\n * screen readers still reach them, but can never be selected. `multiple: false` keeps at most one ID selected: a\n * click, toggle, or arrow key selects only that item, and ranges and select-all do nothing.\n *\n * `checklist: true` suits choosing on touch screens: a plain click or tap toggles one item, and arrow keys only move\n * focus. Space still toggles; Shift-click still selects a range.\n */\nexport function createCollectionSelection(options: {\n ids: () => readonly string[];\n isDisabled?: (id: string) => boolean;\n initial?: readonly string[];\n onChange?: (ids: readonly string[]) => void;\n multiple?: boolean;\n checklist?: boolean;\n}) {\n const multiple = options.multiple ?? true;\n const checklist = options.checklist ?? false;\n const [selected, setSelected] = createSignal<ReadonlySet<string>>(new Set(multiple ? options.initial : options.initial?.slice(0, 1)));\n const [focused, setFocused] = createSignal<string | null>(options.initial?.[0] ?? null);\n let anchor: string | null = options.initial?.[0] ?? null;\n const elements = new Map<string, HTMLElement>();\n const disabled = (id: string) => options.isDisabled?.(id) ?? false;\n const replace = (ids: readonly string[]) => {\n const allowed = new Set(options.ids());\n const next = new Set(ids.filter((id) => allowed.has(id) && !disabled(id)).slice(multiple ? 0 : -1));\n if (next.size === selected().size && [...next].every((id) => selected().has(id))) return;\n setSelected(next);\n options.onChange?.([...next]);\n };\n createEffect(() => {\n const ids = options.ids();\n replace([...selected()]);\n if (!focused() || !ids.includes(focused()!)) setFocused(ids[0] ?? null);\n if (anchor && !ids.includes(anchor)) anchor = null;\n });\n const toggle = (id: string) => {\n if (disabled(id)) return;\n const next = new Set(multiple ? selected() : []);\n selected().has(id) ? next.delete(id) : next.add(id);\n batch(() => {\n setFocused(id);\n replace([...next]);\n });\n anchor = id;\n };\n const select = (id: string, modifiers: SelectionModifiers = {}) => {\n if (!options.ids().includes(id)) return;\n batch(() => {\n setFocused(id);\n if (multiple && modifiers.shiftKey && anchor) {\n const ids = options.ids();\n const from = ids.indexOf(anchor);\n const to = ids.indexOf(id);\n const range = ids.slice(Math.min(from, to), Math.max(from, to) + 1);\n replace(modifiers.ctrlKey || modifiers.metaKey ? [...selected(), ...range] : range);\n } else if (disabled(id)) return;\n else if (checklist || (multiple && (modifiers.ctrlKey || modifiers.metaKey))) toggle(id);\n else {\n anchor = id;\n replace([id]);\n }\n });\n };\n const focus = (id: string) => {\n setFocused(id);\n elements.get(id)?.focus({ preventScroll: true });\n elements.get(id)?.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n };\n const keyDown = (event: KeyboardEvent, id: string, columns = 1) => {\n const ids = options.ids();\n const index = ids.indexOf(id);\n let next: number | undefined;\n if (event.key === \"ArrowDown\") next = index + columns;\n if (event.key === \"ArrowUp\") next = index - columns;\n if (columns > 1 && event.key === \"ArrowRight\") next = index + 1;\n if (columns > 1 && event.key === \"ArrowLeft\") next = index - 1;\n if (event.key === \"Home\") next = 0;\n if (event.key === \"End\") next = ids.length - 1;\n if (next !== undefined && ids.length) {\n event.preventDefault();\n const target = ids[Math.max(0, Math.min(next, ids.length - 1))]!;\n if (event.shiftKey ? multiple || !checklist : !checklist && !event.ctrlKey && !event.metaKey) select(target, event);\n focus(target);\n return true;\n }\n if (event.key === \" \") {\n event.preventDefault();\n toggle(id);\n return true;\n }\n if (multiple && (event.ctrlKey || event.metaKey) && event.key.toLowerCase() === \"a\") {\n event.preventDefault();\n replace(ids);\n return true;\n }\n // With nothing selected, Escape belongs to the host, for example to close a dialog.\n if (event.key === \"Escape\" && selected().size > 0) {\n event.preventDefault();\n replace([]);\n return true;\n }\n return false;\n };\n return {\n multiple,\n selected,\n focused,\n isDisabled: disabled,\n select,\n toggle,\n replace,\n focus,\n keyDown,\n clear: () => replace([]),\n all: () => (multiple ? replace(options.ids()) : undefined),\n markFocused: (id: string) => setFocused(id),\n register: (id: string, element: HTMLElement) => {\n elements.set(id, element);\n onCleanup(() => {\n if (elements.get(id) === element) elements.delete(id);\n });\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/collection-selection.ts"],"sourcesContent":["import { batch, createEffect, createSignal, onCleanup } from \"solid-js\";\n\nexport type SelectionModifiers = { shiftKey?: boolean; ctrlKey?: boolean; metaKey?: boolean };\nexport type CollectionSelection = ReturnType<typeof createCollectionSelection>;\n\n/**\n * One selection and focus model shared by alternate presentations of a collection.\n *\n * `ids` is the collection in display order. `isDisabled` marks items that stay in focus order, so the keyboard and\n * screen readers still reach them, but can never be selected. `multiple: false` keeps at most one ID selected: a\n * click, toggle, or arrow key selects only that item, and ranges and select-all do nothing.\n *\n * `checklist: true` suits choosing on touch screens: a plain click or tap toggles one item, and arrow keys only move\n * focus. Space still toggles; Shift-click still selects a range.\n */\nexport function createCollectionSelection(options: {\n ids: () => readonly string[];\n isDisabled?: (id: string) => boolean;\n initial?: readonly string[];\n onChange?: (ids: readonly string[]) => void;\n multiple?: boolean;\n checklist?: boolean;\n}) {\n const multiple = options.multiple ?? true;\n const checklist = options.checklist ?? false;\n const [selected, setSelected] = createSignal<ReadonlySet<string>>(new Set(multiple ? options.initial : options.initial?.slice(0, 1)));\n const [focused, setFocused] = createSignal<string | null>(options.initial?.[0] ?? null);\n let anchor: string | null = options.initial?.[0] ?? null;\n const elements = new Map<string, HTMLElement>();\n const disabled = (id: string) => options.isDisabled?.(id) ?? false;\n const replace = (ids: readonly string[]) => {\n const allowed = new Set(options.ids());\n const next = new Set(ids.filter((id) => allowed.has(id) && !disabled(id)).slice(multiple ? 0 : -1));\n if (next.size === selected().size && [...next].every((id) => selected().has(id))) return;\n setSelected(next);\n options.onChange?.([...next]);\n };\n createEffect(() => {\n const ids = options.ids();\n replace([...selected()]);\n if (!focused() || !ids.includes(focused()!)) setFocused(ids[0] ?? null);\n if (anchor && !ids.includes(anchor)) anchor = null;\n });\n const toggle = (id: string) => {\n if (disabled(id)) return;\n const next = new Set(multiple ? selected() : []);\n selected().has(id) ? next.delete(id) : next.add(id);\n batch(() => {\n setFocused(id);\n replace([...next]);\n });\n anchor = id;\n };\n const select = (id: string, modifiers: SelectionModifiers = {}) => {\n if (!options.ids().includes(id)) return;\n batch(() => {\n setFocused(id);\n if (multiple && modifiers.shiftKey && anchor) {\n const ids = options.ids();\n const from = ids.indexOf(anchor);\n const to = ids.indexOf(id);\n const range = ids.slice(Math.min(from, to), Math.max(from, to) + 1);\n replace(modifiers.ctrlKey || modifiers.metaKey ? [...selected(), ...range] : range);\n } else if (disabled(id)) return;\n else if (checklist || (multiple && (modifiers.ctrlKey || modifiers.metaKey))) toggle(id);\n else {\n anchor = id;\n replace([id]);\n }\n });\n };\n const focus = (id: string) => {\n setFocused(id);\n elements.get(id)?.focus({ preventScroll: true });\n elements.get(id)?.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n };\n const keyDown = (event: KeyboardEvent, id: string, columns = 1) => {\n // Alt combinations belong to the host, for example Alt+↑ to the page above.\n if (event.altKey) return false;\n const ids = options.ids();\n const index = ids.indexOf(id);\n let next: number | undefined;\n if (event.key === \"ArrowDown\") next = index + columns;\n if (event.key === \"ArrowUp\") next = index - columns;\n if (columns > 1 && event.key === \"ArrowRight\") next = index + 1;\n if (columns > 1 && event.key === \"ArrowLeft\") next = index - 1;\n if (event.key === \"Home\") next = 0;\n if (event.key === \"End\") next = ids.length - 1;\n if (next !== undefined && ids.length) {\n event.preventDefault();\n const target = ids[Math.max(0, Math.min(next, ids.length - 1))]!;\n if (event.shiftKey ? multiple || !checklist : !checklist && !event.ctrlKey && !event.metaKey) select(target, event);\n focus(target);\n return true;\n }\n if (event.key === \" \") {\n event.preventDefault();\n toggle(id);\n return true;\n }\n if (multiple && (event.ctrlKey || event.metaKey) && event.key.toLowerCase() === \"a\") {\n event.preventDefault();\n replace(ids);\n return true;\n }\n // With nothing selected, Escape belongs to the host, for example to close a dialog.\n if (event.key === \"Escape\" && selected().size > 0) {\n event.preventDefault();\n replace([]);\n return true;\n }\n return false;\n };\n return {\n multiple,\n selected,\n focused,\n isDisabled: disabled,\n select,\n toggle,\n replace,\n focus,\n keyDown,\n clear: () => replace([]),\n all: () => (multiple ? replace(options.ids()) : undefined),\n markFocused: (id: string) => setFocused(id),\n register: (id: string, element: HTMLElement) => {\n elements.set(id, element);\n onCleanup(() => {\n if (elements.get(id) === element) elements.delete(id);\n });\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,24 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const dataTableMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ dataTable: "Data table",
8
+ noColumns: "No columns.",
9
+ noRecords: "No records"
10
+ },
11
+ de: {
12
+ dataTable: "Datentabelle",
13
+ noColumns: "Keine Spalten.",
14
+ noRecords: "Keine Einträge"
15
+ }
16
+ }
17
+ });
18
+ /** Resolved from the inherited render locale. */
19
+ export const useDataTableMessages = () => {
20
+ const locale = useLocale();
21
+ return () => dataTableMessages.resolve([locale()]).t;
22
+ };
23
+ export const checkDataTableMessages = () => dataTableMessages.check();
24
+ //# sourceMappingURL=data-table-messages.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,24 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const docsMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ codeLabel: ({
8
+ title
9
+ }) => `${title} code`
10
+ },
11
+ de: {
12
+ codeLabel: ({
13
+ title
14
+ }) => `Code von ${title}`
15
+ }
16
+ }
17
+ });
18
+ /** Resolved from the inherited render locale. */
19
+ export const useDocsMessages = () => {
20
+ const locale = useLocale();
21
+ return () => docsMessages.resolve([locale()]).t;
22
+ };
23
+ export const checkDocsMessages = () => docsMessages.check();
24
+ //# sourceMappingURL=docs-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/docs-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst docsMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n codeLabel: ({ title }: { title: string }) => `${title} code`,\n },\n de: {\n codeLabel: ({ title }) => `Code von ${title}`,\n },\n },\n});\n\nexport type DocsMessages = ReturnType<(typeof docsMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useDocsMessages = (): (() => DocsMessages) => {\n const locale = useLocale();\n return () => docsMessages.resolve([locale()]).t;\n};\n\nexport const checkDocsMessages = () => docsMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;EAC/B,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,SAAS,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,GAAG,KAAK;IACvD,CAAC;IACD,EAAE,EAAE;MACF,SAAS,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,YAAY,KAAK;IAC7C;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,eAAe,GAAG,MAA4B;EACzD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,OAAO,MAAM,iBAAiB,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,34 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const feedMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ feedJumpToLatest: "Jump to latest",
8
+ feedJumpToLatestCount: ({
9
+ count
10
+ }) => `Jump to latest, ${count} new`,
11
+ feedNewItems: ({
12
+ count
13
+ }) => count === 1 ? "1 new item" : `${count} new items`,
14
+ feedNewMarker: "New"
15
+ },
16
+ de: {
17
+ feedJumpToLatest: "Zum Neuesten",
18
+ feedJumpToLatestCount: ({
19
+ count
20
+ }) => `Zum Neuesten, ${count} neu`,
21
+ feedNewItems: ({
22
+ count
23
+ }) => count === 1 ? "1 neuer Eintrag" : `${count} neue Einträge`,
24
+ feedNewMarker: "Neu"
25
+ }
26
+ }
27
+ });
28
+ /** Resolved from the inherited render locale. */
29
+ export const useFeedMessages = () => {
30
+ const locale = useLocale();
31
+ return () => feedMessages.resolve([locale()]).t;
32
+ };
33
+ export const checkFeedMessages = () => feedMessages.check();
34
+ //# sourceMappingURL=feed-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/feed-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst feedMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n feedJumpToLatest: \"Jump to latest\",\n feedJumpToLatestCount: ({ count }: { count: number }) => `Jump to latest, ${count} new`,\n feedNewItems: ({ count }: { count: number }) => (count === 1 ? \"1 new item\" : `${count} new items`),\n feedNewMarker: \"New\",\n },\n de: {\n feedJumpToLatest: \"Zum Neuesten\",\n feedJumpToLatestCount: ({ count }) => `Zum Neuesten, ${count} neu`,\n feedNewItems: ({ count }) => (count === 1 ? \"1 neuer Eintrag\" : `${count} neue Einträge`),\n feedNewMarker: \"Neu\",\n },\n },\n});\n\nexport type FeedMessages = ReturnType<(typeof feedMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useFeedMessages = (): (() => FeedMessages) => {\n const locale = useLocale();\n return () => feedMessages.resolve([locale()]).t;\n};\n\nexport const checkFeedMessages = () => feedMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;EAC/B,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,gBAAgB,EAAE,gBAAgB;MAClC,qBAAqB,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,mBAAmB,KAAK,MAAM;MACvF,YAAY,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAM,KAAK,KAAK,CAAC,GAAG,YAAY,GAAG,GAAG,KAAK,YAAa;MACnG,aAAa,EAAE;IACjB,CAAC;IACD,EAAE,EAAE;MACF,gBAAgB,EAAE,cAAc;MAChC,qBAAqB,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,iBAAiB,KAAK,MAAM;MAClE,YAAY,EAAE,CAAC;QAAE;MAAM,CAAC,KAAM,KAAK,KAAK,CAAC,GAAG,iBAAiB,GAAG,GAAG,KAAK,gBAAiB;MACzF,aAAa,EAAE;IACjB;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,eAAe,GAAG,MAA4B;EACzD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,OAAO,MAAM,iBAAiB,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}