@k2b/ui 0.21.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 (563) hide show
  1. package/dist/browser/actions/ContextMenu.js +3 -1
  2. package/dist/browser/actions/ContextMenu.js.map +1 -1
  3. package/dist/browser/actions/FilterChip.js +3 -1
  4. package/dist/browser/actions/FilterChip.js.map +1 -1
  5. package/dist/browser/actions/SpotlightSearch.js +3 -1
  6. package/dist/browser/actions/SpotlightSearch.js.map +1 -1
  7. package/dist/browser/actions/filter-messages.js +20 -0
  8. package/dist/browser/actions/filter-messages.js.map +1 -0
  9. package/dist/browser/actions/spotlight-messages.js +16 -0
  10. package/dist/browser/actions/spotlight-messages.js.map +1 -0
  11. package/dist/browser/chat/ChatComposer.js +47 -41
  12. package/dist/browser/chat/ChatComposer.js.map +1 -1
  13. package/dist/browser/chat/ChatPrimitives.js +25 -23
  14. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  15. package/dist/browser/chat/ChatRoot.js +3 -3
  16. package/dist/browser/chat/ChatRoot.js.map +1 -1
  17. package/dist/browser/chat/ChatTimeline.js +12 -12
  18. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  19. package/dist/browser/chat/chat-messages.js +236 -0
  20. package/dist/browser/chat/chat-messages.js.map +1 -0
  21. package/dist/browser/content/Calendar.js +18 -19
  22. package/dist/browser/content/Calendar.js.map +1 -1
  23. package/dist/browser/content/Chart.js +15 -8
  24. package/dist/browser/content/Chart.js.map +1 -1
  25. package/dist/browser/content/ChartExplorer.js +20 -12
  26. package/dist/browser/content/ChartExplorer.js.map +1 -1
  27. package/dist/browser/content/ChartExplorerControls.js +9 -7
  28. package/dist/browser/content/ChartExplorerControls.js.map +1 -1
  29. package/dist/browser/content/ChartFilterControls.js +4 -2
  30. package/dist/browser/content/ChartFilterControls.js.map +1 -1
  31. package/dist/browser/content/ChartSnapshotView.js +3 -3
  32. package/dist/browser/content/ChartSnapshotView.js.map +1 -1
  33. package/dist/browser/content/DataTable.js +68 -59
  34. package/dist/browser/content/DataTable.js.map +1 -1
  35. package/dist/browser/content/Docs.js +3 -1
  36. package/dist/browser/content/Docs.js.map +1 -1
  37. package/dist/browser/content/FileBrowser.js +30 -26
  38. package/dist/browser/content/FileBrowser.js.map +1 -1
  39. package/dist/browser/content/FileTree.js +9 -7
  40. package/dist/browser/content/FileTree.js.map +1 -1
  41. package/dist/browser/content/FileView.js +37 -28
  42. package/dist/browser/content/FileView.js.map +1 -1
  43. package/dist/browser/content/Lightbox.js +9 -7
  44. package/dist/browser/content/Lightbox.js.map +1 -1
  45. package/dist/browser/content/LogEntriesTable.js +3 -3
  46. package/dist/browser/content/LogEntriesTable.js.map +1 -1
  47. package/dist/browser/content/MessageRow.js +24 -22
  48. package/dist/browser/content/MessageRow.js.map +1 -1
  49. package/dist/browser/content/Pagination.js +7 -7
  50. package/dist/browser/content/Pagination.js.map +1 -1
  51. package/dist/browser/content/PdfPreview.js +15 -13
  52. package/dist/browser/content/PdfPreview.js.map +1 -1
  53. package/dist/browser/content/RangePicker.js +3 -1
  54. package/dist/browser/content/RangePicker.js.map +1 -1
  55. package/dist/browser/content/StructuredDataPreview.js +3 -1
  56. package/dist/browser/content/StructuredDataPreview.js.map +1 -1
  57. package/dist/browser/content/Timeline.js +13 -11
  58. package/dist/browser/content/Timeline.js.map +1 -1
  59. package/dist/browser/content/VideoPlayer.js +5 -5
  60. package/dist/browser/content/VideoPlayer.js.map +1 -1
  61. package/dist/browser/content/VirtualFeed.js +6 -4
  62. package/dist/browser/content/VirtualFeed.js.map +1 -1
  63. package/dist/browser/content/ZoomPanViewport.js +10 -7
  64. package/dist/browser/content/ZoomPanViewport.js.map +1 -1
  65. package/dist/browser/content/calendar-messages.js +39 -1
  66. package/dist/browser/content/calendar-messages.js.map +1 -1
  67. package/dist/browser/content/calendar-pointer.js +4 -3
  68. package/dist/browser/content/calendar-pointer.js.map +1 -1
  69. package/dist/browser/content/chart-messages.js +136 -0
  70. package/dist/browser/content/chart-messages.js.map +1 -0
  71. package/dist/browser/content/collection-selection.js +2 -0
  72. package/dist/browser/content/collection-selection.js.map +1 -1
  73. package/dist/browser/content/data-table-messages.js +24 -0
  74. package/dist/browser/content/data-table-messages.js.map +1 -0
  75. package/dist/browser/content/docs-messages.js +24 -0
  76. package/dist/browser/content/docs-messages.js.map +1 -0
  77. package/dist/browser/content/feed-messages.js +34 -0
  78. package/dist/browser/content/feed-messages.js.map +1 -0
  79. package/dist/browser/content/file-browser-messages.js +69 -0
  80. package/dist/browser/content/file-browser-messages.js.map +1 -0
  81. package/dist/browser/content/file-view-messages.js +64 -0
  82. package/dist/browser/content/file-view-messages.js.map +1 -0
  83. package/dist/browser/content/lightbox-messages.js +36 -0
  84. package/dist/browser/content/lightbox-messages.js.map +1 -0
  85. package/dist/browser/content/log-entries-messages.js +20 -0
  86. package/dist/browser/content/log-entries-messages.js.map +1 -0
  87. package/dist/browser/content/markdown-info-block-messages.js +24 -0
  88. package/dist/browser/content/markdown-info-block-messages.js.map +1 -0
  89. package/dist/browser/content/markdown-info-blocks.js +3 -3
  90. package/dist/browser/content/markdown-info-blocks.js.map +1 -1
  91. package/dist/browser/content/markdown-links.js +2 -2
  92. package/dist/browser/content/markdown-links.js.map +1 -1
  93. package/dist/browser/content/markdown-reference-messages.js +30 -0
  94. package/dist/browser/content/markdown-reference-messages.js.map +1 -0
  95. package/dist/browser/content/pagination-messages.js +38 -0
  96. package/dist/browser/content/pagination-messages.js.map +1 -0
  97. package/dist/browser/content/pdf-messages.js +43 -0
  98. package/dist/browser/content/pdf-messages.js.map +1 -0
  99. package/dist/browser/content/range-picker-messages.js +20 -0
  100. package/dist/browser/content/range-picker-messages.js.map +1 -0
  101. package/dist/browser/content/structured-data-messages.js +22 -0
  102. package/dist/browser/content/structured-data-messages.js.map +1 -0
  103. package/dist/browser/content/timeline-messages.js +62 -0
  104. package/dist/browser/content/timeline-messages.js.map +1 -0
  105. package/dist/browser/content/video-messages.js +24 -0
  106. package/dist/browser/content/video-messages.js.map +1 -0
  107. package/dist/browser/content/viewport-messages.js +28 -0
  108. package/dist/browser/content/viewport-messages.js.map +1 -0
  109. package/dist/browser/feedback/HoverPreview.js +34 -6
  110. package/dist/browser/feedback/HoverPreview.js.map +1 -1
  111. package/dist/browser/feedback/InstallGuide.js +18 -18
  112. package/dist/browser/feedback/InstallGuide.js.map +1 -1
  113. package/dist/browser/feedback/install-messages.js +104 -0
  114. package/dist/browser/feedback/install-messages.js.map +1 -0
  115. package/dist/browser/feedback/prompt-messages.js +65 -0
  116. package/dist/browser/feedback/prompt-messages.js.map +1 -0
  117. package/dist/browser/feedback/prompts.js +14 -11
  118. package/dist/browser/feedback/prompts.js.map +1 -1
  119. package/dist/browser/feedback/toast-messages.js +18 -0
  120. package/dist/browser/feedback/toast-messages.js.map +1 -0
  121. package/dist/browser/feedback/toast.js +4 -3
  122. package/dist/browser/feedback/toast.js.map +1 -1
  123. package/dist/browser/index.js +1 -1
  124. package/dist/browser/index.js.map +1 -1
  125. package/dist/browser/inputs/AutocompleteEditor.js +6 -4
  126. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
  127. package/dist/browser/inputs/AutocompleteSelect.js +10 -8
  128. package/dist/browser/inputs/AutocompleteSelect.js.map +1 -1
  129. package/dist/browser/inputs/ChoiceGroups.js +4 -0
  130. package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
  131. package/dist/browser/inputs/ChoiceInputs.js +5 -5
  132. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  133. package/dist/browser/inputs/Combobox.js +3 -1
  134. package/dist/browser/inputs/Combobox.js.map +1 -1
  135. package/dist/browser/inputs/FileDropTarget.js +6 -6
  136. package/dist/browser/inputs/FileDropTarget.js.map +1 -1
  137. package/dist/browser/inputs/FileInputs.js +30 -21
  138. package/dist/browser/inputs/FileInputs.js.map +1 -1
  139. package/dist/browser/inputs/MultiSelectInput.js +7 -5
  140. package/dist/browser/inputs/MultiSelectInput.js.map +1 -1
  141. package/dist/browser/inputs/NumberInput.js +4 -2
  142. package/dist/browser/inputs/NumberInput.js.map +1 -1
  143. package/dist/browser/inputs/QrScanner.js +5 -5
  144. package/dist/browser/inputs/QrScanner.js.map +1 -1
  145. package/dist/browser/inputs/Select.js +7 -5
  146. package/dist/browser/inputs/Select.js.map +1 -1
  147. package/dist/browser/inputs/SelectChip.js +3 -3
  148. package/dist/browser/inputs/SelectChip.js.map +1 -1
  149. package/dist/browser/inputs/SignatureInput.js +9 -3
  150. package/dist/browser/inputs/SignatureInput.js.map +1 -1
  151. package/dist/browser/inputs/SpecialInputs.js +4 -2
  152. package/dist/browser/inputs/SpecialInputs.js.map +1 -1
  153. package/dist/browser/inputs/TagEditor.js +8 -6
  154. package/dist/browser/inputs/TagEditor.js.map +1 -1
  155. package/dist/browser/inputs/TagsInput.js +5 -5
  156. package/dist/browser/inputs/TagsInput.js.map +1 -1
  157. package/dist/browser/inputs/TemplateEditor.js +5 -5
  158. package/dist/browser/inputs/TemplateEditor.js.map +1 -1
  159. package/dist/browser/inputs/TextInput.js +3 -1
  160. package/dist/browser/inputs/TextInput.js.map +1 -1
  161. package/dist/browser/inputs/completion-messages.js +24 -0
  162. package/dist/browser/inputs/completion-messages.js.map +1 -0
  163. package/dist/browser/inputs/file-drop-messages.js +63 -0
  164. package/dist/browser/inputs/file-drop-messages.js.map +1 -0
  165. package/dist/browser/inputs/file-drop.js.map +1 -1
  166. package/dist/browser/inputs/file-input-messages.js +60 -0
  167. package/dist/browser/inputs/file-input-messages.js.map +1 -0
  168. package/dist/browser/inputs/icon-messages.js +22 -0
  169. package/dist/browser/inputs/icon-messages.js.map +1 -0
  170. package/dist/browser/inputs/input-messages.js +38 -0
  171. package/dist/browser/inputs/input-messages.js.map +1 -0
  172. package/dist/browser/inputs/markdown/MarkdownEditor.js +10 -6
  173. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  174. package/dist/browser/inputs/markdown/Toolbar.js +13 -13
  175. package/dist/browser/inputs/markdown/Toolbar.js.map +1 -1
  176. package/dist/browser/inputs/markdown/editor-messages.js +43 -0
  177. package/dist/browser/inputs/markdown/editor-messages.js.map +1 -0
  178. package/dist/browser/inputs/markdown/toolbar-messages.js +40 -0
  179. package/dist/browser/inputs/markdown/toolbar-messages.js.map +1 -0
  180. package/dist/browser/inputs/qr-messages.js +26 -0
  181. package/dist/browser/inputs/qr-messages.js.map +1 -0
  182. package/dist/browser/inputs/select-messages.js +63 -0
  183. package/dist/browser/inputs/select-messages.js.map +1 -0
  184. package/dist/browser/inputs/tag-messages.js +44 -0
  185. package/dist/browser/inputs/tag-messages.js.map +1 -0
  186. package/dist/browser/inputs/template-messages.js +22 -0
  187. package/dist/browser/inputs/template-messages.js.map +1 -0
  188. package/dist/browser/internal/render-error-messages.js +20 -0
  189. package/dist/browser/internal/render-error-messages.js.map +1 -0
  190. package/dist/browser/internal/render-error.js +3 -1
  191. package/dist/browser/internal/render-error.js.map +1 -1
  192. package/dist/browser/internal/text-selection.js +101 -0
  193. package/dist/browser/internal/text-selection.js.map +1 -0
  194. package/dist/browser/intl/messages.js +6 -1155
  195. package/dist/browser/intl/messages.js.map +1 -1
  196. package/dist/browser/layout/AppWorkspace.js +561 -418
  197. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  198. package/dist/browser/layout/BottomSheet.js +6 -1
  199. package/dist/browser/layout/BottomSheet.js.map +1 -1
  200. package/dist/browser/layout/Discussion.js +8 -5
  201. package/dist/browser/layout/Discussion.js.map +1 -1
  202. package/dist/browser/layout/FloatingWindow.js +8 -5
  203. package/dist/browser/layout/FloatingWindow.js.map +1 -1
  204. package/dist/browser/layout/Navigation.js +7 -6
  205. package/dist/browser/layout/Navigation.js.map +1 -1
  206. package/dist/browser/layout/PageTitle.js +370 -0
  207. package/dist/browser/layout/PageTitle.js.map +1 -0
  208. package/dist/browser/layout/PanelDialog.js +8 -6
  209. package/dist/browser/layout/PanelDialog.js.map +1 -1
  210. package/dist/browser/layout/Panes.js +23 -15
  211. package/dist/browser/layout/Panes.js.map +1 -1
  212. package/dist/browser/layout/PullToRefresh.js +13 -4
  213. package/dist/browser/layout/PullToRefresh.js.map +1 -1
  214. package/dist/browser/layout/Settings.js +14 -12
  215. package/dist/browser/layout/Settings.js.map +1 -1
  216. package/dist/browser/layout/SettingsCollection.js +6 -5
  217. package/dist/browser/layout/SettingsCollection.js.map +1 -1
  218. package/dist/browser/layout/SettingsModal.js +3 -1
  219. package/dist/browser/layout/SettingsModal.js.map +1 -1
  220. package/dist/browser/layout/app-workspace-controller.js +743 -12
  221. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  222. package/dist/browser/layout/app-workspace-state.js +3 -2
  223. package/dist/browser/layout/app-workspace-state.js.map +1 -1
  224. package/dist/browser/layout/floating-window-messages.js +28 -0
  225. package/dist/browser/layout/floating-window-messages.js.map +1 -0
  226. package/dist/browser/layout/index.js +2 -0
  227. package/dist/browser/layout/index.js.map +1 -1
  228. package/dist/browser/layout/navigation-model.js.map +1 -1
  229. package/dist/browser/layout/page-title-controller.js +169 -0
  230. package/dist/browser/layout/page-title-controller.js.map +1 -0
  231. package/dist/browser/layout/panel-dialog-messages.js +20 -0
  232. package/dist/browser/layout/panel-dialog-messages.js.map +1 -0
  233. package/dist/browser/layout/panes-messages.js +48 -0
  234. package/dist/browser/layout/panes-messages.js.map +1 -0
  235. package/dist/browser/layout/refresh-messages.js +20 -0
  236. package/dist/browser/layout/refresh-messages.js.map +1 -0
  237. package/dist/browser/layout/settings-messages.js +54 -0
  238. package/dist/browser/layout/settings-messages.js.map +1 -0
  239. package/dist/browser/layout/workspace-messages.js +56 -0
  240. package/dist/browser/layout/workspace-messages.js.map +1 -0
  241. package/dist/browser/surfaces/Avatar.js +5 -5
  242. package/dist/browser/surfaces/Avatar.js.map +1 -1
  243. package/dist/browser/surfaces/ResourceCard.js +4 -2
  244. package/dist/browser/surfaces/ResourceCard.js.map +1 -1
  245. package/dist/browser/surfaces/Tag.js +3 -3
  246. package/dist/browser/surfaces/Tag.js.map +1 -1
  247. package/dist/browser/surfaces/avatar-messages.js +26 -0
  248. package/dist/browser/surfaces/avatar-messages.js.map +1 -0
  249. package/dist/browser/surfaces/resource-messages.js +26 -0
  250. package/dist/browser/surfaces/resource-messages.js.map +1 -0
  251. package/dist/browser/widgets/Widget.js +6 -0
  252. package/dist/browser/widgets/Widget.js.map +1 -1
  253. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  254. package/dist/ssr/actions/FilterChip.js +3 -1
  255. package/dist/ssr/actions/FilterChip.js.map +1 -1
  256. package/dist/ssr/actions/SpotlightSearch.js +3 -1
  257. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  258. package/dist/ssr/actions/filter-messages.js +20 -0
  259. package/dist/ssr/actions/filter-messages.js.map +1 -0
  260. package/dist/ssr/actions/spotlight-messages.js +16 -0
  261. package/dist/ssr/actions/spotlight-messages.js.map +1 -0
  262. package/dist/ssr/chat/ChatComposer.js +47 -41
  263. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  264. package/dist/ssr/chat/ChatPrimitives.js +23 -21
  265. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  266. package/dist/ssr/chat/ChatRoot.js +3 -3
  267. package/dist/ssr/chat/ChatRoot.js.map +1 -1
  268. package/dist/ssr/chat/ChatTimeline.js +11 -11
  269. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  270. package/dist/ssr/chat/chat-messages.js +236 -0
  271. package/dist/ssr/chat/chat-messages.js.map +1 -0
  272. package/dist/ssr/content/Calendar.js +18 -19
  273. package/dist/ssr/content/Calendar.js.map +1 -1
  274. package/dist/ssr/content/Chart.js +12 -5
  275. package/dist/ssr/content/Chart.js.map +1 -1
  276. package/dist/ssr/content/ChartExplorer.js +10 -8
  277. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  278. package/dist/ssr/content/ChartExplorerControls.js +9 -7
  279. package/dist/ssr/content/ChartExplorerControls.js.map +1 -1
  280. package/dist/ssr/content/ChartFilterControls.js +4 -2
  281. package/dist/ssr/content/ChartFilterControls.js.map +1 -1
  282. package/dist/ssr/content/ChartSnapshotView.js +3 -3
  283. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  284. package/dist/ssr/content/DataTable.js +10 -4
  285. package/dist/ssr/content/DataTable.js.map +1 -1
  286. package/dist/ssr/content/Docs.js +3 -1
  287. package/dist/ssr/content/Docs.js.map +1 -1
  288. package/dist/ssr/content/FileBrowser.js +30 -26
  289. package/dist/ssr/content/FileBrowser.js.map +1 -1
  290. package/dist/ssr/content/FileTree.js +9 -7
  291. package/dist/ssr/content/FileTree.js.map +1 -1
  292. package/dist/ssr/content/FileView.js +37 -28
  293. package/dist/ssr/content/FileView.js.map +1 -1
  294. package/dist/ssr/content/Lightbox.js +8 -6
  295. package/dist/ssr/content/Lightbox.js.map +1 -1
  296. package/dist/ssr/content/LogEntriesTable.js +3 -3
  297. package/dist/ssr/content/LogEntriesTable.js.map +1 -1
  298. package/dist/ssr/content/MessageRow.js +24 -22
  299. package/dist/ssr/content/MessageRow.js.map +1 -1
  300. package/dist/ssr/content/Pagination.js +6 -6
  301. package/dist/ssr/content/Pagination.js.map +1 -1
  302. package/dist/ssr/content/PdfPreview.js +15 -13
  303. package/dist/ssr/content/PdfPreview.js.map +1 -1
  304. package/dist/ssr/content/RangePicker.js +3 -1
  305. package/dist/ssr/content/RangePicker.js.map +1 -1
  306. package/dist/ssr/content/StructuredDataPreview.js +3 -1
  307. package/dist/ssr/content/StructuredDataPreview.js.map +1 -1
  308. package/dist/ssr/content/Timeline.js +13 -11
  309. package/dist/ssr/content/Timeline.js.map +1 -1
  310. package/dist/ssr/content/VideoPlayer.js +5 -5
  311. package/dist/ssr/content/VideoPlayer.js.map +1 -1
  312. package/dist/ssr/content/VirtualFeed.js +6 -4
  313. package/dist/ssr/content/VirtualFeed.js.map +1 -1
  314. package/dist/ssr/content/ZoomPanViewport.js +7 -4
  315. package/dist/ssr/content/ZoomPanViewport.js.map +1 -1
  316. package/dist/ssr/content/calendar-messages.js +39 -1
  317. package/dist/ssr/content/calendar-messages.js.map +1 -1
  318. package/dist/ssr/content/calendar-pointer.js +4 -3
  319. package/dist/ssr/content/calendar-pointer.js.map +1 -1
  320. package/dist/ssr/content/chart-messages.js +136 -0
  321. package/dist/ssr/content/chart-messages.js.map +1 -0
  322. package/dist/ssr/content/collection-selection.js +2 -0
  323. package/dist/ssr/content/collection-selection.js.map +1 -1
  324. package/dist/ssr/content/data-table-messages.js +24 -0
  325. package/dist/ssr/content/data-table-messages.js.map +1 -0
  326. package/dist/ssr/content/docs-messages.js +24 -0
  327. package/dist/ssr/content/docs-messages.js.map +1 -0
  328. package/dist/ssr/content/feed-messages.js +34 -0
  329. package/dist/ssr/content/feed-messages.js.map +1 -0
  330. package/dist/ssr/content/file-browser-messages.js +69 -0
  331. package/dist/ssr/content/file-browser-messages.js.map +1 -0
  332. package/dist/ssr/content/file-view-messages.js +64 -0
  333. package/dist/ssr/content/file-view-messages.js.map +1 -0
  334. package/dist/ssr/content/lightbox-messages.js +36 -0
  335. package/dist/ssr/content/lightbox-messages.js.map +1 -0
  336. package/dist/ssr/content/log-entries-messages.js +20 -0
  337. package/dist/ssr/content/log-entries-messages.js.map +1 -0
  338. package/dist/ssr/content/markdown-info-block-messages.js +24 -0
  339. package/dist/ssr/content/markdown-info-block-messages.js.map +1 -0
  340. package/dist/ssr/content/markdown-info-blocks.js +3 -3
  341. package/dist/ssr/content/markdown-info-blocks.js.map +1 -1
  342. package/dist/ssr/content/markdown-links.js +2 -2
  343. package/dist/ssr/content/markdown-links.js.map +1 -1
  344. package/dist/ssr/content/markdown-reference-messages.js +30 -0
  345. package/dist/ssr/content/markdown-reference-messages.js.map +1 -0
  346. package/dist/ssr/content/pagination-messages.js +38 -0
  347. package/dist/ssr/content/pagination-messages.js.map +1 -0
  348. package/dist/ssr/content/pdf-messages.js +43 -0
  349. package/dist/ssr/content/pdf-messages.js.map +1 -0
  350. package/dist/ssr/content/range-picker-messages.js +20 -0
  351. package/dist/ssr/content/range-picker-messages.js.map +1 -0
  352. package/dist/ssr/content/structured-data-messages.js +22 -0
  353. package/dist/ssr/content/structured-data-messages.js.map +1 -0
  354. package/dist/ssr/content/timeline-messages.js +62 -0
  355. package/dist/ssr/content/timeline-messages.js.map +1 -0
  356. package/dist/ssr/content/video-messages.js +24 -0
  357. package/dist/ssr/content/video-messages.js.map +1 -0
  358. package/dist/ssr/content/viewport-messages.js +28 -0
  359. package/dist/ssr/content/viewport-messages.js.map +1 -0
  360. package/dist/ssr/feedback/HoverPreview.js +34 -6
  361. package/dist/ssr/feedback/HoverPreview.js.map +1 -1
  362. package/dist/ssr/feedback/InstallGuide.js +18 -18
  363. package/dist/ssr/feedback/InstallGuide.js.map +1 -1
  364. package/dist/ssr/feedback/install-messages.js +104 -0
  365. package/dist/ssr/feedback/install-messages.js.map +1 -0
  366. package/dist/ssr/feedback/prompt-messages.js +65 -0
  367. package/dist/ssr/feedback/prompt-messages.js.map +1 -0
  368. package/dist/ssr/feedback/prompts.js +14 -11
  369. package/dist/ssr/feedback/prompts.js.map +1 -1
  370. package/dist/ssr/feedback/toast-messages.js +18 -0
  371. package/dist/ssr/feedback/toast-messages.js.map +1 -0
  372. package/dist/ssr/feedback/toast.js +4 -3
  373. package/dist/ssr/feedback/toast.js.map +1 -1
  374. package/dist/ssr/index.js +1 -1
  375. package/dist/ssr/index.js.map +1 -1
  376. package/dist/ssr/inputs/AutocompleteEditor.js +5 -3
  377. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
  378. package/dist/ssr/inputs/AutocompleteSelect.js +10 -8
  379. package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -1
  380. package/dist/ssr/inputs/ChoiceGroups.js +4 -0
  381. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
  382. package/dist/ssr/inputs/ChoiceInputs.js +5 -5
  383. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  384. package/dist/ssr/inputs/Combobox.js +3 -1
  385. package/dist/ssr/inputs/Combobox.js.map +1 -1
  386. package/dist/ssr/inputs/FileDropTarget.js +6 -6
  387. package/dist/ssr/inputs/FileDropTarget.js.map +1 -1
  388. package/dist/ssr/inputs/FileInputs.js +29 -20
  389. package/dist/ssr/inputs/FileInputs.js.map +1 -1
  390. package/dist/ssr/inputs/MultiSelectInput.js +7 -5
  391. package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
  392. package/dist/ssr/inputs/NumberInput.js +4 -2
  393. package/dist/ssr/inputs/NumberInput.js.map +1 -1
  394. package/dist/ssr/inputs/QrScanner.js +4 -4
  395. package/dist/ssr/inputs/QrScanner.js.map +1 -1
  396. package/dist/ssr/inputs/Select.js +7 -5
  397. package/dist/ssr/inputs/Select.js.map +1 -1
  398. package/dist/ssr/inputs/SelectChip.js +3 -3
  399. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  400. package/dist/ssr/inputs/SignatureInput.js +9 -3
  401. package/dist/ssr/inputs/SignatureInput.js.map +1 -1
  402. package/dist/ssr/inputs/SpecialInputs.js +4 -2
  403. package/dist/ssr/inputs/SpecialInputs.js.map +1 -1
  404. package/dist/ssr/inputs/TagEditor.js +8 -6
  405. package/dist/ssr/inputs/TagEditor.js.map +1 -1
  406. package/dist/ssr/inputs/TagsInput.js +5 -5
  407. package/dist/ssr/inputs/TagsInput.js.map +1 -1
  408. package/dist/ssr/inputs/TemplateEditor.js +5 -5
  409. package/dist/ssr/inputs/TemplateEditor.js.map +1 -1
  410. package/dist/ssr/inputs/TextInput.js +3 -1
  411. package/dist/ssr/inputs/TextInput.js.map +1 -1
  412. package/dist/ssr/inputs/completion-messages.js +24 -0
  413. package/dist/ssr/inputs/completion-messages.js.map +1 -0
  414. package/dist/ssr/inputs/file-drop-messages.js +63 -0
  415. package/dist/ssr/inputs/file-drop-messages.js.map +1 -0
  416. package/dist/ssr/inputs/file-drop.js.map +1 -1
  417. package/dist/ssr/inputs/file-input-messages.js +60 -0
  418. package/dist/ssr/inputs/file-input-messages.js.map +1 -0
  419. package/dist/ssr/inputs/icon-messages.js +22 -0
  420. package/dist/ssr/inputs/icon-messages.js.map +1 -0
  421. package/dist/ssr/inputs/input-messages.js +38 -0
  422. package/dist/ssr/inputs/input-messages.js.map +1 -0
  423. package/dist/ssr/inputs/markdown/MarkdownEditor.js +9 -5
  424. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  425. package/dist/ssr/inputs/markdown/Toolbar.js +13 -13
  426. package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -1
  427. package/dist/ssr/inputs/markdown/editor-messages.js +43 -0
  428. package/dist/ssr/inputs/markdown/editor-messages.js.map +1 -0
  429. package/dist/ssr/inputs/markdown/toolbar-messages.js +40 -0
  430. package/dist/ssr/inputs/markdown/toolbar-messages.js.map +1 -0
  431. package/dist/ssr/inputs/qr-messages.js +26 -0
  432. package/dist/ssr/inputs/qr-messages.js.map +1 -0
  433. package/dist/ssr/inputs/select-messages.js +63 -0
  434. package/dist/ssr/inputs/select-messages.js.map +1 -0
  435. package/dist/ssr/inputs/tag-messages.js +44 -0
  436. package/dist/ssr/inputs/tag-messages.js.map +1 -0
  437. package/dist/ssr/inputs/template-messages.js +22 -0
  438. package/dist/ssr/inputs/template-messages.js.map +1 -0
  439. package/dist/ssr/internal/render-error-messages.js +20 -0
  440. package/dist/ssr/internal/render-error-messages.js.map +1 -0
  441. package/dist/ssr/internal/render-error.js +3 -1
  442. package/dist/ssr/internal/render-error.js.map +1 -1
  443. package/dist/ssr/internal/text-selection.js +101 -0
  444. package/dist/ssr/internal/text-selection.js.map +1 -0
  445. package/dist/ssr/intl/messages.js +6 -1155
  446. package/dist/ssr/intl/messages.js.map +1 -1
  447. package/dist/ssr/layout/AppWorkspace.js +203 -96
  448. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  449. package/dist/ssr/layout/BottomSheet.js +1 -0
  450. package/dist/ssr/layout/BottomSheet.js.map +1 -1
  451. package/dist/ssr/layout/Discussion.js +8 -5
  452. package/dist/ssr/layout/Discussion.js.map +1 -1
  453. package/dist/ssr/layout/FloatingWindow.js +8 -5
  454. package/dist/ssr/layout/FloatingWindow.js.map +1 -1
  455. package/dist/ssr/layout/Navigation.js +6 -5
  456. package/dist/ssr/layout/Navigation.js.map +1 -1
  457. package/dist/ssr/layout/PageTitle.js +253 -0
  458. package/dist/ssr/layout/PageTitle.js.map +1 -0
  459. package/dist/ssr/layout/PanelDialog.js +8 -6
  460. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  461. package/dist/ssr/layout/Panes.js +22 -14
  462. package/dist/ssr/layout/Panes.js.map +1 -1
  463. package/dist/ssr/layout/PullToRefresh.js +13 -4
  464. package/dist/ssr/layout/PullToRefresh.js.map +1 -1
  465. package/dist/ssr/layout/Settings.js +14 -12
  466. package/dist/ssr/layout/Settings.js.map +1 -1
  467. package/dist/ssr/layout/SettingsCollection.js +6 -5
  468. package/dist/ssr/layout/SettingsCollection.js.map +1 -1
  469. package/dist/ssr/layout/SettingsModal.js +3 -1
  470. package/dist/ssr/layout/SettingsModal.js.map +1 -1
  471. package/dist/ssr/layout/app-workspace-controller.js +743 -12
  472. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  473. package/dist/ssr/layout/app-workspace-state.js +3 -2
  474. package/dist/ssr/layout/app-workspace-state.js.map +1 -1
  475. package/dist/ssr/layout/floating-window-messages.js +28 -0
  476. package/dist/ssr/layout/floating-window-messages.js.map +1 -0
  477. package/dist/ssr/layout/index.js +2 -0
  478. package/dist/ssr/layout/index.js.map +1 -1
  479. package/dist/ssr/layout/navigation-model.js.map +1 -1
  480. package/dist/ssr/layout/page-title-controller.js +169 -0
  481. package/dist/ssr/layout/page-title-controller.js.map +1 -0
  482. package/dist/ssr/layout/panel-dialog-messages.js +20 -0
  483. package/dist/ssr/layout/panel-dialog-messages.js.map +1 -0
  484. package/dist/ssr/layout/panes-messages.js +48 -0
  485. package/dist/ssr/layout/panes-messages.js.map +1 -0
  486. package/dist/ssr/layout/refresh-messages.js +20 -0
  487. package/dist/ssr/layout/refresh-messages.js.map +1 -0
  488. package/dist/ssr/layout/settings-messages.js +54 -0
  489. package/dist/ssr/layout/settings-messages.js.map +1 -0
  490. package/dist/ssr/layout/workspace-messages.js +56 -0
  491. package/dist/ssr/layout/workspace-messages.js.map +1 -0
  492. package/dist/ssr/surfaces/Avatar.js +5 -5
  493. package/dist/ssr/surfaces/Avatar.js.map +1 -1
  494. package/dist/ssr/surfaces/ResourceCard.js +4 -2
  495. package/dist/ssr/surfaces/ResourceCard.js.map +1 -1
  496. package/dist/ssr/surfaces/Tag.js +3 -3
  497. package/dist/ssr/surfaces/Tag.js.map +1 -1
  498. package/dist/ssr/surfaces/avatar-messages.js +26 -0
  499. package/dist/ssr/surfaces/avatar-messages.js.map +1 -0
  500. package/dist/ssr/surfaces/resource-messages.js +26 -0
  501. package/dist/ssr/surfaces/resource-messages.js.map +1 -0
  502. package/dist/ssr/widgets/Widget.js +6 -0
  503. package/dist/ssr/widgets/Widget.js.map +1 -1
  504. package/dist/styles.css +1 -1
  505. package/dist/types/actions/filter-messages.d.ts +8 -0
  506. package/dist/types/actions/spotlight-messages.d.ts +8 -0
  507. package/dist/types/chat/chat-messages.d.ts +116 -0
  508. package/dist/types/content/DataTable.d.ts +2 -0
  509. package/dist/types/content/FileView.d.ts +0 -10
  510. package/dist/types/content/calendar-messages.d.ts +20 -1
  511. package/dist/types/content/chart-messages.d.ts +32 -0
  512. package/dist/types/content/data-table-messages.d.ts +10 -0
  513. package/dist/types/content/docs-messages.d.ts +10 -0
  514. package/dist/types/content/feed-messages.d.ts +15 -0
  515. package/dist/types/content/file-browser-messages.d.ts +33 -0
  516. package/dist/types/content/file-view-messages.d.ts +30 -0
  517. package/dist/types/content/lightbox-messages.d.ts +16 -0
  518. package/dist/types/content/log-entries-messages.d.ts +8 -0
  519. package/dist/types/content/markdown-info-block-messages.d.ts +12 -0
  520. package/dist/types/content/markdown-reference-messages.d.ts +15 -0
  521. package/dist/types/content/pagination-messages.d.ts +17 -0
  522. package/dist/types/content/pdf-messages.d.ts +20 -0
  523. package/dist/types/content/range-picker-messages.d.ts +8 -0
  524. package/dist/types/content/structured-data-messages.d.ts +9 -0
  525. package/dist/types/content/timeline-messages.d.ts +29 -0
  526. package/dist/types/content/video-messages.d.ts +10 -0
  527. package/dist/types/content/viewport-messages.d.ts +12 -0
  528. package/dist/types/feedback/install-messages.d.ts +50 -0
  529. package/dist/types/feedback/prompt-messages.d.ts +31 -0
  530. package/dist/types/feedback/toast-messages.d.ts +9 -0
  531. package/dist/types/index.d.ts +1 -0
  532. package/dist/types/inputs/completion-messages.d.ts +10 -0
  533. package/dist/types/inputs/file-drop-messages.d.ts +30 -0
  534. package/dist/types/inputs/file-drop.d.ts +3 -3
  535. package/dist/types/inputs/file-input-messages.d.ts +28 -0
  536. package/dist/types/inputs/icon-messages.d.ts +9 -0
  537. package/dist/types/inputs/input-messages.d.ts +17 -0
  538. package/dist/types/inputs/markdown/editor-messages.d.ts +20 -0
  539. package/dist/types/inputs/markdown/toolbar-messages.d.ts +18 -0
  540. package/dist/types/inputs/qr-messages.d.ts +11 -0
  541. package/dist/types/inputs/select-messages.d.ts +30 -0
  542. package/dist/types/inputs/tag-messages.d.ts +20 -0
  543. package/dist/types/inputs/template-messages.d.ts +9 -0
  544. package/dist/types/internal/render-error-messages.d.ts +8 -0
  545. package/dist/types/internal/text-selection.d.ts +18 -0
  546. package/dist/types/intl/messages.d.ts +3 -544
  547. package/dist/types/layout/AppWorkspace.d.ts +19 -4
  548. package/dist/types/layout/PageTitle.d.ts +64 -0
  549. package/dist/types/layout/app-workspace-controller.d.ts +4 -0
  550. package/dist/types/layout/app-workspace-state.d.ts +3 -2
  551. package/dist/types/layout/floating-window-messages.d.ts +12 -0
  552. package/dist/types/layout/index.d.ts +3 -0
  553. package/dist/types/layout/navigation-model.d.ts +7 -0
  554. package/dist/types/layout/page-title-controller.d.ts +13 -0
  555. package/dist/types/layout/panel-dialog-messages.d.ts +8 -0
  556. package/dist/types/layout/panes-messages.d.ts +22 -0
  557. package/dist/types/layout/refresh-messages.d.ts +8 -0
  558. package/dist/types/layout/settings-messages.d.ts +25 -0
  559. package/dist/types/layout/workspace-messages.d.ts +26 -0
  560. package/dist/types/surfaces/avatar-messages.d.ts +11 -0
  561. package/dist/types/surfaces/resource-messages.d.ts +11 -0
  562. package/dist/types/widgets/Widget.d.ts +5 -1
  563. package/package.json +1 -1
