@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
@@ -1,77 +1,70 @@
1
+ import { ssrStyle as _$ssrStyle } from "solid-js/web";
1
2
  import { ssrStyleProperty as _$ssrStyleProperty } from "solid-js/web";
2
3
  import { memo as _$memo } from "solid-js/web";
3
- import { ssrElement as _$ssrElement } from "solid-js/web";
4
- import { mergeProps as _$mergeProps } from "solid-js/web";
5
- import { ssrStyle as _$ssrStyle } from "solid-js/web";
4
+ import { ssr as _$ssr } from "solid-js/web";
6
5
  import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
7
6
  import { createComponent as _$createComponent } from "solid-js/web";
8
- import { ssr as _$ssr } from "solid-js/web";
7
+ import { ssrElement as _$ssrElement } from "solid-js/web";
8
+ import { mergeProps as _$mergeProps } from "solid-js/web";
9
9
  import { escape as _$escape } from "solid-js/web";
10
- var _tmpl$ = ["<span class=\"k2b-calendar-event__time\">", "</span>"],
11
- _tmpl$2 = "<span class=\"k2b-calendar-event__marker\" aria-hidden=\"true\"></span>",
12
- _tmpl$3 = ["<span class=\"k2b-calendar-event__title\">", "", "</span>"],
13
- _tmpl$4 = ["<span class=\"k2b-calendar-event__meta\">", "</span>"],
14
- _tmpl$5 = ["<span class=\"k2b-calendar-event__description\">", "</span>"],
15
- _tmpl$6 = ["<span class=\"k2b-calendar-event__hint\" data-edge=\"start\" aria-hidden=\"true\">", "</span>"],
16
- _tmpl$7 = ["<span class=\"k2b-calendar-event__hint\" data-edge=\"end\" aria-hidden=\"true\">", "</span>"],
17
- _tmpl$8 = ["<a", " class=\"k2b-calendar-event\" data-calendar-event", " style=\"", "\"", ">", "</a>"],
18
- _tmpl$9 = ["<button type=\"button\" class=\"k2b-calendar-event\" data-calendar-event", " data-interactive=\"true\"", " style=\"", "\"", ">", "</button>"],
19
- _tmpl$0 = ["<div class=\"k2b-calendar-event\" role=\"group\" data-calendar-event", " style=\"", "\"", ">", "</div>"],
20
- _tmpl$1 = ["<div role=\"radiogroup\"", " aria-orientation=\"horizontal\" class=\"k2b-segmented-control k2b-calendar-view-switcher\">", "</div>"],
21
- _tmpl$10 = ["<i class=\"", "\"></i>"],
22
- _tmpl$11 = ["<button type=\"button\"", " class=\"k2b-calendar-header__nav-button\"><i class=\"", "\"></i></button>"],
23
- _tmpl$12 = ["<span class=\"k2b-button__label\">", "</span>"],
24
- _tmpl$13 = ["<div class=\"k2b-calendar-header__content\">", "</div>"],
25
- _tmpl$14 = "<span class=\"k2b-calendar-header__progress\" aria-hidden=\"true\"></span>",
26
- _tmpl$15 = ["<header class=\"k2b-calendar-header\"><div class=\"k2b-calendar-header__navigation\">", "", "<div class=\"k2b-calendar-header__title\"><span>", "</span>", "</div></div>", "<div class=\"k2b-calendar-header__actions\">", "", "", "</div>", "</header>"],
27
- _tmpl$16 = ["<span class=\"k2b-calendar-header__title-size\" aria-hidden=\"true\">", "</span>"],
28
- _tmpl$17 = ["<div class=\"k2b-calendar-month__weekday\">", "</div>"],
29
- _tmpl$18 = ["<div class=\"k2b-calendar-month\" style=\"", "\"><div class=\"k2b-calendar-month__weekdays\"", ">", "", "</div>", "</div>"],
30
- _tmpl$19 = ["<div class=\"k2b-calendar-month__week-number\">", "</div>"],
31
- _tmpl$20 = ["<div class=\"k2b-calendar-month__week\"", ">", "", "</div>"],
32
- _tmpl$21 = ["<div class=\"k2b-calendar-preview\">", "</div>"],
33
- _tmpl$22 = ["<div class=\"k2b-calendar-month__day\"", ">", "<div class=\"k2b-calendar-month__day-header\">", "", "</div><div class=\"k2b-calendar-month__events\">", "", "", "</div><div class=\"k2b-calendar-month__dots\">", "</div></div>"],
34
- _tmpl$23 = ["<span class=\"k2b-calendar-month__day-number\"", ">", "</span>"],
35
- _tmpl$24 = ["<span class=\"k2b-calendar-month__badge\">", "", "</span>"],
36
- _tmpl$25 = ["<span class=\"k2b-calendar-dot\"", " style=\"", "\"></span>"],
37
- _tmpl$26 = ["<div class=\"k2b-calendar-month__weekday\" role=\"columnheader\">", "</div>"],
38
- _tmpl$27 = ["<div class=\"k2b-calendar-month\" role=\"grid\"", " aria-multiselectable=\"true\" data-lanes=\"true\" style=\"", "\"><div class=\"k2b-calendar-month__weekdays\" role=\"row\"", ">", "", "</div>", "</div>"],
39
- _tmpl$28 = ["<div class=\"k2b-calendar-month__weekday\" role=\"columnheader\"", ">", "</div>"],
40
- _tmpl$29 = ["<div class=\"k2b-calendar-month__week-number\" role=\"rowheader\">", "</div>"],
41
- _tmpl$30 = ["<div class=\"k2b-calendar-month__week\" role=\"row\"", ">", "", "</div>"],
42
- _tmpl$31 = ["<button type=\"button\" class=\"k2b-calendar-month__week-link\" tabindex=\"-1\"", ">", "</button>"],
43
- _tmpl$32 = ["<button type=\"button\" class=\"k2b-calendar-month__more\" tabindex=\"-1\" style=\"", "\"", " aria-haspopup=\"dialog\"", "><span class=\"k2b-calendar-month__more-long\">", "</span><span class=\"k2b-calendar-month__more-short\">+", "</span></button>"],
44
- _tmpl$33 = ["<div class=\"k2b-calendar-month__day\" role=\"gridcell\"", "><div class=\"k2b-calendar-month__day-header\"><span class=\"k2b-calendar-month__day-number\"", ">", "</span>", "</div><div class=\"k2b-calendar-month__lanes\">", "", "", "</div></div>"],
45
- _tmpl$34 = ["<div class=\"k2b-calendar-month__segment\" style=\"", "\">", "</div>"],
46
- _tmpl$35 = ["<ul class=\"k2b-calendar-day-list__events\">", "</ul>"],
47
- _tmpl$36 = "<i class=\"ti ti-plus\" aria-hidden=\"true\"></i>",
48
- _tmpl$37 = ["<div class=\"k2b-calendar-day-list\"><div class=\"k2b-calendar-day-list__title\">", "</div>", "<div class=\"k2b-calendar-day-list__actions\">", "", "</div></div>"],
49
- _tmpl$38 = ["<p class=\"k2b-calendar-day-list__empty\">", "</p>"],
50
- _tmpl$39 = ["<li>", "</li>"],
51
- _tmpl$40 = "<i class=\"ti ti-zoom-in\" aria-hidden=\"true\"></i>",
52
- _tmpl$41 = ["<div class=\"k2b-calendar-popover\" popover=\"auto\" role=\"dialog\"", ">", "</div>"],
53
- _tmpl$42 = ["<div class=\"k2b-calendar-time-grid__all-day\" style=\"", "\"><div class=\"k2b-calendar-time-grid__all-day-label\">", "</div>", "</div>"],
54
- _tmpl$43 = ["<div class=\"k2b-calendar-time-grid\"><div class=\"k2b-calendar-time-grid__days\" style=\"", "\"><div></div>", "</div>", "<div class=\"k2b-calendar-time-grid__scroll\"><div class=\"k2b-calendar-time-grid__grid\" style=\"", "\"><div class=\"k2b-calendar-time-grid__gutter\" style=\"", "\">", "</div>", "</div></div></div>"],
55
- _tmpl$44 = ["<span class=\"k2b-calendar-time-grid__day-label\"", ">", "</span>"],
56
- _tmpl$45 = ["<span class=\"k2b-calendar-time-grid__badge\">", "", "</span>"],
57
- _tmpl$46 = ["<div class=\"k2b-calendar-time-grid__all-day-events\">", "", "</div>"],
58
- _tmpl$47 = ["<div class=\"k2b-calendar-time-grid__hour\"", ">", ":00</div>"],
59
- _tmpl$48 = ["<div class=\"k2b-calendar-time-grid__now\" style=\"", "\"></div>"],
60
- _tmpl$49 = ["<div class=\"k2b-calendar-time-grid__column\" style=\"", "\">", "", "", "", "", "</div>"],
61
- _tmpl$50 = ["<div class=\"k2b-calendar-preview__title\">", "</div>"],
62
- _tmpl$51 = ["<div class=\"k2b-calendar-preview k2b-calendar-preview--timed\"", " style=\"", "\"><div class=\"k2b-calendar-preview__content\">", "<div class=\"k2b-calendar-preview__label\">", " - ", "</div></div></div>"],
63
- _tmpl$52 = ["<button type=\"button\"", " draggable=\"false\" class=\"k2b-calendar-time-grid__resize\"><span class=\"k2b-calendar-time-grid__resize-icon\" aria-hidden=\"true\"></span></button>"],
64
- _tmpl$53 = ["<div class=\"k2b-calendar-time-grid__event-position\" style=\"", "\"><div class=\"k2b-calendar-time-grid__event-frame\">", "", "</div></div>"],
65
- _tmpl$54 = ["<button type=\"button\" class=\"k2b-calendar-time-grid__overflow\" style=\"", "\"", "><span class=\"k2b-calendar-time-grid__overflow-count\">+", "</span></button>"],
66
- _tmpl$55 = ["<div class=\"k2b-calendar-time-grid__overflow-menu\" style=\"", "\"><div class=\"k2b-calendar-time-grid__overflow-title\">", " - ", "</div>", "</div>"],
67
- _tmpl$56 = ["<div class=\"k2b-calendar-year\">", "</div>"],
68
- _tmpl$57 = ["<div class=\"k2b-calendar-year__month\"><div class=\"k2b-calendar-year__title\">", "</div><div class=\"k2b-calendar-year__grid\">", "</div></div>"],
69
- _tmpl$58 = ["<span class=\"k2b-calendar-year__indicator\"", " style=\"", "\"></span>"],
70
- _tmpl$59 = ["<div class=\"k2b-calendar-mobile-month__events\">", "</div>"],
71
- _tmpl$60 = ["<div class=\"k2b-calendar-mobile-month\">", "<div class=\"k2b-calendar-mobile-month__agenda\"><div class=\"k2b-calendar-mobile-month__title\">", "</div>", "</div></div>"],
72
- _tmpl$61 = ["<div class=\"k2b-calendar-mobile-month__empty\">", "</div>"],
73
- _tmpl$62 = ["<div class=\"k2b-calendar-body\">", "</div>"],
74
- _tmpl$63 = ["<section class=\"", "\"", ">", "", "</section>"];
10
+ var _tmpl$ = ["<div role=\"radiogroup\"", " aria-orientation=\"horizontal\" class=\"k2b-segmented-control k2b-calendar-view-switcher\">", "</div>"],
11
+ _tmpl$2 = ["<i class=\"", "\"></i>"],
12
+ _tmpl$3 = ["<button type=\"button\"", " class=\"k2b-calendar-header__nav-button\"><i class=\"", "\"></i></button>"],
13
+ _tmpl$4 = "<i class=\"ti ti-arrow-narrow-right k2b-calendar-header__today-direction\" aria-hidden=\"true\"></i>",
14
+ _tmpl$5 = "<i class=\"ti ti-point k2b-calendar-header__today-direction\" aria-hidden=\"true\"></i>",
15
+ _tmpl$6 = ["<span class=\"k2b-button__label\">", "</span>"],
16
+ _tmpl$7 = ["<div class=\"k2b-calendar-header__content\">", "</div>"],
17
+ _tmpl$8 = ["<button type=\"button\" class=\"k2b-calendar-header__shortcuts\"", "><i class=\"ti ti-keyboard\" aria-hidden=\"true\"></i></button>"],
18
+ _tmpl$9 = "<span class=\"k2b-calendar-header__progress\" aria-hidden=\"true\"></span>",
19
+ _tmpl$0 = ["<header class=\"k2b-calendar-header\"><div class=\"k2b-calendar-header__navigation\">", "", "<div class=\"k2b-calendar-header__title\"><span>", "</span>", "</div></div>", "<div class=\"k2b-calendar-header__actions\">", "", "", "", "</div>", "</header>"],
20
+ _tmpl$1 = ["<span class=\"k2b-calendar-header__title-size\" aria-hidden=\"true\">", "</span>"],
21
+ _tmpl$10 = ["<div class=\"k2b-calendar-month__weekday\">", "</div>"],
22
+ _tmpl$11 = ["<div class=\"k2b-calendar-month\" style=\"", "\"><div class=\"k2b-calendar-month__weekdays\"", ">", "", "</div>", "</div>"],
23
+ _tmpl$12 = ["<div class=\"k2b-calendar-month__week-number\">", "</div>"],
24
+ _tmpl$13 = ["<div class=\"k2b-calendar-month__week\"", ">", "", "</div>"],
25
+ _tmpl$14 = ["<div class=\"k2b-calendar-preview\">", "</div>"],
26
+ _tmpl$15 = ["<div class=\"k2b-calendar-month__day\"", ">", "<div class=\"k2b-calendar-month__day-header\">", "", "</div><div class=\"k2b-calendar-month__events\">", "", "", "</div><div class=\"k2b-calendar-month__dots\">", "</div></div>"],
27
+ _tmpl$16 = ["<span class=\"k2b-calendar-month__day-number\"", ">", "</span>"],
28
+ _tmpl$17 = ["<span class=\"k2b-calendar-month__badge\">", "", "</span>"],
29
+ _tmpl$18 = ["<span class=\"k2b-calendar-dot\"", " style=\"", "\"></span>"],
30
+ _tmpl$19 = ["<div class=\"k2b-calendar-month__weekday\" role=\"columnheader\">", "</div>"],
31
+ _tmpl$20 = ["<div class=\"k2b-calendar-month\" role=\"grid\"", " aria-multiselectable=\"true\" data-lanes=\"true\" style=\"", "\"><div class=\"k2b-calendar-month__weekdays\" role=\"row\"", ">", "", "</div>", "</div>"],
32
+ _tmpl$21 = ["<div class=\"k2b-calendar-month__weekday\" role=\"columnheader\"", ">", "</div>"],
33
+ _tmpl$22 = ["<div class=\"k2b-calendar-month__week-number\" role=\"rowheader\">", "</div>"],
34
+ _tmpl$23 = ["<div class=\"k2b-calendar-month__week\" role=\"row\"", ">", "", "</div>"],
35
+ _tmpl$24 = ["<button type=\"button\" class=\"k2b-calendar-month__week-link\" tabindex=\"-1\"", ">", "</button>"],
36
+ _tmpl$25 = ["<button type=\"button\" class=\"k2b-calendar-month__more\" tabindex=\"-1\" style=\"", "\"", " aria-haspopup=\"dialog\"", "><span class=\"k2b-calendar-month__more-long\">", "</span><span class=\"k2b-calendar-month__more-short\">+", "</span></button>"],
37
+ _tmpl$26 = ["<div class=\"k2b-calendar-month__day\" role=\"gridcell\"", "><div class=\"k2b-calendar-month__day-header\"><span class=\"k2b-calendar-month__day-number\"", ">", "</span>", "</div><div class=\"k2b-calendar-month__lanes\">", "", "", "</div></div>"],
38
+ _tmpl$27 = ["<div class=\"k2b-calendar-month__segment\" style=\"", "\">", "</div>"],
39
+ _tmpl$28 = ["<ul class=\"k2b-calendar-day-list__events\">", "</ul>"],
40
+ _tmpl$29 = "<i class=\"ti ti-plus\" aria-hidden=\"true\"></i>",
41
+ _tmpl$30 = ["<div class=\"k2b-calendar-day-list\"><div class=\"k2b-calendar-day-list__title\">", "</div>", "<div class=\"k2b-calendar-day-list__actions\">", "", "</div></div>"],
42
+ _tmpl$31 = ["<p class=\"k2b-calendar-day-list__empty\">", "</p>"],
43
+ _tmpl$32 = ["<li>", "</li>"],
44
+ _tmpl$33 = "<i class=\"ti ti-zoom-in\" aria-hidden=\"true\"></i>",
45
+ _tmpl$34 = ["<div class=\"k2b-calendar-popover\" popover=\"auto\" role=\"dialog\"", ">", "</div>"],
46
+ _tmpl$35 = ["<div class=\"k2b-calendar-time-grid__all-day\" style=\"", "\"><div class=\"k2b-calendar-time-grid__all-day-label\">", "</div>", "</div>"],
47
+ _tmpl$36 = ["<div class=\"k2b-calendar-time-grid k2b-detail-trail\"", "><div class=\"k2b-calendar-time-grid__days\" style=\"", "\"><div></div>", "</div>", "<div class=\"k2b-calendar-time-grid__scroll\"><div class=\"k2b-calendar-time-grid__grid\" style=\"", "\"><div class=\"k2b-calendar-time-grid__gutter\" style=\"", "\">", "</div>", "</div></div></div>"],
48
+ _tmpl$37 = ["<span class=\"k2b-calendar-time-grid__day-label\"", ">", "</span>"],
49
+ _tmpl$38 = ["<span class=\"k2b-calendar-time-grid__badge\">", "", "</span>"],
50
+ _tmpl$39 = ["<div class=\"k2b-calendar-time-grid__all-day-events\">", "", "</div>"],
51
+ _tmpl$40 = ["<div class=\"k2b-calendar-time-grid__hour\"", ">", ":00</div>"],
52
+ _tmpl$41 = ["<div class=\"k2b-calendar-time-grid__now\" style=\"", "\"></div>"],
53
+ _tmpl$42 = ["<div class=\"k2b-calendar-time-grid__column\" style=\"", "\">", "", "", "", "", "</div>"],
54
+ _tmpl$43 = ["<div class=\"k2b-calendar-preview__title\">", "</div>"],
55
+ _tmpl$44 = ["<div class=\"k2b-calendar-preview k2b-calendar-preview--timed\"", " style=\"", "\"><div class=\"k2b-calendar-preview__content\">", "<div class=\"k2b-calendar-preview__label\">", " - ", "</div></div></div>"],
56
+ _tmpl$45 = ["<button type=\"button\"", " draggable=\"false\" class=\"k2b-calendar-time-grid__resize\"><span class=\"k2b-calendar-time-grid__resize-icon\" aria-hidden=\"true\"></span></button>"],
57
+ _tmpl$46 = ["<div class=\"k2b-calendar-time-grid__event-position\" style=\"", "\"><div class=\"k2b-calendar-time-grid__event-frame\">", "", "</div></div>"],
58
+ _tmpl$47 = ["<button type=\"button\" class=\"k2b-calendar-time-grid__overflow\" style=\"", "\"", "><span class=\"k2b-calendar-time-grid__overflow-count\">+", "</span></button>"],
59
+ _tmpl$48 = ["<div class=\"k2b-calendar-time-grid__overflow-menu\" style=\"", "\"><div class=\"k2b-calendar-time-grid__overflow-title\">", " - ", "</div>", "</div>"],
60
+ _tmpl$49 = ["<div class=\"k2b-calendar-year\">", "</div>"],
61
+ _tmpl$50 = ["<div class=\"k2b-calendar-year__month\"><div class=\"k2b-calendar-year__title\">", "</div><div class=\"k2b-calendar-year__grid\">", "</div></div>"],
62
+ _tmpl$51 = ["<span class=\"k2b-calendar-year__indicator\"", " style=\"", "\"></span>"],
63
+ _tmpl$52 = ["<div class=\"k2b-calendar-mobile-month__events\">", "</div>"],
64
+ _tmpl$53 = ["<div class=\"k2b-calendar-mobile-month\">", "<div class=\"k2b-calendar-mobile-month__agenda\"><div class=\"k2b-calendar-mobile-month__title\">", "</div>", "</div></div>"],
65
+ _tmpl$54 = ["<div class=\"k2b-calendar-mobile-month__empty\">", "</div>"],
66
+ _tmpl$55 = ["<div class=\"k2b-calendar-body\">", "</div>"],
67
+ _tmpl$56 = ["<section class=\"", "\"", ">", "", "</section>"];
75
68
  import { Link } from "@k2b/ssr/nav";
