@k2b/ui 0.20.0 → 0.22.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 (595) hide show
  1. package/dist/browser/actions/Button.js +20 -31
  2. package/dist/browser/actions/Button.js.map +1 -1
  3. package/dist/browser/actions/ContextMenu.js +10 -4
  4. package/dist/browser/actions/ContextMenu.js.map +1 -1
  5. package/dist/browser/actions/CopyButton.js +10 -8
  6. package/dist/browser/actions/CopyButton.js.map +1 -1
  7. package/dist/browser/actions/FilterChip.js +3 -1
  8. package/dist/browser/actions/FilterChip.js.map +1 -1
  9. package/dist/browser/actions/GestureMenu.js +4 -0
  10. package/dist/browser/actions/GestureMenu.js.map +1 -1
  11. package/dist/browser/actions/SpotlightSearch.js +3 -1
  12. package/dist/browser/actions/SpotlightSearch.js.map +1 -1
  13. package/dist/browser/actions/filter-messages.js +20 -0
  14. package/dist/browser/actions/filter-messages.js.map +1 -0
  15. package/dist/browser/actions/spotlight-messages.js +16 -0
  16. package/dist/browser/actions/spotlight-messages.js.map +1 -0
  17. package/dist/browser/chat/ChatComposer.js +47 -41
  18. package/dist/browser/chat/ChatComposer.js.map +1 -1
  19. package/dist/browser/chat/ChatPrimitives.js +25 -23
  20. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  21. package/dist/browser/chat/ChatRoot.js +3 -3
  22. package/dist/browser/chat/ChatRoot.js.map +1 -1
  23. package/dist/browser/chat/ChatTimeline.js +12 -12
  24. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  25. package/dist/browser/chat/chat-messages.js +236 -0
  26. package/dist/browser/chat/chat-messages.js.map +1 -0
  27. package/dist/browser/content/Calendar.js +1960 -575
  28. package/dist/browser/content/Calendar.js.map +1 -1
  29. package/dist/browser/content/Chart.js +15 -8
  30. package/dist/browser/content/Chart.js.map +1 -1
  31. package/dist/browser/content/ChartExplorer.js +20 -12
  32. package/dist/browser/content/ChartExplorer.js.map +1 -1
  33. package/dist/browser/content/ChartExplorerControls.js +9 -7
  34. package/dist/browser/content/ChartExplorerControls.js.map +1 -1
  35. package/dist/browser/content/ChartFilterControls.js +4 -2
  36. package/dist/browser/content/ChartFilterControls.js.map +1 -1
  37. package/dist/browser/content/ChartSnapshotView.js +3 -3
  38. package/dist/browser/content/ChartSnapshotView.js.map +1 -1
  39. package/dist/browser/content/DataTable.js +68 -59
  40. package/dist/browser/content/DataTable.js.map +1 -1
  41. package/dist/browser/content/Docs.js +3 -1
  42. package/dist/browser/content/Docs.js.map +1 -1
  43. package/dist/browser/content/FileBrowser.js +30 -26
  44. package/dist/browser/content/FileBrowser.js.map +1 -1
  45. package/dist/browser/content/FileTree.js +9 -7
  46. package/dist/browser/content/FileTree.js.map +1 -1
  47. package/dist/browser/content/FileView.js +37 -28
  48. package/dist/browser/content/FileView.js.map +1 -1
  49. package/dist/browser/content/Lightbox.js +9 -7
  50. package/dist/browser/content/Lightbox.js.map +1 -1
  51. package/dist/browser/content/LogEntriesTable.js +3 -3
  52. package/dist/browser/content/LogEntriesTable.js.map +1 -1
  53. package/dist/browser/content/MessageRow.js +24 -22
  54. package/dist/browser/content/MessageRow.js.map +1 -1
  55. package/dist/browser/content/Pagination.js +7 -7
  56. package/dist/browser/content/Pagination.js.map +1 -1
  57. package/dist/browser/content/PdfPreview.js +15 -13
  58. package/dist/browser/content/PdfPreview.js.map +1 -1
  59. package/dist/browser/content/RangePicker.js +3 -1
  60. package/dist/browser/content/RangePicker.js.map +1 -1
  61. package/dist/browser/content/StructuredDataPreview.js +3 -1
  62. package/dist/browser/content/StructuredDataPreview.js.map +1 -1
  63. package/dist/browser/content/Timeline.js +13 -11
  64. package/dist/browser/content/Timeline.js.map +1 -1
  65. package/dist/browser/content/VideoPlayer.js +5 -5
  66. package/dist/browser/content/VideoPlayer.js.map +1 -1
  67. package/dist/browser/content/VirtualFeed.js +6 -4
  68. package/dist/browser/content/VirtualFeed.js.map +1 -1
  69. package/dist/browser/content/ZoomPanViewport.js +10 -7
  70. package/dist/browser/content/ZoomPanViewport.js.map +1 -1
  71. package/dist/browser/content/calendar-messages.js +121 -0
  72. package/dist/browser/content/calendar-messages.js.map +1 -0
  73. package/dist/browser/content/calendar-month-layout.js +108 -0
  74. package/dist/browser/content/calendar-month-layout.js.map +1 -0
  75. package/dist/browser/content/calendar-pointer.js +4 -3
  76. package/dist/browser/content/calendar-pointer.js.map +1 -1
  77. package/dist/browser/content/chart-messages.js +136 -0
  78. package/dist/browser/content/chart-messages.js.map +1 -0
  79. package/dist/browser/content/collection-selection.js +2 -0
  80. package/dist/browser/content/collection-selection.js.map +1 -1
  81. package/dist/browser/content/data-table-messages.js +24 -0
  82. package/dist/browser/content/data-table-messages.js.map +1 -0
  83. package/dist/browser/content/docs-messages.js +24 -0
  84. package/dist/browser/content/docs-messages.js.map +1 -0
  85. package/dist/browser/content/feed-messages.js +34 -0
  86. package/dist/browser/content/feed-messages.js.map +1 -0
  87. package/dist/browser/content/file-browser-messages.js +69 -0
  88. package/dist/browser/content/file-browser-messages.js.map +1 -0
  89. package/dist/browser/content/file-view-messages.js +64 -0
  90. package/dist/browser/content/file-view-messages.js.map +1 -0
  91. package/dist/browser/content/index.js.map +1 -1
  92. package/dist/browser/content/lightbox-messages.js +36 -0
  93. package/dist/browser/content/lightbox-messages.js.map +1 -0
  94. package/dist/browser/content/log-entries-messages.js +20 -0
  95. package/dist/browser/content/log-entries-messages.js.map +1 -0
  96. package/dist/browser/content/markdown-info-block-messages.js +24 -0
  97. package/dist/browser/content/markdown-info-block-messages.js.map +1 -0
  98. package/dist/browser/content/markdown-info-blocks.js +3 -3
  99. package/dist/browser/content/markdown-info-blocks.js.map +1 -1
  100. package/dist/browser/content/markdown-links.js +2 -2
  101. package/dist/browser/content/markdown-links.js.map +1 -1
  102. package/dist/browser/content/markdown-reference-messages.js +30 -0
  103. package/dist/browser/content/markdown-reference-messages.js.map +1 -0
  104. package/dist/browser/content/pagination-messages.js +38 -0
  105. package/dist/browser/content/pagination-messages.js.map +1 -0
  106. package/dist/browser/content/pdf-messages.js +43 -0
  107. package/dist/browser/content/pdf-messages.js.map +1 -0
  108. package/dist/browser/content/range-picker-messages.js +20 -0
  109. package/dist/browser/content/range-picker-messages.js.map +1 -0
  110. package/dist/browser/content/structured-data-messages.js +22 -0
  111. package/dist/browser/content/structured-data-messages.js.map +1 -0
  112. package/dist/browser/content/timeline-messages.js +62 -0
  113. package/dist/browser/content/timeline-messages.js.map +1 -0
  114. package/dist/browser/content/video-messages.js +24 -0
  115. package/dist/browser/content/video-messages.js.map +1 -0
  116. package/dist/browser/content/viewport-messages.js +28 -0
  117. package/dist/browser/content/viewport-messages.js.map +1 -0
  118. package/dist/browser/feedback/HoverPreview.js +34 -6
  119. package/dist/browser/feedback/HoverPreview.js.map +1 -1
  120. package/dist/browser/feedback/InstallGuide.js +18 -18
  121. package/dist/browser/feedback/InstallGuide.js.map +1 -1
  122. package/dist/browser/feedback/install-messages.js +104 -0
  123. package/dist/browser/feedback/install-messages.js.map +1 -0
  124. package/dist/browser/feedback/prompt-messages.js +65 -0
  125. package/dist/browser/feedback/prompt-messages.js.map +1 -0
  126. package/dist/browser/feedback/prompts.js +14 -11
  127. package/dist/browser/feedback/prompts.js.map +1 -1
  128. package/dist/browser/feedback/toast-messages.js +18 -0
  129. package/dist/browser/feedback/toast-messages.js.map +1 -0
  130. package/dist/browser/feedback/toast.js +4 -3
  131. package/dist/browser/feedback/toast.js.map +1 -1
  132. package/dist/browser/index.js +1 -1
  133. package/dist/browser/index.js.map +1 -1
  134. package/dist/browser/inputs/AutocompleteEditor.js +6 -4
  135. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
  136. package/dist/browser/inputs/AutocompleteSelect.js +10 -8
  137. package/dist/browser/inputs/AutocompleteSelect.js.map +1 -1
  138. package/dist/browser/inputs/ChoiceGroups.js +4 -0
  139. package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
  140. package/dist/browser/inputs/ChoiceInputs.js +5 -5
  141. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  142. package/dist/browser/inputs/Combobox.js +3 -1
  143. package/dist/browser/inputs/Combobox.js.map +1 -1
  144. package/dist/browser/inputs/DatePicker.js +46 -10
  145. package/dist/browser/inputs/DatePicker.js.map +1 -1
  146. package/dist/browser/inputs/FileDropTarget.js +6 -6
  147. package/dist/browser/inputs/FileDropTarget.js.map +1 -1
  148. package/dist/browser/inputs/FileInputs.js +30 -21
  149. package/dist/browser/inputs/FileInputs.js.map +1 -1
  150. package/dist/browser/inputs/MultiSelectInput.js +7 -5
  151. package/dist/browser/inputs/MultiSelectInput.js.map +1 -1
  152. package/dist/browser/inputs/NumberInput.js +4 -2
  153. package/dist/browser/inputs/NumberInput.js.map +1 -1
  154. package/dist/browser/inputs/QrScanner.js +5 -5
  155. package/dist/browser/inputs/QrScanner.js.map +1 -1
  156. package/dist/browser/inputs/Select.js +7 -5
  157. package/dist/browser/inputs/Select.js.map +1 -1
  158. package/dist/browser/inputs/SelectChip.js +3 -3
  159. package/dist/browser/inputs/SelectChip.js.map +1 -1
  160. package/dist/browser/inputs/SignatureInput.js +9 -3
  161. package/dist/browser/inputs/SignatureInput.js.map +1 -1
  162. package/dist/browser/inputs/SpecialInputs.js +4 -2
  163. package/dist/browser/inputs/SpecialInputs.js.map +1 -1
  164. package/dist/browser/inputs/TagEditor.js +8 -6
  165. package/dist/browser/inputs/TagEditor.js.map +1 -1
  166. package/dist/browser/inputs/TagsInput.js +5 -5
  167. package/dist/browser/inputs/TagsInput.js.map +1 -1
  168. package/dist/browser/inputs/TemplateEditor.js +5 -5
  169. package/dist/browser/inputs/TemplateEditor.js.map +1 -1
  170. package/dist/browser/inputs/TextInput.js +3 -1
  171. package/dist/browser/inputs/TextInput.js.map +1 -1
  172. package/dist/browser/inputs/completion-messages.js +24 -0
  173. package/dist/browser/inputs/completion-messages.js.map +1 -0
  174. package/dist/browser/inputs/date-picker.js +24 -0
  175. package/dist/browser/inputs/date-picker.js.map +1 -1
  176. package/dist/browser/inputs/file-drop-messages.js +63 -0
  177. package/dist/browser/inputs/file-drop-messages.js.map +1 -0
  178. package/dist/browser/inputs/file-drop.js.map +1 -1
  179. package/dist/browser/inputs/file-input-messages.js +60 -0
  180. package/dist/browser/inputs/file-input-messages.js.map +1 -0
  181. package/dist/browser/inputs/icon-messages.js +22 -0
  182. package/dist/browser/inputs/icon-messages.js.map +1 -0
  183. package/dist/browser/inputs/input-messages.js +38 -0
  184. package/dist/browser/inputs/input-messages.js.map +1 -0
  185. package/dist/browser/inputs/markdown/MarkdownEditor.js +10 -6
  186. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  187. package/dist/browser/inputs/markdown/Toolbar.js +13 -13
  188. package/dist/browser/inputs/markdown/Toolbar.js.map +1 -1
  189. package/dist/browser/inputs/markdown/editor-messages.js +43 -0
  190. package/dist/browser/inputs/markdown/editor-messages.js.map +1 -0
  191. package/dist/browser/inputs/markdown/toolbar-messages.js +40 -0
  192. package/dist/browser/inputs/markdown/toolbar-messages.js.map +1 -0
  193. package/dist/browser/inputs/qr-messages.js +26 -0
  194. package/dist/browser/inputs/qr-messages.js.map +1 -0
  195. package/dist/browser/inputs/select-messages.js +63 -0
  196. package/dist/browser/inputs/select-messages.js.map +1 -0
  197. package/dist/browser/inputs/tag-messages.js +44 -0
  198. package/dist/browser/inputs/tag-messages.js.map +1 -0
  199. package/dist/browser/inputs/template-messages.js +22 -0
  200. package/dist/browser/inputs/template-messages.js.map +1 -0
  201. package/dist/browser/internal/render-error-messages.js +20 -0
  202. package/dist/browser/internal/render-error-messages.js.map +1 -0
  203. package/dist/browser/internal/render-error.js +3 -1
  204. package/dist/browser/internal/render-error.js.map +1 -1
  205. package/dist/browser/internal/text-selection.js +101 -0
  206. package/dist/browser/internal/text-selection.js.map +1 -0
  207. package/dist/browser/intl/messages.js +12 -1155
  208. package/dist/browser/intl/messages.js.map +1 -1
  209. package/dist/browser/layout/AppWorkspace.js +561 -418
  210. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  211. package/dist/browser/layout/BottomSheet.js +6 -1
  212. package/dist/browser/layout/BottomSheet.js.map +1 -1
  213. package/dist/browser/layout/Discussion.js +8 -5
  214. package/dist/browser/layout/Discussion.js.map +1 -1
  215. package/dist/browser/layout/FloatingWindow.js +8 -5
  216. package/dist/browser/layout/FloatingWindow.js.map +1 -1
  217. package/dist/browser/layout/Navigation.js +7 -6
  218. package/dist/browser/layout/Navigation.js.map +1 -1
  219. package/dist/browser/layout/PageTitle.js +370 -0
  220. package/dist/browser/layout/PageTitle.js.map +1 -0
  221. package/dist/browser/layout/PanelDialog.js +8 -6
  222. package/dist/browser/layout/PanelDialog.js.map +1 -1
  223. package/dist/browser/layout/Panes.js +23 -15
  224. package/dist/browser/layout/Panes.js.map +1 -1
  225. package/dist/browser/layout/PullToRefresh.js +13 -4
  226. package/dist/browser/layout/PullToRefresh.js.map +1 -1
  227. package/dist/browser/layout/Settings.js +14 -12
  228. package/dist/browser/layout/Settings.js.map +1 -1
  229. package/dist/browser/layout/SettingsCollection.js +6 -5
  230. package/dist/browser/layout/SettingsCollection.js.map +1 -1
  231. package/dist/browser/layout/SettingsModal.js +3 -1
  232. package/dist/browser/layout/SettingsModal.js.map +1 -1
  233. package/dist/browser/layout/app-workspace-controller.js +743 -12
  234. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  235. package/dist/browser/layout/app-workspace-state.js +3 -2
  236. package/dist/browser/layout/app-workspace-state.js.map +1 -1
  237. package/dist/browser/layout/floating-window-messages.js +28 -0
  238. package/dist/browser/layout/floating-window-messages.js.map +1 -0
  239. package/dist/browser/layout/index.js +2 -0
  240. package/dist/browser/layout/index.js.map +1 -1
  241. package/dist/browser/layout/navigation-model.js.map +1 -1
  242. package/dist/browser/layout/page-title-controller.js +169 -0
  243. package/dist/browser/layout/page-title-controller.js.map +1 -0
  244. package/dist/browser/layout/panel-dialog-messages.js +20 -0
  245. package/dist/browser/layout/panel-dialog-messages.js.map +1 -0
  246. package/dist/browser/layout/panes-messages.js +48 -0
  247. package/dist/browser/layout/panes-messages.js.map +1 -0
  248. package/dist/browser/layout/refresh-messages.js +20 -0
  249. package/dist/browser/layout/refresh-messages.js.map +1 -0
  250. package/dist/browser/layout/settings-messages.js +54 -0
  251. package/dist/browser/layout/settings-messages.js.map +1 -0
  252. package/dist/browser/layout/workspace-messages.js +56 -0
  253. package/dist/browser/layout/workspace-messages.js.map +1 -0
  254. package/dist/browser/surfaces/Avatar.js +5 -5
  255. package/dist/browser/surfaces/Avatar.js.map +1 -1
  256. package/dist/browser/surfaces/ResourceCard.js +4 -2
  257. package/dist/browser/surfaces/ResourceCard.js.map +1 -1
  258. package/dist/browser/surfaces/Tag.js +3 -3
  259. package/dist/browser/surfaces/Tag.js.map +1 -1
  260. package/dist/browser/surfaces/avatar-messages.js +26 -0
  261. package/dist/browser/surfaces/avatar-messages.js.map +1 -0
  262. package/dist/browser/surfaces/resource-messages.js +26 -0
  263. package/dist/browser/surfaces/resource-messages.js.map +1 -0
  264. package/dist/browser/widgets/Widget.js +6 -0
  265. package/dist/browser/widgets/Widget.js.map +1 -1
  266. package/dist/ssr/actions/Button.js +21 -32
  267. package/dist/ssr/actions/Button.js.map +1 -1
  268. package/dist/ssr/actions/ContextMenu.js +7 -3
  269. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  270. package/dist/ssr/actions/CopyButton.js +9 -7
  271. package/dist/ssr/actions/CopyButton.js.map +1 -1
  272. package/dist/ssr/actions/FilterChip.js +3 -1
  273. package/dist/ssr/actions/FilterChip.js.map +1 -1
  274. package/dist/ssr/actions/GestureMenu.js +4 -0
  275. package/dist/ssr/actions/GestureMenu.js.map +1 -1
  276. package/dist/ssr/actions/SpotlightSearch.js +3 -1
  277. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  278. package/dist/ssr/actions/filter-messages.js +20 -0
  279. package/dist/ssr/actions/filter-messages.js.map +1 -0
  280. package/dist/ssr/actions/spotlight-messages.js +16 -0
  281. package/dist/ssr/actions/spotlight-messages.js.map +1 -0
  282. package/dist/ssr/chat/ChatComposer.js +47 -41
  283. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  284. package/dist/ssr/chat/ChatPrimitives.js +23 -21
  285. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  286. package/dist/ssr/chat/ChatRoot.js +3 -3
  287. package/dist/ssr/chat/ChatRoot.js.map +1 -1
  288. package/dist/ssr/chat/ChatTimeline.js +11 -11
  289. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  290. package/dist/ssr/chat/chat-messages.js +236 -0
  291. package/dist/ssr/chat/chat-messages.js.map +1 -0
  292. package/dist/ssr/content/Calendar.js +1232 -115
  293. package/dist/ssr/content/Calendar.js.map +1 -1
  294. package/dist/ssr/content/Chart.js +12 -5
  295. package/dist/ssr/content/Chart.js.map +1 -1
  296. package/dist/ssr/content/ChartExplorer.js +10 -8
  297. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  298. package/dist/ssr/content/ChartExplorerControls.js +9 -7
  299. package/dist/ssr/content/ChartExplorerControls.js.map +1 -1
  300. package/dist/ssr/content/ChartFilterControls.js +4 -2
  301. package/dist/ssr/content/ChartFilterControls.js.map +1 -1
  302. package/dist/ssr/content/ChartSnapshotView.js +3 -3
  303. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  304. package/dist/ssr/content/DataTable.js +10 -4
  305. package/dist/ssr/content/DataTable.js.map +1 -1
  306. package/dist/ssr/content/Docs.js +3 -1
  307. package/dist/ssr/content/Docs.js.map +1 -1
  308. package/dist/ssr/content/FileBrowser.js +30 -26
  309. package/dist/ssr/content/FileBrowser.js.map +1 -1
  310. package/dist/ssr/content/FileTree.js +9 -7
  311. package/dist/ssr/content/FileTree.js.map +1 -1
  312. package/dist/ssr/content/FileView.js +37 -28
  313. package/dist/ssr/content/FileView.js.map +1 -1
  314. package/dist/ssr/content/Lightbox.js +8 -6
  315. package/dist/ssr/content/Lightbox.js.map +1 -1
  316. package/dist/ssr/content/LogEntriesTable.js +3 -3
  317. package/dist/ssr/content/LogEntriesTable.js.map +1 -1
  318. package/dist/ssr/content/MessageRow.js +24 -22
  319. package/dist/ssr/content/MessageRow.js.map +1 -1
  320. package/dist/ssr/content/Pagination.js +6 -6
  321. package/dist/ssr/content/Pagination.js.map +1 -1
  322. package/dist/ssr/content/PdfPreview.js +15 -13
  323. package/dist/ssr/content/PdfPreview.js.map +1 -1
  324. package/dist/ssr/content/RangePicker.js +3 -1
  325. package/dist/ssr/content/RangePicker.js.map +1 -1
  326. package/dist/ssr/content/StructuredDataPreview.js +3 -1
  327. package/dist/ssr/content/StructuredDataPreview.js.map +1 -1
  328. package/dist/ssr/content/Timeline.js +13 -11
  329. package/dist/ssr/content/Timeline.js.map +1 -1
  330. package/dist/ssr/content/VideoPlayer.js +5 -5
  331. package/dist/ssr/content/VideoPlayer.js.map +1 -1
  332. package/dist/ssr/content/VirtualFeed.js +6 -4
  333. package/dist/ssr/content/VirtualFeed.js.map +1 -1
  334. package/dist/ssr/content/ZoomPanViewport.js +7 -4
  335. package/dist/ssr/content/ZoomPanViewport.js.map +1 -1
  336. package/dist/ssr/content/calendar-messages.js +121 -0
  337. package/dist/ssr/content/calendar-messages.js.map +1 -0
  338. package/dist/ssr/content/calendar-month-layout.js +108 -0
  339. package/dist/ssr/content/calendar-month-layout.js.map +1 -0
  340. package/dist/ssr/content/calendar-pointer.js +4 -3
  341. package/dist/ssr/content/calendar-pointer.js.map +1 -1
  342. package/dist/ssr/content/chart-messages.js +136 -0
  343. package/dist/ssr/content/chart-messages.js.map +1 -0
  344. package/dist/ssr/content/collection-selection.js +2 -0
  345. package/dist/ssr/content/collection-selection.js.map +1 -1
  346. package/dist/ssr/content/data-table-messages.js +24 -0
  347. package/dist/ssr/content/data-table-messages.js.map +1 -0
  348. package/dist/ssr/content/docs-messages.js +24 -0
  349. package/dist/ssr/content/docs-messages.js.map +1 -0
  350. package/dist/ssr/content/feed-messages.js +34 -0
  351. package/dist/ssr/content/feed-messages.js.map +1 -0
  352. package/dist/ssr/content/file-browser-messages.js +69 -0
  353. package/dist/ssr/content/file-browser-messages.js.map +1 -0
  354. package/dist/ssr/content/file-view-messages.js +64 -0
  355. package/dist/ssr/content/file-view-messages.js.map +1 -0
  356. package/dist/ssr/content/index.js.map +1 -1
  357. package/dist/ssr/content/lightbox-messages.js +36 -0
  358. package/dist/ssr/content/lightbox-messages.js.map +1 -0
  359. package/dist/ssr/content/log-entries-messages.js +20 -0
  360. package/dist/ssr/content/log-entries-messages.js.map +1 -0
  361. package/dist/ssr/content/markdown-info-block-messages.js +24 -0
  362. package/dist/ssr/content/markdown-info-block-messages.js.map +1 -0
  363. package/dist/ssr/content/markdown-info-blocks.js +3 -3
  364. package/dist/ssr/content/markdown-info-blocks.js.map +1 -1
  365. package/dist/ssr/content/markdown-links.js +2 -2
  366. package/dist/ssr/content/markdown-links.js.map +1 -1
  367. package/dist/ssr/content/markdown-reference-messages.js +30 -0
  368. package/dist/ssr/content/markdown-reference-messages.js.map +1 -0
  369. package/dist/ssr/content/pagination-messages.js +38 -0
  370. package/dist/ssr/content/pagination-messages.js.map +1 -0
  371. package/dist/ssr/content/pdf-messages.js +43 -0
  372. package/dist/ssr/content/pdf-messages.js.map +1 -0
  373. package/dist/ssr/content/range-picker-messages.js +20 -0
  374. package/dist/ssr/content/range-picker-messages.js.map +1 -0
  375. package/dist/ssr/content/structured-data-messages.js +22 -0
  376. package/dist/ssr/content/structured-data-messages.js.map +1 -0
  377. package/dist/ssr/content/timeline-messages.js +62 -0
  378. package/dist/ssr/content/timeline-messages.js.map +1 -0
  379. package/dist/ssr/content/video-messages.js +24 -0
  380. package/dist/ssr/content/video-messages.js.map +1 -0
  381. package/dist/ssr/content/viewport-messages.js +28 -0
  382. package/dist/ssr/content/viewport-messages.js.map +1 -0
  383. package/dist/ssr/feedback/HoverPreview.js +34 -6
  384. package/dist/ssr/feedback/HoverPreview.js.map +1 -1
  385. package/dist/ssr/feedback/InstallGuide.js +18 -18
  386. package/dist/ssr/feedback/InstallGuide.js.map +1 -1
  387. package/dist/ssr/feedback/install-messages.js +104 -0
  388. package/dist/ssr/feedback/install-messages.js.map +1 -0
  389. package/dist/ssr/feedback/prompt-messages.js +65 -0
  390. package/dist/ssr/feedback/prompt-messages.js.map +1 -0
  391. package/dist/ssr/feedback/prompts.js +14 -11
  392. package/dist/ssr/feedback/prompts.js.map +1 -1
  393. package/dist/ssr/feedback/toast-messages.js +18 -0
  394. package/dist/ssr/feedback/toast-messages.js.map +1 -0
  395. package/dist/ssr/feedback/toast.js +4 -3
  396. package/dist/ssr/feedback/toast.js.map +1 -1
  397. package/dist/ssr/index.js +1 -1
  398. package/dist/ssr/index.js.map +1 -1
  399. package/dist/ssr/inputs/AutocompleteEditor.js +5 -3
  400. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
  401. package/dist/ssr/inputs/AutocompleteSelect.js +10 -8
  402. package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -1
  403. package/dist/ssr/inputs/ChoiceGroups.js +4 -0
  404. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
  405. package/dist/ssr/inputs/ChoiceInputs.js +5 -5
  406. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  407. package/dist/ssr/inputs/Combobox.js +3 -1
  408. package/dist/ssr/inputs/Combobox.js.map +1 -1
  409. package/dist/ssr/inputs/DatePicker.js +34 -4
  410. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  411. package/dist/ssr/inputs/FileDropTarget.js +6 -6
  412. package/dist/ssr/inputs/FileDropTarget.js.map +1 -1
  413. package/dist/ssr/inputs/FileInputs.js +29 -20
  414. package/dist/ssr/inputs/FileInputs.js.map +1 -1
  415. package/dist/ssr/inputs/MultiSelectInput.js +7 -5
  416. package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
  417. package/dist/ssr/inputs/NumberInput.js +4 -2
  418. package/dist/ssr/inputs/NumberInput.js.map +1 -1
  419. package/dist/ssr/inputs/QrScanner.js +4 -4
  420. package/dist/ssr/inputs/QrScanner.js.map +1 -1
  421. package/dist/ssr/inputs/Select.js +7 -5
  422. package/dist/ssr/inputs/Select.js.map +1 -1
  423. package/dist/ssr/inputs/SelectChip.js +3 -3
  424. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  425. package/dist/ssr/inputs/SignatureInput.js +9 -3
  426. package/dist/ssr/inputs/SignatureInput.js.map +1 -1
  427. package/dist/ssr/inputs/SpecialInputs.js +4 -2
  428. package/dist/ssr/inputs/SpecialInputs.js.map +1 -1
  429. package/dist/ssr/inputs/TagEditor.js +8 -6
  430. package/dist/ssr/inputs/TagEditor.js.map +1 -1
  431. package/dist/ssr/inputs/TagsInput.js +5 -5
  432. package/dist/ssr/inputs/TagsInput.js.map +1 -1
  433. package/dist/ssr/inputs/TemplateEditor.js +5 -5
  434. package/dist/ssr/inputs/TemplateEditor.js.map +1 -1
  435. package/dist/ssr/inputs/TextInput.js +3 -1
  436. package/dist/ssr/inputs/TextInput.js.map +1 -1
  437. package/dist/ssr/inputs/completion-messages.js +24 -0
  438. package/dist/ssr/inputs/completion-messages.js.map +1 -0
  439. package/dist/ssr/inputs/date-picker.js +24 -0
  440. package/dist/ssr/inputs/date-picker.js.map +1 -1
  441. package/dist/ssr/inputs/file-drop-messages.js +63 -0
  442. package/dist/ssr/inputs/file-drop-messages.js.map +1 -0
  443. package/dist/ssr/inputs/file-drop.js.map +1 -1
  444. package/dist/ssr/inputs/file-input-messages.js +60 -0
  445. package/dist/ssr/inputs/file-input-messages.js.map +1 -0
  446. package/dist/ssr/inputs/icon-messages.js +22 -0
  447. package/dist/ssr/inputs/icon-messages.js.map +1 -0
  448. package/dist/ssr/inputs/input-messages.js +38 -0
  449. package/dist/ssr/inputs/input-messages.js.map +1 -0
  450. package/dist/ssr/inputs/markdown/MarkdownEditor.js +9 -5
  451. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  452. package/dist/ssr/inputs/markdown/Toolbar.js +13 -13
  453. package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -1
  454. package/dist/ssr/inputs/markdown/editor-messages.js +43 -0
  455. package/dist/ssr/inputs/markdown/editor-messages.js.map +1 -0
  456. package/dist/ssr/inputs/markdown/toolbar-messages.js +40 -0
  457. package/dist/ssr/inputs/markdown/toolbar-messages.js.map +1 -0
  458. package/dist/ssr/inputs/qr-messages.js +26 -0
  459. package/dist/ssr/inputs/qr-messages.js.map +1 -0
  460. package/dist/ssr/inputs/select-messages.js +63 -0
  461. package/dist/ssr/inputs/select-messages.js.map +1 -0
  462. package/dist/ssr/inputs/tag-messages.js +44 -0
  463. package/dist/ssr/inputs/tag-messages.js.map +1 -0
  464. package/dist/ssr/inputs/template-messages.js +22 -0
  465. package/dist/ssr/inputs/template-messages.js.map +1 -0
  466. package/dist/ssr/internal/render-error-messages.js +20 -0
  467. package/dist/ssr/internal/render-error-messages.js.map +1 -0
  468. package/dist/ssr/internal/render-error.js +3 -1
  469. package/dist/ssr/internal/render-error.js.map +1 -1
  470. package/dist/ssr/internal/text-selection.js +101 -0
  471. package/dist/ssr/internal/text-selection.js.map +1 -0
  472. package/dist/ssr/intl/messages.js +12 -1155
  473. package/dist/ssr/intl/messages.js.map +1 -1
  474. package/dist/ssr/layout/AppWorkspace.js +203 -96
  475. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  476. package/dist/ssr/layout/BottomSheet.js +1 -0
  477. package/dist/ssr/layout/BottomSheet.js.map +1 -1
  478. package/dist/ssr/layout/Discussion.js +8 -5
  479. package/dist/ssr/layout/Discussion.js.map +1 -1
  480. package/dist/ssr/layout/FloatingWindow.js +8 -5
  481. package/dist/ssr/layout/FloatingWindow.js.map +1 -1
  482. package/dist/ssr/layout/Navigation.js +6 -5
  483. package/dist/ssr/layout/Navigation.js.map +1 -1
  484. package/dist/ssr/layout/PageTitle.js +253 -0
  485. package/dist/ssr/layout/PageTitle.js.map +1 -0
  486. package/dist/ssr/layout/PanelDialog.js +8 -6
  487. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  488. package/dist/ssr/layout/Panes.js +22 -14
  489. package/dist/ssr/layout/Panes.js.map +1 -1
  490. package/dist/ssr/layout/PullToRefresh.js +13 -4
  491. package/dist/ssr/layout/PullToRefresh.js.map +1 -1
  492. package/dist/ssr/layout/Settings.js +14 -12
  493. package/dist/ssr/layout/Settings.js.map +1 -1
  494. package/dist/ssr/layout/SettingsCollection.js +6 -5
  495. package/dist/ssr/layout/SettingsCollection.js.map +1 -1
  496. package/dist/ssr/layout/SettingsModal.js +3 -1
  497. package/dist/ssr/layout/SettingsModal.js.map +1 -1
  498. package/dist/ssr/layout/app-workspace-controller.js +743 -12
  499. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  500. package/dist/ssr/layout/app-workspace-state.js +3 -2
  501. package/dist/ssr/layout/app-workspace-state.js.map +1 -1
  502. package/dist/ssr/layout/floating-window-messages.js +28 -0
  503. package/dist/ssr/layout/floating-window-messages.js.map +1 -0
  504. package/dist/ssr/layout/index.js +2 -0
  505. package/dist/ssr/layout/index.js.map +1 -1
  506. package/dist/ssr/layout/navigation-model.js.map +1 -1
  507. package/dist/ssr/layout/page-title-controller.js +169 -0
  508. package/dist/ssr/layout/page-title-controller.js.map +1 -0
  509. package/dist/ssr/layout/panel-dialog-messages.js +20 -0
  510. package/dist/ssr/layout/panel-dialog-messages.js.map +1 -0
  511. package/dist/ssr/layout/panes-messages.js +48 -0
  512. package/dist/ssr/layout/panes-messages.js.map +1 -0
  513. package/dist/ssr/layout/refresh-messages.js +20 -0
  514. package/dist/ssr/layout/refresh-messages.js.map +1 -0
  515. package/dist/ssr/layout/settings-messages.js +54 -0
  516. package/dist/ssr/layout/settings-messages.js.map +1 -0
  517. package/dist/ssr/layout/workspace-messages.js +56 -0
  518. package/dist/ssr/layout/workspace-messages.js.map +1 -0
  519. package/dist/ssr/surfaces/Avatar.js +5 -5
  520. package/dist/ssr/surfaces/Avatar.js.map +1 -1
  521. package/dist/ssr/surfaces/ResourceCard.js +4 -2
  522. package/dist/ssr/surfaces/ResourceCard.js.map +1 -1
  523. package/dist/ssr/surfaces/Tag.js +3 -3
  524. package/dist/ssr/surfaces/Tag.js.map +1 -1
  525. package/dist/ssr/surfaces/avatar-messages.js +26 -0
  526. package/dist/ssr/surfaces/avatar-messages.js.map +1 -0
  527. package/dist/ssr/surfaces/resource-messages.js +26 -0
  528. package/dist/ssr/surfaces/resource-messages.js.map +1 -0
  529. package/dist/ssr/widgets/Widget.js +6 -0
  530. package/dist/ssr/widgets/Widget.js.map +1 -1
  531. package/dist/styles.css +1 -1
  532. package/dist/types/actions/GestureMenu.d.ts +2 -0
  533. package/dist/types/actions/filter-messages.d.ts +8 -0
  534. package/dist/types/actions/spotlight-messages.d.ts +8 -0
  535. package/dist/types/chat/chat-messages.d.ts +116 -0
  536. package/dist/types/content/Calendar.d.ts +32 -0
  537. package/dist/types/content/DataTable.d.ts +2 -0
  538. package/dist/types/content/FileView.d.ts +0 -10
  539. package/dist/types/content/calendar-messages.d.ts +60 -0
  540. package/dist/types/content/calendar-month-layout.d.ts +52 -0
  541. package/dist/types/content/chart-messages.d.ts +32 -0
  542. package/dist/types/content/data-table-messages.d.ts +10 -0
  543. package/dist/types/content/docs-messages.d.ts +10 -0
  544. package/dist/types/content/feed-messages.d.ts +15 -0
  545. package/dist/types/content/file-browser-messages.d.ts +33 -0
  546. package/dist/types/content/file-view-messages.d.ts +30 -0
  547. package/dist/types/content/index.d.ts +1 -1
  548. package/dist/types/content/lightbox-messages.d.ts +16 -0
  549. package/dist/types/content/log-entries-messages.d.ts +8 -0
  550. package/dist/types/content/markdown-info-block-messages.d.ts +12 -0
  551. package/dist/types/content/markdown-reference-messages.d.ts +15 -0
  552. package/dist/types/content/pagination-messages.d.ts +17 -0
  553. package/dist/types/content/pdf-messages.d.ts +20 -0
  554. package/dist/types/content/range-picker-messages.d.ts +8 -0
  555. package/dist/types/content/structured-data-messages.d.ts +9 -0
  556. package/dist/types/content/timeline-messages.d.ts +29 -0
  557. package/dist/types/content/video-messages.d.ts +10 -0
  558. package/dist/types/content/viewport-messages.d.ts +12 -0
  559. package/dist/types/feedback/install-messages.d.ts +50 -0
  560. package/dist/types/feedback/prompt-messages.d.ts +31 -0
  561. package/dist/types/feedback/toast-messages.d.ts +9 -0
  562. package/dist/types/index.d.ts +1 -0
  563. package/dist/types/inputs/completion-messages.d.ts +10 -0
  564. package/dist/types/inputs/date-picker.d.ts +7 -0
  565. package/dist/types/inputs/file-drop-messages.d.ts +30 -0
  566. package/dist/types/inputs/file-drop.d.ts +3 -3
  567. package/dist/types/inputs/file-input-messages.d.ts +28 -0
  568. package/dist/types/inputs/icon-messages.d.ts +9 -0
  569. package/dist/types/inputs/input-messages.d.ts +17 -0
  570. package/dist/types/inputs/markdown/editor-messages.d.ts +20 -0
  571. package/dist/types/inputs/markdown/toolbar-messages.d.ts +18 -0
  572. package/dist/types/inputs/qr-messages.d.ts +11 -0
  573. package/dist/types/inputs/select-messages.d.ts +30 -0
  574. package/dist/types/inputs/tag-messages.d.ts +20 -0
  575. package/dist/types/inputs/template-messages.d.ts +9 -0
  576. package/dist/types/internal/render-error-messages.d.ts +8 -0
  577. package/dist/types/internal/text-selection.d.ts +18 -0
  578. package/dist/types/intl/messages.d.ts +6 -544
  579. package/dist/types/layout/AppWorkspace.d.ts +19 -4
  580. package/dist/types/layout/PageTitle.d.ts +64 -0
  581. package/dist/types/layout/app-workspace-controller.d.ts +4 -0
  582. package/dist/types/layout/app-workspace-state.d.ts +3 -2
  583. package/dist/types/layout/floating-window-messages.d.ts +12 -0
  584. package/dist/types/layout/index.d.ts +3 -0
  585. package/dist/types/layout/navigation-model.d.ts +7 -0
  586. package/dist/types/layout/page-title-controller.d.ts +13 -0
  587. package/dist/types/layout/panel-dialog-messages.d.ts +8 -0
  588. package/dist/types/layout/panes-messages.d.ts +22 -0
  589. package/dist/types/layout/refresh-messages.d.ts +8 -0
  590. package/dist/types/layout/settings-messages.d.ts +25 -0
  591. package/dist/types/layout/workspace-messages.d.ts +26 -0
  592. package/dist/types/surfaces/avatar-messages.d.ts +11 -0
  593. package/dist/types/surfaces/resource-messages.d.ts +11 -0
  594. package/dist/types/widgets/Widget.d.ts +5 -1
  595. package/package.json +1 -1
