@k2b/ui 0.20.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (595) hide show
  1. package/dist/browser/actions/Button.js +20 -31
  2. package/dist/browser/actions/Button.js.map +1 -1
  3. package/dist/browser/actions/ContextMenu.js +10 -4
  4. package/dist/browser/actions/ContextMenu.js.map +1 -1
  5. package/dist/browser/actions/CopyButton.js +10 -8
  6. package/dist/browser/actions/CopyButton.js.map +1 -1
  7. package/dist/browser/actions/FilterChip.js +3 -1
  8. package/dist/browser/actions/FilterChip.js.map +1 -1
  9. package/dist/browser/actions/GestureMenu.js +4 -0
  10. package/dist/browser/actions/GestureMenu.js.map +1 -1
  11. package/dist/browser/actions/SpotlightSearch.js +3 -1
  12. package/dist/browser/actions/SpotlightSearch.js.map +1 -1
  13. package/dist/browser/actions/filter-messages.js +20 -0
  14. package/dist/browser/actions/filter-messages.js.map +1 -0
  15. package/dist/browser/actions/spotlight-messages.js +16 -0
  16. package/dist/browser/actions/spotlight-messages.js.map +1 -0
  17. package/dist/browser/chat/ChatComposer.js +47 -41
  18. package/dist/browser/chat/ChatComposer.js.map +1 -1
  19. package/dist/browser/chat/ChatPrimitives.js +25 -23
  20. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  21. package/dist/browser/chat/ChatRoot.js +3 -3
  22. package/dist/browser/chat/ChatRoot.js.map +1 -1
  23. package/dist/browser/chat/ChatTimeline.js +12 -12
  24. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  25. package/dist/browser/chat/chat-messages.js +236 -0
  26. package/dist/browser/chat/chat-messages.js.map +1 -0
  27. package/dist/browser/content/Calendar.js +1960 -575
  28. package/dist/browser/content/Calendar.js.map +1 -1
  29. package/dist/browser/content/Chart.js +15 -8
  30. package/dist/browser/content/Chart.js.map +1 -1
  31. package/dist/browser/content/ChartExplorer.js +20 -12
  32. package/dist/browser/content/ChartExplorer.js.map +1 -1
  33. package/dist/browser/content/ChartExplorerControls.js +9 -7
  34. package/dist/browser/content/ChartExplorerControls.js.map +1 -1
  35. package/dist/browser/content/ChartFilterControls.js +4 -2
  36. package/dist/browser/content/ChartFilterControls.js.map +1 -1
  37. package/dist/browser/content/ChartSnapshotView.js +3 -3
  38. package/dist/browser/content/ChartSnapshotView.js.map +1 -1
  39. package/dist/browser/content/DataTable.js +68 -59
  40. package/dist/browser/content/DataTable.js.map +1 -1
  41. package/dist/browser/content/Docs.js +3 -1
  42. package/dist/browser/content/Docs.js.map +1 -1
  43. package/dist/browser/content/FileBrowser.js +30 -26
  44. package/dist/browser/content/FileBrowser.js.map +1 -1
  45. package/dist/browser/content/FileTree.js +9 -7
  46. package/dist/browser/content/FileTree.js.map +1 -1
  47. package/dist/browser/content/FileView.js +37 -28
  48. package/dist/browser/content/FileView.js.map +1 -1
  49. package/dist/browser/content/Lightbox.js +9 -7
  50. package/dist/browser/content/Lightbox.js.map +1 -1
  51. package/dist/browser/content/LogEntriesTable.js +3 -3
  52. package/dist/browser/content/LogEntriesTable.js.map +1 -1
  53. package/dist/browser/content/MessageRow.js +24 -22
  54. package/dist/browser/content/MessageRow.js.map +1 -1
  55. package/dist/browser/content/Pagination.js +7 -7
  56. package/dist/browser/content/Pagination.js.map +1 -1
  57. package/dist/browser/content/PdfPreview.js +15 -13
  58. package/dist/browser/content/PdfPreview.js.map +1 -1
  59. package/dist/browser/content/RangePicker.js +3 -1
  60. package/dist/browser/content/RangePicker.js.map +1 -1
  61. package/dist/browser/content/StructuredDataPreview.js +3 -1
  62. package/dist/browser/content/StructuredDataPreview.js.map +1 -1
  63. package/dist/browser/content/Timeline.js +13 -11
  64. package/dist/browser/content/Timeline.js.map +1 -1
  65. package/dist/browser/content/VideoPlayer.js +5 -5
  66. package/dist/browser/content/VideoPlayer.js.map +1 -1
  67. package/dist/browser/content/VirtualFeed.js +6 -4
  68. package/dist/browser/content/VirtualFeed.js.map +1 -1
  69. package/dist/browser/content/ZoomPanViewport.js +10 -7
  70. package/dist/browser/content/ZoomPanViewport.js.map +1 -1
  71. package/dist/browser/content/calendar-messages.js +121 -0
  72. package/dist/browser/content/calendar-messages.js.map +1 -0
  73. package/dist/browser/content/calendar-month-layout.js +108 -0
  74. package/dist/browser/content/calendar-month-layout.js.map +1 -0
  75. package/dist/browser/content/calendar-pointer.js +4 -3
  76. package/dist/browser/content/calendar-pointer.js.map +1 -1
  77. package/dist/browser/content/chart-messages.js +136 -0
  78. package/dist/browser/content/chart-messages.js.map +1 -0
  79. package/dist/browser/content/collection-selection.js +2 -0
  80. package/dist/browser/content/collection-selection.js.map +1 -1
  81. package/dist/browser/content/data-table-messages.js +24 -0
  82. package/dist/browser/content/data-table-messages.js.map +1 -0
  83. package/dist/browser/content/docs-messages.js +24 -0
  84. package/dist/browser/content/docs-messages.js.map +1 -0
  85. package/dist/browser/content/feed-messages.js +34 -0
  86. package/dist/browser/content/feed-messages.js.map +1 -0
  87. package/dist/browser/content/file-browser-messages.js +69 -0
  88. package/dist/browser/content/file-browser-messages.js.map +1 -0
  89. package/dist/browser/content/file-view-messages.js +64 -0
  90. package/dist/browser/content/file-view-messages.js.map +1 -0
  91. package/dist/browser/content/index.js.map +1 -1
  92. package/dist/browser/content/lightbox-messages.js +36 -0
  93. package/dist/browser/content/lightbox-messages.js.map +1 -0
  94. package/dist/browser/content/log-entries-messages.js +20 -0
  95. package/dist/browser/content/log-entries-messages.js.map +1 -0
  96. package/dist/browser/content/markdown-info-block-messages.js +24 -0
  97. package/dist/browser/content/markdown-info-block-messages.js.map +1 -0
  98. package/dist/browser/content/markdown-info-blocks.js +3 -3
  99. package/dist/browser/content/markdown-info-blocks.js.map +1 -1
  100. package/dist/browser/content/markdown-links.js +2 -2
  101. package/dist/browser/content/markdown-links.js.map +1 -1
  102. package/dist/browser/content/markdown-reference-messages.js +30 -0
  103. package/dist/browser/content/markdown-reference-messages.js.map +1 -0
  104. package/dist/browser/content/pagination-messages.js +38 -0
  105. package/dist/browser/content/pagination-messages.js.map +1 -0
  106. package/dist/browser/content/pdf-messages.js +43 -0
  107. package/dist/browser/content/pdf-messages.js.map +1 -0
  108. package/dist/browser/content/range-picker-messages.js +20 -0
  109. package/dist/browser/content/range-picker-messages.js.map +1 -0
  110. package/dist/browser/content/structured-data-messages.js +22 -0
  111. package/dist/browser/content/structured-data-messages.js.map +1 -0
  112. package/dist/browser/content/timeline-messages.js +62 -0
  113. package/dist/browser/content/timeline-messages.js.map +1 -0
  114. package/dist/browser/content/video-messages.js +24 -0
  115. package/dist/browser/content/video-messages.js.map +1 -0
  116. package/dist/browser/content/viewport-messages.js +28 -0
  117. package/dist/browser/content/viewport-messages.js.map +1 -0
  118. package/dist/browser/feedback/HoverPreview.js +34 -6
  119. package/dist/browser/feedback/HoverPreview.js.map +1 -1
  120. package/dist/browser/feedback/InstallGuide.js +18 -18
  121. package/dist/browser/feedback/InstallGuide.js.map +1 -1
  122. package/dist/browser/feedback/install-messages.js +104 -0
  123. package/dist/browser/feedback/install-messages.js.map +1 -0
  124. package/dist/browser/feedback/prompt-messages.js +65 -0
  125. package/dist/browser/feedback/prompt-messages.js.map +1 -0
  126. package/dist/browser/feedback/prompts.js +14 -11
  127. package/dist/browser/feedback/prompts.js.map +1 -1
  128. package/dist/browser/feedback/toast-messages.js +18 -0
  129. package/dist/browser/feedback/toast-messages.js.map +1 -0
  130. package/dist/browser/feedback/toast.js +4 -3
  131. package/dist/browser/feedback/toast.js.map +1 -1
  132. package/dist/browser/index.js +1 -1
  133. package/dist/browser/index.js.map +1 -1
  134. package/dist/browser/inputs/AutocompleteEditor.js +6 -4
  135. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
  136. package/dist/browser/inputs/AutocompleteSelect.js +10 -8
  137. package/dist/browser/inputs/AutocompleteSelect.js.map +1 -1
  138. package/dist/browser/inputs/ChoiceGroups.js +4 -0
  139. package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
  140. package/dist/browser/inputs/ChoiceInputs.js +5 -5
  141. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  142. package/dist/browser/inputs/Combobox.js +3 -1
  143. package/dist/browser/inputs/Combobox.js.map +1 -1
  144. package/dist/browser/inputs/DatePicker.js +46 -10
  145. package/dist/browser/inputs/DatePicker.js.map +1 -1
  146. package/dist/browser/inputs/FileDropTarget.js +6 -6
  147. package/dist/browser/inputs/FileDropTarget.js.map +1 -1
  148. package/dist/browser/inputs/FileInputs.js +30 -21
  149. package/dist/browser/inputs/FileInputs.js.map +1 -1
  150. package/dist/browser/inputs/MultiSelectInput.js +7 -5
  151. package/dist/browser/inputs/MultiSelectInput.js.map +1 -1
  152. package/dist/browser/inputs/NumberInput.js +4 -2
  153. package/dist/browser/inputs/NumberInput.js.map +1 -1
  154. package/dist/browser/inputs/QrScanner.js +5 -5
  155. package/dist/browser/inputs/QrScanner.js.map +1 -1
  156. package/dist/browser/inputs/Select.js +7 -5
  157. package/dist/browser/inputs/Select.js.map +1 -1
  158. package/dist/browser/inputs/SelectChip.js +3 -3
  159. package/dist/browser/inputs/SelectChip.js.map +1 -1
  160. package/dist/browser/inputs/SignatureInput.js +9 -3
  161. package/dist/browser/inputs/SignatureInput.js.map +1 -1
  162. package/dist/browser/inputs/SpecialInputs.js +4 -2
  163. package/dist/browser/inputs/SpecialInputs.js.map +1 -1
  164. package/dist/browser/inputs/TagEditor.js +8 -6
  165. package/dist/browser/inputs/TagEditor.js.map +1 -1
  166. package/dist/browser/inputs/TagsInput.js +5 -5
  167. package/dist/browser/inputs/TagsInput.js.map +1 -1
  168. package/dist/browser/inputs/TemplateEditor.js +5 -5
  169. package/dist/browser/inputs/TemplateEditor.js.map +1 -1
  170. package/dist/browser/inputs/TextInput.js +3 -1
  171. package/dist/browser/inputs/TextInput.js.map +1 -1
  172. package/dist/browser/inputs/completion-messages.js +24 -0
  173. package/dist/browser/inputs/completion-messages.js.map +1 -0
  174. package/dist/browser/inputs/date-picker.js +24 -0
  175. package/dist/browser/inputs/date-picker.js.map +1 -1
  176. package/dist/browser/inputs/file-drop-messages.js +63 -0
  177. package/dist/browser/inputs/file-drop-messages.js.map +1 -0
  178. package/dist/browser/inputs/file-drop.js.map +1 -1
  179. package/dist/browser/inputs/file-input-messages.js +60 -0
  180. package/dist/browser/inputs/file-input-messages.js.map +1 -0
  181. package/dist/browser/inputs/icon-messages.js +22 -0
  182. package/dist/browser/inputs/icon-messages.js.map +1 -0
  183. package/dist/browser/inputs/input-messages.js +38 -0
  184. package/dist/browser/inputs/input-messages.js.map +1 -0
  185. package/dist/browser/inputs/markdown/MarkdownEditor.js +10 -6
  186. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  187. package/dist/browser/inputs/markdown/Toolbar.js +13 -13
  188. package/dist/browser/inputs/markdown/Toolbar.js.map +1 -1
  189. package/dist/browser/inputs/markdown/editor-messages.js +43 -0
  190. package/dist/browser/inputs/markdown/editor-messages.js.map +1 -0
  191. package/dist/browser/inputs/markdown/toolbar-messages.js +40 -0
  192. package/dist/browser/inputs/markdown/toolbar-messages.js.map +1 -0
  193. package/dist/browser/inputs/qr-messages.js +26 -0
  194. package/dist/browser/inputs/qr-messages.js.map +1 -0
  195. package/dist/browser/inputs/select-messages.js +63 -0
  196. package/dist/browser/inputs/select-messages.js.map +1 -0
  197. package/dist/browser/inputs/tag-messages.js +44 -0
  198. package/dist/browser/inputs/tag-messages.js.map +1 -0
  199. package/dist/browser/inputs/template-messages.js +22 -0
  200. package/dist/browser/inputs/template-messages.js.map +1 -0
  201. package/dist/browser/internal/render-error-messages.js +20 -0
  202. package/dist/browser/internal/render-error-messages.js.map +1 -0
  203. package/dist/browser/internal/render-error.js +3 -1
  204. package/dist/browser/internal/render-error.js.map +1 -1
  205. package/dist/browser/internal/text-selection.js +101 -0
  206. package/dist/browser/internal/text-selection.js.map +1 -0
  207. package/dist/browser/intl/messages.js +12 -1155
  208. package/dist/browser/intl/messages.js.map +1 -1
  209. package/dist/browser/layout/AppWorkspace.js +561 -418
  210. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  211. package/dist/browser/layout/BottomSheet.js +6 -1
  212. package/dist/browser/layout/BottomSheet.js.map +1 -1
  213. package/dist/browser/layout/Discussion.js +8 -5
  214. package/dist/browser/layout/Discussion.js.map +1 -1
  215. package/dist/browser/layout/FloatingWindow.js +8 -5
  216. package/dist/browser/layout/FloatingWindow.js.map +1 -1
  217. package/dist/browser/layout/Navigation.js +7 -6
  218. package/dist/browser/layout/Navigation.js.map +1 -1
  219. package/dist/browser/layout/PageTitle.js +370 -0
  220. package/dist/browser/layout/PageTitle.js.map +1 -0
  221. package/dist/browser/layout/PanelDialog.js +8 -6
  222. package/dist/browser/layout/PanelDialog.js.map +1 -1
  223. package/dist/browser/layout/Panes.js +23 -15
  224. package/dist/browser/layout/Panes.js.map +1 -1
  225. package/dist/browser/layout/PullToRefresh.js +13 -4
  226. package/dist/browser/layout/PullToRefresh.js.map +1 -1
  227. package/dist/browser/layout/Settings.js +14 -12
  228. package/dist/browser/layout/Settings.js.map +1 -1
  229. package/dist/browser/layout/SettingsCollection.js +6 -5
  230. package/dist/browser/layout/SettingsCollection.js.map +1 -1
  231. package/dist/browser/layout/SettingsModal.js +3 -1
  232. package/dist/browser/layout/SettingsModal.js.map +1 -1
  233. package/dist/browser/layout/app-workspace-controller.js +743 -12
  234. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  235. package/dist/browser/layout/app-workspace-state.js +3 -2
  236. package/dist/browser/layout/app-workspace-state.js.map +1 -1
  237. package/dist/browser/layout/floating-window-messages.js +28 -0
  238. package/dist/browser/layout/floating-window-messages.js.map +1 -0
  239. package/dist/browser/layout/index.js +2 -0
  240. package/dist/browser/layout/index.js.map +1 -1
  241. package/dist/browser/layout/navigation-model.js.map +1 -1
  242. package/dist/browser/layout/page-title-controller.js +169 -0
  243. package/dist/browser/layout/page-title-controller.js.map +1 -0
  244. package/dist/browser/layout/panel-dialog-messages.js +20 -0
  245. package/dist/browser/layout/panel-dialog-messages.js.map +1 -0
  246. package/dist/browser/layout/panes-messages.js +48 -0
  247. package/dist/browser/layout/panes-messages.js.map +1 -0
  248. package/dist/browser/layout/refresh-messages.js +20 -0
  249. package/dist/browser/layout/refresh-messages.js.map +1 -0
  250. package/dist/browser/layout/settings-messages.js +54 -0
  251. package/dist/browser/layout/settings-messages.js.map +1 -0
  252. package/dist/browser/layout/workspace-messages.js +56 -0
  253. package/dist/browser/layout/workspace-messages.js.map +1 -0
  254. package/dist/browser/surfaces/Avatar.js +5 -5
  255. package/dist/browser/surfaces/Avatar.js.map +1 -1
  256. package/dist/browser/surfaces/ResourceCard.js +4 -2
  257. package/dist/browser/surfaces/ResourceCard.js.map +1 -1
  258. package/dist/browser/surfaces/Tag.js +3 -3
  259. package/dist/browser/surfaces/Tag.js.map +1 -1
  260. package/dist/browser/surfaces/avatar-messages.js +26 -0
  261. package/dist/browser/surfaces/avatar-messages.js.map +1 -0
  262. package/dist/browser/surfaces/resource-messages.js +26 -0
  263. package/dist/browser/surfaces/resource-messages.js.map +1 -0
  264. package/dist/browser/widgets/Widget.js +6 -0
  265. package/dist/browser/widgets/Widget.js.map +1 -1
  266. package/dist/ssr/actions/Button.js +21 -32
  267. package/dist/ssr/actions/Button.js.map +1 -1
  268. package/dist/ssr/actions/ContextMenu.js +7 -3
  269. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  270. package/dist/ssr/actions/CopyButton.js +9 -7
  271. package/dist/ssr/actions/CopyButton.js.map +1 -1
  272. package/dist/ssr/actions/FilterChip.js +3 -1
  273. package/dist/ssr/actions/FilterChip.js.map +1 -1
  274. package/dist/ssr/actions/GestureMenu.js +4 -0
  275. package/dist/ssr/actions/GestureMenu.js.map +1 -1
  276. package/dist/ssr/actions/SpotlightSearch.js +3 -1
  277. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  278. package/dist/ssr/actions/filter-messages.js +20 -0
  279. package/dist/ssr/actions/filter-messages.js.map +1 -0
  280. package/dist/ssr/actions/spotlight-messages.js +16 -0
  281. package/dist/ssr/actions/spotlight-messages.js.map +1 -0
  282. package/dist/ssr/chat/ChatComposer.js +47 -41
  283. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  284. package/dist/ssr/chat/ChatPrimitives.js +23 -21
  285. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  286. package/dist/ssr/chat/ChatRoot.js +3 -3
  287. package/dist/ssr/chat/ChatRoot.js.map +1 -1
  288. package/dist/ssr/chat/ChatTimeline.js +11 -11
  289. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  290. package/dist/ssr/chat/chat-messages.js +236 -0
  291. package/dist/ssr/chat/chat-messages.js.map +1 -0
  292. package/dist/ssr/content/Calendar.js +1232 -115
  293. package/dist/ssr/content/Calendar.js.map +1 -1
  294. package/dist/ssr/content/Chart.js +12 -5
  295. package/dist/ssr/content/Chart.js.map +1 -1
  296. package/dist/ssr/content/ChartExplorer.js +10 -8
  297. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  298. package/dist/ssr/content/ChartExplorerControls.js +9 -7
  299. package/dist/ssr/content/ChartExplorerControls.js.map +1 -1
  300. package/dist/ssr/content/ChartFilterControls.js +4 -2
  301. package/dist/ssr/content/ChartFilterControls.js.map +1 -1
  302. package/dist/ssr/content/ChartSnapshotView.js +3 -3
  303. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  304. package/dist/ssr/content/DataTable.js +10 -4
  305. package/dist/ssr/content/DataTable.js.map +1 -1
  306. package/dist/ssr/content/Docs.js +3 -1
  307. package/dist/ssr/content/Docs.js.map +1 -1
  308. package/dist/ssr/content/FileBrowser.js +30 -26
  309. package/dist/ssr/content/FileBrowser.js.map +1 -1
  310. package/dist/ssr/content/FileTree.js +9 -7
  311. package/dist/ssr/content/FileTree.js.map +1 -1
  312. package/dist/ssr/content/FileView.js +37 -28
  313. package/dist/ssr/content/FileView.js.map +1 -1
  314. package/dist/ssr/content/Lightbox.js +8 -6
  315. package/dist/ssr/content/Lightbox.js.map +1 -1
  316. package/dist/ssr/content/LogEntriesTable.js +3 -3
  317. package/dist/ssr/content/LogEntriesTable.js.map +1 -1
  318. package/dist/ssr/content/MessageRow.js +24 -22
  319. package/dist/ssr/content/MessageRow.js.map +1 -1
  320. package/dist/ssr/content/Pagination.js +6 -6
  321. package/dist/ssr/content/Pagination.js.map +1 -1
  322. package/dist/ssr/content/PdfPreview.js +15 -13
  323. package/dist/ssr/content/PdfPreview.js.map +1 -1
  324. package/dist/ssr/content/RangePicker.js +3 -1
  325. package/dist/ssr/content/RangePicker.js.map +1 -1
  326. package/dist/ssr/content/StructuredDataPreview.js +3 -1
  327. package/dist/ssr/content/StructuredDataPreview.js.map +1 -1
  328. package/dist/ssr/content/Timeline.js +13 -11
  329. package/dist/ssr/content/Timeline.js.map +1 -1
  330. package/dist/ssr/content/VideoPlayer.js +5 -5
  331. package/dist/ssr/content/VideoPlayer.js.map +1 -1
  332. package/dist/ssr/content/VirtualFeed.js +6 -4
  333. package/dist/ssr/content/VirtualFeed.js.map +1 -1
  334. package/dist/ssr/content/ZoomPanViewport.js +7 -4
  335. package/dist/ssr/content/ZoomPanViewport.js.map +1 -1
  336. package/dist/ssr/content/calendar-messages.js +121 -0
  337. package/dist/ssr/content/calendar-messages.js.map +1 -0
  338. package/dist/ssr/content/calendar-month-layout.js +108 -0
  339. package/dist/ssr/content/calendar-month-layout.js.map +1 -0
  340. package/dist/ssr/content/calendar-pointer.js +4 -3
  341. package/dist/ssr/content/calendar-pointer.js.map +1 -1
  342. package/dist/ssr/content/chart-messages.js +136 -0
  343. package/dist/ssr/content/chart-messages.js.map +1 -0
  344. package/dist/ssr/content/collection-selection.js +2 -0
  345. package/dist/ssr/content/collection-selection.js.map +1 -1
  346. package/dist/ssr/content/data-table-messages.js +24 -0
  347. package/dist/ssr/content/data-table-messages.js.map +1 -0
  348. package/dist/ssr/content/docs-messages.js +24 -0
  349. package/dist/ssr/content/docs-messages.js.map +1 -0
  350. package/dist/ssr/content/feed-messages.js +34 -0
  351. package/dist/ssr/content/feed-messages.js.map +1 -0
  352. package/dist/ssr/content/file-browser-messages.js +69 -0
  353. package/dist/ssr/content/file-browser-messages.js.map +1 -0
  354. package/dist/ssr/content/file-view-messages.js +64 -0
  355. package/dist/ssr/content/file-view-messages.js.map +1 -0
  356. package/dist/ssr/content/index.js.map +1 -1
  357. package/dist/ssr/content/lightbox-messages.js +36 -0
  358. package/dist/ssr/content/lightbox-messages.js.map +1 -0
  359. package/dist/ssr/content/log-entries-messages.js +20 -0
  360. package/dist/ssr/content/log-entries-messages.js.map +1 -0
  361. package/dist/ssr/content/markdown-info-block-messages.js +24 -0
  362. package/dist/ssr/content/markdown-info-block-messages.js.map +1 -0
  363. package/dist/ssr/content/markdown-info-blocks.js +3 -3
  364. package/dist/ssr/content/markdown-info-blocks.js.map +1 -1
  365. package/dist/ssr/content/markdown-links.js +2 -2
  366. package/dist/ssr/content/markdown-links.js.map +1 -1
  367. package/dist/ssr/content/markdown-reference-messages.js +30 -0
  368. package/dist/ssr/content/markdown-reference-messages.js.map +1 -0
  369. package/dist/ssr/content/pagination-messages.js +38 -0
  370. package/dist/ssr/content/pagination-messages.js.map +1 -0
  371. package/dist/ssr/content/pdf-messages.js +43 -0
  372. package/dist/ssr/content/pdf-messages.js.map +1 -0
  373. package/dist/ssr/content/range-picker-messages.js +20 -0
  374. package/dist/ssr/content/range-picker-messages.js.map +1 -0
  375. package/dist/ssr/content/structured-data-messages.js +22 -0
  376. package/dist/ssr/content/structured-data-messages.js.map +1 -0
  377. package/dist/ssr/content/timeline-messages.js +62 -0
  378. package/dist/ssr/content/timeline-messages.js.map +1 -0
  379. package/dist/ssr/content/video-messages.js +24 -0
  380. package/dist/ssr/content/video-messages.js.map +1 -0
  381. package/dist/ssr/content/viewport-messages.js +28 -0
  382. package/dist/ssr/content/viewport-messages.js.map +1 -0
  383. package/dist/ssr/feedback/HoverPreview.js +34 -6
  384. package/dist/ssr/feedback/HoverPreview.js.map +1 -1
  385. package/dist/ssr/feedback/InstallGuide.js +18 -18
  386. package/dist/ssr/feedback/InstallGuide.js.map +1 -1
  387. package/dist/ssr/feedback/install-messages.js +104 -0
  388. package/dist/ssr/feedback/install-messages.js.map +1 -0
  389. package/dist/ssr/feedback/prompt-messages.js +65 -0
  390. package/dist/ssr/feedback/prompt-messages.js.map +1 -0
  391. package/dist/ssr/feedback/prompts.js +14 -11
  392. package/dist/ssr/feedback/prompts.js.map +1 -1
  393. package/dist/ssr/feedback/toast-messages.js +18 -0
  394. package/dist/ssr/feedback/toast-messages.js.map +1 -0
  395. package/dist/ssr/feedback/toast.js +4 -3
  396. package/dist/ssr/feedback/toast.js.map +1 -1
  397. package/dist/ssr/index.js +1 -1
  398. package/dist/ssr/index.js.map +1 -1
  399. package/dist/ssr/inputs/AutocompleteEditor.js +5 -3
  400. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
  401. package/dist/ssr/inputs/AutocompleteSelect.js +10 -8
  402. package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -1
  403. package/dist/ssr/inputs/ChoiceGroups.js +4 -0
  404. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
  405. package/dist/ssr/inputs/ChoiceInputs.js +5 -5
  406. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  407. package/dist/ssr/inputs/Combobox.js +3 -1
  408. package/dist/ssr/inputs/Combobox.js.map +1 -1
  409. package/dist/ssr/inputs/DatePicker.js +34 -4
  410. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  411. package/dist/ssr/inputs/FileDropTarget.js +6 -6
  412. package/dist/ssr/inputs/FileDropTarget.js.map +1 -1
  413. package/dist/ssr/inputs/FileInputs.js +29 -20
  414. package/dist/ssr/inputs/FileInputs.js.map +1 -1
  415. package/dist/ssr/inputs/MultiSelectInput.js +7 -5
  416. package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
  417. package/dist/ssr/inputs/NumberInput.js +4 -2
  418. package/dist/ssr/inputs/NumberInput.js.map +1 -1
  419. package/dist/ssr/inputs/QrScanner.js +4 -4
  420. package/dist/ssr/inputs/QrScanner.js.map +1 -1
  421. package/dist/ssr/inputs/Select.js +7 -5
  422. package/dist/ssr/inputs/Select.js.map +1 -1
  423. package/dist/ssr/inputs/SelectChip.js +3 -3
  424. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  425. package/dist/ssr/inputs/SignatureInput.js +9 -3
  426. package/dist/ssr/inputs/SignatureInput.js.map +1 -1
  427. package/dist/ssr/inputs/SpecialInputs.js +4 -2
  428. package/dist/ssr/inputs/SpecialInputs.js.map +1 -1
  429. package/dist/ssr/inputs/TagEditor.js +8 -6
  430. package/dist/ssr/inputs/TagEditor.js.map +1 -1
  431. package/dist/ssr/inputs/TagsInput.js +5 -5
  432. package/dist/ssr/inputs/TagsInput.js.map +1 -1
  433. package/dist/ssr/inputs/TemplateEditor.js +5 -5
  434. package/dist/ssr/inputs/TemplateEditor.js.map +1 -1
  435. package/dist/ssr/inputs/TextInput.js +3 -1
  436. package/dist/ssr/inputs/TextInput.js.map +1 -1
  437. package/dist/ssr/inputs/completion-messages.js +24 -0
  438. package/dist/ssr/inputs/completion-messages.js.map +1 -0
  439. package/dist/ssr/inputs/date-picker.js +24 -0
  440. package/dist/ssr/inputs/date-picker.js.map +1 -1
  441. package/dist/ssr/inputs/file-drop-messages.js +63 -0
  442. package/dist/ssr/inputs/file-drop-messages.js.map +1 -0
  443. package/dist/ssr/inputs/file-drop.js.map +1 -1
  444. package/dist/ssr/inputs/file-input-messages.js +60 -0
  445. package/dist/ssr/inputs/file-input-messages.js.map +1 -0
  446. package/dist/ssr/inputs/icon-messages.js +22 -0
  447. package/dist/ssr/inputs/icon-messages.js.map +1 -0
  448. package/dist/ssr/inputs/input-messages.js +38 -0
  449. package/dist/ssr/inputs/input-messages.js.map +1 -0
  450. package/dist/ssr/inputs/markdown/MarkdownEditor.js +9 -5
  451. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  452. package/dist/ssr/inputs/markdown/Toolbar.js +13 -13
  453. package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -1
  454. package/dist/ssr/inputs/markdown/editor-messages.js +43 -0
  455. package/dist/ssr/inputs/markdown/editor-messages.js.map +1 -0
  456. package/dist/ssr/inputs/markdown/toolbar-messages.js +40 -0
  457. package/dist/ssr/inputs/markdown/toolbar-messages.js.map +1 -0
  458. package/dist/ssr/inputs/qr-messages.js +26 -0
  459. package/dist/ssr/inputs/qr-messages.js.map +1 -0
  460. package/dist/ssr/inputs/select-messages.js +63 -0
  461. package/dist/ssr/inputs/select-messages.js.map +1 -0
  462. package/dist/ssr/inputs/tag-messages.js +44 -0
  463. package/dist/ssr/inputs/tag-messages.js.map +1 -0
  464. package/dist/ssr/inputs/template-messages.js +22 -0
  465. package/dist/ssr/inputs/template-messages.js.map +1 -0
  466. package/dist/ssr/internal/render-error-messages.js +20 -0
  467. package/dist/ssr/internal/render-error-messages.js.map +1 -0
  468. package/dist/ssr/internal/render-error.js +3 -1
  469. package/dist/ssr/internal/render-error.js.map +1 -1
  470. package/dist/ssr/internal/text-selection.js +101 -0
  471. package/dist/ssr/internal/text-selection.js.map +1 -0
  472. package/dist/ssr/intl/messages.js +12 -1155
  473. package/dist/ssr/intl/messages.js.map +1 -1
  474. package/dist/ssr/layout/AppWorkspace.js +203 -96
  475. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  476. package/dist/ssr/layout/BottomSheet.js +1 -0
  477. package/dist/ssr/layout/BottomSheet.js.map +1 -1
  478. package/dist/ssr/layout/Discussion.js +8 -5
  479. package/dist/ssr/layout/Discussion.js.map +1 -1
  480. package/dist/ssr/layout/FloatingWindow.js +8 -5
  481. package/dist/ssr/layout/FloatingWindow.js.map +1 -1
  482. package/dist/ssr/layout/Navigation.js +6 -5
  483. package/dist/ssr/layout/Navigation.js.map +1 -1
  484. package/dist/ssr/layout/PageTitle.js +253 -0
  485. package/dist/ssr/layout/PageTitle.js.map +1 -0
  486. package/dist/ssr/layout/PanelDialog.js +8 -6
  487. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  488. package/dist/ssr/layout/Panes.js +22 -14
  489. package/dist/ssr/layout/Panes.js.map +1 -1
  490. package/dist/ssr/layout/PullToRefresh.js +13 -4
  491. package/dist/ssr/layout/PullToRefresh.js.map +1 -1
  492. package/dist/ssr/layout/Settings.js +14 -12
  493. package/dist/ssr/layout/Settings.js.map +1 -1
  494. package/dist/ssr/layout/SettingsCollection.js +6 -5
  495. package/dist/ssr/layout/SettingsCollection.js.map +1 -1
  496. package/dist/ssr/layout/SettingsModal.js +3 -1
  497. package/dist/ssr/layout/SettingsModal.js.map +1 -1
  498. package/dist/ssr/layout/app-workspace-controller.js +743 -12
  499. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  500. package/dist/ssr/layout/app-workspace-state.js +3 -2
  501. package/dist/ssr/layout/app-workspace-state.js.map +1 -1
  502. package/dist/ssr/layout/floating-window-messages.js +28 -0
  503. package/dist/ssr/layout/floating-window-messages.js.map +1 -0
  504. package/dist/ssr/layout/index.js +2 -0
  505. package/dist/ssr/layout/index.js.map +1 -1
  506. package/dist/ssr/layout/navigation-model.js.map +1 -1
  507. package/dist/ssr/layout/page-title-controller.js +169 -0
  508. package/dist/ssr/layout/page-title-controller.js.map +1 -0
  509. package/dist/ssr/layout/panel-dialog-messages.js +20 -0
  510. package/dist/ssr/layout/panel-dialog-messages.js.map +1 -0
  511. package/dist/ssr/layout/panes-messages.js +48 -0
  512. package/dist/ssr/layout/panes-messages.js.map +1 -0
  513. package/dist/ssr/layout/refresh-messages.js +20 -0
  514. package/dist/ssr/layout/refresh-messages.js.map +1 -0
  515. package/dist/ssr/layout/settings-messages.js +54 -0
  516. package/dist/ssr/layout/settings-messages.js.map +1 -0
  517. package/dist/ssr/layout/workspace-messages.js +56 -0
  518. package/dist/ssr/layout/workspace-messages.js.map +1 -0
  519. package/dist/ssr/surfaces/Avatar.js +5 -5
  520. package/dist/ssr/surfaces/Avatar.js.map +1 -1
  521. package/dist/ssr/surfaces/ResourceCard.js +4 -2
  522. package/dist/ssr/surfaces/ResourceCard.js.map +1 -1
  523. package/dist/ssr/surfaces/Tag.js +3 -3
  524. package/dist/ssr/surfaces/Tag.js.map +1 -1
  525. package/dist/ssr/surfaces/avatar-messages.js +26 -0
  526. package/dist/ssr/surfaces/avatar-messages.js.map +1 -0
  527. package/dist/ssr/surfaces/resource-messages.js +26 -0
  528. package/dist/ssr/surfaces/resource-messages.js.map +1 -0
  529. package/dist/ssr/widgets/Widget.js +6 -0
  530. package/dist/ssr/widgets/Widget.js.map +1 -1
  531. package/dist/styles.css +1 -1
  532. package/dist/types/actions/GestureMenu.d.ts +2 -0
  533. package/dist/types/actions/filter-messages.d.ts +8 -0
  534. package/dist/types/actions/spotlight-messages.d.ts +8 -0
  535. package/dist/types/chat/chat-messages.d.ts +116 -0
  536. package/dist/types/content/Calendar.d.ts +32 -0
  537. package/dist/types/content/DataTable.d.ts +2 -0
  538. package/dist/types/content/FileView.d.ts +0 -10
  539. package/dist/types/content/calendar-messages.d.ts +60 -0
  540. package/dist/types/content/calendar-month-layout.d.ts +52 -0
  541. package/dist/types/content/chart-messages.d.ts +32 -0
  542. package/dist/types/content/data-table-messages.d.ts +10 -0
  543. package/dist/types/content/docs-messages.d.ts +10 -0
  544. package/dist/types/content/feed-messages.d.ts +15 -0
  545. package/dist/types/content/file-browser-messages.d.ts +33 -0
  546. package/dist/types/content/file-view-messages.d.ts +30 -0
  547. package/dist/types/content/index.d.ts +1 -1
  548. package/dist/types/content/lightbox-messages.d.ts +16 -0
  549. package/dist/types/content/log-entries-messages.d.ts +8 -0
  550. package/dist/types/content/markdown-info-block-messages.d.ts +12 -0
  551. package/dist/types/content/markdown-reference-messages.d.ts +15 -0
  552. package/dist/types/content/pagination-messages.d.ts +17 -0
  553. package/dist/types/content/pdf-messages.d.ts +20 -0
  554. package/dist/types/content/range-picker-messages.d.ts +8 -0
  555. package/dist/types/content/structured-data-messages.d.ts +9 -0
  556. package/dist/types/content/timeline-messages.d.ts +29 -0
  557. package/dist/types/content/video-messages.d.ts +10 -0
  558. package/dist/types/content/viewport-messages.d.ts +12 -0
  559. package/dist/types/feedback/install-messages.d.ts +50 -0
  560. package/dist/types/feedback/prompt-messages.d.ts +31 -0
  561. package/dist/types/feedback/toast-messages.d.ts +9 -0
  562. package/dist/types/index.d.ts +1 -0
  563. package/dist/types/inputs/completion-messages.d.ts +10 -0
  564. package/dist/types/inputs/date-picker.d.ts +7 -0
  565. package/dist/types/inputs/file-drop-messages.d.ts +30 -0
  566. package/dist/types/inputs/file-drop.d.ts +3 -3
  567. package/dist/types/inputs/file-input-messages.d.ts +28 -0
  568. package/dist/types/inputs/icon-messages.d.ts +9 -0
  569. package/dist/types/inputs/input-messages.d.ts +17 -0
  570. package/dist/types/inputs/markdown/editor-messages.d.ts +20 -0
  571. package/dist/types/inputs/markdown/toolbar-messages.d.ts +18 -0
  572. package/dist/types/inputs/qr-messages.d.ts +11 -0
  573. package/dist/types/inputs/select-messages.d.ts +30 -0
  574. package/dist/types/inputs/tag-messages.d.ts +20 -0
  575. package/dist/types/inputs/template-messages.d.ts +9 -0
  576. package/dist/types/internal/render-error-messages.d.ts +8 -0
  577. package/dist/types/internal/text-selection.d.ts +18 -0
  578. package/dist/types/intl/messages.d.ts +6 -544
  579. package/dist/types/layout/AppWorkspace.d.ts +19 -4
  580. package/dist/types/layout/PageTitle.d.ts +64 -0
  581. package/dist/types/layout/app-workspace-controller.d.ts +4 -0
  582. package/dist/types/layout/app-workspace-state.d.ts +3 -2
  583. package/dist/types/layout/floating-window-messages.d.ts +12 -0
  584. package/dist/types/layout/index.d.ts +3 -0
  585. package/dist/types/layout/navigation-model.d.ts +7 -0
  586. package/dist/types/layout/page-title-controller.d.ts +13 -0
  587. package/dist/types/layout/panel-dialog-messages.d.ts +8 -0
  588. package/dist/types/layout/panes-messages.d.ts +22 -0
  589. package/dist/types/layout/refresh-messages.d.ts +8 -0
  590. package/dist/types/layout/settings-messages.d.ts +25 -0
  591. package/dist/types/layout/workspace-messages.d.ts +26 -0
  592. package/dist/types/surfaces/avatar-messages.d.ts +11 -0
  593. package/dist/types/surfaces/resource-messages.d.ts +11 -0
  594. package/dist/types/widgets/Widget.d.ts +5 -1
  595. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["actions/GestureMenu.tsx"],"sourcesContent":["import { createSignal, type JSX, onCleanup, onMount, Show } from \"solid-js\";\nimport { dialogCore } from \"../feedback/dialog-core\";\nimport { LocaleProvider, useLocale } from \"../intl/locale\";\nimport BottomSheet, { bottomSheetOptions } from \"../layout/BottomSheet\";\nimport { ContextMenu } from \"./ContextMenu\";\nimport {\n type DropdownAction,\n type DropdownActionBase,\n type DropdownChoice,\n DropdownItems,\n type DropdownSection,\n focusRowSegment,\n} from \"./Dropdown\";\n\n/** A finger held this long without moving opens the menu, as the platforms' own long press does. */\nconst LONG_PRESS_MS = 500;\n/** A second tap that starts this soon after the first ended makes a double tap. */\nconst DOUBLE_TAP_MS = 300;\n/** The second tap lands at most this far from the first. */\nconst DOUBLE_TAP_DISTANCE = 32;\n/** Movement up to this is still a tap or a long press. */\nconst SLOP = 10;\n/** A swipe must be this many times wider than tall; anything steeper belongs to the page's scrolling. */\nconst SWIPE_RATIO = 1.5;\n/** Travel at which a released swipe runs its action. */\nconst SWIPE_THRESHOLD = 64;\n/** The content follows the finger up to the threshold, then at a quarter of its travel, up to this. */\nconst SWIPE_MAX = 96;\nconst SWIPE_RESISTANCE = 0.25;\n/** Swipes do not start this close to the screen's side edges, where the system's back and forward gestures are. */\nconst EDGE = 20;\n/** Duration of the snap back in `.k2b-gesture-menu[data-settling]`. */\nconst SETTLE_MS = 160;\n\n/**\n * Gestures never start on these elements: links, controls, fields, code blocks, and anything marked\n * `data-gesture-ignore` keep their own touch and mouse behavior.\n */\nconst IGNORE = [\n \"a[href]\",\n \"button\",\n \"input\",\n \"textarea\",\n \"select\",\n \"summary\",\n \"label\",\n \"audio\",\n \"video\",\n \"pre\",\n \"[contenteditable]:not([contenteditable='false'])\",\n \"[role='button']\",\n \"[role='link']\",\n \"[role='checkbox']\",\n \"[role='switch']\",\n \"[role='slider']\",\n \"[role='tab']\",\n \"[role^='menuitem']\",\n \"[data-gesture-ignore]\",\n].join(\", \");\n\nexport type GestureKind = \"swipe-right\" | \"swipe-left\" | \"double-tap\";\n\n/** A menu action that a gesture runs as well. */\nexport type GestureMenuAction = DropdownActionBase & {\n action: () => void;\n /** The gesture that runs this action. Give each gesture to at most one item; a disabled item disables its gesture. */\n gesture?: GestureKind;\n};\n\nexport type GestureMenuSection = Omit<DropdownSection, \"items\"> & {\n items: readonly (GestureMenuAction | DropdownAction | DropdownChoice)[];\n};\n\nexport type GestureMenuItem = GestureMenuAction | DropdownAction | DropdownChoice | GestureMenuSection;\n\nexport type GestureMenuProps = {\n /**\n * The menu. A long press opens it as a bottom sheet, a right-click, the Context Menu key, or Shift+F10 as a menu.\n * An item with `gesture` is also run by that gesture, so every gesture has its entry here.\n */\n items: readonly GestureMenuItem[];\n /** Names the element and its menu, for example \"Message from Nora, 10:42\". */\n label: string;\n children: JSX.Element;\n /** Shown above the menu in the long-press sheet, for example a row of quick reactions. `close` closes the sheet. */\n sheetTop?: (close: () => void) => JSX.Element;\n /** Tab order of the element. A list that moves focus between its rows itself passes -1. */\n tabIndex?: number;\n class?: string;\n};\n\ntype SwipeDirection = \"right\" | \"left\";\n\ntype Swipe = {\n direction: SwipeDirection;\n icon?: string;\n /** How far the content is moved, in pixels; always 0 with reduced motion. */\n offset: number;\n /** Travel relative to the threshold, from 0 to 1. */\n progress: number;\n armed: boolean;\n settling: boolean;\n};\n\ntype Press = {\n id: number;\n x: number;\n y: number;\n timer?: ReturnType<typeof setTimeout>;\n /** The finger left the slop: no tap or long press any more. */\n moved: boolean;\n /** The long press opened the sheet. */\n long: boolean;\n /** The press started soon after a tap nearby. */\n second: boolean;\n /** The press started at a side edge of the screen. */\n edge: boolean;\n direction?: SwipeDirection;\n};\n\ntype Entry = GestureMenuAction | DropdownAction | DropdownChoice;\n\nconst gestureAction = (items: readonly GestureMenuItem[], kind: GestureKind): GestureMenuAction | undefined => {\n for (const item of items)\n for (const entry of \"items\" in item ? item.items : [item])\n if (\"gesture\" in entry && entry.gesture === kind) return entry.disabled ? undefined : entry;\n return undefined;\n};\n\nconst swipeKind = (direction: SwipeDirection): GestureKind => (direction === \"right\" ? \"swipe-right\" : \"swipe-left\");\n\n/**\n * The sheet's items hand their action to `run` instead of running it while the sheet closes: `dialogCore` settles the\n * sheet after it left the history, and only then may an action navigate or open the next dialog. A choice that keeps\n * the menu open runs at once.\n */\nconst afterClose = (items: readonly GestureMenuItem[], run: (action: () => void) => void): GestureMenuItem[] => {\n const entry = (item: Entry): Entry => {\n const action = item.action;\n if (!action || (\"choice\" in item && item.closeOnSelect === false)) return item;\n return { ...item, action: () => run(action) };\n };\n return items.map((item) => (\"items\" in item ? { ...item, items: item.items.map(entry) } : entry(item)));\n};\n\nconst reducedMotion = () => typeof matchMedia === \"function\" && matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\nconst menuItems = (menu: HTMLElement): HTMLElement[] =>\n Array.from(menu.querySelectorAll<HTMLElement>(\"[role^='menuitem']:not([aria-disabled='true'])\"));\n\n/**\n * The menu inside the long-press sheet: the same items, at touch size, with arrow keys for a connected keyboard. Focus\n * starts on the sheet itself, which shows no ring on a phone; the first arrow key moves it into the menu.\n */\nfunction SheetMenu(props: { items: readonly GestureMenuItem[]; label: string; close: () => void; dialog: HTMLDialogElement }): JSX.Element {\n let menu!: HTMLDivElement;\n const focus = (index: number) => {\n const items = menuItems(menu);\n items[(index + items.length) % items.length]?.focus();\n };\n const onKeyDown = (event: KeyboardEvent) => {\n const items = menuItems(menu);\n const current = items.indexOf(document.activeElement as HTMLElement);\n if (event.key === \"ArrowDown\") focus(current + 1);\n else if (event.key === \"ArrowUp\") focus(current < 0 ? -1 : current - 1);\n else if (event.key === \"Home\" || event.key === \"End\") focus(event.key === \"Home\" ? 0 : -1);\n else if (!focusRowSegment(items, event.key)) return;\n event.preventDefault();\n };\n // Keys pressed on the sheet itself, while it is the top level of the shared dialog.\n const onSheetKeyDown = (event: KeyboardEvent) => {\n if (event.target === props.dialog && props.dialog.lastElementChild?.contains(menu)) onKeyDown(event);\n };\n onMount(() => {\n props.dialog.addEventListener(\"keydown\", onSheetKeyDown);\n onCleanup(() => props.dialog.removeEventListener(\"keydown\", onSheetKeyDown));\n });\n return (\n <div ref={menu} class=\"k2b-gesture-menu__sheet-menu\" role=\"menu\" aria-label={props.label} onKeyDown={onKeyDown}>\n <DropdownItems items={props.items} close={() => props.close()} />\n </div>\n );\n}\n\n/**\n * Touch gestures for an element, each the shortcut of an entry in its menu: a horizontal swipe, a double tap, and a\n * long press that opens the whole menu as a `BottomSheet`. A mouse double-click runs the double-tap action; a\n * right-click and the keyboard open the menu beside the element. Vertical scrolling never turns into a swipe.\n */\nexport function GestureMenu(props: GestureMenuProps): JSX.Element {\n const locale = useLocale();\n const [swipe, setSwipe] = createSignal<Swipe>();\n let surface!: HTMLDivElement;\n let press: Press | undefined;\n let lastTap: { x: number; y: number; at: number } | undefined;\n let lastPointer = \"mouse\";\n /**\n * The touch or pen press that just ended did something: its `touchend` is cancelled, so no click or mouse events\n * follow, and a pen's click, which comes without touch events, is cancelled itself.\n */\n let consumed = false;\n let sheetOpen = false;\n /** Closes an open sheet when the element goes, for example when its message is deleted. */\n const disposed = new AbortController();\n let reduced = false;\n let settleTimer: ReturnType<typeof setTimeout> | undefined;\n\n const active = () => props.items.length > 0;\n const action = (kind: GestureKind) => gestureAction(props.items, kind);\n const touchAction = () => (action(\"swipe-right\") || action(\"swipe-left\") ? \"swipe\" : action(\"double-tap\") ? \"tap\" : undefined);\n\n /** Whether the event started on something with a meaning of its own, inside this element. */\n const ignored = (target: EventTarget | null) => {\n const found = target instanceof Element ? target.closest(IGNORE) : null;\n return found !== null && found !== surface && surface.contains(found);\n };\n\n const openSheet = () => {\n if (sheetOpen || !active()) return;\n sheetOpen = true;\n const current = locale();\n let chosen: (() => void) | undefined;\n const choose = (action: () => void) => {\n chosen = action;\n };\n void dialogCore\n .open<void>(\n (close, context) => (\n <LocaleProvider locale={current}>\n <BottomSheet onDismiss={context.requestDismiss}>\n <BottomSheet.Body>\n {props.sheetTop?.(() => close())}\n <SheetMenu items={afterClose(props.items, choose)} label={props.label} close={() => close()} dialog={context.dialog} />\n </BottomSheet.Body>\n </BottomSheet>\n </LocaleProvider>\n ),\n { ...bottomSheetOptions, ariaLabel: props.label, history: true, signal: disposed.signal },\n )\n .then(() => chosen?.())\n .finally(() => {\n sheetOpen = false;\n });\n };\n\n /** Another pointer that goes down anywhere while a finger presses, as in a pinch, ends the gesture. */\n const onOtherPointer = (event: PointerEvent) => {\n if (!press || event.pointerId === press.id) return;\n if (press.direction) settle();\n endPress();\n };\n\n const endPress = () => {\n clearTimeout(press?.timer);\n press = undefined;\n document.removeEventListener(\"pointerdown\", onOtherPointer, true);\n delete surface.dataset.pressing;\n };\n\n const settle = () => {\n const current = swipe();\n if (!current) return;\n clearTimeout(settleTimer);\n if (reduced || current.offset === 0) {\n setSwipe(undefined);\n return;\n }\n setSwipe({ ...current, offset: 0, progress: 0, armed: false, settling: true });\n settleTimer = setTimeout(() => setSwipe(undefined), SETTLE_MS);\n };\n\n const moveSwipe = (current: Press, direction: SwipeDirection, dx: number) => {\n const travel = Math.max(0, direction === \"right\" ? dx : -dx);\n const moved = travel <= SWIPE_THRESHOLD ? travel : SWIPE_THRESHOLD + (travel - SWIPE_THRESHOLD) * SWIPE_RESISTANCE;\n const offset = reduced ? 0 : Math.min(SWIPE_MAX, moved) * (direction === \"right\" ? 1 : -1);\n current.direction = direction;\n setSwipe({\n direction,\n icon: action(swipeKind(direction))?.icon,\n offset,\n progress: Math.min(1, travel / SWIPE_THRESHOLD),\n armed: travel >= SWIPE_THRESHOLD,\n settling: false,\n });\n };\n\n const longPress = () => {\n if (!press) return;\n press.long = true;\n lastTap = undefined;\n openSheet();\n };\n\n const onPointerDown = (event: PointerEvent) => {\n lastPointer = event.pointerType;\n consumed = false;\n // Any press in between, on a link, with a mouse, or with another finger, ends a pending double tap.\n const previous = lastTap;\n lastTap = undefined;\n // Another finger ends the gesture through `onOtherPointer` and starts none.\n if (event.pointerType === \"mouse\" || !event.isPrimary) return;\n endPress();\n if (!active() || ignored(event.target)) return;\n const second =\n previous !== undefined &&\n performance.now() - previous.at <= DOUBLE_TAP_MS &&\n Math.hypot(event.clientX - previous.x, event.clientY - previous.y) <= DOUBLE_TAP_DISTANCE;\n press = {\n id: event.pointerId,\n x: event.clientX,\n y: event.clientY,\n moved: false,\n long: false,\n second,\n edge: event.clientX < EDGE || event.clientX > window.innerWidth - EDGE,\n timer: setTimeout(longPress, LONG_PRESS_MS),\n };\n document.addEventListener(\"pointerdown\", onOtherPointer, true);\n // Hybrid devices keep text selection for the mouse; a finger on the element selects nothing.\n surface.dataset.pressing = \"\";\n };\n\n const onPointerMove = (event: PointerEvent) => {\n const current = press;\n if (!current || event.pointerId !== current.id || current.long) return;\n const dx = event.clientX - current.x;\n const dy = event.clientY - current.y;\n if (current.direction) {\n moveSwipe(current, current.direction, dx);\n return;\n }\n if (current.moved || Math.hypot(dx, dy) < SLOP) return;\n current.moved = true;\n clearTimeout(current.timer);\n if (current.edge || Math.abs(dx) < Math.abs(dy) * SWIPE_RATIO) return;\n const direction: SwipeDirection = dx > 0 ? \"right\" : \"left\";\n if (!action(swipeKind(direction))) return;\n clearTimeout(settleTimer);\n reduced = reducedMotion();\n moveSwipe(current, direction, dx);\n };\n\n const onPointerUp = (event: PointerEvent) => {\n const current = press;\n if (!current || event.pointerId !== current.id) return;\n endPress();\n if (current.long) {\n consumed = true;\n return;\n }\n if (current.direction) {\n // Where the finger lifts decides, and the item as it is now.\n moveSwipe(current, current.direction, event.clientX - current.x);\n const swipeAction = swipe()?.armed ? action(swipeKind(current.direction)) : undefined;\n settle();\n if (swipeAction) {\n consumed = true;\n swipeAction.action();\n }\n return;\n }\n if (current.moved) return;\n const doubleTap = action(\"double-tap\");\n if (!doubleTap) return;\n if (current.second) {\n consumed = true;\n doubleTap.action();\n return;\n }\n lastTap = { x: event.clientX, y: event.clientY, at: performance.now() };\n };\n\n // The browser took the touch, for example to scroll the page.\n const onPointerCancel = (event: PointerEvent) => {\n if (!press || event.pointerId !== press.id) return;\n if (press.direction) settle();\n endPress();\n lastTap = undefined;\n };\n\n const onTouchEnd = (event: TouchEvent) => {\n if (!consumed) return;\n consumed = false;\n if (event.cancelable) event.preventDefault();\n };\n\n // A pen sends no touch events; the click after its gesture is cancelled here. A keyboard's click has no detail.\n const onClick = (event: MouseEvent) => {\n if (!consumed || event.detail === 0) return;\n consumed = false;\n event.preventDefault();\n event.stopPropagation();\n };\n\n const onContextMenu = (event: MouseEvent) => {\n // Without items the element has no menu, and the browser keeps its own.\n if (!active()) return;\n // Links, fields, and code keep the browser's own menu.\n if (ignored(event.target)) {\n event.stopPropagation();\n return;\n }\n // A mouse or the keyboard opens the menu beside the element through ContextMenu.\n if (!press && !(\"pointerType\" in event && (event.pointerType === \"touch\" || event.pointerType === \"pen\"))) return;\n // Android and touch screens report a long press as a context-menu event, sometimes before the timer.\n event.preventDefault();\n event.stopPropagation();\n if (press && !press.long && !press.moved) {\n clearTimeout(press.timer);\n longPress();\n }\n };\n\n // The second press of a mouse double-click would select a word; in this element it runs the double-tap action.\n const onMouseDown = (event: MouseEvent) => {\n if (event.button === 0 && event.detail >= 2 && lastPointer === \"mouse\" && action(\"double-tap\") && !ignored(event.target))\n event.preventDefault();\n };\n\n const onDoubleClick = (event: MouseEvent) => {\n if (lastPointer !== \"mouse\" || ignored(event.target)) return;\n const doubleTap = action(\"double-tap\");\n if (!doubleTap) return;\n event.preventDefault();\n doubleTap.action();\n };\n\n onMount(() => {\n surface.addEventListener(\"pointerdown\", onPointerDown);\n surface.addEventListener(\"pointermove\", onPointerMove);\n surface.addEventListener(\"pointerup\", onPointerUp);\n surface.addEventListener(\"pointercancel\", onPointerCancel);\n surface.addEventListener(\"touchend\", onTouchEnd, { passive: false });\n surface.addEventListener(\"click\", onClick, true);\n surface.addEventListener(\"contextmenu\", onContextMenu);\n surface.addEventListener(\"mousedown\", onMouseDown);\n surface.addEventListener(\"dblclick\", onDoubleClick);\n onCleanup(() => {\n disposed.abort();\n endPress();\n clearTimeout(settleTimer);\n surface.removeEventListener(\"pointerdown\", onPointerDown);\n surface.removeEventListener(\"pointermove\", onPointerMove);\n surface.removeEventListener(\"pointerup\", onPointerUp);\n surface.removeEventListener(\"pointercancel\", onPointerCancel);\n surface.removeEventListener(\"touchend\", onTouchEnd);\n surface.removeEventListener(\"click\", onClick, true);\n surface.removeEventListener(\"contextmenu\", onContextMenu);\n surface.removeEventListener(\"mousedown\", onMouseDown);\n surface.removeEventListener(\"dblclick\", onDoubleClick);\n });\n });\n\n return (\n <ContextMenu items={props.items} label={props.label} tabIndex={props.tabIndex} disabled={!active()} class={props.class}>\n <div\n ref={surface}\n class=\"k2b-gesture-menu\"\n data-active={active() ? \"\" : undefined}\n data-touch={touchAction()}\n data-swipe={swipe()?.direction}\n data-armed={swipe()?.armed ? \"\" : undefined}\n data-settling={swipe()?.settling ? \"\" : undefined}\n style={{\n \"--k2b-gesture-menu-offset\": `${swipe()?.offset ?? 0}px`,\n \"--k2b-gesture-menu-progress\": String(swipe()?.progress ?? 0),\n }}\n >\n <Show when={swipe()}>\n {(current) => (\n <span class=\"k2b-gesture-menu__swipe\" aria-hidden=\"true\">\n <i class={current().icon ?? (current().direction === \"right\" ? \"ti ti-arrow-right\" : \"ti ti-arrow-left\")} />\n </span>\n )}\n </Show>\n <div class=\"k2b-gesture-menu__content\">{props.children}</div>\n </div>\n </ContextMenu>\n );\n}\n\nexport default GestureMenu;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["actions/GestureMenu.tsx"],"sourcesContent":["import { createSignal, type JSX, onCleanup, onMount, Show } from \"solid-js\";\nimport { dialogCore } from \"../feedback/dialog-core\";\nimport { LocaleProvider, useLocale } from \"../intl/locale\";\nimport BottomSheet, { bottomSheetOptions } from \"../layout/BottomSheet\";\nimport { ContextMenu } from \"./ContextMenu\";\nimport {\n type DropdownAction,\n type DropdownActionBase,\n type DropdownChoice,\n DropdownItems,\n type DropdownSection,\n focusRowSegment,\n} from \"./Dropdown\";\n\n/** A finger held this long without moving opens the menu, as the platforms' own long press does. */\nconst LONG_PRESS_MS = 500;\n/** A second tap that starts this soon after the first ended makes a double tap. */\nconst DOUBLE_TAP_MS = 300;\n/** The second tap lands at most this far from the first. */\nconst DOUBLE_TAP_DISTANCE = 32;\n/** Movement up to this is still a tap or a long press. */\nconst SLOP = 10;\n/** A swipe must be this many times wider than tall; anything steeper belongs to the page's scrolling. */\nconst SWIPE_RATIO = 1.5;\n/** Travel at which a released swipe runs its action. */\nconst SWIPE_THRESHOLD = 64;\n/** The content follows the finger up to the threshold, then at a quarter of its travel, up to this. */\nconst SWIPE_MAX = 96;\nconst SWIPE_RESISTANCE = 0.25;\n/** Swipes do not start this close to the screen's side edges, where the system's back and forward gestures are. */\nconst EDGE = 20;\n/** Duration of the snap back in `.k2b-gesture-menu[data-settling]`. */\nconst SETTLE_MS = 160;\n\n/**\n * Gestures never start on these elements: links, controls, fields, code blocks, and anything marked\n * `data-gesture-ignore` keep their own touch and mouse behavior.\n */\nconst IGNORE = [\n \"a[href]\",\n \"button\",\n \"input\",\n \"textarea\",\n \"select\",\n \"summary\",\n \"label\",\n \"audio\",\n \"video\",\n \"pre\",\n \"[contenteditable]:not([contenteditable='false'])\",\n \"[role='button']\",\n \"[role='link']\",\n \"[role='checkbox']\",\n \"[role='switch']\",\n \"[role='slider']\",\n \"[role='tab']\",\n \"[role^='menuitem']\",\n \"[data-gesture-ignore]\",\n].join(\", \");\n\nexport type GestureKind = \"swipe-right\" | \"swipe-left\" | \"double-tap\";\n\n/** A menu action that a gesture runs as well. */\nexport type GestureMenuAction = DropdownActionBase & {\n action: () => void;\n /** The gesture that runs this action. Give each gesture to at most one item; a disabled item disables its gesture. */\n gesture?: GestureKind;\n};\n\nexport type GestureMenuSection = Omit<DropdownSection, \"items\"> & {\n items: readonly (GestureMenuAction | DropdownAction | DropdownChoice)[];\n};\n\nexport type GestureMenuItem = GestureMenuAction | DropdownAction | DropdownChoice | GestureMenuSection;\n\nexport type GestureMenuProps = {\n /**\n * The menu. A long press opens it as a bottom sheet, a right-click, the Context Menu key, or Shift+F10 as a menu.\n * An item with `gesture` is also run by that gesture, so every gesture has its entry here.\n */\n items: readonly GestureMenuItem[];\n /** Names the element and its menu, for example \"Message from Nora, 10:42\". */\n label: string;\n children: JSX.Element;\n /** Shown above the menu in the long-press sheet, for example a row of quick reactions. `close` closes the sheet. */\n sheetTop?: (close: () => void) => JSX.Element;\n /** Tab order of the element. A list that moves focus between its rows itself passes -1. */\n tabIndex?: number;\n /** Runs before the menu or the sheet shows its items, for example to select what was pressed. */\n onOpen?: () => void;\n class?: string;\n};\n\ntype SwipeDirection = \"right\" | \"left\";\n\ntype Swipe = {\n direction: SwipeDirection;\n icon?: string;\n /** How far the content is moved, in pixels; always 0 with reduced motion. */\n offset: number;\n /** Travel relative to the threshold, from 0 to 1. */\n progress: number;\n armed: boolean;\n settling: boolean;\n};\n\ntype Press = {\n id: number;\n x: number;\n y: number;\n timer?: ReturnType<typeof setTimeout>;\n /** The finger left the slop: no tap or long press any more. */\n moved: boolean;\n /** The long press opened the sheet. */\n long: boolean;\n /** The press started soon after a tap nearby. */\n second: boolean;\n /** The press started at a side edge of the screen. */\n edge: boolean;\n direction?: SwipeDirection;\n};\n\ntype Entry = GestureMenuAction | DropdownAction | DropdownChoice;\n\nconst gestureAction = (items: readonly GestureMenuItem[], kind: GestureKind): GestureMenuAction | undefined => {\n for (const item of items)\n for (const entry of \"items\" in item ? item.items : [item])\n if (\"gesture\" in entry && entry.gesture === kind) return entry.disabled ? undefined : entry;\n return undefined;\n};\n\nconst swipeKind = (direction: SwipeDirection): GestureKind => (direction === \"right\" ? \"swipe-right\" : \"swipe-left\");\n\n/**\n * The sheet's items hand their action to `run` instead of running it while the sheet closes: `dialogCore` settles the\n * sheet after it left the history, and only then may an action navigate or open the next dialog. A choice that keeps\n * the menu open runs at once.\n */\nconst afterClose = (items: readonly GestureMenuItem[], run: (action: () => void) => void): GestureMenuItem[] => {\n const entry = (item: Entry): Entry => {\n const action = item.action;\n if (!action || (\"choice\" in item && item.closeOnSelect === false)) return item;\n return { ...item, action: () => run(action) };\n };\n return items.map((item) => (\"items\" in item ? { ...item, items: item.items.map(entry) } : entry(item)));\n};\n\nconst reducedMotion = () => typeof matchMedia === \"function\" && matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\nconst menuItems = (menu: HTMLElement): HTMLElement[] =>\n Array.from(menu.querySelectorAll<HTMLElement>(\"[role^='menuitem']:not([aria-disabled='true'])\"));\n\n/**\n * The menu inside the long-press sheet: the same items, at touch size, with arrow keys for a connected keyboard. Focus\n * starts on the sheet itself, which shows no ring on a phone; the first arrow key moves it into the menu.\n */\nfunction SheetMenu(props: { items: readonly GestureMenuItem[]; label: string; close: () => void; dialog: HTMLDialogElement }): JSX.Element {\n let menu!: HTMLDivElement;\n const focus = (index: number) => {\n const items = menuItems(menu);\n items[(index + items.length) % items.length]?.focus();\n };\n const onKeyDown = (event: KeyboardEvent) => {\n const items = menuItems(menu);\n const current = items.indexOf(document.activeElement as HTMLElement);\n if (event.key === \"ArrowDown\") focus(current + 1);\n else if (event.key === \"ArrowUp\") focus(current < 0 ? -1 : current - 1);\n else if (event.key === \"Home\" || event.key === \"End\") focus(event.key === \"Home\" ? 0 : -1);\n else if (!focusRowSegment(items, event.key)) return;\n event.preventDefault();\n };\n // Keys pressed on the sheet itself, while it is the top level of the shared dialog.\n const onSheetKeyDown = (event: KeyboardEvent) => {\n if (event.target === props.dialog && props.dialog.lastElementChild?.contains(menu)) onKeyDown(event);\n };\n onMount(() => {\n props.dialog.addEventListener(\"keydown\", onSheetKeyDown);\n onCleanup(() => props.dialog.removeEventListener(\"keydown\", onSheetKeyDown));\n });\n return (\n <div ref={menu} class=\"k2b-gesture-menu__sheet-menu\" role=\"menu\" aria-label={props.label} onKeyDown={onKeyDown}>\n <DropdownItems items={props.items} close={() => props.close()} />\n </div>\n );\n}\n\n/**\n * Touch gestures for an element, each the shortcut of an entry in its menu: a horizontal swipe, a double tap, and a\n * long press that opens the whole menu as a `BottomSheet`. A mouse double-click runs the double-tap action; a\n * right-click and the keyboard open the menu beside the element. Vertical scrolling never turns into a swipe.\n */\nexport function GestureMenu(props: GestureMenuProps): JSX.Element {\n const locale = useLocale();\n const [swipe, setSwipe] = createSignal<Swipe>();\n let surface!: HTMLDivElement;\n let press: Press | undefined;\n let lastTap: { x: number; y: number; at: number } | undefined;\n let lastPointer = \"mouse\";\n /**\n * The touch or pen press that just ended did something: its `touchend` is cancelled, so no click or mouse events\n * follow, and a pen's click, which comes without touch events, is cancelled itself.\n */\n let consumed = false;\n let sheetOpen = false;\n /** Closes an open sheet when the element goes, for example when its message is deleted. */\n const disposed = new AbortController();\n let reduced = false;\n let settleTimer: ReturnType<typeof setTimeout> | undefined;\n\n const active = () => props.items.length > 0;\n const action = (kind: GestureKind) => gestureAction(props.items, kind);\n const touchAction = () => (action(\"swipe-right\") || action(\"swipe-left\") ? \"swipe\" : action(\"double-tap\") ? \"tap\" : undefined);\n\n /** Whether the event started on something with a meaning of its own, inside this element. */\n const ignored = (target: EventTarget | null) => {\n const found = target instanceof Element ? target.closest(IGNORE) : null;\n return found !== null && found !== surface && surface.contains(found);\n };\n\n const openSheet = () => {\n if (sheetOpen || !active()) return;\n sheetOpen = true;\n props.onOpen?.();\n const current = locale();\n let chosen: (() => void) | undefined;\n const choose = (action: () => void) => {\n chosen = action;\n };\n void dialogCore\n .open<void>(\n (close, context) => (\n <LocaleProvider locale={current}>\n <BottomSheet onDismiss={context.requestDismiss}>\n <BottomSheet.Body>\n {props.sheetTop?.(() => close())}\n <SheetMenu items={afterClose(props.items, choose)} label={props.label} close={() => close()} dialog={context.dialog} />\n </BottomSheet.Body>\n </BottomSheet>\n </LocaleProvider>\n ),\n { ...bottomSheetOptions, ariaLabel: props.label, history: true, signal: disposed.signal },\n )\n .then(() => chosen?.())\n .finally(() => {\n sheetOpen = false;\n });\n };\n\n /** Another pointer that goes down anywhere while a finger presses, as in a pinch, ends the gesture. */\n const onOtherPointer = (event: PointerEvent) => {\n if (!press || event.pointerId === press.id) return;\n if (press.direction) settle();\n endPress();\n };\n\n const endPress = () => {\n clearTimeout(press?.timer);\n press = undefined;\n document.removeEventListener(\"pointerdown\", onOtherPointer, true);\n delete surface.dataset.pressing;\n };\n\n const settle = () => {\n const current = swipe();\n if (!current) return;\n clearTimeout(settleTimer);\n if (reduced || current.offset === 0) {\n setSwipe(undefined);\n return;\n }\n setSwipe({ ...current, offset: 0, progress: 0, armed: false, settling: true });\n settleTimer = setTimeout(() => setSwipe(undefined), SETTLE_MS);\n };\n\n const moveSwipe = (current: Press, direction: SwipeDirection, dx: number) => {\n const travel = Math.max(0, direction === \"right\" ? dx : -dx);\n const moved = travel <= SWIPE_THRESHOLD ? travel : SWIPE_THRESHOLD + (travel - SWIPE_THRESHOLD) * SWIPE_RESISTANCE;\n const offset = reduced ? 0 : Math.min(SWIPE_MAX, moved) * (direction === \"right\" ? 1 : -1);\n current.direction = direction;\n setSwipe({\n direction,\n icon: action(swipeKind(direction))?.icon,\n offset,\n progress: Math.min(1, travel / SWIPE_THRESHOLD),\n armed: travel >= SWIPE_THRESHOLD,\n settling: false,\n });\n };\n\n const longPress = () => {\n if (!press) return;\n press.long = true;\n lastTap = undefined;\n openSheet();\n };\n\n const onPointerDown = (event: PointerEvent) => {\n lastPointer = event.pointerType;\n consumed = false;\n // Any press in between, on a link, with a mouse, or with another finger, ends a pending double tap.\n const previous = lastTap;\n lastTap = undefined;\n // Another finger ends the gesture through `onOtherPointer` and starts none.\n if (event.pointerType === \"mouse\" || !event.isPrimary) return;\n endPress();\n if (!active() || ignored(event.target)) return;\n const second =\n previous !== undefined &&\n performance.now() - previous.at <= DOUBLE_TAP_MS &&\n Math.hypot(event.clientX - previous.x, event.clientY - previous.y) <= DOUBLE_TAP_DISTANCE;\n press = {\n id: event.pointerId,\n x: event.clientX,\n y: event.clientY,\n moved: false,\n long: false,\n second,\n edge: event.clientX < EDGE || event.clientX > window.innerWidth - EDGE,\n timer: setTimeout(longPress, LONG_PRESS_MS),\n };\n document.addEventListener(\"pointerdown\", onOtherPointer, true);\n // Hybrid devices keep text selection for the mouse; a finger on the element selects nothing.\n surface.dataset.pressing = \"\";\n };\n\n const onPointerMove = (event: PointerEvent) => {\n const current = press;\n if (!current || event.pointerId !== current.id || current.long) return;\n const dx = event.clientX - current.x;\n const dy = event.clientY - current.y;\n if (current.direction) {\n moveSwipe(current, current.direction, dx);\n return;\n }\n if (current.moved || Math.hypot(dx, dy) < SLOP) return;\n current.moved = true;\n clearTimeout(current.timer);\n if (current.edge || Math.abs(dx) < Math.abs(dy) * SWIPE_RATIO) return;\n const direction: SwipeDirection = dx > 0 ? \"right\" : \"left\";\n if (!action(swipeKind(direction))) return;\n clearTimeout(settleTimer);\n reduced = reducedMotion();\n moveSwipe(current, direction, dx);\n };\n\n const onPointerUp = (event: PointerEvent) => {\n const current = press;\n if (!current || event.pointerId !== current.id) return;\n endPress();\n if (current.long) {\n consumed = true;\n return;\n }\n if (current.direction) {\n // Where the finger lifts decides, and the item as it is now.\n moveSwipe(current, current.direction, event.clientX - current.x);\n const swipeAction = swipe()?.armed ? action(swipeKind(current.direction)) : undefined;\n settle();\n if (swipeAction) {\n consumed = true;\n swipeAction.action();\n }\n return;\n }\n if (current.moved) return;\n const doubleTap = action(\"double-tap\");\n if (!doubleTap) return;\n if (current.second) {\n consumed = true;\n doubleTap.action();\n return;\n }\n lastTap = { x: event.clientX, y: event.clientY, at: performance.now() };\n };\n\n // The browser took the touch, for example to scroll the page.\n const onPointerCancel = (event: PointerEvent) => {\n if (!press || event.pointerId !== press.id) return;\n if (press.direction) settle();\n endPress();\n lastTap = undefined;\n };\n\n const onTouchEnd = (event: TouchEvent) => {\n if (!consumed) return;\n consumed = false;\n if (event.cancelable) event.preventDefault();\n };\n\n // A pen sends no touch events; the click after its gesture is cancelled here. A keyboard's click has no detail.\n const onClick = (event: MouseEvent) => {\n if (!consumed || event.detail === 0) return;\n consumed = false;\n event.preventDefault();\n event.stopPropagation();\n };\n\n const onContextMenu = (event: MouseEvent) => {\n // Without items the element has no menu, and the browser keeps its own.\n if (!active()) return;\n // Links, fields, and code keep the browser's own menu.\n if (ignored(event.target)) {\n event.stopPropagation();\n return;\n }\n // A mouse or the keyboard opens the menu beside the element through ContextMenu.\n if (!press && !(\"pointerType\" in event && (event.pointerType === \"touch\" || event.pointerType === \"pen\"))) return;\n // Android and touch screens report a long press as a context-menu event, sometimes before the timer.\n event.preventDefault();\n event.stopPropagation();\n if (press && !press.long && !press.moved) {\n clearTimeout(press.timer);\n longPress();\n }\n };\n\n // The second press of a mouse double-click would select a word; in this element it runs the double-tap action.\n const onMouseDown = (event: MouseEvent) => {\n if (event.button === 0 && event.detail >= 2 && lastPointer === \"mouse\" && action(\"double-tap\") && !ignored(event.target))\n event.preventDefault();\n };\n\n const onDoubleClick = (event: MouseEvent) => {\n if (lastPointer !== \"mouse\" || ignored(event.target)) return;\n const doubleTap = action(\"double-tap\");\n if (!doubleTap) return;\n event.preventDefault();\n doubleTap.action();\n };\n\n onMount(() => {\n surface.addEventListener(\"pointerdown\", onPointerDown);\n surface.addEventListener(\"pointermove\", onPointerMove);\n surface.addEventListener(\"pointerup\", onPointerUp);\n surface.addEventListener(\"pointercancel\", onPointerCancel);\n surface.addEventListener(\"touchend\", onTouchEnd, { passive: false });\n surface.addEventListener(\"click\", onClick, true);\n surface.addEventListener(\"contextmenu\", onContextMenu);\n surface.addEventListener(\"mousedown\", onMouseDown);\n surface.addEventListener(\"dblclick\", onDoubleClick);\n onCleanup(() => {\n disposed.abort();\n endPress();\n clearTimeout(settleTimer);\n surface.removeEventListener(\"pointerdown\", onPointerDown);\n surface.removeEventListener(\"pointermove\", onPointerMove);\n surface.removeEventListener(\"pointerup\", onPointerUp);\n surface.removeEventListener(\"pointercancel\", onPointerCancel);\n surface.removeEventListener(\"touchend\", onTouchEnd);\n surface.removeEventListener(\"click\", onClick, true);\n surface.removeEventListener(\"contextmenu\", onContextMenu);\n surface.removeEventListener(\"mousedown\", onMouseDown);\n surface.removeEventListener(\"dblclick\", onDoubleClick);\n });\n });\n\n return (\n <ContextMenu\n items={props.items}\n label={props.label}\n tabIndex={props.tabIndex}\n disabled={!active()}\n onOpen={props.onOpen}\n class={props.class}\n >\n <div\n ref={surface}\n class=\"k2b-gesture-menu\"\n data-active={active() ? \"\" : undefined}\n data-touch={touchAction()}\n data-swipe={swipe()?.direction}\n data-armed={swipe()?.armed ? \"\" : undefined}\n data-settling={swipe()?.settling ? \"\" : undefined}\n style={{\n \"--k2b-gesture-menu-offset\": `${swipe()?.offset ?? 0}px`,\n \"--k2b-gesture-menu-progress\": String(swipe()?.progress ?? 0),\n }}\n >\n <Show when={swipe()}>\n {(current) => (\n <span class=\"k2b-gesture-menu__swipe\" aria-hidden=\"true\">\n <i class={current().icon ?? (current().direction === \"right\" ? \"ti ti-arrow-right\" : \"ti ti-arrow-left\")} />\n </span>\n )}\n </Show>\n <div class=\"k2b-gesture-menu__content\">{props.children}</div>\n </div>\n </ContextMenu>\n );\n}\n\nexport default GestureMenu;\n"],"mappings":"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","ignoreList":[]}