76
69
  import { dates as calendar } from "@k2b/stdlib";
77
70
  import { createEffect, createMemo, createSignal, For, mergeProps, on, onCleanup, onMount, Show, untrack } from "solid-js";
@@ -80,31 +73,29 @@ import { GestureMenu } from "../actions/GestureMenu";
80
73
  import SegmentedControl from "../actions/SegmentedControl";
81
74
  import { useDateConfigLocale } from "../intl/locale";
82
75
  import { useUiMessages } from "../intl/messages";
76
+ import { CalendarDayView } from "./CalendarDayView";
77
+ import { CalendarWeekView } from "./CalendarWeekView";
78
+ import { openCalendarGoTo, openCalendarShortcuts } from "./calendar-dialogs";
83
79
  import { layoutCalendarIntervals } from "./calendar-event-layout";
84
80
  import { useCalendarMessages } from "./calendar-messages";
85
81
  import { fitMonthWeek, layoutMonthWeek, monthLaneCapacity } from "./calendar-month-layout";
86
82
  import { calendarDayIndexAtPoint, calendarMinuteAtPoint, startCalendarPointerSession } from "./calendar-pointer";
83
+ import { EventChip, eventHref, followCalendarHref, formatTime, ownerDateConfig, parseDate, placeCalendarPopover, textWidth, validDate } from "./calendar-shared";
84
+ import { compactGermanDate } from "./calendar-time-view";
87
85
 
88
- /** A view the application adds to the switcher; the calendar shows its header and toolbar, the application the body. */
86
+ /** The days a host loaded events for, from the first day `from` up to `to`, both `YYYY-MM-DD` or dates. */
89
87
 
90
- /** What the built-in views read from the props: they only ever link to built-in views. */
88
+ /**
89
+ * An action the calendar offers for keyboard shortcuts, the command palette, and its shortcuts dialog. The calendar
90
+ * publishes its own through `onCommandsChange`; the host registers them with its shortcut dispatcher.
91
+ */
92
+
93
+ /** An entry dragged into the day or week view from outside the calendar, such as a task from a list below it. */
94
+
95
+ /** Actions of the calendar that the host starts from its own controls. */
96
+
97
+ /** A view the application adds to the switcher; the calendar shows its header and toolbar, the application the body. */
91
98
 
92
- const ownerDateConfig = owner => ({
93
- ...owner.dateConfig,
94
- timeZone: owner.timeZone ?? owner.dateConfig?.timeZone,
95
- firstDayOfWeek: owner.firstDayOfWeek ?? owner.dateConfig?.firstDayOfWeek ?? owner.dateConfig?.weekStartsOn ?? 1
96
- });
97
- const dateOnlyPattern = /^\d{4}-\d{2}-\d{2}$/;
98
- const parseDate = (value, context) => {
99
- if (value instanceof Date) return new Date(value);
100
- if (dateOnlyPattern.test(value)) return calendar.parseCalendarDate(value, context);
101
- const normalized = value.includes("T") ? value : value.replace(" ", "T");
102
- const parsed = new Date(normalized);
103
- if (!Number.isNaN(parsed.getTime())) return parsed;
104
- const [year, month = "1", day = "1"] = value.split("-");
105
- return new Date(Number(year), Number(month) - 1, Number(day), 12);
106
- };
107
- const validDate = value => !Number.isNaN(value.getTime());
108
99
  const weekNumber = date => {
109
100
  const target = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
110
101
  const day = target.getUTCDay() || 7;
@@ -117,7 +108,6 @@ const zonedWeekNumber = (date, context) => {
117
108
  const [year = "1970", month = "1", day = "1"] = calendar.formatDateKey(date, context).split("-");
118
109
  return weekNumber(new Date(Date.UTC(Number(year), Number(month) - 1, Number(day))));
119
110
  };
120
- const formatTime = (date, context) => calendar.formatTime(date, context);
121
111
  const formatDay = (date, context) => date.toLocaleDateString(context?.locale ?? "en", {
122
112
  weekday: "short",
123
113
  day: "numeric",
@@ -196,7 +186,6 @@ const normalizeEvents = (events, context) => events.flatMap(event => {
196
186
  }
197
187
  return days;
198
188
  });
199
- const eventHref = (props, event) => props.getEventHref?.(event) ?? event.href;
200
189
  const moveEventTo = (event, target, allDay = false, context) => {
201
190
  const duration = Math.max(30 * 60 * 1000, event.sourceEndDate.getTime() - event.sourceStartDate.getTime());
202
191
  const start = allDay ? startOfDay(target, context) : new Date(target);
@@ -243,123 +232,6 @@ const timedEventLayouts = events => {
243
232
  groupEndDate: new Date(groupEnd)
244
233
  }));
245
234
  };