@@ -2,7 +2,6 @@ import { template as _$template } from "solid-js/web";
2
2
  import { delegateEvents as _$delegateEvents } from "solid-js/web";
3
3
  import { use as _$use } from "solid-js/web";
4
4
  import { setStyleProperty as _$setStyleProperty } from "solid-js/web";
5
- import { memo as _$memo } from "solid-js/web";
6
5
  import { className as _$className } from "solid-js/web";
7
6
  import { spread as _$spread } from "solid-js/web";
8
7
  import { mergeProps as _$mergeProps } from "solid-js/web";
@@ -11,65 +10,90 @@ import { setAttribute as _$setAttribute } from "solid-js/web";
11
10
  import { effect as _$effect } from "solid-js/web";
12
11
  import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
13
12
  import { addEventListener as _$addEventListener } from "solid-js/web";
13
+ import { memo as _$memo } from "solid-js/web";
14
14
  import { getNextMarker as _$getNextMarker } from "solid-js/web";
15
- import { insert as _$insert } from "solid-js/web";
16
15
  import { createComponent as _$createComponent } from "solid-js/web";
17
16
  import { getNextElement as _$getNextElement } from "solid-js/web";
18
- var _tmpl$ = /*#__PURE__*/_$template(`<span class=k2b-calendar-event__marker aria-hidden=true>`),
19
- _tmpl$2 = /*#__PURE__*/_$template(`<span class=k2b-calendar-event__title><!$><!/><!$><!/>`),
20
- _tmpl$3 = /*#__PURE__*/_$template(`<span class=k2b-calendar-event__meta>`),
21
- _tmpl$4 = /*#__PURE__*/_$template(`<span class=k2b-calendar-event__description>`),
22
- _tmpl$5 = /*#__PURE__*/_$template(`<a class=k2b-calendar-event data-calendar-event>`),
23
- _tmpl$6 = /*#__PURE__*/_$template(`<button type=button class=k2b-calendar-event data-calendar-event data-interactive=true>`),
24
- _tmpl$7 = /*#__PURE__*/_$template(`<div class=k2b-calendar-event role=group data-calendar-event>`),
25
- _tmpl$8 = /*#__PURE__*/_$template(`<a>`),
26
- _tmpl$9 = /*#__PURE__*/_$template(`<div role=radiogroup aria-orientation=horizontal class="k2b-segmented-control k2b-calendar-view-switcher">`),
27
- _tmpl$0 = /*#__PURE__*/_$template(`<i>`),
28
- _tmpl$1 = /*#__PURE__*/_$template(`<button type=button class=k2b-calendar-header__nav-button><i>`),
29
- _tmpl$10 = /*#__PURE__*/_$template(`<span class=k2b-button__label>`),
30
- _tmpl$11 = /*#__PURE__*/_$template(`<span class=k2b-calendar-header__progress aria-hidden=true>`),
31
- _tmpl$12 = /*#__PURE__*/_$template(`<header class=k2b-calendar-header><div class=k2b-calendar-header__navigation><!$><!/><!$><!/><div class=k2b-calendar-header__title></div></div><div class=k2b-calendar-header__actions><!$><!/><!$><!/><!$><!/></div><!$><!/>`),
32
- _tmpl$13 = /*#__PURE__*/_$template(`<div class=k2b-calendar-month__weekday>`),
33
- _tmpl$14 = /*#__PURE__*/_$template(`<div class=k2b-calendar-month><div class=k2b-calendar-month__weekdays><!$><!/><!$><!/></div><!$><!/>`),
34
- _tmpl$15 = /*#__PURE__*/_$template(`<div class=k2b-calendar-month__week-number>`),
35
- _tmpl$16 = /*#__PURE__*/_$template(`<div class=k2b-calendar-month__week><!$><!/><!$><!/>`),
36
- _tmpl$17 = /*#__PURE__*/_$template(`<button type=button class=k2b-calendar-month__day-target data-interactive=true>`),
37
- _tmpl$18 = /*#__PURE__*/_$template(`<div class=k2b-calendar-preview>`),
38
- _tmpl$19 = /*#__PURE__*/_$template(`<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>`),
39
- _tmpl$20 = /*#__PURE__*/_$template(`<span class=k2b-calendar-month__day-number>`),
40
- _tmpl$21 = /*#__PURE__*/_$template(`<span class=k2b-calendar-month__badge><!$><!/><!$><!/>`),
41
- _tmpl$22 = /*#__PURE__*/_$template(`<span class=k2b-calendar-dot>`),
42
- _tmpl$23 = /*#__PURE__*/_$template(`<div class=k2b-calendar-time-grid__all-day><div class=k2b-calendar-time-grid__all-day-label></div><!$><!/>`),
43
- _tmpl$24 = /*#__PURE__*/_$template(`<div class=k2b-calendar-time-grid><div class=k2b-calendar-time-grid__days><div></div><!$><!/></div><!$><!/><div class=k2b-calendar-time-grid__scroll><div class=k2b-calendar-time-grid__grid><div class=k2b-calendar-time-grid__gutter></div><!$><!/>`),
44
- _tmpl$25 = /*#__PURE__*/_$template(`<span class=k2b-calendar-time-grid__day-label>`),
45
- _tmpl$26 = /*#__PURE__*/_$template(`<span class=k2b-calendar-time-grid__badge><!$><!/><!$><!/>`),
46
- _tmpl$27 = /*#__PURE__*/_$template(`<div class=k2b-calendar-time-grid__all-day-cell><div class=k2b-calendar-time-grid__all-day-events><!$><!/><!$><!/>`),
47
- _tmpl$28 = /*#__PURE__*/_$template(`<div class=k2b-calendar-time-grid__hour><!$><!/>:00`),
48
- _tmpl$29 = /*#__PURE__*/_$template(`<div class=k2b-calendar-time-grid__now>`),
49
- _tmpl$30 = /*#__PURE__*/_$template(`<div class=k2b-calendar-time-grid__column><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/>`),
50
- _tmpl$31 = /*#__PURE__*/_$template(`<div class=k2b-calendar-time-grid__slot>`),
51
- _tmpl$32 = /*#__PURE__*/_$template(`<div class=k2b-calendar-preview__title>`),
52
- _tmpl$33 = /*#__PURE__*/_$template(`<div class="k2b-calendar-preview k2b-calendar-preview--timed"><div class=k2b-calendar-preview__content><!$><!/><div class=k2b-calendar-preview__label><!$><!/> - <!$><!/>`),
53
- _tmpl$34 = /*#__PURE__*/_$template(`<button type=button class=k2b-calendar-time-grid__resize><span class=k2b-calendar-time-grid__resize-icon aria-hidden=true>`),
54
- _tmpl$35 = /*#__PURE__*/_$template(`<div class=k2b-calendar-time-grid__event-position><div class=k2b-calendar-time-grid__event-frame><!$><!/><!$><!/>`),
55
- _tmpl$36 = /*#__PURE__*/_$template(`<button type=button class=k2b-calendar-time-grid__overflow><span class=k2b-calendar-time-grid__overflow-count>+<!$><!/>`),
56
- _tmpl$37 = /*#__PURE__*/_$template(`<div class=k2b-calendar-time-grid__overflow-menu><div class=k2b-calendar-time-grid__overflow-title><!$><!/> - <!$><!/></div><!$><!/>`),
57
- _tmpl$38 = /*#__PURE__*/_$template(`<div class=k2b-calendar-year>`),
58
- _tmpl$39 = /*#__PURE__*/_$template(`<div class=k2b-calendar-year__month><div class=k2b-calendar-year__title></div><div class=k2b-calendar-year__grid>`),
59
- _tmpl$40 = /*#__PURE__*/_$template(`<span class=k2b-calendar-year__indicator>`),
60
- _tmpl$41 = /*#__PURE__*/_$template(`<div class=k2b-calendar-mobile-month__events>`),
61
- _tmpl$42 = /*#__PURE__*/_$template(`<div class=k2b-calendar-mobile-month><!$><!/><div class=k2b-calendar-mobile-month__agenda><div class=k2b-calendar-mobile-month__title></div><!$><!/>`),
62
- _tmpl$43 = /*#__PURE__*/_$template(`<div class=k2b-calendar-mobile-month__empty>`),
63
- _tmpl$44 = /*#__PURE__*/_$template(`<div class=k2b-calendar-body>`),
64
- _tmpl$45 = /*#__PURE__*/_$template(`<section><!$><!/><!$><!/><!$><!/>`);
17
+ import { insert as _$insert } from "solid-js/web";
18
+ var _tmpl$ = /*#__PURE__*/_$template(`<span class=k2b-calendar-event__time>`),
19
+ _tmpl$2 = /*#__PURE__*/_$template(`<span class=k2b-calendar-event__marker aria-hidden=true>`),
20
+ _tmpl$3 = /*#__PURE__*/_$template(`<span class=k2b-calendar-event__title><!$><!/><!$><!/>`),
21
+ _tmpl$4 = /*#__PURE__*/_$template(`<span class=k2b-calendar-event__meta>`),
22
+ _tmpl$5 = /*#__PURE__*/_$template(`<span class=k2b-calendar-event__description>`),
23
+ _tmpl$6 = /*#__PURE__*/_$template(`<span class=k2b-calendar-event__hint data-edge=start aria-hidden=true>`),
24
+ _tmpl$7 = /*#__PURE__*/_$template(`<span class=k2b-calendar-event__hint data-edge=end aria-hidden=true>`),
25
+ _tmpl$8 = /*#__PURE__*/_$template(`<a class=k2b-calendar-event data-calendar-event>`),
26
+ _tmpl$9 = /*#__PURE__*/_$template(`<button type=button class=k2b-calendar-event data-calendar-event data-interactive=true>`),
27
+ _tmpl$0 = /*#__PURE__*/_$template(`<div class=k2b-calendar-event role=group data-calendar-event>`),
28
+ _tmpl$1 = /*#__PURE__*/_$template(`<a>`),
29
+ _tmpl$10 = /*#__PURE__*/_$template(`<div role=radiogroup aria-orientation=horizontal class="k2b-segmented-control k2b-calendar-view-switcher">`),
30
+ _tmpl$11 = /*#__PURE__*/_$template(`<i>`),
31
+ _tmpl$12 = /*#__PURE__*/_$template(`<button type=button class=k2b-calendar-header__nav-button><i>`),
32
+ _tmpl$13 = /*#__PURE__*/_$template(`<span class=k2b-button__label>`),
33
+ _tmpl$14 = /*#__PURE__*/_$template(`<div class=k2b-calendar-header__content>`),
34
+ _tmpl$15 = /*#__PURE__*/_$template(`<span class=k2b-calendar-header__progress aria-hidden=true>`),
35
+ _tmpl$16 = /*#__PURE__*/_$template(`<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><!$><!/>`),
36
+ _tmpl$17 = /*#__PURE__*/_$template(`<span class=k2b-calendar-header__title-size aria-hidden=true>`),
37
+ _tmpl$18 = /*#__PURE__*/_$template(`<div class=k2b-calendar-month__weekday>`),
38
+ _tmpl$19 = /*#__PURE__*/_$template(`<div class=k2b-calendar-month><div class=k2b-calendar-month__weekdays><!$><!/><!$><!/></div><!$><!/>`),
39
+ _tmpl$20 = /*#__PURE__*/_$template(`<div class=k2b-calendar-month__week-number>`),
40
+ _tmpl$21 = /*#__PURE__*/_$template(`<div class=k2b-calendar-month__week><!$><!/><!$><!/>`),
41
+ _tmpl$22 = /*#__PURE__*/_$template(`<button type=button class=k2b-calendar-month__day-target data-interactive=true>`),
42
+ _tmpl$23 = /*#__PURE__*/_$template(`<div class=k2b-calendar-preview>`),
43
+ _tmpl$24 = /*#__PURE__*/_$template(`<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>`),
44
+ _tmpl$25 = /*#__PURE__*/_$template(`<span class=k2b-calendar-month__day-number>`),
45
+ _tmpl$26 = /*#__PURE__*/_$template(`<span class=k2b-calendar-month__badge><!$><!/><!$><!/>`),
46
+ _tmpl$27 = /*#__PURE__*/_$template(`<span class=k2b-calendar-dot>`),
47
+ _tmpl$28 = /*#__PURE__*/_$template(`<div class=k2b-calendar-month__weekday role=columnheader>`),
48
+ _tmpl$29 = /*#__PURE__*/_$template(`<div class=k2b-calendar-month role=grid aria-multiselectable=true data-lanes=true style=--k2b-calendar-lane:1.25rem;--k2b-calendar-lane-gap:0.125rem><div class=k2b-calendar-month__weekdays role=row><!$><!/><!$><!/></div><!$><!/>`),
49
+ _tmpl$30 = /*#__PURE__*/_$template(`<div class=k2b-calendar-month__week-number role=rowheader>`),
50
+ _tmpl$31 = /*#__PURE__*/_$template(`<div class=k2b-calendar-month__week role=row><!$><!/><!$><!/>`),
51
+ _tmpl$32 = /*#__PURE__*/_$template(`<button type=button class=k2b-calendar-month__week-link tabindex=-1>`),
52
+ _tmpl$33 = /*#__PURE__*/_$template(`<button type=button class=k2b-calendar-month__more tabindex=-1 aria-haspopup=dialog><span class=k2b-calendar-month__more-long></span><span class=k2b-calendar-month__more-short>+<!$><!/>`),
53
+ _tmpl$34 = /*#__PURE__*/_$template(`<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><!$><!/><!$><!/><!$><!/>`),
54
+ _tmpl$35 = /*#__PURE__*/_$template(`<div class=k2b-calendar-month__segment data-bar=true>`),
55
+ _tmpl$36 = /*#__PURE__*/_$template(`<div class=k2b-calendar-month__segment style=--k2b-calendar-span:1>`),
56
+ _tmpl$37 = /*#__PURE__*/_$template(`<ul class=k2b-calendar-day-list__events>`),
57
+ _tmpl$38 = /*#__PURE__*/_$template(`<i class="ti ti-plus"aria-hidden=true>`),
58
+ _tmpl$39 = /*#__PURE__*/_$template(`<div class=k2b-calendar-day-list><div class=k2b-calendar-day-list__title></div><!$><!/><div class=k2b-calendar-day-list__actions><!$><!/><!$><!/>`),
59
+ _tmpl$40 = /*#__PURE__*/_$template(`<p class=k2b-calendar-day-list__empty>`),
60
+ _tmpl$41 = /*#__PURE__*/_$template(`<li>`),
61
+ _tmpl$42 = /*#__PURE__*/_$template(`<i class="ti ti-zoom-in"aria-hidden=true>`),
62
+ _tmpl$43 = /*#__PURE__*/_$template(`<div class=k2b-calendar-popover popover=auto role=dialog>`),
63
+ _tmpl$44 = /*#__PURE__*/_$template(`<div class=k2b-calendar-time-grid__all-day><div class=k2b-calendar-time-grid__all-day-label></div><!$><!/>`),
64
+ _tmpl$45 = /*#__PURE__*/_$template(`<div class=k2b-calendar-time-grid><div class=k2b-calendar-time-grid__days><div></div><!$><!/></div><!$><!/><div class=k2b-calendar-time-grid__scroll><div class=k2b-calendar-time-grid__grid><div class=k2b-calendar-time-grid__gutter></div><!$><!/>`),
65
+ _tmpl$46 = /*#__PURE__*/_$template(`<span class=k2b-calendar-time-grid__day-label>`),
66
+ _tmpl$47 = /*#__PURE__*/_$template(`<span class=k2b-calendar-time-grid__badge><!$><!/><!$><!/>`),
67
+ _tmpl$48 = /*#__PURE__*/_$template(`<div class=k2b-calendar-time-grid__all-day-cell><div class=k2b-calendar-time-grid__all-day-events><!$><!/><!$><!/>`),
68
+ _tmpl$49 = /*#__PURE__*/_$template(`<div class=k2b-calendar-time-grid__hour><!$><!/>:00`),
69
+ _tmpl$50 = /*#__PURE__*/_$template(`<div class=k2b-calendar-time-grid__now>`),
70
+ _tmpl$51 = /*#__PURE__*/_$template(`<div class=k2b-calendar-time-grid__column><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/>`),
71
+ _tmpl$52 = /*#__PURE__*/_$template(`<div class=k2b-calendar-time-grid__slot>`),
72
+ _tmpl$53 = /*#__PURE__*/_$template(`<div class=k2b-calendar-preview__title>`),
73
+ _tmpl$54 = /*#__PURE__*/_$template(`<div class="k2b-calendar-preview k2b-calendar-preview--timed"><div class=k2b-calendar-preview__content><!$><!/><div class=k2b-calendar-preview__label><!$><!/> - <!$><!/>`),
74
+ _tmpl$55 = /*#__PURE__*/_$template(`<button type=button class=k2b-calendar-time-grid__resize><span class=k2b-calendar-time-grid__resize-icon aria-hidden=true>`),
75
+ _tmpl$56 = /*#__PURE__*/_$template(`<div class=k2b-calendar-time-grid__event-position><div class=k2b-calendar-time-grid__event-frame><!$><!/><!$><!/>`),
76
+ _tmpl$57 = /*#__PURE__*/_$template(`<button type=button class=k2b-calendar-time-grid__overflow><span class=k2b-calendar-time-grid__overflow-count>+<!$><!/>`),
77
+ _tmpl$58 = /*#__PURE__*/_$template(`<div class=k2b-calendar-time-grid__overflow-menu><div class=k2b-calendar-time-grid__overflow-title><!$><!/> - <!$><!/></div><!$><!/>`),
78
+ _tmpl$59 = /*#__PURE__*/_$template(`<div class=k2b-calendar-year>`),
79
+ _tmpl$60 = /*#__PURE__*/_$template(`<div class=k2b-calendar-year__month><div class=k2b-calendar-year__title></div><div class=k2b-calendar-year__grid>`),
80
+ _tmpl$61 = /*#__PURE__*/_$template(`<span class=k2b-calendar-year__indicator>`),
81
+ _tmpl$62 = /*#__PURE__*/_$template(`<div class=k2b-calendar-mobile-month__events>`),
82
+ _tmpl$63 = /*#__PURE__*/_$template(`<div class=k2b-calendar-mobile-month><!$><!/><div class=k2b-calendar-mobile-month__agenda><div class=k2b-calendar-mobile-month__title></div><!$><!/>`),
83
+ _tmpl$64 = /*#__PURE__*/_$template(`<div class=k2b-calendar-mobile-month__empty>`),
84
+ _tmpl$65 = /*#__PURE__*/_$template(`<div class=k2b-calendar-body>`),
85
+ _tmpl$66 = /*#__PURE__*/_$template(`<section><!$><!/><!$><!/>`);
65
86
  import { Link } from "@k2b/ssr/nav";