@@ -2,13 +2,32 @@ import { i18n } from "@k2b/stdlib";
2
2
  import { useLocale } from "../intl/locale";
3
3
 
4
4
  /**
5
- * The month view's own strings. They live beside the calendar instead of in the shared catalog, so applications that
5
+ * The calendar's own strings. They live beside the calendar instead of in the shared catalog, so applications that
6
6
  * never render a calendar do not ship them.
7
7
  */
8
8
  const calendarMessages = i18n.define({
9
9
  baseLocale: "en",
10
10
  messages: {
11
11
  en: {
12
+ calendarView: "Calendar view",
13
+ openDate: ({
14
+ label
15
+ }) => `Open ${label}`,
16
+ createEventOn: ({
17
+ label
18
+ }) => `Create event on ${label}`,
19
+ hiddenOverlappingEvents: ({
20
+ count
21
+ }) => `${count} hidden overlapping events`,
22
+ calendarEventTime: ({
23
+ title,
24
+ start,
25
+ end
26
+ }) => `${title}, ${start} to ${end}`,
27
+ weekShort: "Wk",
28
+ noEvents: "No events",
29
+ moveEvent: "Move event",
30
+ resizeEvent: "Resize event",
12
31
  calendarMoreEvents: ({
13
32
  count
14
33
  }) => `+${count} more`,
@@ -41,6 +60,25 @@ const calendarMessages = i18n.define({
41
60
  }) => `until ${month ? `${month} ` : ""}${day}`
42
61
  },
43
62
  de: {
63
+ calendarView: "Kalenderansicht",
64
+ openDate: ({
65
+ label
66
+ }) => `${label} öffnen`,
67
+ createEventOn: ({
68
+ label
69
+ }) => `Termin am ${label} erstellen`,
70
+ hiddenOverlappingEvents: ({
71
+ count
72
+ }) => `${count} ausgeblendete überlappende Termine`,
73
+ calendarEventTime: ({
74
+ title,
75
+ start,
76
+ end
77
+ }) => `${title}, ${start} bis ${end}`,
78
+ weekShort: "KW",
79
+ noEvents: "Keine Termine",
80
+ moveEvent: "Termin verschieben",
81
+ resizeEvent: "Termindauer ändern",
44
82
  calendarMoreEvents: ({
45
83
  count
46
84
  }) => `+${count} weitere`,
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["content/calendar-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\n/**\n * The month view's own strings. They live beside the calendar instead of in the shared catalog, so applications that\n * never render a calendar do not ship them.\n */\nconst calendarMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n calendarMoreEvents: ({ count }: { count: number }) => `+${count} more`,\n calendarMoreEventsOn: ({ count, label }: { count: number; label: string }) => `${count} more on ${label}`,\n calendarSelectionActions: \"Actions for the selected days\",\n calendarQuickCreate: \"New entry\",\n calendarSelectedDays: ({ start, end, count }: { start: string; end: string; count: number }) => `${start} – ${end} · ${count} days`,\n calendarOpenDay: \"Open day\",\n calendarOpenWeek: \"Open week\",\n calendarOpenWeekNumber: ({ week }: { week: number }) => `Week ${week}, open week`,\n calendarClearSelection: \"Clear selection\",\n calendarNewEvent: \"New event\",\n calendarNothingPlanned: \"Nothing planned.\",\n calendarContinuesFrom: ({ day, month }: { day: number; month?: string }) => `from ${month ? `${month} ` : \"\"}${day}`,\n calendarContinuesUntil: ({ day, month }: { day: number; month?: string }) => `until ${month ? `${month} ` : \"\"}${day}`,\n },\n de: {\n calendarMoreEvents: ({ count }) => `+${count} weitere`,\n calendarMoreEventsOn: ({ count, label }) => `${count} weitere am ${label}`,\n calendarSelectionActions: \"Aktionen für die ausgewählten Tage\",\n calendarQuickCreate: \"Neuer Eintrag\",\n calendarSelectedDays: ({ start, end, count }) => `${start} – ${end} · ${count} Tage`,\n calendarOpenDay: \"Tag öffnen\",\n calendarOpenWeek: \"Woche öffnen\",\n calendarOpenWeekNumber: ({ week }) => `KW ${week}, Woche öffnen`,\n calendarClearSelection: \"Auswahl aufheben\",\n calendarNewEvent: \"Neuer Termin\",\n calendarNothingPlanned: \"Nichts geplant.\",\n calendarContinuesFrom: ({ day, month }) => `seit ${day}.${month ? ` ${month}` : \"\"}`,\n calendarContinuesUntil: ({ day, month }) => `bis ${day}.${month ? ` ${month}` : \"\"}`,\n },\n },\n});\n\nexport type CalendarMessages = ReturnType<(typeof calendarMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale, like the rest of @k2b/ui. */\nexport const useCalendarMessages = (): (() => CalendarMessages) => {\n const locale = useLocale();\n return () => calendarMessages.resolve([locale()]).t;\n};\n\nexport const checkCalendarMessages = () => calendarMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;;AAE1C;AACA;AACA;AACA;AACA,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC;EACnC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,kBAAkB,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,IAAI,KAAK,OAAO;MACtE,oBAAoB,EAAE,CAAC;QAAE,KAAK;QAAE;MAAwC,CAAC,KAAK,GAAG,KAAK,YAAY,KAAK,EAAE;MACzG,wBAAwB,EAAE,+BAA+B;MACzD,mBAAmB,EAAE,WAAW;MAChC,oBAAoB,EAAE,CAAC;QAAE,KAAK;QAAE,GAAG;QAAE;MAAqD,CAAC,KAAK,GAAG,KAAK,MAAM,GAAG,MAAM,KAAK,OAAO;MACnI,eAAe,EAAE,UAAU;MAC3B,gBAAgB,EAAE,WAAW;MAC7B,sBAAsB,EAAE,CAAC;QAAE;MAAuB,CAAC,KAAK,QAAQ,IAAI,aAAa;MACjF,sBAAsB,EAAE,iBAAiB;MACzC,gBAAgB,EAAE,WAAW;MAC7B,sBAAsB,EAAE,kBAAkB;MAC1C,qBAAqB,EAAE,CAAC;QAAE,GAAG;QAAE;MAAuC,CAAC,KAAK,QAAQ,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE;MACpH,sBAAsB,EAAE,CAAC;QAAE,GAAG;QAAE;MAAuC,CAAC,KAAK,SAAS,KAAK,GAAG,GAAG,KAAK,GAAG,GAAG,EAAE,GAAG,GAAG;IACtH,CAAC;IACD,EAAE,EAAE;MACF,kBAAkB,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,IAAI,KAAK,UAAU;MACtD,oBAAoB,EAAE,CAAC;QAAE,KAAK;QAAE;MAAM,CAAC,KAAK,GAAG,KAAK,eAAe,KAAK,EAAE;MAC1E,wBAAwB,EAAE,oCAAoC;MAC9D,mBAAmB,EAAE,eAAe;MACpC,oBAAoB,EAAE,CAAC;QAAE,KAAK;QAAE,GAAG;QAAE;MAAM,CAAC,KAAK,GAAG,KAAK,MAAM,GAAG,MAAM,KAAK,OAAO;MACpF,eAAe,EAAE,YAAY;MAC7B,gBAAgB,EAAE,cAAc;MAChC,sBAAsB,EAAE,CAAC;QAAE;MAAK,CAAC,KAAK,MAAM,IAAI,gBAAgB;MAChE,sBAAsB,EAAE,kBAAkB;MAC1C,gBAAgB,EAAE,cAAc;MAChC,sBAAsB,EAAE,iBAAiB;MACzC,qBAAqB,EAAE,CAAC;QAAE,GAAG;QAAE;MAAM,CAAC,KAAK,QAAQ,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,EAAE,GAAG,EAAE,EAAE;MACpF,sBAAsB,EAAE,CAAC;QAAE,GAAG;QAAE;MAAM,CAAC,KAAK,OAAO,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,EAAE,GAAG,EAAE;IACpF;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,mBAAmB,GAAG,MAAgC;EACjE,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,OAAO,MAAM,qBAAqB,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/calendar-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\n/**\n * The calendar's own strings. They live beside the calendar instead of in the shared catalog, so applications that\n * never render a calendar do not ship them.\n */\nconst calendarMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n calendarView: \"Calendar view\",\n openDate: ({ label }: { label: string }) => `Open ${label}`,\n createEventOn: ({ label }: { label: string }) => `Create event on ${label}`,\n hiddenOverlappingEvents: ({ count }: { count: number }) => `${count} hidden overlapping events`,\n calendarEventTime: ({ title, start, end }: { title: string; start: string; end: string }) => `${title}, ${start} to ${end}`,\n weekShort: \"Wk\",\n noEvents: \"No events\",\n moveEvent: \"Move event\",\n resizeEvent: \"Resize event\",\n calendarMoreEvents: ({ count }: { count: number }) => `+${count} more`,\n calendarMoreEventsOn: ({ count, label }: { count: number; label: string }) => `${count} more on ${label}`,\n calendarSelectionActions: \"Actions for the selected days\",\n calendarQuickCreate: \"New entry\",\n calendarSelectedDays: ({ start, end, count }: { start: string; end: string; count: number }) => `${start} – ${end} · ${count} days`,\n calendarOpenDay: \"Open day\",\n calendarOpenWeek: \"Open week\",\n calendarOpenWeekNumber: ({ week }: { week: number }) => `Week ${week}, open week`,\n calendarClearSelection: \"Clear selection\",\n calendarNewEvent: \"New event\",\n calendarNothingPlanned: \"Nothing planned.\",\n calendarContinuesFrom: ({ day, month }: { day: number; month?: string }) => `from ${month ? `${month} ` : \"\"}${day}`,\n calendarContinuesUntil: ({ day, month }: { day: number; month?: string }) => `until ${month ? `${month} ` : \"\"}${day}`,\n },\n de: {\n calendarView: \"Kalenderansicht\",\n openDate: ({ label }) => `${label} öffnen`,\n createEventOn: ({ label }) => `Termin am ${label} erstellen`,\n hiddenOverlappingEvents: ({ count }) => `${count} ausgeblendete überlappende Termine`,\n calendarEventTime: ({ title, start, end }) => `${title}, ${start} bis ${end}`,\n weekShort: \"KW\",\n noEvents: \"Keine Termine\",\n moveEvent: \"Termin verschieben\",\n resizeEvent: \"Termindauer ändern\",\n calendarMoreEvents: ({ count }) => `+${count} weitere`,\n calendarMoreEventsOn: ({ count, label }) => `${count} weitere am ${label}`,\n calendarSelectionActions: \"Aktionen für die ausgewählten Tage\",\n calendarQuickCreate: \"Neuer Eintrag\",\n calendarSelectedDays: ({ start, end, count }) => `${start} – ${end} · ${count} Tage`,\n calendarOpenDay: \"Tag öffnen\",\n calendarOpenWeek: \"Woche öffnen\",\n calendarOpenWeekNumber: ({ week }) => `KW ${week}, Woche öffnen`,\n calendarClearSelection: \"Auswahl aufheben\",\n calendarNewEvent: \"Neuer Termin\",\n calendarNothingPlanned: \"Nichts geplant.\",\n calendarContinuesFrom: ({ day, month }) => `seit ${day}.${month ? ` ${month}` : \"\"}`,\n calendarContinuesUntil: ({ day, month }) => `bis ${day}.${month ? ` ${month}` : \"\"}`,\n },\n },\n});\n\nexport type CalendarMessages = ReturnType<(typeof calendarMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale, like the rest of @k2b/ui. */\nexport const useCalendarMessages = (): (() => CalendarMessages) => {\n const locale = useLocale();\n return () => calendarMessages.resolve([locale()]).t;\n};\n\nexport const checkCalendarMessages = () => calendarMessages.check();\n"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,4 @@
1
+ import { suppressTextSelection } from "../internal/text-selection";
1
2
  export const CALENDAR_SNAP_MINUTES = 15;
2
3
  export const snapCalendarMinutes = (minutes, step = CALENDAR_SNAP_MINUTES) => Math.round(minutes / step) * step;
3
4
  export const calendarDayIndexAtPoint = (clientX, startX, width, days) => {
@@ -30,13 +31,13 @@ export const startCalendarPointerSession = options => {
30
31
  const startY = options.event.clientY;
31
32
  // Leave enough room for normal click jitter before an event becomes a drag.
32
33
  const threshold = options.threshold ?? 6;
33
- const previousUserSelect = document.body.style.userSelect;
34
34
  let clientX = startX;
35
35
  let clientY = startY;
36
36
  let active = false;
37
37
  let finished = false;
38
38
  let latest = null;
39
39
  let scrollFrame = 0;
40
+ let releaseTextSelection = null;
40
41
  const preview = () => {
41
42
  const value = options.resolve(clientX, clientY);
42
43
  if (value === null) return;
@@ -63,13 +64,13 @@ export const startCalendarPointerSession = options => {
63
64
  window.removeEventListener("blur", cancel);
64
65
  window.removeEventListener("keydown", onKeyDown);
65
66
  if (target?.hasPointerCapture?.(pointerId)) target.releasePointerCapture(pointerId);
66
- document.body.style.userSelect = previousUserSelect;
67
+ releaseTextSelection?.();
67
68
  if (cancelActiveSession === cancel) cancelActiveSession = null;
68
69
  };
69
70
  const activate = () => {
70
71
  if (active) return;
71
72
  active = true;
72
- document.body.style.userSelect = "none";
73
+ releaseTextSelection = suppressTextSelection(pointerId);
73
74
  target?.setPointerCapture?.(pointerId);
74
75
  options.onActivate?.();
75
76
  preview();
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["content/calendar-pointer.ts"],"sourcesContent":["export const CALENDAR_SNAP_MINUTES = 15;\n\nexport const snapCalendarMinutes = (minutes: number, step = CALENDAR_SNAP_MINUTES): number => Math.round(minutes / step) * step;\n\nexport const calendarDayIndexAtPoint = (clientX: number, startX: number, width: number, days: number): number | null => {\n if (days <= 0 || width <= 0 || clientX < startX || clientX >= startX + width) return null;\n return Math.min(days - 1, Math.floor(((clientX - startX) / width) * days));\n};\n\nexport const calendarMinuteAtPoint = (clientY: number, top: number, height: number, startHour: number, endHour: number): number => {\n const totalMinutes = Math.max(60, (endHour - startHour + 1) * 60);\n const ratio = height > 0 ? Math.min(1, Math.max(0, (clientY - top) / height)) : 0;\n return snapCalendarMinutes(startHour * 60 + ratio * totalMinutes);\n};\n\nexport const calendarAutoScrollSpeed = (clientY: number, top: number, bottom: number, edge = 56, maximum = 18): number => {\n if (clientY < top + edge) return -Math.ceil(maximum * Math.min(1, (top + edge - clientY) / edge));\n if (clientY > bottom - edge) return Math.ceil(maximum * Math.min(1, (clientY - (bottom - edge)) / edge));\n return 0;\n};\n\ntype CalendarPointerSessionOptions<T> = {\n event: PointerEvent;\n resolve: (clientX: number, clientY: number) => T | null;\n onActivate?: () => void;\n onPreview: (value: T) => void;\n onCommit: (value: T) => void;\n onCancel?: () => void;\n scrollContainer?: HTMLElement;\n threshold?: number;\n};\n\nlet cancelActiveSession: (() => void) | null = null;\n\n/**\n * Owns one pointer gesture from threshold crossing through commit or cancel.\n * Views provide geometry through `resolve`; this helper owns global cleanup,\n * pointer cancellation, Escape handling, and edge auto-scroll.\n */\nexport const startCalendarPointerSession = <T>(options: CalendarPointerSessionOptions<T>): (() => void) => {\n if (options.event.button !== 0 || !options.event.isPrimary) return () => {};\n\n cancelActiveSession?.();\n\n const pointerId = options.event.pointerId;\n const target = options.event.currentTarget instanceof HTMLElement ? options.event.currentTarget : null;\n const startX = options.event.clientX;\n const startY = options.event.clientY;\n // Leave enough room for normal click jitter before an event becomes a drag.\n const threshold = options.threshold ?? 6;\n const previousUserSelect = document.body.style.userSelect;\n let clientX = startX;\n let clientY = startY;\n let active = false;\n let finished = false;\n let latest: T | null = null;\n let scrollFrame = 0;\n\n const preview = () => {\n const value = options.resolve(clientX, clientY);\n if (value === null) return;\n latest = value;\n options.onPreview(value);\n };\n\n const autoScroll = () => {\n scrollFrame = 0;\n if (!active || !options.scrollContainer) return;\n const rect = options.scrollContainer.getBoundingClientRect();\n const speed = calendarAutoScrollSpeed(clientY, rect.top, rect.bottom);\n if (speed !== 0) {\n const before = options.scrollContainer.scrollTop;\n options.scrollContainer.scrollTop += speed;\n if (options.scrollContainer.scrollTop !== before) preview();\n }\n scrollFrame = requestAnimationFrame(autoScroll);\n };\n\n const cleanup = () => {\n if (scrollFrame) cancelAnimationFrame(scrollFrame);\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n window.removeEventListener(\"pointercancel\", cancel);\n window.removeEventListener(\"blur\", cancel);\n window.removeEventListener(\"keydown\", onKeyDown);\n if (target?.hasPointerCapture?.(pointerId)) target.releasePointerCapture(pointerId);\n document.body.style.userSelect = previousUserSelect;\n if (cancelActiveSession === cancel) cancelActiveSession = null;\n };\n\n const activate = () => {\n if (active) return;\n active = true;\n document.body.style.userSelect = \"none\";\n target?.setPointerCapture?.(pointerId);\n options.onActivate?.();\n preview();\n if (options.scrollContainer) scrollFrame = requestAnimationFrame(autoScroll);\n };\n\n function cancel() {\n if (finished) return;\n finished = true;\n cleanup();\n if (active) options.onCancel?.();\n }\n\n function onMove(event: PointerEvent) {\n if (finished || event.pointerId !== pointerId) return;\n clientX = event.clientX;\n clientY = event.clientY;\n if (!active && Math.hypot(clientX - startX, clientY - startY) >= threshold) activate();\n if (!active) return;\n event.preventDefault();\n preview();\n }\n\n function onUp(event: PointerEvent) {\n if (finished || event.pointerId !== pointerId) return;\n finished = true;\n cleanup();\n if (active && latest !== null) options.onCommit(latest);\n else if (active) options.onCancel?.();\n }\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key !== \"Escape\") return;\n event.preventDefault();\n cancel();\n }\n\n window.addEventListener(\"pointermove\", onMove, { passive: false });\n window.addEventListener(\"pointerup\", onUp);\n window.addEventListener(\"pointercancel\", cancel);\n window.addEventListener(\"blur\", cancel);\n window.addEventListener(\"keydown\", onKeyDown);\n cancelActiveSession = cancel;\n return cancel;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/calendar-pointer.ts"],"sourcesContent":["import { suppressTextSelection } from \"../internal/text-selection\";\n\nexport const CALENDAR_SNAP_MINUTES = 15;\n\nexport const snapCalendarMinutes = (minutes: number, step = CALENDAR_SNAP_MINUTES): number => Math.round(minutes / step) * step;\n\nexport const calendarDayIndexAtPoint = (clientX: number, startX: number, width: number, days: number): number | null => {\n if (days <= 0 || width <= 0 || clientX < startX || clientX >= startX + width) return null;\n return Math.min(days - 1, Math.floor(((clientX - startX) / width) * days));\n};\n\nexport const calendarMinuteAtPoint = (clientY: number, top: number, height: number, startHour: number, endHour: number): number => {\n const totalMinutes = Math.max(60, (endHour - startHour + 1) * 60);\n const ratio = height > 0 ? Math.min(1, Math.max(0, (clientY - top) / height)) : 0;\n return snapCalendarMinutes(startHour * 60 + ratio * totalMinutes);\n};\n\nexport const calendarAutoScrollSpeed = (clientY: number, top: number, bottom: number, edge = 56, maximum = 18): number => {\n if (clientY < top + edge) return -Math.ceil(maximum * Math.min(1, (top + edge - clientY) / edge));\n if (clientY > bottom - edge) return Math.ceil(maximum * Math.min(1, (clientY - (bottom - edge)) / edge));\n return 0;\n};\n\ntype CalendarPointerSessionOptions<T> = {\n event: PointerEvent;\n resolve: (clientX: number, clientY: number) => T | null;\n onActivate?: () => void;\n onPreview: (value: T) => void;\n onCommit: (value: T) => void;\n onCancel?: () => void;\n scrollContainer?: HTMLElement;\n threshold?: number;\n};\n\nlet cancelActiveSession: (() => void) | null = null;\n\n/**\n * Owns one pointer gesture from threshold crossing through commit or cancel.\n * Views provide geometry through `resolve`; this helper owns global cleanup,\n * pointer cancellation, Escape handling, and edge auto-scroll.\n */\nexport const startCalendarPointerSession = <T>(options: CalendarPointerSessionOptions<T>): (() => void) => {\n if (options.event.button !== 0 || !options.event.isPrimary) return () => {};\n\n cancelActiveSession?.();\n\n const pointerId = options.event.pointerId;\n const target = options.event.currentTarget instanceof HTMLElement ? options.event.currentTarget : null;\n const startX = options.event.clientX;\n const startY = options.event.clientY;\n // Leave enough room for normal click jitter before an event becomes a drag.\n const threshold = options.threshold ?? 6;\n let clientX = startX;\n let clientY = startY;\n let active = false;\n let finished = false;\n let latest: T | null = null;\n let scrollFrame = 0;\n let releaseTextSelection: (() => void) | null = null;\n\n const preview = () => {\n const value = options.resolve(clientX, clientY);\n if (value === null) return;\n latest = value;\n options.onPreview(value);\n };\n\n const autoScroll = () => {\n scrollFrame = 0;\n if (!active || !options.scrollContainer) return;\n const rect = options.scrollContainer.getBoundingClientRect();\n const speed = calendarAutoScrollSpeed(clientY, rect.top, rect.bottom);\n if (speed !== 0) {\n const before = options.scrollContainer.scrollTop;\n options.scrollContainer.scrollTop += speed;\n if (options.scrollContainer.scrollTop !== before) preview();\n }\n scrollFrame = requestAnimationFrame(autoScroll);\n };\n\n const cleanup = () => {\n if (scrollFrame) cancelAnimationFrame(scrollFrame);\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n window.removeEventListener(\"pointercancel\", cancel);\n window.removeEventListener(\"blur\", cancel);\n window.removeEventListener(\"keydown\", onKeyDown);\n if (target?.hasPointerCapture?.(pointerId)) target.releasePointerCapture(pointerId);\n releaseTextSelection?.();\n if (cancelActiveSession === cancel) cancelActiveSession = null;\n };\n\n const activate = () => {\n if (active) return;\n active = true;\n releaseTextSelection = suppressTextSelection(pointerId);\n target?.setPointerCapture?.(pointerId);\n options.onActivate?.();\n preview();\n if (options.scrollContainer) scrollFrame = requestAnimationFrame(autoScroll);\n };\n\n function cancel() {\n if (finished) return;\n finished = true;\n cleanup();\n if (active) options.onCancel?.();\n }\n\n function onMove(event: PointerEvent) {\n if (finished || event.pointerId !== pointerId) return;\n clientX = event.clientX;\n clientY = event.clientY;\n if (!active && Math.hypot(clientX - startX, clientY - startY) >= threshold) activate();\n if (!active) return;\n event.preventDefault();\n preview();\n }\n\n function onUp(event: PointerEvent) {\n if (finished || event.pointerId !== pointerId) return;\n finished = true;\n cleanup();\n if (active && latest !== null) options.onCommit(latest);\n else if (active) options.onCancel?.();\n }\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key !== \"Escape\") return;\n event.preventDefault();\n cancel();\n }\n\n window.addEventListener(\"pointermove\", onMove, { passive: false });\n window.addEventListener(\"pointerup\", onUp);\n window.addEventListener(\"pointercancel\", cancel);\n window.addEventListener(\"blur\", cancel);\n window.addEventListener(\"keydown\", onKeyDown);\n cancelActiveSession = cancel;\n return cancel;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,136 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const chartMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ chartView: "Chart view",
8
+ chartDiagram: "Diagram",
9
+ chartData: "Table",
10
+ chartSeries: "Series visibility",
11
+ chartOnly: "Only",
12
+ chartShowAll: "Show all",
13
+ chartShowing: "Showing",
14
+ chartSelectedDatum: "Selected data point",
15
+ chartReference: "Reference",
16
+ chartCurrent: "Current",
17
+ chartPinReference: "Pin as reference",
18
+ chartRemoveComparison: "Remove comparison",
19
+ chartPreviousData: "The chart and table still show the last loaded filters",
20
+ chartCopyData: "Copy data",
21
+ chartCopyFailed: "Could not copy data",
22
+ interactiveLineChart: "Interactive line chart",
23
+ interactiveChart: "Interactive chart. Use arrow keys to inspect, Enter to select, Escape to dismiss. On maps and timelines use Alt with arrow keys to inspect.",
24
+ chartFields: ({
25
+ key
26
+ }) => {
27
+ const labels = {
28
+ x: "X",
29
+ y: "Y",
30
+ value: "Value",
31
+ percent: "Share",
32
+ total: "Total",
33
+ from: "From",
34
+ to: "To",
35
+ upperInclusive: "Includes upper bound",
36
+ count: "Count",
37
+ q1: "Lower quartile",
38
+ q2: "Median",
39
+ q3: "Upper quartile",
40
+ whiskerLow: "Lower whisker",
41
+ whiskerHigh: "Upper whisker",
42
+ min: "Minimum",
43
+ max: "Maximum",
44
+ threshold: "Threshold",
45
+ delta: "Change",
46
+ latitude: "Latitude",
47
+ longitude: "Longitude",
48
+ size: "Size",
49
+ state: "State",
50
+ duration: "Duration",
51
+ detail: "Detail",
52
+ errY: "Y error",
53
+ errYHigh: "Upper Y error",
54
+ errYLow: "Lower Y error",
55
+ errX: "X error",
56
+ errXHigh: "Upper X error",
57
+ errXLow: "Lower X error"
58
+ };
59
+ return labels[key] ?? key;
60
+ },
61
+ interactiveMap: "Interactive map",
62
+ interactiveTimeline: "Interactive timeline",
63
+ series: "Series",
64
+ resetMapView: "Reset map view",
65
+ resetTimelineView: "Reset timeline view"
66
+ },
67
+ de: {
68
+ chartView: "Diagrammansicht",
69
+ chartDiagram: "Diagramm",
70
+ chartData: "Tabelle",
71
+ chartSeries: "Sichtbare Datenreihen",
72
+ chartOnly: "Nur diese",
73
+ chartShowAll: "Alle anzeigen",
74
+ chartShowing: "Angezeigt",
75
+ chartSelectedDatum: "Ausgewählter Datenpunkt",
76
+ chartReference: "Vergleich",
77
+ chartCurrent: "Aktuell",
78
+ chartPinReference: "Als Vergleich merken",
79
+ chartRemoveComparison: "Vergleich entfernen",
80
+ chartPreviousData: "Diagramm und Tabelle zeigen weiterhin die zuletzt geladenen Filter",
81
+ chartCopyData: "Daten kopieren",
82
+ chartCopyFailed: "Daten konnten nicht kopiert werden",
83
+ interactiveLineChart: "Interaktives Liniendiagramm",
84
+ interactiveChart: "Interaktives Diagramm. Pfeiltasten zum Erkunden, Enter zum Auswählen, Escape zum Schließen. In Karten und Zeitleisten Alt mit Pfeiltasten zum Erkunden.",
85
+ chartFields: ({
86
+ key
87
+ }) => {
88
+ const labels = {
89
+ x: "X",
90
+ y: "Y",
91
+ value: "Wert",
92
+ percent: "Anteil",
93
+ total: "Gesamt",
94
+ from: "Von",
95
+ to: "Bis",
96
+ upperInclusive: "Obergrenze enthalten",
97
+ count: "Anzahl",
98
+ q1: "Unteres Quartil",
99
+ q2: "Median",
100
+ q3: "Oberes Quartil",
101
+ whiskerLow: "Unterer Whisker",
102
+ whiskerHigh: "Oberer Whisker",
103
+ min: "Minimum",
104
+ max: "Maximum",
105
+ threshold: "Schwellenwert",
106
+ delta: "Änderung",
107
+ latitude: "Breitengrad",
108
+ longitude: "Längengrad",
109
+ size: "Größe",
110
+ state: "Zustand",
111
+ duration: "Dauer",
112
+ detail: "Details",
113
+ errY: "Y-Fehler",
114
+ errYHigh: "Oberer Y-Fehler",
115
+ errYLow: "Unterer Y-Fehler",
116
+ errX: "X-Fehler",
117
+ errXHigh: "Oberer X-Fehler",
118
+ errXLow: "Unterer X-Fehler"
119
+ };
120
+ return labels[key] ?? key;
121
+ },
122
+ interactiveMap: "Interaktive Karte",
123
+ interactiveTimeline: "Interaktive Zeitachse",
124
+ series: "Datenreihe",
125
+ resetMapView: "Kartenansicht zurücksetzen",
126
+ resetTimelineView: "Zeitachsenansicht zurücksetzen"
127
+ }
128
+ }
129
+ });
130
+ /** Resolved from the inherited render locale. */
131
+ export const useChartMessages = () => {
132
+ const locale = useLocale();
133
+ return () => chartMessages.resolve([locale()]).t;
134
+ };
135
+ export const checkChartMessages = () => chartMessages.check();
136
+ //# sourceMappingURL=chart-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/chart-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst chartMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n chartView: \"Chart view\",\n chartDiagram: \"Diagram\",\n chartData: \"Table\",\n chartSeries: \"Series visibility\",\n chartOnly: \"Only\",\n chartShowAll: \"Show all\",\n chartShowing: \"Showing\",\n chartSelectedDatum: \"Selected data point\",\n chartReference: \"Reference\",\n chartCurrent: \"Current\",\n chartPinReference: \"Pin as reference\",\n chartRemoveComparison: \"Remove comparison\",\n chartPreviousData: \"The chart and table still show the last loaded filters\",\n chartCopyData: \"Copy data\",\n chartCopyFailed: \"Could not copy data\",\n interactiveLineChart: \"Interactive line chart\",\n interactiveChart:\n \"Interactive chart. Use arrow keys to inspect, Enter to select, Escape to dismiss. On maps and timelines use Alt with arrow keys to inspect.\",\n chartFields: ({ key }: { key: string }) => {\n const labels: Record<string, string> = {\n x: \"X\",\n y: \"Y\",\n value: \"Value\",\n percent: \"Share\",\n total: \"Total\",\n from: \"From\",\n to: \"To\",\n upperInclusive: \"Includes upper bound\",\n count: \"Count\",\n q1: \"Lower quartile\",\n q2: \"Median\",\n q3: \"Upper quartile\",\n whiskerLow: \"Lower whisker\",\n whiskerHigh: \"Upper whisker\",\n min: \"Minimum\",\n max: \"Maximum\",\n threshold: \"Threshold\",\n delta: \"Change\",\n latitude: \"Latitude\",\n longitude: \"Longitude\",\n size: \"Size\",\n state: \"State\",\n duration: \"Duration\",\n detail: \"Detail\",\n errY: \"Y error\",\n errYHigh: \"Upper Y error\",\n errYLow: \"Lower Y error\",\n errX: \"X error\",\n errXHigh: \"Upper X error\",\n errXLow: \"Lower X error\",\n };\n return labels[key] ?? key;\n },\n interactiveMap: \"Interactive map\",\n interactiveTimeline: \"Interactive timeline\",\n series: \"Series\",\n resetMapView: \"Reset map view\",\n resetTimelineView: \"Reset timeline view\",\n },\n de: {\n chartView: \"Diagrammansicht\",\n chartDiagram: \"Diagramm\",\n chartData: \"Tabelle\",\n chartSeries: \"Sichtbare Datenreihen\",\n chartOnly: \"Nur diese\",\n chartShowAll: \"Alle anzeigen\",\n chartShowing: \"Angezeigt\",\n chartSelectedDatum: \"Ausgewählter Datenpunkt\",\n chartReference: \"Vergleich\",\n chartCurrent: \"Aktuell\",\n chartPinReference: \"Als Vergleich merken\",\n chartRemoveComparison: \"Vergleich entfernen\",\n chartPreviousData: \"Diagramm und Tabelle zeigen weiterhin die zuletzt geladenen Filter\",\n chartCopyData: \"Daten kopieren\",\n chartCopyFailed: \"Daten konnten nicht kopiert werden\",\n interactiveLineChart: \"Interaktives Liniendiagramm\",\n interactiveChart:\n \"Interaktives Diagramm. Pfeiltasten zum Erkunden, Enter zum Auswählen, Escape zum Schließen. In Karten und Zeitleisten Alt mit Pfeiltasten zum Erkunden.\",\n chartFields: ({ key }: { key: string }) => {\n const labels: Record<string, string> = {\n x: \"X\",\n y: \"Y\",\n value: \"Wert\",\n percent: \"Anteil\",\n total: \"Gesamt\",\n from: \"Von\",\n to: \"Bis\",\n upperInclusive: \"Obergrenze enthalten\",\n count: \"Anzahl\",\n q1: \"Unteres Quartil\",\n q2: \"Median\",\n q3: \"Oberes Quartil\",\n whiskerLow: \"Unterer Whisker\",\n whiskerHigh: \"Oberer Whisker\",\n min: \"Minimum\",\n max: \"Maximum\",\n threshold: \"Schwellenwert\",\n delta: \"Änderung\",\n latitude: \"Breitengrad\",\n longitude: \"Längengrad\",\n size: \"Größe\",\n state: \"Zustand\",\n duration: \"Dauer\",\n detail: \"Details\",\n errY: \"Y-Fehler\",\n errYHigh: \"Oberer Y-Fehler\",\n errYLow: \"Unterer Y-Fehler\",\n errX: \"X-Fehler\",\n errXHigh: \"Oberer X-Fehler\",\n errXLow: \"Unterer X-Fehler\",\n };\n return labels[key] ?? key;\n },\n interactiveMap: \"Interaktive Karte\",\n interactiveTimeline: \"Interaktive Zeitachse\",\n series: \"Datenreihe\",\n resetMapView: \"Kartenansicht zurücksetzen\",\n resetTimelineView: \"Zeitachsenansicht zurücksetzen\",\n },\n },\n});\n\nexport type ChartMessages = ReturnType<(typeof chartMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useChartMessages = (): (() => ChartMessages) => {\n const locale = useLocale();\n return () => chartMessages.resolve([locale()]).t;\n};\n\nexport const checkChartMessages = () => chartMessages.check();\n"],"mappings":"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","ignoreList":[]}
@@ -67,6 +67,8 @@ export function createCollectionSelection(options) {
67
67
  });
68
68
  };
69
69
  const keyDown = (event, id, columns = 1) => {
70
+ // Alt combinations belong to the host, for example Alt+↑ to the page above.
71
+ if (event.altKey) return false;
70
72
  const ids = options.ids();
71
73
  const index = ids.indexOf(id);
72
74
  let next;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["content/collection-selection.ts"],"sourcesContent":["import { batch, createEffect, createSignal, onCleanup } from \"solid-js\";\n\nexport type SelectionModifiers = { shiftKey?: boolean; ctrlKey?: boolean; metaKey?: boolean };\nexport type CollectionSelection = ReturnType<typeof createCollectionSelection>;\n\n/**\n * One selection and focus model shared by alternate presentations of a collection.\n *\n * `ids` is the collection in display order. `isDisabled` marks items that stay in focus order, so the keyboard and\n * screen readers still reach them, but can never be selected. `multiple: false` keeps at most one ID selected: a\n * click, toggle, or arrow key selects only that item, and ranges and select-all do nothing.\n *\n * `checklist: true` suits choosing on touch screens: a plain click or tap toggles one item, and arrow keys only move\n * focus. Space still toggles; Shift-click still selects a range.\n */\nexport function createCollectionSelection(options: {\n ids: () => readonly string[];\n isDisabled?: (id: string) => boolean;\n initial?: readonly string[];\n onChange?: (ids: readonly string[]) => void;\n multiple?: boolean;\n checklist?: boolean;\n}) {\n const multiple = options.multiple ?? true;\n const checklist = options.checklist ?? false;\n const [selected, setSelected] = createSignal<ReadonlySet<string>>(new Set(multiple ? options.initial : options.initial?.slice(0, 1)));\n const [focused, setFocused] = createSignal<string | null>(options.initial?.[0] ?? null);\n let anchor: string | null = options.initial?.[0] ?? null;\n const elements = new Map<string, HTMLElement>();\n const disabled = (id: string) => options.isDisabled?.(id) ?? false;\n const replace = (ids: readonly string[]) => {\n const allowed = new Set(options.ids());\n const next = new Set(ids.filter((id) => allowed.has(id) && !disabled(id)).slice(multiple ? 0 : -1));\n if (next.size === selected().size && [...next].every((id) => selected().has(id))) return;\n setSelected(next);\n options.onChange?.([...next]);\n };\n createEffect(() => {\n const ids = options.ids();\n replace([...selected()]);\n if (!focused() || !ids.includes(focused()!)) setFocused(ids[0] ?? null);\n if (anchor && !ids.includes(anchor)) anchor = null;\n });\n const toggle = (id: string) => {\n if (disabled(id)) return;\n const next = new Set(multiple ? selected() : []);\n selected().has(id) ? next.delete(id) : next.add(id);\n batch(() => {\n setFocused(id);\n replace([...next]);\n });\n anchor = id;\n };\n const select = (id: string, modifiers: SelectionModifiers = {}) => {\n if (!options.ids().includes(id)) return;\n batch(() => {\n setFocused(id);\n if (multiple && modifiers.shiftKey && anchor) {\n const ids = options.ids();\n const from = ids.indexOf(anchor);\n const to = ids.indexOf(id);\n const range = ids.slice(Math.min(from, to), Math.max(from, to) + 1);\n replace(modifiers.ctrlKey || modifiers.metaKey ? [...selected(), ...range] : range);\n } else if (disabled(id)) return;\n else if (checklist || (multiple && (modifiers.ctrlKey || modifiers.metaKey))) toggle(id);\n else {\n anchor = id;\n replace([id]);\n }\n });\n };\n const focus = (id: string) => {\n setFocused(id);\n elements.get(id)?.focus({ preventScroll: true });\n elements.get(id)?.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n };\n const keyDown = (event: KeyboardEvent, id: string, columns = 1) => {\n const ids = options.ids();\n const index = ids.indexOf(id);\n let next: number | undefined;\n if (event.key === \"ArrowDown\") next = index + columns;\n if (event.key === \"ArrowUp\") next = index - columns;\n if (columns > 1 && event.key === \"ArrowRight\") next = index + 1;\n if (columns > 1 && event.key === \"ArrowLeft\") next = index - 1;\n if (event.key === \"Home\") next = 0;\n if (event.key === \"End\") next = ids.length - 1;\n if (next !== undefined && ids.length) {\n event.preventDefault();\n const target = ids[Math.max(0, Math.min(next, ids.length - 1))]!;\n if (event.shiftKey ? multiple || !checklist : !checklist && !event.ctrlKey && !event.metaKey) select(target, event);\n focus(target);\n return true;\n }\n if (event.key === \" \") {\n event.preventDefault();\n toggle(id);\n return true;\n }\n if (multiple && (event.ctrlKey || event.metaKey) && event.key.toLowerCase() === \"a\") {\n event.preventDefault();\n replace(ids);\n return true;\n }\n // With nothing selected, Escape belongs to the host, for example to close a dialog.\n if (event.key === \"Escape\" && selected().size > 0) {\n event.preventDefault();\n replace([]);\n return true;\n }\n return false;\n };\n return {\n multiple,\n selected,\n focused,\n isDisabled: disabled,\n select,\n toggle,\n replace,\n focus,\n keyDown,\n clear: () => replace([]),\n all: () => (multiple ? replace(options.ids()) : undefined),\n markFocused: (id: string) => setFocused(id),\n register: (id: string, element: HTMLElement) => {\n elements.set(id, element);\n onCleanup(() => {\n if (elements.get(id) === element) elements.delete(id);\n });\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/collection-selection.ts"],"sourcesContent":["import { batch, createEffect, createSignal, onCleanup } from \"solid-js\";\n\nexport type SelectionModifiers = { shiftKey?: boolean; ctrlKey?: boolean; metaKey?: boolean };\nexport type CollectionSelection = ReturnType<typeof createCollectionSelection>;\n\n/**\n * One selection and focus model shared by alternate presentations of a collection.\n *\n * `ids` is the collection in display order. `isDisabled` marks items that stay in focus order, so the keyboard and\n * screen readers still reach them, but can never be selected. `multiple: false` keeps at most one ID selected: a\n * click, toggle, or arrow key selects only that item, and ranges and select-all do nothing.\n *\n * `checklist: true` suits choosing on touch screens: a plain click or tap toggles one item, and arrow keys only move\n * focus. Space still toggles; Shift-click still selects a range.\n */\nexport function createCollectionSelection(options: {\n ids: () => readonly string[];\n isDisabled?: (id: string) => boolean;\n initial?: readonly string[];\n onChange?: (ids: readonly string[]) => void;\n multiple?: boolean;\n checklist?: boolean;\n}) {\n const multiple = options.multiple ?? true;\n const checklist = options.checklist ?? false;\n const [selected, setSelected] = createSignal<ReadonlySet<string>>(new Set(multiple ? options.initial : options.initial?.slice(0, 1)));\n const [focused, setFocused] = createSignal<string | null>(options.initial?.[0] ?? null);\n let anchor: string | null = options.initial?.[0] ?? null;\n const elements = new Map<string, HTMLElement>();\n const disabled = (id: string) => options.isDisabled?.(id) ?? false;\n const replace = (ids: readonly string[]) => {\n const allowed = new Set(options.ids());\n const next = new Set(ids.filter((id) => allowed.has(id) && !disabled(id)).slice(multiple ? 0 : -1));\n if (next.size === selected().size && [...next].every((id) => selected().has(id))) return;\n setSelected(next);\n options.onChange?.([...next]);\n };\n createEffect(() => {\n const ids = options.ids();\n replace([...selected()]);\n if (!focused() || !ids.includes(focused()!)) setFocused(ids[0] ?? null);\n if (anchor && !ids.includes(anchor)) anchor = null;\n });\n const toggle = (id: string) => {\n if (disabled(id)) return;\n const next = new Set(multiple ? selected() : []);\n selected().has(id) ? next.delete(id) : next.add(id);\n batch(() => {\n setFocused(id);\n replace([...next]);\n });\n anchor = id;\n };\n const select = (id: string, modifiers: SelectionModifiers = {}) => {\n if (!options.ids().includes(id)) return;\n batch(() => {\n setFocused(id);\n if (multiple && modifiers.shiftKey && anchor) {\n const ids = options.ids();\n const from = ids.indexOf(anchor);\n const to = ids.indexOf(id);\n const range = ids.slice(Math.min(from, to), Math.max(from, to) + 1);\n replace(modifiers.ctrlKey || modifiers.metaKey ? [...selected(), ...range] : range);\n } else if (disabled(id)) return;\n else if (checklist || (multiple && (modifiers.ctrlKey || modifiers.metaKey))) toggle(id);\n else {\n anchor = id;\n replace([id]);\n }\n });\n };\n const focus = (id: string) => {\n setFocused(id);\n elements.get(id)?.focus({ preventScroll: true });\n elements.get(id)?.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n };\n const keyDown = (event: KeyboardEvent, id: string, columns = 1) => {\n // Alt combinations belong to the host, for example Alt+↑ to the page above.\n if (event.altKey) return false;\n const ids = options.ids();\n const index = ids.indexOf(id);\n let next: number | undefined;\n if (event.key === \"ArrowDown\") next = index + columns;\n if (event.key === \"ArrowUp\") next = index - columns;\n if (columns > 1 && event.key === \"ArrowRight\") next = index + 1;\n if (columns > 1 && event.key === \"ArrowLeft\") next = index - 1;\n if (event.key === \"Home\") next = 0;\n if (event.key === \"End\") next = ids.length - 1;\n if (next !== undefined && ids.length) {\n event.preventDefault();\n const target = ids[Math.max(0, Math.min(next, ids.length - 1))]!;\n if (event.shiftKey ? multiple || !checklist : !checklist && !event.ctrlKey && !event.metaKey) select(target, event);\n focus(target);\n return true;\n }\n if (event.key === \" \") {\n event.preventDefault();\n toggle(id);\n return true;\n }\n if (multiple && (event.ctrlKey || event.metaKey) && event.key.toLowerCase() === \"a\") {\n event.preventDefault();\n replace(ids);\n return true;\n }\n // With nothing selected, Escape belongs to the host, for example to close a dialog.\n if (event.key === \"Escape\" && selected().size > 0) {\n event.preventDefault();\n replace([]);\n return true;\n }\n return false;\n };\n return {\n multiple,\n selected,\n focused,\n isDisabled: disabled,\n select,\n toggle,\n replace,\n focus,\n keyDown,\n clear: () => replace([]),\n all: () => (multiple ? replace(options.ids()) : undefined),\n markFocused: (id: string) => setFocused(id),\n register: (id: string, element: HTMLElement) => {\n elements.set(id, element);\n onCleanup(() => {\n if (elements.get(id) === element) elements.delete(id);\n });\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,24 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const dataTableMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ dataTable: "Data table",
8
+ noColumns: "No columns.",
9
+ noRecords: "No records"
10
+ },
11
+ de: {
12
+ dataTable: "Datentabelle",
13
+ noColumns: "Keine Spalten.",
14
+ noRecords: "Keine Einträge"
15
+ }
16
+ }
17
+ });
18
+ /** Resolved from the inherited render locale. */
19
+ export const useDataTableMessages = () => {
20
+ const locale = useLocale();
21
+ return () => dataTableMessages.resolve([locale()]).t;
22
+ };
23
+ export const checkDataTableMessages = () => dataTableMessages.check();
24
+ //# sourceMappingURL=data-table-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/data-table-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst dataTableMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n dataTable: \"Data table\",\n noColumns: \"No columns.\",\n noRecords: \"No records\",\n },\n de: {\n dataTable: \"Datentabelle\",\n noColumns: \"Keine Spalten.\",\n noRecords: \"Keine Einträge\",\n },\n },\n});\n\nexport type DataTableMessages = ReturnType<(typeof dataTableMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useDataTableMessages = (): (() => DataTableMessages) => {\n const locale = useLocale();\n return () => dataTableMessages.resolve([locale()]).t;\n};\n\nexport const checkDataTableMessages = () => dataTableMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC;EACpC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,SAAS,EAAE,YAAY;MACvB,SAAS,EAAE,aAAa;MACxB,SAAS,EAAE;IACb,CAAC;IACD,EAAE,EAAE;MACF,SAAS,EAAE,cAAc;MACzB,SAAS,EAAE,gBAAgB;MAC3B,SAAS,EAAE;IACb;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,oBAAoB,GAAG,MAAiC;EACnE,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,OAAO,MAAM,sBAAsB,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,24 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const docsMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ codeLabel: ({
8
+ title
9
+ }) => `${title} code`
10
+ },
11
+ de: {
12
+ codeLabel: ({
13
+ title
14
+ }) => `Code von ${title}`
15
+ }
16
+ }
17
+ });
18
+ /** Resolved from the inherited render locale. */
19
+ export const useDocsMessages = () => {
20
+ const locale = useLocale();
21
+ return () => docsMessages.resolve([locale()]).t;
22
+ };
23
+ export const checkDocsMessages = () => docsMessages.check();
24
+ //# sourceMappingURL=docs-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/docs-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst docsMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n codeLabel: ({ title }: { title: string }) => `${title} code`,\n },\n de: {\n codeLabel: ({ title }) => `Code von ${title}`,\n },\n },\n});\n\nexport type DocsMessages = ReturnType<(typeof docsMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useDocsMessages = (): (() => DocsMessages) => {\n const locale = useLocale();\n return () => docsMessages.resolve([locale()]).t;\n};\n\nexport const checkDocsMessages = () => docsMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;EAC/B,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,SAAS,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,GAAG,KAAK;IACvD,CAAC;IACD,EAAE,EAAE;MACF,SAAS,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,YAAY,KAAK;IAC7C;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,eAAe,GAAG,MAA4B;EACzD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,OAAO,MAAM,iBAAiB,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,34 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const feedMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ feedJumpToLatest: "Jump to latest",
8
+ feedJumpToLatestCount: ({
9
+ count
10
+ }) => `Jump to latest, ${count} new`,
11
+ feedNewItems: ({
12
+ count
13
+ }) => count === 1 ? "1 new item" : `${count} new items`,
14
+ feedNewMarker: "New"
15
+ },
16
+ de: {
17
+ feedJumpToLatest: "Zum Neuesten",
18
+ feedJumpToLatestCount: ({
19
+ count
20
+ }) => `Zum Neuesten, ${count} neu`,
21
+ feedNewItems: ({
22
+ count
23
+ }) => count === 1 ? "1 neuer Eintrag" : `${count} neue Einträge`,
24
+ feedNewMarker: "Neu"
25
+ }
26
+ }
27
+ });
28
+ /** Resolved from the inherited render locale. */
29
+ export const useFeedMessages = () => {
30
+ const locale = useLocale();
31
+ return () => feedMessages.resolve([locale()]).t;
32
+ };
33
+ export const checkFeedMessages = () => feedMessages.check();
34
+ //# sourceMappingURL=feed-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/feed-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst feedMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n feedJumpToLatest: \"Jump to latest\",\n feedJumpToLatestCount: ({ count }: { count: number }) => `Jump to latest, ${count} new`,\n feedNewItems: ({ count }: { count: number }) => (count === 1 ? \"1 new item\" : `${count} new items`),\n feedNewMarker: \"New\",\n },\n de: {\n feedJumpToLatest: \"Zum Neuesten\",\n feedJumpToLatestCount: ({ count }) => `Zum Neuesten, ${count} neu`,\n feedNewItems: ({ count }) => (count === 1 ? \"1 neuer Eintrag\" : `${count} neue Einträge`),\n feedNewMarker: \"Neu\",\n },\n },\n});\n\nexport type FeedMessages = ReturnType<(typeof feedMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useFeedMessages = (): (() => FeedMessages) => {\n const locale = useLocale();\n return () => feedMessages.resolve([locale()]).t;\n};\n\nexport const checkFeedMessages = () => feedMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;EAC/B,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,gBAAgB,EAAE,gBAAgB;MAClC,qBAAqB,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,mBAAmB,KAAK,MAAM;MACvF,YAAY,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAM,KAAK,KAAK,CAAC,GAAG,YAAY,GAAG,GAAG,KAAK,YAAa;MACnG,aAAa,EAAE;IACjB,CAAC;IACD,EAAE,EAAE;MACF,gBAAgB,EAAE,cAAc;MAChC,qBAAqB,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,iBAAiB,KAAK,MAAM;MAClE,YAAY,EAAE,CAAC;QAAE;MAAM,CAAC,KAAM,KAAK,KAAK,CAAC,GAAG,iBAAiB,GAAG,GAAG,KAAK,gBAAiB;MACzF,aAAa,EAAE;IACjB;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,eAAe,GAAG,MAA4B;EACzD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,OAAO,MAAM,iBAAiB,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,69 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const fileBrowserMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ downloadAsZip: "Download as ZIP",
8
+ rename: "Rename",
9
+ addFileFolderUpload: "Add file, folder, or upload",
10
+ files: "Files",
11
+ chooseFileToPreview: "Choose a file to preview it.",
12
+ discardChanges: "Discard changes",
13
+ discardUnsavedFile: "Discard the unsaved changes in this file?",
14
+ downloadFailed: "Download failed",
15
+ folderEmpty: "This folder is empty.",
16
+ folderSelected: "Folder selected",
17
+ newFile: "New file",
18
+ newFileName: "Name of the new file:",
19
+ newFolder: "New folder",
20
+ newFolderName: "Name of the new folder:",
21
+ fileActions: "File actions",
22
+ actionsFor: ({
23
+ name
24
+ }) => `Actions for ${name}`,
25
+ pickFileFromTree: "Pick a file from the tree to view it.",
26
+ selectFile: "Select a file",
27
+ spaceEmpty: "This space is empty.",
28
+ uploadFiles: "Upload files",
29
+ loadingFiles: "Loading files...",
30
+ noFiles: "No files"
31
+ },
32
+ de: {
33
+ downloadAsZip: "Als ZIP herunterladen",
34
+ rename: "Umbenennen",
35
+ addFileFolderUpload: "Datei oder Ordner hinzufügen oder hochladen",
36
+ files: "Dateien",
37
+ chooseFileToPreview: "Wähle eine Datei für die Vorschau aus.",
38
+ discardChanges: "Änderungen verwerfen",
39
+ discardUnsavedFile: "Ungespeicherte Änderungen an dieser Datei verwerfen?",
40
+ downloadFailed: "Download fehlgeschlagen",
41
+ folderEmpty: "Dieser Ordner ist leer.",
42
+ folderSelected: "Ordner ausgewählt",
43
+ newFile: "Neue Datei",
44
+ newFileName: "Name der neuen Datei:",
45
+ newFolder: "Neuer Ordner",
46
+ newFolderName: "Name des neuen Ordners:",
47
+ fileActions: "Dateiaktionen",
48
+ actionsFor: ({
49
+ name
50
+ }) => `Aktionen für ${name}`,
51
+ pickFileFromTree: "Wähle im Dateibaum eine Datei aus.",
52
+ selectFile: "Datei auswählen",
53
+ spaceEmpty: "Dieser Bereich ist leer.",
54
+ uploadFiles: "Dateien hochladen",
55
+ loadingFiles: "Dateien werden geladen...",
56
+ noFiles: "Keine Dateien"
57
+ }
58
+ }
59
+ });
60
+ /** Resolved from the inherited render locale. */
61
+ export const useFileBrowserMessages = () => {
62
+ const locale = useLocale();
63
+ return () => fileBrowserMessages.resolve([locale()]).t;
64
+ };
65
+
66
+ /** Imperative UI inherits the document locale when no locale is supplied. */
67
+ export const resolveFileBrowserMessages = locale => fileBrowserMessages.resolve([locale ?? (typeof document === "undefined" ? fileBrowserMessages.baseLocale : document.documentElement.lang)]).t;
68
+ export const checkFileBrowserMessages = () => fileBrowserMessages.check();
69
+ //# sourceMappingURL=file-browser-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/file-browser-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst fileBrowserMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n downloadAsZip: \"Download as ZIP\",\n rename: \"Rename\",\n addFileFolderUpload: \"Add file, folder, or upload\",\n files: \"Files\",\n chooseFileToPreview: \"Choose a file to preview it.\",\n discardChanges: \"Discard changes\",\n discardUnsavedFile: \"Discard the unsaved changes in this file?\",\n downloadFailed: \"Download failed\",\n folderEmpty: \"This folder is empty.\",\n folderSelected: \"Folder selected\",\n newFile: \"New file\",\n newFileName: \"Name of the new file:\",\n newFolder: \"New folder\",\n newFolderName: \"Name of the new folder:\",\n fileActions: \"File actions\",\n actionsFor: ({ name }: { name: string }) => `Actions for ${name}`,\n pickFileFromTree: \"Pick a file from the tree to view it.\",\n selectFile: \"Select a file\",\n spaceEmpty: \"This space is empty.\",\n uploadFiles: \"Upload files\",\n loadingFiles: \"Loading files...\",\n noFiles: \"No files\",\n },\n de: {\n downloadAsZip: \"Als ZIP herunterladen\",\n rename: \"Umbenennen\",\n addFileFolderUpload: \"Datei oder Ordner hinzufügen oder hochladen\",\n files: \"Dateien\",\n chooseFileToPreview: \"Wähle eine Datei für die Vorschau aus.\",\n discardChanges: \"Änderungen verwerfen\",\n discardUnsavedFile: \"Ungespeicherte Änderungen an dieser Datei verwerfen?\",\n downloadFailed: \"Download fehlgeschlagen\",\n folderEmpty: \"Dieser Ordner ist leer.\",\n folderSelected: \"Ordner ausgewählt\",\n newFile: \"Neue Datei\",\n newFileName: \"Name der neuen Datei:\",\n newFolder: \"Neuer Ordner\",\n newFolderName: \"Name des neuen Ordners:\",\n fileActions: \"Dateiaktionen\",\n actionsFor: ({ name }) => `Aktionen für ${name}`,\n pickFileFromTree: \"Wähle im Dateibaum eine Datei aus.\",\n selectFile: \"Datei auswählen\",\n spaceEmpty: \"Dieser Bereich ist leer.\",\n uploadFiles: \"Dateien hochladen\",\n loadingFiles: \"Dateien werden geladen...\",\n noFiles: \"Keine Dateien\",\n },\n },\n});\n\nexport type FileBrowserMessages = ReturnType<(typeof fileBrowserMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useFileBrowserMessages = (): (() => FileBrowserMessages) => {\n const locale = useLocale();\n return () => fileBrowserMessages.resolve([locale()]).t;\n};\n\n/** Imperative UI inherits the document locale when no locale is supplied. */\nexport const resolveFileBrowserMessages = (locale?: string): FileBrowserMessages =>\n fileBrowserMessages.resolve([\n locale ?? (typeof document === \"undefined\" ? fileBrowserMessages.baseLocale : document.documentElement.lang),\n ]).t;\n\nexport const checkFileBrowserMessages = () => fileBrowserMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC;EACtC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,aAAa,EAAE,iBAAiB;MAChC,MAAM,EAAE,QAAQ;MAChB,mBAAmB,EAAE,6BAA6B;MAClD,KAAK,EAAE,OAAO;MACd,mBAAmB,EAAE,8BAA8B;MACnD,cAAc,EAAE,iBAAiB;MACjC,kBAAkB,EAAE,2CAA2C;MAC/D,cAAc,EAAE,iBAAiB;MACjC,WAAW,EAAE,uBAAuB;MACpC,cAAc,EAAE,iBAAiB;MACjC,OAAO,EAAE,UAAU;MACnB,WAAW,EAAE,uBAAuB;MACpC,SAAS,EAAE,YAAY;MACvB,aAAa,EAAE,yBAAyB;MACxC,WAAW,EAAE,cAAc;MAC3B,UAAU,EAAE,CAAC;QAAE;MAAuB,CAAC,KAAK,eAAe,IAAI,EAAE;MACjE,gBAAgB,EAAE,uCAAuC;MACzD,UAAU,EAAE,eAAe;MAC3B,UAAU,EAAE,sBAAsB;MAClC,WAAW,EAAE,cAAc;MAC3B,YAAY,EAAE,kBAAkB;MAChC,OAAO,EAAE;IACX,CAAC;IACD,EAAE,EAAE;MACF,aAAa,EAAE,uBAAuB;MACtC,MAAM,EAAE,YAAY;MACpB,mBAAmB,EAAE,6CAA6C;MAClE,KAAK,EAAE,SAAS;MAChB,mBAAmB,EAAE,wCAAwC;MAC7D,cAAc,EAAE,sBAAsB;MACtC,kBAAkB,EAAE,sDAAsD;MAC1E,cAAc,EAAE,yBAAyB;MACzC,WAAW,EAAE,yBAAyB;MACtC,cAAc,EAAE,mBAAmB;MACnC,OAAO,EAAE,YAAY;MACrB,WAAW,EAAE,uBAAuB;MACpC,SAAS,EAAE,cAAc;MACzB,aAAa,EAAE,yBAAyB;MACxC,WAAW,EAAE,eAAe;MAC5B,UAAU,EAAE,CAAC;QAAE;MAAK,CAAC,KAAK,gBAAgB,IAAI,EAAE;MAChD,gBAAgB,EAAE,oCAAoC;MACtD,UAAU,EAAE,iBAAiB;MAC7B,UAAU,EAAE,0BAA0B;MACtC,WAAW,EAAE,mBAAmB;MAChC,YAAY,EAAE,2BAA2B;MACzC,OAAO,EAAE;IACX;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,sBAAsB,GAAG,MAAmC;EACvE,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;;AAED;AACA,OAAO,MAAM,0BAA0B,GAAI,MAAe,IACxD,mBAAmB,CAAC,OAAO,CAAC,CAC1B,MAAM,KAAK,OAAO,QAAQ,KAAK,WAAW,GAAG,mBAAmB,CAAC,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAC7G,CAAC,CAAC,CAAC;AAEN,OAAO,MAAM,wBAAwB,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}