246
- const EventChip = props => {
247
- const messages = useUiMessages();
248
- const dateConfig = createMemo(() => ownerDateConfig(props.owner));
249
- const color = () => props.event.color ?? "blue";
250
- const selected = () => Boolean(props.owner.selectedEventId) && props.owner.selectedEventId === props.event.id;
251
- const style = () => props.event.colorHex ? {
252
- "--k2b-calendar-accent": props.event.colorHex
253
- } : undefined;
254
- const isInteractive = () => Boolean(props.owner.onEventActivate);
255
- const durationHours = () => (props.event.endDate.getTime() - props.event.startDate.getTime()) / 3_600_000;
256
- const short = () => Boolean(props.fill && !props.event.allDay && durationHours() < 0.75);
257
- const showTime = () => !props.event.allDay && !props.compact && durationHours() >= 0.75;
258
- const showLocation = () => Boolean(props.event.location && !props.compact && durationHours() >= 1.25);
259
- const showDescription = () => Boolean(props.event.description?.trim() && props.fill && !props.event.allDay && !props.compact && durationHours() >= 1.5);
260
- const timeLabel = () => `${formatTime(props.event.startDate, dateConfig())} - ${formatTime(props.event.endDate, dateConfig())}`;
261
- const ariaLabel = () => {
262
- const label = props.label ? props.label : props.event.allDay ? props.event.title : messages().calendarEventTime({
263
- title: props.event.title,
264
- start: formatTime(props.event.startDate, dateConfig()),
265
- end: formatTime(props.event.endDate, dateConfig())
266
- });
267
- return props.event.accessibleDetail ? `${label}, ${props.event.accessibleDetail}` : label;
268
- };
269
- const renderedEvent = () => props.owner.renderEvent?.(props.event, {
270
- compact: props.compact ?? false,
271
- fill: props.fill ?? false,
272
- start: props.event.startDate,
273
- end: props.event.endDate,
274
- allDay: props.event.allDay ?? false,
275
- durationHours: durationHours(),
276
- timeLabel: timeLabel(),
277
- leadingTime: props.leadingTime
278
- });
279
- const defaultContent = [_$createComponent(Show, {
280
- get when() {
281
- return props.leadingTime;
282
- },
283
- get children() {
284
- return _$ssr(_tmpl$, _$escape(props.leadingTime));
285
- }
286
- }), _$ssr(_tmpl$3, _$escape(_$createComponent(Show, {
287
- get when() {
288
- return props.event.display === "marker";
289
- },
290
- get children() {
291
- return _$ssr(_tmpl$2);
292
- }
293
- })), _$escape(props.event.title)), _$createComponent(Show, {
294
- get when() {
295
- return showTime();
296
- },
297
- get children() {
298
- return _$ssr(_tmpl$4, _$escape(timeLabel()));
299
- }
300
- }), _$createComponent(Show, {
301
- get when() {
302
- return showLocation();
303
- },
304
- get children() {
305
- return _$ssr(_tmpl$4, _$escape(props.event.location));
306
- }
307
- }), _$createComponent(Show, {
308
- get when() {
309
- return showDescription();
310
- },
311
- get children() {
312
- return _$ssr(_tmpl$5, _$escape(props.event.description));
313
- }
314
- })];
315
- const content = () => [_$createComponent(Show, {
316
- get when() {
317
- return props.hintStart;
318
- },
319
- get children() {
320
- return _$ssr(_tmpl$6, _$escape(props.hintStart));
321
- }
322
- }), renderedEvent() ?? defaultContent, _$createComponent(Show, {
323
- get when() {
324
- return props.hintEnd;
325
- },
326
- get children() {
327
- return _$ssr(_tmpl$7, _$escape(props.hintEnd));
328
- }
329
- })];
330
- const isActionable = () => isInteractive() || Boolean(props.onMovePointerDown);
331
- let suppressClickUntil = 0;
332
- const onClick = event => {
333
- if (performance.now() < suppressClickUntil) {
334
- event.preventDefault();
335
- event.stopPropagation();
336
- return;
337
- }
338
- if (!props.owner.onEventActivate || props.owner.eventActivation === "double") return;
339
- event.preventDefault();
340
- event.stopPropagation();
341
- props.owner.onEventActivate(props.event);
342
- };
343
- const onDoubleClick = event => {
344
- if (!props.owner.onEventActivate || props.owner.eventActivation !== "double") return;
345
- event.preventDefault();
346
- event.stopPropagation();
347
- props.owner.onEventActivate(props.event);
348
- };
349
- const onButtonKeyDown = event => {
350
- if (!isInteractive() || event.key !== "Enter" && event.key !== " ") return;
351
- event.preventDefault();
352
- props.owner.onEventActivate?.(props.event);
353
- };
354
- const onPointerDown = event => {
355
- if (event.pointerType === "touch") return;
356
- if (props.onMovePointerDown) event.stopPropagation();
357
- props.onMovePointerDown?.(event, () => {
358
- suppressClickUntil = performance.now() + 400;
359
- });
360
- };
361
- return props.href ? _$ssr(_tmpl$8, _$ssrAttribute("href", _$escape(props.href, true), false), _$ssrAttribute("data-color", props.event.colorHex ? _$escape(undefined, true) : _$escape(color(), true), false) + _$ssrAttribute("data-selected", selected() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-compact", props.compact ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-fill", props.fill ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-short", short() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-moving", props.moving ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-continues-before", props.continuesBefore ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-continues-after", props.continuesAfter ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-bar", props.bar ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-interactive", isInteractive() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-display", _$escape(props.event.display, true), false) + _$ssrAttribute("data-space-item-id", _$escape(props.event.dataSpaceItemId, true), false), _$ssrStyle(style()), _$ssrAttribute("draggable", props.onMovePointerDown ? _$escape(false, true) : _$escape(undefined, true), false) + _$ssrAttribute("aria-label", _$escape(ariaLabel(), true), false), _$escape(content())) : isActionable() ? _$ssr(_tmpl$9, _$ssrAttribute("data-color", props.event.colorHex ? _$escape(undefined, true) : _$escape(color(), true), false) + _$ssrAttribute("data-selected", selected() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-compact", props.compact ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-fill", props.fill ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-short", short() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-moving", props.moving ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-continues-before", props.continuesBefore ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-continues-after", props.continuesAfter ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-bar", props.bar ? "true" : _$escape(undefined, true), false), _$ssrAttribute("data-display", _$escape(props.event.display, true), false), _$ssrStyle(style()), _$ssrAttribute("aria-label", _$escape(ariaLabel(), true), false), _$escape(content())) : _$ssr(_tmpl$0, _$ssrAttribute("data-color", props.event.colorHex ? _$escape(undefined, true) : _$escape(color(), true), false) + _$ssrAttribute("data-selected", selected() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-compact", props.compact ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-fill", props.fill ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-short", short() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-moving", props.moving ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-continues-before", props.continuesBefore ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-continues-after", props.continuesAfter ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-bar", props.bar ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-interactive", _$escape(undefined, true), false) + _$ssrAttribute("data-display", _$escape(props.event.display, true), false), _$ssrStyle(style()), _$ssrAttribute("aria-label", _$escape(ariaLabel(), true), false), _$escape(content()));
362
- };
363
235
  const slotInteractionProps = (owner, slot, suppressed, nativeControl = false) => {
364
236
  const isSlotChild = event => {
365
237
  if (!(event.target instanceof Element)) return false;
@@ -388,12 +260,20 @@ const slotInteractionProps = (owner, slot, suppressed, nativeControl = false) =>
388
260
  }
389
261
  };
390
262
  };
263
+ const plainClick = event => !event.defaultPrevented && event.button === 0 && !event.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey;
264
+
391
265
  /** A real anchor is the baseline; the optional handler only enhances it after hydration. */