66
87
  import { dates as calendar } from "@k2b/stdlib";
67
- import { createMemo, createSignal, For, mergeProps, onCleanup, onMount, Show } from "solid-js";
88
+ import { createEffect, createMemo, createSignal, For, mergeProps, on, onCleanup, onMount, Show, untrack } from "solid-js";
68
89
  import { Button } from "../actions/Button";
90
+ import { GestureMenu } from "../actions/GestureMenu";
69
91
  import SegmentedControl from "../actions/SegmentedControl";
70
92
  import { useDateConfigLocale } from "../intl/locale";
71
93
  import { useUiMessages } from "../intl/messages";
72
94
  import { layoutCalendarIntervals } from "./calendar-event-layout";
95
+ import { useCalendarMessages } from "./calendar-messages";
96
+ import { fitMonthWeek, layoutMonthWeek, monthLaneCapacity } from "./calendar-month-layout";
73
97
  import { calendarDayIndexAtPoint, calendarMinuteAtPoint, startCalendarPointerSession } from "./calendar-pointer";
74
98
 
75
99
  /** A view the application adds to the switcher; the calendar shows its header and toolbar, the application the body. */
@@ -231,7 +255,7 @@ const timedEventLayouts = events => {
231
255
  }));
232
256
  };
233
257
  const EventChip = props => {
234
- const messages = useUiMessages();
258
+ const calendarMessages = useCalendarMessages();
235
259
  const dateConfig = createMemo(() => ownerDateConfig(props.owner));
236
260
  const color = () => props.event.color ?? "blue";
237
261
  const selected = () => Boolean(props.owner.selectedEventId) && props.owner.selectedEventId === props.event.id;
@@ -246,7 +270,7 @@ const EventChip = props => {
246
270
  const showDescription = () => Boolean(props.event.description?.trim() && props.fill && !props.event.allDay && !props.compact && durationHours() >= 1.5);
247
271
  const timeLabel = () => `${formatTime(props.event.startDate, dateConfig())} - ${formatTime(props.event.endDate, dateConfig())}`;
248
272
  const ariaLabel = () => {
249
- const label = props.event.allDay ? props.event.title : messages().calendarEventTime({
273
+ const label = props.label ? props.label : props.event.allDay ? props.event.title : calendarMessages().calendarEventTime({
250
274
  title: props.event.title,
251
275
  start: formatTime(props.event.startDate, dateConfig()),
252
276
  end: formatTime(props.event.endDate, dateConfig())
@@ -260,53 +284,81 @@ const EventChip = props => {
260
284
  end: props.event.endDate,
261
285
  allDay: props.event.allDay ?? false,
262
286
  durationHours: durationHours(),
263
- timeLabel: timeLabel()
287
+ timeLabel: timeLabel(),
288
+ leadingTime: props.leadingTime
264
289
  });
265
- const defaultContent = [(() => {
266
- var _el$ = _$getNextElement(_tmpl$2),
267
- _el$3 = _el$.firstChild,
268
- [_el$4, _co$] = _$getNextMarker(_el$3.nextSibling),
269
- _el$5 = _el$4.nextSibling,
270
- [_el$6, _co$2] = _$getNextMarker(_el$5.nextSibling);
271
- _$insert(_el$, _$createComponent(Show, {
290
+ const defaultContent = [_$createComponent(Show, {
291
+ get when() {
292
+ return props.leadingTime;
293
+ },
294
+ get children() {
295
+ var _el$ = _$getNextElement(_tmpl$);
296
+ _$insert(_el$, () => props.leadingTime);
297
+ return _el$;
298
+ }
299
+ }), (() => {
300
+ var _el$2 = _$getNextElement(_tmpl$3),
301
+ _el$4 = _el$2.firstChild,
302
+ [_el$5, _co$] = _$getNextMarker(_el$4.nextSibling),
303
+ _el$6 = _el$5.nextSibling,
304
+ [_el$7, _co$2] = _$getNextMarker(_el$6.nextSibling);
305
+ _$insert(_el$2, _$createComponent(Show, {
272
306
  get when() {
273
307
  return props.event.display === "marker";
274
308
  },
275
309
  get children() {
276
- return _$getNextElement(_tmpl$);
310
+ return _$getNextElement(_tmpl$2);
277
311
  }
278
- }), _el$4, _co$);
279
- _$insert(_el$, () => props.event.title, _el$6, _co$2);
280
- return _el$;
312
+ }), _el$5, _co$);
313
+ _$insert(_el$2, () => props.event.title, _el$7, _co$2);
314
+ return _el$2;
281
315
  })(), _$createComponent(Show, {
282
316
  get when() {
283
317
  return showTime();
284
318
  },
285
319
  get children() {
286
- var _el$7 = _$getNextElement(_tmpl$3);
287
- _$insert(_el$7, timeLabel);
288
- return _el$7;
320
+ var _el$8 = _$getNextElement(_tmpl$4);
321
+ _$insert(_el$8, timeLabel);
322
+ return _el$8;
289
323
  }
290
324
  }), _$createComponent(Show, {
291
325
  get when() {
292
326
  return showLocation();
293
327
  },
294
328
  get children() {
295
- var _el$8 = _$getNextElement(_tmpl$3);
296
- _$insert(_el$8, () => props.event.location);
297
- return _el$8;
329
+ var _el$9 = _$getNextElement(_tmpl$4);
330
+ _$insert(_el$9, () => props.event.location);
331
+ return _el$9;
298
332
  }
299
333
  }), _$createComponent(Show, {
300
334
  get when() {
301
335
  return showDescription();
302
336
  },
303
337
  get children() {
304
- var _el$9 = _$getNextElement(_tmpl$4);
305
- _$insert(_el$9, () => props.event.description);
306
- return _el$9;
338
+ var _el$0 = _$getNextElement(_tmpl$5);
339
+ _$insert(_el$0, () => props.event.description);
340
+ return _el$0;
341
+ }
342
+ })];
343
+ const content = () => [_$createComponent(Show, {
344
+ get when() {
345
+ return props.hintStart;
346
+ },
347
+ get children() {
348
+ var _el$1 = _$getNextElement(_tmpl$6);
349
+ _$insert(_el$1, () => props.hintStart);
350
+ return _el$1;
351
+ }
352
+ }), _$memo(() => renderedEvent() ?? defaultContent), _$createComponent(Show, {
353
+ get when() {
354
+ return props.hintEnd;
355
+ },
356
+ get children() {
357
+ var _el$10 = _$getNextElement(_tmpl$7);
358
+ _$insert(_el$10, () => props.hintEnd);
359
+ return _el$10;
307
360
  }
308
361
  })];
309
- const content = () => renderedEvent() ?? defaultContent;
310
362
  const isActionable = () => isInteractive() || Boolean(props.onMovePointerDown);
311
363
  let suppressClickUntil = 0;
312
364
  const onClick = event => {
@@ -339,12 +391,12 @@ const EventChip = props => {
339
391
  });
340
392
  };
341
393
  return props.href ? (() => {
342
- var _el$0 = _$getNextElement(_tmpl$5);
343
- _el$0.$$pointerdown = onPointerDown;
344
- _$addEventListener(_el$0, "dragstart", props.onMovePointerDown ? event => event.preventDefault() : undefined);
345
- _el$0.$$dblclick = onDoubleClick;
346
- _el$0.$$click = onClick;
347
- _$insert(_el$0, content);
394
+ var _el$11 = _$getNextElement(_tmpl$8);
395
+ _el$11.$$pointerdown = onPointerDown;
396
+ _$addEventListener(_el$11, "dragstart", props.onMovePointerDown ? event => event.preventDefault() : undefined);
397
+ _el$11.$$dblclick = onDoubleClick;
398
+ _el$11.$$click = onClick;
399
+ _$insert(_el$11, content);
348
400
  _$effect(_p$ => {
349
401
  var _v$ = props.href,
350
402
  _v$2 = props.event.colorHex ? undefined : color(),
@@ -353,25 +405,31 @@ const EventChip = props => {
353
405
  _v$5 = props.fill ? "true" : undefined,
354
406
  _v$6 = short() ? "true" : undefined,
355
407
  _v$7 = props.moving ? "true" : undefined,
356
- _v$8 = isInteractive() ? "true" : undefined,
357
- _v$9 = props.event.display,
358
- _v$0 = props.event.dataSpaceItemId,
359
- _v$1 = style(),
360
- _v$10 = props.onMovePointerDown ? false : undefined,
361
- _v$11 = ariaLabel();
362
- _v$ !== _p$.e && _$setAttribute(_el$0, "href", _p$.e = _v$);
363
- _v$2 !== _p$.t && _$setAttribute(_el$0, "data-color", _p$.t = _v$2);
364
- _v$3 !== _p$.a && _$setAttribute(_el$0, "data-selected", _p$.a = _v$3);
365
- _v$4 !== _p$.o && _$setAttribute(_el$0, "data-compact", _p$.o = _v$4);
366
- _v$5 !== _p$.i && _$setAttribute(_el$0, "data-fill", _p$.i = _v$5);
367
- _v$6 !== _p$.n && _$setAttribute(_el$0, "data-short", _p$.n = _v$6);
368
- _v$7 !== _p$.s && _$setAttribute(_el$0, "data-moving", _p$.s = _v$7);
369
- _v$8 !== _p$.h && _$setAttribute(_el$0, "data-interactive", _p$.h = _v$8);
370
- _v$9 !== _p$.r && _$setAttribute(_el$0, "data-display", _p$.r = _v$9);
371
- _v$0 !== _p$.d && _$setAttribute(_el$0, "data-space-item-id", _p$.d = _v$0);
372
- _p$.l = _$style(_el$0, _v$1, _p$.l);
373
- _v$10 !== _p$.u && _$setAttribute(_el$0, "draggable", _p$.u = _v$10);
374
- _v$11 !== _p$.c && _$setAttribute(_el$0, "aria-label", _p$.c = _v$11);
408
+ _v$8 = props.continuesBefore ? "true" : undefined,
409
+ _v$9 = props.continuesAfter ? "true" : undefined,
410
+ _v$0 = props.bar ? "true" : undefined,
411
+ _v$1 = isInteractive() ? "true" : undefined,
412
+ _v$10 = props.event.display,
413
+ _v$11 = props.event.dataSpaceItemId,
414
+ _v$12 = style(),
415
+ _v$13 = props.onMovePointerDown ? false : undefined,
416
+ _v$14 = ariaLabel();
417
+ _v$ !== _p$.e && _$setAttribute(_el$11, "href", _p$.e = _v$);
418
+ _v$2 !== _p$.t && _$setAttribute(_el$11, "data-color", _p$.t = _v$2);
419
+ _v$3 !== _p$.a && _$setAttribute(_el$11, "data-selected", _p$.a = _v$3);
420
+ _v$4 !== _p$.o && _$setAttribute(_el$11, "data-compact", _p$.o = _v$4);
421
+ _v$5 !== _p$.i && _$setAttribute(_el$11, "data-fill", _p$.i = _v$5);
422
+ _v$6 !== _p$.n && _$setAttribute(_el$11, "data-short", _p$.n = _v$6);
423
+ _v$7 !== _p$.s && _$setAttribute(_el$11, "data-moving", _p$.s = _v$7);
424
+ _v$8 !== _p$.h && _$setAttribute(_el$11, "data-continues-before", _p$.h = _v$8);
425
+ _v$9 !== _p$.r && _$setAttribute(_el$11, "data-continues-after", _p$.r = _v$9);
426
+ _v$0 !== _p$.d && _$setAttribute(_el$11, "data-bar", _p$.d = _v$0);
427
+ _v$1 !== _p$.l && _$setAttribute(_el$11, "data-interactive", _p$.l = _v$1);
428
+ _v$10 !== _p$.u && _$setAttribute(_el$11, "data-display", _p$.u = _v$10);
429
+ _v$11 !== _p$.c && _$setAttribute(_el$11, "data-space-item-id", _p$.c = _v$11);
430
+ _p$.w = _$style(_el$11, _v$12, _p$.w);
431
+ _v$13 !== _p$.m && _$setAttribute(_el$11, "draggable", _p$.m = _v$13);
432
+ _v$14 !== _p$.f && _$setAttribute(_el$11, "aria-label", _p$.f = _v$14);
375
433
  return _p$;
376
434
  }, {
377
435
  e: undefined,
@@ -386,36 +444,45 @@ const EventChip = props => {
386
444
  d: undefined,
387
445
  l: undefined,
388
446
  u: undefined,
389
- c: undefined
447
+ c: undefined,
448
+ w: undefined,
449
+ m: undefined,
450
+ f: undefined
390
451
  });
391
452
  _$runHydrationEvents();
392
- return _el$0;
453
+ return _el$11;
393
454
  })() : isActionable() ? (() => {
394
- var _el$1 = _$getNextElement(_tmpl$6);
395
- _el$1.$$keydown = onButtonKeyDown;
396
- _el$1.$$pointerdown = onPointerDown;
397
- _el$1.$$dblclick = onDoubleClick;
398
- _el$1.$$click = onClick;
399
- _$insert(_el$1, content);
455
+ var _el$12 = _$getNextElement(_tmpl$9);
456
+ _el$12.$$keydown = onButtonKeyDown;
457
+ _el$12.$$pointerdown = onPointerDown;
458
+ _el$12.$$dblclick = onDoubleClick;
459
+ _el$12.$$click = onClick;
460
+ _$insert(_el$12, content);
400
461
  _$effect(_p$ => {
401
- var _v$12 = props.event.colorHex ? undefined : color(),
402
- _v$13 = selected() ? "true" : undefined,
403
- _v$14 = props.compact ? "true" : undefined,
404
- _v$15 = props.fill ? "true" : undefined,
405
- _v$16 = short() ? "true" : undefined,
406
- _v$17 = props.moving ? "true" : undefined,
407
- _v$18 = props.event.display,
408
- _v$19 = style(),
409
- _v$20 = ariaLabel();
410
- _v$12 !== _p$.e && _$setAttribute(_el$1, "data-color", _p$.e = _v$12);
411
- _v$13 !== _p$.t && _$setAttribute(_el$1, "data-selected", _p$.t = _v$13);
412
- _v$14 !== _p$.a && _$setAttribute(_el$1, "data-compact", _p$.a = _v$14);
413
- _v$15 !== _p$.o && _$setAttribute(_el$1, "data-fill", _p$.o = _v$15);
414
- _v$16 !== _p$.i && _$setAttribute(_el$1, "data-short", _p$.i = _v$16);
415
- _v$17 !== _p$.n && _$setAttribute(_el$1, "data-moving", _p$.n = _v$17);
416
- _v$18 !== _p$.s && _$setAttribute(_el$1, "data-display", _p$.s = _v$18);
417
- _p$.h = _$style(_el$1, _v$19, _p$.h);
418
- _v$20 !== _p$.r && _$setAttribute(_el$1, "aria-label", _p$.r = _v$20);
462
+ var _v$15 = props.event.colorHex ? undefined : color(),
463
+ _v$16 = selected() ? "true" : undefined,
464
+ _v$17 = props.compact ? "true" : undefined,
465
+ _v$18 = props.fill ? "true" : undefined,
466
+ _v$19 = short() ? "true" : undefined,
467
+ _v$20 = props.moving ? "true" : undefined,
468
+ _v$21 = props.continuesBefore ? "true" : undefined,
469
+ _v$22 = props.continuesAfter ? "true" : undefined,
470
+ _v$23 = props.bar ? "true" : undefined,
471
+ _v$24 = props.event.display,
472
+ _v$25 = style(),
473
+ _v$26 = ariaLabel();
474
+ _v$15 !== _p$.e && _$setAttribute(_el$12, "data-color", _p$.e = _v$15);
475
+ _v$16 !== _p$.t && _$setAttribute(_el$12, "data-selected", _p$.t = _v$16);
476
+ _v$17 !== _p$.a && _$setAttribute(_el$12, "data-compact", _p$.a = _v$17);
477
+ _v$18 !== _p$.o && _$setAttribute(_el$12, "data-fill", _p$.o = _v$18);
478
+ _v$19 !== _p$.i && _$setAttribute(_el$12, "data-short", _p$.i = _v$19);
479
+ _v$20 !== _p$.n && _$setAttribute(_el$12, "data-moving", _p$.n = _v$20);
480
+ _v$21 !== _p$.s && _$setAttribute(_el$12, "data-continues-before", _p$.s = _v$21);
481
+ _v$22 !== _p$.h && _$setAttribute(_el$12, "data-continues-after", _p$.h = _v$22);
482
+ _v$23 !== _p$.r && _$setAttribute(_el$12, "data-bar", _p$.r = _v$23);
483
+ _v$24 !== _p$.d && _$setAttribute(_el$12, "data-display", _p$.d = _v$24);
484
+ _p$.l = _$style(_el$12, _v$25, _p$.l);
485
+ _v$26 !== _p$.u && _$setAttribute(_el$12, "aria-label", _p$.u = _v$26);
419
486
  return _p$;
420
487
  }, {
421
488
  e: undefined,
@@ -426,33 +493,42 @@ const EventChip = props => {
426
493
  n: undefined,
427
494
  s: undefined,
428
495
  h: undefined,
429
- r: undefined
496
+ r: undefined,
497
+ d: undefined,
498
+ l: undefined,
499
+ u: undefined
430
500
  });
431
501
  _$runHydrationEvents();
432
- return _el$1;
502
+ return _el$12;
433
503
  })() : (() => {
434
- var _el$10 = _$getNextElement(_tmpl$7);
435
- _$setAttribute(_el$10, "data-interactive", undefined);
436
- _$insert(_el$10, content);
504
+ var _el$13 = _$getNextElement(_tmpl$0);
505
+ _$setAttribute(_el$13, "data-interactive", undefined);
506
+ _$insert(_el$13, content);
437
507
  _$effect(_p$ => {
438
- var _v$21 = props.event.colorHex ? undefined : color(),
439
- _v$22 = selected() ? "true" : undefined,
440
- _v$23 = props.compact ? "true" : undefined,
441
- _v$24 = props.fill ? "true" : undefined,
442
- _v$25 = short() ? "true" : undefined,
443
- _v$26 = props.moving ? "true" : undefined,
444
- _v$27 = props.event.display,
445
- _v$28 = style(),
446
- _v$29 = ariaLabel();
447
- _v$21 !== _p$.e && _$setAttribute(_el$10, "data-color", _p$.e = _v$21);
448
- _v$22 !== _p$.t && _$setAttribute(_el$10, "data-selected", _p$.t = _v$22);
449
- _v$23 !== _p$.a && _$setAttribute(_el$10, "data-compact", _p$.a = _v$23);
450
- _v$24 !== _p$.o && _$setAttribute(_el$10, "data-fill", _p$.o = _v$24);
451
- _v$25 !== _p$.i && _$setAttribute(_el$10, "data-short", _p$.i = _v$25);
452
- _v$26 !== _p$.n && _$setAttribute(_el$10, "data-moving", _p$.n = _v$26);
453
- _v$27 !== _p$.s && _$setAttribute(_el$10, "data-display", _p$.s = _v$27);
454
- _p$.h = _$style(_el$10, _v$28, _p$.h);
455
- _v$29 !== _p$.r && _$setAttribute(_el$10, "aria-label", _p$.r = _v$29);
508
+ var _v$27 = props.event.colorHex ? undefined : color(),
509
+ _v$28 = selected() ? "true" : undefined,
510
+ _v$29 = props.compact ? "true" : undefined,
511
+ _v$30 = props.fill ? "true" : undefined,
512
+ _v$31 = short() ? "true" : undefined,
513
+ _v$32 = props.moving ? "true" : undefined,
514
+ _v$33 = props.continuesBefore ? "true" : undefined,
515
+ _v$34 = props.continuesAfter ? "true" : undefined,
516
+ _v$35 = props.bar ? "true" : undefined,
517
+ _v$36 = props.event.display,
518
+ _v$37 = style(),
519
+ _v$38 = ariaLabel();
520
+ _v$27 !== _p$.e && _$setAttribute(_el$13, "data-color", _p$.e = _v$27);
521
+ _v$28 !== _p$.t && _$setAttribute(_el$13, "data-selected", _p$.t = _v$28);
522
+ _v$29 !== _p$.a && _$setAttribute(_el$13, "data-compact", _p$.a = _v$29);
523
+ _v$30 !== _p$.o && _$setAttribute(_el$13, "data-fill", _p$.o = _v$30);
524
+ _v$31 !== _p$.i && _$setAttribute(_el$13, "data-short", _p$.i = _v$31);
525
+ _v$32 !== _p$.n && _$setAttribute(_el$13, "data-moving", _p$.n = _v$32);
526
+ _v$33 !== _p$.s && _$setAttribute(_el$13, "data-continues-before", _p$.s = _v$33);
527
+ _v$34 !== _p$.h && _$setAttribute(_el$13, "data-continues-after", _p$.h = _v$34);
528
+ _v$35 !== _p$.r && _$setAttribute(_el$13, "data-bar", _p$.r = _v$35);
529
+ _v$36 !== _p$.d && _$setAttribute(_el$13, "data-display", _p$.d = _v$36);
530
+ _p$.l = _$style(_el$13, _v$37, _p$.l);
531
+ _v$38 !== _p$.u && _$setAttribute(_el$13, "aria-label", _p$.u = _v$38);
456
532
  return _p$;
457
533
  }, {
458
534
  e: undefined,
@@ -463,9 +539,12 @@ const EventChip = props => {
463
539
  n: undefined,
464
540
  s: undefined,
465
541
  h: undefined,
466
- r: undefined
542
+ r: undefined,
543
+ d: undefined,
544
+ l: undefined,
545
+ u: undefined
467
546
  });
468
- return _el$10;
547
+ return _el$13;
469
548
  })();
470
549
  };
471
550
  const slotInteractionProps = (owner, slot, suppressed, nativeControl = false) => {
@@ -508,8 +587,8 @@ const CalendarNavigationLink = props => {
508
587
  props.owner.onNavigateHref?.(props.href);
509
588
  };
510
589
  return props.owner.onNavigateHref ? (() => {
511
- var _el$11 = _$getNextElement(_tmpl$8);
512
- _$spread(_el$11, _$mergeProps(() => props.anchorProps, {
590
+ var _el$14 = _$getNextElement(_tmpl$1);
591
+ _$spread(_el$14, _$mergeProps(() => props.anchorProps, {
513
592
  get href() {
514
593
  return props.href;
515
594
  },
@@ -517,9 +596,9 @@ const CalendarNavigationLink = props => {
517
596
  "onPointerEnter": preload,
518
597
  "onFocus": preload
519
598
  }), false, true);
520
- _$insert(_el$11, () => props.children);
599
+ _$insert(_el$14, () => props.children);
521
600
  _$runHydrationEvents();
522
- return _el$11;
601
+ return _el$14;
523
602
  })() : props.owner.onNavigate ? _$createComponent(Link, _$mergeProps(() => props.anchorProps, {
524
603
  get href() {
525
604
  return props.href;
@@ -534,21 +613,21 @@ const CalendarNavigationLink = props => {
534
613
  return props.children;
535
614
  }
536
615
  })) : (() => {
537
- var _el$12 = _$getNextElement(_tmpl$8);
538
- _$spread(_el$12, _$mergeProps(() => props.anchorProps, {
616
+ var _el$15 = _$getNextElement(_tmpl$1);
617
+ _$spread(_el$15, _$mergeProps(() => props.anchorProps, {
539
618
  get href() {
540
619
  return props.href;
541
620
  },
542
621
  "onPointerEnter": preload,
543
622
  "onFocus": preload
544
623
  }), false, true);
545
- _$insert(_el$12, () => props.children);
624
+ _$insert(_el$15, () => props.children);
546
625
  _$runHydrationEvents();
547
- return _el$12;
626
+ return _el$15;
548
627
  })();
549
628
  };
550
629
  const CalendarViewLinks = props => {
551
- const messages = useUiMessages();
630
+ const calendarMessages = useCalendarMessages();
552
631
  const refs = [];
553
632
  const selectRelative = (currentIndex, direction) => {
554
633
  if (props.options.length === 0) return;
@@ -567,14 +646,18 @@ const CalendarViewLinks = props => {
567
646
  }
568
647
  };
569
648
  return (() => {
570
- var _el$13 = _$getNextElement(_tmpl$9);
571
- _$insert(_el$13, _$createComponent(For, {
649
+ var _el$16 = _$getNextElement(_tmpl$10);
650
+ _$insert(_el$16, _$createComponent(For, {
572
651
  get each() {
573
652
  return props.options;
574
653
  },
575
654
  children: (option, index) => {
576
655
  const active = () => (props.view === "mobile-month" ? "month" : props.view) === option.value;
577
- const href = () => props.owner.getViewHref?.(option.value) ?? "#";
656
+ const href = () => {
657
+ const day = props.focusDay;
658
+ const atDay = day && !active() ? props.owner.getDateHref?.(day, option.value) : undefined;
659
+ return atDay ?? props.owner.getViewHref?.(option.value) ?? "#";
660
+ };
578
661
  return _$createComponent(CalendarNavigationLink, {
579
662
  get owner() {
580
663
  return props.owner;
@@ -601,19 +684,35 @@ const CalendarViewLinks = props => {
601
684
  });
602
685
  }
603
686
  }));
604
- _$effect(() => _$setAttribute(_el$13, "aria-label", messages().calendarView));
605
- return _el$13;
687
+ _$effect(() => _$setAttribute(_el$16, "aria-label", calendarMessages().calendarView));
688
+ return _el$16;
606
689
  })();
607
690
  };
608
691
 
692
+ /**
693
+ * The same day some months later, or the last day of that month when it is shorter: a step from January 31 lands on
694
+ * February 28, never in March. stdlib's `addMonths` runs over into the next month.
695
+ */
696
+ const addMonthsClamped = (date, months, dateConfig) => {
697
+ const moved = calendar.addMonths(date, months, dateConfig);
698
+ if (calendar.formatDateKey(moved, dateConfig).slice(8) === calendar.formatDateKey(date, dateConfig).slice(8)) return moved;
699
+ return calendar.addDays(calendar.startOfMonth(moved, dateConfig), -1, dateConfig);
700
+ };
701
+
609
702
  /** Custom views page by day, like the day view. */
610
703
  const adjacentCalendarDate = (date, view, direction, dateConfig) => {
611
- if (view === "year") return calendar.addMonths(date, direction * 12, dateConfig);
612
- if (view === "month" || view === "mobile-month") return calendar.addMonths(date, direction, dateConfig);
704
+ if (view === "year") return addMonthsClamped(date, direction * 12, dateConfig);
705
+ if (view === "month" || view === "mobile-month") return addMonthsClamped(date, direction, dateConfig);
613
706
  return calendar.addDays(date, direction * (view === "week" ? 7 : 1), dateConfig);
614
707
  };
708
+
709
+ /** Opens a view at a day through the host's callbacks. Hosts may keep the view and the date apart, so both hear it. */
710
+ const openViewAt = (owner, date, view) => {
711
+ owner.onViewChange?.(view);
712
+ owner.onDateChange?.(date, view);
713
+ };
615
714
  const CalendarHeader = props => {
616
- const messages = useUiMessages();
715
+ const calendarMessages = useCalendarMessages();
617
716
  const dateConfig = () => ownerDateConfig(props.owner);
618
717
  const previous = () => adjacentCalendarDate(props.date, props.view, -1, dateConfig());
619
718
  const next = () => adjacentCalendarDate(props.date, props.view, 1, dateConfig());
@@ -632,8 +731,51 @@ const CalendarHeader = props => {
632
731
  if (props.view === "week") return `${formatDay(calendar.startOfWeek(props.date, dateConfig()), dateConfig())} - ${formatDay(calendar.addDays(calendar.startOfWeek(props.date, dateConfig()), 6, dateConfig()), dateConfig())}`;
633
732
  return formatMonth(props.date, dateConfig());
634
733
  };
734
+ /**
735
+ * The titles this view can show around the current date: the months of the year, the weeks of the month, or a day
736
+ * of each weekday in every month. Their widest one sets the title's width.
737
+ */
738
+ const titleWidths = createMemo(() => {
739
+ const context = dateConfig();
740
+ if (props.view === "year") return [];
741
+ const {
742
+ year
743
+ } = zonedYearMonth(props.date, context);
744
+ if (props.view === "month" || props.view === "mobile-month") return Array.from({
745
+ length: 12
746
+ }, (_, month) => formatMonth(zonedMonthDate(year, month, context), context));
747
+ if (props.view === "week") {
748
+ const first = calendar.startOfWeek(calendar.startOfMonth(props.date, context), context);
749
+ return Array.from({
750
+ length: 6
751
+ }, (_, week) => {
752
+ const start = calendar.addDays(first, week * 7, context);
753
+ return `${formatDay(start, context)} - ${formatDay(calendar.addDays(start, 6, context), context)}`;
754
+ });
755
+ }
756
+ return Array.from({
757
+ length: 12
758
+ }, (_, month) => month).flatMap(month => {
759
+ const first = zonedMonthDate(year, month, context);
760
+ return Array.from({
761
+ length: 7
762
+ }, (_, offset) => calendar.addDays(first, 21 + offset, context).toLocaleDateString(context.locale ?? "en", {
763
+ weekday: "long",
764
+ month: "long",
765
+ day: "numeric",
766
+ year: "numeric",
767
+ timeZone: context.timeZone
768
+ }));
769
+ });
770
+ });
635
771
  const goDate = date => props.owner.onDateChange?.(date, props.view);
636
772
  const goView = view => {
773
+ // Like the switcher's links, the other views open at the day selected in the month view.
774
+ const day = props.focusDay;
775
+ if (day && props.owner.onDateChange && view !== props.view) {
776
+ openViewAt(props.owner, day, view);
777
+ return;
778
+ }
637
779
  if (props.owner.onViewChange) {
638
780
  props.owner.onViewChange(view);
639
781
  return;
@@ -654,18 +796,18 @@ const CalendarHeader = props => {
654
796
  class: "k2b-calendar-header__nav-button"
655
797
  },
656
798
  get children() {
657
- var _el$14 = _$getNextElement(_tmpl$0);
658
- _$className(_el$14, `ti ${icon}`);
659
- return _el$14;
799
+ var _el$17 = _$getNextElement(_tmpl$11);
800
+ _$className(_el$17, `ti ${icon}`);
801
+ return _el$17;
660
802
  }
661
803
  }) : props.owner.onDateChange ? (() => {
662
- var _el$15 = _$getNextElement(_tmpl$1),
663
- _el$16 = _el$15.firstChild;
664
- _el$15.$$click = () => goDate(date);
665
- _$setAttribute(_el$15, "aria-label", label);
666
- _$className(_el$16, `ti ${icon}`);
804
+ var _el$18 = _$getNextElement(_tmpl$12),
805
+ _el$19 = _el$18.firstChild;
806
+ _el$18.$$click = () => goDate(date);
807
+ _$setAttribute(_el$18, "aria-label", label);
808
+ _$className(_el$19, `ti ${icon}`);
667
809
  _$runHydrationEvents();
668
- return _el$15;
810
+ return _el$18;
669
811
  })() : _$createComponent(CalendarNavigationLink, {
670
812
  get owner() {
671
813
  return props.owner;
@@ -677,9 +819,9 @@ const CalendarHeader = props => {
677
819
  class: "k2b-calendar-header__nav-button"
678
820
  },
679
821
  get children() {
680
- var _el$17 = _$getNextElement(_tmpl$0);
681
- _$className(_el$17, `ti ${icon}`);
682
- return _el$17;
822
+ var _el$20 = _$getNextElement(_tmpl$11);
823
+ _$className(_el$20, `ti ${icon}`);
824
+ return _el$20;
683
825
  }
684
826
  });
685
827
  };
@@ -687,9 +829,9 @@ const CalendarHeader = props => {
687
829
  const today = calendar.today(dateConfig());
688
830
  const href = props.owner.getDateHref?.(today, props.view);
689
831
  const label = (() => {
690
- var _el$18 = _$getNextElement(_tmpl$10);
691
- _$insert(_el$18, () => props.labels.today);
692
- return _el$18;
832
+ var _el$21 = _$getNextElement(_tmpl$13);
833
+ _$insert(_el$21, () => props.labels.today);
834
+ return _el$21;
693
835
  })();
694
836
  return (props.owner.onNavigateHref || props.owner.onNavigate) && href ? _$createComponent(CalendarNavigationLink, {
695
837
  get owner() {
@@ -738,27 +880,52 @@ const CalendarHeader = props => {
738
880
  label: props.labels.year
739
881
  }].filter(option => !props.owner.views || props.owner.views.includes(option.value)), ...(props.owner.customViews ?? [])]);
740
882
  return (() => {
741
- var _el$19 = _$getNextElement(_tmpl$12),
742
- _el$20 = _el$19.firstChild,
743
- _el$22 = _el$20.firstChild,
744
- [_el$23, _co$3] = _$getNextMarker(_el$22.nextSibling),
745
- _el$24 = _el$23.nextSibling,
746
- [_el$25, _co$4] = _$getNextMarker(_el$24.nextSibling),
747
- _el$21 = _el$25.nextSibling,
748
- _el$26 = _el$20.nextSibling,
749
- _el$27 = _el$26.firstChild,
750
- [_el$28, _co$5] = _$getNextMarker(_el$27.nextSibling),
751
- _el$29 = _el$28.nextSibling,
752
- [_el$30, _co$6] = _$getNextMarker(_el$29.nextSibling),
753
- _el$31 = _el$30.nextSibling,
754
- [_el$32, _co$7] = _$getNextMarker(_el$31.nextSibling),
755
- _el$34 = _el$26.nextSibling,
756
- [_el$35, _co$8] = _$getNextMarker(_el$34.nextSibling);
757
- _$insert(_el$20, () => navButton(previous(), "ti-chevron-left", props.labels.previous), _el$23, _co$3);
758
- _$insert(_el$20, () => navButton(next(), "ti-chevron-right", props.labels.next), _el$25, _co$4);
759
- _$insert(_el$21, title);
760
- _$insert(_el$26, todayButton, _el$28, _co$5);
761
- _$insert(_el$26, _$createComponent(Show, {
883
+ var _el$22 = _$getNextElement(_tmpl$16),
884
+ _el$23 = _el$22.firstChild,
885
+ _el$28 = _el$23.firstChild,
886
+ [_el$29, _co$4] = _$getNextMarker(_el$28.nextSibling),
887
+ _el$30 = _el$29.nextSibling,
888
+ [_el$31, _co$5] = _$getNextMarker(_el$30.nextSibling),
889
+ _el$24 = _el$31.nextSibling,
890
+ _el$25 = _el$24.firstChild,
891
+ _el$26 = _el$25.nextSibling,
892
+ [_el$27, _co$3] = _$getNextMarker(_el$26.nextSibling),
893
+ _el$41 = _el$23.nextSibling,
894
+ [_el$42, _co$9] = _$getNextMarker(_el$41.nextSibling),
895
+ _el$33 = _el$42.nextSibling,
896
+ _el$34 = _el$33.firstChild,
897
+ [_el$35, _co$6] = _$getNextMarker(_el$34.nextSibling),
898
+ _el$36 = _el$35.nextSibling,
899
+ [_el$37, _co$7] = _$getNextMarker(_el$36.nextSibling),
900
+ _el$38 = _el$37.nextSibling,
901
+ [_el$39, _co$8] = _$getNextMarker(_el$38.nextSibling),
902
+ _el$43 = _el$33.nextSibling,
903
+ [_el$44, _co$0] = _$getNextMarker(_el$43.nextSibling);
904
+ _$insert(_el$23, () => navButton(previous(), "ti-chevron-left", props.labels.previous), _el$29, _co$4);
905
+ _$insert(_el$23, () => navButton(next(), "ti-chevron-right", props.labels.next), _el$31, _co$5);
906
+ _$insert(_el$25, title);
907
+ _$insert(_el$24, _$createComponent(For, {
908
+ get each() {
909
+ return titleWidths();
910
+ },
911
+ children: candidate => (() => {
912
+ var _el$45 = _$getNextElement(_tmpl$17);
913
+ _$insert(_el$45, candidate);
914
+ return _el$45;
915
+ })()
916
+ }), _el$27, _co$3);
917
+ _$insert(_el$22, _$createComponent(Show, {
918
+ get when() {
919
+ return props.owner.toolbarContent;
920
+ },
921
+ get children() {
922
+ var _el$32 = _$getNextElement(_tmpl$14);
923
+ _$insert(_el$32, () => props.owner.toolbarContent);
924
+ return _el$32;
925
+ }
926
+ }), _el$42, _co$9);
927
+ _$insert(_el$33, todayButton, _el$35, _co$6);
928
+ _$insert(_el$33, _$createComponent(Show, {
762
929
  get when() {
763
930
  return _$memo(() => !!!props.owner.onViewChange)() && props.owner.getViewHref;
764
931
  },
@@ -767,7 +934,7 @@ const CalendarHeader = props => {
767
934
  value: () => props.view === "mobile-month" ? "month" : props.view,
768
935
  onValueChange: goView,
769
936
  get ariaLabel() {
770
- return messages().calendarView;
937
+ return calendarMessages().calendarView;
771
938
  },
772
939
  get options() {
773
940
  return viewOptions();
@@ -784,24 +951,29 @@ const CalendarHeader = props => {
784
951
  },
785
952
  get options() {
786
953
  return viewOptions();
954
+ },
955
+ get focusDay() {
956
+ return props.focusDay;
787
957
  }
788
958
  });
789
959
  }
790
- }), _el$30, _co$6);
791
- _$insert(_el$26, () => props.owner.toolbarActions, _el$32, _co$7);
792
- _$insert(_el$19, _$createComponent(Show, {
960
+ }), _el$37, _co$7);
961
+ _$insert(_el$33, () => props.owner.toolbarActions, _el$39, _co$8);
962
+ _$insert(_el$22, _$createComponent(Show, {
793
963
  get when() {
794
964
  return props.owner.navigationPending;
795
965
  },
796
966
  get children() {
797
- return _$getNextElement(_tmpl$11);
967
+ return _$getNextElement(_tmpl$15);
798
968
  }
799
- }), _el$35, _co$8);
800
- return _el$19;
969
+ }), _el$44, _co$0);
970
+ return _el$22;
801
971
  })();
802
972
  };
803
- const MonthView = props => {
804
- const messages = useUiMessages();
973
+
974
+ /** The compact month of `mobile-month`: a picker whose days link to their agenda. */
975
+ const MonthPickerView = props => {
976
+ const calendarMessages = useCalendarMessages();
805
977
  const dateConfig = createMemo(() => ownerDateConfig(props.owner));
806
978
  const [movePreview, setMovePreview] = createSignal(null);
807
979
  const [movingEventId, setMovingEventId] = createSignal("");
@@ -855,55 +1027,55 @@ const MonthView = props => {
855
1027
  };
856
1028
  onCleanup(() => cancelInteraction?.());
857
1029
  return (() => {
858
- var _el$36 = _$getNextElement(_tmpl$14),
859
- _el$37 = _el$36.firstChild,
860
- _el$39 = _el$37.firstChild,
861
- [_el$40, _co$9] = _$getNextMarker(_el$39.nextSibling),
862
- _el$41 = _el$40.nextSibling,
863
- [_el$42, _co$0] = _$getNextMarker(_el$41.nextSibling),
864
- _el$43 = _el$37.nextSibling,
865
- [_el$44, _co$1] = _$getNextMarker(_el$43.nextSibling);
866
- _$insert(_el$37, _$createComponent(Show, {
1030
+ var _el$46 = _$getNextElement(_tmpl$19),
1031
+ _el$47 = _el$46.firstChild,
1032
+ _el$49 = _el$47.firstChild,
1033
+ [_el$50, _co$1] = _$getNextMarker(_el$49.nextSibling),
1034
+ _el$51 = _el$50.nextSibling,
1035
+ [_el$52, _co$10] = _$getNextMarker(_el$51.nextSibling),
1036
+ _el$53 = _el$47.nextSibling,
1037
+ [_el$54, _co$11] = _$getNextMarker(_el$53.nextSibling);
1038
+ _$insert(_el$47, _$createComponent(Show, {
867
1039
  get when() {
868
1040
  return props.owner.withWeekNumbers;
869
1041
  },
870
1042
  get children() {
871
- var _el$38 = _$getNextElement(_tmpl$13);
872
- _$insert(_el$38, () => messages().weekShort);
873
- return _el$38;
1043
+ var _el$48 = _$getNextElement(_tmpl$18);
1044
+ _$insert(_el$48, () => calendarMessages().weekShort);
1045
+ return _el$48;
874
1046
  }
875
- }), _el$40, _co$9);
876
- _$insert(_el$37, _$createComponent(For, {
1047
+ }), _el$50, _co$1);
1048
+ _$insert(_el$47, _$createComponent(For, {
877
1049
  get each() {
878
1050
  return weekdays();
879
1051
  },
880
1052
  children: day => (() => {
881
- var _el$45 = _$getNextElement(_tmpl$13);
882
- _$insert(_el$45, day);
883
- return _el$45;
1053
+ var _el$55 = _$getNextElement(_tmpl$18);
1054
+ _$insert(_el$55, day);
1055
+ return _el$55;
884
1056
  })()
885
- }), _el$42, _co$0);
886
- _$insert(_el$36, _$createComponent(For, {
1057
+ }), _el$52, _co$10);
1058
+ _$insert(_el$46, _$createComponent(For, {
887
1059
  get each() {
888
1060
  return weeks();
889
1061
  },
890
1062
  children: week => (() => {
891
- var _el$46 = _$getNextElement(_tmpl$16),
892
- _el$48 = _el$46.firstChild,
893
- [_el$49, _co$10] = _$getNextMarker(_el$48.nextSibling),
894
- _el$50 = _el$49.nextSibling,
895
- [_el$51, _co$11] = _$getNextMarker(_el$50.nextSibling);
896
- _$insert(_el$46, _$createComponent(Show, {
1063
+ var _el$56 = _$getNextElement(_tmpl$21),
1064
+ _el$58 = _el$56.firstChild,
1065
+ [_el$59, _co$12] = _$getNextMarker(_el$58.nextSibling),
1066
+ _el$60 = _el$59.nextSibling,
1067
+ [_el$61, _co$13] = _$getNextMarker(_el$60.nextSibling);
1068
+ _$insert(_el$56, _$createComponent(Show, {
897
1069
  get when() {
898
1070
  return props.owner.withWeekNumbers;
899
1071
  },
900
1072
  get children() {
901
- var _el$47 = _$getNextElement(_tmpl$15);
902
- _$insert(_el$47, () => zonedWeekNumber(week[0], dateConfig()));
903
- return _el$47;
1073
+ var _el$57 = _$getNextElement(_tmpl$20);
1074
+ _$insert(_el$57, () => zonedWeekNumber(week[0], dateConfig()));
1075
+ return _el$57;
904
1076
  }
905
- }), _el$49, _co$10);
906
- _$insert(_el$46, _$createComponent(For, {
1077
+ }), _el$59, _co$12);
1078
+ _$insert(_el$56, _$createComponent(For, {
907
1079
  each: week,
908
1080
  children: day => {
909
1081
  const dayKey = calendar.formatDateKey(day, dateConfig());
@@ -931,25 +1103,25 @@ const MonthView = props => {
931
1103
  };
932
1104
  });
933
1105
  return (() => {
934
- var _el$52 = _$getNextElement(_tmpl$19),
935
- _el$68 = _el$52.firstChild,
936
- [_el$69, _co$17] = _$getNextMarker(_el$68.nextSibling),
937
- _el$54 = _el$69.nextSibling,
938
- _el$55 = _el$54.firstChild,
939
- [_el$56, _co$12] = _$getNextMarker(_el$55.nextSibling),
940
- _el$57 = _el$56.nextSibling,
941
- [_el$58, _co$13] = _$getNextMarker(_el$57.nextSibling),
942
- _el$59 = _el$54.nextSibling,
943
- _el$61 = _el$59.firstChild,
944
- [_el$62, _co$14] = _$getNextMarker(_el$61.nextSibling),
945
- _el$63 = _el$62.nextSibling,
946
- [_el$64, _co$15] = _$getNextMarker(_el$63.nextSibling),
947
- _el$65 = _el$64.nextSibling,
948
- [_el$66, _co$16] = _$getNextMarker(_el$65.nextSibling),
949
- _el$67 = _el$59.nextSibling;
950
- _$setAttribute(_el$52, "data-calendar-day-key", dayKey);
951
- _$setAttribute(_el$52, "data-outside", !sameMonth ? "true" : undefined);
952
- _$insert(_el$52, _$createComponent(Show, {
1106
+ var _el$62 = _$getNextElement(_tmpl$24),
1107
+ _el$78 = _el$62.firstChild,
1108
+ [_el$79, _co$19] = _$getNextMarker(_el$78.nextSibling),
1109
+ _el$64 = _el$79.nextSibling,
1110
+ _el$65 = _el$64.firstChild,
1111
+ [_el$66, _co$14] = _$getNextMarker(_el$65.nextSibling),
1112
+ _el$67 = _el$66.nextSibling,
1113
+ [_el$68, _co$15] = _$getNextMarker(_el$67.nextSibling),
1114
+ _el$69 = _el$64.nextSibling,
1115
+ _el$71 = _el$69.firstChild,
1116
+ [_el$72, _co$16] = _$getNextMarker(_el$71.nextSibling),
1117
+ _el$73 = _el$72.nextSibling,
1118
+ [_el$74, _co$17] = _$getNextMarker(_el$73.nextSibling),
1119
+ _el$75 = _el$74.nextSibling,
1120
+ [_el$76, _co$18] = _$getNextMarker(_el$75.nextSibling),
1121
+ _el$77 = _el$69.nextSibling;
1122
+ _$setAttribute(_el$62, "data-calendar-day-key", dayKey);
1123
+ _$setAttribute(_el$62, "data-outside", !sameMonth ? "true" : undefined);
1124
+ _$insert(_el$62, _$createComponent(Show, {
953
1125
  get when() {
954
1126
  return props.owner.onSlotActivate;
955
1127
  },
@@ -966,7 +1138,7 @@ const MonthView = props => {
966
1138
  get anchorProps() {
967
1139
  return {
968
1140
  class: "k2b-calendar-month__day-target",
969
- "aria-label": messages().openDate({
1141
+ "aria-label": calendarMessages().openDate({
970
1142
  label: dayLabel
971
1143
  })
972
1144
  };
@@ -975,10 +1147,10 @@ const MonthView = props => {
975
1147
  });
976
1148
  },
977
1149
  get children() {
978
- var _el$53 = _$getNextElement(_tmpl$17);
979
- _$spread(_el$53, _$mergeProps({
1150
+ var _el$63 = _$getNextElement(_tmpl$22);
1151
+ _$spread(_el$63, _$mergeProps({
980
1152
  get ["aria-label"]() {
981
- return messages().createEventOn({
1153
+ return calendarMessages().createEventOn({
982
1154
  label: dayLabel
983
1155
  });
984
1156
  }
@@ -991,20 +1163,20 @@ const MonthView = props => {
991
1163
  };
992
1164
  }, () => performance.now() < suppressSlotClickUntil, true)), false, false);
993
1165
  _$runHydrationEvents();
994
- return _el$53;
1166
+ return _el$63;
995
1167
  }
996
- }), _el$69, _co$17);
997
- _$insert(_el$54, _$createComponent(Show, {
1168
+ }), _el$79, _co$19);
1169
+ _$insert(_el$64, _$createComponent(Show, {
998
1170
  get when() {
999
1171
  return props.owner.onSlotActivate && href;
1000
1172
  },
1001
1173
  get fallback() {
1002
1174
  return (() => {
1003
- var _el$70 = _$getNextElement(_tmpl$20);
1004
- _$setAttribute(_el$70, "data-today", isToday ? "true" : undefined);
1005
- _$setAttribute(_el$70, "data-outside", !sameMonth ? "true" : undefined);
1006
- _$insert(_el$70, () => calendar.formatDayNumber(day, dateConfig()));
1007
- return _el$70;
1175
+ var _el$80 = _$getNextElement(_tmpl$25);
1176
+ _$setAttribute(_el$80, "data-today", isToday ? "true" : undefined);
1177
+ _$setAttribute(_el$80, "data-outside", !sameMonth ? "true" : undefined);
1178
+ _$insert(_el$80, () => calendar.formatDayNumber(day, dateConfig()));
1179
+ return _el$80;
1008
1180
  })();
1009
1181
  },
1010
1182
  children: dayHref => _$createComponent(CalendarNavigationLink, {
@@ -1019,7 +1191,7 @@ const MonthView = props => {
1019
1191
  class: "k2b-calendar-month__day-number",
1020
1192
  "data-today": isToday ? "true" : undefined,
1021
1193
  "data-outside": !sameMonth ? "true" : undefined,
1022
- "aria-label": messages().openDate({
1194
+ "aria-label": calendarMessages().openDate({
1023
1195
  label: dayLabel
1024
1196
  })
1025
1197
  };
@@ -1028,40 +1200,40 @@ const MonthView = props => {
1028
1200
  return calendar.formatDayNumber(day, dateConfig());
1029
1201
  }
1030
1202
  })
1031
- }), _el$56, _co$12);
1032
- _$insert(_el$54, _$createComponent(Show, {
1203
+ }), _el$66, _co$14);
1204
+ _$insert(_el$64, _$createComponent(Show, {
1033
1205
  when: dayBadge,
1034
1206
  children: badge => (() => {
1035
- var _el$71 = _$getNextElement(_tmpl$21),
1036
- _el$72 = _el$71.firstChild,
1037
- [_el$73, _co$18] = _$getNextMarker(_el$72.nextSibling),
1038
- _el$74 = _el$73.nextSibling,
1039
- [_el$75, _co$19] = _$getNextMarker(_el$74.nextSibling);
1040
- _$insert(_el$71, _$createComponent(Show, {
1207
+ var _el$81 = _$getNextElement(_tmpl$26),
1208
+ _el$82 = _el$81.firstChild,
1209
+ [_el$83, _co$20] = _$getNextMarker(_el$82.nextSibling),
1210
+ _el$84 = _el$83.nextSibling,
1211
+ [_el$85, _co$21] = _$getNextMarker(_el$84.nextSibling);
1212
+ _$insert(_el$81, _$createComponent(Show, {
1041
1213
  get when() {
1042
1214
  return badge().icon;
1043
1215
  },
1044
1216
  children: icon => (() => {
1045
- var _el$76 = _$getNextElement(_tmpl$0);
1046
- _$effect(() => _$className(_el$76, `k2b-calendar-month__badge-icon ti ti-${icon()}`));
1047
- return _el$76;
1217
+ var _el$86 = _$getNextElement(_tmpl$11);
1218
+ _$effect(() => _$className(_el$86, `k2b-calendar-month__badge-icon ti ti-${icon()}`));
1219
+ return _el$86;
1048
1220
  })()
1049
- }), _el$73, _co$18);
1050
- _$insert(_el$71, () => badge().label, _el$75, _co$19);
1051
- return _el$71;
1221
+ }), _el$83, _co$20);
1222
+ _$insert(_el$81, () => badge().label, _el$85, _co$21);
1223
+ return _el$81;
1052
1224
  })()
1053
- }), _el$58, _co$13);
1054
- _$insert(_el$59, _$createComponent(Show, {
1225
+ }), _el$68, _co$15);
1226
+ _$insert(_el$69, _$createComponent(Show, {
1055
1227
  get when() {
1056
1228
  return eventStack().preview;
1057
1229
  },
1058
1230
  get children() {
1059
- var _el$60 = _$getNextElement(_tmpl$18);
1060
- _$insert(_el$60, () => props.events.find(event => event.id === eventStack().preview.id)?.title ?? messages().moveEvent);
1061
- return _el$60;
1231
+ var _el$70 = _$getNextElement(_tmpl$23);
1232
+ _$insert(_el$70, () => props.events.find(event => event.id === eventStack().preview.id)?.title ?? calendarMessages().moveEvent);
1233
+ return _el$70;
1062
1234
  }
1063
- }), _el$62, _co$14);
1064
- _$insert(_el$59, _$createComponent(For, {
1235
+ }), _el$72, _co$16);
1236
+ _$insert(_el$69, _$createComponent(For, {
1065
1237
  get each() {
1066
1238
  return eventStack().visibleEvents;
1067
1239
  },
@@ -1081,8 +1253,8 @@ const MonthView = props => {
1081
1253
  return props.owner.onEventDrop ? (pointerEvent, markDragged) => startMove(pointerEvent, event, markDragged) : undefined;
1082
1254
  }
1083
1255
  })
1084
- }), _el$64, _co$15);
1085
- _$insert(_el$59, _$createComponent(Show, {
1256
+ }), _el$74, _co$17);
1257
+ _$insert(_el$69, _$createComponent(Show, {
1086
1258
  get when() {
1087
1259
  return eventStack().hiddenCount > 0;
1088
1260
  },
@@ -1096,56 +1268,1265 @@ const MonthView = props => {
1096
1268
  class: "k2b-calendar-month__more"
1097
1269
  },
1098
1270
  get children() {
1099
- return ["+", _$memo(() => eventStack().hiddenCount), " more"];
1271
+ return calendarMessages().calendarMoreEvents({
1272
+ count: eventStack().hiddenCount
1273
+ });
1100
1274
  }
1101
1275
  });
1102
1276
  }
1103
- }), _el$66, _co$16);
1104
- _$insert(_el$67, _$createComponent(For, {
1277
+ }), _el$76, _co$18);
1278
+ _$insert(_el$77, _$createComponent(For, {
1105
1279
  get each() {
1106
1280
  return events.slice(0, 4);
1107
1281
  },
1108
1282
  children: event => (() => {
1109
- var _el$77 = _$getNextElement(_tmpl$22);
1283
+ var _el$87 = _$getNextElement(_tmpl$27);
1110
1284
  _$effect(_p$ => {
1111
- var _v$32 = event.colorHex ? undefined : event.color ?? "blue",
1112
- _v$33 = event.colorHex ? {
1285
+ var _v$41 = event.colorHex ? undefined : event.color ?? "blue",
1286
+ _v$42 = event.colorHex ? {
1113
1287
  "background-color": event.colorHex
1114
1288
  } : undefined;
1115
- _v$32 !== _p$.e && _$setAttribute(_el$77, "data-color", _p$.e = _v$32);
1116
- _p$.t = _$style(_el$77, _v$33, _p$.t);
1289
+ _v$41 !== _p$.e && _$setAttribute(_el$87, "data-color", _p$.e = _v$41);
1290
+ _p$.t = _$style(_el$87, _v$42, _p$.t);
1117
1291
  return _p$;
1118
1292
  }, {
1119
1293
  e: undefined,
1120
1294
  t: undefined
1121
1295
  });
1122
- return _el$77;
1296
+ return _el$87;
1123
1297
  })()
1124
1298
  }));
1125
- _$effect(() => _$setAttribute(_el$52, "data-drop-preview", movePreview()?.start && calendar.formatDateKey(movePreview().start, dateConfig()) === dayKey ? "true" : undefined));
1126
- return _el$52;
1299
+ _$effect(() => _$setAttribute(_el$62, "data-drop-preview", movePreview()?.start && calendar.formatDateKey(movePreview().start, dateConfig()) === dayKey ? "true" : undefined));
1300
+ return _el$62;
1127
1301
  })();
1128
1302
  }
1129
- }), _el$51, _co$11);
1130
- _$effect(() => _$setAttribute(_el$46, "data-week-numbers", props.owner.withWeekNumbers ? "true" : undefined));
1131
- return _el$46;
1303
+ }), _el$61, _co$13);
1304
+ _$effect(() => _$setAttribute(_el$56, "data-week-numbers", props.owner.withWeekNumbers ? "true" : undefined));
1305
+ return _el$56;
1132
1306
  })()
1133
- }), _el$44, _co$1);
1307
+ }), _el$54, _co$11);
1134
1308
  _$effect(_p$ => {
1135
- var _v$30 = `auto repeat(${weeks().length}, ${props.compact ? "minmax(2.75rem, auto)" : "minmax(5rem, 1fr)"})`,
1136
- _v$31 = props.owner.withWeekNumbers ? "true" : undefined;
1137
- _v$30 !== _p$.e && _$setStyleProperty(_el$36, "grid-template-rows", _p$.e = _v$30);
1138
- _v$31 !== _p$.t && _$setAttribute(_el$37, "data-week-numbers", _p$.t = _v$31);
1309
+ var _v$39 = `auto repeat(${weeks().length}, ${props.compact ? "minmax(2.75rem, auto)" : "minmax(5rem, 1fr)"})`,
1310
+ _v$40 = props.owner.withWeekNumbers ? "true" : undefined;
1311
+ _v$39 !== _p$.e && _$setStyleProperty(_el$46, "grid-template-rows", _p$.e = _v$39);
1312
+ _v$40 !== _p$.t && _$setAttribute(_el$47, "data-week-numbers", _p$.t = _v$40);
1139
1313
  return _p$;
1140
1314
  }, {
1141
1315
  e: undefined,
1142
1316
  t: undefined
1143
1317
  });
1144
- return _el$36;
1318
+ return _el$46;
1319
+ })();
1320
+ };
1321
+
1322
+ /** One entry of the month grid: its whole range, and the days it covers as `YYYY-MM-DD` keys. */
1323
+
1324
+ /** Lane height and gap of the month entries, in rem; the stylesheet reads both from the grid's custom properties. */
1325
+ const MONTH_LANE_REM = 1.25;
1326
+ const MONTH_LANE_GAP_REM = 0.125;
1327
+ /** Rows drawn before the browser has measured the cells, as in the server response. */
1328
+ const MONTH_DEFAULT_LANES = 3;
1329
+ /** Room a bar keeps beside its title and date hint: padding, torn edge, gap, and an icon such as a task box or a flag. */
1330
+ const MONTH_HINT_SLACK_REM = 2.25;
1331
+ const dayKeyNumber = key => {
1332
+ const [year = "1970", month = "1", day = "1"] = key.split("-");
1333
+ return Date.UTC(Number(year), Number(month) - 1, Number(day)) / 86_400_000;
1334
+ };
1335
+ const orderedSelection = (anchor, focus) => anchor <= focus ? {
1336
+ first: anchor,
1337
+ last: focus
1338
+ } : {
1339
+ first: focus,
1340
+ last: anchor
1341
+ };
1342
+
1343
+ /** Groups the per-day pieces of the events back into one entry each: bars first, then the others by time. */
1344
+ const monthItems = events => {
1345
+ const items = new Map();
1346
+ for (const piece of events) {
1347
+ const key = `${piece.id}\u0000${piece.sourceStartDate.getTime()}`;
1348
+ const item = items.get(key);
1349
+ if (item) {
1350
+ if (piece.dayKey < item.firstKey) item.firstKey = piece.dayKey;
1351
+ if (piece.dayKey > item.lastKey) item.lastKey = piece.dayKey;
1352
+ item.days.set(piece.dayKey, piece);
1353
+ continue;
1354
+ }
1355
+ items.set(key, {
1356
+ key,
1357
+ event: {
1358
+ ...piece,
1359
+ startDate: piece.sourceStartDate,
1360
+ endDate: piece.sourceEndDate
1361
+ },
1362
+ firstKey: piece.dayKey,
1363
+ lastKey: piece.dayKey,
1364
+ bar: false,
1365
+ days: new Map([[piece.dayKey, piece]])
1366
+ });
1367
+ }
1368
+ for (const item of items.values()) item.bar = item.firstKey !== item.lastKey || Boolean(item.event.allDay && item.event.display !== "marker");
1369
+ 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));
1370
+ };
1371
+
1372
+ /** Places a calendar popover below its anchor when there is room and above it otherwise, inside the viewport. */
1373
+ const placeCalendarPopover = (anchor, popover) => {
1374
+ const margin = 8;
1375
+ const gap = 4;
1376
+ const rect = anchor.getBoundingClientRect();
1377
+ const width = Math.min(popover.offsetWidth || 288, window.innerWidth - margin * 2);
1378
+ const height = popover.offsetHeight;
1379
+ const left = Math.max(margin, Math.min(rect.left, window.innerWidth - width - margin));
1380
+ const roomBelow = window.innerHeight - rect.bottom - gap - margin;
1381
+ const above = height > roomBelow && rect.top - gap - margin > roomBelow;
1382
+ const top = above ? Math.max(margin, rect.top - height - gap) : Math.min(rect.bottom + gap, window.innerHeight - height - margin);
1383
+ popover.style.left = `${left}px`;
1384
+ popover.style.top = `${Math.max(margin, top)}px`;
1385
+ };
1386
+ let measureContext;
1387
+ /** 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. */
1388
+ const textWidth = (text, font) => {
1389
+ measureContext ??= typeof document === "undefined" ? null : document.createElement("canvas").getContext("2d");
1390
+ if (!measureContext) return Number.POSITIVE_INFINITY;
1391
+ measureContext.font = font;
1392
+ return measureContext.measureText(text).width;
1393
+ };
1394
+
1395
+ /** Follows a calendar link the way the calendar's own links do: through the host's navigation when it has one. */
1396
+ const followCalendarHref = (owner, href) => {
1397
+ if (owner.onNavigateHref) owner.onNavigateHref(href);else window.location.assign(href);
1398
+ };
1399
+ const PRINTABLE_KEY = /^.$/u;
1400
+
1401
+ /**
1402
+ * The month grid. A click selects a day and never navigates, a drag or Shift selects a range, and the arrow keys move
1403
+ * the selection. The quick create opens at the selection: quietly after a click, with the focus after a drag, a
1404
+ * double-click, Enter, or N. Every event is one bar per week row in a lane it keeps on each of its days, and each
1405
+ * cell shows as many entries as its height holds.
1406
+ */
1407
+ const MonthView = props => {
1408
+ const calendarMessages = useCalendarMessages();
1409
+ const dateConfig = createMemo(() => ownerDateConfig(props.owner));
1410
+ // The shown month and its grid change only with the month, so a refresh of the same month keeps every cell and its
1411
+ // focus.
1412
+ const month = createMemo(() => zonedYearMonth(props.date, dateConfig()), undefined, {
1413
+ equals: (previous, next) => previous.year === next.year && previous.month === next.month
1414
+ });
1415
+ const weeks = createMemo(() => calendar.getMonthGrid(month().year, month().month, dateConfig()).map(week => week.map(day => ({
1416
+ day,
1417
+ key: calendar.formatDateKey(day, dateConfig())
1418
+ }))), undefined, {
1419
+ equals: (previous, next) => previous.map(week => week[0]?.key).join() === next.map(week => week[0]?.key).join()
1420
+ });
1421
+ const weekdays = createMemo(() => calendar.weekdays(dateConfig()));
1422
+ const todayKey = createMemo(() => calendar.formatDateKey(props.now, dateConfig()));
1423
+ const items = createMemo(() => monthItems(props.events));
1424
+ const weekLayouts = createMemo(() => weeks().map(week => layoutMonthWeek(week.map(entry => entry.key), items().map(item => ({
1425
+ item,
1426
+ firstKey: item.firstKey,
1427
+ lastKey: item.lastKey,
1428
+ bar: item.bar
1429
+ })))));
1430
+ const [capacities, setCapacities] = createSignal([]);
1431
+ const [cellWidth, setCellWidth] = createSignal(0);
1432
+ const [barFont, setBarFont] = createSignal("");
1433
+ const [anchorKey, setAnchorKey] = createSignal(null);
1434
+ const [focusKey, setFocusKey] = createSignal(null);
1435
+ const [popover, setPopover] = createSignal(null);
1436
+ /** Whether the quick create holds the focus; until then the grid keeps it. */
1437
+ const [createActive, setCreateActive] = createSignal(false);
1438
+ const [linkedItem, setLinkedItem] = createSignal("");
1439
+ const [movePreview, setMovePreview] = createSignal(null);
1440
+ const [movingEventId, setMovingEventId] = createSignal("");
1441
+ const cells = new Map();
1442
+ let popoverElement;
1443
+ let cancelInteraction;
1444
+ let suppressClickUntil = 0;
1445
+ let lastPointer = "mouse";
1446
+ let menuKey = null;
1447
+ /** The day to select once paging with Page Up or Page Down has shown its month. */
1448
+ let pendingKey = null;
1449
+ const selection = createMemo(() => {
1450
+ const anchor = anchorKey();
1451
+ const focus = focusKey();
1452
+ return anchor && focus ? orderedSelection(anchor, focus) : null;
1453
+ });
1454
+ const parseKey = key => calendar.parseCalendarDate(key, dateConfig());
1455
+ const rangeOf = range => ({
1456
+ start: parseKey(range.first),
1457
+ end: calendar.addDays(parseKey(range.last), 1, dateConfig()),
1458
+ allDay: true
1459
+ });
1460
+ const visibleKeys = createMemo(() => weeks().flatMap(week => week.map(entry => entry.key)));
1461
+ const rovingKey = createMemo(() => {
1462
+ const keys = visibleKeys();
1463
+ const focus = focusKey();
1464
+ if (focus && keys.includes(focus)) return focus;
1465
+ if (keys.includes(todayKey())) return todayKey();
1466
+ return calendar.formatDateKey(zonedMonthDate(month().year, month().month, dateConfig()), dateConfig());
1467
+ });
1468
+ const dropRange = createMemo(() => {
1469
+ const preview = movePreview();
1470
+ if (!preview) return null;
1471
+ const keys = previewSegments(preview, visibleKeys().map(parseKey), dateConfig()).map(piece => piece.dayKey);
1472
+ if (keys.length === 0) return null;
1473
+ keys.sort();
1474
+ return {
1475
+ first: keys[0],
1476
+ last: keys[keys.length - 1]
1477
+ };
1478
+ });
1479
+ const within = (range, key) => Boolean(range && key >= range.first && key <= range.last);
1480
+ /** Where a day sits in the selection: alone, at its start or end, or in between. */
1481
+ const selectionPart = key => {
1482
+ const range = selection();
1483
+ if (!range || !within(range, key)) return undefined;
1484
+ if (range.first === range.last) return "single";
1485
+ return key === range.first ? "start" : key === range.last ? "end" : "middle";
1486
+ };
1487
+ const select = (anchor, focus = anchor) => {
1488
+ setAnchorKey(anchor);
1489
+ setFocusKey(focus);
1490
+ };
1491
+ // The host learns every change of the selected days, and a new month starts without a selection. The selection
1492
+ // goes with the view, so switching to another view reports that nothing is selected.
1493
+ createEffect(on(selection, range => props.owner.onSelectionChange?.(range ? rangeOf(range) : null), {
1494
+ defer: true
1495
+ }));
1496
+ onCleanup(() => {
1497
+ if (untrack(selection)) props.owner.onSelectionChange?.(null);
1498
+ });
1499
+ createEffect(on(selection, range => props.onFocusDay?.(range ? parseKey(range.first) : null)));
1500
+ createEffect(on(month, () => {
1501
+ setPopover(null);
1502
+ const key = pendingKey;
1503
+ pendingKey = null;
1504
+ if (key && visibleKeys().includes(key)) {
1505
+ select(key);
1506
+ queueMicrotask(() => focusCell(key));
1507
+ } else select(null);
1508
+ }, {
1509
+ defer: true
1510
+ }));
1511
+ const dayLabel = day => day.toLocaleDateString(dateConfig().locale ?? "en", {
1512
+ weekday: "long",
1513
+ year: "numeric",
1514
+ month: "long",
1515
+ day: "numeric",
1516
+ timeZone: dateConfig().timeZone
1517
+ });
1518
+ const shortDayLabel = (key, withMonth = true) => parseKey(key).toLocaleDateString(dateConfig().locale ?? "en", {
1519
+ day: "numeric",
1520
+ ...(withMonth ? {
1521
+ month: "short"
1522
+ } : {}),
1523
+ timeZone: dateConfig().timeZone
1524
+ });
1525
+ const monthDayLabel = (date, withTime) => date.toLocaleString(dateConfig().locale ?? "en", {
1526
+ month: "long",
1527
+ day: "numeric",
1528
+ ...(withTime ? {
1529
+ hour: "2-digit",
1530
+ minute: "2-digit"
1531
+ } : {}),
1532
+ timeZone: dateConfig().timeZone
1533
+ });
1534
+ /** A long event names the days it spans; a one-day event keeps the chip's own title and time. */
1535
+ const itemLabel = item => {
1536
+ if (item.firstKey === item.lastKey) return undefined;
1537
+ const allDay = Boolean(item.event.allDay);
1538
+ return calendarMessages().calendarEventTime({
1539
+ title: item.event.title,
1540
+ start: monthDayLabel(allDay ? parseKey(item.firstKey) : item.event.sourceStartDate, !allDay),
1541
+ end: monthDayLabel(allDay ? parseKey(item.lastKey) : item.event.sourceEndDate, !allDay)
1542
+ });
1543
+ };
1544
+ /** The start time before the title of a one-day entry; bars and all-day entries show none. */
1545
+ const leadingTime = item => item.bar || item.event.allDay ? undefined : formatTime(item.event.sourceStartDate, dateConfig());
1546
+ /** The day at a torn end of a bar, with its month when that day lies outside the shown month. */
1547
+ const hintDate = target => ({
1548
+ day: Number(target.slice(8, 10)),
1549
+ month: Number(target.slice(0, 4)) === month().year && Number(target.slice(5, 7)) === month().month + 1 ? undefined : parseKey(target).toLocaleDateString(dateConfig().locale ?? "en", {
1550
+ month: "short",
1551
+ timeZone: dateConfig().timeZone
1552
+ }).replace(/\.$/, "")
1553
+ });
1554
+ const selectionHeading = range => {
1555
+ if (range.first === range.last) return parseKey(range.first).toLocaleDateString(dateConfig().locale ?? "en", {
1556
+ weekday: "long",
1557
+ month: "long",
1558
+ day: "numeric",
1559
+ timeZone: dateConfig().timeZone
1560
+ });
1561
+ const days = dayKeyNumber(range.last) - dayKeyNumber(range.first) + 1;
1562
+ return calendarMessages().calendarSelectedDays({
1563
+ start: shortDayLabel(range.first),
1564
+ end: shortDayLabel(range.last),
1565
+ count: days
1566
+ });
1567
+ };
1568
+ const viewAvailable = view => !props.owner.views || props.owner.views.includes(view);
1569
+ const viewHref = (key, view) => viewAvailable(view) ? props.owner.getDateHref?.(parseKey(key), view) : undefined;
1570
+ /** Whether the calendar can open another view at a day: through a link, or through the host's date change. */
1571
+ const canOpenView = view => viewAvailable(view) && Boolean(props.owner.getDateHref || props.owner.onDateChange);
1572
+ const openView = (key, view) => {
1573
+ const href = viewHref(key, view);
1574
+ if (href) followCalendarHref(props.owner, href);else openViewAt(props.owner, parseKey(key), view);
1575
+ };
1576
+ /** The calendar's own entries of the day menu, Open day and Open week, need no application entries. */
1577
+ const hasMenu = () => Boolean(props.owner.selectionMenu) || canOpenView("day") || canOpenView("week");
1578
+
1579
+ /** The day cell under a point, from the cells' boxes: a bar lies over days that are not its parent. */
1580
+ const dayKeyAtPoint = (clientX, clientY) => {
1581
+ for (const [key, cell] of cells) {
1582
+ if (!cell.isConnected) continue;
1583
+ const rect = cell.getBoundingClientRect();
1584
+ if (clientX >= rect.left && clientX < rect.right && clientY >= rect.top && clientY < rect.bottom) return key;
1585
+ }
1586
+ return null;
1587
+ };
1588
+ const focusCell = key => cells.get(key)?.focus({
1589
+ preventScroll: true
1590
+ });
1591
+ const closePopover = (restoreFocus = true) => {
1592
+ if (!popover()) return;
1593
+ setPopover(null);
1594
+ setCreateActive(false);
1595
+ if (restoreFocus) focusCell(rovingKey());
1596
+ };
1597
+ const popoverFocusable = () => popoverElement?.querySelector("input,textarea,select,button,a[href],[tabindex]:not([tabindex='-1'])") ?? null;
1598
+
1599
+ /**
1600
+ * Opens the quick create at the selection. Quietly, it only shows beside the grid, which keeps the focus until the
1601
+ * person types or tabs into it; otherwise it takes the focus at once.
1602
+ */
1603
+ const openCreate = (range, options) => {
1604
+ if (!props.owner.renderQuickCreate) return false;
1605
+ const anchor = cells.get(focusKey() && within(range, focusKey()) ? focusKey() : range.last);
1606
+ if (!anchor) return false;
1607
+ setCreateActive(options.active);
1608
+ setPopover({
1609
+ kind: "create",
1610
+ range,
1611
+ anchor,
1612
+ create: options.create
1613
+ });
1614
+ return true;
1615
+ };
1616
+ const activateCreate = () => {
1617
+ if (popover()?.kind !== "create") return false;
1618
+ setCreateActive(true);
1619
+ popoverFocusable()?.focus();
1620
+ return true;
1621
+ };
1622
+ /** Enter, a double-click, and N create on the selection, with the quick create or the host's own create action. */
1623
+ const createOnSelection = () => {
1624
+ const range = selection();
1625
+ if (!range) return;
1626
+ if (openCreate(range, {
1627
+ active: true
1628
+ })) return;
1629
+ if (props.owner.onSlotActivate) props.owner.onSlotActivate(rangeOf(range));
1630
+ };
1631
+ const openDayList = key => {
1632
+ const anchor = cells.get(key);
1633
+ if (!anchor) return;
1634
+ setCreateActive(true);
1635
+ setPopover({
1636
+ kind: "day",
1637
+ dayKey: key,
1638
+ anchor
1639
+ });
1640
+ };
1641
+ /** A quiet quick create follows the selection; any other popover closes when the selection changes. */
1642
+ const followSelection = () => {
1643
+ const current = popover();
1644
+ const range = selection();
1645
+ if (!current) return;
1646
+ if (current.kind === "create" && !createActive() && range) openCreate(range, {
1647
+ active: false
1648
+ });else closePopover(false);
1649
+ };
1650
+ const pageTo = target => {
1651
+ const date = parseKey(target);
1652
+ const href = props.owner.getDateHref?.(date, "month");
1653
+ // Only a month that is on its way may select the day, so a host that cannot page never leaves one behind.
1654
+ if (props.owner.onDateChange) {
1655
+ pendingKey = target;
1656
+ props.owner.onDateChange(date, "month");
1657
+ } else if (href) {
1658
+ pendingKey = target;
1659
+ followCalendarHref(props.owner, href);
1660
+ }
1661
+ };
1662
+ const moveFocus = (key, extend) => {
1663
+ if (!visibleKeys().includes(key)) {
1664
+ pageTo(key);
1665
+ return;
1666
+ }
1667
+ if (extend) select(anchorKey() ?? focusKey() ?? key, key);else select(key);
1668
+ focusCell(key);
1669
+ followSelection();
1670
+ };
1671
+ const onCellKeyDown = (event, key) => {
1672
+ if (event.target !== event.currentTarget || event.ctrlKey || event.metaKey || event.altKey) return;
1673
+ const current = popover();
1674
+ const quiet = current?.kind === "create" && !createActive();
1675
+ // The quiet quick create takes over once the person types or tabs into it. Space stays the grid's key for the day
1676
+ // list; N is a title's first letter like any other, as the quick create it would open is already there.
1677
+ if (quiet && (event.key === "Tab" && !event.shiftKey || PRINTABLE_KEY.test(event.key) && event.key !== " ")) {
1678
+ const field = popoverFocusable();
1679
+ if (field) {
1680
+ if (event.key === "Tab") event.preventDefault();
1681
+ setCreateActive(true);
1682
+ field.focus();
1683
+ return;
1684
+ }
1685
+ }
1686
+ const day = parseKey(key);
1687
+ const shift = days => calendar.formatDateKey(calendar.addDays(day, days, dateConfig()), dateConfig());
1688
+ const weekday = (dayKeyNumber(key) - dayKeyNumber(calendar.formatDateKey(calendar.startOfWeek(day, dateConfig()), dateConfig()))) % 7;
1689
+ const target = event.key === "ArrowLeft" ? shift(-1) : event.key === "ArrowRight" ? shift(1) : event.key === "ArrowUp" ? shift(-7) : event.key === "ArrowDown" ? shift(7) : event.key === "Home" ? shift(-weekday) : event.key === "End" ? shift(6 - weekday) : null;
1690
+ if (target) {
1691
+ event.preventDefault();
1692
+ moveFocus(target, event.shiftKey);
1693
+ return;
1694
+ }
1695
+ if (event.key === "PageUp" || event.key === "PageDown") {
1696
+ event.preventDefault();
1697
+ pageTo(calendar.formatDateKey(addMonthsClamped(day, event.key === "PageUp" ? -1 : 1, dateConfig()), dateConfig()));
1698
+ return;
1699
+ }
1700
+ if (event.key === "Enter" || (event.key === "n" || event.key === "N") && !event.shiftKey) {
1701
+ event.preventDefault();
1702
+ if (!within(selection(), key)) select(key);
1703
+ createOnSelection();
1704
+ return;
1705
+ }
1706
+ if (event.key === " ") {
1707
+ event.preventDefault();
1708
+ if (!within(selection(), key)) select(key);
1709
+ openDayList(key);
1710
+ return;
1711
+ }
1712
+ if (event.key === "Escape") {
1713
+ if (current) closePopover(false);else if (selection()) select(null);else return;
1714
+ event.preventDefault();
1715
+ return;
1716
+ }
1717
+ // The keyboard opens the day's menu where the day is, as a right-click there would.
1718
+ if (hasMenu() && (event.key === "ContextMenu" || event.shiftKey && event.key === "F10")) {
1719
+ event.preventDefault();
1720
+ event.stopPropagation();
1721
+ menuKey = key;
1722
+ const rect = event.currentTarget.getBoundingClientRect();
1723
+ event.currentTarget?.dispatchEvent(new MouseEvent("contextmenu", {
1724
+ bubbles: true,
1725
+ cancelable: true,
1726
+ clientX: rect.left + 12,
1727
+ clientY: rect.top + 12
1728
+ }));
1729
+ }
1730
+ };
1731
+ const fromControl = event => event.target instanceof Element && Boolean(event.target.closest("a,button,[data-calendar-event],.k2b-calendar-month__lanes > *"));
1732
+ const onCellClick = (event, key) => {
1733
+ if (fromControl(event) || performance.now() < suppressClickUntil) return;
1734
+ // A second tap on the one selected day opens the quick create, as a double-click does with a mouse.
1735
+ if (lastPointer === "touch") {
1736
+ const range = selection();
1737
+ if (range && range.first === key && range.last === key && openCreate(range, {
1738
+ active: true
1739
+ })) return;
1740
+ select(key);
1741
+ closePopover(false);
1742
+ return;
1743
+ }
1744
+ if (event.shiftKey && anchorKey()) select(anchorKey(), key);else select(key);
1745
+ focusCell(key);
1746
+ const range = selection();
1747
+ if (range) openCreate(range, {
1748
+ active: false
1749
+ });
1750
+ };
1751
+ const onCellDoubleClick = (event, key) => {
1752
+ if (fromControl(event) || lastPointer === "touch") return;
1753
+ event.preventDefault();
1754
+ if (!within(selection(), key)) select(key);
1755
+ if (popover()?.kind === "create") activateCreate();else createOnSelection();
1756
+ };
1757
+ /** The day under the pointer: a bar that spans several days sits in the cell of its first day. */
1758
+ const pressedKey = (event, key) => dayKeyAtPoint(event.clientX, event.clientY) ?? key;
1759
+ const onCellPointerDown = (event, key) => {
1760
+ lastPointer = event.pointerType;
1761
+ // The menu acts on the pressed day, or on the selection when the press is inside it.
1762
+ menuKey = pressedKey(event, key);
1763
+ if (event.pointerType !== "mouse" || event.button !== 0 || event.shiftKey || fromControl(event)) return;
1764
+ cancelInteraction?.();
1765
+ cancelInteraction = startCalendarPointerSession({
1766
+ event,
1767
+ resolve: (clientX, clientY) => dayKeyAtPoint(clientX, clientY),
1768
+ onActivate: () => {
1769
+ suppressClickUntil = performance.now() + 400;
1770
+ closePopover(false);
1771
+ select(key);
1772
+ },
1773
+ onPreview: current => select(key, current),
1774
+ onCommit: current => {
1775
+ select(key, current);
1776
+ focusCell(current);
1777
+ const range = orderedSelection(key, current);
1778
+ openCreate(range, {
1779
+ active: range.first !== range.last
1780
+ });
1781
+ },
1782
+ onCancel: () => select(key)
1783
+ });
1784
+ };
1785
+ const onMenuOpen = () => {
1786
+ closePopover(false);
1787
+ const key = menuKey;
1788
+ if (key && !within(selection(), key)) select(key);
1789
+ };
1790
+ // Until a day is selected, the menu acts on the day that takes focus, so it is never empty.
1791
+ const menuItems = createMemo(() => {
1792
+ if (!hasMenu()) return [];
1793
+ const range = selection() ?? {
1794
+ first: rovingKey(),
1795
+ last: rovingKey()
1796
+ };
1797
+ const own = props.owner.selectionMenu?.(rangeOf(range), {
1798
+ quickCreate: create => {
1799
+ select(range.first, range.last);
1800
+ if (!openCreate(range, {
1801
+ active: true,
1802
+ create
1803
+ })) props.owner.onSlotActivate?.(rangeOf(range));
1804
+ }
1805
+ }) ?? [];
1806
+ const actions = own.filter(item => !("items" in item));
1807
+ const sections = own.filter(item => "items" in item);
1808
+ const navigation = [...(canOpenView("day") ? [{
1809
+ label: calendarMessages().calendarOpenDay,
1810
+ icon: "ti ti-zoom-in",
1811
+ action: () => openView(range.first, "day")
1812
+ }] : []), ...(canOpenView("week") ? [{
1813
+ label: calendarMessages().calendarOpenWeek,
1814
+ icon: "ti ti-calendar-week",
1815
+ action: () => openView(range.first, "week")
1816
+ }] : []), ...(range.first !== range.last ? [{
1817
+ label: calendarMessages().calendarClearSelection,
1818
+ icon: "ti ti-x",
1819
+ action: () => select(null)
1820
+ }] : [])];
1821
+ const groups = [{
1822
+ items: actions
1823
+ }, ...sections, {
1824
+ items: navigation
1825
+ }].filter(section => section.items.length > 0);
1826
+ // The first group names the days the menu acts on, also when the calendar's own entries are all it has.
1827
+ const [first, ...rest] = groups;
1828
+ return first && !first.sectionLabel ? [{
1829
+ ...first,
1830
+ sectionLabel: selectionHeading(range)
1831
+ }, ...rest] : groups;
1832
+ });
1833
+ const clearMove = () => {
1834
+ setMovePreview(null);
1835
+ setMovingEventId("");
1836
+ };
1837
+ const startMove = (pointerEvent, item, markDragged) => {
1838
+ if (!props.owner.onEventDrop) return;
1839
+ const event = item.event;
1840
+ const grabbed = dayKeyAtPoint(pointerEvent.clientX, pointerEvent.clientY) ?? item.firstKey;
1841
+ const firstDay = startOfDay(event.sourceStartDate, dateConfig());
1842
+ cancelInteraction?.();
1843
+ cancelInteraction = startCalendarPointerSession({
1844
+ event: pointerEvent,
1845
+ resolve: (clientX, clientY) => {
1846
+ const key = dayKeyAtPoint(clientX, clientY);
1847
+ if (!key) return null;
1848
+ // The event moves by as many days as the pointer, wherever on the bar it was grabbed.
1849
+ const day = calendar.addDays(firstDay, dayKeyNumber(key) - dayKeyNumber(grabbed), dateConfig());
1850
+ return {
1851
+ id: event.id,
1852
+ title: event.title,
1853
+ ...moveEventToDay(event, day, dateConfig())
1854
+ };
1855
+ },
1856
+ onActivate: () => {
1857
+ markDragged();
1858
+ suppressClickUntil = performance.now() + 400;
1859
+ closePopover(false);
1860
+ setMovingEventId(event.id);
1861
+ },
1862
+ onPreview: setMovePreview,
1863
+ onCommit: next => {
1864
+ clearMove();
1865
+ if (eventTimeChanged(event, next)) props.owner.onEventDrop?.(event, next);
1866
+ },
1867
+ onCancel: clearMove
1868
+ });
1869
+ };
1870
+
1871
+ // Each week row measures the room below its day numbers; the rows only resize with the grid, never with content.
1872
+ let observer;
1873
+ const lanesOf = new WeakMap();
1874
+ const measure = (element, week) => {
1875
+ const style = getComputedStyle(element);
1876
+ const rootSize = Number.parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;
1877
+ const capacity = monthLaneCapacity(element.clientHeight, MONTH_LANE_REM * rootSize, MONTH_LANE_GAP_REM * rootSize);
1878
+ setCapacities(current => {
1879
+ if (current[week] === capacity) return current;
1880
+ const next = [...current];
1881
+ next[week] = capacity;
1882
+ return next;
1883
+ });
1884
+ if (week === 0) {
1885
+ setCellWidth(element.clientWidth);
1886
+ setBarFont(`600 ${0.6875 * rootSize}px ${style.fontFamily}`);
1887
+ }
1888
+ };
1889
+ const observeLanes = (element, week) => {
1890
+ lanesOf.set(element, week);
1891
+ if (typeof ResizeObserver === "undefined") return;
1892
+ observer ??= new ResizeObserver(entries => {
1893
+ for (const entry of entries) {
1894
+ const index = lanesOf.get(entry.target);
1895
+ if (index !== undefined) measure(entry.target, index);
1896
+ }
1897
+ });
1898
+ observer.observe(element);
1899
+ onCleanup(() => observer?.unobserve(element));
1900
+ };
1901
+ /** A date hint shows only when the bar holds its title and the hint whole; screen readers get the range anyway. */
1902
+ const hintFits = (title, hint, span) => {
1903
+ const width = cellWidth();
1904
+ const font = barFont();
1905
+ if (width <= 0 || !font) return false;
1906
+ const rootSize = Number.parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;
1907
+ return textWidth(title, font) + textWidth(hint, font) + MONTH_HINT_SLACK_REM * rootSize <= span * width;
1908
+ };
1909
+ createEffect(() => {
1910
+ const current = popover();
1911
+ const element = popoverElement;
1912
+ if (!element) return;
1913
+ if (!current) {
1914
+ if (element.matches(":popover-open")) element.hidePopover();
1915
+ return;
1916
+ }
1917
+ if (!element.matches(":popover-open")) element.showPopover();
1918
+ const focus = untrack(createActive);
1919
+ queueMicrotask(() => {
1920
+ if (popover() !== current || !element.isConnected) return;
1921
+ placeCalendarPopover(current.anchor, element);
1922
+ if (focus) popoverFocusable()?.focus();
1923
+ });
1924
+ });
1925
+ onMount(() => {
1926
+ const reposition = () => {
1927
+ const current = popover();
1928
+ if (current && popoverElement) placeCalendarPopover(current.anchor, popoverElement);
1929
+ };
1930
+ window.addEventListener("resize", reposition);
1931
+ window.addEventListener("scroll", reposition, true);
1932
+ onCleanup(() => {
1933
+ window.removeEventListener("resize", reposition);
1934
+ window.removeEventListener("scroll", reposition, true);
1935
+ });
1936
+ });
1937
+ onCleanup(() => {
1938
+ cancelInteraction?.();
1939
+ observer?.disconnect();
1940
+ });
1941
+ const dayEntries = dayKey => items().filter(item => item.days.has(dayKey));
1942
+ /** Every bar of a long entry lights up with the one under the pointer. */
1943
+ const linkProps = item => ({
1944
+ onPointerEnter: event => {
1945
+ if (event.pointerType === "mouse") setLinkedItem(item.key);
1946
+ },
1947
+ onPointerLeave: () => {
1948
+ if (linkedItem() === item.key) setLinkedItem("");
1949
+ }
1950
+ });
1951
+ const grid = () => (() => {
1952
+ var _el$88 = _$getNextElement(_tmpl$29),
1953
+ _el$89 = _el$88.firstChild,
1954
+ _el$91 = _el$89.firstChild,
1955
+ [_el$92, _co$22] = _$getNextMarker(_el$91.nextSibling),
1956
+ _el$93 = _el$92.nextSibling,
1957
+ [_el$94, _co$23] = _$getNextMarker(_el$93.nextSibling),
1958
+ _el$95 = _el$89.nextSibling,
1959
+ [_el$96, _co$24] = _$getNextMarker(_el$95.nextSibling);
1960
+ _$insert(_el$89, _$createComponent(Show, {
1961
+ get when() {
1962
+ return props.owner.withWeekNumbers;
1963
+ },
1964
+ get children() {
1965
+ var _el$90 = _$getNextElement(_tmpl$28);
1966
+ _$insert(_el$90, () => calendarMessages().weekShort);
1967
+ return _el$90;
1968
+ }
1969
+ }), _el$92, _co$22);
1970
+ _$insert(_el$89, _$createComponent(For, {
1971
+ get each() {
1972
+ return weekdays();
1973
+ },
1974
+ children: (day, index) => (() => {
1975
+ var _el$97 = _$getNextElement(_tmpl$28);
1976
+ _$insert(_el$97, day);
1977
+ _$effect(() => _$setAttribute(_el$97, "data-weekend", index() > 4 ? "true" : undefined));
1978
+ return _el$97;
1979
+ })()
1980
+ }), _el$94, _co$23);
1981
+ _$insert(_el$88, _$createComponent(For, {
1982
+ get each() {
1983
+ return weeks();
1984
+ },
1985
+ children: (week, weekIndex) => {
1986
+ const fit = createMemo(() => fitMonthWeek(weekLayouts()[weekIndex()] ?? {
1987
+ bars: [],
1988
+ singles: []
1989
+ }, capacities()[weekIndex()] ?? MONTH_DEFAULT_LANES));
1990
+ const weekHref = () => viewHref(week[0].key, "week");
1991
+ const weekNumber = () => zonedWeekNumber(week[0].day, dateConfig());
1992
+ return (() => {
1993
+ var _el$98 = _$getNextElement(_tmpl$31),
1994
+ _el$100 = _el$98.firstChild,
1995
+ [_el$101, _co$25] = _$getNextMarker(_el$100.nextSibling),
1996
+ _el$102 = _el$101.nextSibling,
1997
+ [_el$103, _co$26] = _$getNextMarker(_el$102.nextSibling);
1998
+ _$insert(_el$98, _$createComponent(Show, {
1999
+ get when() {
2000
+ return props.owner.withWeekNumbers;
2001
+ },
2002
+ get children() {
2003
+ var _el$99 = _$getNextElement(_tmpl$30);
2004
+ _$insert(_el$99, _$createComponent(Show, {
2005
+ get when() {
2006
+ return weekHref();
2007
+ },
2008
+ get fallback() {
2009
+ return _$createComponent(Show, {
2010
+ get when() {
2011
+ return canOpenView("week");
2012
+ },
2013
+ get fallback() {
2014
+ return weekNumber();
2015
+ },
2016
+ get children() {
2017
+ var _el$104 = _$getNextElement(_tmpl$32);
2018
+ _el$104.$$click = () => openView(week[0].key, "week");
2019
+ _$insert(_el$104, weekNumber);
2020
+ _$effect(_p$ => {
2021
+ var _v$46 = calendarMessages().calendarOpenWeekNumber({
2022
+ week: weekNumber()
2023
+ }),
2024
+ _v$47 = calendarMessages().calendarOpenWeekNumber({
2025
+ week: weekNumber()
2026
+ });
2027
+ _v$46 !== _p$.e && _$setAttribute(_el$104, "title", _p$.e = _v$46);
2028
+ _v$47 !== _p$.t && _$setAttribute(_el$104, "aria-label", _p$.t = _v$47);
2029
+ return _p$;
2030
+ }, {
2031
+ e: undefined,
2032
+ t: undefined
2033
+ });
2034
+ _$runHydrationEvents();
2035
+ return _el$104;
2036
+ }
2037
+ });
2038
+ },
2039
+ children: href => _$createComponent(CalendarNavigationLink, {
2040
+ get owner() {
2041
+ return props.owner;
2042
+ },
2043
+ get href() {
2044
+ return href();
2045
+ },
2046
+ get anchorProps() {
2047
+ return {
2048
+ class: "k2b-calendar-month__week-link",
2049
+ tabIndex: -1,
2050
+ title: calendarMessages().calendarOpenWeekNumber({
2051
+ week: weekNumber()
2052
+ }),
2053
+ "aria-label": calendarMessages().calendarOpenWeekNumber({
2054
+ week: weekNumber()
2055
+ })
2056
+ };
2057
+ },
2058
+ get children() {
2059
+ return weekNumber();
2060
+ }
2061
+ })
2062
+ }));
2063
+ return _el$99;
2064
+ }
2065
+ }), _el$101, _co$25);
2066
+ _$insert(_el$98, _$createComponent(For, {
2067
+ each: week,
2068
+ children: ({
2069
+ day,
2070
+ key
2071
+ }, column) => {
2072
+ const dayBadge = props.owner.dayBadges?.[key];
2073
+ const sameMonth = calendar.isSameMonth(day, props.date, dateConfig());
2074
+ const label = dayLabel(day);
2075
+ const bars = createMemo(() => fit().bars.filter(bar => bar.startColumn === column()));
2076
+ const cell = () => fit().cells[column()] ?? {
2077
+ top: 0,
2078
+ shown: [],
2079
+ hidden: 0
2080
+ };
2081
+ return (() => {
2082
+ var _el$105 = _$getNextElement(_tmpl$34),
2083
+ _el$106 = _el$105.firstChild,
2084
+ _el$107 = _el$106.firstChild,
2085
+ _el$108 = _el$107.nextSibling,
2086
+ [_el$109, _co$27] = _$getNextMarker(_el$108.nextSibling),
2087
+ _el$110 = _el$106.nextSibling,
2088
+ _el$117 = _el$110.firstChild,
2089
+ [_el$118, _co$29] = _$getNextMarker(_el$117.nextSibling),
2090
+ _el$119 = _el$118.nextSibling,
2091
+ [_el$120, _co$30] = _$getNextMarker(_el$119.nextSibling),
2092
+ _el$121 = _el$120.nextSibling,
2093
+ [_el$122, _co$31] = _$getNextMarker(_el$121.nextSibling);
2094
+ _el$105.$$keydown = event => onCellKeyDown(event, key);
2095
+ _el$105.$$contextmenu = event => {
2096
+ // The pressed day takes the focus, so closing the menu with Escape returns there.
2097
+ menuKey = pressedKey(event, key);
2098
+ if (hasMenu()) focusCell(menuKey);
2099
+ };
2100
+ _el$105.$$pointerdown = event => onCellPointerDown(event, key);
2101
+ _el$105.$$dblclick = event => onCellDoubleClick(event, key);
2102
+ _el$105.$$click = event => onCellClick(event, key);
2103
+ _$use(element => cells.set(key, element), _el$105);
2104
+ _$setAttribute(_el$105, "aria-label", label);
2105
+ _$setAttribute(_el$105, "data-calendar-day-key", key);
2106
+ _$setAttribute(_el$105, "data-outside", !sameMonth ? "true" : undefined);
2107
+ _$setAttribute(_el$107, "data-outside", !sameMonth ? "true" : undefined);
2108
+ _$insert(_el$107, () => calendar.formatDayNumber(day, dateConfig()));
2109
+ _$insert(_el$106, _$createComponent(Show, {
2110
+ when: dayBadge,
2111
+ children: badge => (() => {
2112
+ var _el$123 = _$getNextElement(_tmpl$26),
2113
+ _el$124 = _el$123.firstChild,
2114
+ [_el$125, _co$32] = _$getNextMarker(_el$124.nextSibling),
2115
+ _el$126 = _el$125.nextSibling,
2116
+ [_el$127, _co$33] = _$getNextMarker(_el$126.nextSibling);
2117
+ _$insert(_el$123, _$createComponent(Show, {
2118
+ get when() {
2119
+ return badge().icon;
2120
+ },
2121
+ children: icon => (() => {
2122
+ var _el$128 = _$getNextElement(_tmpl$11);
2123
+ _$effect(() => _$className(_el$128, `k2b-calendar-month__badge-icon ti ti-${icon()}`));
2124
+ return _el$128;
2125
+ })()
2126
+ }), _el$125, _co$32);
2127
+ _$insert(_el$123, () => badge().label, _el$127, _co$33);
2128
+ return _el$123;
2129
+ })()
2130
+ }), _el$109, _co$27);
2131
+ _$use(element => {
2132
+ if (column() === 0) observeLanes(element, weekIndex());
2133
+ }, _el$110);
2134
+ _$insert(_el$110, _$createComponent(For, {
2135
+ get each() {
2136
+ return bars();
2137
+ },
2138
+ children: bar => {
2139
+ const span = bar.endColumn - bar.startColumn + 1;
2140
+ const startHint = () => {
2141
+ if (!bar.continuesBefore) return undefined;
2142
+ const hint = calendarMessages().calendarContinuesFrom(hintDate(bar.item.firstKey));
2143
+ return hintFits(bar.item.event.title, hint, span) ? hint : undefined;
2144
+ };
2145
+ const endHint = () => {
2146
+ if (!bar.continuesAfter) return undefined;
2147
+ const hint = calendarMessages().calendarContinuesUntil(hintDate(bar.item.lastKey));
2148
+ return hintFits(`${bar.item.event.title}${startHint() ?? ""}`, hint, span) ? hint : undefined;
2149
+ };
2150
+ return (() => {
2151
+ var _el$129 = _$getNextElement(_tmpl$35);
2152
+ _$spread(_el$129, _$mergeProps({
2153
+ get style() {
2154
+ return {
2155
+ "--k2b-calendar-span": String(span),
2156
+ "--k2b-calendar-row": String(bar.lane)
2157
+ };
2158
+ },
2159
+ get ["data-linked"]() {
2160
+ return linkedItem() === bar.item.key && bar.item.firstKey !== bar.item.lastKey ? "true" : undefined;
2161
+ },
2162
+ get ["data-continues-before"]() {
2163
+ return bar.continuesBefore ? "true" : undefined;
2164
+ },
2165
+ get ["data-continues-after"]() {
2166
+ return bar.continuesAfter ? "true" : undefined;
2167
+ }
2168
+ }, () => linkProps(bar.item)), false, true);
2169
+ _$insert(_el$129, _$createComponent(EventChip, {
2170
+ get event() {
2171
+ return bar.item.event;
2172
+ },
2173
+ get owner() {
2174
+ return props.owner;
2175
+ },
2176
+ get href() {
2177
+ return eventHref(props.owner, bar.item.event);
2178
+ },
2179
+ get label() {
2180
+ return itemLabel(bar.item);
2181
+ },
2182
+ compact: true,
2183
+ bar: true,
2184
+ get continuesBefore() {
2185
+ return bar.continuesBefore;
2186
+ },
2187
+ get continuesAfter() {
2188
+ return bar.continuesAfter;
2189
+ },
2190
+ get hintStart() {
2191
+ return startHint();
2192
+ },
2193
+ get hintEnd() {
2194
+ return endHint();
2195
+ },
2196
+ get moving() {
2197
+ return movingEventId() === bar.item.event.id;
2198
+ },
2199
+ get onMovePointerDown() {
2200
+ return props.owner.onEventDrop ? (pointerEvent, markDragged) => startMove(pointerEvent, bar.item, markDragged) : undefined;
2201
+ }
2202
+ }));
2203
+ _$runHydrationEvents();
2204
+ return _el$129;
2205
+ })();
2206
+ }
2207
+ }), _el$118, _co$29);
2208
+ _$insert(_el$110, _$createComponent(For, {
2209
+ get each() {
2210
+ return cell().shown;
2211
+ },
2212
+ children: (item, index) => (() => {
2213
+ var _el$130 = _$getNextElement(_tmpl$36);
2214
+ _$insert(_el$130, _$createComponent(EventChip, {
2215
+ get event() {
2216
+ return item.event;
2217
+ },
2218
+ get owner() {
2219
+ return props.owner;
2220
+ },
2221
+ get href() {
2222
+ return eventHref(props.owner, item.event);
2223
+ },
2224
+ compact: true,
2225
+ get leadingTime() {
2226
+ return leadingTime(item);
2227
+ },
2228
+ get moving() {
2229
+ return movingEventId() === item.event.id;
2230
+ },
2231
+ get onMovePointerDown() {
2232
+ return props.owner.onEventDrop ? (pointerEvent, markDragged) => startMove(pointerEvent, item, markDragged) : undefined;
2233
+ }
2234
+ }));
2235
+ _$effect(_$p => _$setStyleProperty(_el$130, "--k2b-calendar-row", String(cell().top + index())));
2236
+ return _el$130;
2237
+ })()
2238
+ }), _el$120, _co$30);
2239
+ _$insert(_el$110, _$createComponent(Show, {
2240
+ get when() {
2241
+ return cell().hidden > 0;
2242
+ },
2243
+ get children() {
2244
+ var _el$111 = _$getNextElement(_tmpl$33),
2245
+ _el$112 = _el$111.firstChild,
2246
+ _el$113 = _el$112.nextSibling,
2247
+ _el$114 = _el$113.firstChild,
2248
+ _el$115 = _el$114.nextSibling,
2249
+ [_el$116, _co$28] = _$getNextMarker(_el$115.nextSibling);
2250
+ _el$111.$$click = () => {
2251
+ const current = popover();
2252
+ if (current?.kind === "day" && current.dayKey === key) closePopover(false);else openDayList(key);
2253
+ };
2254
+ _$insert(_el$112, () => calendarMessages().calendarMoreEvents({
2255
+ count: cell().hidden
2256
+ }));
2257
+ _$insert(_el$113, () => cell().hidden, _el$116, _co$28);
2258
+ _$effect(_p$ => {
2259
+ var _v$48 = String(cell().top + cell().shown.length),
2260
+ _v$49 = calendarMessages().calendarMoreEventsOn({
2261
+ count: cell().hidden,
2262
+ label
2263
+ }),
2264
+ _v$50 = (() => {
2265
+ const current = popover();
2266
+ return current?.kind === "day" && current.dayKey === key;
2267
+ })();
2268
+ _v$48 !== _p$.e && _$setStyleProperty(_el$111, "--k2b-calendar-row", _p$.e = _v$48);
2269
+ _v$49 !== _p$.t && _$setAttribute(_el$111, "aria-label", _p$.t = _v$49);
2270
+ _v$50 !== _p$.a && _$setAttribute(_el$111, "aria-expanded", _p$.a = _v$50);
2271
+ return _p$;
2272
+ }, {
2273
+ e: undefined,
2274
+ t: undefined,
2275
+ a: undefined
2276
+ });
2277
+ _$runHydrationEvents();
2278
+ return _el$111;
2279
+ }
2280
+ }), _el$122, _co$31);
2281
+ _$effect(_p$ => {
2282
+ var _v$51 = rovingKey() === key ? 0 : -1,
2283
+ _v$52 = within(selection(), key) ? "true" : "false",
2284
+ _v$53 = key === todayKey() ? "date" : undefined,
2285
+ _v$54 = column() > 4 ? "true" : undefined,
2286
+ _v$55 = key < todayKey() ? "true" : undefined,
2287
+ _v$56 = selectionPart(key),
2288
+ _v$57 = within(dropRange(), key) ? "true" : undefined,
2289
+ _v$58 = key === todayKey() ? "true" : undefined;
2290
+ _v$51 !== _p$.e && _$setAttribute(_el$105, "tabindex", _p$.e = _v$51);
2291
+ _v$52 !== _p$.t && _$setAttribute(_el$105, "aria-selected", _p$.t = _v$52);
2292
+ _v$53 !== _p$.a && _$setAttribute(_el$105, "aria-current", _p$.a = _v$53);
2293
+ _v$54 !== _p$.o && _$setAttribute(_el$105, "data-weekend", _p$.o = _v$54);
2294
+ _v$55 !== _p$.i && _$setAttribute(_el$105, "data-past", _p$.i = _v$55);
2295
+ _v$56 !== _p$.n && _$setAttribute(_el$105, "data-selected", _p$.n = _v$56);
2296
+ _v$57 !== _p$.s && _$setAttribute(_el$105, "data-drop-preview", _p$.s = _v$57);
2297
+ _v$58 !== _p$.h && _$setAttribute(_el$107, "data-today", _p$.h = _v$58);
2298
+ return _p$;
2299
+ }, {
2300
+ e: undefined,
2301
+ t: undefined,
2302
+ a: undefined,
2303
+ o: undefined,
2304
+ i: undefined,
2305
+ n: undefined,
2306
+ s: undefined,
2307
+ h: undefined
2308
+ });
2309
+ _$runHydrationEvents();
2310
+ return _el$105;
2311
+ })();
2312
+ }
2313
+ }), _el$103, _co$26);
2314
+ _$effect(() => _$setAttribute(_el$98, "data-week-numbers", props.owner.withWeekNumbers ? "true" : undefined));
2315
+ return _el$98;
2316
+ })();
2317
+ }
2318
+ }), _el$96, _co$24);
2319
+ _$effect(_p$ => {
2320
+ var _v$43 = formatMonth(props.date, dateConfig()),
2321
+ _v$44 = `auto repeat(${weeks().length}, minmax(5rem, 1fr))`,
2322
+ _v$45 = props.owner.withWeekNumbers ? "true" : undefined;
2323
+ _v$43 !== _p$.e && _$setAttribute(_el$88, "aria-label", _p$.e = _v$43);
2324
+ _v$44 !== _p$.t && _$setStyleProperty(_el$88, "grid-template-rows", _p$.t = _v$44);
2325
+ _v$45 !== _p$.a && _$setAttribute(_el$89, "data-week-numbers", _p$.a = _v$45);
2326
+ return _p$;
2327
+ }, {
2328
+ e: undefined,
2329
+ t: undefined,
2330
+ a: undefined
2331
+ });
2332
+ return _el$88;
1145
2333
  })();
2334
+ const dayList = dayKey => {
2335
+ const day = parseKey(dayKey);
2336
+ const href = viewHref(dayKey, "day");
2337
+ // Read where it renders, so a refresh while the list is open updates it as it does the grid.
2338
+ const entries = () => dayEntries(dayKey);
2339
+ return (() => {
2340
+ var _el$131 = _$getNextElement(_tmpl$39),
2341
+ _el$132 = _el$131.firstChild,
2342
+ _el$140 = _el$132.nextSibling,
2343
+ [_el$141, _co$36] = _$getNextMarker(_el$140.nextSibling),
2344
+ _el$134 = _el$141.nextSibling,
2345
+ _el$136 = _el$134.firstChild,
2346
+ [_el$137, _co$34] = _$getNextMarker(_el$136.nextSibling),
2347
+ _el$138 = _el$137.nextSibling,
2348
+ [_el$139, _co$35] = _$getNextMarker(_el$138.nextSibling);
2349
+ _$insert(_el$132, () => dayLabel(day));
2350
+ _$insert(_el$131, _$createComponent(Show, {
2351
+ get when() {
2352
+ return entries().length > 0;
2353
+ },
2354
+ get fallback() {
2355
+ return (() => {
2356
+ var _el$142 = _$getNextElement(_tmpl$40);
2357
+ _$insert(_el$142, () => calendarMessages().calendarNothingPlanned);
2358
+ return _el$142;
2359
+ })();
2360
+ },
2361
+ get children() {
2362
+ var _el$133 = _$getNextElement(_tmpl$37);
2363
+ _$insert(_el$133, _$createComponent(For, {
2364
+ get each() {
2365
+ return entries();
2366
+ },
2367
+ children: item => (() => {
2368
+ var _el$143 = _$getNextElement(_tmpl$41);
2369
+ _$insert(_el$143, _$createComponent(EventChip, {
2370
+ get event() {
2371
+ return item.event;
2372
+ },
2373
+ get owner() {
2374
+ return props.owner;
2375
+ },
2376
+ get href() {
2377
+ return eventHref(props.owner, item.event);
2378
+ },
2379
+ get label() {
2380
+ return itemLabel(item);
2381
+ },
2382
+ compact: true,
2383
+ get bar() {
2384
+ return item.bar;
2385
+ },
2386
+ get leadingTime() {
2387
+ return leadingTime(item);
2388
+ }
2389
+ }));
2390
+ return _el$143;
2391
+ })()
2392
+ }));
2393
+ return _el$133;
2394
+ }
2395
+ }), _el$141, _co$36);
2396
+ _$insert(_el$134, _$createComponent(Show, {
2397
+ when: href,
2398
+ get fallback() {
2399
+ return _$createComponent(Show, {
2400
+ get when() {
2401
+ return canOpenView("day");
2402
+ },
2403
+ get children() {
2404
+ return _$createComponent(Button, {
2405
+ type: "button",
2406
+ variant: "ghost",
2407
+ size: "sm",
2408
+ onClick: () => openView(dayKey, "day"),
2409
+ get children() {
2410
+ return [_$getNextElement(_tmpl$42), _$memo(() => calendarMessages().calendarOpenDay)];
2411
+ }
2412
+ });
2413
+ }
2414
+ });
2415
+ },
2416
+ children: dayHref => _$createComponent(CalendarNavigationLink, {
2417
+ get owner() {
2418
+ return props.owner;
2419
+ },
2420
+ get href() {
2421
+ return dayHref();
2422
+ },
2423
+ anchorProps: {
2424
+ class: "k2b-button",
2425
+ "data-variant": "ghost",
2426
+ "data-size": "sm"
2427
+ },
2428
+ get children() {
2429
+ return [_$getNextElement(_tmpl$42), _$memo(() => calendarMessages().calendarOpenDay)];
2430
+ }
2431
+ })
2432
+ }), _el$137, _co$34);
2433
+ _$insert(_el$134, _$createComponent(Show, {
2434
+ get when() {
2435
+ return props.owner.renderQuickCreate;
2436
+ },
2437
+ get children() {
2438
+ return _$createComponent(Button, {
2439
+ type: "button",
2440
+ variant: "ghost",
2441
+ size: "sm",
2442
+ onClick: () => {
2443
+ select(dayKey);
2444
+ openCreate({
2445
+ first: dayKey,
2446
+ last: dayKey
2447
+ }, {
2448
+ active: true
2449
+ });
2450
+ },
2451
+ get children() {
2452
+ return [_$getNextElement(_tmpl$38), _$memo(() => calendarMessages().calendarNewEvent)];
2453
+ }
2454
+ });
2455
+ }
2456
+ }), _el$139, _co$35);
2457
+ return _el$131;
2458
+ })();
2459
+ };
2460
+ return [_$createComponent(Show, {
2461
+ get when() {
2462
+ return hasMenu();
2463
+ },
2464
+ get fallback() {
2465
+ return grid();
2466
+ },
2467
+ get children() {
2468
+ return _$createComponent(GestureMenu, {
2469
+ get items() {
2470
+ return menuItems();
2471
+ },
2472
+ get label() {
2473
+ return calendarMessages().calendarSelectionActions;
2474
+ },
2475
+ tabIndex: -1,
2476
+ onOpen: onMenuOpen,
2477
+ "class": "k2b-calendar-month-menu",
2478
+ get children() {
2479
+ return grid();
2480
+ }
2481
+ });
2482
+ }
2483
+ }), (() => {
2484
+ var _el$146 = _$getNextElement(_tmpl$43);
2485
+ _el$146.addEventListener("toggle", event => {
2486
+ // A late close of the popover that another opening already replaced keeps the new one. Focus returns to the
2487
+ // grid only from inside the popover, never from what a click outside it chose.
2488
+ if (event.newState !== "closed" || !popover() || event.currentTarget.matches(":popover-open")) return;
2489
+ const inside = event.currentTarget.contains(document.activeElement) || document.activeElement === document.body;
2490
+ closePopover(inside);
2491
+ });
2492
+ _el$146.$$focusin = () => setCreateActive(true);
2493
+ var _ref$ = popoverElement;
2494
+ typeof _ref$ === "function" ? _$use(_ref$, _el$146) : popoverElement = _el$146;
2495
+ _$insert(_el$146, _$createComponent(Show, {
2496
+ get when() {
2497
+ return popover();
2498
+ },
2499
+ keyed: true,
2500
+ children: value => value.kind === "create" ? props.owner.renderQuickCreate?.(rangeOf(value.range), {
2501
+ create: value.create,
2502
+ close: () => {
2503
+ if (popover() === value) closePopover();
2504
+ }
2505
+ }) : dayList(value.dayKey)
2506
+ }));
2507
+ _$effect(_p$ => {
2508
+ var _v$59 = (() => {
2509
+ const current = popover();
2510
+ if (current?.kind === "day") return dayLabel(parseKey(current.dayKey));
2511
+ return calendarMessages().calendarQuickCreate;
2512
+ })(),
2513
+ _v$60 = popover()?.kind,
2514
+ _v$61 = popover()?.kind === "create" && !createActive() ? "true" : undefined;
2515
+ _v$59 !== _p$.e && _$setAttribute(_el$146, "aria-label", _p$.e = _v$59);
2516
+ _v$60 !== _p$.t && _$setAttribute(_el$146, "data-kind", _p$.t = _v$60);
2517
+ _v$61 !== _p$.a && _$setAttribute(_el$146, "data-quiet", _p$.a = _v$61);
2518
+ return _p$;
2519
+ }, {
2520
+ e: undefined,
2521
+ t: undefined,
2522
+ a: undefined
2523
+ });
2524
+ _$runHydrationEvents();
2525
+ return _el$146;
2526
+ })()];
1146
2527
  };
1147
2528
  const TimeGridView = props => {
1148
- const messages = useUiMessages();
2529
+ const calendarMessages = useCalendarMessages();
1149
2530
  const dateConfig = createMemo(() => ownerDateConfig(props.owner));
1150
2531
  const gridStartHour = () => props.owner.visibleStartHour ?? 0;
1151
2532
  const gridEndHour = () => props.owner.visibleEndHour ?? 23;
@@ -1356,19 +2737,19 @@ const TimeGridView = props => {
1356
2737
  });
1357
2738
  });
1358
2739
  return (() => {
1359
- var _el$78 = _$getNextElement(_tmpl$24),
1360
- _el$79 = _el$78.firstChild,
1361
- _el$80 = _el$79.firstChild,
1362
- _el$81 = _el$80.nextSibling,
1363
- [_el$82, _co$20] = _$getNextMarker(_el$81.nextSibling),
1364
- _el$92 = _el$79.nextSibling,
1365
- [_el$93, _co$23] = _$getNextMarker(_el$92.nextSibling),
1366
- _el$87 = _el$93.nextSibling,
1367
- _el$88 = _el$87.firstChild,
1368
- _el$89 = _el$88.firstChild,
1369
- _el$90 = _el$89.nextSibling,
1370
- [_el$91, _co$22] = _$getNextMarker(_el$90.nextSibling);
1371
- _$insert(_el$79, _$createComponent(For, {
2740
+ var _el$147 = _$getNextElement(_tmpl$45),
2741
+ _el$148 = _el$147.firstChild,
2742
+ _el$149 = _el$148.firstChild,
2743
+ _el$150 = _el$149.nextSibling,
2744
+ [_el$151, _co$37] = _$getNextMarker(_el$150.nextSibling),
2745
+ _el$161 = _el$148.nextSibling,
2746
+ [_el$162, _co$40] = _$getNextMarker(_el$161.nextSibling),
2747
+ _el$156 = _el$162.nextSibling,
2748
+ _el$157 = _el$156.firstChild,
2749
+ _el$158 = _el$157.firstChild,
2750
+ _el$159 = _el$158.nextSibling,
2751
+ [_el$160, _co$39] = _$getNextMarker(_el$159.nextSibling);
2752
+ _$insert(_el$148, _$createComponent(For, {
1372
2753
  get each() {
1373
2754
  return props.days;
1374
2755
  },
@@ -1387,47 +2768,47 @@ const TimeGridView = props => {
1387
2768
  },
1388
2769
  get children() {
1389
2770
  return [(() => {
1390
- var _el$94 = _$getNextElement(_tmpl$25);
1391
- _$insert(_el$94, () => formatDay(day, dateConfig()));
1392
- _$effect(() => _$setAttribute(_el$94, "data-today", today() ? "true" : undefined));
1393
- return _el$94;
2771
+ var _el$163 = _$getNextElement(_tmpl$46);
2772
+ _$insert(_el$163, () => formatDay(day, dateConfig()));
2773
+ _$effect(() => _$setAttribute(_el$163, "data-today", today() ? "true" : undefined));
2774
+ return _el$163;
1394
2775
  })(), _$createComponent(Show, {
1395
2776
  when: dayBadge,
1396
2777
  children: badge => (() => {
1397
- var _el$95 = _$getNextElement(_tmpl$26),
1398
- _el$96 = _el$95.firstChild,
1399
- [_el$97, _co$24] = _$getNextMarker(_el$96.nextSibling),
1400
- _el$98 = _el$97.nextSibling,
1401
- [_el$99, _co$25] = _$getNextMarker(_el$98.nextSibling);
1402
- _$insert(_el$95, _$createComponent(Show, {
2778
+ var _el$164 = _$getNextElement(_tmpl$47),
2779
+ _el$165 = _el$164.firstChild,
2780
+ [_el$166, _co$41] = _$getNextMarker(_el$165.nextSibling),
2781
+ _el$167 = _el$166.nextSibling,
2782
+ [_el$168, _co$42] = _$getNextMarker(_el$167.nextSibling);
2783
+ _$insert(_el$164, _$createComponent(Show, {
1403
2784
  get when() {
1404
2785
  return badge().icon;
1405
2786
  },
1406
2787
  children: icon => (() => {
1407
- var _el$100 = _$getNextElement(_tmpl$0);
1408
- _$effect(() => _$className(_el$100, `k2b-calendar-time-grid__badge-icon ti ti-${icon()}`));
1409
- return _el$100;
2788
+ var _el$169 = _$getNextElement(_tmpl$11);
2789
+ _$effect(() => _$className(_el$169, `k2b-calendar-time-grid__badge-icon ti ti-${icon()}`));
2790
+ return _el$169;
1410
2791
  })()
1411
- }), _el$97, _co$24);
1412
- _$insert(_el$95, () => badge().label, _el$99, _co$25);
1413
- return _el$95;
2792
+ }), _el$166, _co$41);
2793
+ _$insert(_el$164, () => badge().label, _el$168, _co$42);
2794
+ return _el$164;
1414
2795
  })()
1415
2796
  })];
1416
2797
  }
1417
2798
  });
1418
2799
  }
1419
- }), _el$82, _co$20);
1420
- _$insert(_el$78, _$createComponent(Show, {
2800
+ }), _el$151, _co$37);
2801
+ _$insert(_el$147, _$createComponent(Show, {
1421
2802
  get when() {
1422
2803
  return !props.owner.hideAllDay;
1423
2804
  },
1424
2805
  get children() {
1425
- var _el$83 = _$getNextElement(_tmpl$23),
1426
- _el$84 = _el$83.firstChild,
1427
- _el$85 = _el$84.nextSibling,
1428
- [_el$86, _co$21] = _$getNextMarker(_el$85.nextSibling);
1429
- _$insert(_el$84, () => props.labels.allDay);
1430
- _$insert(_el$83, _$createComponent(For, {
2806
+ var _el$152 = _$getNextElement(_tmpl$44),
2807
+ _el$153 = _el$152.firstChild,
2808
+ _el$154 = _el$153.nextSibling,
2809
+ [_el$155, _co$38] = _$getNextMarker(_el$154.nextSibling);
2810
+ _$insert(_el$153, () => props.labels.allDay);
2811
+ _$insert(_el$152, _$createComponent(For, {
1431
2812
  get each() {
1432
2813
  return props.days;
1433
2814
  },
@@ -1436,14 +2817,14 @@ const TimeGridView = props => {
1436
2817
  const allDay = () => eventsByDay().get(dayKey)?.allDay ?? [];
1437
2818
  const previewAllDay = previewEvents().filter(event => event.dayKey === dayKey && event.allDay);
1438
2819
  return (() => {
1439
- var _el$101 = _$getNextElement(_tmpl$27),
1440
- _el$102 = _el$101.firstChild,
1441
- _el$103 = _el$102.firstChild,
1442
- [_el$104, _co$26] = _$getNextMarker(_el$103.nextSibling),
1443
- _el$105 = _el$104.nextSibling,
1444
- [_el$106, _co$27] = _$getNextMarker(_el$105.nextSibling);
1445
- _$setAttribute(_el$101, "data-calendar-day-key", dayKey);
1446
- _$spread(_el$101, _$mergeProps({
2820
+ var _el$170 = _$getNextElement(_tmpl$48),
2821
+ _el$171 = _el$170.firstChild,
2822
+ _el$172 = _el$171.firstChild,
2823
+ [_el$173, _co$43] = _$getNextMarker(_el$172.nextSibling),
2824
+ _el$174 = _el$173.nextSibling,
2825
+ [_el$175, _co$44] = _$getNextMarker(_el$174.nextSibling);
2826
+ _$setAttribute(_el$170, "data-calendar-day-key", dayKey);
2827
+ _$spread(_el$170, _$mergeProps({
1447
2828
  get ["data-drop-preview"]() {
1448
2829
  return timePreview()?.allDay && calendar.formatDateKey(timePreview().start, dateConfig()) === dayKey ? "true" : undefined;
1449
2830
  },
@@ -1458,15 +2839,15 @@ const TimeGridView = props => {
1458
2839
  allDay: true
1459
2840
  };
1460
2841
  }, () => performance.now() < suppressSlotClickUntil)), false, true);
1461
- _$insert(_el$102, _$createComponent(For, {
2842
+ _$insert(_el$171, _$createComponent(For, {
1462
2843
  each: previewAllDay,
1463
2844
  children: event => (() => {
1464
- var _el$107 = _$getNextElement(_tmpl$18);
1465
- _$insert(_el$107, () => event.title);
1466
- return _el$107;
2845
+ var _el$176 = _$getNextElement(_tmpl$23);
2846
+ _$insert(_el$176, () => event.title);
2847
+ return _el$176;
1467
2848
  })()
1468
- }), _el$104, _co$26);
1469
- _$insert(_el$102, _$createComponent(For, {
2849
+ }), _el$173, _co$43);
2850
+ _$insert(_el$171, _$createComponent(For, {
1470
2851
  get each() {
1471
2852
  return allDay();
1472
2853
  },
@@ -1486,49 +2867,49 @@ const TimeGridView = props => {
1486
2867
  return props.owner.onEventDrop ? (pointerEvent, markDragged) => startAllDayMove(pointerEvent, event, markDragged) : undefined;
1487
2868
  }
1488
2869
  })
1489
- }), _el$106, _co$27);
2870
+ }), _el$175, _co$44);
1490
2871
  _$runHydrationEvents();
1491
- return _el$101;
2872
+ return _el$170;
1492
2873
  })();
1493
2874
  }
1494
- }), _el$86, _co$21);
2875
+ }), _el$155, _co$38);
1495
2876
  _$effect(_p$ => {
1496
- var _v$34 = `4rem repeat(${props.days.length}, minmax(0, 1fr))`,
1497
- _v$35 = `${props.owner.allDayMaxHeightRem ?? 7}rem`;
1498
- _v$34 !== _p$.e && _$setStyleProperty(_el$83, "grid-template-columns", _p$.e = _v$34);
1499
- _v$35 !== _p$.t && _$setStyleProperty(_el$83, "max-height", _p$.t = _v$35);
2877
+ var _v$62 = `4rem repeat(${props.days.length}, minmax(0, 1fr))`,
2878
+ _v$63 = `${props.owner.allDayMaxHeightRem ?? 7}rem`;
2879
+ _v$62 !== _p$.e && _$setStyleProperty(_el$152, "grid-template-columns", _p$.e = _v$62);
2880
+ _v$63 !== _p$.t && _$setStyleProperty(_el$152, "max-height", _p$.t = _v$63);
1500
2881
  return _p$;
1501
2882
  }, {
1502
2883
  e: undefined,
1503
2884
  t: undefined
1504
2885
  });
1505
- return _el$83;
2886
+ return _el$152;
1506
2887
  }
1507
- }), _el$93, _co$23);
1508
- var _ref$ = scrollContainer;
1509
- typeof _ref$ === "function" ? _$use(_ref$, _el$87) : scrollContainer = _el$87;
1510
- var _ref$2 = timeGrid;
1511
- typeof _ref$2 === "function" ? _$use(_ref$2, _el$88) : timeGrid = _el$88;
1512
- var _ref$3 = timeGutter;
1513
- typeof _ref$3 === "function" ? _$use(_ref$3, _el$89) : timeGutter = _el$89;
1514
- _$insert(_el$89, _$createComponent(For, {
2888
+ }), _el$162, _co$40);
2889
+ var _ref$2 = scrollContainer;
2890
+ typeof _ref$2 === "function" ? _$use(_ref$2, _el$156) : scrollContainer = _el$156;
2891
+ var _ref$3 = timeGrid;
2892
+ typeof _ref$3 === "function" ? _$use(_ref$3, _el$157) : timeGrid = _el$157;
2893
+ var _ref$4 = timeGutter;
2894
+ typeof _ref$4 === "function" ? _$use(_ref$4, _el$158) : timeGutter = _el$158;
2895
+ _$insert(_el$158, _$createComponent(For, {
1515
2896
  get each() {
1516
2897
  return hours();
1517
2898
  },
1518
2899
  children: hour => (() => {
1519
- var _el$108 = _$getNextElement(_tmpl$28),
1520
- _el$110 = _el$108.firstChild,
1521
- [_el$111, _co$28] = _$getNextMarker(_el$110.nextSibling),
1522
- _el$109 = _el$111.nextSibling;
2900
+ var _el$177 = _$getNextElement(_tmpl$49),
2901
+ _el$179 = _el$177.firstChild,
2902
+ [_el$180, _co$45] = _$getNextMarker(_el$179.nextSibling),
2903
+ _el$178 = _el$180.nextSibling;
1523
2904
  _$use(element => {
1524
2905
  if (hour === businessStartHour()) defaultHourMarker = element;
1525
- }, _el$108);
1526
- _$insert(_el$108, () => `${hour}`.padStart(2, "0"), _el$111, _co$28);
1527
- _$effect(() => _$setAttribute(_el$108, "data-outside-business", hour < businessStartHour() || hour > businessEndHour() ? "true" : undefined));
1528
- return _el$108;
2906
+ }, _el$177);
2907
+ _$insert(_el$177, () => `${hour}`.padStart(2, "0"), _el$180, _co$45);
2908
+ _$effect(() => _$setAttribute(_el$177, "data-outside-business", hour < businessStartHour() || hour > businessEndHour() ? "true" : undefined));
2909
+ return _el$177;
1529
2910
  })()
1530
2911
  }));
1531
- _$insert(_el$88, _$createComponent(For, {
2912
+ _$insert(_el$157, _$createComponent(For, {
1532
2913
  get each() {
1533
2914
  return props.days;
1534
2915
  },
@@ -1536,34 +2917,34 @@ const TimeGridView = props => {
1536
2917
  const dayKey = calendar.formatDateKey(day, dateConfig());
1537
2918
  const layouts = createMemo(() => timedEventLayouts(eventsByDay().get(dayKey)?.timed ?? []));
1538
2919
  return (() => {
1539
- var _el$112 = _$getNextElement(_tmpl$30),
1540
- _el$114 = _el$112.firstChild,
1541
- [_el$115, _co$29] = _$getNextMarker(_el$114.nextSibling),
1542
- _el$116 = _el$115.nextSibling,
1543
- [_el$117, _co$30] = _$getNextMarker(_el$116.nextSibling),
1544
- _el$118 = _el$117.nextSibling,
1545
- [_el$119, _co$31] = _$getNextMarker(_el$118.nextSibling),
1546
- _el$120 = _el$119.nextSibling,
1547
- [_el$121, _co$32] = _$getNextMarker(_el$120.nextSibling),
1548
- _el$122 = _el$121.nextSibling,
1549
- [_el$123, _co$33] = _$getNextMarker(_el$122.nextSibling);
1550
- _$insert(_el$112, _$createComponent(Show, {
2920
+ var _el$181 = _$getNextElement(_tmpl$51),
2921
+ _el$183 = _el$181.firstChild,
2922
+ [_el$184, _co$46] = _$getNextMarker(_el$183.nextSibling),
2923
+ _el$185 = _el$184.nextSibling,
2924
+ [_el$186, _co$47] = _$getNextMarker(_el$185.nextSibling),
2925
+ _el$187 = _el$186.nextSibling,
2926
+ [_el$188, _co$48] = _$getNextMarker(_el$187.nextSibling),
2927
+ _el$189 = _el$188.nextSibling,
2928
+ [_el$190, _co$49] = _$getNextMarker(_el$189.nextSibling),
2929
+ _el$191 = _el$190.nextSibling,
2930
+ [_el$192, _co$50] = _$getNextMarker(_el$191.nextSibling);
2931
+ _$insert(_el$181, _$createComponent(Show, {
1551
2932
  get when() {
1552
2933
  return currentTimeLine(day) !== null;
1553
2934
  },
1554
2935
  get children() {
1555
- var _el$113 = _$getNextElement(_tmpl$29);
1556
- _$effect(_$p => _$setStyleProperty(_el$113, "top", `${currentTimeLine(day) ?? 0}%`));
1557
- return _el$113;
2936
+ var _el$182 = _$getNextElement(_tmpl$50);
2937
+ _$effect(_$p => _$setStyleProperty(_el$182, "top", `${currentTimeLine(day) ?? 0}%`));
2938
+ return _el$182;
1558
2939
  }
1559
- }), _el$115, _co$29);
1560
- _$insert(_el$112, _$createComponent(For, {
2940
+ }), _el$184, _co$46);
2941
+ _$insert(_el$181, _$createComponent(For, {
1561
2942
  get each() {
1562
2943
  return hours();
1563
2944
  },
1564
2945
  children: hour => (() => {
1565
- var _el$124 = _$getNextElement(_tmpl$31);
1566
- _$spread(_el$124, _$mergeProps({
2946
+ var _el$193 = _$getNextElement(_tmpl$52);
2947
+ _$spread(_el$193, _$mergeProps({
1567
2948
  get ["data-outside-business"]() {
1568
2949
  return hour < businessStartHour() || hour > businessEndHour() ? "true" : undefined;
1569
2950
  },
@@ -1581,10 +2962,10 @@ const TimeGridView = props => {
1581
2962
  "onPointerDown": startRange
1582
2963
  }), false, false);
1583
2964
  _$runHydrationEvents();
1584
- return _el$124;
2965
+ return _el$193;
1585
2966
  })()
1586
- }), _el$117, _co$30);
1587
- _$insert(_el$112, _$createComponent(For, {
2967
+ }), _el$186, _co$47);
2968
+ _$insert(_el$181, _$createComponent(For, {
1588
2969
  get each() {
1589
2970
  return previewEvents().filter(event => event.dayKey === dayKey && !event.allDay);
1590
2971
  },
@@ -1592,44 +2973,44 @@ const TimeGridView = props => {
1592
2973
  const layout = eventLayout(event);
1593
2974
  const short = event.endDate.getTime() - event.startDate.getTime() < 60 * 60_000;
1594
2975
  return (() => {
1595
- var _el$125 = _$getNextElement(_tmpl$33),
1596
- _el$126 = _el$125.firstChild,
1597
- _el$134 = _el$126.firstChild,
1598
- [_el$135, _co$36] = _$getNextMarker(_el$134.nextSibling),
1599
- _el$128 = _el$135.nextSibling,
1600
- _el$130 = _el$128.firstChild,
1601
- [_el$131, _co$34] = _$getNextMarker(_el$130.nextSibling),
1602
- _el$129 = _el$131.nextSibling,
1603
- _el$132 = _el$129.nextSibling,
1604
- [_el$133, _co$35] = _$getNextMarker(_el$132.nextSibling);
1605
- _$setAttribute(_el$125, "data-short", short ? "true" : undefined);
1606
- _$insert(_el$126, _$createComponent(Show, {
2976
+ var _el$194 = _$getNextElement(_tmpl$54),
2977
+ _el$195 = _el$194.firstChild,
2978
+ _el$203 = _el$195.firstChild,
2979
+ [_el$204, _co$53] = _$getNextMarker(_el$203.nextSibling),
2980
+ _el$197 = _el$204.nextSibling,
2981
+ _el$199 = _el$197.firstChild,
2982
+ [_el$200, _co$51] = _$getNextMarker(_el$199.nextSibling),
2983
+ _el$198 = _el$200.nextSibling,
2984
+ _el$201 = _el$198.nextSibling,
2985
+ [_el$202, _co$52] = _$getNextMarker(_el$201.nextSibling);
2986
+ _$setAttribute(_el$194, "data-short", short ? "true" : undefined);
2987
+ _$insert(_el$195, _$createComponent(Show, {
1607
2988
  get when() {
1608
2989
  return event.title;
1609
2990
  },
1610
2991
  get children() {
1611
- var _el$127 = _$getNextElement(_tmpl$32);
1612
- _$insert(_el$127, () => event.title);
1613
- return _el$127;
2992
+ var _el$196 = _$getNextElement(_tmpl$53);
2993
+ _$insert(_el$196, () => event.title);
2994
+ return _el$196;
1614
2995
  }
1615
- }), _el$135, _co$36);
1616
- _$insert(_el$128, () => formatTime(event.startDate, dateConfig()), _el$131, _co$34);
1617
- _$insert(_el$128, () => formatTime(event.endDate, dateConfig()), _el$133, _co$35);
2996
+ }), _el$204, _co$53);
2997
+ _$insert(_el$197, () => formatTime(event.startDate, dateConfig()), _el$200, _co$51);
2998
+ _$insert(_el$197, () => formatTime(event.endDate, dateConfig()), _el$202, _co$52);
1618
2999
  _$effect(_p$ => {
1619
- var _v$41 = `${layout.top}%`,
1620
- _v$42 = `${layout.height}%`;
1621
- _v$41 !== _p$.e && _$setStyleProperty(_el$125, "top", _p$.e = _v$41);
1622
- _v$42 !== _p$.t && _$setStyleProperty(_el$125, "height", _p$.t = _v$42);
3000
+ var _v$69 = `${layout.top}%`,
3001
+ _v$70 = `${layout.height}%`;
3002
+ _v$69 !== _p$.e && _$setStyleProperty(_el$194, "top", _p$.e = _v$69);
3003
+ _v$70 !== _p$.t && _$setStyleProperty(_el$194, "height", _p$.t = _v$70);
1623
3004
  return _p$;
1624
3005
  }, {
1625
3006
  e: undefined,
1626
3007
  t: undefined
1627
3008
  });
1628
- return _el$125;
3009
+ return _el$194;
1629
3010
  })();
1630
3011
  }
1631
- }), _el$119, _co$31);
1632
- _$insert(_el$112, _$createComponent(For, {
3012
+ }), _el$188, _co$48);
3013
+ _$insert(_el$181, _$createComponent(For, {
1633
3014
  get each() {
1634
3015
  return layouts();
1635
3016
  },
@@ -1672,13 +3053,13 @@ const TimeGridView = props => {
1672
3053
  });
1673
3054
  };
1674
3055
  return (() => {
1675
- var _el$136 = _$getNextElement(_tmpl$35),
1676
- _el$137 = _el$136.firstChild,
1677
- _el$139 = _el$137.firstChild,
1678
- [_el$140, _co$37] = _$getNextMarker(_el$139.nextSibling),
1679
- _el$141 = _el$140.nextSibling,
1680
- [_el$142, _co$38] = _$getNextMarker(_el$141.nextSibling);
1681
- _$insert(_el$137, _$createComponent(EventChip, {
3056
+ var _el$205 = _$getNextElement(_tmpl$56),
3057
+ _el$206 = _el$205.firstChild,
3058
+ _el$208 = _el$206.firstChild,
3059
+ [_el$209, _co$54] = _$getNextMarker(_el$208.nextSibling),
3060
+ _el$210 = _el$209.nextSibling,
3061
+ [_el$211, _co$55] = _$getNextMarker(_el$210.nextSibling);
3062
+ _$insert(_el$206, _$createComponent(EventChip, {
1682
3063
  event: event,
1683
3064
  get owner() {
1684
3065
  return props.owner;
@@ -1693,32 +3074,32 @@ const TimeGridView = props => {
1693
3074
  get onMovePointerDown() {
1694
3075
  return props.owner.onEventDrop ? (pointerEvent, markDragged) => startTimedMove(pointerEvent, event, markDragged) : undefined;
1695
3076
  }
1696
- }), _el$140, _co$37);
1697
- _$insert(_el$137, _$createComponent(Show, {
3077
+ }), _el$209, _co$54);
3078
+ _$insert(_el$206, _$createComponent(Show, {
1698
3079
  get when() {
1699
3080
  return props.owner.onEventResize;
1700
3081
  },
1701
3082
  get children() {
1702
- var _el$138 = _$getNextElement(_tmpl$34);
1703
- _el$138.addEventListener("dragstart", event => event.preventDefault());
1704
- _el$138.$$pointerdown = resizeStart;
1705
- _$setAttribute(_el$138, "draggable", false);
1706
- _$effect(() => _$setAttribute(_el$138, "aria-label", messages().resizeEvent));
3083
+ var _el$207 = _$getNextElement(_tmpl$55);
3084
+ _el$207.addEventListener("dragstart", event => event.preventDefault());
3085
+ _el$207.$$pointerdown = resizeStart;
3086
+ _$setAttribute(_el$207, "draggable", false);
3087
+ _$effect(() => _$setAttribute(_el$207, "aria-label", calendarMessages().resizeEvent));
1707
3088
  _$runHydrationEvents();
1708
- return _el$138;
3089
+ return _el$207;
1709
3090
  }
1710
- }), _el$142, _co$38);
3091
+ }), _el$211, _co$55);
1711
3092
  _$effect(_p$ => {
1712
- var _v$43 = `${layout.top}%`,
1713
- _v$44 = `${layout.height}%`,
1714
- _v$45 = position.left,
1715
- _v$46 = position.width,
1716
- _v$47 = String(20 + layoutItem.lane);
1717
- _v$43 !== _p$.e && _$setStyleProperty(_el$136, "top", _p$.e = _v$43);
1718
- _v$44 !== _p$.t && _$setStyleProperty(_el$136, "height", _p$.t = _v$44);
1719
- _v$45 !== _p$.a && _$setStyleProperty(_el$136, "left", _p$.a = _v$45);
1720
- _v$46 !== _p$.o && _$setStyleProperty(_el$136, "width", _p$.o = _v$46);
1721
- _v$47 !== _p$.i && _$setStyleProperty(_el$136, "z-index", _p$.i = _v$47);
3093
+ var _v$71 = `${layout.top}%`,
3094
+ _v$72 = `${layout.height}%`,
3095
+ _v$73 = position.left,
3096
+ _v$74 = position.width,
3097
+ _v$75 = String(20 + layoutItem.lane);
3098
+ _v$71 !== _p$.e && _$setStyleProperty(_el$205, "top", _p$.e = _v$71);
3099
+ _v$72 !== _p$.t && _$setStyleProperty(_el$205, "height", _p$.t = _v$72);
3100
+ _v$73 !== _p$.a && _$setStyleProperty(_el$205, "left", _p$.a = _v$73);
3101
+ _v$74 !== _p$.o && _$setStyleProperty(_el$205, "width", _p$.o = _v$74);
3102
+ _v$75 !== _p$.i && _$setStyleProperty(_el$205, "z-index", _p$.i = _v$75);
1722
3103
  return _p$;
1723
3104
  }, {
1724
3105
  e: undefined,
@@ -1727,11 +3108,11 @@ const TimeGridView = props => {
1727
3108
  o: undefined,
1728
3109
  i: undefined
1729
3110
  });
1730
- return _el$136;
3111
+ return _el$205;
1731
3112
  })();
1732
3113
  }
1733
- }), _el$121, _co$32);
1734
- _$insert(_el$112, _$createComponent(For, {
3114
+ }), _el$190, _co$49);
3115
+ _$insert(_el$181, _$createComponent(For, {
1735
3116
  get each() {
1736
3117
  return overflowLayouts(layouts());
1737
3118
  },
@@ -1740,27 +3121,27 @@ const TimeGridView = props => {
1740
3121
  const key = `${dayKey}-${overflow.groupId}`;
1741
3122
  const hiddenTitle = () => overflow.hiddenEvents.map(event => `${formatTime(event.startDate, dateConfig())} ${event.title}`).join("\n");
1742
3123
  return [(() => {
1743
- var _el$143 = _$getNextElement(_tmpl$36),
1744
- _el$144 = _el$143.firstChild,
1745
- _el$145 = _el$144.firstChild,
1746
- _el$146 = _el$145.nextSibling,
1747
- [_el$147, _co$39] = _$getNextMarker(_el$146.nextSibling);
1748
- _el$143.$$click = event => {
3124
+ var _el$212 = _$getNextElement(_tmpl$57),
3125
+ _el$213 = _el$212.firstChild,
3126
+ _el$214 = _el$213.firstChild,
3127
+ _el$215 = _el$214.nextSibling,
3128
+ [_el$216, _co$56] = _$getNextMarker(_el$215.nextSibling);
3129
+ _el$212.$$click = event => {
1749
3130
  event.stopPropagation();
1750
3131
  setExpandedOverflow(expandedOverflow() === key ? "" : key);
1751
3132
  };
1752
- _$insert(_el$144, () => overflow.hiddenEvents.length, _el$147, _co$39);
3133
+ _$insert(_el$213, () => overflow.hiddenEvents.length, _el$216, _co$56);
1753
3134
  _$effect(_p$ => {
1754
- var _v$48 = `${layout.top}%`,
1755
- _v$49 = `${layout.height}%`,
1756
- _v$50 = hiddenTitle(),
1757
- _v$51 = messages().hiddenOverlappingEvents({
3135
+ var _v$76 = `${layout.top}%`,
3136
+ _v$77 = `${layout.height}%`,
3137
+ _v$78 = hiddenTitle(),
3138
+ _v$79 = calendarMessages().hiddenOverlappingEvents({
1758
3139
  count: overflow.hiddenEvents.length
1759
3140
  });
1760
- _v$48 !== _p$.e && _$setStyleProperty(_el$143, "top", _p$.e = _v$48);
1761
- _v$49 !== _p$.t && _$setStyleProperty(_el$143, "height", _p$.t = _v$49);
1762
- _v$50 !== _p$.a && _$setAttribute(_el$143, "title", _p$.a = _v$50);
1763
- _v$51 !== _p$.o && _$setAttribute(_el$143, "aria-label", _p$.o = _v$51);
3141
+ _v$76 !== _p$.e && _$setStyleProperty(_el$212, "top", _p$.e = _v$76);
3142
+ _v$77 !== _p$.t && _$setStyleProperty(_el$212, "height", _p$.t = _v$77);
3143
+ _v$78 !== _p$.a && _$setAttribute(_el$212, "title", _p$.a = _v$78);
3144
+ _v$79 !== _p$.o && _$setAttribute(_el$212, "aria-label", _p$.o = _v$79);
1764
3145
  return _p$;
1765
3146
  }, {
1766
3147
  e: undefined,
@@ -1769,24 +3150,24 @@ const TimeGridView = props => {
1769
3150
  o: undefined
1770
3151
  });
1771
3152
  _$runHydrationEvents();
1772
- return _el$143;
3153
+ return _el$212;
1773
3154
  })(), _$createComponent(Show, {
1774
3155
  get when() {
1775
3156
  return expandedOverflow() === key;
1776
3157
  },
1777
3158
  get children() {
1778
- var _el$148 = _$getNextElement(_tmpl$37),
1779
- _el$149 = _el$148.firstChild,
1780
- _el$151 = _el$149.firstChild,
1781
- [_el$152, _co$40] = _$getNextMarker(_el$151.nextSibling),
1782
- _el$150 = _el$152.nextSibling,
1783
- _el$153 = _el$150.nextSibling,
1784
- [_el$154, _co$41] = _$getNextMarker(_el$153.nextSibling),
1785
- _el$155 = _el$149.nextSibling,
1786
- [_el$156, _co$42] = _$getNextMarker(_el$155.nextSibling);
1787
- _$insert(_el$149, () => formatTime(overflow.groupStartDate, dateConfig()), _el$152, _co$40);
1788
- _$insert(_el$149, () => formatTime(overflow.groupEndDate, dateConfig()), _el$154, _co$41);
1789
- _$insert(_el$148, _$createComponent(For, {
3159
+ var _el$217 = _$getNextElement(_tmpl$58),
3160
+ _el$218 = _el$217.firstChild,
3161
+ _el$220 = _el$218.firstChild,
3162
+ [_el$221, _co$57] = _$getNextMarker(_el$220.nextSibling),
3163
+ _el$219 = _el$221.nextSibling,
3164
+ _el$222 = _el$219.nextSibling,
3165
+ [_el$223, _co$58] = _$getNextMarker(_el$222.nextSibling),
3166
+ _el$224 = _el$218.nextSibling,
3167
+ [_el$225, _co$59] = _$getNextMarker(_el$224.nextSibling);
3168
+ _$insert(_el$218, () => formatTime(overflow.groupStartDate, dateConfig()), _el$221, _co$57);
3169
+ _$insert(_el$218, () => formatTime(overflow.groupEndDate, dateConfig()), _el$223, _co$58);
3170
+ _$insert(_el$217, _$createComponent(For, {
1790
3171
  get each() {
1791
3172
  return overflow.hiddenEvents;
1792
3173
  },
@@ -1800,41 +3181,41 @@ const TimeGridView = props => {
1800
3181
  },
1801
3182
  compact: true
1802
3183
  })
1803
- }), _el$156, _co$42);
1804
- _$effect(_$p => _$setStyleProperty(_el$148, "top", `${layout.top}%`));
1805
- return _el$148;
3184
+ }), _el$225, _co$59);
3185
+ _$effect(_$p => _$setStyleProperty(_el$217, "top", `${layout.top}%`));
3186
+ return _el$217;
1806
3187
  }
1807
3188
  })];
1808
3189
  }
1809
- }), _el$123, _co$33);
3190
+ }), _el$192, _co$50);
1810
3191
  _$effect(_p$ => {
1811
- var _v$39 = dayColumnMinWidth(layouts()),
1812
- _v$40 = `repeat(${hours().length}, minmax(4rem, 1fr))`;
1813
- _v$39 !== _p$.e && _$setStyleProperty(_el$112, "min-width", _p$.e = _v$39);
1814
- _v$40 !== _p$.t && _$setStyleProperty(_el$112, "grid-template-rows", _p$.t = _v$40);
3192
+ var _v$67 = dayColumnMinWidth(layouts()),
3193
+ _v$68 = `repeat(${hours().length}, minmax(4rem, 1fr))`;
3194
+ _v$67 !== _p$.e && _$setStyleProperty(_el$181, "min-width", _p$.e = _v$67);
3195
+ _v$68 !== _p$.t && _$setStyleProperty(_el$181, "grid-template-rows", _p$.t = _v$68);
1815
3196
  return _p$;
1816
3197
  }, {
1817
3198
  e: undefined,
1818
3199
  t: undefined
1819
3200
  });
1820
- return _el$112;
3201
+ return _el$181;
1821
3202
  })();
1822
3203
  }
1823
- }), _el$91, _co$22);
3204
+ }), _el$160, _co$39);
1824
3205
  _$effect(_p$ => {
1825
- var _v$36 = `4rem repeat(${props.days.length}, minmax(0, 1fr))`,
1826
- _v$37 = `4rem repeat(${props.days.length}, minmax(0, 1fr))`,
1827
- _v$38 = `repeat(${hours().length}, minmax(4rem, 1fr))`;
1828
- _v$36 !== _p$.e && _$setStyleProperty(_el$79, "grid-template-columns", _p$.e = _v$36);
1829
- _v$37 !== _p$.t && _$setStyleProperty(_el$88, "grid-template-columns", _p$.t = _v$37);
1830
- _v$38 !== _p$.a && _$setStyleProperty(_el$89, "grid-template-rows", _p$.a = _v$38);
3206
+ var _v$64 = `4rem repeat(${props.days.length}, minmax(0, 1fr))`,
3207
+ _v$65 = `4rem repeat(${props.days.length}, minmax(0, 1fr))`,
3208
+ _v$66 = `repeat(${hours().length}, minmax(4rem, 1fr))`;
3209
+ _v$64 !== _p$.e && _$setStyleProperty(_el$148, "grid-template-columns", _p$.e = _v$64);
3210
+ _v$65 !== _p$.t && _$setStyleProperty(_el$157, "grid-template-columns", _p$.t = _v$65);
3211
+ _v$66 !== _p$.a && _$setStyleProperty(_el$158, "grid-template-rows", _p$.a = _v$66);
1831
3212
  return _p$;
1832
3213
  }, {
1833
3214
  e: undefined,
1834
3215
  t: undefined,
1835
3216
  a: undefined
1836
3217
  });
1837
- return _el$78;
3218
+ return _el$147;
1838
3219
  })();
1839
3220
  };
1840
3221
  const YearView = props => {
@@ -1875,17 +3256,17 @@ const YearView = props => {
1875
3256
  });
1876
3257
  });
1877
3258
  return (() => {
1878
- var _el$157 = _$getNextElement(_tmpl$38);
1879
- _$insert(_el$157, _$createComponent(For, {
3259
+ var _el$226 = _$getNextElement(_tmpl$59);
3260
+ _$insert(_el$226, _$createComponent(For, {
1880
3261
  get each() {
1881
3262
  return months();
1882
3263
  },
1883
3264
  children: month => (() => {
1884
- var _el$158 = _$getNextElement(_tmpl$39),
1885
- _el$159 = _el$158.firstChild,
1886
- _el$160 = _el$159.nextSibling;
1887
- _$insert(_el$159, () => month.label);
1888
- _$insert(_el$160, _$createComponent(For, {
3265
+ var _el$227 = _$getNextElement(_tmpl$60),
3266
+ _el$228 = _el$227.firstChild,
3267
+ _el$229 = _el$228.nextSibling;
3268
+ _$insert(_el$228, () => month.label);
3269
+ _$insert(_el$229, _$createComponent(For, {
1889
3270
  get each() {
1890
3271
  return month.days;
1891
3272
  },
@@ -1909,32 +3290,32 @@ const YearView = props => {
1909
3290
  return day.events[0];
1910
3291
  },
1911
3292
  children: event => (() => {
1912
- var _el$161 = _$getNextElement(_tmpl$40);
3293
+ var _el$230 = _$getNextElement(_tmpl$61);
1913
3294
  _$effect(_p$ => {
1914
- var _v$52 = event().colorHex ? undefined : event().color ?? "blue",
1915
- _v$53 = day.isToday ? "true" : undefined,
1916
- _v$54 = event().colorHex ? {
3295
+ var _v$80 = event().colorHex ? undefined : event().color ?? "blue",
3296
+ _v$81 = day.isToday ? "true" : undefined,
3297
+ _v$82 = event().colorHex ? {
1917
3298
  "background-color": day.isToday ? "white" : event().colorHex
1918
3299
  } : undefined;
1919
- _v$52 !== _p$.e && _$setAttribute(_el$161, "data-color", _p$.e = _v$52);
1920
- _v$53 !== _p$.t && _$setAttribute(_el$161, "data-today", _p$.t = _v$53);
1921
- _p$.a = _$style(_el$161, _v$54, _p$.a);
3300
+ _v$80 !== _p$.e && _$setAttribute(_el$230, "data-color", _p$.e = _v$80);
3301
+ _v$81 !== _p$.t && _$setAttribute(_el$230, "data-today", _p$.t = _v$81);
3302
+ _p$.a = _$style(_el$230, _v$82, _p$.a);
1922
3303
  return _p$;
1923
3304
  }, {
1924
3305
  e: undefined,
1925
3306
  t: undefined,
1926
3307
  a: undefined
1927
3308
  });
1928
- return _el$161;
3309
+ return _el$230;
1929
3310
  })()
1930
3311
  })];
1931
3312
  }
1932
3313
  })
1933
3314
  }));
1934
- return _el$158;
3315
+ return _el$227;
1935
3316
  })()
1936
3317
  }));
1937
- return _el$157;
3318
+ return _el$226;
1938
3319
  })();
1939
3320
  };
1940
3321
  const MobileMonthView = props => {
@@ -1942,14 +3323,14 @@ const MobileMonthView = props => {
1942
3323
  const selectedDateKey = createMemo(() => calendar.formatDateKey(props.selectedDate, dateConfig()));
1943
3324
  const selectedEvents = createMemo(() => props.events.filter(event => event.dayKey === selectedDateKey()));
1944
3325
  return (() => {
1945
- var _el$162 = _$getNextElement(_tmpl$42),
1946
- _el$168 = _el$162.firstChild,
1947
- [_el$169, _co$44] = _$getNextMarker(_el$168.nextSibling),
1948
- _el$163 = _el$169.nextSibling,
1949
- _el$164 = _el$163.firstChild,
1950
- _el$166 = _el$164.nextSibling,
1951
- [_el$167, _co$43] = _$getNextMarker(_el$166.nextSibling);
1952
- _$insert(_el$162, _$createComponent(MonthView, {
3326
+ var _el$231 = _$getNextElement(_tmpl$63),
3327
+ _el$237 = _el$231.firstChild,
3328
+ [_el$238, _co$61] = _$getNextMarker(_el$237.nextSibling),
3329
+ _el$232 = _el$238.nextSibling,
3330
+ _el$233 = _el$232.firstChild,
3331
+ _el$235 = _el$233.nextSibling,
3332
+ [_el$236, _co$60] = _$getNextMarker(_el$235.nextSibling);
3333
+ _$insert(_el$231, _$createComponent(MonthPickerView, {
1953
3334
  get owner() {
1954
3335
  return {
1955
3336
  ...props.owner,
@@ -1969,27 +3350,27 @@ const MobileMonthView = props => {
1969
3350
  return props.labels;
1970
3351
  },
1971
3352
  compact: true
1972
- }), _el$169, _co$44);
1973
- _$insert(_el$164, () => props.selectedDate.toLocaleDateString(dateConfig().locale ?? "en", {
3353
+ }), _el$238, _co$61);
3354
+ _$insert(_el$233, () => props.selectedDate.toLocaleDateString(dateConfig().locale ?? "en", {
1974
3355
  weekday: "long",
1975
3356
  month: "long",
1976
3357
  day: "numeric",
1977
3358
  timeZone: dateConfig().timeZone
1978
3359
  }));
1979
- _$insert(_el$163, _$createComponent(Show, {
3360
+ _$insert(_el$232, _$createComponent(Show, {
1980
3361
  get when() {
1981
3362
  return selectedEvents().length > 0;
1982
3363
  },
1983
3364
  get fallback() {
1984
3365
  return (() => {
1985
- var _el$170 = _$getNextElement(_tmpl$43);
1986
- _$insert(_el$170, () => props.labels.noEvents);
1987
- return _el$170;
3366
+ var _el$239 = _$getNextElement(_tmpl$64);
3367
+ _$insert(_el$239, () => props.labels.noEvents);
3368
+ return _el$239;
1988
3369
  })();
1989
3370
  },
1990
3371
  get children() {
1991
- var _el$165 = _$getNextElement(_tmpl$41);
1992
- _$insert(_el$165, _$createComponent(For, {
3372
+ var _el$234 = _$getNextElement(_tmpl$62);
3373
+ _$insert(_el$234, _$createComponent(For, {
1993
3374
  get each() {
1994
3375
  return selectedEvents();
1995
3376
  },
@@ -2003,19 +3384,20 @@ const MobileMonthView = props => {
2003
3384
  }
2004
3385
  })
2005
3386
  }));
2006
- return _el$165;
3387
+ return _el$234;
2007
3388
  }
2008
- }), _el$167, _co$43);
2009
- return _el$162;
3389
+ }), _el$236, _co$60);
3390
+ return _el$231;
2010
3391
  })();
2011
3392
  };
2012
3393
  const CalendarBody = props => (() => {
2013
- var _el$171 = _$getNextElement(_tmpl$44);
2014
- _$insert(_el$171, () => props.children);
2015
- return _el$171;
3394
+ var _el$240 = _$getNextElement(_tmpl$65);
3395
+ _$insert(_el$240, () => props.children);
3396
+ return _el$240;
2016
3397
  })();
2017
3398
  const CalendarRoot = props => {
2018
3399
  const messages = useUiMessages();
3400
+ const calendarMessages = useCalendarMessages();
2019
3401
  // Subviews derive their date config from the owner props, so the inherited
2020
3402
  // render locale is merged here once; an explicit dateConfig.locale wins.
2021
3403
  const localizedConfig = useDateConfigLocale(() => props.dateConfig);
@@ -2034,6 +3416,8 @@ const CalendarRoot = props => {
2034
3416
  const date = createMemo(() => safeDate(props.date));
2035
3417
  const selectedDate = createMemo(() => safeDate(props.selectedDate ?? props.date));
2036
3418
  const [now, setNow] = createSignal(new Date());
3419
+ /** The first day selected in the month view, so the view switcher opens the other views at it. */
3420
+ const [focusDay, setFocusDay] = createSignal(null);
2037
3421
  const normalizedEvents = createMemo(() => normalizeEvents(props.events, dateConfig()));
2038
3422
  const mergedLabels = createMemo(() => ({
2039
3423
  today: messages().today,
@@ -2042,7 +3426,7 @@ const CalendarRoot = props => {
2042
3426
  month: messages().month,
2043
3427
  year: messages().year,
2044
3428
  allDay: messages().allDay,
2045
- noEvents: messages().noEvents,
3429
+ noEvents: calendarMessages().noEvents,
2046
3430
  previous: messages().previous,
2047
3431
  next: messages().next,
2048
3432
  ...props.labels
@@ -2061,14 +3445,12 @@ const CalendarRoot = props => {
2061
3445
  });
2062
3446
  });
2063
3447
  return (() => {
2064
- var _el$172 = _$getNextElement(_tmpl$45),
2065
- _el$173 = _el$172.firstChild,
2066
- [_el$174, _co$45] = _$getNextMarker(_el$173.nextSibling),
2067
- _el$175 = _el$174.nextSibling,
2068
- [_el$176, _co$46] = _$getNextMarker(_el$175.nextSibling),
2069
- _el$177 = _el$176.nextSibling,
2070
- [_el$178, _co$47] = _$getNextMarker(_el$177.nextSibling);
2071
- _$insert(_el$172, _$createComponent(CalendarHeader, {
3448
+ var _el$241 = _$getNextElement(_tmpl$66),
3449
+ _el$242 = _el$241.firstChild,
3450
+ [_el$243, _co$62] = _$getNextMarker(_el$242.nextSibling),
3451
+ _el$244 = _el$243.nextSibling,
3452
+ [_el$245, _co$63] = _$getNextMarker(_el$244.nextSibling);
3453
+ _$insert(_el$241, _$createComponent(CalendarHeader, {
2072
3454
  get date() {
2073
3455
  return date();
2074
3456
  },
@@ -2078,10 +3460,12 @@ const CalendarRoot = props => {
2078
3460
  get labels() {
2079
3461
  return mergedLabels();
2080
3462
  },
2081
- owner: owner
2082
- }), _el$174, _co$45);
2083
- _$insert(_el$172, () => props.toolbarContent, _el$176, _co$46);
2084
- _$insert(_el$172, _$createComponent(Show, {
3463
+ owner: owner,
3464
+ get focusDay() {
3465
+ return _$memo(() => view() === "month")() ? focusDay() : null;
3466
+ }
3467
+ }), _el$243, _co$62);
3468
+ _$insert(_el$241, _$createComponent(Show, {
2085
3469
  get when() {
2086
3470
  return !custom();
2087
3471
  },
@@ -2113,7 +3497,8 @@ const CalendarRoot = props => {
2113
3497
  },
2114
3498
  get labels() {
2115
3499
  return mergedLabels();
2116
- }
3500
+ },
3501
+ onFocusDay: setFocusDay
2117
3502
  });
2118
3503
  }
2119
3504
  });
@@ -2196,18 +3581,18 @@ const CalendarRoot = props => {
2196
3581
  }
2197
3582
  });
2198
3583
  }
2199
- }), _el$178, _co$47);
3584
+ }), _el$245, _co$63);
2200
3585
  _$effect(_p$ => {
2201
- var _v$55 = `k2b-content-calendar ${props.class ?? ""}`,
2202
- _v$56 = props.navigationPending ? "true" : undefined;
2203
- _v$55 !== _p$.e && _$className(_el$172, _p$.e = _v$55);
2204
- _v$56 !== _p$.t && _$setAttribute(_el$172, "aria-busy", _p$.t = _v$56);
3586
+ var _v$83 = `k2b-content-calendar ${props.class ?? ""}`,
3587
+ _v$84 = props.navigationPending ? "true" : undefined;
3588
+ _v$83 !== _p$.e && _$className(_el$241, _p$.e = _v$83);
3589
+ _v$84 !== _p$.t && _$setAttribute(_el$241, "aria-busy", _p$.t = _v$84);
2205
3590
  return _p$;
2206
3591
  }, {
2207
3592
  e: undefined,
2208
3593
  t: undefined
2209
3594
  });
2210
- return _el$172;
3595
+ return _el$241;
2211
3596
  })();
2212
3597
  };
2213
3598
 
@@ -2217,5 +3602,5 @@ function Calendar(props) {
2217
3602
  return CalendarRoot(props);
2218
3603
  }
2219
3604
  export default Calendar;
2220
- _$delegateEvents(["click", "dblclick", "pointerdown", "keydown"]);
3605
+ _$delegateEvents(["click", "dblclick", "pointerdown", "keydown", "contextmenu", "focusin"]);
2221
3606
  //# sourceMappingURL=Calendar.js.map