@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":["feedback/InstallGuide.tsx"],"sourcesContent":["import { clipboard } from \"@k2b/stdlib/solid\";\nimport { createMemo, For, type JSX, Match, Show, Switch } from \"solid-js\";\nimport { Button, ButtonLink } from \"../actions/Button\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { NoticeCard } from \"../surfaces/NoticeCard\";\nimport type { InstallPrompt } from \"./install\";\n\nexport type InstallGuideProps = {\n /** The name people see on their Home Screen, used in the guidance text. */\n appName: string;\n install: InstallPrompt;\n /**\n * The absolute address of the page to install. A browser inside another app copies it, to open it in Safari or\n * Chrome, and shows it as text when copying fails, so it can be copied by hand. Samsung Internet opens an http or\n * https address in Chrome.\n */\n url: string;\n /**\n * An application note under the installation steps or the embedded browser's link, for example what else the\n * installed app enables.\n */\n note?: string;\n class?: string;\n};\n\n/**\n * Opens `url` in Chrome on Android. Without Chrome, the browser loads `url` itself. Only an absolute http or https\n * address has an intent; anything else returns `undefined`.\n */\nconst chromeIntent = (url: string) => {\n let target: URL;\n try {\n target = new URL(url);\n } catch {\n return undefined;\n }\n if (target.protocol !== \"https:\" && target.protocol !== \"http:\") return undefined;\n const scheme = target.protocol.slice(0, -1);\n return `intent://${target.host}${target.pathname}${target.search}${target.hash}#Intent;scheme=${scheme};package=com.android.chrome;S.browser_fallback_url=${encodeURIComponent(url)};end`;\n};\n\n/**\n * Explains how to install the current page as an app on this platform: the browser's own dialog where it offers\n * one, otherwise the steps for Safari on iPhone, iPad, and Mac, other browsers on iPhone and iPad, Android, and other\n * browsers. A browser inside another app cannot install, so it gets a warning and the link to copy into Safari or\n * Chrome instead. Samsung Internet gets a link to Chrome even when it offers its own dialog, because Android may block\n * the app package it builds. The host owns the surrounding surface, its heading, and dismissal.\n */\nexport function InstallGuide(props: InstallGuideProps): JSX.Element {\n const messages = useUiMessages();\n // The host may hand over another state after mount, such as the browser's own in place of the server's view.\n const state = () => props.install;\n const copy = clipboard.createWriter({ write: (url: string) => navigator.clipboard.writeText(url) });\n const embedded = () => state().platform === \"in-app\" || state().platform === \"apple-in-app\";\n /** A browser that installs, but less reliably than the platform's own. */\n const hint = createMemo(() => {\n const t = messages();\n if (state().platform === \"apple-browser\") return { title: t.installAppleBrowserTitle, detail: t.installAppleBrowserDetail };\n if (state().platform === \"android-browser\") return { title: t.installAndroidBrowserTitle, detail: t.installAndroidBrowserDetail };\n return undefined;\n });\n const steps = createMemo(() => {\n const t = messages();\n if (state().platform === \"apple-mobile\" || state().platform === \"apple-browser\")\n return [\n {\n icon: \"ti ti-share-2\",\n title: t.installOpenShare,\n detail: state().platform === \"apple-browser\" ? t.installOpenShareBrowserDetail : t.installOpenShareDetail,\n },\n { icon: \"ti ti-square-plus\", title: t.installHomeScreen, detail: t.installHomeScreenDetail },\n { icon: \"ti ti-check\", title: t.installConfirmAdd, detail: t.installConfirmAddDetail },\n ];\n if (state().platform === \"apple-desktop\")\n return [\n { icon: \"ti ti-share-2\", title: t.installSafariMenu, detail: t.installSafariMenuDetail },\n { icon: \"ti ti-app-window\", title: t.installAddDock, detail: t.installAddDockDetail },\n ];\n return [\n { icon: \"ti ti-dots\", title: t.installBrowserMenu, detail: t.installBrowserMenuDetail },\n {\n icon: \"ti ti-square-plus\",\n title: t.installApp,\n detail: state().platform === \"android\" || state().platform === \"android-browser\" ? t.installAndroidDetail : t.installBrowserDetail,\n },\n ];\n });\n return (\n <div class={props.class ? `k2b-install-guide ${props.class}` : \"k2b-install-guide\"} data-platform={state().platform}>\n <Show when={state().failed()}>\n <p role=\"alert\">{messages().installFailed}</p>\n </Show>\n <Switch\n fallback={\n <>\n <Show when={hint()}>{(hint) => <NoticeCard tone=\"info\" title={hint().title} detail={hint().detail} />}</Show>\n <ol class=\"k2b-install-guide__steps\">\n <For each={steps()}>\n {(step) => (\n <li>\n <span class=\"k2b-install-guide__step-icon\">\n <i class={step.icon} aria-hidden=\"true\" />\n </span>\n <div>\n <h3>{step.title}</h3>\n <p>{step.detail}</p>\n </div>\n </li>\n )}\n </For>\n </ol>\n <Show when={state().platform === \"apple-mobile\"}>\n <p>{messages().installSafariFallback}</p>\n </Show>\n <Show when={props.note}>\n <p>{props.note}</p>\n </Show>\n <Show when={state().platform === \"generic\"}>\n <p>{messages().installUnavailable}</p>\n </Show>\n </>\n }\n >\n <Match when={state().requested()}>\n <p role=\"status\">{messages().installRequested}</p>\n </Match>\n <Match when={state().platform === \"android-samsung\"}>\n <NoticeCard\n tone=\"info\"\n title={messages().installSamsungTitle}\n detail={messages().installSamsungDetail({ appName: props.appName })}\n />\n <Show when={chromeIntent(props.url)}>\n {(href) => (\n <ButtonLink href={href()}>\n <i class=\"ti ti-brand-chrome\" aria-hidden=\"true\" />\n {messages().installOpenChrome}\n </ButtonLink>\n )}\n </Show>\n <Show when={props.note}>\n <p>{props.note}</p>\n </Show>\n </Match>\n <Match when={state().canPrompt() || state().busy()}>\n <p>{messages().installNative({ appName: props.appName })}</p>\n <Button loading={state().busy()} onClick={() => void state().install()}>\n {messages().installApp}\n </Button>\n </Match>\n <Match when={embedded()}>\n <NoticeCard\n tone=\"warning\"\n title={state().platform === \"apple-in-app\" ? messages().installAppleInAppTitle : messages().installInAppTitle}\n detail={\n state().platform === \"apple-in-app\"\n ? messages().installAppleInAppDetail({ appName: props.appName })\n : messages().installInAppDetail({ appName: props.appName })\n }\n />\n <Button variant=\"secondary\" onClick={() => void copy.copy(props.url)}>\n <i class={copy.wasCopied() ? \"ti ti-check\" : \"ti ti-copy\"} aria-hidden=\"true\" />\n {copy.wasCopied() ? messages().installLinkCopied : messages().installCopyLink}\n </Button>\n <Show when={copy.error()}>\n <p role=\"alert\">{messages().installCopyFailed}</p>\n <code>{props.url}</code>\n </Show>\n <Show when={props.note}>\n <p>{props.note}</p>\n </Show>\n </Match>\n </Switch>\n </div>\n );\n}\n\nexport default InstallGuide;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["feedback/InstallGuide.tsx"],"sourcesContent":["import { clipboard } from \"@k2b/stdlib/solid\";\nimport { createMemo, For, type JSX, Match, Show, Switch } from \"solid-js\";\nimport { Button, ButtonLink } from \"../actions/Button\";\nimport { NoticeCard } from \"../surfaces/NoticeCard\";\nimport type { InstallPrompt } from \"./install\";\nimport { useInstallMessages } from \"./install-messages\";\n\nexport type InstallGuideProps = {\n /** The name people see on their Home Screen, used in the guidance text. */\n appName: string;\n install: InstallPrompt;\n /**\n * The absolute address of the page to install. A browser inside another app copies it, to open it in Safari or\n * Chrome, and shows it as text when copying fails, so it can be copied by hand. Samsung Internet opens an http or\n * https address in Chrome.\n */\n url: string;\n /**\n * An application note under the installation steps or the embedded browser's link, for example what else the\n * installed app enables.\n */\n note?: string;\n class?: string;\n};\n\n/**\n * Opens `url` in Chrome on Android. Without Chrome, the browser loads `url` itself. Only an absolute http or https\n * address has an intent; anything else returns `undefined`.\n */\nconst chromeIntent = (url: string) => {\n let target: URL;\n try {\n target = new URL(url);\n } catch {\n return undefined;\n }\n if (target.protocol !== \"https:\" && target.protocol !== \"http:\") return undefined;\n const scheme = target.protocol.slice(0, -1);\n return `intent://${target.host}${target.pathname}${target.search}${target.hash}#Intent;scheme=${scheme};package=com.android.chrome;S.browser_fallback_url=${encodeURIComponent(url)};end`;\n};\n\n/**\n * Explains how to install the current page as an app on this platform: the browser's own dialog where it offers\n * one, otherwise the steps for Safari on iPhone, iPad, and Mac, other browsers on iPhone and iPad, Android, and other\n * browsers. A browser inside another app cannot install, so it gets a warning and the link to copy into Safari or\n * Chrome instead. Samsung Internet gets a link to Chrome even when it offers its own dialog, because Android may block\n * the app package it builds. The host owns the surrounding surface, its heading, and dismissal.\n */\nexport function InstallGuide(props: InstallGuideProps): JSX.Element {\n const installMessages = useInstallMessages();\n // The host may hand over another state after mount, such as the browser's own in place of the server's view.\n const state = () => props.install;\n const copy = clipboard.createWriter({ write: (url: string) => navigator.clipboard.writeText(url) });\n const embedded = () => state().platform === \"in-app\" || state().platform === \"apple-in-app\";\n /** A browser that installs, but less reliably than the platform's own. */\n const hint = createMemo(() => {\n const t = installMessages();\n if (state().platform === \"apple-browser\") return { title: t.installAppleBrowserTitle, detail: t.installAppleBrowserDetail };\n if (state().platform === \"android-browser\") return { title: t.installAndroidBrowserTitle, detail: t.installAndroidBrowserDetail };\n return undefined;\n });\n const steps = createMemo(() => {\n const t = installMessages();\n if (state().platform === \"apple-mobile\" || state().platform === \"apple-browser\")\n return [\n {\n icon: \"ti ti-share-2\",\n title: t.installOpenShare,\n detail: state().platform === \"apple-browser\" ? t.installOpenShareBrowserDetail : t.installOpenShareDetail,\n },\n { icon: \"ti ti-square-plus\", title: t.installHomeScreen, detail: t.installHomeScreenDetail },\n { icon: \"ti ti-check\", title: t.installConfirmAdd, detail: t.installConfirmAddDetail },\n ];\n if (state().platform === \"apple-desktop\")\n return [\n { icon: \"ti ti-share-2\", title: t.installSafariMenu, detail: t.installSafariMenuDetail },\n { icon: \"ti ti-app-window\", title: t.installAddDock, detail: t.installAddDockDetail },\n ];\n return [\n { icon: \"ti ti-dots\", title: t.installBrowserMenu, detail: t.installBrowserMenuDetail },\n {\n icon: \"ti ti-square-plus\",\n title: t.installApp,\n detail: state().platform === \"android\" || state().platform === \"android-browser\" ? t.installAndroidDetail : t.installBrowserDetail,\n },\n ];\n });\n return (\n <div class={props.class ? `k2b-install-guide ${props.class}` : \"k2b-install-guide\"} data-platform={state().platform}>\n <Show when={state().failed()}>\n <p role=\"alert\">{installMessages().installFailed}</p>\n </Show>\n <Switch\n fallback={\n <>\n <Show when={hint()}>{(hint) => <NoticeCard tone=\"info\" title={hint().title} detail={hint().detail} />}</Show>\n <ol class=\"k2b-install-guide__steps\">\n <For each={steps()}>\n {(step) => (\n <li>\n <span class=\"k2b-install-guide__step-icon\">\n <i class={step.icon} aria-hidden=\"true\" />\n </span>\n <div>\n <h3>{step.title}</h3>\n <p>{step.detail}</p>\n </div>\n </li>\n )}\n </For>\n </ol>\n <Show when={state().platform === \"apple-mobile\"}>\n <p>{installMessages().installSafariFallback}</p>\n </Show>\n <Show when={props.note}>\n <p>{props.note}</p>\n </Show>\n <Show when={state().platform === \"generic\"}>\n <p>{installMessages().installUnavailable}</p>\n </Show>\n </>\n }\n >\n <Match when={state().requested()}>\n <p role=\"status\">{installMessages().installRequested}</p>\n </Match>\n <Match when={state().platform === \"android-samsung\"}>\n <NoticeCard\n tone=\"info\"\n title={installMessages().installSamsungTitle}\n detail={installMessages().installSamsungDetail({ appName: props.appName })}\n />\n <Show when={chromeIntent(props.url)}>\n {(href) => (\n <ButtonLink href={href()}>\n <i class=\"ti ti-brand-chrome\" aria-hidden=\"true\" />\n {installMessages().installOpenChrome}\n </ButtonLink>\n )}\n </Show>\n <Show when={props.note}>\n <p>{props.note}</p>\n </Show>\n </Match>\n <Match when={state().canPrompt() || state().busy()}>\n <p>{installMessages().installNative({ appName: props.appName })}</p>\n <Button loading={state().busy()} onClick={() => void state().install()}>\n {installMessages().installApp}\n </Button>\n </Match>\n <Match when={embedded()}>\n <NoticeCard\n tone=\"warning\"\n title={state().platform === \"apple-in-app\" ? installMessages().installAppleInAppTitle : installMessages().installInAppTitle}\n detail={\n state().platform === \"apple-in-app\"\n ? installMessages().installAppleInAppDetail({ appName: props.appName })\n : installMessages().installInAppDetail({ appName: props.appName })\n }\n />\n <Button variant=\"secondary\" onClick={() => void copy.copy(props.url)}>\n <i class={copy.wasCopied() ? \"ti ti-check\" : \"ti ti-copy\"} aria-hidden=\"true\" />\n {copy.wasCopied() ? installMessages().installLinkCopied : installMessages().installCopyLink}\n </Button>\n <Show when={copy.error()}>\n <p role=\"alert\">{installMessages().installCopyFailed}</p>\n <code>{props.url}</code>\n </Show>\n <Show when={props.note}>\n <p>{props.note}</p>\n </Show>\n </Match>\n </Switch>\n </div>\n );\n}\n\nexport default InstallGuide;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,104 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const installMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ installApp: "Install app",
8
+ installNative: ({
9
+ appName
10
+ }) => `Your browser can install ${appName}. Confirm installation in the dialog that opens next.`,
11
+ installRequested: "Installation requested. Follow your browser’s instructions.",
12
+ installFailed: "The installation dialog could not be opened.",
13
+ installOpenShare: "Open Share",
14
+ installOpenShareDetail: "Tap the Share button in Safari. It may be inside the More menu.",
15
+ installHomeScreen: "Add to Home Screen",
16
+ installHomeScreenDetail: "Scroll through the actions and choose “Add to Home Screen”.",
17
+ installConfirmAdd: "Confirm Add",
18
+ installConfirmAddDetail: "Keep “Open as Web App” enabled if shown, then tap “Add”.",
19
+ installOpenShareBrowserDetail: "In Chrome, tap Share in the address bar. In Firefox or Edge, open the menu, then Share.",
20
+ installSafariFallback: "Don’t see “Add to Home Screen”? This page may be open inside another app. Open it in Safari.",
21
+ installSafariMenu: "Open the Safari menu",
22
+ installSafariMenuDetail: "On your Mac, open File or click Share in Safari.",
23
+ installAddDock: "Add to Dock",
24
+ installAddDockDetail: "Choose “Add to Dock”, then confirm “Add”. Available in Safari on macOS Sonoma or later.",
25
+ installBrowserMenu: "Open the browser menu",
26
+ installBrowserMenuDetail: "Use the menu beside the address bar.",
27
+ installAndroidDetail: "Choose “Install app” or “Add to Home screen”, then follow the browser’s instructions.",
28
+ installBrowserDetail: "Look for “Install app” in the menu or an installation icon in the address bar.",
29
+ installUnavailable: "No installation option? You can keep using the browser or try another browser that supports installation.",
30
+ installAppleInAppTitle: "Open this page in Safari",
31
+ installAppleInAppDetail: ({
32
+ appName
33
+ }) => `This page is open inside another app, which can’t install ${appName}. In that app’s menu (••• or Share), choose “Open in Safari”, or copy the link and paste it into Safari.`,
34
+ installInAppTitle: "Open this page in your browser",
35
+ installInAppDetail: ({
36
+ appName
37
+ }) => `This page is open inside another app, which can’t install ${appName}. In that app’s menu, choose “Open in Chrome” or “Open in browser”, or copy the link and paste it into Chrome.`,
38
+ installAppleBrowserTitle: "Safari works best",
39
+ installAppleBrowserDetail: "This browser installs through Share → Add to Home Screen. If that isn’t there, open this page in Safari.",
40
+ installAndroidBrowserTitle: "Chrome works best",
41
+ installAndroidBrowserDetail: "In this browser, look for “Install” or “Add to Home screen” in the menu. If that isn’t there, open this page in Chrome.",
42
+ installSamsungTitle: "Install with Chrome",
43
+ installSamsungDetail: ({
44
+ appName
45
+ }) => `On Samsung phones, Samsung Internet builds its own app package, which Android 14 and later may block as “built for an older version of Android”. That warning is about the package, not about ${appName}. Chrome installs ${appName} without it. Without Chrome, use this browser’s menu and continue through that warning.`,
46
+ installOpenChrome: "Open in Chrome",
47
+ installCopyLink: "Copy link",
48
+ installLinkCopied: "Link copied",
49
+ installCopyFailed: "The link could not be copied. Copy this address manually:"
50
+ },
51
+ de: {
52
+ installApp: "App installieren",
53
+ installNative: ({
54
+ appName
55
+ }) => `Dein Browser kann ${appName} installieren. Bestätige die Installation im nächsten Dialog.`,
56
+ installRequested: "Installation angefragt. Folge den Hinweisen deines Browsers.",
57
+ installFailed: "Der Installationsdialog konnte nicht geöffnet werden.",
58
+ installOpenShare: "Teilen öffnen",
59
+ installOpenShareDetail: "Tippe in Safari auf Teilen. Der Eintrag kann im Mehr-Menü liegen.",
60
+ installHomeScreen: "Zum Home-Bildschirm",
61
+ installHomeScreenDetail: "Scrolle durch die Aktionen und wähle „Zum Home-Bildschirm“.",
62
+ installConfirmAdd: "Hinzufügen bestätigen",
63
+ installConfirmAddDetail: "Lass „Als Web-App öffnen“ aktiviert, falls angezeigt, und tippe auf „Hinzufügen“.",
64
+ installOpenShareBrowserDetail: "Tippe in Chrome in der Adressleiste auf Teilen. Öffne in Firefox oder Edge das Menü und dann Teilen.",
65
+ installSafariFallback: "Kein „Zum Home-Bildschirm“? Dann ist die Seite vielleicht in einer anderen App geöffnet. Öffne sie in Safari.",
66
+ installSafariMenu: "Safari-Menü öffnen",
67
+ installSafariMenuDetail: "Öffne auf deinem Mac in Safari „Ablage“ oder klicke auf Teilen.",
68
+ installAddDock: "Zum Dock hinzufügen",
69
+ installAddDockDetail: "Wähle „Zum Dock hinzufügen“ und bestätige mit „Hinzufügen“. Verfügbar in Safari ab macOS Sonoma.",
70
+ installBrowserMenu: "Browser-Menü öffnen",
71
+ installBrowserMenuDetail: "Nutze das Menü neben der Adressleiste.",
72
+ installAndroidDetail: "Wähle „App installieren“ oder „Zum Startbildschirm hinzufügen“ und folge den Hinweisen des Browsers.",
73
+ installBrowserDetail: "Suche nach „App installieren“ im Menü oder nach einem Installationssymbol in der Adressleiste.",
74
+ installUnavailable: "Keine Installationsoption? Nutze die App weiter im Browser oder versuche einen anderen Browser mit Installationsunterstützung.",
75
+ installAppleInAppTitle: "Öffne diese Seite in Safari",
76
+ installAppleInAppDetail: ({
77
+ appName
78
+ }) => `Diese Seite ist in einer anderen App geöffnet, die ${appName} nicht installieren kann. Wähle im Menü dieser App (••• oder Teilen) „In Safari öffnen“ oder kopiere den Link und füge ihn in Safari ein.`,
79
+ installInAppTitle: "Öffne diese Seite in deinem Browser",
80
+ installInAppDetail: ({
81
+ appName
82
+ }) => `Diese Seite ist in einer anderen App geöffnet, die ${appName} nicht installieren kann. Wähle im Menü dieser App „In Chrome öffnen“ oder „Im Browser öffnen“ oder kopiere den Link und füge ihn in Chrome ein.`,
83
+ installAppleBrowserTitle: "Am besten mit Safari",
84
+ installAppleBrowserDetail: "In diesem Browser installierst du über Teilen → Zum Home-Bildschirm. Fehlt der Eintrag, öffne diese Seite in Safari.",
85
+ installAndroidBrowserTitle: "Am besten mit Chrome",
86
+ installAndroidBrowserDetail: "Suche in diesem Browser im Menü nach „Installieren“ oder „Zum Startbildschirm hinzufügen“. Fehlt der Eintrag, öffne diese Seite in Chrome.",
87
+ installSamsungTitle: "Mit Chrome installieren",
88
+ installSamsungDetail: ({
89
+ appName
90
+ }) => `Auf Samsung-Handys erstellt Samsung Internet ein eigenes App-Paket, das Android ab Version 14 als „für eine ältere Android-Version entwickelt“ blockieren kann. Diese Warnung betrifft das Paket, nicht ${appName}. Mit Chrome installierst du ${appName} ohne sie. Ohne Chrome nutze das Menü dieses Browsers und fahre trotz dieser Warnung fort.`,
91
+ installOpenChrome: "In Chrome öffnen",
92
+ installCopyLink: "Link kopieren",
93
+ installLinkCopied: "Link kopiert",
94
+ installCopyFailed: "Der Link konnte nicht kopiert werden. Kopiere diese Adresse manuell:"
95
+ }
96
+ }
97
+ });
98
+ /** Resolved from the inherited render locale. */
99
+ export const useInstallMessages = () => {
100
+ const locale = useLocale();
101
+ return () => installMessages.resolve([locale()]).t;
102
+ };
103
+ export const checkInstallMessages = () => installMessages.check();
104
+ //# sourceMappingURL=install-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["feedback/install-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst installMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n installApp: \"Install app\",\n installNative: ({ appName }: { appName: string }) =>\n `Your browser can install ${appName}. Confirm installation in the dialog that opens next.`,\n installRequested: \"Installation requested. Follow your browser’s instructions.\",\n installFailed: \"The installation dialog could not be opened.\",\n installOpenShare: \"Open Share\",\n installOpenShareDetail: \"Tap the Share button in Safari. It may be inside the More menu.\",\n installHomeScreen: \"Add to Home Screen\",\n installHomeScreenDetail: \"Scroll through the actions and choose “Add to Home Screen”.\",\n installConfirmAdd: \"Confirm Add\",\n installConfirmAddDetail: \"Keep “Open as Web App” enabled if shown, then tap “Add”.\",\n installOpenShareBrowserDetail: \"In Chrome, tap Share in the address bar. In Firefox or Edge, open the menu, then Share.\",\n installSafariFallback: \"Don’t see “Add to Home Screen”? This page may be open inside another app. Open it in Safari.\",\n installSafariMenu: \"Open the Safari menu\",\n installSafariMenuDetail: \"On your Mac, open File or click Share in Safari.\",\n installAddDock: \"Add to Dock\",\n installAddDockDetail: \"Choose “Add to Dock”, then confirm “Add”. Available in Safari on macOS Sonoma or later.\",\n installBrowserMenu: \"Open the browser menu\",\n installBrowserMenuDetail: \"Use the menu beside the address bar.\",\n installAndroidDetail: \"Choose “Install app” or “Add to Home screen”, then follow the browser’s instructions.\",\n installBrowserDetail: \"Look for “Install app” in the menu or an installation icon in the address bar.\",\n installUnavailable: \"No installation option? You can keep using the browser or try another browser that supports installation.\",\n installAppleInAppTitle: \"Open this page in Safari\",\n installAppleInAppDetail: ({ appName }: { appName: string }) =>\n `This page is open inside another app, which can’t install ${appName}. In that app’s menu (••• or Share), choose “Open in Safari”, or copy the link and paste it into Safari.`,\n installInAppTitle: \"Open this page in your browser\",\n installInAppDetail: ({ appName }: { appName: string }) =>\n `This page is open inside another app, which can’t install ${appName}. In that app’s menu, choose “Open in Chrome” or “Open in browser”, or copy the link and paste it into Chrome.`,\n installAppleBrowserTitle: \"Safari works best\",\n installAppleBrowserDetail: \"This browser installs through Share → Add to Home Screen. If that isn’t there, open this page in Safari.\",\n installAndroidBrowserTitle: \"Chrome works best\",\n installAndroidBrowserDetail:\n \"In this browser, look for “Install” or “Add to Home screen” in the menu. If that isn’t there, open this page in Chrome.\",\n installSamsungTitle: \"Install with Chrome\",\n installSamsungDetail: ({ appName }: { appName: string }) =>\n `On Samsung phones, Samsung Internet builds its own app package, which Android 14 and later may block as “built for an older version of Android”. That warning is about the package, not about ${appName}. Chrome installs ${appName} without it. Without Chrome, use this browser’s menu and continue through that warning.`,\n installOpenChrome: \"Open in Chrome\",\n installCopyLink: \"Copy link\",\n installLinkCopied: \"Link copied\",\n installCopyFailed: \"The link could not be copied. Copy this address manually:\",\n },\n de: {\n installApp: \"App installieren\",\n installNative: ({ appName }) => `Dein Browser kann ${appName} installieren. Bestätige die Installation im nächsten Dialog.`,\n installRequested: \"Installation angefragt. Folge den Hinweisen deines Browsers.\",\n installFailed: \"Der Installationsdialog konnte nicht geöffnet werden.\",\n installOpenShare: \"Teilen öffnen\",\n installOpenShareDetail: \"Tippe in Safari auf Teilen. Der Eintrag kann im Mehr-Menü liegen.\",\n installHomeScreen: \"Zum Home-Bildschirm\",\n installHomeScreenDetail: \"Scrolle durch die Aktionen und wähle „Zum Home-Bildschirm“.\",\n installConfirmAdd: \"Hinzufügen bestätigen\",\n installConfirmAddDetail: \"Lass „Als Web-App öffnen“ aktiviert, falls angezeigt, und tippe auf „Hinzufügen“.\",\n installOpenShareBrowserDetail: \"Tippe in Chrome in der Adressleiste auf Teilen. Öffne in Firefox oder Edge das Menü und dann Teilen.\",\n installSafariFallback:\n \"Kein „Zum Home-Bildschirm“? Dann ist die Seite vielleicht in einer anderen App geöffnet. Öffne sie in Safari.\",\n installSafariMenu: \"Safari-Menü öffnen\",\n installSafariMenuDetail: \"Öffne auf deinem Mac in Safari „Ablage“ oder klicke auf Teilen.\",\n installAddDock: \"Zum Dock hinzufügen\",\n installAddDockDetail: \"Wähle „Zum Dock hinzufügen“ und bestätige mit „Hinzufügen“. Verfügbar in Safari ab macOS Sonoma.\",\n installBrowserMenu: \"Browser-Menü öffnen\",\n installBrowserMenuDetail: \"Nutze das Menü neben der Adressleiste.\",\n installAndroidDetail: \"Wähle „App installieren“ oder „Zum Startbildschirm hinzufügen“ und folge den Hinweisen des Browsers.\",\n installBrowserDetail: \"Suche nach „App installieren“ im Menü oder nach einem Installationssymbol in der Adressleiste.\",\n installUnavailable:\n \"Keine Installationsoption? Nutze die App weiter im Browser oder versuche einen anderen Browser mit Installationsunterstützung.\",\n installAppleInAppTitle: \"Öffne diese Seite in Safari\",\n installAppleInAppDetail: ({ appName }) =>\n `Diese Seite ist in einer anderen App geöffnet, die ${appName} nicht installieren kann. Wähle im Menü dieser App (••• oder Teilen) „In Safari öffnen“ oder kopiere den Link und füge ihn in Safari ein.`,\n installInAppTitle: \"Öffne diese Seite in deinem Browser\",\n installInAppDetail: ({ appName }) =>\n `Diese Seite ist in einer anderen App geöffnet, die ${appName} nicht installieren kann. Wähle im Menü dieser App „In Chrome öffnen“ oder „Im Browser öffnen“ oder kopiere den Link und füge ihn in Chrome ein.`,\n installAppleBrowserTitle: \"Am besten mit Safari\",\n installAppleBrowserDetail:\n \"In diesem Browser installierst du über Teilen → Zum Home-Bildschirm. Fehlt der Eintrag, öffne diese Seite in Safari.\",\n installAndroidBrowserTitle: \"Am besten mit Chrome\",\n installAndroidBrowserDetail:\n \"Suche in diesem Browser im Menü nach „Installieren“ oder „Zum Startbildschirm hinzufügen“. Fehlt der Eintrag, öffne diese Seite in Chrome.\",\n installSamsungTitle: \"Mit Chrome installieren\",\n installSamsungDetail: ({ appName }) =>\n `Auf Samsung-Handys erstellt Samsung Internet ein eigenes App-Paket, das Android ab Version 14 als „für eine ältere Android-Version entwickelt“ blockieren kann. Diese Warnung betrifft das Paket, nicht ${appName}. Mit Chrome installierst du ${appName} ohne sie. Ohne Chrome nutze das Menü dieses Browsers und fahre trotz dieser Warnung fort.`,\n installOpenChrome: \"In Chrome öffnen\",\n installCopyLink: \"Link kopieren\",\n installLinkCopied: \"Link kopiert\",\n installCopyFailed: \"Der Link konnte nicht kopiert werden. Kopiere diese Adresse manuell:\",\n },\n },\n});\n\nexport type InstallMessages = ReturnType<(typeof installMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useInstallMessages = (): (() => InstallMessages) => {\n const locale = useLocale();\n return () => installMessages.resolve([locale()]).t;\n};\n\nexport const checkInstallMessages = () => installMessages.check();\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,65 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const promptMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ minCharacters: ({
8
+ count
9
+ }) => `At least ${count} ${count === 1 ? "character" : "characters"}`,
10
+ maxCharacters: ({
11
+ count
12
+ }) => `At most ${count} ${count === 1 ? "character" : "characters"}`,
13
+ minTags: ({
14
+ count
15
+ }) => `At least ${count} ${count === 1 ? "tag" : "tags"}`,
16
+ maxTags: ({
17
+ count
18
+ }) => `At most ${count} ${count === 1 ? "tag" : "tags"}`,
19
+ searchFailed: "Search failed.",
20
+ confirmation: "Confirmation",
21
+ typeToConfirm: ({
22
+ phrase
23
+ }) => `Type ${phrase} to confirm`,
24
+ confirm: "Confirm",
25
+ discard: "Discard",
26
+ form: "Form",
27
+ discardUnsavedChanges: "Discard unsaved changes?",
28
+ unsavedChangesTitle: "Unsaved changes"
29
+ },
30
+ de: {
31
+ minCharacters: ({
32
+ count
33
+ }) => `Mindestens ${count} Zeichen`,
34
+ maxCharacters: ({
35
+ count
36
+ }) => `Höchstens ${count} Zeichen`,
37
+ minTags: ({
38
+ count
39
+ }) => `Mindestens ${count} ${count === 1 ? "Tag" : "Tags"}`,
40
+ maxTags: ({
41
+ count
42
+ }) => `Höchstens ${count} ${count === 1 ? "Tag" : "Tags"}`,
43
+ searchFailed: "Suche fehlgeschlagen.",
44
+ confirmation: "Bestätigung",
45
+ typeToConfirm: ({
46
+ phrase
47
+ }) => `Gib ${phrase} zur Bestätigung ein`,
48
+ confirm: "Bestätigen",
49
+ discard: "Verwerfen",
50
+ form: "Formular",
51
+ discardUnsavedChanges: "Ungespeicherte Änderungen verwerfen?",
52
+ unsavedChangesTitle: "Ungespeicherte Änderungen"
53
+ }
54
+ }
55
+ });
56
+ /** Resolved from the inherited render locale. */
57
+ export const usePromptMessages = () => {
58
+ const locale = useLocale();
59
+ return () => promptMessages.resolve([locale()]).t;
60
+ };
61
+
62
+ /** Imperative UI inherits the document locale when no locale is supplied. */
63
+ export const resolvePromptMessages = locale => promptMessages.resolve([locale ?? (typeof document === "undefined" ? promptMessages.baseLocale : document.documentElement.lang)]).t;
64
+ export const checkPromptMessages = () => promptMessages.check();
65
+ //# sourceMappingURL=prompt-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["feedback/prompt-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst promptMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n minCharacters: ({ count }: { count: number }) => `At least ${count} ${count === 1 ? \"character\" : \"characters\"}`,\n maxCharacters: ({ count }: { count: number }) => `At most ${count} ${count === 1 ? \"character\" : \"characters\"}`,\n minTags: ({ count }: { count: number }) => `At least ${count} ${count === 1 ? \"tag\" : \"tags\"}`,\n maxTags: ({ count }: { count: number }) => `At most ${count} ${count === 1 ? \"tag\" : \"tags\"}`,\n searchFailed: \"Search failed.\",\n confirmation: \"Confirmation\",\n typeToConfirm: ({ phrase }: { phrase: string }) => `Type ${phrase} to confirm`,\n confirm: \"Confirm\",\n discard: \"Discard\",\n form: \"Form\",\n discardUnsavedChanges: \"Discard unsaved changes?\",\n unsavedChangesTitle: \"Unsaved changes\",\n },\n de: {\n minCharacters: ({ count }) => `Mindestens ${count} Zeichen`,\n maxCharacters: ({ count }) => `Höchstens ${count} Zeichen`,\n minTags: ({ count }) => `Mindestens ${count} ${count === 1 ? \"Tag\" : \"Tags\"}`,\n maxTags: ({ count }) => `Höchstens ${count} ${count === 1 ? \"Tag\" : \"Tags\"}`,\n searchFailed: \"Suche fehlgeschlagen.\",\n confirmation: \"Bestätigung\",\n typeToConfirm: ({ phrase }: { phrase: string }) => `Gib ${phrase} zur Bestätigung ein`,\n confirm: \"Bestätigen\",\n discard: \"Verwerfen\",\n form: \"Formular\",\n discardUnsavedChanges: \"Ungespeicherte Änderungen verwerfen?\",\n unsavedChangesTitle: \"Ungespeicherte Änderungen\",\n },\n },\n});\n\nexport type PromptMessages = ReturnType<(typeof promptMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const usePromptMessages = (): (() => PromptMessages) => {\n const locale = useLocale();\n return () => promptMessages.resolve([locale()]).t;\n};\n\n/** Imperative UI inherits the document locale when no locale is supplied. */\nexport const resolvePromptMessages = (locale?: string): PromptMessages =>\n promptMessages.resolve([locale ?? (typeof document === \"undefined\" ? promptMessages.baseLocale : document.documentElement.lang)]).t;\n\nexport const checkPromptMessages = () => promptMessages.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,aAAa,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,WAAW,GAAG,YAAY,EAAE;MAChH,aAAa,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,WAAW,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,WAAW,GAAG,YAAY,EAAE;MAC/G,OAAO,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,EAAE;MAC9F,OAAO,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,WAAW,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,EAAE;MAC7F,YAAY,EAAE,gBAAgB;MAC9B,YAAY,EAAE,cAAc;MAC5B,aAAa,EAAE,CAAC;QAAE;MAA2B,CAAC,KAAK,QAAQ,MAAM,aAAa;MAC9E,OAAO,EAAE,SAAS;MAClB,OAAO,EAAE,SAAS;MAClB,IAAI,EAAE,MAAM;MACZ,qBAAqB,EAAE,0BAA0B;MACjD,mBAAmB,EAAE;IACvB,CAAC;IACD,EAAE,EAAE;MACF,aAAa,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,cAAc,KAAK,UAAU;MAC3D,aAAa,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,aAAa,KAAK,UAAU;MAC1D,OAAO,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,cAAc,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,EAAE;MAC7E,OAAO,EAAE,CAAC;QAAE;MAAM,CAAC,KAAK,aAAa,KAAK,IAAI,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,EAAE;MAC5E,YAAY,EAAE,uBAAuB;MACrC,YAAY,EAAE,aAAa;MAC3B,aAAa,EAAE,CAAC;QAAE;MAA2B,CAAC,KAAK,OAAO,MAAM,sBAAsB;MACtF,OAAO,EAAE,YAAY;MACrB,OAAO,EAAE,WAAW;MACpB,IAAI,EAAE,UAAU;MAChB,qBAAqB,EAAE,sCAAsC;MAC7D,mBAAmB,EAAE;IACvB;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":[]}
@@ -38,14 +38,17 @@ import { DatePicker, DateTimePicker } from "../inputs/DatePicker";
38
38
  import { ImageInput } from "../inputs/FileInputs";