@@ -13,17 +13,19 @@ var _tmpl$ = /*#__PURE__*/_$template(`<button type=button><i aria-hidden=true></
13
13
  _tmpl$2 = /*#__PURE__*/_$template(`<kbd>`);
14
14
  import { prompts } from "../feedback/prompts";
15
15
  import { resolveUiMessages, useUiMessages } from "../intl/messages";
16
+ import { resolveSpotlightMessages } from "./spotlight-messages";
16
17
  export const openSpotlightSearch = options => {
17
18
  const {
18
19
  resolve,
19
20
  ...promptOptions
20
21
  } = options;
21
22
  const messages = resolveUiMessages();
23
+ const spotlightMessages = resolveSpotlightMessages();
22
24
  return prompts.search(resolve, {
23
25
  icon: "ti ti-search",
24
26
  placeholder: messages.search,
25
27
  minQueryLength: 0,
26
- noResultsText: messages.spotlightNoResults,
28
+ noResultsText: spotlightMessages.spotlightNoResults,
27
29
  size: "small",
28
30
  ...promptOptions
29
31
  });
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["actions/SpotlightSearch.tsx"],"sourcesContent":["import type { JSX } from \"solid-js\";\nimport type { PromptSearchInput, PromptSearchItem, PromptSearchOptions } from \"../feedback/prompts\";\nimport { prompts } from \"../feedback/prompts\";\nimport { resolveUiMessages, useUiMessages } from \"../intl/messages\";\n\nexport type SpotlightSearchResolver<T = unknown> = (input: PromptSearchInput) => Promise<PromptSearchItem<T>[]> | PromptSearchItem<T>[];\n\nexport type SpotlightSearchOptions<T = unknown> = PromptSearchOptions & {\n resolve: SpotlightSearchResolver<T>;\n};\n\nexport type SpotlightButtonVariant = \"default\" | \"compact\" | \"chip\" | \"sidebar\" | \"sidebar-mobile\" | \"icon\";\n\nexport type SpotlightButtonProps = {\n variant?: SpotlightButtonVariant;\n label?: string;\n title?: string;\n icon?: string;\n shortcutLabel?: string | false;\n ariaLabel?: string;\n disabled?: boolean;\n class?: string;\n onClick: () => void | Promise<void>;\n};\n\nexport const openSpotlightSearch = <T extends unknown = unknown>(\n options: SpotlightSearchOptions<T>,\n): Promise<PromptSearchItem<T> | undefined> => {\n const { resolve, ...promptOptions } = options;\n const messages = resolveUiMessages();\n return prompts.search(resolve, {\n icon: \"ti ti-search\",\n placeholder: messages.search,\n minQueryLength: 0,\n noResultsText: messages.spotlightNoResults,\n size: \"small\",\n ...promptOptions,\n });\n};\n\nexport function SpotlightButton(props: SpotlightButtonProps): JSX.Element {\n const messages = useUiMessages();\n const variant = () => props.variant ?? \"default\";\n const label = () => props.label ?? messages().searchLabel;\n const icon = () => props.icon ?? \"ti ti-search\";\n const shortcut = () => props.shortcutLabel;\n const title = () => props.title ?? label();\n const showsShortcut = () => Boolean(shortcut()) && [\"chip\", \"sidebar\"].includes(variant());\n\n return (\n <button\n type=\"button\"\n class={`k2b-spotlight-button ${props.class ?? \"\"}`}\n data-variant={variant()}\n disabled={props.disabled}\n aria-label={props.ariaLabel ?? ([\"compact\", \"icon\"].includes(variant()) ? label() : undefined)}\n title={title()}\n onClick={() => void props.onClick()}\n >\n <i class={icon()} aria-hidden=\"true\" />\n <span class=\"k2b-spotlight-button__label\">{label()}</span>\n {showsShortcut() && <kbd>{shortcut()}</kbd>}\n </button>\n );\n}\n\nexport default SpotlightButton;\n"],"mappings":";;;;;;;;;;;;;AAEA,SAAS,OAAO,QAAQ,qBAAqB;AAC7C,SAAS,iBAAiB,EAAE,aAAa,QAAQ,kBAAkB;AAsBnE,OAAO,MAAM,mBAAmB,GAC9B,OAAkC,IACW;EAC7C,MAAM;IAAE,OAAO;IAAE,GAAG;EAAc,CAAC,GAAG,OAAO;EAC7C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC;EACpC,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE;IAC7B,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,QAAQ,CAAC,MAAM;IAC5B,cAAc,EAAE,CAAC;IACjB,aAAa,EAAE,QAAQ,CAAC,kBAAkB;IAC1C,IAAI,EAAE,OAAO;IACb,GAAG;EACL,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,SAAS,eAAe,CAAC,KAA2B,EAAe;EACxE,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC;EAChC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,IAAI,SAAS;EAChD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,WAAW;EACzD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,IAAI,cAAc;EAC/C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,aAAa;EAC1C,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;EAC1C,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;EAE1F;IAAA;MAAA;MAAA;MAAA;MAAA;IAAA,eAQa,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC;IAAA,gBAGQ,KAAK;IAAA;MAAA,yBAC/C,aAAa,CAAC,CAAC;MAAA,aAAf;QAAA;QAAA,gBAAyB,QAAQ;QAAA;MAAA,IAAS;IAAA;IAAA;MAAA,UATpC,wBAAwB,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;QAAA,OACpC,OAAO,CAAC,CAAC;QAAA,OACb,KAAK,CAAC,QAAQ;QAAA,OACZ,KAAK,CAAC,SAAS,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC;QAAA,OACvF,KAAK,CAAC,CAAC;QAAA,OAGJ,IAAI,CAAC,CAAC;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA;IAAA;IAAA;EAAA;AAKtB;AAEA,eAAe,eAAe;AAAC","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["actions/SpotlightSearch.tsx"],"sourcesContent":["import type { JSX } from \"solid-js\";\nimport type { PromptSearchInput, PromptSearchItem, PromptSearchOptions } from \"../feedback/prompts\";\nimport { prompts } from \"../feedback/prompts\";\nimport { resolveUiMessages, useUiMessages } from \"../intl/messages\";\nimport { resolveSpotlightMessages } from \"./spotlight-messages\";\n\nexport type SpotlightSearchResolver<T = unknown> = (input: PromptSearchInput) => Promise<PromptSearchItem<T>[]> | PromptSearchItem<T>[];\n\nexport type SpotlightSearchOptions<T = unknown> = PromptSearchOptions & {\n resolve: SpotlightSearchResolver<T>;\n};\n\nexport type SpotlightButtonVariant = \"default\" | \"compact\" | \"chip\" | \"sidebar\" | \"sidebar-mobile\" | \"icon\";\n\nexport type SpotlightButtonProps = {\n variant?: SpotlightButtonVariant;\n label?: string;\n title?: string;\n icon?: string;\n shortcutLabel?: string | false;\n ariaLabel?: string;\n disabled?: boolean;\n class?: string;\n onClick: () => void | Promise<void>;\n};\n\nexport const openSpotlightSearch = <T extends unknown = unknown>(\n options: SpotlightSearchOptions<T>,\n): Promise<PromptSearchItem<T> | undefined> => {\n const { resolve, ...promptOptions } = options;\n const messages = resolveUiMessages();\n const spotlightMessages = resolveSpotlightMessages();\n return prompts.search(resolve, {\n icon: \"ti ti-search\",\n placeholder: messages.search,\n minQueryLength: 0,\n noResultsText: spotlightMessages.spotlightNoResults,\n size: \"small\",\n ...promptOptions,\n });\n};\n\nexport function SpotlightButton(props: SpotlightButtonProps): JSX.Element {\n const messages = useUiMessages();\n const variant = () => props.variant ?? \"default\";\n const label = () => props.label ?? messages().searchLabel;\n const icon = () => props.icon ?? \"ti ti-search\";\n const shortcut = () => props.shortcutLabel;\n const title = () => props.title ?? label();\n const showsShortcut = () => Boolean(shortcut()) && [\"chip\", \"sidebar\"].includes(variant());\n\n return (\n <button\n type=\"button\"\n class={`k2b-spotlight-button ${props.class ?? \"\"}`}\n data-variant={variant()}\n disabled={props.disabled}\n aria-label={props.ariaLabel ?? ([\"compact\", \"icon\"].includes(variant()) ? label() : undefined)}\n title={title()}\n onClick={() => void props.onClick()}\n >\n <i class={icon()} aria-hidden=\"true\" />\n <span class=\"k2b-spotlight-button__label\">{label()}</span>\n {showsShortcut() && <kbd>{shortcut()}</kbd>}\n </button>\n );\n}\n\nexport default SpotlightButton;\n"],"mappings":";;;;;;;;;;;;;AAEA,SAAS,OAAO,QAAQ,qBAAqB;AAC7C,SAAS,iBAAiB,EAAE,aAAa,QAAQ,kBAAkB;AACnE,SAAS,wBAAwB,QAAQ,sBAAsB;AAsB/D,OAAO,MAAM,mBAAmB,GAC9B,OAAkC,IACW;EAC7C,MAAM;IAAE,OAAO;IAAE,GAAG;EAAc,CAAC,GAAG,OAAO;EAC7C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC;EACpC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,CAAC;EACpD,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE;IAC7B,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,QAAQ,CAAC,MAAM;IAC5B,cAAc,EAAE,CAAC;IACjB,aAAa,EAAE,iBAAiB,CAAC,kBAAkB;IACnD,IAAI,EAAE,OAAO;IACb,GAAG;EACL,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,SAAS,eAAe,CAAC,KAA2B,EAAe;EACxE,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC;EAChC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,IAAI,SAAS;EAChD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,WAAW;EACzD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,IAAI,cAAc;EAC/C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,aAAa;EAC1C,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;EAC1C,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;EAE1F;IAAA;MAAA;MAAA;MAAA;MAAA;IAAA,eAQa,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC;IAAA,gBAGQ,KAAK;IAAA;MAAA,yBAC/C,aAAa,CAAC,CAAC;MAAA,aAAf;QAAA;QAAA,gBAAyB,QAAQ;QAAA;MAAA,IAAS;IAAA;IAAA;MAAA,UATpC,wBAAwB,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;QAAA,OACpC,OAAO,CAAC,CAAC;QAAA,OACb,KAAK,CAAC,QAAQ;QAAA,OACZ,KAAK,CAAC,SAAS,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC;QAAA,OACvF,KAAK,CAAC,CAAC;QAAA,OAGJ,IAAI,CAAC,CAAC;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA;IAAA;IAAA;EAAA;AAKtB;AAEA,eAAe,eAAe;AAAC","ignoreList":[]}
@@ -0,0 +1,20 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ import { useLocale } from "../intl/locale";
3
+ const filterMessages = i18n.define({
4
+ baseLocale: "en",
5
+ messages: {
6
+ en: {
7
+ filterActions: "Filter actions"
8
+ },
9
+ de: {
10
+ filterActions: "Filteraktionen"
11
+ }
12
+ }
13
+ });
14
+ /** Resolved from the inherited render locale. */
15
+ export const useFilterMessages = () => {
16
+ const locale = useLocale();
17
+ return () => filterMessages.resolve([locale()]).t;
18
+ };
19
+ export const checkFilterMessages = () => filterMessages.check();
20
+ //# sourceMappingURL=filter-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["actions/filter-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst filterMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n filterActions: \"Filter actions\",\n },\n de: {\n filterActions: \"Filteraktionen\",\n },\n },\n});\n\nexport type FilterMessages = ReturnType<(typeof filterMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useFilterMessages = (): (() => FilterMessages) => {\n const locale = useLocale();\n return () => filterMessages.resolve([locale()]).t;\n};\n\nexport const checkFilterMessages = () => filterMessages.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;IACjB,CAAC;IACD,EAAE,EAAE;MACF,aAAa,EAAE;IACjB;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,OAAO,MAAM,mBAAmB,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,16 @@
1
+ import { i18n } from "@k2b/stdlib";
2
+ const spotlightMessages = i18n.define({
3
+ baseLocale: "en",
4
+ messages: {
5
+ en: {
6
+ spotlightNoResults: "No results."
7
+ },
8
+ de: {
9
+ spotlightNoResults: "Keine Ergebnisse."
10
+ }
11
+ }
12
+ });
13
+ /** Imperative UI inherits the document locale when no locale is supplied. */
14
+ export const resolveSpotlightMessages = locale => spotlightMessages.resolve([locale ?? (typeof document === "undefined" ? spotlightMessages.baseLocale : document.documentElement.lang)]).t;
15
+ export const checkSpotlightMessages = () => spotlightMessages.check();
16
+ //# sourceMappingURL=spotlight-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["actions/spotlight-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\n\nconst spotlightMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n spotlightNoResults: \"No results.\",\n },\n de: {\n spotlightNoResults: \"Keine Ergebnisse.\",\n },\n },\n});\n\nexport type SpotlightMessages = ReturnType<(typeof spotlightMessages)[\"resolve\"]>[\"t\"];\n\n/** Imperative UI inherits the document locale when no locale is supplied. */\nexport const resolveSpotlightMessages = (locale?: string): SpotlightMessages =>\n spotlightMessages.resolve([locale ?? (typeof document === \"undefined\" ? spotlightMessages.baseLocale : document.documentElement.lang)]).t;\n\nexport const checkSpotlightMessages = () => spotlightMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAElC,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC;EACpC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,kBAAkB,EAAE;IACtB,CAAC;IACD,EAAE,EAAE;MACF,kBAAkB,EAAE;IACtB;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,wBAAwB,GAAI,MAAe,IACtD,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,OAAO,QAAQ,KAAK,WAAW,GAAG,iBAAiB,CAAC,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3I,OAAO,MAAM,sBAAsB,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
@@ -59,11 +59,14 @@ import { completedEmojiShortcode, emojiInTone, emojiName, emojiShortcodeQuery, l
59
59
  import { FileDropTarget } from "../inputs/FileDropTarget";
60
60
  import { toggleBulletList, toggleInlineMarker } from "../inputs/markdown/actions";
61
61
  import { openCodeFence } from "../inputs/markdown/code-zone";
62
+ import { useMarkdownToolbarMessages } from "../inputs/markdown/toolbar-messages";
62
63
  import { SelectChip } from "../inputs/SelectChip";
64
+ import { useSelectMessages } from "../inputs/select-messages";
63
65
  import { useLocale } from "../intl/locale";
64
66
  import { useUiMessages } from "../intl/messages";
65
67
  import { ChatContextUsage as ContextUsage } from "./ChatPrimitives";
66
68
  import { conversationEnterAction, executeChatAction, nextChatCommandIndex, reportChatFailure, runChatSubmission } from "./chat-behavior";
69
+ import { useChatMessages } from "./chat-messages";
67
70
  import { chatCommandQuery, chatMentionSegments, reconcileChatMentions } from "./composer-document";
68
71
  const composerMaxInputHeight = 309;
69
72
  /** Emoji suggestions for a `:shortcode`, as many as fit the list without scrolling on a phone. */
@@ -107,6 +110,9 @@ export function ChatComposer(props) {
107
110
  const hasAccessory = () => hasContent(accessory.toArray());
108
111
  const hint = children(() => props.hint);
109
112
  const messages = useUiMessages();
113
+ const markdownToolbarMessages = useMarkdownToolbarMessages();
114
+ const chatMessages = useChatMessages();
115
+ const selectMessages = useSelectMessages();
110
116
  const commandListId = `k2b-chat-commands-${createUniqueId().replace(/[^A-Za-z0-9_-]/g, "-")}`;
111
117
  const formatGroupId = `${commandListId}-format`;
112
118
  const [selectedCommandIndex, setSelectedCommandIndex] = createSignal(0);
@@ -279,7 +285,7 @@ export function ChatComposer(props) {
279
285
  if (props.fileSelection) {
280
286
  items.push({
281
287
  icon: addingFiles() ? "ti ti-loader-2 k2b-spin" : "ti ti-paperclip",
282
- label: props.fileSelection.label ?? messages().attachFiles,
288
+ label: props.fileSelection.label ?? chatMessages().attachFiles,
283
289
  disabled: !canSelectFiles(),
284
290
  action: () => chooseFiles()
285
291
  });
@@ -606,7 +612,7 @@ export function ChatComposer(props) {
606
612
  const dictate = microphone.onDictate;
607
613
  items.push({
608
614
  icon: "ti ti-microphone",
609
- label: messages().dictate,
615
+ label: chatMessages().dictate,
610
616
  action: () => reportChatFailure(dictate, props.onError)
611
617
  });
612
618
  }
@@ -614,7 +620,7 @@ export function ChatComposer(props) {
614
620
  const record = microphone.onVoiceMessage;
615
621
  items.push({
616
622
  icon: "ti ti-player-record",
617
- label: messages().recordVoiceMessage,
623
+ label: chatMessages().recordVoiceMessage,
618
624
  action: () => reportChatFailure(record, props.onError)
619
625
  });
620
626
  }
@@ -625,27 +631,27 @@ export function ChatComposer(props) {
625
631
  case "listening":
626
632
  return {
627
633
  icon: "ti ti-microphone",
628
- text: messages().dictationListening
634
+ text: chatMessages().dictationListening
629
635
  };
630
636
  case "refining":
631
637
  return {
632
638
  icon: "ti ti-loader-2 k2b-spin",
633
- text: messages().dictationRefining
639
+ text: chatMessages().dictationRefining
634
640
  };
635
641
  case "refined":
636
642
  return {
637
643
  icon: "ti ti-sparkles",
638
- text: messages().dictationRefined
644
+ text: chatMessages().dictationRefined
639
645
  };
640
646
  case "unrefined":
641
647
  return {
642
648
  icon: "ti ti-microphone",
643
- text: messages().dictationUnrefined
649
+ text: chatMessages().dictationUnrefined
644
650
  };
645
651
  case "interrupted":
646
652
  return {
647
653
  icon: "ti ti-alert-triangle",
648
- text: messages().dictationInterrupted
654
+ text: chatMessages().dictationInterrupted
649
655
  };
650
656
  default:
651
657
  return null;
@@ -678,7 +684,7 @@ export function ChatComposer(props) {
678
684
  const addMenu = (icon, extraClass = "") => _$createComponent(Dropdown.Root, {
679
685
  position: "top-right",
680
686
  get label() {
681
- return messages().addToChat;
687
+ return chatMessages().addToChat;
682
688
  },
683
689
  get items() {
684
690
  return menuItems();
@@ -691,10 +697,10 @@ export function ChatComposer(props) {
691
697
  appearance: "plain",
692
698
  "class": `k2b-chat-composer__icon-action${extraClass}`,
693
699
  get label() {
694
- return messages().addToChat;
700
+ return chatMessages().addToChat;
695
701
  },
696
702
  get tooltip() {
697
- return messages().addToChat;
703
+ return chatMessages().addToChat;
698
704
  },
699
705
  get children() {
700
706
  var _el$4 = _$getNextElement(_tmpl$3);
@@ -719,10 +725,10 @@ export function ChatComposer(props) {
719
725
  type: "button",
720
726
  "class": "k2b-chat-composer__icon-action k2b-chat-composer__attach",
721
727
  get ["aria-label"]() {
722
- return selection().label ?? messages().attachFiles;
728
+ return selection().label ?? chatMessages().attachFiles;
723
729
  },
724
730
  get content() {
725
- return selection().label ?? messages().attachFiles;
731
+ return selection().label ?? chatMessages().attachFiles;
726
732
  },
727
733
  get disabled() {
728
734
  return !canSelectFiles();
@@ -749,7 +755,7 @@ export function ChatComposer(props) {
749
755
  type: "button",
750
756
  "class": "k2b-chat-composer__icon-action k2b-chat-composer__format-toggle",
751
757
  get ["aria-label"]() {
752
- return messages().composerFormatting;
758
+ return chatMessages().composerFormatting;
753
759
  },
754
760
  get ["aria-pressed"]() {
755
761
  return formattingOpen();
@@ -758,7 +764,7 @@ export function ChatComposer(props) {
758
764
  return formattingOpen() ? formatGroupId : undefined;
759
765
  },
760
766
  get content() {
761
- return messages().composerFormatting;
767
+ return chatMessages().composerFormatting;
762
768
  },
763
769
  onMouseDown: keepFieldFocus,
764
770
  onClick: () => setFormattingOpen(open => !open),
@@ -783,10 +789,10 @@ export function ChatComposer(props) {
783
789
  type: "button",
784
790
  "class": "k2b-chat-composer__icon-action",
785
791
  get ["aria-label"]() {
786
- return tool.label(messages());
792
+ return tool.label(markdownToolbarMessages());
787
793
  },
788
794
  get content() {
789
- return tool.label(messages());
795
+ return tool.label(markdownToolbarMessages());
790
796
  },
791
797
  get disabled() {
792
798
  return editBlocked();
@@ -802,7 +808,7 @@ export function ChatComposer(props) {
802
808
  }
803
809
  })
804
810
  }));
805
- _$effect(() => _$setAttribute(_el$7, "aria-label", messages().composerFormatting));
811
+ _$effect(() => _$setAttribute(_el$7, "aria-label", chatMessages().composerFormatting));
806
812
  return _el$7;
807
813
  }
808
814
  });
@@ -814,10 +820,10 @@ export function ChatComposer(props) {
814
820
  type: "button",
815
821
  "class": "k2b-chat-composer__icon-action k2b-chat-composer__emoji",
816
822
  get ["aria-label"]() {
817
- return messages().insertEmoji;
823
+ return chatMessages().insertEmoji;
818
824
  },
819
825
  get content() {
820
- return messages().insertEmoji;
826
+ return chatMessages().insertEmoji;
821
827
  },
822
828
  get disabled() {
823
829
  return editBlocked();
@@ -866,10 +872,10 @@ export function ChatComposer(props) {
866
872
  return _$memo(() => !!microphone().onDictate)() ? undefined : microphoneMenuOpen();
867
873
  },
868
874
  get ["aria-label"]() {
869
- return _$memo(() => !!microphone().onDictate)() ? messages().dictate : messages().recordVoiceMessage;
875
+ return _$memo(() => !!microphone().onDictate)() ? chatMessages().dictate : chatMessages().recordVoiceMessage;
870
876
  },
871
877
  get content() {
872
- return _$memo(() => dictation() === "listening")() ? messages().stopDictation : _$memo(() => !!microphone().onDictate)() ? _$memo(() => !!microphone().onVoiceMessage)() ? messages().dictateOrHold : messages().dictate : messages().recordVoiceMessage;
878
+ return _$memo(() => dictation() === "listening")() ? chatMessages().stopDictation : _$memo(() => !!microphone().onDictate)() ? _$memo(() => !!microphone().onVoiceMessage)() ? chatMessages().dictateOrHold : chatMessages().dictate : chatMessages().recordVoiceMessage;
873
879
  },
874
880
  onMouseDown: keepFieldFocus,
875
881
  onContextMenu: event => event.preventDefault(),
@@ -920,7 +926,7 @@ export function ChatComposer(props) {
920
926
  return _$createComponent(Dropdown.Root, {
921
927
  position: "top-left",
922
928
  get label() {
923
- return messages().microphoneOptions;
929
+ return chatMessages().microphoneOptions;
924
930
  },
925
931
  get items() {
926
932
  return microphoneItems();
@@ -937,10 +943,10 @@ export function ChatComposer(props) {
937
943
  appearance: "plain",
938
944
  "class": "k2b-chat-composer__icon-action k2b-chat-composer__microphone-menu",
939
945
  get label() {
940
- return messages().microphoneOptions;
946
+ return chatMessages().microphoneOptions;
941
947
  },
942
948
  get tooltip() {
943
- return messages().microphoneOptions;
949
+ return chatMessages().microphoneOptions;
944
950
  },
945
951
  get children() {
946
952
  return _$getNextElement(_tmpl$7);
@@ -968,10 +974,10 @@ export function ChatComposer(props) {
968
974
  if (conversation()) keepFieldFocus(event);
969
975
  },
970
976
  get ["aria-label"]() {
971
- return _$memo(() => !!submitting())() ? _$memo(() => !!running())() ? _$memo(() => runningSubmitIntent() === "queue")() ? messages().queueing : messages().steering : messages().sending : _$memo(() => !!running())() ? _$memo(() => runningSubmitIntent() === "queue")() ? messages().queueMessage : messages().steerResponse : messages().sendMessage;
977
+ return _$memo(() => !!submitting())() ? _$memo(() => !!running())() ? _$memo(() => runningSubmitIntent() === "queue")() ? chatMessages().queueing : chatMessages().steering : chatMessages().sending : _$memo(() => !!running())() ? _$memo(() => runningSubmitIntent() === "queue")() ? chatMessages().queueMessage : chatMessages().steerResponse : chatMessages().sendMessage;
972
978
  },
973
979
  get content() {
974
- return _$memo(() => !!running())() ? _$memo(() => runningSubmitIntent() === "queue")() ? messages().queueMessage : messages().steerResponse : messages().sendMessage;
980
+ return _$memo(() => !!running())() ? _$memo(() => runningSubmitIntent() === "queue")() ? chatMessages().queueMessage : chatMessages().steerResponse : chatMessages().sendMessage;
975
981
  },
976
982
  onClick: () => void submit(),
977
983
  get children() {
@@ -989,10 +995,10 @@ export function ChatComposer(props) {
989
995
  return stopping();
990
996
  },
991
997
  get ["aria-label"]() {
992
- return _$memo(() => !!stopping())() ? messages().stopping : messages().stopResponse;
998
+ return _$memo(() => !!stopping())() ? chatMessages().stopping : chatMessages().stopResponse;
993
999
  },
994
1000
  get content() {
995
- return messages().stopResponse;
1001
+ return chatMessages().stopResponse;
996
1002
  },
997
1003
  onClick: () => reportChatFailure(() => props.onStop?.(), props.onError),
998
1004
  get children() {
@@ -1087,11 +1093,11 @@ export function ChatComposer(props) {
1087
1093
  }
1088
1094
  }), _el$27, _co$5);
1089
1095
  _$effect(_p$ => {
1090
- var _v$3 = messages().messageInput,
1096
+ var _v$3 = chatMessages().messageInput,
1091
1097
  _v$4 = !!(mentions().length > 0),
1092
1098
  _v$5 = editBlocked(),
1093
1099
  _v$6 = conversation() ? "enter" : undefined,
1094
- _v$7 = props.placeholder ?? (running() ? messages().addGuidance : conversation() ? messages().writeConversationMessage : messages().writeMessage),
1100
+ _v$7 = props.placeholder ?? (running() ? chatMessages().addGuidance : conversation() ? chatMessages().writeConversationMessage : chatMessages().writeMessage),
1095
1101
  _v$8 = props.inputLabel ?? messages().message,
1096
1102
  _v$9 = suggestionsOpen() ? "combobox" : undefined,
1097
1103
  _v$0 = suggestionsOpen() ? "list" : undefined,
@@ -1210,7 +1216,7 @@ export function ChatComposer(props) {
1210
1216
  return _el$91;
1211
1217
  })()
1212
1218
  }));
1213
- _$effect(() => _$setAttribute(_el$33, "aria-label", messages().emojiSuggestions));
1219
+ _$effect(() => _$setAttribute(_el$33, "aria-label", chatMessages().emojiSuggestions));
1214
1220
  return _el$32;
1215
1221
  }
1216
1222
  }), _el$54, _co$1);
@@ -1304,7 +1310,7 @@ export function ChatComposer(props) {
1304
1310
  return _el$44;
1305
1311
  }
1306
1312
  }), _el$52, _co$0);
1307
- _$effect(() => _$setAttribute(_el$35, "aria-label", messages().commands));
1313
+ _$effect(() => _$setAttribute(_el$35, "aria-label", chatMessages().commands));
1308
1314
  return _el$34;
1309
1315
  }
1310
1316
  }), _el$56, _co$10);
@@ -1367,7 +1373,7 @@ export function ChatComposer(props) {
1367
1373
  var _el$109 = _$getNextElement(_tmpl$27);
1368
1374
  _el$109.$$click = () => reportChatFailure(restore(), props.onError);
1369
1375
  _el$109.$$mousedown = keepFieldFocus;
1370
- _$insert(_el$109, () => messages().restoreOriginal);
1376
+ _$insert(_el$109, () => chatMessages().restoreOriginal);
1371
1377
  _$effect(() => _$setProperty(_el$109, "disabled", microphoneDisabled()));
1372
1378
  _$runHydrationEvents();
1373
1379
  return _el$109;
@@ -1472,7 +1478,7 @@ export function ChatComposer(props) {
1472
1478
  _$insert(_el$126, () => renderAttachmentCopy(attachment), _el$131, _co$32);
1473
1479
  _$effect(_p$ => {
1474
1480
  var _v$36 = href(),
1475
- _v$37 = messages().openInNewTab({
1481
+ _v$37 = chatMessages().openInNewTab({
1476
1482
  name: attachment.name
1477
1483
  });
1478
1484
  _v$36 !== _p$.e && _$setAttribute(_el$126, "href", _p$.e = _v$36);
@@ -1520,7 +1526,7 @@ export function ChatComposer(props) {
1520
1526
  var _el$116 = _$getNextElement(_tmpl$28);
1521
1527
  _el$116.$$click = () => setAttachments(attachments().filter(candidate => candidate.id !== attachment.id));
1522
1528
  _$effect(_p$ => {
1523
- var _v$30 = messages().removeNamed({
1529
+ var _v$30 = selectMessages().removeNamed({
1524
1530
  name: attachment.name
1525
1531
  }),
1526
1532
  _v$31 = blocked();
@@ -1539,7 +1545,7 @@ export function ChatComposer(props) {
1539
1545
  return _el$110;
1540
1546
  })()
1541
1547
  }));
1542
- _$effect(() => _$setAttribute(_el$59, "aria-label", messages().attachments));
1548
+ _$effect(() => _$setAttribute(_el$59, "aria-label", chatMessages().attachments));
1543
1549
  return _el$59;
1544
1550
  }
1545
1551
  }), _el$84, _co$20);
@@ -1602,13 +1608,13 @@ export function ChatComposer(props) {
1602
1608
  get children() {
1603
1609
  return _$createComponent(SelectChip, {
1604
1610
  get ["aria-label"]() {
1605
- return messages().chooseModel;
1611
+ return chatMessages().chooseModel;
1606
1612
  },
1607
1613
  position: "top-right",
1608
1614
  "class": "k2b-chat-composer__model",
1609
1615
  menuWidth: "15rem",
1610
1616
  get placeholder() {
1611
- return messages().model;
1617
+ return chatMessages().model;
1612
1618
  },
1613
1619
  value: () => props.selectedModelId ?? "",
1614
1620
  get options() {
@@ -1746,7 +1752,7 @@ export function ChatComposer(props) {
1746
1752
  },
1747
1753
  children: selection => _$createComponent(FileDropTarget, {
1748
1754
  get label() {
1749
- return messages().dropFilesToAttach;
1755
+ return chatMessages().dropFilesToAttach;
1750
1756
  },
1751
1757
  get accept() {
1752
1758
  return selection().accept;
@@ -1764,7 +1770,7 @@ export function ChatComposer(props) {
1764
1770
  var _v$15 = `k2b-chat-composer ${props.class ?? ""}`,
1765
1771
  _v$16 = running() ? "true" : undefined,
1766
1772
  _v$17 = conversation() ? "conversation" : undefined,
1767
- _v$18 = props.label ?? messages().messageComposer;
1773
+ _v$18 = props.label ?? chatMessages().messageComposer;
1768
1774
  _v$15 !== _p$.e && _$className(_el$57, _p$.e = _v$15);
1769
1775
  _v$16 !== _p$.t && _$setAttribute(_el$57, "data-running", _p$.t = _v$16);
1770
1776
  _v$17 !== _p$.a && _$setAttribute(_el$57, "data-variant", _p$.a = _v$17);