@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
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["inputs/markdown/MarkdownEditor.tsx"],"sourcesContent":["import { highlight } from \"@k2b/stdlib\";\nimport { createEffect, createMemo, createSignal, createUniqueId, For, type JSX, onCleanup, onMount, Show, untrack } from \"solid-js\";\nimport { Tooltip } from \"../../feedback/Tooltip\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../../internal/field\";\nimport { useLocale } from \"../../intl/locale\";\nimport { useUiMessages } from \"../../intl/messages\";\nimport {\n abbreviations as abbreviationsCompletion,\n buildSuggestContext,\n type Completion,\n collectKnownLabels,\n createCompletionBehaviorState,\n detectQuery,\n displayLabel,\n type QueryContext,\n renderWithOverlay,\n resolveSuggestions,\n type Suggestion,\n} from \"../completion\";\nimport type { ValueFieldProps } from \"../field-contract\";\nimport { resolveMaybeAccessor } from \"../field-contract\";\nimport { computeActiveFormats } from \"./active-formats\";\nimport { handleListContinuation, handleShortcut, handleSmartPaste } from \"./behaviors\";\nimport { isInCodeZone } from \"./code-zone\";\nimport Toolbar from \"./Toolbar\";\n\nexport type MarkdownEditorProps = ValueFieldProps<string> & {\n onSubmit?: () => void;\n placeholder?: string;\n lines?: number;\n noToolbar?: boolean;\n spellcheck?: boolean;\n name?: string;\n maxLength?: number;\n textareaRef?: (element: HTMLTextAreaElement) => void;\n abbreviations?: Record<string, string>;\n completions?: readonly Completion[];\n showStats?: boolean;\n variant?: \"default\" | \"paper\" | \"embedded\";\n fill?: boolean;\n /** Groups save and close at the end of the toolbar. The caller owns navigation and unsaved-change confirmation. */\n onClose?: () => void;\n onSave?: () => void;\n saveDisabled?: boolean;\n saving?: boolean;\n /** Shows a successful-save check. The caller clears it after a brief delay or the next edit. */\n saved?: boolean;\n toolbarTrailing?: JSX.Element;\n};\n\ntype CompletionState = {\n context: QueryContext;\n suggestions: readonly Suggestion[];\n selectedIndex: number;\n};\n\nexport function MarkdownEditor(props: MarkdownEditorProps): JSX.Element {\n const messages = useUiMessages();\n const locale = useLocale();\n const formatCount = (value: number) => new Intl.NumberFormat(locale()).format(value);\n const meta = createFieldMeta(props.id);\n let textarea: HTMLTextAreaElement | undefined;\n let preview: HTMLDivElement | undefined;\n let dropdown: HTMLDivElement | undefined;\n let completionAbort: AbortController | null = null;\n let completionTimer: ReturnType<typeof setTimeout> | null = null;\n let overlayFrame: number | undefined;\n let overlayInitialized = false;\n let renderPendingOverlay: (() => void) | undefined;\n const completionBehavior = createCompletionBehaviorState();\n\n const [textareaSignal, setTextareaSignal] = createSignal<HTMLTextAreaElement | null>(null);\n const [activeFormats, setActiveFormats] = createSignal<Set<string>>(new Set());\n const [composing, setComposing] = createSignal(false);\n const [localValue, setLocalValue] = createSignal(resolveMaybeAccessor(props.value) ?? \"\");\n const error = () => resolveMaybeAccessor(props.error);\n const [state, setState] = createSignal<CompletionState | null>(null);\n const [loading, setLoading] = createSignal(false);\n const [completionError, setCompletionError] = createSignal<string | null>(null);\n const [dropdownOpen, setDropdownOpen] = createSignal(false);\n const completionId = createUniqueId();\n const listboxId = `${meta.controlId}-${completionId}-suggestions`;\n const optionId = (index: number): string => `${listboxId}-${index}`;\n const activeSuggestion = (): Suggestion | null => {\n const current = state();\n return current?.suggestions[current.selectedIndex] ?? null;\n };\n\n const mergedCompletions = createMemo<readonly Completion[] | undefined>(() => {\n const merged: Completion[] = [];\n if (props.abbreviations && Object.keys(props.abbreviations).length > 0) {\n merged.push(abbreviationsCompletion(props.abbreviations));\n }\n if (props.completions) merged.push(...props.completions);\n return merged.length > 0 ? merged : undefined;\n });\n const knownLabels = createMemo(() => collectKnownLabels(mergedCompletions()));\n\n createEffect(() => {\n const incoming = resolveMaybeAccessor(props.value);\n if (incoming !== undefined && incoming !== null && incoming !== untrack(localValue)) {\n setLocalValue(incoming);\n }\n });\n\n createEffect(() => {\n const target = localValue();\n if (!composing() && textarea && textarea.value !== target) {\n textarea.value = target;\n }\n });\n\n createEffect(() => {\n if (!preview) return;\n const value = localValue();\n const labels = knownLabels();\n const current = state();\n const active = activeSuggestion();\n const ghost =\n current && active\n ? {\n at: current.context.end,\n text: active.text.slice(current.context.text.length),\n }\n : undefined;\n const anchor = current && !ghost ? { at: current.context.end } : undefined;\n renderPendingOverlay = () => {\n if (!preview) return;\n preview.innerHTML = renderWithOverlay(value, (text) => highlight.markdown(text, { knownLabels: labels }), { ghost, anchor });\n if (textarea) {\n preview.scrollTop = textarea.scrollTop;\n preview.scrollLeft = textarea.scrollLeft;\n }\n if (dropdown?.matches(\":popover-open\")) positionDropdown();\n };\n if (!overlayInitialized) {\n overlayInitialized = true;\n renderPendingOverlay();\n renderPendingOverlay = undefined;\n return;\n }\n if (overlayFrame !== undefined) return;\n overlayFrame = requestAnimationFrame(() => {\n overlayFrame = undefined;\n const render = renderPendingOverlay;\n renderPendingOverlay = undefined;\n render?.();\n });\n });\n\n const updateActiveFormats = (): void => {\n if (textarea) setActiveFormats(computeActiveFormats(textarea));\n };\n\n const closeDropdown = (): void => {\n if (dropdown?.matches(\":popover-open\")) dropdown.hidePopover();\n setDropdownOpen(false);\n };\n\n const clearCompletion = (): void => {\n completionAbort?.abort();\n completionAbort = null;\n if (completionTimer) clearTimeout(completionTimer);\n completionTimer = null;\n setState(null);\n setLoading(false);\n setCompletionError(null);\n closeDropdown();\n };\n\n const positionDropdown = (): void => {\n if (!dropdown?.isConnected || !preview?.isConnected || !textarea?.isConnected) {\n return;\n }\n const anchor = preview.querySelector<HTMLElement>(\"[data-completion-anchor]\");\n const rect = anchor?.getBoundingClientRect() ?? textarea.getBoundingClientRect();\n const maxHeight = 260;\n const spaceBelow = window.innerHeight - rect.bottom;\n const openAbove = spaceBelow < maxHeight && rect.top > spaceBelow;\n if (openAbove) {\n dropdown.style.setProperty(\"top\", \"auto\", \"important\");\n dropdown.style.setProperty(\"bottom\", `${window.innerHeight - rect.top + 4}px`, \"important\");\n } else {\n dropdown.style.setProperty(\"top\", `${rect.bottom + 4}px`, \"important\");\n dropdown.style.setProperty(\"bottom\", \"auto\", \"important\");\n }\n if (!dropdown.matches(\":popover-open\")) dropdown.showPopover();\n // The list sizes to its suggestions in CSS; measured once shown, it is\n // clamped into the viewport before the next paint.\n const width = dropdown.getBoundingClientRect().width;\n const left = Math.min(rect.left, window.innerWidth - width - 8);\n dropdown.style.setProperty(\"left\", `${Math.max(8, left)}px`, \"important\");\n };\n\n const isAbortError = (error: unknown): boolean =>\n error instanceof DOMException\n ? error.name === \"AbortError\"\n : Boolean(error && typeof error === \"object\" && \"name\" in error && (error as { name: string }).name === \"AbortError\");\n\n const applySuggestionList = (context: QueryContext, suggestions: readonly Suggestion[]): void => {\n const value = localValue();\n const normalized = context.text.toLowerCase();\n const usable = suggestions.filter((suggestion) => {\n if (suggestion.textEdit) {\n const { start, end, text } = suggestion.textEdit;\n return (\n Number.isInteger(start) &&\n Number.isInteger(end) &&\n start >= 0 &&\n end >= start &&\n end <= value.length &&\n value.slice(start, end) !== text\n );\n }\n return suggestion.text.toLowerCase().startsWith(normalized) && suggestion.text.length > context.text.length;\n });\n if (usable.length === 0) {\n setState(null);\n closeDropdown();\n return;\n }\n const previous = activeSuggestion()?.text;\n const retained = previous ? usable.findIndex((suggestion) => suggestion.text === previous) : -1;\n setState({\n context,\n suggestions: usable,\n selectedIndex: retained >= 0 ? retained : 0,\n });\n if (context.completion.dropdown) {\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n } else {\n closeDropdown();\n }\n };\n\n const runAsyncCompletion = async (context: QueryContext, promise: Promise<readonly Suggestion[]>, signal: AbortSignal): Promise<void> => {\n try {\n const suggestions = await promise;\n if (signal.aborted) return;\n setLoading(false);\n applySuggestionList(context, suggestions);\n } catch (error) {\n if (signal.aborted || isAbortError(error)) return;\n setLoading(false);\n setState(null);\n setCompletionError(error instanceof Error ? error.message : \"Suggestions could not be loaded\");\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n }\n };\n\n const startCompletionResolution = (context: QueryContext, signal: AbortSignal): void => {\n if (signal.aborted || !textarea) return;\n setLoading(true);\n setCompletionError(null);\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n try {\n const result = resolveSuggestions(context.completion, context.query, buildSuggestContext(textarea, context), signal);\n if (result.kind === \"sync\") {\n setLoading(false);\n applySuggestionList(context, result.data);\n } else {\n void runAsyncCompletion(context, result.promise, signal);\n }\n } catch (error) {\n if (signal.aborted || isAbortError(error)) return;\n setLoading(false);\n setState(null);\n setCompletionError(error instanceof Error ? error.message : \"Suggestions could not be loaded\");\n queueMicrotask(positionDropdown);\n }\n };\n\n const recomputeCompletion = (): void => {\n if (!textarea) return;\n const context = detectQuery(textarea, mergedCompletions(), {\n isExcluded: isInCodeZone,\n });\n if (!context) {\n clearCompletion();\n return;\n }\n completionAbort?.abort();\n if (completionTimer) clearTimeout(completionTimer);\n completionTimer = null;\n completionAbort = new AbortController();\n const current = state();\n if (\n current &&\n (current.context.start !== context.start ||\n current.context.end !== context.end ||\n current.context.text !== context.text ||\n current.context.completion !== context.completion)\n ) {\n setState(null);\n closeDropdown();\n }\n setCompletionError(null);\n const delay = Math.max(0, context.completion.debounceMs ?? 0);\n if (delay === 0) {\n startCompletionResolution(context, completionAbort.signal);\n } else {\n setLoading(false);\n if (!state()) closeDropdown();\n const signal = completionAbort.signal;\n completionTimer = setTimeout(() => {\n completionTimer = null;\n startCompletionResolution(context, signal);\n }, delay);\n }\n };\n\n const retryCompletion = (): void => {\n if (!textarea) return;\n const context = detectQuery(textarea, mergedCompletions(), {\n isExcluded: isInCodeZone,\n });\n if (!context) return clearCompletion();\n completionAbort?.abort();\n if (completionTimer) clearTimeout(completionTimer);\n completionTimer = null;\n completionAbort = new AbortController();\n startCompletionResolution(context, completionAbort.signal);\n };\n\n const activateSuggestion = (index = state()?.selectedIndex ?? -1): boolean => {\n const current = state();\n const active = current?.suggestions[index];\n if (!textarea || !current || !active) return false;\n if (!active.textEdit && active.text === current.context.text) {\n closeDropdown();\n setState(null);\n return false;\n }\n const applied = completionBehavior.applySuggestion(textarea, current.context, active);\n closeDropdown();\n setState(null);\n return applied;\n };\n\n const moveSelection = (direction: 1 | -1): void => {\n const current = state();\n if (!current || current.suggestions.length === 0) return;\n setState({\n ...current,\n selectedIndex: (current.selectedIndex + direction + current.suggestions.length) % current.suggestions.length,\n });\n };\n\n const stats = createMemo(() => {\n const value = localValue();\n return {\n lines: value.length === 0 ? 0 : value.split(\"\\n\").length,\n words: value.match(/\\S+/g)?.length ?? 0,\n chars: value.length,\n };\n });\n\n onMount(() => {\n if (textarea) setTextareaSignal(textarea);\n updateActiveFormats();\n const selectionChange = (): void => {\n if (document.activeElement === textarea) {\n updateActiveFormats();\n recomputeCompletion();\n }\n };\n // Reposition an OPEN popover only. Calling `positionDropdown` blindly\n // would `showPopover()` a dropdown that is deliberately closed (a\n // ghost-only completion keeps state without a dropdown).\n const reposition = (): void => {\n if (dropdown?.matches(\":popover-open\")) positionDropdown();\n };\n document.addEventListener(\"selectionchange\", selectionChange);\n window.addEventListener(\"resize\", reposition);\n onCleanup(() => {\n document.removeEventListener(\"selectionchange\", selectionChange);\n window.removeEventListener(\"resize\", reposition);\n if (dropdown?.matches(\":popover-open\")) dropdown.hidePopover();\n completionAbort?.abort();\n if (completionTimer) clearTimeout(completionTimer);\n if (overlayFrame !== undefined) cancelAnimationFrame(overlayFrame);\n overlayFrame = undefined;\n renderPendingOverlay = undefined;\n completionBehavior.reset();\n });\n });\n\n const onInput = (event: InputEvent & { currentTarget: HTMLTextAreaElement }): void => {\n if (\n completionBehavior.tryExpand(event.currentTarget, mergedCompletions(), {\n isExcluded: isInCodeZone,\n })\n ) {\n return;\n }\n setLocalValue(event.currentTarget.value);\n props.onValueChange?.(event.currentTarget.value);\n updateActiveFormats();\n recomputeCompletion();\n };\n\n const onKeyDown = (event: KeyboardEvent): void => {\n if (!textarea || event.isComposing) return;\n if (\n event.key === \"Backspace\" &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.altKey &&\n !event.shiftKey &&\n completionBehavior.tryRestore(textarea)\n ) {\n event.preventDefault();\n return;\n }\n const current = state();\n const dropdownCompletion = current?.context.completion.dropdown === true;\n if (current && dropdownCompletion && (event.key === \"ArrowDown\" || event.key === \"ArrowUp\")) {\n event.preventDefault();\n moveSelection(event.key === \"ArrowDown\" ? 1 : -1);\n return;\n }\n if (\n event.key === \"Enter\" &&\n !event.shiftKey &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.altKey &&\n current &&\n dropdownCompletion &&\n dropdownOpen()\n ) {\n event.preventDefault();\n activateSuggestion();\n return;\n }\n if (event.key === \"Tab\" && !event.shiftKey && !event.metaKey && !event.ctrlKey && !event.altKey && current) {\n event.preventDefault();\n activateSuggestion();\n return;\n }\n if (event.key === \"Escape\") {\n if (current) {\n event.preventDefault();\n closeDropdown();\n setState(null);\n return;\n }\n if ((mergedCompletions()?.length ?? 0) > 0) {\n event.preventDefault();\n textarea.blur();\n return;\n }\n }\n if (event.key === \"Enter\" && (event.metaKey || event.ctrlKey) && props.onSubmit) {\n event.preventDefault();\n props.onSubmit();\n return;\n }\n if (handleShortcut(event, textarea)) {\n event.preventDefault();\n return;\n }\n if (event.key === \"Enter\" && !event.shiftKey && !event.metaKey && !event.ctrlKey && !event.altKey && handleListContinuation(textarea)) {\n event.preventDefault();\n }\n };\n\n const saveControls = (): JSX.Element => (\n <>\n <Show when={props.onSave}>\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-markdown-editor__tool\"\n content={messages().saveShortcut}\n aria-label={messages().save}\n tabIndex={-1}\n disabled={props.disabled || props.saveDisabled || props.saving}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => props.onSave?.()}\n >\n <i class={props.saving ? \"ti ti-loader-2 k2b-spin\" : props.saved ? \"ti ti-check\" : \"ti ti-device-floppy\"} aria-hidden=\"true\" />\n </Tooltip.Trigger>\n </Show>\n </>\n );\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={props.error}\n fill={props.fill}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <div\n class=\"k2b-markdown-editor\"\n role=\"group\"\n aria-labelledby={props.label ? meta.labelId : undefined}\n aria-label={!props.label ? props[\"aria-label\"] : undefined}\n data-disabled={props.disabled ? \"true\" : undefined}\n data-invalid={error() ? \"true\" : undefined}\n data-variant={props.variant === \"default\" ? undefined : props.variant}\n data-fill={props.fill ? \"true\" : undefined}\n style={{\n \"--k2b-editor-lines\": String(props.lines ?? 6),\n }}\n onKeyDown={(event) => {\n if (props.onSave && (event.metaKey || event.ctrlKey) && event.key.toLowerCase() === \"s\") {\n event.preventDefault();\n if (!props.disabled && !props.saveDisabled && !props.saving) props.onSave();\n }\n }}\n >\n <Show when={!props.noToolbar}>\n <Toolbar\n textarea={textareaSignal}\n activeFormats={activeFormats}\n disabled={props.disabled}\n trailing={\n <>\n {props.toolbarTrailing}\n {saveControls()}\n <Show when={props.onClose}>\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-markdown-editor__tool\"\n content={messages().close}\n aria-label={messages().close}\n tabIndex={props.disabled ? 0 : -1}\n onClick={() => props.onClose?.()}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </Tooltip.Trigger>\n </Show>\n </>\n }\n />\n </Show>\n <div class=\"k2b-markdown-editor__surface\">\n <Show when={!localValue() && props.placeholder}>\n <div class=\"k2b-markdown-editor__placeholder\" aria-hidden=\"true\">\n {props.placeholder}\n </div>\n </Show>\n <div ref={preview} class=\"k2b-markdown-editor__preview\" aria-hidden=\"true\" />\n <textarea\n ref={(element) => {\n textarea = element;\n props.textareaRef?.(element);\n }}\n id={meta.controlId}\n name={props.name}\n class=\"k2b-markdown-editor__input\"\n onInput={onInput}\n onChange={(event) => props.onValueCommit?.(event.currentTarget.value)}\n onKeyDown={onKeyDown}\n onPaste={(event) => {\n if (textarea && handleSmartPaste(event, textarea)) {\n event.preventDefault();\n }\n }}\n onScroll={(event) => {\n if (preview) {\n preview.scrollTop = event.currentTarget.scrollTop;\n preview.scrollLeft = event.currentTarget.scrollLeft;\n }\n }}\n onCompositionStart={() => setComposing(true)}\n onCompositionEnd={() => setComposing(false)}\n onBlur={(event) => {\n const next = event.relatedTarget as HTMLElement | null;\n if (next && dropdown?.contains(next)) return;\n completionBehavior.reset();\n clearCompletion();\n }}\n disabled={props.disabled}\n required={props.required}\n spellcheck={props.spellcheck ?? true}\n maxLength={props.maxLength}\n {...fieldControlAria(meta, props)}\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n aria-controls={dropdownOpen() ? listboxId : undefined}\n aria-activedescendant={dropdownOpen() && state() ? optionId(state()!.selectedIndex) : undefined}\n />\n </div>\n <Show when={(props.showStats ?? true) && !props.disabled}>\n <div class=\"k2b-markdown-editor__stats\" aria-hidden=\"true\" data-empty={stats().chars === 0 ? \"true\" : undefined}>\n <span>{messages().editorLines({ count: stats().lines, value: formatCount(stats().lines) })}</span>\n <span>{messages().editorWords({ count: stats().words, value: formatCount(stats().words) })}</span>\n <span>{messages().editorCharacters({ count: stats().chars, value: formatCount(stats().chars) })}</span>\n </div>\n </Show>\n <Show when={state() || loading() || completionError()}>\n <div\n ref={dropdown}\n popover=\"manual\"\n class=\"k2b-autocomplete__options\"\n role=\"presentation\"\n aria-label={messages().completionSuggestions}\n >\n <div id={listboxId} class=\"k2b-autocomplete__listbox\" role=\"listbox\" aria-label={messages().suggestions}>\n <Show when={loading()}>\n <div class=\"k2b-autocomplete__status\" role=\"status\">\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n Loading suggestions\n </div>\n </Show>\n <Show when={completionError()}>\n {(message) => (\n <div class=\"k2b-autocomplete__status\" data-error=\"true\" role=\"alert\">\n <i class=\"ti ti-alert-circle\" aria-hidden=\"true\" />\n <span>{message()}</span>\n <button type=\"button\" onMouseDown={(event) => event.preventDefault()} onClick={retryCompletion}>\n {messages().retry}\n </button>\n </div>\n )}\n </Show>\n <For each={state()?.suggestions ?? []}>\n {(suggestion, index) => (\n // biome-ignore lint/a11y/useKeyWithClickEvents: the owning textarea handles keyboard activation through aria-activedescendant.\n <div\n id={optionId(index())}\n class=\"k2b-autocomplete__option\"\n role=\"option\"\n aria-selected={index() === state()?.selectedIndex}\n onMouseEnter={() => {\n const current = state();\n if (current) {\n setState({ ...current, selectedIndex: index() });\n }\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n activateSuggestion(index());\n textarea?.focus();\n }}\n >\n <span>{displayLabel(suggestion, state()!.context.completion)}</span>\n <Show when={suggestion.hint}>{(hint) => <small>{hint()}</small>}</Show>\n </div>\n )}\n </For>\n </div>\n </div>\n </Show>\n </div>\n </Field>\n );\n}\n\nexport type { Completion, SuggestContext, Suggestion } from \"../completion\";\nexport { abbreviations } from \"../completion\";\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["inputs/markdown/MarkdownEditor.tsx"],"sourcesContent":["import { highlight } from \"@k2b/stdlib\";\nimport { createEffect, createMemo, createSignal, createUniqueId, For, type JSX, onCleanup, onMount, Show, untrack } from \"solid-js\";\nimport { Tooltip } from \"../../feedback/Tooltip\";\nimport { createFieldMeta, Field, fieldControlAria } from \"../../internal/field\";\nimport { useLocale } from \"../../intl/locale\";\nimport { useUiMessages } from \"../../intl/messages\";\nimport {\n abbreviations as abbreviationsCompletion,\n buildSuggestContext,\n type Completion,\n collectKnownLabels,\n createCompletionBehaviorState,\n detectQuery,\n displayLabel,\n type QueryContext,\n renderWithOverlay,\n resolveSuggestions,\n type Suggestion,\n} from \"../completion\";\nimport { useCompletionMessages } from \"../completion-messages\";\nimport type { ValueFieldProps } from \"../field-contract\";\nimport { resolveMaybeAccessor } from \"../field-contract\";\nimport { computeActiveFormats } from \"./active-formats\";\nimport { handleListContinuation, handleShortcut, handleSmartPaste } from \"./behaviors\";\nimport { isInCodeZone } from \"./code-zone\";\nimport { useMarkdownEditorMessages } from \"./editor-messages\";\nimport Toolbar from \"./Toolbar\";\n\nexport type MarkdownEditorProps = ValueFieldProps<string> & {\n onSubmit?: () => void;\n placeholder?: string;\n lines?: number;\n noToolbar?: boolean;\n spellcheck?: boolean;\n name?: string;\n maxLength?: number;\n textareaRef?: (element: HTMLTextAreaElement) => void;\n abbreviations?: Record<string, string>;\n completions?: readonly Completion[];\n showStats?: boolean;\n variant?: \"default\" | \"paper\" | \"embedded\";\n fill?: boolean;\n /** Groups save and close at the end of the toolbar. The caller owns navigation and unsaved-change confirmation. */\n onClose?: () => void;\n onSave?: () => void;\n saveDisabled?: boolean;\n saving?: boolean;\n /** Shows a successful-save check. The caller clears it after a brief delay or the next edit. */\n saved?: boolean;\n toolbarTrailing?: JSX.Element;\n};\n\ntype CompletionState = {\n context: QueryContext;\n suggestions: readonly Suggestion[];\n selectedIndex: number;\n};\n\nexport function MarkdownEditor(props: MarkdownEditorProps): JSX.Element {\n const messages = useUiMessages();\n const markdownEditorMessages = useMarkdownEditorMessages();\n const completionMessages = useCompletionMessages();\n const locale = useLocale();\n const formatCount = (value: number) => new Intl.NumberFormat(locale()).format(value);\n const meta = createFieldMeta(props.id);\n let textarea: HTMLTextAreaElement | undefined;\n let preview: HTMLDivElement | undefined;\n let dropdown: HTMLDivElement | undefined;\n let completionAbort: AbortController | null = null;\n let completionTimer: ReturnType<typeof setTimeout> | null = null;\n let overlayFrame: number | undefined;\n let overlayInitialized = false;\n let renderPendingOverlay: (() => void) | undefined;\n const completionBehavior = createCompletionBehaviorState();\n\n const [textareaSignal, setTextareaSignal] = createSignal<HTMLTextAreaElement | null>(null);\n const [activeFormats, setActiveFormats] = createSignal<Set<string>>(new Set());\n const [composing, setComposing] = createSignal(false);\n const [localValue, setLocalValue] = createSignal(resolveMaybeAccessor(props.value) ?? \"\");\n const error = () => resolveMaybeAccessor(props.error);\n const [state, setState] = createSignal<CompletionState | null>(null);\n const [loading, setLoading] = createSignal(false);\n const [completionError, setCompletionError] = createSignal<string | null>(null);\n const [dropdownOpen, setDropdownOpen] = createSignal(false);\n const completionId = createUniqueId();\n const listboxId = `${meta.controlId}-${completionId}-suggestions`;\n const optionId = (index: number): string => `${listboxId}-${index}`;\n const activeSuggestion = (): Suggestion | null => {\n const current = state();\n return current?.suggestions[current.selectedIndex] ?? null;\n };\n\n const mergedCompletions = createMemo<readonly Completion[] | undefined>(() => {\n const merged: Completion[] = [];\n if (props.abbreviations && Object.keys(props.abbreviations).length > 0) {\n merged.push(abbreviationsCompletion(props.abbreviations));\n }\n if (props.completions) merged.push(...props.completions);\n return merged.length > 0 ? merged : undefined;\n });\n const knownLabels = createMemo(() => collectKnownLabels(mergedCompletions()));\n\n createEffect(() => {\n const incoming = resolveMaybeAccessor(props.value);\n if (incoming !== undefined && incoming !== null && incoming !== untrack(localValue)) {\n setLocalValue(incoming);\n }\n });\n\n createEffect(() => {\n const target = localValue();\n if (!composing() && textarea && textarea.value !== target) {\n textarea.value = target;\n }\n });\n\n createEffect(() => {\n if (!preview) return;\n const value = localValue();\n const labels = knownLabels();\n const current = state();\n const active = activeSuggestion();\n const ghost =\n current && active\n ? {\n at: current.context.end,\n text: active.text.slice(current.context.text.length),\n }\n : undefined;\n const anchor = current && !ghost ? { at: current.context.end } : undefined;\n renderPendingOverlay = () => {\n if (!preview) return;\n preview.innerHTML = renderWithOverlay(value, (text) => highlight.markdown(text, { knownLabels: labels }), { ghost, anchor });\n if (textarea) {\n preview.scrollTop = textarea.scrollTop;\n preview.scrollLeft = textarea.scrollLeft;\n }\n if (dropdown?.matches(\":popover-open\")) positionDropdown();\n };\n if (!overlayInitialized) {\n overlayInitialized = true;\n renderPendingOverlay();\n renderPendingOverlay = undefined;\n return;\n }\n if (overlayFrame !== undefined) return;\n overlayFrame = requestAnimationFrame(() => {\n overlayFrame = undefined;\n const render = renderPendingOverlay;\n renderPendingOverlay = undefined;\n render?.();\n });\n });\n\n const updateActiveFormats = (): void => {\n if (textarea) setActiveFormats(computeActiveFormats(textarea));\n };\n\n const closeDropdown = (): void => {\n if (dropdown?.matches(\":popover-open\")) dropdown.hidePopover();\n setDropdownOpen(false);\n };\n\n const clearCompletion = (): void => {\n completionAbort?.abort();\n completionAbort = null;\n if (completionTimer) clearTimeout(completionTimer);\n completionTimer = null;\n setState(null);\n setLoading(false);\n setCompletionError(null);\n closeDropdown();\n };\n\n const positionDropdown = (): void => {\n if (!dropdown?.isConnected || !preview?.isConnected || !textarea?.isConnected) {\n return;\n }\n const anchor = preview.querySelector<HTMLElement>(\"[data-completion-anchor]\");\n const rect = anchor?.getBoundingClientRect() ?? textarea.getBoundingClientRect();\n const maxHeight = 260;\n const spaceBelow = window.innerHeight - rect.bottom;\n const openAbove = spaceBelow < maxHeight && rect.top > spaceBelow;\n if (openAbove) {\n dropdown.style.setProperty(\"top\", \"auto\", \"important\");\n dropdown.style.setProperty(\"bottom\", `${window.innerHeight - rect.top + 4}px`, \"important\");\n } else {\n dropdown.style.setProperty(\"top\", `${rect.bottom + 4}px`, \"important\");\n dropdown.style.setProperty(\"bottom\", \"auto\", \"important\");\n }\n if (!dropdown.matches(\":popover-open\")) dropdown.showPopover();\n // The list sizes to its suggestions in CSS; measured once shown, it is\n // clamped into the viewport before the next paint.\n const width = dropdown.getBoundingClientRect().width;\n const left = Math.min(rect.left, window.innerWidth - width - 8);\n dropdown.style.setProperty(\"left\", `${Math.max(8, left)}px`, \"important\");\n };\n\n const isAbortError = (error: unknown): boolean =>\n error instanceof DOMException\n ? error.name === \"AbortError\"\n : Boolean(error && typeof error === \"object\" && \"name\" in error && (error as { name: string }).name === \"AbortError\");\n\n const applySuggestionList = (context: QueryContext, suggestions: readonly Suggestion[]): void => {\n const value = localValue();\n const normalized = context.text.toLowerCase();\n const usable = suggestions.filter((suggestion) => {\n if (suggestion.textEdit) {\n const { start, end, text } = suggestion.textEdit;\n return (\n Number.isInteger(start) &&\n Number.isInteger(end) &&\n start >= 0 &&\n end >= start &&\n end <= value.length &&\n value.slice(start, end) !== text\n );\n }\n return suggestion.text.toLowerCase().startsWith(normalized) && suggestion.text.length > context.text.length;\n });\n if (usable.length === 0) {\n setState(null);\n closeDropdown();\n return;\n }\n const previous = activeSuggestion()?.text;\n const retained = previous ? usable.findIndex((suggestion) => suggestion.text === previous) : -1;\n setState({\n context,\n suggestions: usable,\n selectedIndex: retained >= 0 ? retained : 0,\n });\n if (context.completion.dropdown) {\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n } else {\n closeDropdown();\n }\n };\n\n const runAsyncCompletion = async (context: QueryContext, promise: Promise<readonly Suggestion[]>, signal: AbortSignal): Promise<void> => {\n try {\n const suggestions = await promise;\n if (signal.aborted) return;\n setLoading(false);\n applySuggestionList(context, suggestions);\n } catch (error) {\n if (signal.aborted || isAbortError(error)) return;\n setLoading(false);\n setState(null);\n setCompletionError(error instanceof Error ? error.message : \"Suggestions could not be loaded\");\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n }\n };\n\n const startCompletionResolution = (context: QueryContext, signal: AbortSignal): void => {\n if (signal.aborted || !textarea) return;\n setLoading(true);\n setCompletionError(null);\n setDropdownOpen(true);\n queueMicrotask(positionDropdown);\n try {\n const result = resolveSuggestions(context.completion, context.query, buildSuggestContext(textarea, context), signal);\n if (result.kind === \"sync\") {\n setLoading(false);\n applySuggestionList(context, result.data);\n } else {\n void runAsyncCompletion(context, result.promise, signal);\n }\n } catch (error) {\n if (signal.aborted || isAbortError(error)) return;\n setLoading(false);\n setState(null);\n setCompletionError(error instanceof Error ? error.message : \"Suggestions could not be loaded\");\n queueMicrotask(positionDropdown);\n }\n };\n\n const recomputeCompletion = (): void => {\n if (!textarea) return;\n const context = detectQuery(textarea, mergedCompletions(), {\n isExcluded: isInCodeZone,\n });\n if (!context) {\n clearCompletion();\n return;\n }\n completionAbort?.abort();\n if (completionTimer) clearTimeout(completionTimer);\n completionTimer = null;\n completionAbort = new AbortController();\n const current = state();\n if (\n current &&\n (current.context.start !== context.start ||\n current.context.end !== context.end ||\n current.context.text !== context.text ||\n current.context.completion !== context.completion)\n ) {\n setState(null);\n closeDropdown();\n }\n setCompletionError(null);\n const delay = Math.max(0, context.completion.debounceMs ?? 0);\n if (delay === 0) {\n startCompletionResolution(context, completionAbort.signal);\n } else {\n setLoading(false);\n if (!state()) closeDropdown();\n const signal = completionAbort.signal;\n completionTimer = setTimeout(() => {\n completionTimer = null;\n startCompletionResolution(context, signal);\n }, delay);\n }\n };\n\n const retryCompletion = (): void => {\n if (!textarea) return;\n const context = detectQuery(textarea, mergedCompletions(), {\n isExcluded: isInCodeZone,\n });\n if (!context) return clearCompletion();\n completionAbort?.abort();\n if (completionTimer) clearTimeout(completionTimer);\n completionTimer = null;\n completionAbort = new AbortController();\n startCompletionResolution(context, completionAbort.signal);\n };\n\n const activateSuggestion = (index = state()?.selectedIndex ?? -1): boolean => {\n const current = state();\n const active = current?.suggestions[index];\n if (!textarea || !current || !active) return false;\n if (!active.textEdit && active.text === current.context.text) {\n closeDropdown();\n setState(null);\n return false;\n }\n const applied = completionBehavior.applySuggestion(textarea, current.context, active);\n closeDropdown();\n setState(null);\n return applied;\n };\n\n const moveSelection = (direction: 1 | -1): void => {\n const current = state();\n if (!current || current.suggestions.length === 0) return;\n setState({\n ...current,\n selectedIndex: (current.selectedIndex + direction + current.suggestions.length) % current.suggestions.length,\n });\n };\n\n const stats = createMemo(() => {\n const value = localValue();\n return {\n lines: value.length === 0 ? 0 : value.split(\"\\n\").length,\n words: value.match(/\\S+/g)?.length ?? 0,\n chars: value.length,\n };\n });\n\n onMount(() => {\n if (textarea) setTextareaSignal(textarea);\n updateActiveFormats();\n const selectionChange = (): void => {\n if (document.activeElement === textarea) {\n updateActiveFormats();\n recomputeCompletion();\n }\n };\n // Reposition an OPEN popover only. Calling `positionDropdown` blindly\n // would `showPopover()` a dropdown that is deliberately closed (a\n // ghost-only completion keeps state without a dropdown).\n const reposition = (): void => {\n if (dropdown?.matches(\":popover-open\")) positionDropdown();\n };\n document.addEventListener(\"selectionchange\", selectionChange);\n window.addEventListener(\"resize\", reposition);\n onCleanup(() => {\n document.removeEventListener(\"selectionchange\", selectionChange);\n window.removeEventListener(\"resize\", reposition);\n if (dropdown?.matches(\":popover-open\")) dropdown.hidePopover();\n completionAbort?.abort();\n if (completionTimer) clearTimeout(completionTimer);\n if (overlayFrame !== undefined) cancelAnimationFrame(overlayFrame);\n overlayFrame = undefined;\n renderPendingOverlay = undefined;\n completionBehavior.reset();\n });\n });\n\n const onInput = (event: InputEvent & { currentTarget: HTMLTextAreaElement }): void => {\n if (\n completionBehavior.tryExpand(event.currentTarget, mergedCompletions(), {\n isExcluded: isInCodeZone,\n })\n ) {\n return;\n }\n setLocalValue(event.currentTarget.value);\n props.onValueChange?.(event.currentTarget.value);\n updateActiveFormats();\n recomputeCompletion();\n };\n\n const onKeyDown = (event: KeyboardEvent): void => {\n if (!textarea || event.isComposing) return;\n if (\n event.key === \"Backspace\" &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.altKey &&\n !event.shiftKey &&\n completionBehavior.tryRestore(textarea)\n ) {\n event.preventDefault();\n return;\n }\n const current = state();\n const dropdownCompletion = current?.context.completion.dropdown === true;\n if (current && dropdownCompletion && (event.key === \"ArrowDown\" || event.key === \"ArrowUp\")) {\n event.preventDefault();\n moveSelection(event.key === \"ArrowDown\" ? 1 : -1);\n return;\n }\n if (\n event.key === \"Enter\" &&\n !event.shiftKey &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.altKey &&\n current &&\n dropdownCompletion &&\n dropdownOpen()\n ) {\n event.preventDefault();\n activateSuggestion();\n return;\n }\n if (event.key === \"Tab\" && !event.shiftKey && !event.metaKey && !event.ctrlKey && !event.altKey && current) {\n event.preventDefault();\n activateSuggestion();\n return;\n }\n if (event.key === \"Escape\") {\n if (current) {\n event.preventDefault();\n closeDropdown();\n setState(null);\n return;\n }\n if ((mergedCompletions()?.length ?? 0) > 0) {\n event.preventDefault();\n textarea.blur();\n return;\n }\n }\n if (event.key === \"Enter\" && (event.metaKey || event.ctrlKey) && props.onSubmit) {\n event.preventDefault();\n props.onSubmit();\n return;\n }\n if (handleShortcut(event, textarea)) {\n event.preventDefault();\n return;\n }\n if (event.key === \"Enter\" && !event.shiftKey && !event.metaKey && !event.ctrlKey && !event.altKey && handleListContinuation(textarea)) {\n event.preventDefault();\n }\n };\n\n const saveControls = (): JSX.Element => (\n <>\n <Show when={props.onSave}>\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-markdown-editor__tool\"\n content={markdownEditorMessages().saveShortcut}\n aria-label={messages().save}\n tabIndex={-1}\n disabled={props.disabled || props.saveDisabled || props.saving}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => props.onSave?.()}\n >\n <i class={props.saving ? \"ti ti-loader-2 k2b-spin\" : props.saved ? \"ti ti-check\" : \"ti ti-device-floppy\"} aria-hidden=\"true\" />\n </Tooltip.Trigger>\n </Show>\n </>\n );\n\n return (\n <Field\n class={props.class}\n label={props.label}\n description={props.description}\n error={props.error}\n fill={props.fill}\n meta={meta}\n required={props.required}\n disabled={props.disabled}\n >\n <div\n class=\"k2b-markdown-editor\"\n role=\"group\"\n aria-labelledby={props.label ? meta.labelId : undefined}\n aria-label={!props.label ? props[\"aria-label\"] : undefined}\n data-disabled={props.disabled ? \"true\" : undefined}\n data-invalid={error() ? \"true\" : undefined}\n data-variant={props.variant === \"default\" ? undefined : props.variant}\n data-fill={props.fill ? \"true\" : undefined}\n style={{\n \"--k2b-editor-lines\": String(props.lines ?? 6),\n }}\n onKeyDown={(event) => {\n if (props.onSave && (event.metaKey || event.ctrlKey) && event.key.toLowerCase() === \"s\") {\n event.preventDefault();\n if (!props.disabled && !props.saveDisabled && !props.saving) props.onSave();\n }\n }}\n >\n <Show when={!props.noToolbar}>\n <Toolbar\n textarea={textareaSignal}\n activeFormats={activeFormats}\n disabled={props.disabled}\n trailing={\n <>\n {props.toolbarTrailing}\n {saveControls()}\n <Show when={props.onClose}>\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-markdown-editor__tool\"\n content={messages().close}\n aria-label={messages().close}\n tabIndex={props.disabled ? 0 : -1}\n onClick={() => props.onClose?.()}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </Tooltip.Trigger>\n </Show>\n </>\n }\n />\n </Show>\n <div class=\"k2b-markdown-editor__surface\">\n <Show when={!localValue() && props.placeholder}>\n <div class=\"k2b-markdown-editor__placeholder\" aria-hidden=\"true\">\n {props.placeholder}\n </div>\n </Show>\n <div ref={preview} class=\"k2b-markdown-editor__preview\" aria-hidden=\"true\" />\n <textarea\n ref={(element) => {\n textarea = element;\n props.textareaRef?.(element);\n }}\n id={meta.controlId}\n name={props.name}\n class=\"k2b-markdown-editor__input\"\n onInput={onInput}\n onChange={(event) => props.onValueCommit?.(event.currentTarget.value)}\n onKeyDown={onKeyDown}\n onPaste={(event) => {\n if (textarea && handleSmartPaste(event, textarea)) {\n event.preventDefault();\n }\n }}\n onScroll={(event) => {\n if (preview) {\n preview.scrollTop = event.currentTarget.scrollTop;\n preview.scrollLeft = event.currentTarget.scrollLeft;\n }\n }}\n onCompositionStart={() => setComposing(true)}\n onCompositionEnd={() => setComposing(false)}\n onBlur={(event) => {\n const next = event.relatedTarget as HTMLElement | null;\n if (next && dropdown?.contains(next)) return;\n completionBehavior.reset();\n clearCompletion();\n }}\n disabled={props.disabled}\n required={props.required}\n spellcheck={props.spellcheck ?? true}\n maxLength={props.maxLength}\n {...fieldControlAria(meta, props)}\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n aria-controls={dropdownOpen() ? listboxId : undefined}\n aria-activedescendant={dropdownOpen() && state() ? optionId(state()!.selectedIndex) : undefined}\n />\n </div>\n <Show when={(props.showStats ?? true) && !props.disabled}>\n <div class=\"k2b-markdown-editor__stats\" aria-hidden=\"true\" data-empty={stats().chars === 0 ? \"true\" : undefined}>\n <span>{markdownEditorMessages().editorLines({ count: stats().lines, value: formatCount(stats().lines) })}</span>\n <span>{markdownEditorMessages().editorWords({ count: stats().words, value: formatCount(stats().words) })}</span>\n <span>{markdownEditorMessages().editorCharacters({ count: stats().chars, value: formatCount(stats().chars) })}</span>\n </div>\n </Show>\n <Show when={state() || loading() || completionError()}>\n <div\n ref={dropdown}\n popover=\"manual\"\n class=\"k2b-autocomplete__options\"\n role=\"presentation\"\n aria-label={completionMessages().completionSuggestions}\n >\n <div id={listboxId} class=\"k2b-autocomplete__listbox\" role=\"listbox\" aria-label={completionMessages().suggestions}>\n <Show when={loading()}>\n <div class=\"k2b-autocomplete__status\" role=\"status\">\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n Loading suggestions\n </div>\n </Show>\n <Show when={completionError()}>\n {(message) => (\n <div class=\"k2b-autocomplete__status\" data-error=\"true\" role=\"alert\">\n <i class=\"ti ti-alert-circle\" aria-hidden=\"true\" />\n <span>{message()}</span>\n <button type=\"button\" onMouseDown={(event) => event.preventDefault()} onClick={retryCompletion}>\n {messages().retry}\n </button>\n </div>\n )}\n </Show>\n <For each={state()?.suggestions ?? []}>\n {(suggestion, index) => (\n // biome-ignore lint/a11y/useKeyWithClickEvents: the owning textarea handles keyboard activation through aria-activedescendant.\n <div\n id={optionId(index())}\n class=\"k2b-autocomplete__option\"\n role=\"option\"\n aria-selected={index() === state()?.selectedIndex}\n onMouseEnter={() => {\n const current = state();\n if (current) {\n setState({ ...current, selectedIndex: index() });\n }\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n }}\n onClick={() => {\n activateSuggestion(index());\n textarea?.focus();\n }}\n >\n <span>{displayLabel(suggestion, state()!.context.completion)}</span>\n <Show when={suggestion.hint}>{(hint) => <small>{hint()}</small>}</Show>\n </div>\n )}\n </For>\n </div>\n </div>\n </Show>\n </div>\n </Field>\n );\n}\n\nexport type { Completion, SuggestContext, Suggestion } from \"../completion\";\nexport { abbreviations } from \"../completion\";\n"],"mappings":"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","ignoreList":[]}
@@ -16,8 +16,8 @@ var _tmpl$ = /*#__PURE__*/_$template(`<span class=k2b-markdown-editor__trailing>
16
16
  _tmpl$4 = /*#__PURE__*/_$template(`<i aria-hidden=true>`);
17
17
  import { For, Show } from "solid-js";
18
18
  import { Tooltip } from "../../feedback/Tooltip";
19
- import { useUiMessages } from "../../intl/messages";
20
19
  import { insertLink, toggleBold, toggleBulletList, toggleCode, toggleHeading, toggleItalic, toggleNumberedList, toggleQuote } from "./actions";
20
+ import { useMarkdownToolbarMessages } from "./toolbar-messages";
21
21
  const TOOLS = [{
22
22
  kind: "button",
23
23
  id: "bold",
@@ -84,18 +84,18 @@ const TOOLS = [{
84
84
  run: toggleQuote
85
85
  }];
86
86
  export default function Toolbar(props) {
87
- const messages = useUiMessages();
87
+ const markdownToolbarMessages = useMarkdownToolbarMessages();
88
88
  const title = (id, fallback) => ({
89
- bold: messages().boldShortcut,
90
- italic: messages().italicShortcut,
91
- code: messages().inlineCodeShortcut,
92
- link: messages().linkShortcut,
93
- h1: messages().heading1Shortcut,
94
- h2: messages().heading2Shortcut,
95
- h3: messages().heading3Shortcut,
96
- bullet: messages().bulletListShortcut,
97
- ordered: messages().numberedListShortcut,
98
- quote: messages().quote
89
+ bold: markdownToolbarMessages().boldShortcut,
90
+ italic: markdownToolbarMessages().italicShortcut,
91
+ code: markdownToolbarMessages().inlineCodeShortcut,
92
+ link: markdownToolbarMessages().linkShortcut,
93
+ h1: markdownToolbarMessages().heading1Shortcut,
94
+ h2: markdownToolbarMessages().heading2Shortcut,
95
+ h3: markdownToolbarMessages().heading3Shortcut,
96
+ bullet: markdownToolbarMessages().bulletListShortcut,
97
+ ordered: markdownToolbarMessages().numberedListShortcut,
98
+ quote: markdownToolbarMessages().quote
99
99
  })[id] ?? fallback;
100
100
  let toolbar;
101
101
  const moveFocus = event => {
@@ -160,7 +160,7 @@ export default function Toolbar(props) {
160
160
  return _el$2;
161
161
  }
162
162
  }), _el$6, _co$2);
163
- _$effect(() => _$setAttribute(_el$, "aria-label", messages().markdownFormatting));
163
+ _$effect(() => _$setAttribute(_el$, "aria-label", markdownToolbarMessages().markdownFormatting));
164
164
  _$runHydrationEvents();
165
165
  return _el$;
166
166
  })();
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["inputs/markdown/Toolbar.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\nimport { Tooltip } from \"../../feedback/Tooltip\";\nimport { useUiMessages } from \"../../intl/messages\";\nimport {\n insertLink,\n toggleBold,\n toggleBulletList,\n toggleCode,\n toggleHeading,\n toggleItalic,\n toggleNumberedList,\n toggleQuote,\n} from \"./actions\";\n\ntype ToolbarProps = {\n textarea: () => HTMLTextAreaElement | null;\n activeFormats?: () => Set<string>;\n disabled?: boolean;\n trailing?: JSX.Element;\n};\n\ntype Tool =\n | {\n kind: \"button\";\n id: string;\n icon: string;\n title: string;\n run: (textarea: HTMLTextAreaElement) => void;\n }\n | { kind: \"separator\" };\n\nconst TOOLS: readonly Tool[] = [\n { kind: \"button\", id: \"bold\", icon: \"ti ti-bold\", title: \"Bold (Ctrl/Cmd+B)\", run: toggleBold },\n { kind: \"button\", id: \"italic\", icon: \"ti ti-italic\", title: \"Italic (Ctrl/Cmd+I)\", run: toggleItalic },\n { kind: \"button\", id: \"code\", icon: \"ti ti-code\", title: \"Inline code (Ctrl/Cmd+E)\", run: toggleCode },\n { kind: \"button\", id: \"link\", icon: \"ti ti-link\", title: \"Link (Ctrl/Cmd+K)\", run: insertLink },\n { kind: \"separator\" },\n { kind: \"button\", id: \"h1\", icon: \"ti ti-h-1\", title: \"Heading 1 (Ctrl/Cmd+Shift+1)\", run: (textarea) => toggleHeading(textarea, 1) },\n { kind: \"button\", id: \"h2\", icon: \"ti ti-h-2\", title: \"Heading 2 (Ctrl/Cmd+Shift+2)\", run: (textarea) => toggleHeading(textarea, 2) },\n { kind: \"button\", id: \"h3\", icon: \"ti ti-h-3\", title: \"Heading 3 (Ctrl/Cmd+Shift+3)\", run: (textarea) => toggleHeading(textarea, 3) },\n { kind: \"separator\" },\n { kind: \"button\", id: \"bullet\", icon: \"ti ti-list\", title: \"Bullet list (Ctrl/Cmd+Shift+8)\", run: toggleBulletList },\n { kind: \"button\", id: \"ordered\", icon: \"ti ti-list-numbers\", title: \"Numbered list (Ctrl/Cmd+Shift+7)\", run: toggleNumberedList },\n { kind: \"button\", id: \"quote\", icon: \"ti ti-quote\", title: \"Quote\", run: toggleQuote },\n];\n\nexport default function Toolbar(props: ToolbarProps): JSX.Element {\n const messages = useUiMessages();\n const title = (id: string, fallback: string): string =>\n ({\n bold: messages().boldShortcut,\n italic: messages().italicShortcut,\n code: messages().inlineCodeShortcut,\n link: messages().linkShortcut,\n h1: messages().heading1Shortcut,\n h2: messages().heading2Shortcut,\n h3: messages().heading3Shortcut,\n bullet: messages().bulletListShortcut,\n ordered: messages().numberedListShortcut,\n quote: messages().quote,\n })[id] ?? fallback;\n let toolbar!: HTMLDivElement;\n const moveFocus = (event: KeyboardEvent): void => {\n if (![\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"].includes(event.key)) return;\n const buttons = Array.from(toolbar.querySelectorAll<HTMLButtonElement>(\".k2b-markdown-editor__tool:not(:disabled)\"));\n if (buttons.length === 0) return;\n const current = Math.max(\n 0,\n buttons.findIndex((button) => button === document.activeElement),\n );\n const next =\n event.key === \"Home\"\n ? 0\n : event.key === \"End\"\n ? buttons.length - 1\n : event.key === \"ArrowLeft\"\n ? (current - 1 + buttons.length) % buttons.length\n : (current + 1) % buttons.length;\n event.preventDefault();\n for (const button of buttons) button.tabIndex = -1;\n buttons[next]!.tabIndex = 0;\n buttons[next]!.focus();\n };\n\n return (\n <div ref={toolbar} class=\"k2b-markdown-editor__toolbar\" role=\"toolbar\" aria-label={messages().markdownFormatting} onKeyDown={moveFocus}>\n <For each={TOOLS}>\n {(tool, index) =>\n tool.kind === \"separator\" ? (\n <span class=\"k2b-markdown-editor__separator\" aria-hidden=\"true\" />\n ) : (\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-markdown-editor__tool\"\n content={title(tool.id, tool.title)}\n aria-label={title(tool.id, tool.title)}\n aria-pressed={props.activeFormats?.().has(tool.id) ? \"true\" : undefined}\n disabled={props.disabled}\n tabIndex={index() === 0 ? 0 : -1}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n const textarea = props.textarea();\n if (textarea) tool.run(textarea);\n }}\n >\n <i class={tool.icon} aria-hidden=\"true\" />\n </Tooltip.Trigger>\n )\n }\n </For>\n <Show when={props.trailing}>\n <span class=\"k2b-markdown-editor__trailing\">{props.trailing}</span>\n </Show>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["inputs/markdown/Toolbar.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\nimport { Tooltip } from \"../../feedback/Tooltip\";\nimport {\n insertLink,\n toggleBold,\n toggleBulletList,\n toggleCode,\n toggleHeading,\n toggleItalic,\n toggleNumberedList,\n toggleQuote,\n} from \"./actions\";\nimport { useMarkdownToolbarMessages } from \"./toolbar-messages\";\n\ntype ToolbarProps = {\n textarea: () => HTMLTextAreaElement | null;\n activeFormats?: () => Set<string>;\n disabled?: boolean;\n trailing?: JSX.Element;\n};\n\ntype Tool =\n | {\n kind: \"button\";\n id: string;\n icon: string;\n title: string;\n run: (textarea: HTMLTextAreaElement) => void;\n }\n | { kind: \"separator\" };\n\nconst TOOLS: readonly Tool[] = [\n { kind: \"button\", id: \"bold\", icon: \"ti ti-bold\", title: \"Bold (Ctrl/Cmd+B)\", run: toggleBold },\n { kind: \"button\", id: \"italic\", icon: \"ti ti-italic\", title: \"Italic (Ctrl/Cmd+I)\", run: toggleItalic },\n { kind: \"button\", id: \"code\", icon: \"ti ti-code\", title: \"Inline code (Ctrl/Cmd+E)\", run: toggleCode },\n { kind: \"button\", id: \"link\", icon: \"ti ti-link\", title: \"Link (Ctrl/Cmd+K)\", run: insertLink },\n { kind: \"separator\" },\n { kind: \"button\", id: \"h1\", icon: \"ti ti-h-1\", title: \"Heading 1 (Ctrl/Cmd+Shift+1)\", run: (textarea) => toggleHeading(textarea, 1) },\n { kind: \"button\", id: \"h2\", icon: \"ti ti-h-2\", title: \"Heading 2 (Ctrl/Cmd+Shift+2)\", run: (textarea) => toggleHeading(textarea, 2) },\n { kind: \"button\", id: \"h3\", icon: \"ti ti-h-3\", title: \"Heading 3 (Ctrl/Cmd+Shift+3)\", run: (textarea) => toggleHeading(textarea, 3) },\n { kind: \"separator\" },\n { kind: \"button\", id: \"bullet\", icon: \"ti ti-list\", title: \"Bullet list (Ctrl/Cmd+Shift+8)\", run: toggleBulletList },\n { kind: \"button\", id: \"ordered\", icon: \"ti ti-list-numbers\", title: \"Numbered list (Ctrl/Cmd+Shift+7)\", run: toggleNumberedList },\n { kind: \"button\", id: \"quote\", icon: \"ti ti-quote\", title: \"Quote\", run: toggleQuote },\n];\n\nexport default function Toolbar(props: ToolbarProps): JSX.Element {\n const markdownToolbarMessages = useMarkdownToolbarMessages();\n const title = (id: string, fallback: string): string =>\n ({\n bold: markdownToolbarMessages().boldShortcut,\n italic: markdownToolbarMessages().italicShortcut,\n code: markdownToolbarMessages().inlineCodeShortcut,\n link: markdownToolbarMessages().linkShortcut,\n h1: markdownToolbarMessages().heading1Shortcut,\n h2: markdownToolbarMessages().heading2Shortcut,\n h3: markdownToolbarMessages().heading3Shortcut,\n bullet: markdownToolbarMessages().bulletListShortcut,\n ordered: markdownToolbarMessages().numberedListShortcut,\n quote: markdownToolbarMessages().quote,\n })[id] ?? fallback;\n let toolbar!: HTMLDivElement;\n const moveFocus = (event: KeyboardEvent): void => {\n if (![\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"].includes(event.key)) return;\n const buttons = Array.from(toolbar.querySelectorAll<HTMLButtonElement>(\".k2b-markdown-editor__tool:not(:disabled)\"));\n if (buttons.length === 0) return;\n const current = Math.max(\n 0,\n buttons.findIndex((button) => button === document.activeElement),\n );\n const next =\n event.key === \"Home\"\n ? 0\n : event.key === \"End\"\n ? buttons.length - 1\n : event.key === \"ArrowLeft\"\n ? (current - 1 + buttons.length) % buttons.length\n : (current + 1) % buttons.length;\n event.preventDefault();\n for (const button of buttons) button.tabIndex = -1;\n buttons[next]!.tabIndex = 0;\n buttons[next]!.focus();\n };\n\n return (\n <div\n ref={toolbar}\n class=\"k2b-markdown-editor__toolbar\"\n role=\"toolbar\"\n aria-label={markdownToolbarMessages().markdownFormatting}\n onKeyDown={moveFocus}\n >\n <For each={TOOLS}>\n {(tool, index) =>\n tool.kind === \"separator\" ? (\n <span class=\"k2b-markdown-editor__separator\" aria-hidden=\"true\" />\n ) : (\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-markdown-editor__tool\"\n content={title(tool.id, tool.title)}\n aria-label={title(tool.id, tool.title)}\n aria-pressed={props.activeFormats?.().has(tool.id) ? \"true\" : undefined}\n disabled={props.disabled}\n tabIndex={index() === 0 ? 0 : -1}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n const textarea = props.textarea();\n if (textarea) tool.run(textarea);\n }}\n >\n <i class={tool.icon} aria-hidden=\"true\" />\n </Tooltip.Trigger>\n )\n }\n </For>\n <Show when={props.trailing}>\n <span class=\"k2b-markdown-editor__trailing\">{props.trailing}</span>\n </Show>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,43 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../../intl/locale";
3
+ const markdownEditorMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ saveShortcut: "Save (Ctrl/Cmd+S)",
8
+ editorLines: ({
9
+ count,
10
+ value
11
+ }) => `${value} ${count === 1 ? "line" : "lines"}`,
12
+ editorWords: ({
13
+ count,
14
+ value
15
+ }) => `${value} ${count === 1 ? "word" : "words"}`,
16
+ editorCharacters: ({
17
+ count,
18
+ value
19
+ }) => `${value} ${count === 1 ? "char" : "chars"}`
20
+ },
21
+ de: {
22
+ saveShortcut: "Speichern (Strg/Cmd+S)",
23
+ editorLines: ({
24
+ count,
25
+ value
26
+ }) => `${value} ${count === 1 ? "Zeile" : "Zeilen"}`,
27
+ editorWords: ({
28
+ count,
29
+ value
30
+ }) => `${value} ${count === 1 ? "Wort" : "Wörter"}`,
31
+ editorCharacters: ({
32
+ value
33
+ }) => `${value} Zeichen`
34
+ }
35
+ }
36
+ });
37
+ /** Resolved from the inherited render locale. */
38
+ export const useMarkdownEditorMessages = () => {
39
+ const locale = useLocale();
40
+ return () => markdownEditorMessages.resolve([locale()]).t;
41
+ };
42
+ export const checkMarkdownEditorMessages = () => markdownEditorMessages.check();
43
+ //# sourceMappingURL=editor-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["inputs/markdown/editor-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../../intl/locale\";\n\nconst markdownEditorMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n saveShortcut: \"Save (Ctrl/Cmd+S)\",\n editorLines: ({ count, value }: { count: number; value: string }) => `${value} ${count === 1 ? \"line\" : \"lines\"}`,\n editorWords: ({ count, value }: { count: number; value: string }) => `${value} ${count === 1 ? \"word\" : \"words\"}`,\n editorCharacters: ({ count, value }: { count: number; value: string }) => `${value} ${count === 1 ? \"char\" : \"chars\"}`,\n },\n de: {\n saveShortcut: \"Speichern (Strg/Cmd+S)\",\n editorLines: ({ count, value }) => `${value} ${count === 1 ? \"Zeile\" : \"Zeilen\"}`,\n editorWords: ({ count, value }) => `${value} ${count === 1 ? \"Wort\" : \"Wörter\"}`,\n editorCharacters: ({ value }) => `${value} Zeichen`,\n },\n },\n});\n\nexport type MarkdownEditorMessages = ReturnType<(typeof markdownEditorMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useMarkdownEditorMessages = (): (() => MarkdownEditorMessages) => {\n const locale = useLocale();\n return () => markdownEditorMessages.resolve([locale()]).t;\n};\n\nexport const checkMarkdownEditorMessages = () => markdownEditorMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,mBAAmB;AAE7C,MAAM,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC;EACzC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,YAAY,EAAE,mBAAmB;MACjC,WAAW,EAAE,CAAC;QAAE,KAAK;QAAE;MAAwC,CAAC,KAAK,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,OAAO,EAAE;MACjH,WAAW,EAAE,CAAC;QAAE,KAAK;QAAE;MAAwC,CAAC,KAAK,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,OAAO,EAAE;MACjH,gBAAgB,EAAE,CAAC;QAAE,KAAK;QAAE;MAAwC,CAAC,KAAK,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,OAAO;IACtH,CAAC;IACD,EAAE,EAAE;MACF,YAAY,EAAE,wBAAwB;MACtC,WAAW,EAAE,CAAC;QAAE,KAAK;QAAE;MAAM,CAAC,KAAK,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,OAAO,GAAG,QAAQ,EAAE;MACjF,WAAW,EAAE,CAAC;QAAE,KAAK;QAAE;MAAM,CAAC,KAAK,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,MAAM,GAAG,QAAQ,EAAE;MAChF,gBAAgB,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,GAAG,KAAK;IAC3C;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,40 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../../intl/locale";
3
+ const markdownToolbarMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ boldShortcut: "Bold (Ctrl/Cmd+B)",
8
+ bulletListShortcut: "Bullet list (Ctrl/Cmd+Shift+8)",
9
+ heading1Shortcut: "Heading 1 (Ctrl/Cmd+Shift+1)",
10
+ heading2Shortcut: "Heading 2 (Ctrl/Cmd+Shift+2)",
11
+ heading3Shortcut: "Heading 3 (Ctrl/Cmd+Shift+3)",
12
+ inlineCodeShortcut: "Inline code (Ctrl/Cmd+E)",
13
+ italicShortcut: "Italic (Ctrl/Cmd+I)",
14
+ linkShortcut: "Link (Ctrl/Cmd+K)",
15
+ markdownFormatting: "Markdown formatting",
16
+ numberedListShortcut: "Numbered list (Ctrl/Cmd+Shift+7)",
17
+ quote: "Quote"
18
+ },
19
+ de: {
20
+ boldShortcut: "Fett (Strg/Cmd+B)",
21
+ bulletListShortcut: "Aufzählung (Strg/Cmd+Umschalt+8)",
22
+ heading1Shortcut: "Überschrift 1 (Strg/Cmd+Umschalt+1)",
23
+ heading2Shortcut: "Überschrift 2 (Strg/Cmd+Umschalt+2)",
24
+ heading3Shortcut: "Überschrift 3 (Strg/Cmd+Umschalt+3)",
25
+ inlineCodeShortcut: "Inline-Code (Strg/Cmd+E)",
26
+ italicShortcut: "Kursiv (Strg/Cmd+I)",
27
+ linkShortcut: "Link (Strg/Cmd+K)",
28
+ markdownFormatting: "Markdown-Formatierung",
29
+ numberedListShortcut: "Nummerierte Liste (Strg/Cmd+Umschalt+7)",
30
+ quote: "Zitat"
31
+ }
32
+ }
33
+ });
34
+ /** Resolved from the inherited render locale. */
35
+ export const useMarkdownToolbarMessages = () => {
36
+ const locale = useLocale();
37
+ return () => markdownToolbarMessages.resolve([locale()]).t;
38
+ };
39
+ export const checkMarkdownToolbarMessages = () => markdownToolbarMessages.check();
40
+ //# sourceMappingURL=toolbar-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["inputs/markdown/toolbar-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../../intl/locale\";\n\nconst markdownToolbarMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n boldShortcut: \"Bold (Ctrl/Cmd+B)\",\n bulletListShortcut: \"Bullet list (Ctrl/Cmd+Shift+8)\",\n heading1Shortcut: \"Heading 1 (Ctrl/Cmd+Shift+1)\",\n heading2Shortcut: \"Heading 2 (Ctrl/Cmd+Shift+2)\",\n heading3Shortcut: \"Heading 3 (Ctrl/Cmd+Shift+3)\",\n inlineCodeShortcut: \"Inline code (Ctrl/Cmd+E)\",\n italicShortcut: \"Italic (Ctrl/Cmd+I)\",\n linkShortcut: \"Link (Ctrl/Cmd+K)\",\n markdownFormatting: \"Markdown formatting\",\n numberedListShortcut: \"Numbered list (Ctrl/Cmd+Shift+7)\",\n quote: \"Quote\",\n },\n de: {\n boldShortcut: \"Fett (Strg/Cmd+B)\",\n bulletListShortcut: \"Aufzählung (Strg/Cmd+Umschalt+8)\",\n heading1Shortcut: \"Überschrift 1 (Strg/Cmd+Umschalt+1)\",\n heading2Shortcut: \"Überschrift 2 (Strg/Cmd+Umschalt+2)\",\n heading3Shortcut: \"Überschrift 3 (Strg/Cmd+Umschalt+3)\",\n inlineCodeShortcut: \"Inline-Code (Strg/Cmd+E)\",\n italicShortcut: \"Kursiv (Strg/Cmd+I)\",\n linkShortcut: \"Link (Strg/Cmd+K)\",\n markdownFormatting: \"Markdown-Formatierung\",\n numberedListShortcut: \"Nummerierte Liste (Strg/Cmd+Umschalt+7)\",\n quote: \"Zitat\",\n },\n },\n});\n\nexport type MarkdownToolbarMessages = ReturnType<(typeof markdownToolbarMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useMarkdownToolbarMessages = (): (() => MarkdownToolbarMessages) => {\n const locale = useLocale();\n return () => markdownToolbarMessages.resolve([locale()]).t;\n};\n\nexport const checkMarkdownToolbarMessages = () => markdownToolbarMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,mBAAmB;AAE7C,MAAM,uBAAuB,GAAG,IAAI,CAAC,MAAM,CAAC;EAC1C,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,YAAY,EAAE,mBAAmB;MACjC,kBAAkB,EAAE,gCAAgC;MACpD,gBAAgB,EAAE,8BAA8B;MAChD,gBAAgB,EAAE,8BAA8B;MAChD,gBAAgB,EAAE,8BAA8B;MAChD,kBAAkB,EAAE,0BAA0B;MAC9C,cAAc,EAAE,qBAAqB;MACrC,YAAY,EAAE,mBAAmB;MACjC,kBAAkB,EAAE,qBAAqB;MACzC,oBAAoB,EAAE,kCAAkC;MACxD,KAAK,EAAE;IACT,CAAC;IACD,EAAE,EAAE;MACF,YAAY,EAAE,mBAAmB;MACjC,kBAAkB,EAAE,kCAAkC;MACtD,gBAAgB,EAAE,qCAAqC;MACvD,gBAAgB,EAAE,qCAAqC;MACvD,gBAAgB,EAAE,qCAAqC;MACvD,kBAAkB,EAAE,0BAA0B;MAC9C,cAAc,EAAE,qBAAqB;MACrC,YAAY,EAAE,mBAAmB;MACjC,kBAAkB,EAAE,uBAAuB;MAC3C,oBAAoB,EAAE,yCAAyC;MAC/D,KAAK,EAAE;IACT;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,0BAA0B,GAAG,MAAuC;EAC/E,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,OAAO,MAAM,4BAA4B,GAAG,MAAM,uBAAuB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,26 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const qrMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ qrCameraPreview: "Camera preview for scanning a QR code",
8
+ qrCameraStarting: "Starting camera…",
9
+ qrCameraInstructions: "Point the camera at a QR code.",
10
+ qrCameraPrivacy: "Camera images stay on this device."
11
+ },
12
+ de: {
13
+ qrCameraPreview: "Kameravorschau zum Scannen eines QR-Codes",
14
+ qrCameraStarting: "Kamera wird gestartet…",
15
+ qrCameraInstructions: "Richte die Kamera auf einen QR-Code.",
16
+ qrCameraPrivacy: "Kamerabilder bleiben auf diesem Gerät."
17
+ }
18
+ }
19
+ });
20
+ /** Resolved from the inherited render locale. */
21
+ export const useQrMessages = () => {
22
+ const locale = useLocale();
23
+ return () => qrMessages.resolve([locale()]).t;
24
+ };
25
+ export const checkQrMessages = () => qrMessages.check();
26
+ //# sourceMappingURL=qr-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["inputs/qr-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst qrMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n qrCameraPreview: \"Camera preview for scanning a QR code\",\n qrCameraStarting: \"Starting camera…\",\n qrCameraInstructions: \"Point the camera at a QR code.\",\n qrCameraPrivacy: \"Camera images stay on this device.\",\n },\n de: {\n qrCameraPreview: \"Kameravorschau zum Scannen eines QR-Codes\",\n qrCameraStarting: \"Kamera wird gestartet…\",\n qrCameraInstructions: \"Richte die Kamera auf einen QR-Code.\",\n qrCameraPrivacy: \"Kamerabilder bleiben auf diesem Gerät.\",\n },\n },\n});\n\nexport type QrMessages = ReturnType<(typeof qrMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useQrMessages = (): (() => QrMessages) => {\n const locale = useLocale();\n return () => qrMessages.resolve([locale()]).t;\n};\n\nexport const checkQrMessages = () => qrMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;EAC7B,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,eAAe,EAAE,uCAAuC;MACxD,gBAAgB,EAAE,kBAAkB;MACpC,oBAAoB,EAAE,gCAAgC;MACtD,eAAe,EAAE;IACnB,CAAC;IACD,EAAE,EAAE;MACF,eAAe,EAAE,2CAA2C;MAC5D,gBAAgB,EAAE,wBAAwB;MAC1C,oBAAoB,EAAE,sCAAsC;MAC5D,eAAe,EAAE;IACnB;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,aAAa,GAAG,MAA0B;EACrD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,OAAO,MAAM,eAAe,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,63 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const selectMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ chooseOption: "Choose option",
8
+ filterOptions: "Filter options",
9
+ noResultsFound: "No results found",
10
+ noOptions: "No options available",
11
+ optionsCouldNotLoad: "Options could not be loaded",
12
+ searchOptions: "Search options",
13
+ selectMatchingOption: "Select a matching option",
14
+ selectOption: "Select option",
15
+ checkingOptions: "Checking options",
16
+ checkingOptionsLoading: "Checking options...",
17
+ noMatchingOption: "No matching option found",
18
+ noOptionsFound: "No options found",
19
+ typeToSearch: "Type to search...",
20
+ showGridView: "Show grid view",
21
+ showListView: "Show list view",
22
+ moreSelected: ({
23
+ count
24
+ }) => `${count} more selected`,
25
+ removeNamed: ({
26
+ name
27
+ }) => `Remove ${name}`
28
+ },
29
+ de: {
30
+ chooseOption: "Option auswählen",
31
+ filterOptions: "Optionen filtern",
32
+ noResultsFound: "Keine Ergebnisse gefunden",
33
+ noOptions: "Keine Optionen verfügbar",
34
+ optionsCouldNotLoad: "Optionen konnten nicht geladen werden",
35
+ searchOptions: "Optionen durchsuchen",
36
+ selectMatchingOption: "Eine passende Option auswählen",
37
+ selectOption: "Option auswählen",
38
+ checkingOptions: "Optionen werden geprüft",
39
+ checkingOptionsLoading: "Optionen werden geprüft...",
40
+ noMatchingOption: "Keine passende Option gefunden",
41
+ noOptionsFound: "Keine Optionen gefunden",
42
+ typeToSearch: "Zum Suchen tippen...",
43
+ showGridView: "Rasteransicht anzeigen",
44
+ showListView: "Listenansicht anzeigen",
45
+ moreSelected: ({
46
+ count
47
+ }) => `${count} weitere ${count === 1 ? "Option" : "Optionen"} ausgewählt`,
48
+ removeNamed: ({
49
+ name
50
+ }) => `${name} entfernen`
51
+ }
52
+ }
53
+ });
54
+ /** Resolved from the inherited render locale. */
55
+ export const useSelectMessages = () => {
56
+ const locale = useLocale();
57
+ return () => selectMessages.resolve([locale()]).t;
58
+ };
59
+
60
+ /** Imperative UI inherits the document locale when no locale is supplied. */
61
+ export const resolveSelectMessages = locale => selectMessages.resolve([locale ?? (typeof document === "undefined" ? selectMessages.baseLocale : document.documentElement.lang)]).t;
62
+ export const checkSelectMessages = () => selectMessages.check();
63
+ //# sourceMappingURL=select-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["inputs/select-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst selectMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n chooseOption: \"Choose option\",\n filterOptions: \"Filter options\",\n noResultsFound: \"No results found\",\n noOptions: \"No options available\",\n optionsCouldNotLoad: \"Options could not be loaded\",\n searchOptions: \"Search options\",\n selectMatchingOption: \"Select a matching option\",\n selectOption: \"Select option\",\n checkingOptions: \"Checking options\",\n checkingOptionsLoading: \"Checking options...\",\n noMatchingOption: \"No matching option found\",\n noOptionsFound: \"No options found\",\n typeToSearch: \"Type to search...\",\n showGridView: \"Show grid view\",\n showListView: \"Show list view\",\n moreSelected: ({ count }: { count: number }) => `${count} more selected`,\n removeNamed: ({ name }: { name: string }) => `Remove ${name}`,\n },\n de: {\n chooseOption: \"Option auswählen\",\n filterOptions: \"Optionen filtern\",\n noResultsFound: \"Keine Ergebnisse gefunden\",\n noOptions: \"Keine Optionen verfügbar\",\n optionsCouldNotLoad: \"Optionen konnten nicht geladen werden\",\n searchOptions: \"Optionen durchsuchen\",\n selectMatchingOption: \"Eine passende Option auswählen\",\n selectOption: \"Option auswählen\",\n checkingOptions: \"Optionen werden geprüft\",\n checkingOptionsLoading: \"Optionen werden geprüft...\",\n noMatchingOption: \"Keine passende Option gefunden\",\n noOptionsFound: \"Keine Optionen gefunden\",\n typeToSearch: \"Zum Suchen tippen...\",\n showGridView: \"Rasteransicht anzeigen\",\n showListView: \"Listenansicht anzeigen\",\n moreSelected: ({ count }) => `${count} weitere ${count === 1 ? \"Option\" : \"Optionen\"} ausgewählt`,\n removeNamed: ({ name }) => `${name} entfernen`,\n },\n },\n});\n\nexport type SelectMessages = ReturnType<(typeof selectMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useSelectMessages = (): (() => SelectMessages) => {\n const locale = useLocale();\n return () => selectMessages.resolve([locale()]).t;\n};\n\n/** Imperative UI inherits the document locale when no locale is supplied. */\nexport const resolveSelectMessages = (locale?: string): SelectMessages =>\n selectMessages.resolve([locale ?? (typeof document === \"undefined\" ? selectMessages.baseLocale : document.documentElement.lang)]).t;\n\nexport const checkSelectMessages = () => selectMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;EACjC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,YAAY,EAAE,eAAe;MAC7B,aAAa,EAAE,gBAAgB;MAC/B,cAAc,EAAE,kBAAkB;MAClC,SAAS,EAAE,sBAAsB;MACjC,mBAAmB,EAAE,6BAA6B;MAClD,aAAa,EAAE,gBAAgB;MAC/B,oBAAoB,EAAE,0BAA0B;MAChD,YAAY,EAAE,eAAe;MAC7B,eAAe,EAAE,kBAAkB;MACnC,sBAAsB,EAAE,qBAAqB;MAC7C,gBAAgB,EAAE,0BAA0B;MAC5C,cAAc,EAAE,kBAAkB;MAClC,YAAY,EAAE,mBAAmB;MACjC,YAAY,EAAE,gBAAgB;MAC9B,YAAY,EAAE,gBAAgB;MAC9B,YAAY,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,GAAG,KAAK,gBAAgB;MACxE,WAAW,EAAE,CAAC;QAAE;MAAuB,CAAC,KAAK,UAAU,IAAI;IAC7D,CAAC;IACD,EAAE,EAAE;MACF,YAAY,EAAE,kBAAkB;MAChC,aAAa,EAAE,kBAAkB;MACjC,cAAc,EAAE,2BAA2B;MAC3C,SAAS,EAAE,0BAA0B;MACrC,mBAAmB,EAAE,uCAAuC;MAC5D,aAAa,EAAE,sBAAsB;MACrC,oBAAoB,EAAE,gCAAgC;MACtD,YAAY,EAAE,kBAAkB;MAChC,eAAe,EAAE,yBAAyB;MAC1C,sBAAsB,EAAE,4BAA4B;MACpD,gBAAgB,EAAE,gCAAgC;MAClD,cAAc,EAAE,yBAAyB;MACzC,YAAY,EAAE,sBAAsB;MACpC,YAAY,EAAE,wBAAwB;MACtC,YAAY,EAAE,wBAAwB;MACtC,YAAY,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,GAAG,KAAK,YAAY,KAAK,KAAK,CAAC,GAAG,QAAQ,GAAG,UAAU,aAAa;MACjG,WAAW,EAAE,CAAC;QAAE;MAAK,CAAC,KAAK,GAAG,IAAI;IACpC;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,iBAAiB,GAAG,MAA8B;EAC7D,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;;AAED;AACA,OAAO,MAAM,qBAAqB,GAAI,MAAe,IACnD,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,OAAO,QAAQ,KAAK,WAAW,GAAG,cAAc,CAAC,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAErI,OAAO,MAAM,mBAAmB,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,44 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const tagMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ addTag: "Add tag",
8
+ noTagsYet: "No tags yet",
9
+ removeTag: "Remove tag",
10
+ tagName: "Tag name",
11
+ tagCouldNotBeSaved: "The tag could not be saved.",
12
+ tagActionFailed: "The tag action failed.",
13
+ tagsPlaceholder: "Tags (e.g. Tag 1, Tag 2,...)",
14
+ tagsAdded: ({
15
+ tags
16
+ }) => `Tags added: ${tags}.`,
17
+ tagsRemoved: ({
18
+ tags
19
+ }) => `Tags removed: ${tags}.`
20
+ },
21
+ de: {
22
+ addTag: "Tag hinzufügen",
23
+ noTagsYet: "Noch keine Tags",
24
+ removeTag: "Tag entfernen",
25
+ tagName: "Tag-Name",
26
+ tagCouldNotBeSaved: "Der Tag konnte nicht gespeichert werden.",
27
+ tagActionFailed: "Die Tag-Aktion ist fehlgeschlagen.",
28
+ tagsPlaceholder: "Tags (z. B. Tag 1, Tag 2, …)",
29
+ tagsAdded: ({
30
+ tags
31
+ }) => `Tags hinzugefügt: ${tags}.`,
32
+ tagsRemoved: ({
33
+ tags
34
+ }) => `Tags entfernt: ${tags}.`
35
+ }
36
+ }
37
+ });
38
+ /** Resolved from the inherited render locale. */
39
+ export const useTagMessages = () => {
40
+ const locale = useLocale();
41
+ return () => tagMessages.resolve([locale()]).t;
42
+ };
43
+ export const checkTagMessages = () => tagMessages.check();
44
+ //# sourceMappingURL=tag-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["inputs/tag-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst tagMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n addTag: \"Add tag\",\n noTagsYet: \"No tags yet\",\n removeTag: \"Remove tag\",\n tagName: \"Tag name\",\n tagCouldNotBeSaved: \"The tag could not be saved.\",\n tagActionFailed: \"The tag action failed.\",\n tagsPlaceholder: \"Tags (e.g. Tag 1, Tag 2,...)\",\n tagsAdded: ({ tags }: { tags: string }) => `Tags added: ${tags}.`,\n tagsRemoved: ({ tags }: { tags: string }) => `Tags removed: ${tags}.`,\n },\n de: {\n addTag: \"Tag hinzufügen\",\n noTagsYet: \"Noch keine Tags\",\n removeTag: \"Tag entfernen\",\n tagName: \"Tag-Name\",\n tagCouldNotBeSaved: \"Der Tag konnte nicht gespeichert werden.\",\n tagActionFailed: \"Die Tag-Aktion ist fehlgeschlagen.\",\n tagsPlaceholder: \"Tags (z. B. Tag 1, Tag 2, …)\",\n tagsAdded: ({ tags }) => `Tags hinzugefügt: ${tags}.`,\n tagsRemoved: ({ tags }) => `Tags entfernt: ${tags}.`,\n },\n },\n});\n\nexport type TagMessages = ReturnType<(typeof tagMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useTagMessages = (): (() => TagMessages) => {\n const locale = useLocale();\n return () => tagMessages.resolve([locale()]).t;\n};\n\nexport const checkTagMessages = () => tagMessages.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,MAAM,EAAE,SAAS;MACjB,SAAS,EAAE,aAAa;MACxB,SAAS,EAAE,YAAY;MACvB,OAAO,EAAE,UAAU;MACnB,kBAAkB,EAAE,6BAA6B;MACjD,eAAe,EAAE,wBAAwB;MACzC,eAAe,EAAE,8BAA8B;MAC/C,SAAS,EAAE,CAAC;QAAE;MAAuB,CAAC,KAAK,eAAe,IAAI,GAAG;MACjE,WAAW,EAAE,CAAC;QAAE;MAAuB,CAAC,KAAK,iBAAiB,IAAI;IACpE,CAAC;IACD,EAAE,EAAE;MACF,MAAM,EAAE,gBAAgB;MACxB,SAAS,EAAE,iBAAiB;MAC5B,SAAS,EAAE,eAAe;MAC1B,OAAO,EAAE,UAAU;MACnB,kBAAkB,EAAE,0CAA0C;MAC9D,eAAe,EAAE,oCAAoC;MACrD,eAAe,EAAE,8BAA8B;MAC/C,SAAS,EAAE,CAAC;QAAE;MAAK,CAAC,KAAK,qBAAqB,IAAI,GAAG;MACrD,WAAW,EAAE,CAAC;QAAE;MAAK,CAAC,KAAK,kBAAkB,IAAI;IACnD;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,OAAO,MAAM,gBAAgB,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const templateMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ templateEditorPlaceholder: "Write HTML with Liquid values like {{ APP_NAME }}...",
8
+ templatePreview: "Template preview"
9
+ },
10
+ de: {
11
+ templateEditorPlaceholder: "HTML mit Liquid-Werten wie {{ APP_NAME }} schreiben...",
12
+ templatePreview: "Vorlagenvorschau"
13
+ }
14
+ }
15
+ });
16
+ /** Resolved from the inherited render locale. */
17
+ export const useTemplateMessages = () => {
18
+ const locale = useLocale();
19
+ return () => templateMessages.resolve([locale()]).t;
20
+ };
21
+ export const checkTemplateMessages = () => templateMessages.check();
22
+ //# sourceMappingURL=template-messages.js.map