392
266
  const CalendarNavigationLink = props => {
393
267
  const preload = () => props.owner.onPrefetch?.(props.href);
268
+ const intercepted = event => {
269
+ if (!props.intercept || !plainClick(event) || !props.intercept()) return false;
270
+ event.preventDefault();
271
+ return true;
272
+ };
394
273
  const navigateHref = event => {
274
+ if (intercepted(event)) return;
395
275
  const anchor = event.currentTarget;
396
- if (event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || anchor.target && anchor.target !== "_self" || anchor.hasAttribute("download") || new URL(anchor.href).origin !== window.location.origin) {
276
+ if (!plainClick(event) || anchor.target && anchor.target !== "_self" || anchor.hasAttribute("download") || new URL(anchor.href).origin !== window.location.origin) {
397
277
  return;
398
278
  }
399
279
  event.preventDefault();
@@ -411,6 +291,7 @@ const CalendarNavigationLink = props => {
411
291
  get onNavigate() {
412
292
  return props.owner.onNavigate;
413
293
  },
294
+ onClick: event => void intercepted(event),
414
295
  onPointerEnter: preload,
415
296
  onFocus: preload,
416
297
  get children() {
@@ -423,7 +304,7 @@ const CalendarNavigationLink = props => {
423
304
  }), _$escape(props.children), false);
424
305
  };
425
306
  const CalendarViewLinks = props => {
426
- const messages = useUiMessages();
307
+ const calendarMessages = useCalendarMessages();
427
308
  const refs = [];
428
309
  const selectRelative = (currentIndex, direction) => {
429
310
  if (props.options.length === 0) return;
@@ -441,7 +322,7 @@ const CalendarViewLinks = props => {
441
322
  refs[event.key === "Home" ? 0 : props.options.length - 1]?.click();
442
323
  }
443
324
  };
444
- return _$ssr(_tmpl$1, _$ssrAttribute("aria-label", _$escape(messages().calendarView, true), false), _$escape(_$createComponent(For, {
325
+ return _$ssr(_tmpl$, _$ssrAttribute("aria-label", _$escape(calendarMessages().calendarView, true), false), _$escape(_$createComponent(For, {
445
326
  get each() {
446
327
  return props.options;
447
328
  },
@@ -502,12 +383,62 @@ const openViewAt = (owner, date, view) => {
502
383
  owner.onViewChange?.(view);
503
384
  owner.onDateChange?.(date, view);
504
385
  };
386
+
387
+ /** What the header reads from the active view beyond the props: the days a day or week view shows, and its moves. */
388
+
389
+ const dayTitleOptions = {
390
+ weekday: "short",
391
+ day: "numeric",
392
+ month: "short",
393
+ year: "numeric"
394
+ };
395
+ const weekTitleOptions = {
396
+ day: "numeric",
397
+ month: "short",
398
+ year: "numeric"
399
+ };
400
+
401
+ /** Where today lies from the shown day or week before its view measured: the arrow of the Today button, or nothing. */
402
+ const todayDirectionOf = (view, date, context) => {
403
+ const today = calendar.formatDateKey(new Date(), context);
404
+ if (view === "week") {
405
+ const start = calendar.formatDateKey(calendar.startOfWeek(date, context), context);
406
+ const end = calendar.formatDateKey(calendar.addDays(calendar.startOfWeek(date, context), 6, context), context);
407
+ return today < start ? "left" : today > end ? "right" : "";
408
+ }
409
+ const shown = calendar.formatDateKey(date, context);
410
+ return today < shown ? "up" : today > shown ? "down" : "";
411
+ };
505
412
  const CalendarHeader = props => {
506
- const messages = useUiMessages();
413
+ const calendarMessages = useCalendarMessages();
507
414
  const dateConfig = () => ownerDateConfig(props.owner);
508
- const previous = () => adjacentCalendarDate(props.date, props.view, -1, dateConfig());
509
- const next = () => adjacentCalendarDate(props.date, props.view, 1, dateConfig());
415
+ const timeView = () => props.nav.timeView();
416
+ const parseKey = key => calendar.parseCalendarDate(key, dateConfig());
417
+ /** The date the header pages from: the first day a day or week view shows, else the date. */
418
+ const base = () => {
419
+ const shown = timeView()?.visibleKeys().first;
420
+ return shown ? parseKey(shown) : props.date;
421
+ };
422
+ const previous = () => adjacentCalendarDate(base(), props.view, -1, dateConfig());
423
+ const next = () => adjacentCalendarDate(base(), props.view, 1, dateConfig());
424
+ /** The day view's title, such as "Fri, Oct 9, 2026" or "Fr, 9. Okt 2026". */
425
+ const formatDayTitle = date => compactGermanDate(new Intl.DateTimeFormat(dateConfig().locale ?? "en", {
426
+ ...dayTitleOptions,
427
+ timeZone: dateConfig().timeZone
428
+ }).format(date), dateConfig().locale, true);
429
+ const formatRange = (from, to) => compactGermanDate(new Intl.DateTimeFormat(dateConfig().locale ?? "en", {
430
+ ...weekTitleOptions,
431
+ timeZone: dateConfig().timeZone
432
+ }).formatRange(from, to), dateConfig().locale);
433
+ /** The day and week views with `dayHours` name the days they show, also on the server before they measured. */
434
+ const timeMode = () => Boolean(props.owner.dayHours) && (props.view === "day" || props.view === "week");
510
435
  const title = () => {
436
+ const shown = timeView()?.visibleKeys();
437
+ if (timeMode() && props.view === "day") return formatDayTitle(shown ? parseKey(shown.first) : props.date);
438
+ if (timeMode()) {
439
+ const start = shown ? parseKey(shown.first) : calendar.startOfWeek(props.date, dateConfig());
440
+ return formatRange(start, shown ? parseKey(shown.last) : calendar.addDays(start, 6, dateConfig()));
441
+ }
511
442
  if (props.view === "year") return new Intl.DateTimeFormat(dateConfig().locale ?? "en", {
512
443
  year: "numeric",
513
444
  timeZone: dateConfig().timeZone
@@ -523,8 +454,8 @@ const CalendarHeader = props => {
523
454
  return formatMonth(props.date, dateConfig());
524
455
  };
525
456
  /**
526
- * The titles this view can show around the current date: the months of the year, the weeks of the month, or a day
527
- * of each weekday in every month. Their widest one sets the title's width.
457
+ * The titles this view can show around the current date: the months of the year, the weeks of the month and across
458
+ * each month boundary, or a day of each weekday in every month. Their widest one sets the title's width.
528
459
  */
529
460
  const titleWidths = createMemo(() => {
530
461
  const context = dateConfig();
@@ -537,12 +468,22 @@ const CalendarHeader = props => {
537
468
  }, (_, month) => formatMonth(zonedMonthDate(year, month, context), context));
538
469
  if (props.view === "week") {
539
470
  const first = calendar.startOfWeek(calendar.startOfMonth(props.date, context), context);
540
- return Array.from({
471
+ const weeks = Array.from({
541
472
  length: 6
542
473
  }, (_, week) => {
543
474
  const start = calendar.addDays(first, week * 7, context);
475
+ if (timeMode()) return formatRange(start, calendar.addDays(start, 6, context));
544
476
  return `${formatDay(start, context)} - ${formatDay(calendar.addDays(start, 6, context), context)}`;
545
477
  });
478
+ if (timeMode()) {
479
+ return [...weeks, ...Array.from({
480
+ length: 12
481
+ }, (_, month) => {
482
+ const day28 = calendar.addDays(zonedMonthDate(year, month, context), 27, context);
483
+ return formatRange(day28, calendar.addDays(day28, 6, context));
484
+ })];
485
+ }
486
+ return weeks;
546
487
  }
547
488
  return Array.from({
548
489
  length: 12
@@ -550,7 +491,7 @@ const CalendarHeader = props => {
550
491
  const first = zonedMonthDate(year, month, context);
551
492
  return Array.from({
552
493
  length: 7
553
- }, (_, offset) => calendar.addDays(first, 21 + offset, context).toLocaleDateString(context.locale ?? "en", {
494
+ }, (_, offset) => timeMode() ? formatDayTitle(calendar.addDays(first, 21 + offset, context)) : calendar.addDays(first, 21 + offset, context).toLocaleDateString(context.locale ?? "en", {
554
495
  weekday: "long",
555
496
  month: "long",
556
497
  day: "numeric",
@@ -574,49 +515,82 @@ const CalendarHeader = props => {
574
515
  const href = props.owner.getViewHref?.(view);
575
516
  if (href) window.location.href = href;
576
517
  };
577
- const navButton = (date, icon, label) => {
518
+ const navButton = (date, icon, label, direction) => {
578
519
  const href = props.owner.getDateHref?.(date, props.view);
520
+ const step = () => timeView()?.step(direction) ?? false;
521
+ const title = props.nav.commands().length > 0 ? `${label} (${direction > 0 ? "J" : "K"})` : label;
579
522
  return (props.owner.onNavigateHref || props.owner.onNavigate) && href ? _$createComponent(CalendarNavigationLink, {
580
523
  get owner() {
581
524
  return props.owner;
582
525
  },
583
526
  href: href,
527
+ intercept: step,
584
528
  anchorProps: {
585
529
  "aria-label": label,
586
- title: label,
530
+ title,
587
531
  class: "k2b-calendar-header__nav-button"
588
532
  },
589
533
  get children() {
590
- return _$ssr(_tmpl$10, `ti ${_$escape(icon, true)}`);
534
+ return _$ssr(_tmpl$2, `ti ${_$escape(icon, true)}`);
591
535
  }
592
- }) : props.owner.onDateChange ? _$ssr(_tmpl$11, _$ssrAttribute("aria-label", _$escape(label, true), false), `ti ${_$escape(icon, true)}`) : _$createComponent(CalendarNavigationLink, {
536
+ }) : props.owner.onDateChange ? _$ssr(_tmpl$3, _$ssrAttribute("aria-label", _$escape(label, true), false) + _$ssrAttribute("title", _$escape(title, true), false), `ti ${_$escape(icon, true)}`) : _$createComponent(CalendarNavigationLink, {
593
537
  get owner() {
594
538
  return props.owner;
595
539
  },
596
540
  href: href ?? "#",
541
+ intercept: step,
597
542
  anchorProps: {
598
543
  "aria-label": label,
599
- title: label,
544
+ title,
600
545
  class: "k2b-calendar-header__nav-button"
601
546
  },
602
547
  get children() {
603
- return _$ssr(_tmpl$10, `ti ${_$escape(icon, true)}`);
548
+ return _$ssr(_tmpl$2, `ti ${_$escape(icon, true)}`);
604
549
  }
605
550
  });
606
551
  };
552
+ /**
553
+ * In the day and week views that scroll through their days, Today points where today lies, or shows a calm dot while
554
+ * it is on screen; the icon keeps its place either way. The other views name their period in the title.
555
+ */
556
+ const direction = () => timeMode() ? (timeView()?.todayDirection() ?? todayDirectionOf(String(props.view), props.date, dateConfig())) || "here" : undefined;
557
+ /** One arrow that the stylesheet turns toward today, or the dot while today shows. */
558
+ const todayIcon = () => _$createComponent(Show, {
559
+ get when() {
560
+ return direction();
561
+ },
562
+ children: current => _$createComponent(Show, {
563
+ get when() {
564
+ return current() !== "here";
565
+ },
566
+ get fallback() {
567
+ return _$ssr(_tmpl$5);
568
+ },
569
+ get children() {
570
+ return _$ssr(_tmpl$4);
571
+ }
572
+ })
573
+ });
607
574
  const todayButton = () => {
608
575
  const today = calendar.today(dateConfig());
609
576
  const href = props.owner.getDateHref?.(today, props.view);
610
- const label = _$ssr(_tmpl$12, _$escape(props.labels.today));
577
+ const intercept = () => timeView()?.today() ?? false;
578
+ const title = () => props.nav.commands().length > 0 ? `${props.labels.today} (H)` : undefined;
579
+ const label = [todayIcon(), _$ssr(_tmpl$6, _$escape(props.labels.today))];
611
580
  return (props.owner.onNavigateHref || props.owner.onNavigate) && href ? _$createComponent(CalendarNavigationLink, {
612
581
  get owner() {
613
582
  return props.owner;
614
583
  },
615
584
  href: href,
616
- anchorProps: {
617
- class: "k2b-button k2b-calendar-header__today",
618
- "data-size": "sm",
619
- "data-variant": "input"
585
+ intercept: intercept,
586
+ get anchorProps() {
587
+ return {
588
+ class: "k2b-button k2b-calendar-header__today",
589
+ "data-size": "sm",
590
+ "data-variant": "input",
591
+ "data-direction": direction(),
592
+ title: title()
593
+ };
620
594
  },
621
595
  children: label
622
596
  }) : props.owner.onDateChange ? _$createComponent(Button, {
@@ -624,19 +598,32 @@ const CalendarHeader = props => {
624
598
  variant: "input",
625
599
  size: "sm",
626
600
  "class": "k2b-calendar-header__today",
627
- onClick: () => goDate(today),
601
+ get ["data-direction"]() {
602
+ return direction();
603
+ },
604
+ get title() {
605
+ return title();
606
+ },
607
+ onClick: () => {
608
+ if (!intercept()) goDate(today);
609
+ },
628
610
  get children() {
629
- return props.labels.today;
611
+ return [todayIcon(), props.labels.today];
630
612
  }
631
613
  }) : _$createComponent(CalendarNavigationLink, {
632
614
  get owner() {
633
615
  return props.owner;
634
616
  },
635
617
  href: href ?? "#",
636
- anchorProps: {
637
- class: "k2b-button k2b-calendar-header__today",
638
- "data-size": "sm",
639
- "data-variant": "input"
618
+ intercept: intercept,
619
+ get anchorProps() {
620
+ return {
621
+ class: "k2b-button k2b-calendar-header__today",
622
+ "data-size": "sm",
623
+ "data-variant": "input",
624
+ "data-direction": direction(),
625
+ title: title()
626
+ };
640
627
  },
641
628
  children: label
642
629
  });
@@ -654,17 +641,17 @@ const CalendarHeader = props => {
654
641
  value: "year",
655
642
  label: props.labels.year
656
643
  }].filter(option => !props.owner.views || props.owner.views.includes(option.value)), ...(props.owner.customViews ?? [])]);
657
- return _$ssr(_tmpl$15, _$escape(navButton(previous(), "ti-chevron-left", props.labels.previous)), _$escape(navButton(next(), "ti-chevron-right", props.labels.next)), _$escape(title()), _$escape(_$createComponent(For, {
644
+ return _$ssr(_tmpl$0, _$escape(navButton(previous(), "ti-chevron-left", props.labels.previous, -1)), _$escape(navButton(next(), "ti-chevron-right", props.labels.next, 1)), _$escape(title()), _$escape(_$createComponent(For, {
658
645
  get each() {
659
646
  return titleWidths();
660
647
  },
661
- children: candidate => _$ssr(_tmpl$16, _$escape(candidate))
648
+ children: candidate => _$ssr(_tmpl$1, _$escape(candidate))
662
649
  })), _$escape(_$createComponent(Show, {
663
650
  get when() {
664
651
  return props.owner.toolbarContent;
665
652
  },
666
653
  get children() {
667
- return _$ssr(_tmpl$13, _$escape(props.owner.toolbarContent));
654
+ return _$ssr(_tmpl$7, _$escape(props.owner.toolbarContent));
668
655
  }
669
656
  })), _$escape(todayButton()), _$escape(_$createComponent(Show, {
670
657
  get when() {
@@ -672,10 +659,11 @@ const CalendarHeader = props => {
672
659
  },
673
660
  get fallback() {
674
661
  return _$createComponent(SegmentedControl, {
662
+ "class": "k2b-calendar-view-switcher",
675
663
  value: () => props.view === "mobile-month" ? "month" : props.view,
676
664
  onValueChange: goView,
677
665
  get ariaLabel() {
678
- return messages().calendarView;
666
+ return calendarMessages().calendarView;
679
667
  },
680
668
  get options() {
681
669
  return viewOptions();
@@ -699,18 +687,24 @@ const CalendarHeader = props => {
699
687
  });
700
688
  }
701
689
  })), _$escape(props.owner.toolbarActions), _$escape(_$createComponent(Show, {
690
+ get when() {
691
+ return props.nav.commands().length > 0;
692
+ },
693
+ get children() {
694
+ return _$ssr(_tmpl$8, _$ssrAttribute("aria-label", _$escape(calendarMessages().calendarShortcuts, true), false) + _$ssrAttribute("title", _$escape(calendarMessages().calendarShortcuts, true), false));
695
+ }
696
+ })), _$escape(_$createComponent(Show, {
702
697
  get when() {
703
698
  return props.owner.navigationPending;
704
699
  },
705
700
  get children() {
706
- return _$ssr(_tmpl$14);
701
+ return _$ssr(_tmpl$9);
707
702
  }
708
703
  })));
709
704
  };
710
705
 
711
706
  /** The compact month of `mobile-month`: a picker whose days link to their agenda. */
712
707
  const MonthPickerView = props => {
713
- const messages = useUiMessages();
714
708
  const calendarMessages = useCalendarMessages();
715
709
  const dateConfig = createMemo(() => ownerDateConfig(props.owner));
716
710
  const [movePreview, setMovePreview] = createSignal(null);
@@ -764,28 +758,28 @@ const MonthPickerView = props => {
764
758
  });
765
759
  };
766
760
  onCleanup(() => cancelInteraction?.());
767
- return _$ssr(_tmpl$18, _$ssrStyleProperty("grid-template-rows:", `auto repeat(${_$escape(weeks().length, true)}, ${props.compact ? "minmax(2.75rem, auto)" : "minmax(5rem, 1fr)"})`), _$ssrAttribute("data-week-numbers", props.owner.withWeekNumbers ? "true" : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
761
+ return _$ssr(_tmpl$11, _$ssrStyleProperty("grid-template-rows:", `auto repeat(${_$escape(weeks().length, true)}, ${props.compact ? "minmax(2.75rem, auto)" : "minmax(5rem, 1fr)"})`), _$ssrAttribute("data-week-numbers", props.owner.withWeekNumbers ? "true" : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
768
762
  get when() {
769
763
  return props.owner.withWeekNumbers;
770
764
  },
771
765
  get children() {
772
- return _$ssr(_tmpl$17, _$escape(messages().weekShort));
766
+ return _$ssr(_tmpl$10, _$escape(calendarMessages().weekShort));
773
767
  }
774
768
  })), _$escape(_$createComponent(For, {
775
769
  get each() {
776
770
  return weekdays();
777
771
  },
778
- children: day => _$ssr(_tmpl$17, _$escape(day))
772
+ children: day => _$ssr(_tmpl$10, _$escape(day))
779
773
  })), _$escape(_$createComponent(For, {
780
774
  get each() {
781
775
  return weeks();
782
776
  },
783
- children: week => _$ssr(_tmpl$20, _$ssrAttribute("data-week-numbers", props.owner.withWeekNumbers ? "true" : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
777
+ children: week => _$ssr(_tmpl$13, _$ssrAttribute("data-week-numbers", props.owner.withWeekNumbers ? "true" : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
784
778
  get when() {
785
779
  return props.owner.withWeekNumbers;
786
780
  },
787
781
  get children() {
788
- return _$ssr(_tmpl$19, _$escape(zonedWeekNumber(week[0], dateConfig())));
782
+ return _$ssr(_tmpl$12, _$escape(zonedWeekNumber(week[0], dateConfig())));
789
783
  }
790
784
  })), _$escape(_$createComponent(For, {
791
785
  each: week,
@@ -814,7 +808,7 @@ const MonthPickerView = props => {
814
808
  hiddenCount: Math.max(0, candidates.length - visibleLimit)
815
809
  };
816
810
  });
817
- return _$ssr(_tmpl$22, _$ssrAttribute("data-calendar-day-key", _$escape(dayKey, true), false) + _$ssrAttribute("data-outside", !sameMonth ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-drop-preview", movePreview()?.start && calendar.formatDateKey(movePreview().start, dateConfig()) === dayKey ? "true" : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
811
+ return _$ssr(_tmpl$15, _$ssrAttribute("data-calendar-day-key", _$escape(dayKey, true), false) + _$ssrAttribute("data-outside", !sameMonth ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-drop-preview", movePreview()?.start && calendar.formatDateKey(movePreview().start, dateConfig()) === dayKey ? "true" : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
818
812
  get when() {
819
813
  return props.owner.onSlotActivate;
820
814
  },
@@ -831,7 +825,7 @@ const MonthPickerView = props => {
831
825
  get anchorProps() {
832
826
  return {
833
827
  class: "k2b-calendar-month__day-target",
834
- "aria-label": messages().openDate({
828
+ "aria-label": calendarMessages().openDate({
835
829
  label: dayLabel
836
830
  })
837
831
  };
@@ -845,7 +839,7 @@ const MonthPickerView = props => {
845
839
  "class": "k2b-calendar-month__day-target",
846
840
  "data-interactive": "true",
847
841
  get ["aria-label"]() {
848
- return messages().createEventOn({
842
+ return calendarMessages().createEventOn({
849
843
  label: dayLabel
850
844
  });
851
845
  }
@@ -863,7 +857,7 @@ const MonthPickerView = props => {
863
857
  return props.owner.onSlotActivate && href;
864
858
  },
865
859
  get fallback() {
866
- return _$ssr(_tmpl$23, _$ssrAttribute("data-today", isToday ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-outside", !sameMonth ? "true" : _$escape(undefined, true), false), _$escape(calendar.formatDayNumber(day, dateConfig())));
860
+ return _$ssr(_tmpl$16, _$ssrAttribute("data-today", isToday ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-outside", !sameMonth ? "true" : _$escape(undefined, true), false), _$escape(calendar.formatDayNumber(day, dateConfig())));
867
861
  },
868
862
  children: dayHref => _$createComponent(CalendarNavigationLink, {
869
863
  get owner() {
@@ -877,7 +871,7 @@ const MonthPickerView = props => {
877
871
  class: "k2b-calendar-month__day-number",
878
872
  "data-today": isToday ? "true" : undefined,
879
873
  "data-outside": !sameMonth ? "true" : undefined,
880
- "aria-label": messages().openDate({
874
+ "aria-label": calendarMessages().openDate({
881
875
  label: dayLabel
882
876
  })
883
877
  };
@@ -888,18 +882,18 @@ const MonthPickerView = props => {
888
882
  })
889
883
  })), _$escape(_$createComponent(Show, {
890
884
  when: dayBadge,
891
- children: badge => _$ssr(_tmpl$24, _$escape(_$createComponent(Show, {
885
+ children: badge => _$ssr(_tmpl$17, _$escape(_$createComponent(Show, {
892
886
  get when() {
893
887
  return badge().icon;
894
888
  },
895
- children: icon => _$ssr(_tmpl$10, `k2b-calendar-month__badge-icon ti ti-${_$escape(icon(), true)}`)
889
+ children: icon => _$ssr(_tmpl$2, `k2b-calendar-month__badge-icon ti ti-${_$escape(icon(), true)}`)
896
890
  })), _$escape(badge().label))
897
891
  })), _$escape(_$createComponent(Show, {
898
892
  get when() {
899
893
  return eventStack().preview;
900
894
  },
901
895
  get children() {
902
- return _$ssr(_tmpl$21, _$escape(props.events.find(event => event.id === eventStack().preview.id)?.title ?? messages().moveEvent));
896
+ return _$ssr(_tmpl$14, _$escape(props.events.find(event => event.id === eventStack().preview.id)?.title ?? calendarMessages().moveEvent));
903
897
  }
904
898
  })), _$escape(_$createComponent(For, {
905
899
  get each() {
@@ -945,7 +939,7 @@ const MonthPickerView = props => {
945
939
  get each() {
946
940
  return events.slice(0, 4);
947
941
  },
948
- children: event => _$ssr(_tmpl$25, _$ssrAttribute("data-color", event.colorHex ? _$escape(undefined, true) : _$escape(event.color ?? "blue", true), false), _$ssrStyle(event.colorHex ? {
942
+ children: event => _$ssr(_tmpl$18, _$ssrAttribute("data-color", event.colorHex ? _$escape(undefined, true) : _$escape(event.color ?? "blue", true), false), _$ssrStyle(event.colorHex ? {
949
943
  "background-color": event.colorHex
950
944
  } : undefined))
951
945
  })));
@@ -956,6 +950,8 @@ const MonthPickerView = props => {
956
950
 
957
951
  /** One entry of the month grid: its whole range, and the days it covers as `YYYY-MM-DD` keys. */
958
952
 
953
+ /** What the calendar's controller asks of the month view. */
954
+
959
955
  /** Lane height and gap of the month entries, in rem; the stylesheet reads both from the grid's custom properties. */
960
956
  const MONTH_LANE_REM = 1.25;
961
957
  const MONTH_LANE_GAP_REM = 0.125;
@@ -1003,34 +999,6 @@ const monthItems = events => {
1003
999
  for (const item of items.values()) item.bar = item.firstKey !== item.lastKey || Boolean(item.event.allDay && item.event.display !== "marker");
1004
1000
  return [...items.values()].sort((left, right) => Number(right.bar) - Number(left.bar) || left.event.sourceStartDate.getTime() - right.event.sourceStartDate.getTime() || left.event.title.localeCompare(right.event.title));
1005
1001
  };
1006
-
1007
- /** Places a calendar popover below its anchor when there is room and above it otherwise, inside the viewport. */
1008
- const placeCalendarPopover = (anchor, popover) => {
1009
- const margin = 8;
1010
- const gap = 4;
1011
- const rect = anchor.getBoundingClientRect();
1012
- const width = Math.min(popover.offsetWidth || 288, window.innerWidth - margin * 2);
1013
- const height = popover.offsetHeight;
1014
- const left = Math.max(margin, Math.min(rect.left, window.innerWidth - width - margin));
1015
- const roomBelow = window.innerHeight - rect.bottom - gap - margin;
1016
- const above = height > roomBelow && rect.top - gap - margin > roomBelow;
1017
- const top = above ? Math.max(margin, rect.top - height - gap) : Math.min(rect.bottom + gap, window.innerHeight - height - margin);
1018
- popover.style.left = `${left}px`;
1019
- popover.style.top = `${Math.max(margin, top)}px`;
1020
- };
1021
- let measureContext;
1022
- /** The width of a text in a font, from a canvas, so a bar can tell whether its title leaves room for a date hint. */
1023
- const textWidth = (text, font) => {
1024
- measureContext ??= typeof document === "undefined" ? null : document.createElement("canvas").getContext("2d");
1025
- if (!measureContext) return Number.POSITIVE_INFINITY;
1026
- measureContext.font = font;
1027
- return measureContext.measureText(text).width;
1028
- };
1029
-
1030
- /** Follows a calendar link the way the calendar's own links do: through the host's navigation when it has one. */
1031
- const followCalendarHref = (owner, href) => {
1032
- if (owner.onNavigateHref) owner.onNavigateHref(href);else window.location.assign(href);
1033
- };
1034
1002
  const PRINTABLE_KEY = /^.$/u;
1035
1003
 
1036
1004
  /**
@@ -1040,7 +1008,6 @@ const PRINTABLE_KEY = /^.$/u;
1040
1008
  * cell shows as many entries as its height holds.
1041
1009
  */
1042
1010
  const MonthView = props => {
1043
- const messages = useUiMessages();
1044
1011
  const calendarMessages = useCalendarMessages();
1045
1012
  const dateConfig = createMemo(() => ownerDateConfig(props.owner));
1046
1013
  // The shown month and its grid change only with the month, so a refresh of the same month keeps every cell and its
@@ -1171,7 +1138,7 @@ const MonthView = props => {
1171
1138
  const itemLabel = item => {
1172
1139
  if (item.firstKey === item.lastKey) return undefined;
1173
1140
  const allDay = Boolean(item.event.allDay);
1174
- return messages().calendarEventTime({
1141
+ return calendarMessages().calendarEventTime({
1175
1142
  title: item.event.title,
1176
1143
  start: monthDayLabel(allDay ? parseKey(item.firstKey) : item.event.sourceStartDate, !allDay),
1177
1144
  end: monthDayLabel(allDay ? parseKey(item.lastKey) : item.event.sourceEndDate, !allDay)
@@ -1264,6 +1231,25 @@ const MonthView = props => {
1264
1231
  })) return;
1265
1232
  if (props.owner.onSlotActivate) props.owner.onSlotActivate(rangeOf(range));
1266
1233
  };
1234
+ onMount(() => props.register?.({
1235
+ quickCreate: create => {
1236
+ const range = selection() ?? {
1237
+ first: rovingKey(),
1238
+ last: rovingKey()
1239
+ };
1240
+ select(range.first, range.last);
1241
+ if (!openCreate(range, {
1242
+ active: true,
1243
+ create
1244
+ })) props.owner.onSlotActivate?.(rangeOf(range));
1245
+ },
1246
+ createTarget: () => rangeOf(selection() ?? {
1247
+ first: rovingKey(),
1248
+ last: rovingKey()
1249
+ }),
1250
+ typing: () => popover()?.kind === "create" && !createActive()
1251
+ }));
1252
+ onCleanup(() => props.register?.(null));
1267
1253
  const openDayList = key => {
1268
1254
  const anchor = cells.get(key);
1269
1255
  if (!anchor) return;
@@ -1584,18 +1570,18 @@ const MonthView = props => {
1584
1570
  if (linkedItem() === item.key) setLinkedItem("");
1585
1571
  }
1586
1572
  });
1587
- const grid = () => _$ssr(_tmpl$27, _$ssrAttribute("aria-label", _$escape(formatMonth(props.date, dateConfig()), true), false), _$ssrStyleProperty("grid-template-rows:", `auto repeat(${_$escape(weeks().length, true)}, minmax(5rem, 1fr))`) + _$ssrStyleProperty(";--k2b-calendar-lane:", "1.25rem") + _$ssrStyleProperty(";--k2b-calendar-lane-gap:", "0.125rem"), _$ssrAttribute("data-week-numbers", props.owner.withWeekNumbers ? "true" : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
1573
+ const grid = () => _$ssr(_tmpl$20, _$ssrAttribute("aria-label", _$escape(formatMonth(props.date, dateConfig()), true), false), _$ssrStyleProperty("grid-template-rows:", `auto repeat(${_$escape(weeks().length, true)}, minmax(5rem, 1fr))`) + _$ssrStyleProperty(";--k2b-calendar-lane:", "1.25rem") + _$ssrStyleProperty(";--k2b-calendar-lane-gap:", "0.125rem"), _$ssrAttribute("data-week-numbers", props.owner.withWeekNumbers ? "true" : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
1588
1574
  get when() {
1589
1575
  return props.owner.withWeekNumbers;
1590
1576
  },
1591
1577
  get children() {
1592
- return _$ssr(_tmpl$26, _$escape(messages().weekShort));
1578
+ return _$ssr(_tmpl$19, _$escape(calendarMessages().weekShort));
1593
1579
  }
1594
1580
  })), _$escape(_$createComponent(For, {
1595
1581
  get each() {
1596
1582
  return weekdays();
1597
1583
  },
1598
- children: (day, index) => _$ssr(_tmpl$28, _$ssrAttribute("data-weekend", index() > 4 ? "true" : _$escape(undefined, true), false), _$escape(day))
1584
+ children: (day, index) => _$ssr(_tmpl$21, _$ssrAttribute("data-weekend", index() > 4 ? "true" : _$escape(undefined, true), false), _$escape(day))
1599
1585
  })), _$escape(_$createComponent(For, {
1600
1586
  get each() {
1601
1587
  return weeks();
@@ -1607,12 +1593,12 @@ const MonthView = props => {
1607
1593
  }, capacities()[weekIndex()] ?? MONTH_DEFAULT_LANES));
1608
1594
  const weekHref = () => viewHref(week[0].key, "week");
1609
1595
  const weekNumber = () => zonedWeekNumber(week[0].day, dateConfig());
1610
- return _$ssr(_tmpl$30, _$ssrAttribute("data-week-numbers", props.owner.withWeekNumbers ? "true" : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
1596
+ return _$ssr(_tmpl$23, _$ssrAttribute("data-week-numbers", props.owner.withWeekNumbers ? "true" : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
1611
1597
  get when() {
1612
1598
  return props.owner.withWeekNumbers;
1613
1599
  },
1614
1600
  get children() {
1615
- return _$ssr(_tmpl$29, _$escape(_$createComponent(Show, {
1601
+ return _$ssr(_tmpl$22, _$escape(_$createComponent(Show, {
1616
1602
  get when() {
1617
1603
  return weekHref();
1618
1604
  },
@@ -1625,7 +1611,7 @@ const MonthView = props => {
1625
1611
  return weekNumber();
1626
1612
  },
1627
1613
  get children() {
1628
- return _$ssr(_tmpl$31, _$ssrAttribute("title", _$escape(calendarMessages().calendarOpenWeekNumber({
1614
+ return _$ssr(_tmpl$24, _$ssrAttribute("title", _$escape(calendarMessages().calendarOpenWeekNumber({
1629
1615
  week: weekNumber()
1630
1616
  }), true), false) + _$ssrAttribute("aria-label", _$escape(calendarMessages().calendarOpenWeekNumber({
1631
1617
  week: weekNumber()
@@ -1673,13 +1659,13 @@ const MonthView = props => {
1673
1659
  shown: [],
1674
1660
  hidden: 0
1675
1661
  };
1676
- return _$ssr(_tmpl$33, _$ssrAttribute("tabindex", rovingKey() === key ? 0 : -1, false) + _$ssrAttribute("aria-label", _$escape(label, true), false) + _$ssrAttribute("aria-selected", within(selection(), key) ? "true" : "false", false) + _$ssrAttribute("aria-current", key === todayKey() ? "date" : _$escape(undefined, true), false) + _$ssrAttribute("data-calendar-day-key", _$escape(key, true), false) + _$ssrAttribute("data-outside", !sameMonth ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-weekend", column() > 4 ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-past", key < todayKey() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-selected", _$escape(selectionPart(key), true), false) + _$ssrAttribute("data-drop-preview", within(dropRange(), key) ? "true" : _$escape(undefined, true), false), _$ssrAttribute("data-today", key === todayKey() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-outside", !sameMonth ? "true" : _$escape(undefined, true), false), _$escape(calendar.formatDayNumber(day, dateConfig())), _$escape(_$createComponent(Show, {
1662
+ return _$ssr(_tmpl$26, _$ssrAttribute("tabindex", rovingKey() === key ? 0 : -1, false) + _$ssrAttribute("aria-label", _$escape(label, true), false) + _$ssrAttribute("aria-selected", within(selection(), key) ? "true" : "false", false) + _$ssrAttribute("aria-current", key === todayKey() ? "date" : _$escape(undefined, true), false) + _$ssrAttribute("data-calendar-day-key", _$escape(key, true), false) + _$ssrAttribute("data-outside", !sameMonth ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-weekend", column() > 4 ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-past", key < todayKey() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-selected", _$escape(selectionPart(key), true), false) + _$ssrAttribute("data-drop-preview", within(dropRange(), key) ? "true" : _$escape(undefined, true), false), _$ssrAttribute("data-today", key === todayKey() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-outside", !sameMonth ? "true" : _$escape(undefined, true), false), _$escape(calendar.formatDayNumber(day, dateConfig())), _$escape(_$createComponent(Show, {
1677
1663
  when: dayBadge,
1678
- children: badge => _$ssr(_tmpl$24, _$escape(_$createComponent(Show, {
1664
+ children: badge => _$ssr(_tmpl$17, _$escape(_$createComponent(Show, {
1679
1665
  get when() {
1680
1666
  return badge().icon;
1681
1667
  },
1682
- children: icon => _$ssr(_tmpl$10, `k2b-calendar-month__badge-icon ti ti-${_$escape(icon(), true)}`)
1668
+ children: icon => _$ssr(_tmpl$2, `k2b-calendar-month__badge-icon ti ti-${_$escape(icon(), true)}`)
1683
1669
  })), _$escape(badge().label))
1684
1670
  })), _$escape(_$createComponent(For, {
1685
1671
  get each() {
@@ -1754,7 +1740,7 @@ const MonthView = props => {
1754
1740
  get each() {
1755
1741
  return cell().shown;
1756
1742
  },
1757
- children: (item, index) => _$ssr(_tmpl$34, _$ssrStyleProperty("--k2b-calendar-span:", "1") + _$ssrStyleProperty(";--k2b-calendar-row:", _$escape(String(cell().top + index()), true)), _$escape(_$createComponent(EventChip, {
1743
+ children: (item, index) => _$ssr(_tmpl$27, _$ssrStyleProperty("--k2b-calendar-span:", "1") + _$ssrStyleProperty(";--k2b-calendar-row:", _$escape(String(cell().top + index()), true)), _$escape(_$createComponent(EventChip, {
1758
1744
  get event() {
1759
1745
  return item.event;
1760
1746
  },
@@ -1780,7 +1766,7 @@ const MonthView = props => {
1780
1766
  return cell().hidden > 0;
1781
1767
  },
1782
1768
  get children() {
1783
- return _$ssr(_tmpl$32, _$ssrStyleProperty("--k2b-calendar-row:", _$escape(String(cell().top + cell().shown.length), true)), _$ssrAttribute("aria-label", _$escape(calendarMessages().calendarMoreEventsOn({
1769
+ return _$ssr(_tmpl$25, _$ssrStyleProperty("--k2b-calendar-row:", _$escape(String(cell().top + cell().shown.length), true)), _$ssrAttribute("aria-label", _$escape(calendarMessages().calendarMoreEventsOn({
1784
1770
  count: cell().hidden,
1785
1771
  label
1786
1772
  }), true), false), _$ssrAttribute("aria-expanded", (() => {
@@ -1800,19 +1786,19 @@ const MonthView = props => {
1800
1786
  const href = viewHref(dayKey, "day");
1801
1787
  // Read where it renders, so a refresh while the list is open updates it as it does the grid.
1802
1788
  const entries = () => dayEntries(dayKey);
1803
- return _$ssr(_tmpl$37, _$escape(dayLabel(day)), _$escape(_$createComponent(Show, {
1789
+ return _$ssr(_tmpl$30, _$escape(dayLabel(day)), _$escape(_$createComponent(Show, {
1804
1790
  get when() {
1805
1791
  return entries().length > 0;
1806
1792
  },
1807
1793
  get fallback() {
1808
- return _$ssr(_tmpl$38, _$escape(calendarMessages().calendarNothingPlanned));
1794
+ return _$ssr(_tmpl$31, _$escape(calendarMessages().calendarNothingPlanned));
1809
1795
  },
1810
1796
  get children() {
1811
- return _$ssr(_tmpl$35, _$escape(_$createComponent(For, {
1797
+ return _$ssr(_tmpl$28, _$escape(_$createComponent(For, {
1812
1798
  get each() {
1813
1799
  return entries();
1814
1800
  },
1815
- children: item => _$ssr(_tmpl$39, _$escape(_$createComponent(EventChip, {
1801
+ children: item => _$ssr(_tmpl$32, _$escape(_$createComponent(EventChip, {
1816
1802
  get event() {
1817
1803
  return item.event;
1818
1804
  },
@@ -1849,7 +1835,7 @@ const MonthView = props => {
1849
1835
  size: "sm",
1850
1836
  onClick: () => openView(dayKey, "day"),
1851
1837
  get children() {
1852
- return [_$ssr(_tmpl$40), calendarMessages().calendarOpenDay];
1838
+ return [_$ssr(_tmpl$33), calendarMessages().calendarOpenDay];
1853
1839
  }
1854
1840
  });
1855
1841
  }
@@ -1868,7 +1854,7 @@ const MonthView = props => {
1868
1854
  "data-size": "sm"
1869
1855
  },
1870
1856
  get children() {
1871
- return [_$ssr(_tmpl$40), calendarMessages().calendarOpenDay];
1857
+ return [_$ssr(_tmpl$33), calendarMessages().calendarOpenDay];
1872
1858
  }
1873
1859
  })
1874
1860
  })), _$escape(_$createComponent(Show, {
@@ -1890,7 +1876,7 @@ const MonthView = props => {
1890
1876
  });
1891
1877
  },
1892
1878
  get children() {
1893
- return [_$ssr(_tmpl$36), calendarMessages().calendarNewEvent];
1879
+ return [_$ssr(_tmpl$29), calendarMessages().calendarNewEvent];
1894
1880
  }
1895
1881
  });
1896
1882
  }
@@ -1919,7 +1905,7 @@ const MonthView = props => {
1919
1905
  }
1920
1906
  });
1921
1907
  }
1922
- }), _$ssr(_tmpl$41, _$ssrAttribute("aria-label", (() => {
1908
+ }), _$ssr(_tmpl$34, _$ssrAttribute("aria-label", (() => {
1923
1909
  const current = popover();
1924
1910
  if (current?.kind === "day") return dayLabel(parseKey(current.dayKey));
1925
1911
  return _$escape(calendarMessages().calendarQuickCreate, true);
@@ -1937,7 +1923,7 @@ const MonthView = props => {
1937
1923
  })))];
1938
1924
  };
1939
1925
  const TimeGridView = props => {
1940
- const messages = useUiMessages();
1926
+ const calendarMessages = useCalendarMessages();
1941
1927
  const dateConfig = createMemo(() => ownerDateConfig(props.owner));
1942
1928
  const gridStartHour = () => props.owner.visibleStartHour ?? 0;
1943
1929
  const gridEndHour = () => props.owner.visibleEndHour ?? 23;
@@ -2108,10 +2094,12 @@ const TimeGridView = props => {
2108
2094
  }
2109
2095
  return [...groups.values()];
2110
2096
  };
2097
+ // 12 rem per lane. The 40 rem grid is wider than one or two lanes, so only
2098
+ // three or more make the day scroll, and one lane fits beside a tablet drawer.
2111
2099
  const dayColumnMinWidth = layouts => {
2112
2100
  if (!isDayView()) return undefined;
2113
2101
  const lanes = Math.max(1, ...layouts.map(layout => layout.lanes));
2114
- return `${Math.max(32, lanes * 12)}rem`;
2102
+ return `${lanes * 12}rem`;
2115
2103
  };
2116
2104
  const laneStyle = layoutItem => {
2117
2105
  if (isDayView()) {
@@ -2147,7 +2135,7 @@ const TimeGridView = props => {
2147
2135
  });
2148
2136
  });
2149
2137
  });
2150
- return _$ssr(_tmpl$43, _$ssrStyleProperty("grid-template-columns:", `4rem repeat(${_$escape(props.days.length, true)}, minmax(0, 1fr))`), _$escape(_$createComponent(For, {
2138
+ return _$ssr(_tmpl$36, _$ssrAttribute("data-view", isDayView() ? "day" : "week", false), _$ssrStyleProperty("grid-template-columns:", `4rem repeat(${_$escape(props.days.length, true)}, minmax(0, 1fr))`), _$escape(_$createComponent(For, {
2151
2139
  get each() {
2152
2140
  return props.days;
2153
2141
  },
@@ -2165,13 +2153,13 @@ const TimeGridView = props => {
2165
2153
  class: "k2b-calendar-time-grid__day"
2166
2154
  },
2167
2155
  get children() {
2168
- return [_$ssr(_tmpl$44, _$ssrAttribute("data-today", today() ? "true" : _$escape(undefined, true), false), _$escape(formatDay(day, dateConfig()))), _$createComponent(Show, {
2156
+ return [_$ssr(_tmpl$37, _$ssrAttribute("data-today", today() ? "true" : _$escape(undefined, true), false), _$escape(formatDay(day, dateConfig()))), _$createComponent(Show, {
2169
2157
  when: dayBadge,
2170
- children: badge => _$ssr(_tmpl$45, _$escape(_$createComponent(Show, {
2158
+ children: badge => _$ssr(_tmpl$38, _$escape(_$createComponent(Show, {
2171
2159
  get when() {
2172
2160
  return badge().icon;
2173
2161
  },
2174
- children: icon => _$ssr(_tmpl$10, `k2b-calendar-time-grid__badge-icon ti ti-${_$escape(icon(), true)}`)
2162
+ children: icon => _$ssr(_tmpl$2, `k2b-calendar-time-grid__badge-icon ti ti-${_$escape(icon(), true)}`)
2175
2163
  })), _$escape(badge().label))
2176
2164
  })];
2177
2165
  }
@@ -2182,7 +2170,7 @@ const TimeGridView = props => {
2182
2170
  return !props.owner.hideAllDay;
2183
2171
  },
2184
2172
  get children() {
2185
- return _$ssr(_tmpl$42, _$ssrStyleProperty("grid-template-columns:", `4rem repeat(${_$escape(props.days.length, true)}, minmax(0, 1fr))`) + _$ssrStyleProperty(";max-height:", `${_$escape(props.owner.allDayMaxHeightRem ?? 7, true)}rem`), _$escape(props.labels.allDay), _$escape(_$createComponent(For, {
2173
+ return _$ssr(_tmpl$35, _$ssrStyleProperty("grid-template-columns:", `4rem repeat(${_$escape(props.days.length, true)}, minmax(0, 1fr))`) + _$ssrStyleProperty(";max-height:", `${_$escape(props.owner.allDayMaxHeightRem ?? 7, true)}rem`), _$escape(props.labels.allDay), _$escape(_$createComponent(For, {
2186
2174
  get each() {
2187
2175
  return props.days;
2188
2176
  },
@@ -2206,9 +2194,9 @@ const TimeGridView = props => {
2206
2194
  end: calendar.addDays(start, 1, dateConfig()),
2207
2195
  allDay: true
2208
2196
  };
2209
- }, () => performance.now() < suppressSlotClickUntil)), _$ssr(_tmpl$46, _$escape(_$createComponent(For, {
2197
+ }, () => performance.now() < suppressSlotClickUntil)), _$ssr(_tmpl$39, _$escape(_$createComponent(For, {
2210
2198
  each: previewAllDay,
2211
- children: event => _$ssr(_tmpl$21, _$escape(event.title))
2199
+ children: event => _$ssr(_tmpl$14, _$escape(event.title))
2212
2200
  })), _$escape(_$createComponent(For, {
2213
2201
  get each() {
2214
2202
  return allDay();
@@ -2237,7 +2225,7 @@ const TimeGridView = props => {
2237
2225
  get each() {
2238
2226
  return hours();
2239
2227
  },
2240
- children: hour => _$ssr(_tmpl$47, _$ssrAttribute("data-outside-business", hour < businessStartHour() || hour > businessEndHour() ? "true" : _$escape(undefined, true), false), _$escape(`${hour}`.padStart(2, "0")))
2228
+ children: hour => _$ssr(_tmpl$40, _$ssrAttribute("data-outside-business", hour < businessStartHour() || hour > businessEndHour() ? "true" : _$escape(undefined, true), false), _$escape(`${hour}`.padStart(2, "0")))
2241
2229
  })), _$escape(_$createComponent(For, {
2242
2230
  get each() {
2243
2231
  return props.days;
@@ -2245,12 +2233,12 @@ const TimeGridView = props => {
2245
2233
  children: day => {
2246
2234
  const dayKey = calendar.formatDateKey(day, dateConfig());
2247
2235
  const layouts = createMemo(() => timedEventLayouts(eventsByDay().get(dayKey)?.timed ?? []));
2248
- return _$ssr(_tmpl$49, _$ssrStyleProperty("min-width:", _$escape(dayColumnMinWidth(layouts()), true)) + _$ssrStyleProperty(";grid-template-rows:", `repeat(${_$escape(hours().length, true)}, minmax(4rem, 1fr))`), _$escape(_$createComponent(Show, {
2236
+ return _$ssr(_tmpl$42, _$ssrStyleProperty("min-width:", _$escape(dayColumnMinWidth(layouts()), true)) + _$ssrStyleProperty(";grid-template-rows:", `repeat(${_$escape(hours().length, true)}, minmax(4rem, 1fr))`), _$escape(_$createComponent(Show, {
2249
2237
  get when() {
2250
2238
  return currentTimeLine(day) !== null;
2251
2239
  },
2252
2240
  get children() {
2253
- return _$ssr(_tmpl$48, _$ssrStyleProperty("top:", `${_$escape(currentTimeLine(day) ?? 0, true)}%`));
2241
+ return _$ssr(_tmpl$41, _$ssrStyleProperty("top:", `${_$escape(currentTimeLine(day) ?? 0, true)}%`));
2254
2242
  }
2255
2243
  })), _$escape(_$createComponent(For, {
2256
2244
  get each() {
@@ -2279,12 +2267,12 @@ const TimeGridView = props => {
2279
2267
  children: event => {
2280
2268
  const layout = eventLayout(event);
2281
2269
  const short = event.endDate.getTime() - event.startDate.getTime() < 60 * 60_000;
2282
- return _$ssr(_tmpl$51, _$ssrAttribute("data-short", short ? "true" : _$escape(undefined, true), false), _$ssrStyleProperty("top:", `${_$escape(layout.top, true)}%`) + _$ssrStyleProperty(";height:", `${_$escape(layout.height, true)}%`), _$escape(_$createComponent(Show, {
2270
+ return _$ssr(_tmpl$44, _$ssrAttribute("data-short", short ? "true" : _$escape(undefined, true), false), _$ssrStyleProperty("top:", `${_$escape(layout.top, true)}%`) + _$ssrStyleProperty(";height:", `${_$escape(layout.height, true)}%`), _$escape(_$createComponent(Show, {
2283
2271
  get when() {
2284
2272
  return event.title;
2285
2273
  },
2286
2274
  get children() {
2287
- return _$ssr(_tmpl$50, _$escape(event.title));
2275
+ return _$ssr(_tmpl$43, _$escape(event.title));
2288
2276
  }
2289
2277
  })), _$escape(formatTime(event.startDate, dateConfig())), _$escape(formatTime(event.endDate, dateConfig())));
2290
2278
  }
@@ -2330,7 +2318,7 @@ const TimeGridView = props => {
2330
2318
  onCancel: clearInteraction
2331
2319
  });
2332
2320
  };
2333
- return _$ssr(_tmpl$53, _$ssrStyleProperty("top:", `${_$escape(layout.top, true)}%`) + _$ssrStyleProperty(";height:", `${_$escape(layout.height, true)}%`) + _$ssrStyleProperty(";left:", _$escape(position.left, true)) + _$ssrStyleProperty(";width:", _$escape(position.width, true)) + _$ssrStyleProperty(";z-index:", _$escape(String(20 + layoutItem.lane), true)), _$escape(_$createComponent(EventChip, {
2321
+ return _$ssr(_tmpl$46, _$ssrStyleProperty("top:", `${_$escape(layout.top, true)}%`) + _$ssrStyleProperty(";height:", `${_$escape(layout.height, true)}%`) + _$ssrStyleProperty(";left:", _$escape(position.left, true)) + _$ssrStyleProperty(";width:", _$escape(position.width, true)) + _$ssrStyleProperty(";z-index:", _$escape(String(20 + layoutItem.lane), true)), _$escape(_$createComponent(EventChip, {
2334
2322
  event: event,
2335
2323
  get owner() {
2336
2324
  return props.owner;
@@ -2350,7 +2338,7 @@ const TimeGridView = props => {
2350
2338
  return props.owner.onEventResize;
2351
2339
  },
2352
2340
  get children() {
2353
- return _$ssr(_tmpl$52, _$ssrAttribute("aria-label", _$escape(messages().resizeEvent, true), false));
2341
+ return _$ssr(_tmpl$45, _$ssrAttribute("aria-label", _$escape(calendarMessages().resizeEvent, true), false));
2354
2342
  }
2355
2343
  })));
2356
2344
  }
@@ -2362,14 +2350,14 @@ const TimeGridView = props => {
2362
2350
  const layout = timeRangeLayout(overflow.groupStartDate, overflow.groupEndDate);
2363
2351
  const key = `${dayKey}-${overflow.groupId}`;
2364
2352
  const hiddenTitle = () => overflow.hiddenEvents.map(event => `${formatTime(event.startDate, dateConfig())} ${event.title}`).join("\n");
2365
- return [_$ssr(_tmpl$54, _$ssrStyleProperty("top:", `${_$escape(layout.top, true)}%`) + _$ssrStyleProperty(";height:", `${_$escape(layout.height, true)}%`), _$ssrAttribute("title", _$escape(hiddenTitle(), true), false) + _$ssrAttribute("aria-label", _$escape(messages().hiddenOverlappingEvents({
2353
+ return [_$ssr(_tmpl$47, _$ssrStyleProperty("top:", `${_$escape(layout.top, true)}%`) + _$ssrStyleProperty(";height:", `${_$escape(layout.height, true)}%`), _$ssrAttribute("title", _$escape(hiddenTitle(), true), false) + _$ssrAttribute("aria-label", _$escape(calendarMessages().hiddenOverlappingEvents({
2366
2354
  count: overflow.hiddenEvents.length
2367
2355
  }), true), false), _$escape(overflow.hiddenEvents.length)), _$createComponent(Show, {
2368
2356
  get when() {
2369
2357
  return expandedOverflow() === key;
2370
2358
  },
2371
2359
  get children() {
2372
- return _$ssr(_tmpl$55, _$ssrStyleProperty("top:", `${_$escape(layout.top, true)}%`), _$escape(formatTime(overflow.groupStartDate, dateConfig())), _$escape(formatTime(overflow.groupEndDate, dateConfig())), _$escape(_$createComponent(For, {
2360
+ return _$ssr(_tmpl$48, _$ssrStyleProperty("top:", `${_$escape(layout.top, true)}%`), _$escape(formatTime(overflow.groupStartDate, dateConfig())), _$escape(formatTime(overflow.groupEndDate, dateConfig())), _$escape(_$createComponent(For, {
2373
2361
  get each() {
2374
2362
  return overflow.hiddenEvents;
2375
2363
  },
@@ -2428,11 +2416,11 @@ const YearView = props => {
2428
2416
  };
2429
2417
  });
2430
2418
  });
2431
- return _$ssr(_tmpl$56, _$escape(_$createComponent(For, {
2419
+ return _$ssr(_tmpl$49, _$escape(_$createComponent(For, {
2432
2420
  get each() {
2433
2421
  return months();
2434
2422
  },
2435
- children: month => _$ssr(_tmpl$57, _$escape(month.label), _$escape(_$createComponent(For, {
2423
+ children: month => _$ssr(_tmpl$50, _$escape(month.label), _$escape(_$createComponent(For, {
2436
2424
  get each() {
2437
2425
  return month.days;
2438
2426
  },
@@ -2455,7 +2443,7 @@ const YearView = props => {
2455
2443
  get when() {
2456
2444
  return day.events[0];
2457
2445
  },
2458
- children: event => _$ssr(_tmpl$58, _$ssrAttribute("data-color", event().colorHex ? _$escape(undefined, true) : _$escape(event().color ?? "blue", true), false) + _$ssrAttribute("data-today", day.isToday ? "true" : _$escape(undefined, true), false), _$ssrStyle(event().colorHex ? {
2446
+ children: event => _$ssr(_tmpl$51, _$ssrAttribute("data-color", event().colorHex ? _$escape(undefined, true) : _$escape(event().color ?? "blue", true), false) + _$ssrAttribute("data-today", day.isToday ? "true" : _$escape(undefined, true), false), _$ssrStyle(event().colorHex ? {
2459
2447
  "background-color": day.isToday ? "white" : event().colorHex
2460
2448
  } : undefined))
2461
2449
  })];
@@ -2468,7 +2456,7 @@ const MobileMonthView = props => {
2468
2456
  const dateConfig = createMemo(() => ownerDateConfig(props.owner));
2469
2457
  const selectedDateKey = createMemo(() => calendar.formatDateKey(props.selectedDate, dateConfig()));
2470
2458
  const selectedEvents = createMemo(() => props.events.filter(event => event.dayKey === selectedDateKey()));
2471
- return _$ssr(_tmpl$60, _$escape(_$createComponent(MonthPickerView, {
2459
+ return _$ssr(_tmpl$53, _$escape(_$createComponent(MonthPickerView, {
2472
2460
  get owner() {
2473
2461
  return {
2474
2462
  ...props.owner,
@@ -2498,10 +2486,10 @@ const MobileMonthView = props => {
2498
2486
  return selectedEvents().length > 0;
2499
2487
  },
2500
2488
  get fallback() {
2501
- return _$ssr(_tmpl$61, _$escape(props.labels.noEvents));
2489
+ return _$ssr(_tmpl$54, _$escape(props.labels.noEvents));
2502
2490
  },
2503
2491
  get children() {
2504
- return _$ssr(_tmpl$59, _$escape(_$createComponent(For, {
2492
+ return _$ssr(_tmpl$52, _$escape(_$createComponent(For, {
2505
2493
  get each() {
2506
2494
  return selectedEvents();
2507
2495
  },
@@ -2518,9 +2506,10 @@ const MobileMonthView = props => {
2518
2506
  }
2519
2507
  })));
2520
2508
  };
2521
- const CalendarBody = props => _$ssr(_tmpl$62, _$escape(props.children));
2509
+ const CalendarBody = props => _$ssr(_tmpl$55, _$escape(props.children));
2522
2510
  const CalendarRoot = props => {
2523
2511
  const messages = useUiMessages();
2512
+ const calendarMessages = useCalendarMessages();
2524
2513
  // Subviews derive their date config from the owner props, so the inherited
2525
2514
  // render locale is merged here once; an explicit dateConfig.locale wins.
2526
2515
  const localizedConfig = useDateConfigLocale(() => props.dateConfig);
@@ -2549,7 +2538,7 @@ const CalendarRoot = props => {
2549
2538
  month: messages().month,
2550
2539
  year: messages().year,
2551
2540
  allDay: messages().allDay,
2552
- noEvents: messages().noEvents,
2541
+ noEvents: calendarMessages().noEvents,
2553
2542
  previous: messages().previous,
2554
2543
  next: messages().next,
2555
2544
  ...props.labels
@@ -2567,7 +2556,181 @@ const CalendarRoot = props => {
2567
2556
  document.removeEventListener("visibilitychange", updateNow);
2568
2557
  });
2569
2558
  });
2570
- return _$ssr(_tmpl$63, `k2b-content-calendar ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("aria-busy", props.navigationPending ? "true" : _$escape(undefined, true), false), _$escape(_$createComponent(CalendarHeader, {
2559
+
2560
+ // The day and week views with `dayHours` scroll through their days; the header and the commands ask them first.
2561
+ const [timeView, setTimeView] = createSignal(null);
2562
+ const [monthCreate, setMonthCreate] = createSignal(null);
2563
+ const timeMode = () => Boolean(props.dayHours) && (view() === "day" || view() === "week");
2564
+ const parseKey = key => calendar.parseCalendarDate(key, dateConfig());
2565
+ /** The first shown day of a day or week view, or the selected day of the month view, for the other views. */
2566
+ const shownDay = () => {
2567
+ const first = timeView()?.visibleKeys().first;
2568
+ if (first) return parseKey(first);
2569
+ return view() === "month" ? focusDay() : null;
2570
+ };
2571
+ const go = (target, nextView) => {
2572
+ const href = props.getDateHref?.(target, nextView);
2573
+ if (href) followCalendarHref(owner, href);else openViewAt(props, target, nextView);
2574
+ };
2575
+ const step = direction => {
2576
+ if (timeView()?.step(direction)) return;
2577
+ go(adjacentCalendarDate(shownDay() ?? date(), view(), direction, dateConfig()), view());
2578
+ };
2579
+ const goToday = () => {
2580
+ if (timeView()?.today()) return;
2581
+ go(calendar.today(dateConfig()), view());
2582
+ };
2583
+ const goView = nextView => {
2584
+ const day = shownDay();
2585
+ if (day) {
2586
+ go(day, nextView);
2587
+ return;
2588
+ }
2589
+ const href = props.getViewHref?.(nextView);
2590
+ if (href) followCalendarHref(owner, href);else props.onViewChange?.(nextView);
2591
+ };
2592
+ const goToKey = key => {
2593
+ if (timeView()?.goTo(key)) return;
2594
+ go(parseKey(key), view());
2595
+ };
2596
+ const openGoTo = () => void openCalendarGoTo({
2597
+ messages: calendarMessages(),
2598
+ today: calendar.formatDateKey(new Date(), dateConfig()),
2599
+ describe: key => parseKey(key).toLocaleDateString(dateConfig().locale ?? "en", {
2600
+ weekday: "long",
2601
+ day: "numeric",
2602
+ month: "long",
2603
+ year: "numeric",
2604
+ timeZone: dateConfig().timeZone
2605
+ }),
2606
+ onGo: goToKey
2607
+ });
2608
+ const ownCommands = createMemo(() => {
2609
+ const text = calendarMessages();
2610
+ const available = ["day", "week", "month", "year"].filter(option => !props.views || props.views.includes(option));
2611
+ const viewLabels = {
2612
+ day: mergedLabels().day,
2613
+ week: mergedLabels().week,
2614
+ month: mergedLabels().month,
2615
+ year: mergedLabels().year
2616
+ };
2617
+ return [{
2618
+ id: "calendar.today",
2619
+ label: text.calendarCommandToday,
2620
+ description: text.calendarCommandTodayDescription,
2621
+ shortcut: "h",
2622
+ icon: "ti ti-calendar-event",
2623
+ run: goToday
2624
+ }, {
2625
+ id: "calendar.next",
2626
+ label: text.calendarCommandNext,
2627
+ description: text.calendarCommandNextDescription,
2628
+ shortcut: "j",
2629
+ icon: "ti ti-chevron-right",
2630
+ run: () => step(1)
2631
+ }, {
2632
+ id: "calendar.previous",
2633
+ label: text.calendarCommandPrevious,
2634
+ description: text.calendarCommandPreviousDescription,
2635
+ shortcut: "k",
2636
+ icon: "ti ti-chevron-left",
2637
+ run: () => step(-1)
2638
+ }, ...available.map((option, index) => ({
2639
+ id: `calendar.view.${option}`,
2640
+ label: text.calendarCommandView({
2641
+ view: viewLabels[option]
2642
+ }),
2643
+ description: text.calendarCommandViewDescription({
2644
+ view: viewLabels[option]
2645
+ }),
2646
+ shortcut: String(index + 1),
2647
+ icon: "ti ti-layout-columns",
2648
+ run: () => goView(option)
2649
+ })), {
2650
+ id: "calendar.goto",
2651
+ label: text.calendarCommandGoTo,
2652
+ description: text.calendarCommandGoToDescription,
2653
+ shortcut: "g",
2654
+ icon: "ti ti-calendar-search",
2655
+ run: openGoTo
2656
+ }];
2657
+ });
2658
+ const allCommands = createMemo(() => [...ownCommands(), ...(props.commands ?? [])]);
2659
+ /** While the month's quiet quick create waits for typing, a single key is the first letter of a title. */
2660
+ const typing = () => view() === "month" && (monthCreate()?.typing() ?? false);
2661
+ createEffect(() => {
2662
+ const commands = typing() ? allCommands().map(command => command.shortcut && singleKey(command.shortcut) ? {
2663
+ ...command,
2664
+ shortcut: undefined
2665
+ } : command) : allCommands();
2666
+ untrack(() => props.onCommandsChange?.(commands));
2667
+ });
2668
+ // The arrow keys page like J and K while the keyboard is in the calendar or nowhere, unless something there uses
2669
+ // them, such as the grid of the week or the month.
2670
+ let root;
2671
+ onMount(() => {
2672
+ const onKeyDown = event => {
2673
+ if (event.key !== "ArrowLeft" && event.key !== "ArrowRight") return;
2674
+ if (event.defaultPrevented || event.isComposing || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) return;
2675
+ if (!props.onCommandsChange || custom() || document.querySelector('dialog[open], [role="dialog"][aria-modal="true"]')) return;
2676
+ const target = event.target;
2677
+ const inCalendar = target instanceof Element && Boolean(root?.contains(target));
2678
+ if (!inCalendar && target !== document.body && target !== document.documentElement) return;
2679
+ if (target instanceof Element && target.closest("input, textarea, select, [contenteditable]:not([contenteditable=false]), [role=textbox], [popover], [role=dialog]")) return;
2680
+ event.preventDefault();
2681
+ step(event.key === "ArrowRight" ? 1 : -1);
2682
+ };
2683
+ window.addEventListener("keydown", onKeyDown);
2684
+ onCleanup(() => window.removeEventListener("keydown", onKeyDown));
2685
+ });
2686
+ const headerNav = {
2687
+ timeView,
2688
+ commands: () => props.onCommandsChange ? allCommands() : [],
2689
+ // The arrow keys page like J and K, so the list names them beside those keys.
2690
+ openShortcuts: () => void openCalendarShortcuts(allCommands(), calendarMessages(), custom() ? {} : {
2691
+ "calendar.next": "arrowright",
2692
+ "calendar.previous": "arrowleft"
2693
+ })
2694
+ };
2695
+ const controller = {
2696
+ quickCreate: create => {
2697
+ const active = timeView();
2698
+ if (active) active.controller.quickCreate(create);else monthCreate()?.quickCreate(create);
2699
+ },
2700
+ createTarget: () => {
2701
+ const active = timeView()?.controller.createTarget() ?? monthCreate()?.createTarget();
2702
+ if (active) return active;
2703
+ const start = calendar.today(dateConfig());
2704
+ return {
2705
+ start,
2706
+ end: calendar.addDays(start, 1, dateConfig()),
2707
+ allDay: true
2708
+ };
2709
+ },
2710
+ dragIn: (event, item, onDrop) => timeView()?.controller.dragIn(event, item, onDrop)
2711
+ };
2712
+ onMount(() => props.controller?.(controller));
2713
+ const timeProps = timeViewName => ({
2714
+ owner,
2715
+ view: timeViewName,
2716
+ get date() {
2717
+ return date();
2718
+ },
2719
+ get now() {
2720
+ return now();
2721
+ },
2722
+ get events() {
2723
+ return props.events;
2724
+ },
2725
+ get labels() {
2726
+ return mergedLabels();
2727
+ },
2728
+ get hours() {
2729
+ return props.dayHours ?? [0, 24];
2730
+ },
2731
+ register: setTimeView
2732
+ });
2733
+ return _$ssr(_tmpl$56, `k2b-content-calendar ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("aria-busy", props.navigationPending ? "true" : _$escape(undefined, true), false), _$escape(_$createComponent(CalendarHeader, {
2571
2734
  get date() {
2572
2735
  return date();
2573
2736
  },
@@ -2579,8 +2742,9 @@ const CalendarRoot = props => {
2579
2742
  },
2580
2743
  owner: owner,
2581
2744
  get focusDay() {
2582
- return _$memo(() => view() === "month")() ? focusDay() : null;
2583
- }
2745
+ return _$memo(() => view() === "month")() ? focusDay() : _$memo(() => !!timeView())() ? shownDay() : null;
2746
+ },
2747
+ nav: headerNav
2584
2748
  })), _$escape(_$createComponent(Show, {
2585
2749
  get when() {
2586
2750
  return !custom();
@@ -2614,7 +2778,8 @@ const CalendarRoot = props => {
2614
2778
  get labels() {
2615
2779
  return mergedLabels();
2616
2780
  },
2617
- onFocusDay: setFocusDay
2781
+ onFocusDay: setFocusDay,
2782
+ register: setMonthCreate
2618
2783
  });
2619
2784
  }
2620
2785
  });
@@ -2672,22 +2837,42 @@ const CalendarRoot = props => {
2672
2837
  });
2673
2838
  },
2674
2839
  get children() {
2675
- return _$createComponent(TimeGridView, {
2676
- owner: owner,
2677
- get date() {
2678
- return date();
2840
+ return _$createComponent(Show, {
2841
+ get when() {
2842
+ return timeMode();
2679
2843
  },
2680
- get now() {
2681
- return now();
2682
- },
2683
- get events() {
2684
- return normalizedEvents();
2685
- },
2686
- get labels() {
2687
- return mergedLabels();
2844
+ get fallback() {
2845
+ return _$createComponent(TimeGridView, {
2846
+ owner: owner,
2847
+ get date() {
2848
+ return date();
2849
+ },
2850
+ get now() {
2851
+ return now();
2852
+ },
2853
+ get events() {
2854
+ return normalizedEvents();
2855
+ },
2856
+ get labels() {
2857
+ return mergedLabels();
2858
+ },
2859
+ get days() {
2860
+ return days();
2861
+ }
2862
+ });
2688
2863
  },
2689
- get days() {
2690
- return days();
2864
+ get children() {
2865
+ return _$createComponent(Show, {
2866
+ get when() {
2867
+ return view() === "day";
2868
+ },
2869
+ get fallback() {
2870
+ return _$createComponent(CalendarWeekView, _$mergeProps(() => timeProps("week")));
2871
+ },
2872
+ get children() {
2873
+ return _$createComponent(CalendarDayView, _$mergeProps(() => timeProps("day")));
2874
+ }
2875
+ });
2691
2876
  }
2692
2877
  });
2693
2878
  }
@@ -2700,6 +2885,9 @@ const CalendarRoot = props => {
2700
2885
  })));
2701
2886
  };
2702
2887
 
2888
+ /** A shortcut without Ctrl, Meta, or Mod, which typing would set off. */
2889
+ const singleKey = shortcut => !/(^|\+)(ctrl|meta|mod)\+/i.test(shortcut);
2890
+
2703
2891
  /** JSX infers the values of `customViews`; inference from the last signature, as in `createComponent`, sees plain props. */
2704
2892
 
2705
2893
  function Calendar(props) {