@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
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["content/markdown-links.ts"],"sourcesContent":["import { fileIcons } from \"@k2b/stdlib\";\nimport type { Token, Tokens } from \"marked\";\nimport { resolveUiMessages, type UiMessages } from \"../intl/messages\";\n\n/** What a reference points to inside the host application. */\nexport type MarkdownReferenceKind = \"file\" | \"note\" | \"heading\" | \"task\" | \"page\";\n\n/** The type a reference shows: a file's type from its extension, or the kind of the referenced content. */\nexport type MarkdownReferenceType = \"pdf\" | \"image\" | \"design\" | \"file\" | \"note\" | \"heading\" | \"task\" | \"page\";\n\n/**\n * A link to content inside the host application, as opposed to a web or mail link.\n * References render as a calm pill whose icon names the type.\n */\nexport type MarkdownReference = {\n kind: MarkdownReferenceKind;\n /** The file's name, which decides its type and icon. Defaults to the link text. */\n fileName?: string;\n /** The file's formatted size. It shows only when the link stands alone on its line. */\n size?: string;\n /** Plain-text title of the document that holds a heading, for a heading in another document. */\n document?: string;\n};\n\nexport type MarkdownLinkInput = {\n /** The final, already validated link destination. */\n href: string;\n /** The rendered link text. It crosses a trust boundary: the caller sanitizes it. */\n html: string;\n /** The link text as plain text, for the accessible name. Defaults to the text of `html`. */\n text?: string;\n title?: string;\n target?: \"_blank\";\n /** Link relations without a new tab, such as `noreferrer`. `target: \"_blank\"` always sets `noopener noreferrer`. */\n rel?: string;\n /** A reference inside the host. Without one, the link is a web link, or a mail link for `mailto:` and `tel:`. */\n reference?: MarkdownReference | null;\n /** The link is the only content of its line. Only then does a file show its size. */\n standalone?: boolean;\n /** Locale of the type name in the accessible name. Defaults to English on the server and the page language in the browser. */\n locale?: string;\n};\n\nconst escapeHtml = (value: string): string =>\n value.replaceAll(\"&\", \"&amp;\").replaceAll(\"<\", \"&lt;\").replaceAll(\">\", \"&gt;\").replaceAll('\"', \"&quot;\").replaceAll(\"'\", \"&#39;\");\n\nconst IMAGE_EXTENSIONS = new Set([\"png\", \"jpg\", \"jpeg\", \"gif\", \"webp\", \"avif\", \"bmp\", \"ico\", \"svg\", \"heic\", \"heif\", \"tif\", \"tiff\"]);\nconst DESIGN_EXTENSIONS = new Set([\"afdesign\", \"afphoto\", \"afpub\", \"psd\", \"psb\", \"ai\", \"eps\", \"indd\", \"idml\", \"fig\", \"sketch\", \"xd\"]);\n\nconst extensionOf = (name: string): string | null => {\n const match = /\\.([a-z0-9]{1,10})$/i.exec(name.trim());\n return match && /[a-z]/i.test(match[1]!) ? match[1]!.toLowerCase() : null;\n};\n\n/** The type of a file reference, from the extension of its name. */\nexport const markdownFileType = (fileName: string): \"pdf\" | \"image\" | \"design\" | \"file\" => {\n const extension = extensionOf(fileName);\n if (extension === \"pdf\") return \"pdf\";\n if (extension && IMAGE_EXTENSIONS.has(extension)) return \"image\";\n if (extension && DESIGN_EXTENSIONS.has(extension)) return \"design\";\n return \"file\";\n};\n\nconst REFERENCE_BASE = \"https://reference.invalid/\";\n\n/**\n * The reference a link destination names on its own: `#anchor` is a heading in the same document, and any other\n * relative URL is a page of the host, or a file when its last path segment has a file extension. Absolute URLs,\n * every scheme, and relative URLs that a browser resolves to another host, such as `//host` or `/\\host`, are web\n * or mail links; the result is then `null`.\n */\nexport const markdownLinkReference = (href: string): MarkdownReference | null => {\n const url = href.trim();\n if (!url || /^[a-z][a-z\\d+.-]*:/i.test(url)) return null;\n try {\n if (new URL(url, REFERENCE_BASE).origin !== new URL(REFERENCE_BASE).origin) return null;\n } catch {\n return null;\n }\n if (url.startsWith(\"#\")) return { kind: \"heading\" };\n const segment = url.split(/[?#]/, 1)[0]!.split(\"/\").pop() ?? \"\";\n let fileName = segment;\n try {\n fileName = decodeURIComponent(segment);\n } catch {\n /* A malformed escape stays literal text. */\n }\n return extensionOf(fileName) ? { kind: \"file\", fileName } : { kind: \"page\" };\n};\n\n/** The type a reference shows. */\nexport const markdownReferenceType = (reference: MarkdownReference, text: string): MarkdownReferenceType =>\n reference.kind === \"file\" ? markdownFileType(reference.fileName ?? text) : reference.kind;\n\nconst TYPE_ICONS: Record<Exclude<MarkdownReferenceType, \"file\">, string> = {\n pdf: \"ti-file-type-pdf\",\n image: \"ti-photo\",\n design: \"ti-vector-bezier-2\",\n note: \"ti-file-text\",\n heading: \"ti-hash\",\n task: \"ti-circle-check\",\n page: \"ti-link\",\n};\n\n/** The Tabler glyph of a reference type; any other file keeps the glyph of its file family. */\nexport const markdownReferenceIcon = (type: MarkdownReferenceType, fileName = \"\"): string =>\n type === \"file\" ? (fileIcons.getFileIcon({ name: fileName, type: \"file\" }).split(/\\s+/)[0] ?? \"ti-file\") : TYPE_ICONS[type];\n\nconst TYPE_LABELS: Record<MarkdownReferenceType, keyof UiMessages> = {\n pdf: \"referencePdf\",\n image: \"referenceImage\",\n design: \"referenceDesign\",\n file: \"referenceFile\",\n note: \"referenceNote\",\n heading: \"referenceHeading\",\n task: \"referenceTask\",\n page: \"referencePage\",\n};\n\n/** The localized name of a reference type, such as \"PDF\" or \"Überschrift\". */\nexport const markdownReferenceTypeLabel = (type: MarkdownReferenceType, locale?: string): string =>\n String(resolveUiMessages(locale)[TYPE_LABELS[type]]);\n\n/**\n * The text of rendered inline HTML, still as HTML: tags go, character references such as `&copy;` stay. One pass,\n * so a label full of `<` stays linear. The result only ever reaches `textAttribute`, which escapes what is left.\n */\nconst htmlText = (html: string): string => {\n let text = \"\";\n let index = 0;\n for (let open = html.indexOf(\"<\"); open !== -1; open = html.indexOf(\"<\", index)) {\n const close = html.indexOf(\">\", open + 1);\n if (close === -1) break;\n text += html.slice(index, open);\n index = close + 1;\n }\n return text + html.slice(index);\n};\n\n/** HTML text as an attribute value. Character references stay for the browser to decode; nothing can end the value. */\nconst textAttribute = (text: string): string =>\n text\n .replace(/&(?!#\\d+;|#x[\\da-f]+;|[a-z][a-z\\d]*;)/gi, \"&amp;\")\n .replaceAll(\"<\", \"&lt;\")\n .replaceAll(\">\", \"&gt;\")\n .replaceAll('\"', \"&quot;\");\n\nconst isMailHref = (href: string) => /^(?:mailto|tel):/i.test(href.trim());\n\n/**\n * One link of rendered Markdown. A reference to content of the host renders as a calm pill: a neutral fill, the\n * text in the prose colour, and an icon whose colour names the type. Its accessible name starts with the type, as\n * in \"PDF: Brand-2026.pdf\". A heading in another document shows that document first (\"Notes › Heading\"). A web\n * link stays prose text with a thin underline in the link accent and a small ↗; a mail link has no arrow. A link\n * around an image is the image: a plain anchor that the image's own text names.\n */\nexport const renderMarkdownLink = (input: MarkdownLinkInput): string => {\n const titleAttribute = input.title ? ` title=\"${escapeHtml(input.title)}\"` : \"\";\n const targetAttributes =\n input.target === \"_blank\" ? ' target=\"_blank\" rel=\"noopener noreferrer\"' : input.rel ? ` rel=\"${escapeHtml(input.rel)}\"` : \"\";\n const href = escapeHtml(input.href);\n if (/<img\\b/i.test(input.html)) return `<a href=\"${href}\"${titleAttribute}${targetAttributes}>${input.html}</a>`;\n const reference = input.reference;\n if (!reference) {\n const mail = isMailHref(input.href);\n const arrow = mail ? \"\" : '<i class=\"k2b-text-link__external ti ti-arrow-up-right\" aria-hidden=\"true\"></i>';\n return `<a href=\"${href}\" class=\"k2b-text-link\" data-link=\"${mail ? \"mail\" : \"web\"}\"${titleAttribute}${targetAttributes}>${input.html}${arrow}</a>`;\n }\n const text = (input.text ?? htmlText(input.html)).trim();\n const type = markdownReferenceType(reference, text);\n const icon = markdownReferenceIcon(type, reference.fileName ?? text);\n const size = input.standalone && reference.kind === \"file\" && reference.size ? reference.size : \"\";\n const document = reference.kind === \"heading\" ? (reference.document?.trim() ?? \"\") : \"\";\n const name =\n escapeHtml(`${markdownReferenceTypeLabel(type, input.locale)}: ${document ? `${document} › ` : \"\"}`) +\n (input.text === undefined ? textAttribute(text) : escapeHtml(text)) +\n (size ? escapeHtml(`, ${size}`) : \"\");\n return (\n `<a href=\"${href}\" class=\"k2b-reference\" data-reference=\"${type}\" aria-label=\"${name}\"${titleAttribute}${targetAttributes}>` +\n `<i class=\"k2b-reference__icon ti ${icon}\" aria-hidden=\"true\"></i>` +\n (document ? `<span class=\"k2b-reference__document\">${escapeHtml(document)} ›</span> ` : \"\") +\n input.html +\n (size ? `<span class=\"k2b-reference__size\">${escapeHtml(size)}</span>` : \"\") +\n `</a>`\n );\n};\n\nconst isBlank = (token: Token) => (token.type === \"text\" || token.type === \"space\") && !token.raw.trim();\nconst isLink = (token: Token | undefined): token is Tokens.Link => token?.type === \"link\";\n\n/**\n * The links among `tokens` that stand alone on their line: the only content of a paragraph or list item line,\n * between line breaks. Pass the result's check as `standalone` to `renderMarkdownLink`, so a file shows its size\n * in a list of files but not inside a sentence. Call it from `walkTokens` of a renderer with GFM line breaks\n * (`breaks: true`), where every source line is a visual line.\n */\nexport const markStandaloneLinks = (token: Token, standalone: WeakSet<Tokens.Link>): void => {\n if ((token.type !== \"paragraph\" && token.type !== \"text\") || !(\"tokens\" in token) || !token.tokens) return;\n let line: Token[] = [];\n const close = () => {\n const content = line.filter((candidate) => !isBlank(candidate));\n if (content.length === 1 && isLink(content[0])) standalone.add(content[0]);\n line = [];\n };\n for (const child of token.tokens) {\n if (child.type === \"br\") {\n close();\n continue;\n }\n const plain = child.type === \"text\" && !(\"tokens\" in child && child.tokens?.length) ? child.raw : \"\";\n if (plain.includes(\"\\n\")) {\n for (const [index, part] of plain.split(\"\\n\").entries()) {\n if (index > 0) close();\n if (part.trim()) line.push({ type: \"text\", raw: part, text: part });\n }\n continue;\n }\n line.push(child);\n }\n close();\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["content/markdown-links.ts"],"sourcesContent":["import { fileIcons } from \"@k2b/stdlib\";\nimport type { Token, Tokens } from \"marked\";\nimport { type MarkdownReferenceMessages, resolveMarkdownReferenceMessages } from \"./markdown-reference-messages\";\n\n/** What a reference points to inside the host application. */\nexport type MarkdownReferenceKind = \"file\" | \"note\" | \"heading\" | \"task\" | \"page\";\n\n/** The type a reference shows: a file's type from its extension, or the kind of the referenced content. */\nexport type MarkdownReferenceType = \"pdf\" | \"image\" | \"design\" | \"file\" | \"note\" | \"heading\" | \"task\" | \"page\";\n\n/**\n * A link to content inside the host application, as opposed to a web or mail link.\n * References render as a calm pill whose icon names the type.\n */\nexport type MarkdownReference = {\n kind: MarkdownReferenceKind;\n /** The file's name, which decides its type and icon. Defaults to the link text. */\n fileName?: string;\n /** The file's formatted size. It shows only when the link stands alone on its line. */\n size?: string;\n /** Plain-text title of the document that holds a heading, for a heading in another document. */\n document?: string;\n};\n\nexport type MarkdownLinkInput = {\n /** The final, already validated link destination. */\n href: string;\n /** The rendered link text. It crosses a trust boundary: the caller sanitizes it. */\n html: string;\n /** The link text as plain text, for the accessible name. Defaults to the text of `html`. */\n text?: string;\n title?: string;\n target?: \"_blank\";\n /** Link relations without a new tab, such as `noreferrer`. `target: \"_blank\"` always sets `noopener noreferrer`. */\n rel?: string;\n /** A reference inside the host. Without one, the link is a web link, or a mail link for `mailto:` and `tel:`. */\n reference?: MarkdownReference | null;\n /** The link is the only content of its line. Only then does a file show its size. */\n standalone?: boolean;\n /** Locale of the type name in the accessible name. Defaults to English on the server and the page language in the browser. */\n locale?: string;\n};\n\nconst escapeHtml = (value: string): string =>\n value.replaceAll(\"&\", \"&amp;\").replaceAll(\"<\", \"&lt;\").replaceAll(\">\", \"&gt;\").replaceAll('\"', \"&quot;\").replaceAll(\"'\", \"&#39;\");\n\nconst IMAGE_EXTENSIONS = new Set([\"png\", \"jpg\", \"jpeg\", \"gif\", \"webp\", \"avif\", \"bmp\", \"ico\", \"svg\", \"heic\", \"heif\", \"tif\", \"tiff\"]);\nconst DESIGN_EXTENSIONS = new Set([\"afdesign\", \"afphoto\", \"afpub\", \"psd\", \"psb\", \"ai\", \"eps\", \"indd\", \"idml\", \"fig\", \"sketch\", \"xd\"]);\n\nconst extensionOf = (name: string): string | null => {\n const match = /\\.([a-z0-9]{1,10})$/i.exec(name.trim());\n return match && /[a-z]/i.test(match[1]!) ? match[1]!.toLowerCase() : null;\n};\n\n/** The type of a file reference, from the extension of its name. */\nexport const markdownFileType = (fileName: string): \"pdf\" | \"image\" | \"design\" | \"file\" => {\n const extension = extensionOf(fileName);\n if (extension === \"pdf\") return \"pdf\";\n if (extension && IMAGE_EXTENSIONS.has(extension)) return \"image\";\n if (extension && DESIGN_EXTENSIONS.has(extension)) return \"design\";\n return \"file\";\n};\n\nconst REFERENCE_BASE = \"https://reference.invalid/\";\n\n/**\n * The reference a link destination names on its own: `#anchor` is a heading in the same document, and any other\n * relative URL is a page of the host, or a file when its last path segment has a file extension. Absolute URLs,\n * every scheme, and relative URLs that a browser resolves to another host, such as `//host` or `/\\host`, are web\n * or mail links; the result is then `null`.\n */\nexport const markdownLinkReference = (href: string): MarkdownReference | null => {\n const url = href.trim();\n if (!url || /^[a-z][a-z\\d+.-]*:/i.test(url)) return null;\n try {\n if (new URL(url, REFERENCE_BASE).origin !== new URL(REFERENCE_BASE).origin) return null;\n } catch {\n return null;\n }\n if (url.startsWith(\"#\")) return { kind: \"heading\" };\n const segment = url.split(/[?#]/, 1)[0]!.split(\"/\").pop() ?? \"\";\n let fileName = segment;\n try {\n fileName = decodeURIComponent(segment);\n } catch {\n /* A malformed escape stays literal text. */\n }\n return extensionOf(fileName) ? { kind: \"file\", fileName } : { kind: \"page\" };\n};\n\n/** The type a reference shows. */\nexport const markdownReferenceType = (reference: MarkdownReference, text: string): MarkdownReferenceType =>\n reference.kind === \"file\" ? markdownFileType(reference.fileName ?? text) : reference.kind;\n\nconst TYPE_ICONS: Record<Exclude<MarkdownReferenceType, \"file\">, string> = {\n pdf: \"ti-file-type-pdf\",\n image: \"ti-photo\",\n design: \"ti-vector-bezier-2\",\n note: \"ti-file-text\",\n heading: \"ti-hash\",\n task: \"ti-circle-check\",\n page: \"ti-link\",\n};\n\n/** The Tabler glyph of a reference type; any other file keeps the glyph of its file family. */\nexport const markdownReferenceIcon = (type: MarkdownReferenceType, fileName = \"\"): string =>\n type === \"file\" ? (fileIcons.getFileIcon({ name: fileName, type: \"file\" }).split(/\\s+/)[0] ?? \"ti-file\") : TYPE_ICONS[type];\n\nconst TYPE_LABELS: Record<MarkdownReferenceType, keyof MarkdownReferenceMessages> = {\n pdf: \"referencePdf\",\n image: \"referenceImage\",\n design: \"referenceDesign\",\n file: \"referenceFile\",\n note: \"referenceNote\",\n heading: \"referenceHeading\",\n task: \"referenceTask\",\n page: \"referencePage\",\n};\n\n/** The localized name of a reference type, such as \"PDF\" or \"Überschrift\". */\nexport const markdownReferenceTypeLabel = (type: MarkdownReferenceType, locale?: string): string =>\n String(resolveMarkdownReferenceMessages(locale)[TYPE_LABELS[type]]);\n\n/**\n * The text of rendered inline HTML, still as HTML: tags go, character references such as `&copy;` stay. One pass,\n * so a label full of `<` stays linear. The result only ever reaches `textAttribute`, which escapes what is left.\n */\nconst htmlText = (html: string): string => {\n let text = \"\";\n let index = 0;\n for (let open = html.indexOf(\"<\"); open !== -1; open = html.indexOf(\"<\", index)) {\n const close = html.indexOf(\">\", open + 1);\n if (close === -1) break;\n text += html.slice(index, open);\n index = close + 1;\n }\n return text + html.slice(index);\n};\n\n/** HTML text as an attribute value. Character references stay for the browser to decode; nothing can end the value. */\nconst textAttribute = (text: string): string =>\n text\n .replace(/&(?!#\\d+;|#x[\\da-f]+;|[a-z][a-z\\d]*;)/gi, \"&amp;\")\n .replaceAll(\"<\", \"&lt;\")\n .replaceAll(\">\", \"&gt;\")\n .replaceAll('\"', \"&quot;\");\n\nconst isMailHref = (href: string) => /^(?:mailto|tel):/i.test(href.trim());\n\n/**\n * One link of rendered Markdown. A reference to content of the host renders as a calm pill: a neutral fill, the\n * text in the prose colour, and an icon whose colour names the type. Its accessible name starts with the type, as\n * in \"PDF: Brand-2026.pdf\". A heading in another document shows that document first (\"Notes › Heading\"). A web\n * link stays prose text with a thin underline in the link accent and a small ↗; a mail link has no arrow. A link\n * around an image is the image: a plain anchor that the image's own text names.\n */\nexport const renderMarkdownLink = (input: MarkdownLinkInput): string => {\n const titleAttribute = input.title ? ` title=\"${escapeHtml(input.title)}\"` : \"\";\n const targetAttributes =\n input.target === \"_blank\" ? ' target=\"_blank\" rel=\"noopener noreferrer\"' : input.rel ? ` rel=\"${escapeHtml(input.rel)}\"` : \"\";\n const href = escapeHtml(input.href);\n if (/<img\\b/i.test(input.html)) return `<a href=\"${href}\"${titleAttribute}${targetAttributes}>${input.html}</a>`;\n const reference = input.reference;\n if (!reference) {\n const mail = isMailHref(input.href);\n const arrow = mail ? \"\" : '<i class=\"k2b-text-link__external ti ti-arrow-up-right\" aria-hidden=\"true\"></i>';\n return `<a href=\"${href}\" class=\"k2b-text-link\" data-link=\"${mail ? \"mail\" : \"web\"}\"${titleAttribute}${targetAttributes}>${input.html}${arrow}</a>`;\n }\n const text = (input.text ?? htmlText(input.html)).trim();\n const type = markdownReferenceType(reference, text);\n const icon = markdownReferenceIcon(type, reference.fileName ?? text);\n const size = input.standalone && reference.kind === \"file\" && reference.size ? reference.size : \"\";\n const document = reference.kind === \"heading\" ? (reference.document?.trim() ?? \"\") : \"\";\n const name =\n escapeHtml(`${markdownReferenceTypeLabel(type, input.locale)}: ${document ? `${document} › ` : \"\"}`) +\n (input.text === undefined ? textAttribute(text) : escapeHtml(text)) +\n (size ? escapeHtml(`, ${size}`) : \"\");\n return (\n `<a href=\"${href}\" class=\"k2b-reference\" data-reference=\"${type}\" aria-label=\"${name}\"${titleAttribute}${targetAttributes}>` +\n `<i class=\"k2b-reference__icon ti ${icon}\" aria-hidden=\"true\"></i>` +\n (document ? `<span class=\"k2b-reference__document\">${escapeHtml(document)} ›</span> ` : \"\") +\n input.html +\n (size ? `<span class=\"k2b-reference__size\">${escapeHtml(size)}</span>` : \"\") +\n `</a>`\n );\n};\n\nconst isBlank = (token: Token) => (token.type === \"text\" || token.type === \"space\") && !token.raw.trim();\nconst isLink = (token: Token | undefined): token is Tokens.Link => token?.type === \"link\";\n\n/**\n * The links among `tokens` that stand alone on their line: the only content of a paragraph or list item line,\n * between line breaks. Pass the result's check as `standalone` to `renderMarkdownLink`, so a file shows its size\n * in a list of files but not inside a sentence. Call it from `walkTokens` of a renderer with GFM line breaks\n * (`breaks: true`), where every source line is a visual line.\n */\nexport const markStandaloneLinks = (token: Token, standalone: WeakSet<Tokens.Link>): void => {\n if ((token.type !== \"paragraph\" && token.type !== \"text\") || !(\"tokens\" in token) || !token.tokens) return;\n let line: Token[] = [];\n const close = () => {\n const content = line.filter((candidate) => !isBlank(candidate));\n if (content.length === 1 && isLink(content[0])) standalone.add(content[0]);\n line = [];\n };\n for (const child of token.tokens) {\n if (child.type === \"br\") {\n close();\n continue;\n }\n const plain = child.type === \"text\" && !(\"tokens\" in child && child.tokens?.length) ? child.raw : \"\";\n if (plain.includes(\"\\n\")) {\n for (const [index, part] of plain.split(\"\\n\").entries()) {\n if (index > 0) close();\n if (part.trim()) line.push({ type: \"text\", raw: part, text: part });\n }\n continue;\n }\n line.push(child);\n }\n close();\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,30 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ const markdownReferenceMessages = i18n.define({
3
+ baseLocale: "en",
4
+ messages: {
5
+ en: {
6
+ referencePdf: "PDF",
7
+ referenceImage: "Image",
8
+ referenceDesign: "Design file",
9
+ referenceFile: "File",
10
+ referenceNote: "Note",
11
+ referenceHeading: "Heading",
12
+ referenceTask: "Task",
13
+ referencePage: "Page"
14
+ },
15
+ de: {
16
+ referencePdf: "PDF",
17
+ referenceImage: "Bild",
18
+ referenceDesign: "Designdatei",
19
+ referenceFile: "Datei",
20
+ referenceNote: "Notiz",
21
+ referenceHeading: "Überschrift",
22
+ referenceTask: "Aufgabe",
23
+ referencePage: "Seite"
24
+ }
25
+ }
26
+ });
27
+ /** Imperative UI inherits the document locale when no locale is supplied. */
28
+ export const resolveMarkdownReferenceMessages = locale => markdownReferenceMessages.resolve([locale ?? (typeof document === "undefined" ? markdownReferenceMessages.baseLocale : document.documentElement.lang)]).t;
29
+ export const checkMarkdownReferenceMessages = () => markdownReferenceMessages.check();
30
+ //# sourceMappingURL=markdown-reference-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/markdown-reference-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\n\nconst markdownReferenceMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n referencePdf: \"PDF\",\n referenceImage: \"Image\",\n referenceDesign: \"Design file\",\n referenceFile: \"File\",\n referenceNote: \"Note\",\n referenceHeading: \"Heading\",\n referenceTask: \"Task\",\n referencePage: \"Page\",\n },\n de: {\n referencePdf: \"PDF\",\n referenceImage: \"Bild\",\n referenceDesign: \"Designdatei\",\n referenceFile: \"Datei\",\n referenceNote: \"Notiz\",\n referenceHeading: \"Überschrift\",\n referenceTask: \"Aufgabe\",\n referencePage: \"Seite\",\n },\n },\n});\n\nexport type MarkdownReferenceMessages = ReturnType<(typeof markdownReferenceMessages)[\"resolve\"]>[\"t\"];\n\n/** Imperative UI inherits the document locale when no locale is supplied. */\nexport const resolveMarkdownReferenceMessages = (locale?: string): MarkdownReferenceMessages =>\n markdownReferenceMessages.resolve([\n locale ?? (typeof document === \"undefined\" ? markdownReferenceMessages.baseLocale : document.documentElement.lang),\n ]).t;\n\nexport const checkMarkdownReferenceMessages = () => markdownReferenceMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAElC,MAAM,yBAAyB,GAAG,IAAI,CAAC,MAAM,CAAC;EAC5C,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,YAAY,EAAE,KAAK;MACnB,cAAc,EAAE,OAAO;MACvB,eAAe,EAAE,aAAa;MAC9B,aAAa,EAAE,MAAM;MACrB,aAAa,EAAE,MAAM;MACrB,gBAAgB,EAAE,SAAS;MAC3B,aAAa,EAAE,MAAM;MACrB,aAAa,EAAE;IACjB,CAAC;IACD,EAAE,EAAE;MACF,YAAY,EAAE,KAAK;MACnB,cAAc,EAAE,MAAM;MACtB,eAAe,EAAE,aAAa;MAC9B,aAAa,EAAE,OAAO;MACtB,aAAa,EAAE,OAAO;MACtB,gBAAgB,EAAE,aAAa;MAC/B,aAAa,EAAE,SAAS;MACxB,aAAa,EAAE;IACjB;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,gCAAgC,GAAI,MAAe,IAC9D,yBAAyB,CAAC,OAAO,CAAC,CAChC,MAAM,KAAK,OAAO,QAAQ,KAAK,WAAW,GAAG,yBAAyB,CAAC,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CACnH,CAAC,CAAC,CAAC;AAEN,OAAO,MAAM,8BAA8B,GAAG,MAAM,yBAAyB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,38 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const paginationMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ pagination: "Pagination",
8
+ pageOf: ({
9
+ page,
10
+ total
11
+ }) => `Page ${page} of ${total}`,
12
+ previousPage: "Previous page",
13
+ nextPage: "Next page",
14
+ goToPage: ({
15
+ page
16
+ }) => `Go to page ${page}`
17
+ },
18
+ de: {
19
+ pagination: "Seitennavigation",
20
+ pageOf: ({
21
+ page,
22
+ total
23
+ }) => `Seite ${page} von ${total}`,
24
+ previousPage: "Vorherige Seite",
25
+ nextPage: "Nächste Seite",
26
+ goToPage: ({
27
+ page
28
+ }) => `Zu Seite ${page}`
29
+ }
30
+ }
31
+ });
32
+ /** Resolved from the inherited render locale. */
33
+ export const usePaginationMessages = () => {
34
+ const locale = useLocale();
35
+ return () => paginationMessages.resolve([locale()]).t;
36
+ };
37
+ export const checkPaginationMessages = () => paginationMessages.check();
38
+ //# sourceMappingURL=pagination-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/pagination-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst paginationMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n pagination: \"Pagination\",\n pageOf: ({ page, total }: { page: number; total: number }) => `Page ${page} of ${total}`,\n previousPage: \"Previous page\",\n nextPage: \"Next page\",\n goToPage: ({ page }: { page: number }) => `Go to page ${page}`,\n },\n de: {\n pagination: \"Seitennavigation\",\n pageOf: ({ page, total }) => `Seite ${page} von ${total}`,\n previousPage: \"Vorherige Seite\",\n nextPage: \"Nächste Seite\",\n goToPage: ({ page }) => `Zu Seite ${page}`,\n },\n },\n});\n\nexport type PaginationMessages = ReturnType<(typeof paginationMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const usePaginationMessages = (): (() => PaginationMessages) => {\n const locale = useLocale();\n return () => paginationMessages.resolve([locale()]).t;\n};\n\nexport const checkPaginationMessages = () => paginationMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;EACrC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,UAAU,EAAE,YAAY;MACxB,MAAM,EAAE,CAAC;QAAE,IAAI;QAAE;MAAuC,CAAC,KAAK,QAAQ,IAAI,OAAO,KAAK,EAAE;MACxF,YAAY,EAAE,eAAe;MAC7B,QAAQ,EAAE,WAAW;MACrB,QAAQ,EAAE,CAAC;QAAE;MAAuB,CAAC,KAAK,cAAc,IAAI;IAC9D,CAAC;IACD,EAAE,EAAE;MACF,UAAU,EAAE,kBAAkB;MAC9B,MAAM,EAAE,CAAC;QAAE,IAAI;QAAE;MAAM,CAAC,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE;MACzD,YAAY,EAAE,iBAAiB;MAC/B,QAAQ,EAAE,eAAe;MACzB,QAAQ,EAAE,CAAC;QAAE;MAAK,CAAC,KAAK,YAAY,IAAI;IAC1C;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,qBAAqB,GAAG,MAAkC;EACrE,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,OAAO,MAAM,uBAAuB,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,43 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const pdfMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ openPreview: "Open preview",
8
+ pdfPreview: "PDF preview",
9
+ pdfPreviewHttpError: ({
10
+ status
11
+ }) => `PDF preview failed with HTTP ${status}`,
12
+ pdfPreviewTabBlocked: "The browser blocked the new tab. Allow pop-ups and try again.",
13
+ pdfPreviewNoViewer: "This PDF cannot be shown here",
14
+ pdfPreviewNoViewerDescription: "Your browser cannot show PDFs inside a page. Open the document to view it.",
15
+ pdfPreviewRendering: "Rendering PDF preview…",
16
+ previewPdf: "Preview PDF",
17
+ renderPdfPreview: "Render a PDF preview to see the final output."
18
+ },
19
+ de: {
20
+ openPreview: "Vorschau öffnen",
21
+ pdfPreview: "PDF-Vorschau",
22
+ pdfPreviewHttpError: ({
23
+ status
24
+ }) => `PDF-Vorschau ist mit HTTP ${status} fehlgeschlagen`,
25
+ pdfPreviewTabBlocked: "Der Browser hat den neuen Tab blockiert. Erlaube Pop-ups und versuche es erneut.",
26
+ pdfPreviewNoViewer: "Dieses PDF kann hier nicht angezeigt werden",
27
+ pdfPreviewNoViewerDescription: "Dein Browser kann PDFs nicht innerhalb einer Seite anzeigen. Öffne das Dokument, um es anzusehen.",
28
+ pdfPreviewRendering: "PDF-Vorschau wird erstellt…",
29
+ previewPdf: "PDF anzeigen",
30
+ renderPdfPreview: "Erzeuge eine PDF-Vorschau, um das Endergebnis zu sehen."
31
+ }
32
+ }
33
+ });
34
+ /** Resolved from the inherited render locale. */
35
+ export const usePdfMessages = () => {
36
+ const locale = useLocale();
37
+ return () => pdfMessages.resolve([locale()]).t;
38
+ };
39
+
40
+ /** Imperative UI inherits the document locale when no locale is supplied. */
41
+ export const resolvePdfMessages = locale => pdfMessages.resolve([locale ?? (typeof document === "undefined" ? pdfMessages.baseLocale : document.documentElement.lang)]).t;
42
+ export const checkPdfMessages = () => pdfMessages.check();
43
+ //# sourceMappingURL=pdf-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/pdf-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst pdfMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n openPreview: \"Open preview\",\n pdfPreview: \"PDF preview\",\n pdfPreviewHttpError: ({ status }: { status: number }) => `PDF preview failed with HTTP ${status}`,\n pdfPreviewTabBlocked: \"The browser blocked the new tab. Allow pop-ups and try again.\",\n pdfPreviewNoViewer: \"This PDF cannot be shown here\",\n pdfPreviewNoViewerDescription: \"Your browser cannot show PDFs inside a page. Open the document to view it.\",\n pdfPreviewRendering: \"Rendering PDF preview…\",\n previewPdf: \"Preview PDF\",\n renderPdfPreview: \"Render a PDF preview to see the final output.\",\n },\n de: {\n openPreview: \"Vorschau öffnen\",\n pdfPreview: \"PDF-Vorschau\",\n pdfPreviewHttpError: ({ status }) => `PDF-Vorschau ist mit HTTP ${status} fehlgeschlagen`,\n pdfPreviewTabBlocked: \"Der Browser hat den neuen Tab blockiert. Erlaube Pop-ups und versuche es erneut.\",\n pdfPreviewNoViewer: \"Dieses PDF kann hier nicht angezeigt werden\",\n pdfPreviewNoViewerDescription: \"Dein Browser kann PDFs nicht innerhalb einer Seite anzeigen. Öffne das Dokument, um es anzusehen.\",\n pdfPreviewRendering: \"PDF-Vorschau wird erstellt…\",\n previewPdf: \"PDF anzeigen\",\n renderPdfPreview: \"Erzeuge eine PDF-Vorschau, um das Endergebnis zu sehen.\",\n },\n },\n});\n\nexport type PdfMessages = ReturnType<(typeof pdfMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const usePdfMessages = (): (() => PdfMessages) => {\n const locale = useLocale();\n return () => pdfMessages.resolve([locale()]).t;\n};\n\n/** Imperative UI inherits the document locale when no locale is supplied. */\nexport const resolvePdfMessages = (locale?: string): PdfMessages =>\n pdfMessages.resolve([locale ?? (typeof document === \"undefined\" ? pdfMessages.baseLocale : document.documentElement.lang)]).t;\n\nexport const checkPdfMessages = () => pdfMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;EAC9B,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,WAAW,EAAE,cAAc;MAC3B,UAAU,EAAE,aAAa;MACzB,mBAAmB,EAAE,CAAC;QAAE;MAA2B,CAAC,KAAK,gCAAgC,MAAM,EAAE;MACjG,oBAAoB,EAAE,+DAA+D;MACrF,kBAAkB,EAAE,+BAA+B;MACnD,6BAA6B,EAAE,4EAA4E;MAC3G,mBAAmB,EAAE,wBAAwB;MAC7C,UAAU,EAAE,aAAa;MACzB,gBAAgB,EAAE;IACpB,CAAC;IACD,EAAE,EAAE;MACF,WAAW,EAAE,iBAAiB;MAC9B,UAAU,EAAE,cAAc;MAC1B,mBAAmB,EAAE,CAAC;QAAE;MAAO,CAAC,KAAK,6BAA6B,MAAM,iBAAiB;MACzF,oBAAoB,EAAE,kFAAkF;MACxG,kBAAkB,EAAE,6CAA6C;MACjE,6BAA6B,EAAE,mGAAmG;MAClI,mBAAmB,EAAE,6BAA6B;MAClD,UAAU,EAAE,cAAc;MAC1B,gBAAgB,EAAE;IACpB;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,cAAc,GAAG,MAA2B;EACvD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;;AAED;AACA,OAAO,MAAM,kBAAkB,GAAI,MAAe,IAChD,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,OAAO,QAAQ,KAAK,WAAW,GAAG,WAAW,CAAC,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAE/H,OAAO,MAAM,gBAAgB,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,20 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const rangePickerMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ window: "Window"
8
+ },
9
+ de: {
10
+ window: "Fenster"
11
+ }
12
+ }
13
+ });
14
+ /** Resolved from the inherited render locale. */
15
+ export const useRangePickerMessages = () => {
16
+ const locale = useLocale();
17
+ return () => rangePickerMessages.resolve([locale()]).t;
18
+ };
19
+ export const checkRangePickerMessages = () => rangePickerMessages.check();
20
+ //# sourceMappingURL=range-picker-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/range-picker-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst rangePickerMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n window: \"Window\",\n },\n de: {\n window: \"Fenster\",\n },\n },\n});\n\nexport type RangePickerMessages = ReturnType<(typeof rangePickerMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useRangePickerMessages = (): (() => RangePickerMessages) => {\n const locale = useLocale();\n return () => rangePickerMessages.resolve([locale()]).t;\n};\n\nexport const checkRangePickerMessages = () => rangePickerMessages.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,MAAM,EAAE;IACV,CAAC;IACD,EAAE,EAAE;MACF,MAAM,EAAE;IACV;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,OAAO,MAAM,wBAAwB,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const structuredDataMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ viewRaw: "View raw",
8
+ viewFormatted: "View formatted"
9
+ },
10
+ de: {
11
+ viewRaw: "Rohdaten anzeigen",
12
+ viewFormatted: "Formatiert anzeigen"
13
+ }
14
+ }
15
+ });
16
+ /** Resolved from the inherited render locale. */
17
+ export const useStructuredDataMessages = () => {
18
+ const locale = useLocale();
19
+ return () => structuredDataMessages.resolve([locale()]).t;
20
+ };
21
+ export const checkStructuredDataMessages = () => structuredDataMessages.check();
22
+ //# sourceMappingURL=structured-data-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/structured-data-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst structuredDataMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n viewRaw: \"View raw\",\n viewFormatted: \"View formatted\",\n },\n de: {\n viewRaw: \"Rohdaten anzeigen\",\n viewFormatted: \"Formatiert anzeigen\",\n },\n },\n});\n\nexport type StructuredDataMessages = ReturnType<(typeof structuredDataMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useStructuredDataMessages = (): (() => StructuredDataMessages) => {\n const locale = useLocale();\n return () => structuredDataMessages.resolve([locale()]).t;\n};\n\nexport const checkStructuredDataMessages = () => structuredDataMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC;EACzC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,OAAO,EAAE,UAAU;MACnB,aAAa,EAAE;IACjB,CAAC;IACD,EAAE,EAAE;MACF,OAAO,EAAE,mBAAmB;MAC5B,aAAa,EAAE;IACjB;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,yBAAyB,GAAG,MAAsC;EAC7E,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,OAAO,MAAM,2BAA2B,GAAG,MAAM,sBAAsB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,62 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const timelineMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ timeline: "Timeline",
8
+ timelineHint: "Arrow keys move between items, Page Up and Page Down between days, Home and End to the first and last item of a day, T to now.",
9
+ timelineTimeRange: ({
10
+ start,
11
+ end
12
+ }) => `${start} to ${end}`,
13
+ timelineDone: "done",
14
+ timelineOpen: "open",
15
+ timelineNight: ({
16
+ start,
17
+ end
18
+ }) => `Night · ${start}–${end}`,
19
+ timelineNothingPlanned: "Nothing planned",
20
+ timelineFree: ({
21
+ duration
22
+ }) => `${duration} free`,
23
+ timelineMore: ({
24
+ count
25
+ }) => `${count} more`,
26
+ timelineNow: ({
27
+ time
28
+ }) => `Now, ${time}`
29
+ },
30
+ de: {
31
+ timeline: "Zeitleiste",
32
+ timelineHint: "Pfeiltasten wechseln den Eintrag, Bild auf und Bild ab den Tag, Pos1 und Ende springen zum ersten und letzten Eintrag des Tages, T zu jetzt.",
33
+ timelineTimeRange: ({
34
+ start,
35
+ end
36
+ }) => `${start} bis ${end}`,
37
+ timelineDone: "erledigt",
38
+ timelineOpen: "offen",
39
+ timelineNight: ({
40
+ start,
41
+ end
42
+ }) => `Nacht · ${start}–${end}`,
43
+ timelineNothingPlanned: "Nichts geplant",
44
+ timelineFree: ({
45
+ duration
46
+ }) => `${duration} frei`,
47
+ timelineMore: ({
48
+ count
49
+ }) => `${count} weitere`,
50
+ timelineNow: ({
51
+ time
52
+ }) => `Jetzt, ${time}`
53
+ }
54
+ }
55
+ });
56
+ /** Resolved from the inherited render locale. */
57
+ export const useTimelineMessages = () => {
58
+ const locale = useLocale();
59
+ return () => timelineMessages.resolve([locale()]).t;
60
+ };
61
+ export const checkTimelineMessages = () => timelineMessages.check();
62
+ //# sourceMappingURL=timeline-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/timeline-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst timelineMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n timeline: \"Timeline\",\n timelineHint:\n \"Arrow keys move between items, Page Up and Page Down between days, Home and End to the first and last item of a day, T to now.\",\n timelineTimeRange: ({ start, end }: { start: string; end: string }) => `${start} to ${end}`,\n timelineDone: \"done\",\n timelineOpen: \"open\",\n timelineNight: ({ start, end }: { start: string; end: string }) => `Night · ${start}–${end}`,\n timelineNothingPlanned: \"Nothing planned\",\n timelineFree: ({ duration }: { duration: string }) => `${duration} free`,\n timelineMore: ({ count }: { count: number }) => `${count} more`,\n timelineNow: ({ time }: { time: string }) => `Now, ${time}`,\n },\n de: {\n timeline: \"Zeitleiste\",\n timelineHint:\n \"Pfeiltasten wechseln den Eintrag, Bild auf und Bild ab den Tag, Pos1 und Ende springen zum ersten und letzten Eintrag des Tages, T zu jetzt.\",\n timelineTimeRange: ({ start, end }) => `${start} bis ${end}`,\n timelineDone: \"erledigt\",\n timelineOpen: \"offen\",\n timelineNight: ({ start, end }) => `Nacht · ${start}–${end}`,\n timelineNothingPlanned: \"Nichts geplant\",\n timelineFree: ({ duration }) => `${duration} frei`,\n timelineMore: ({ count }) => `${count} weitere`,\n timelineNow: ({ time }) => `Jetzt, ${time}`,\n },\n },\n});\n\nexport type TimelineMessages = ReturnType<(typeof timelineMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useTimelineMessages = (): (() => TimelineMessages) => {\n const locale = useLocale();\n return () => timelineMessages.resolve([locale()]).t;\n};\n\nexport const checkTimelineMessages = () => timelineMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC;EACnC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,QAAQ,EAAE,UAAU;MACpB,YAAY,EACV,gIAAgI;MAClI,iBAAiB,EAAE,CAAC;QAAE,KAAK;QAAE;MAAoC,CAAC,KAAK,GAAG,KAAK,OAAO,GAAG,EAAE;MAC3F,YAAY,EAAE,MAAM;MACpB,YAAY,EAAE,MAAM;MACpB,aAAa,EAAE,CAAC;QAAE,KAAK;QAAE;MAAoC,CAAC,KAAK,WAAW,KAAK,IAAI,GAAG,EAAE;MAC5F,sBAAsB,EAAE,iBAAiB;MACzC,YAAY,EAAE,CAAC;QAAE;MAA+B,CAAC,KAAK,GAAG,QAAQ,OAAO;MACxE,YAAY,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,GAAG,KAAK,OAAO;MAC/D,WAAW,EAAE,CAAC;QAAE;MAAuB,CAAC,KAAK,QAAQ,IAAI;IAC3D,CAAC;IACD,EAAE,EAAE;MACF,QAAQ,EAAE,YAAY;MACtB,YAAY,EACV,8IAA8I;MAChJ,iBAAiB,EAAE,CAAC;QAAE,KAAK;QAAE;MAAI,CAAC,KAAK,GAAG,KAAK,QAAQ,GAAG,EAAE;MAC5D,YAAY,EAAE,UAAU;MACxB,YAAY,EAAE,OAAO;MACrB,aAAa,EAAE,CAAC;QAAE,KAAK;QAAE;MAAI,CAAC,KAAK,WAAW,KAAK,IAAI,GAAG,EAAE;MAC5D,sBAAsB,EAAE,gBAAgB;MACxC,YAAY,EAAE,CAAC;QAAE;MAAS,CAAC,KAAK,GAAG,QAAQ,OAAO;MAClD,YAAY,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,GAAG,KAAK,UAAU;MAC/C,WAAW,EAAE,CAAC;QAAE;MAAK,CAAC,KAAK,UAAU,IAAI;IAC3C;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":[]}
@@ -0,0 +1,24 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const videoMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ videoUnsupported: "Your browser does not support video playback.",
8
+ videoCannotPlay: "This video cannot play here",
9
+ videoCannotPlayDescription: "Your browser cannot play this video. Download it to watch it in another app."
10
+ },
11
+ de: {
12
+ videoUnsupported: "Dein Browser unterstützt keine Videowiedergabe.",
13
+ videoCannotPlay: "Dieses Video kann hier nicht abgespielt werden",
14
+ videoCannotPlayDescription: "Dein Browser kann dieses Video nicht abspielen. Lade es herunter, um es in einer anderen App anzusehen."
15
+ }
16
+ }
17
+ });
18
+ /** Resolved from the inherited render locale. */
19
+ export const useVideoMessages = () => {
20
+ const locale = useLocale();
21
+ return () => videoMessages.resolve([locale()]).t;
22
+ };
23
+ export const checkVideoMessages = () => videoMessages.check();
24
+ //# sourceMappingURL=video-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/video-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst videoMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n videoUnsupported: \"Your browser does not support video playback.\",\n videoCannotPlay: \"This video cannot play here\",\n videoCannotPlayDescription: \"Your browser cannot play this video. Download it to watch it in another app.\",\n },\n de: {\n videoUnsupported: \"Dein Browser unterstützt keine Videowiedergabe.\",\n videoCannotPlay: \"Dieses Video kann hier nicht abgespielt werden\",\n videoCannotPlayDescription: \"Dein Browser kann dieses Video nicht abspielen. Lade es herunter, um es in einer anderen App anzusehen.\",\n },\n },\n});\n\nexport type VideoMessages = ReturnType<(typeof videoMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useVideoMessages = (): (() => VideoMessages) => {\n const locale = useLocale();\n return () => videoMessages.resolve([locale()]).t;\n};\n\nexport const checkVideoMessages = () => videoMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;EAChC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,gBAAgB,EAAE,+CAA+C;MACjE,eAAe,EAAE,6BAA6B;MAC9C,0BAA0B,EAAE;IAC9B,CAAC;IACD,EAAE,EAAE;MACF,gBAAgB,EAAE,iDAAiD;MACnE,eAAe,EAAE,gDAAgD;MACjE,0BAA0B,EAAE;IAC9B;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,gBAAgB,GAAG,MAA6B;EAC3D,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,OAAO,MAAM,kBAAkB,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,28 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const viewportMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ zoomIn: "Zoom in",
8
+ zoomOut: "Zoom out",
9
+ resetZoom: "Reset zoom",
10
+ openFullscreen: "Open fullscreen",
11
+ zoomPanKeys: "Zoom with plus and minus, move with the arrow keys, reset with 0, open fullscreen with F."
12
+ },
13
+ de: {
14
+ zoomIn: "Vergrößern",
15
+ zoomOut: "Verkleinern",
16
+ resetZoom: "Zoom zurücksetzen",
17
+ openFullscreen: "Im Vollbild öffnen",
18
+ zoomPanKeys: "Mit Plus und Minus zoomen, mit den Pfeiltasten verschieben, mit 0 zurücksetzen, mit F im Vollbild öffnen."
19
+ }
20
+ }
21
+ });
22
+ /** Resolved from the inherited render locale. */
23
+ export const useViewportMessages = () => {
24
+ const locale = useLocale();
25
+ return () => viewportMessages.resolve([locale()]).t;
26
+ };
27
+ export const checkViewportMessages = () => viewportMessages.check();
28
+ //# sourceMappingURL=viewport-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["content/viewport-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst viewportMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n zoomIn: \"Zoom in\",\n zoomOut: \"Zoom out\",\n resetZoom: \"Reset zoom\",\n openFullscreen: \"Open fullscreen\",\n zoomPanKeys: \"Zoom with plus and minus, move with the arrow keys, reset with 0, open fullscreen with F.\",\n },\n de: {\n zoomIn: \"Vergrößern\",\n zoomOut: \"Verkleinern\",\n resetZoom: \"Zoom zurücksetzen\",\n openFullscreen: \"Im Vollbild öffnen\",\n zoomPanKeys: \"Mit Plus und Minus zoomen, mit den Pfeiltasten verschieben, mit 0 zurücksetzen, mit F im Vollbild öffnen.\",\n },\n },\n});\n\nexport type ViewportMessages = ReturnType<(typeof viewportMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useViewportMessages = (): (() => ViewportMessages) => {\n const locale = useLocale();\n return () => viewportMessages.resolve([locale()]).t;\n};\n\nexport const checkViewportMessages = () => viewportMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC;EACnC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,MAAM,EAAE,SAAS;MACjB,OAAO,EAAE,UAAU;MACnB,SAAS,EAAE,YAAY;MACvB,cAAc,EAAE,iBAAiB;MACjC,WAAW,EAAE;IACf,CAAC;IACD,EAAE,EAAE;MACF,MAAM,EAAE,YAAY;MACpB,OAAO,EAAE,aAAa;MACtB,SAAS,EAAE,mBAAmB;MAC9B,cAAc,EAAE,oBAAoB;MACpC,WAAW,EAAE;IACf;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":[]}
@@ -46,6 +46,8 @@ export function createHoverPreview(options = {}) {
46
46
  /** The anchor that Space or `toggle()` opened the card for; only it outlasts the pointer leaving. */
47
47
  let pinned;
48
48
  let dismissed;
49
+ /** Where the mouse last moved on an anchor; a mouse rest checks this point when its delay ends. */
50
+ let mouse;
49
51
  let ring = true;
50
52
  let observer;
51
53
  const placement = () => options.placement ?? {};
@@ -190,15 +192,31 @@ export function createHoverPreview(options = {}) {
190
192
  if (pin) pinned = anchor;
191
193
  return true;
192
194
  };
193
- /** Shows `anchor` after `delay`; a keyboard swap (`follow`) carries an existing pin along. */
194
- const schedule = (anchor, delay, follow = false) => {
195
+ /**
196
+ * Whether the mouse still rests on `anchor`. A scrolling list or a layout
197
+ * change moves rows under a still mouse before the browser reports another
198
+ * pointer event; WebKit reports it only several scroll steps later.
199
+ */
200
+ const restsOn = anchor => {
201
+ if (!mouse) return false;
202
+ // Inside a shadow root, the document reports only the shadow host.
203
+ const root = anchor.element.getRootNode();
204
+ const hit = (root instanceof ShadowRoot ? root : document).elementFromPoint(mouse.x, mouse.y);
205
+ return hit !== null && anchor.element.contains(hit);
206
+ };
207
+ /**
208
+ * Shows `anchor` after `delay`; a keyboard swap (`follow`) carries an existing
209
+ * pin along. A mouse rest (`rest`) shows the anchor only if it still lies
210
+ * under the mouse.
211
+ */
212
+ const schedule = (anchor, delay, follow = false, rest = false) => {
195
213
  clear();
196
214
  if (!open()) {
197
215
  pending = anchor;
198
216
  document.addEventListener("keydown", escape);
199
217
  }
200
218
  timer = setTimeout(() => {
201
- if (open()) show(anchor, follow && pinned !== undefined);else if (blocked()) clear();else show(anchor, false);
219
+ if (rest && !restsOn(anchor)) clear();else if (open()) show(anchor, follow && pinned !== undefined);else if (blocked()) clear();else show(anchor, false);
202
220
  }, delay);
203
221
  };
204
222
  const leave = () => {
@@ -238,14 +256,24 @@ export function createHoverPreview(options = {}) {
238
256
  const pointerEnter = event => {
239
257
  // Touch and pen have no resting hover; the card stays a mouse affordance.
240
258
  if (event.pointerType !== "mouse") return;
259
+ mouse = {
260
+ x: event.clientX,
261
+ y: event.clientY
262
+ };
241
263
  clear();
242
264
  if (open() && current() === entry || dismissed === entry) return;
243
- schedule(entry, open() ? SWAP_DELAY : options.openDelay ?? 250);
265
+ schedule(entry, open() ? SWAP_DELAY : options.openDelay ?? 250, false, true);
244
266
  };
245
267
  // The open delay counts from the moment the mouse rests. An open card
246
- // swaps on entering another anchor and ignores movement inside it.
268
+ // swaps on entering another anchor; movement inside it only moves the
269
+ // position that the swap checks.
247
270
  const pointerMove = event => {
248
- if (event.pointerType === "mouse" && !open() && dismissed !== entry) schedule(entry, options.openDelay ?? 250);
271
+ if (event.pointerType !== "mouse") return;
272
+ mouse = {
273
+ x: event.clientX,
274
+ y: event.clientY
275
+ };
276
+ if (!open() && dismissed !== entry) schedule(entry, options.openDelay ?? 250, false, true);
249
277
  };
250
278
  // A press acts on the row, such as opening it or its menu; a card about to open stays closed.
251
279
  const pointerDown = () => clear();