39
39
  import { NumberInput } from "../inputs/NumberInput";
40
40
  import { Select } from "../inputs/Select";
41
+ import { resolveSelectMessages } from "../inputs/select-messages";
41
42
  import { TagsInput } from "../inputs/TagsInput";
42
43
  import { TextInput } from "../inputs/TextInput";
43
44
  import { resolveUiMessages } from "../intl/messages";
44
45
  import { dialogCore } from "./dialog-core";
46
+ import { resolvePromptMessages } from "./prompt-messages";
45
47
  const PHRASE_SLOT = "\u0000";
46
48
  const isEmpty = value => value === undefined || value === null || value === "" || Array.isArray(value) && value.length === 0;
47
49
  export const createFormState = schema => {
48
50
  const messages = resolveUiMessages();
51
+ const promptMessages = resolvePromptMessages();
49
52
  const [values, setValues] = createStore({});
50
53
  const [errors, setErrors] = createStore({});
51
54
  // Errors appear with the first submit and then follow every change. Before that, a check that fails mid-input,
@@ -64,18 +67,18 @@ export const createFormState = schema => {
64
67
  if (customError) return customError;
65
68
  }
66
69
  if (field.type === "text" && typeof value === "string" && value.length > 0) {
67
- if (field.minLength !== undefined && value.length < field.minLength) return messages.minCharacters({
70
+ if (field.minLength !== undefined && value.length < field.minLength) return promptMessages.minCharacters({
68
71
  count: field.minLength
69
72
  });
70
- if (field.maxLength !== undefined && value.length > field.maxLength) return messages.maxCharacters({
73
+ if (field.maxLength !== undefined && value.length > field.maxLength) return promptMessages.maxCharacters({
71
74
  count: field.maxLength
72
75
  });
73
76
  }
74
77
  if (field.type === "tags" && Array.isArray(value) && value.length > 0) {
75
- if (field.minTags !== undefined && value.length < field.minTags) return messages.minTags({
78
+ if (field.minTags !== undefined && value.length < field.minTags) return promptMessages.minTags({
76
79
  count: field.minTags
77
80
  });
78
- if (field.maxTags !== undefined && value.length > field.maxTags) return messages.maxTags({
81
+ if (field.maxTags !== undefined && value.length > field.maxTags) return promptMessages.maxTags({
79
82
  count: field.maxTags
80
83
  });
81
84
  }
@@ -438,14 +441,14 @@ const openSearchPrompt = (resolver, options) => dialogCore.open(close => {
438
441
  const searchError = createMemo(() => {
439
442
  const error = searchMutation.error();
440
443
  if (!error || error.name === "AbortError") return null;
441
- return error.message || resolveUiMessages().searchFailed;
444
+ return error.message || resolvePromptMessages().searchFailed;
442
445
  });
443
446
  const shouldShowResults = createMemo(() => {
444
447
  if (query().trim().length < minQueryLength) return false;
445
448
  return hasLoaded() || searchError() !== null || items().length > 0;
446
449
  });
447
450
  const emptyStateText = createMemo(() => {
448
- if (!hasLoaded()) return options?.emptyText ?? resolveUiMessages().typeToSearch;
451
+ if (!hasLoaded()) return options?.emptyText ?? resolveSelectMessages().typeToSearch;
449
452
  return options?.noResultsText ?? resolveUiMessages().noResults;
450
453
  });
451
454
  const {
@@ -628,11 +631,11 @@ export const prompts = {
628
631
  return options?.icon;
629
632
  },
630
633
  close: () => close(false)
631
- })), _$escape(content), _$escape(options?.cancelText || resolveUiMessages().cancel), _$ssrAttribute("data-variant", _$escape(options?.variant ?? "primary", true), false), _$escape(options?.confirmText || resolveUiMessages().confirm));
634
+ })), _$escape(content), _$escape(options?.cancelText || resolveUiMessages().cancel), _$ssrAttribute("data-variant", _$escape(options?.variant ?? "primary", true), false), _$escape(options?.confirmText || resolvePromptMessages().confirm));
632
635
  }
633
636
 
634
637
  // The catalog owns word order; the slot marks where the verbatim phrase is rendered as code.
635
- const [labelBefore, labelAfter] = resolveUiMessages().typeToConfirm({
638
+ const [labelBefore, labelAfter] = resolvePromptMessages().typeToConfirm({
636
639
  phrase: PHRASE_SLOT
637
640
  }).split(PHRASE_SLOT);
638
641
  const [confirmationValue, setConfirmationValue] = createSignal("");
@@ -660,7 +663,7 @@ export const prompts = {
660
663
  spellcheck: false,
661
664
  monospace: true,
662
665
  required: true
663
- })), _$escape(options?.cancelText || resolveUiMessages().cancel), _$ssrAttribute("data-variant", _$escape(options?.variant ?? "primary", true), false), _$ssrAttribute("disabled", !canConfirm(), true), _$escape(options?.confirmText || resolveUiMessages().confirm));
666
+ })), _$escape(options?.cancelText || resolveUiMessages().cancel), _$ssrAttribute("data-variant", _$escape(options?.variant ?? "primary", true), false), _$ssrAttribute("disabled", !canConfirm(), true), _$escape(options?.confirmText || resolvePromptMessages().confirm));
664
667
  }, {
665
668
  panelClassName: panelClass(options),
666
669
  contentClassName: contentClass(options?.surface),
@@ -668,7 +671,7 @@ export const prompts = {
668
671
  signal: options?.signal,
669
672
  cancelBehavior: options?.cancelBehavior,
670
673
  history: options?.history,
671
- ariaLabel: options?.ariaLabel ?? options?.title ?? resolveUiMessages().confirmation
674
+ ariaLabel: options?.ariaLabel ?? options?.title ?? resolvePromptMessages().confirmation
672
675
  });
673
676
  },
674
677
  prompt: promptText,
@@ -681,7 +684,7 @@ export const prompts = {
681
684
  contentClassName: contentClass(),
682
685
  signal: config.signal,
683
686
  cancelBehavior: config.cancelBehavior,
684
- ariaLabel: config.ariaLabel ?? config.title ?? resolveUiMessages().form
687
+ ariaLabel: config.ariaLabel ?? config.title ?? resolvePromptMessages().form
685
688
  })) ?? null,
686
689
  dialog: (component, options) => dialogCore.open(close => {
687
690
  const body = component(close);