@k2b/ui 0.21.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (563) hide show
  1. package/dist/browser/actions/ContextMenu.js +3 -1
  2. package/dist/browser/actions/ContextMenu.js.map +1 -1
  3. package/dist/browser/actions/FilterChip.js +3 -1
  4. package/dist/browser/actions/FilterChip.js.map +1 -1
  5. package/dist/browser/actions/SpotlightSearch.js +3 -1
  6. package/dist/browser/actions/SpotlightSearch.js.map +1 -1
  7. package/dist/browser/actions/filter-messages.js +20 -0
  8. package/dist/browser/actions/filter-messages.js.map +1 -0
  9. package/dist/browser/actions/spotlight-messages.js +16 -0
  10. package/dist/browser/actions/spotlight-messages.js.map +1 -0
  11. package/dist/browser/chat/ChatComposer.js +47 -41
  12. package/dist/browser/chat/ChatComposer.js.map +1 -1
  13. package/dist/browser/chat/ChatPrimitives.js +25 -23
  14. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  15. package/dist/browser/chat/ChatRoot.js +3 -3
  16. package/dist/browser/chat/ChatRoot.js.map +1 -1
  17. package/dist/browser/chat/ChatTimeline.js +12 -12
  18. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  19. package/dist/browser/chat/chat-messages.js +236 -0
  20. package/dist/browser/chat/chat-messages.js.map +1 -0
  21. package/dist/browser/content/Calendar.js +18 -19
  22. package/dist/browser/content/Calendar.js.map +1 -1
  23. package/dist/browser/content/Chart.js +15 -8
  24. package/dist/browser/content/Chart.js.map +1 -1
  25. package/dist/browser/content/ChartExplorer.js +20 -12
  26. package/dist/browser/content/ChartExplorer.js.map +1 -1
  27. package/dist/browser/content/ChartExplorerControls.js +9 -7
  28. package/dist/browser/content/ChartExplorerControls.js.map +1 -1
  29. package/dist/browser/content/ChartFilterControls.js +4 -2
  30. package/dist/browser/content/ChartFilterControls.js.map +1 -1
  31. package/dist/browser/content/ChartSnapshotView.js +3 -3
  32. package/dist/browser/content/ChartSnapshotView.js.map +1 -1
  33. package/dist/browser/content/DataTable.js +68 -59
  34. package/dist/browser/content/DataTable.js.map +1 -1
  35. package/dist/browser/content/Docs.js +3 -1
  36. package/dist/browser/content/Docs.js.map +1 -1
  37. package/dist/browser/content/FileBrowser.js +30 -26
  38. package/dist/browser/content/FileBrowser.js.map +1 -1
  39. package/dist/browser/content/FileTree.js +9 -7
  40. package/dist/browser/content/FileTree.js.map +1 -1
  41. package/dist/browser/content/FileView.js +37 -28
  42. package/dist/browser/content/FileView.js.map +1 -1
  43. package/dist/browser/content/Lightbox.js +9 -7
  44. package/dist/browser/content/Lightbox.js.map +1 -1
  45. package/dist/browser/content/LogEntriesTable.js +3 -3
  46. package/dist/browser/content/LogEntriesTable.js.map +1 -1
  47. package/dist/browser/content/MessageRow.js +24 -22
  48. package/dist/browser/content/MessageRow.js.map +1 -1
  49. package/dist/browser/content/Pagination.js +7 -7
  50. package/dist/browser/content/Pagination.js.map +1 -1
  51. package/dist/browser/content/PdfPreview.js +15 -13
  52. package/dist/browser/content/PdfPreview.js.map +1 -1
  53. package/dist/browser/content/RangePicker.js +3 -1
  54. package/dist/browser/content/RangePicker.js.map +1 -1
  55. package/dist/browser/content/StructuredDataPreview.js +3 -1
  56. package/dist/browser/content/StructuredDataPreview.js.map +1 -1
  57. package/dist/browser/content/Timeline.js +13 -11
  58. package/dist/browser/content/Timeline.js.map +1 -1
  59. package/dist/browser/content/VideoPlayer.js +5 -5
  60. package/dist/browser/content/VideoPlayer.js.map +1 -1
  61. package/dist/browser/content/VirtualFeed.js +6 -4
  62. package/dist/browser/content/VirtualFeed.js.map +1 -1
  63. package/dist/browser/content/ZoomPanViewport.js +10 -7
  64. package/dist/browser/content/ZoomPanViewport.js.map +1 -1
  65. package/dist/browser/content/calendar-messages.js +39 -1
  66. package/dist/browser/content/calendar-messages.js.map +1 -1
  67. package/dist/browser/content/calendar-pointer.js +4 -3
  68. package/dist/browser/content/calendar-pointer.js.map +1 -1
  69. package/dist/browser/content/chart-messages.js +136 -0
  70. package/dist/browser/content/chart-messages.js.map +1 -0
  71. package/dist/browser/content/collection-selection.js +2 -0
  72. package/dist/browser/content/collection-selection.js.map +1 -1
  73. package/dist/browser/content/data-table-messages.js +24 -0
  74. package/dist/browser/content/data-table-messages.js.map +1 -0
  75. package/dist/browser/content/docs-messages.js +24 -0
  76. package/dist/browser/content/docs-messages.js.map +1 -0
  77. package/dist/browser/content/feed-messages.js +34 -0
  78. package/dist/browser/content/feed-messages.js.map +1 -0
  79. package/dist/browser/content/file-browser-messages.js +69 -0
  80. package/dist/browser/content/file-browser-messages.js.map +1 -0
  81. package/dist/browser/content/file-view-messages.js +64 -0
  82. package/dist/browser/content/file-view-messages.js.map +1 -0
  83. package/dist/browser/content/lightbox-messages.js +36 -0
  84. package/dist/browser/content/lightbox-messages.js.map +1 -0
  85. package/dist/browser/content/log-entries-messages.js +20 -0
  86. package/dist/browser/content/log-entries-messages.js.map +1 -0
  87. package/dist/browser/content/markdown-info-block-messages.js +24 -0
  88. package/dist/browser/content/markdown-info-block-messages.js.map +1 -0
  89. package/dist/browser/content/markdown-info-blocks.js +3 -3
  90. package/dist/browser/content/markdown-info-blocks.js.map +1 -1
  91. package/dist/browser/content/markdown-links.js +2 -2
  92. package/dist/browser/content/markdown-links.js.map +1 -1
  93. package/dist/browser/content/markdown-reference-messages.js +30 -0
  94. package/dist/browser/content/markdown-reference-messages.js.map +1 -0
  95. package/dist/browser/content/pagination-messages.js +38 -0
  96. package/dist/browser/content/pagination-messages.js.map +1 -0
  97. package/dist/browser/content/pdf-messages.js +43 -0
  98. package/dist/browser/content/pdf-messages.js.map +1 -0
  99. package/dist/browser/content/range-picker-messages.js +20 -0
  100. package/dist/browser/content/range-picker-messages.js.map +1 -0
  101. package/dist/browser/content/structured-data-messages.js +22 -0
  102. package/dist/browser/content/structured-data-messages.js.map +1 -0
  103. package/dist/browser/content/timeline-messages.js +62 -0
  104. package/dist/browser/content/timeline-messages.js.map +1 -0
  105. package/dist/browser/content/video-messages.js +24 -0
  106. package/dist/browser/content/video-messages.js.map +1 -0
  107. package/dist/browser/content/viewport-messages.js +28 -0
  108. package/dist/browser/content/viewport-messages.js.map +1 -0
  109. package/dist/browser/feedback/HoverPreview.js +34 -6
  110. package/dist/browser/feedback/HoverPreview.js.map +1 -1
  111. package/dist/browser/feedback/InstallGuide.js +18 -18
  112. package/dist/browser/feedback/InstallGuide.js.map +1 -1
  113. package/dist/browser/feedback/install-messages.js +104 -0
  114. package/dist/browser/feedback/install-messages.js.map +1 -0
  115. package/dist/browser/feedback/prompt-messages.js +65 -0
  116. package/dist/browser/feedback/prompt-messages.js.map +1 -0
  117. package/dist/browser/feedback/prompts.js +14 -11
  118. package/dist/browser/feedback/prompts.js.map +1 -1
  119. package/dist/browser/feedback/toast-messages.js +18 -0
  120. package/dist/browser/feedback/toast-messages.js.map +1 -0
  121. package/dist/browser/feedback/toast.js +4 -3
  122. package/dist/browser/feedback/toast.js.map +1 -1
  123. package/dist/browser/index.js +1 -1
  124. package/dist/browser/index.js.map +1 -1
  125. package/dist/browser/inputs/AutocompleteEditor.js +6 -4
  126. package/dist/browser/inputs/AutocompleteEditor.js.map +1 -1
  127. package/dist/browser/inputs/AutocompleteSelect.js +10 -8
  128. package/dist/browser/inputs/AutocompleteSelect.js.map +1 -1
  129. package/dist/browser/inputs/ChoiceGroups.js +4 -0
  130. package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
  131. package/dist/browser/inputs/ChoiceInputs.js +5 -5
  132. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  133. package/dist/browser/inputs/Combobox.js +3 -1
  134. package/dist/browser/inputs/Combobox.js.map +1 -1
  135. package/dist/browser/inputs/FileDropTarget.js +6 -6
  136. package/dist/browser/inputs/FileDropTarget.js.map +1 -1
  137. package/dist/browser/inputs/FileInputs.js +30 -21
  138. package/dist/browser/inputs/FileInputs.js.map +1 -1
  139. package/dist/browser/inputs/MultiSelectInput.js +7 -5
  140. package/dist/browser/inputs/MultiSelectInput.js.map +1 -1
  141. package/dist/browser/inputs/NumberInput.js +4 -2
  142. package/dist/browser/inputs/NumberInput.js.map +1 -1
  143. package/dist/browser/inputs/QrScanner.js +5 -5
  144. package/dist/browser/inputs/QrScanner.js.map +1 -1
  145. package/dist/browser/inputs/Select.js +7 -5
  146. package/dist/browser/inputs/Select.js.map +1 -1
  147. package/dist/browser/inputs/SelectChip.js +3 -3
  148. package/dist/browser/inputs/SelectChip.js.map +1 -1
  149. package/dist/browser/inputs/SignatureInput.js +9 -3
  150. package/dist/browser/inputs/SignatureInput.js.map +1 -1
  151. package/dist/browser/inputs/SpecialInputs.js +4 -2
  152. package/dist/browser/inputs/SpecialInputs.js.map +1 -1
  153. package/dist/browser/inputs/TagEditor.js +8 -6
  154. package/dist/browser/inputs/TagEditor.js.map +1 -1
  155. package/dist/browser/inputs/TagsInput.js +5 -5
  156. package/dist/browser/inputs/TagsInput.js.map +1 -1
  157. package/dist/browser/inputs/TemplateEditor.js +5 -5
  158. package/dist/browser/inputs/TemplateEditor.js.map +1 -1
  159. package/dist/browser/inputs/TextInput.js +3 -1
  160. package/dist/browser/inputs/TextInput.js.map +1 -1
  161. package/dist/browser/inputs/completion-messages.js +24 -0
  162. package/dist/browser/inputs/completion-messages.js.map +1 -0
  163. package/dist/browser/inputs/file-drop-messages.js +63 -0
  164. package/dist/browser/inputs/file-drop-messages.js.map +1 -0
  165. package/dist/browser/inputs/file-drop.js.map +1 -1
  166. package/dist/browser/inputs/file-input-messages.js +60 -0
  167. package/dist/browser/inputs/file-input-messages.js.map +1 -0
  168. package/dist/browser/inputs/icon-messages.js +22 -0
  169. package/dist/browser/inputs/icon-messages.js.map +1 -0
  170. package/dist/browser/inputs/input-messages.js +38 -0
  171. package/dist/browser/inputs/input-messages.js.map +1 -0
  172. package/dist/browser/inputs/markdown/MarkdownEditor.js +10 -6
  173. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  174. package/dist/browser/inputs/markdown/Toolbar.js +13 -13
  175. package/dist/browser/inputs/markdown/Toolbar.js.map +1 -1
  176. package/dist/browser/inputs/markdown/editor-messages.js +43 -0
  177. package/dist/browser/inputs/markdown/editor-messages.js.map +1 -0
  178. package/dist/browser/inputs/markdown/toolbar-messages.js +40 -0
  179. package/dist/browser/inputs/markdown/toolbar-messages.js.map +1 -0
  180. package/dist/browser/inputs/qr-messages.js +26 -0
  181. package/dist/browser/inputs/qr-messages.js.map +1 -0
  182. package/dist/browser/inputs/select-messages.js +63 -0
  183. package/dist/browser/inputs/select-messages.js.map +1 -0
  184. package/dist/browser/inputs/tag-messages.js +44 -0
  185. package/dist/browser/inputs/tag-messages.js.map +1 -0
  186. package/dist/browser/inputs/template-messages.js +22 -0
  187. package/dist/browser/inputs/template-messages.js.map +1 -0
  188. package/dist/browser/internal/render-error-messages.js +20 -0
  189. package/dist/browser/internal/render-error-messages.js.map +1 -0
  190. package/dist/browser/internal/render-error.js +3 -1
  191. package/dist/browser/internal/render-error.js.map +1 -1
  192. package/dist/browser/internal/text-selection.js +101 -0
  193. package/dist/browser/internal/text-selection.js.map +1 -0
  194. package/dist/browser/intl/messages.js +6 -1155
  195. package/dist/browser/intl/messages.js.map +1 -1
  196. package/dist/browser/layout/AppWorkspace.js +561 -418
  197. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  198. package/dist/browser/layout/BottomSheet.js +6 -1
  199. package/dist/browser/layout/BottomSheet.js.map +1 -1
  200. package/dist/browser/layout/Discussion.js +8 -5
  201. package/dist/browser/layout/Discussion.js.map +1 -1
  202. package/dist/browser/layout/FloatingWindow.js +8 -5
  203. package/dist/browser/layout/FloatingWindow.js.map +1 -1
  204. package/dist/browser/layout/Navigation.js +7 -6
  205. package/dist/browser/layout/Navigation.js.map +1 -1
  206. package/dist/browser/layout/PageTitle.js +370 -0
  207. package/dist/browser/layout/PageTitle.js.map +1 -0
  208. package/dist/browser/layout/PanelDialog.js +8 -6
  209. package/dist/browser/layout/PanelDialog.js.map +1 -1
  210. package/dist/browser/layout/Panes.js +23 -15
  211. package/dist/browser/layout/Panes.js.map +1 -1
  212. package/dist/browser/layout/PullToRefresh.js +13 -4
  213. package/dist/browser/layout/PullToRefresh.js.map +1 -1
  214. package/dist/browser/layout/Settings.js +14 -12
  215. package/dist/browser/layout/Settings.js.map +1 -1
  216. package/dist/browser/layout/SettingsCollection.js +6 -5
  217. package/dist/browser/layout/SettingsCollection.js.map +1 -1
  218. package/dist/browser/layout/SettingsModal.js +3 -1
  219. package/dist/browser/layout/SettingsModal.js.map +1 -1
  220. package/dist/browser/layout/app-workspace-controller.js +743 -12
  221. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  222. package/dist/browser/layout/app-workspace-state.js +3 -2
  223. package/dist/browser/layout/app-workspace-state.js.map +1 -1
  224. package/dist/browser/layout/floating-window-messages.js +28 -0
  225. package/dist/browser/layout/floating-window-messages.js.map +1 -0
  226. package/dist/browser/layout/index.js +2 -0
  227. package/dist/browser/layout/index.js.map +1 -1
  228. package/dist/browser/layout/navigation-model.js.map +1 -1
  229. package/dist/browser/layout/page-title-controller.js +169 -0
  230. package/dist/browser/layout/page-title-controller.js.map +1 -0
  231. package/dist/browser/layout/panel-dialog-messages.js +20 -0
  232. package/dist/browser/layout/panel-dialog-messages.js.map +1 -0
  233. package/dist/browser/layout/panes-messages.js +48 -0
  234. package/dist/browser/layout/panes-messages.js.map +1 -0
  235. package/dist/browser/layout/refresh-messages.js +20 -0
  236. package/dist/browser/layout/refresh-messages.js.map +1 -0
  237. package/dist/browser/layout/settings-messages.js +54 -0
  238. package/dist/browser/layout/settings-messages.js.map +1 -0
  239. package/dist/browser/layout/workspace-messages.js +56 -0
  240. package/dist/browser/layout/workspace-messages.js.map +1 -0
  241. package/dist/browser/surfaces/Avatar.js +5 -5
  242. package/dist/browser/surfaces/Avatar.js.map +1 -1
  243. package/dist/browser/surfaces/ResourceCard.js +4 -2
  244. package/dist/browser/surfaces/ResourceCard.js.map +1 -1
  245. package/dist/browser/surfaces/Tag.js +3 -3
  246. package/dist/browser/surfaces/Tag.js.map +1 -1
  247. package/dist/browser/surfaces/avatar-messages.js +26 -0
  248. package/dist/browser/surfaces/avatar-messages.js.map +1 -0
  249. package/dist/browser/surfaces/resource-messages.js +26 -0
  250. package/dist/browser/surfaces/resource-messages.js.map +1 -0
  251. package/dist/browser/widgets/Widget.js +6 -0
  252. package/dist/browser/widgets/Widget.js.map +1 -1
  253. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  254. package/dist/ssr/actions/FilterChip.js +3 -1
  255. package/dist/ssr/actions/FilterChip.js.map +1 -1
  256. package/dist/ssr/actions/SpotlightSearch.js +3 -1
  257. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  258. package/dist/ssr/actions/filter-messages.js +20 -0
  259. package/dist/ssr/actions/filter-messages.js.map +1 -0
  260. package/dist/ssr/actions/spotlight-messages.js +16 -0
  261. package/dist/ssr/actions/spotlight-messages.js.map +1 -0
  262. package/dist/ssr/chat/ChatComposer.js +47 -41
  263. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  264. package/dist/ssr/chat/ChatPrimitives.js +23 -21
  265. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  266. package/dist/ssr/chat/ChatRoot.js +3 -3
  267. package/dist/ssr/chat/ChatRoot.js.map +1 -1
  268. package/dist/ssr/chat/ChatTimeline.js +11 -11
  269. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  270. package/dist/ssr/chat/chat-messages.js +236 -0
  271. package/dist/ssr/chat/chat-messages.js.map +1 -0
  272. package/dist/ssr/content/Calendar.js +18 -19
  273. package/dist/ssr/content/Calendar.js.map +1 -1
  274. package/dist/ssr/content/Chart.js +12 -5
  275. package/dist/ssr/content/Chart.js.map +1 -1
  276. package/dist/ssr/content/ChartExplorer.js +10 -8
  277. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  278. package/dist/ssr/content/ChartExplorerControls.js +9 -7
  279. package/dist/ssr/content/ChartExplorerControls.js.map +1 -1
  280. package/dist/ssr/content/ChartFilterControls.js +4 -2
  281. package/dist/ssr/content/ChartFilterControls.js.map +1 -1
  282. package/dist/ssr/content/ChartSnapshotView.js +3 -3
  283. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  284. package/dist/ssr/content/DataTable.js +10 -4
  285. package/dist/ssr/content/DataTable.js.map +1 -1
  286. package/dist/ssr/content/Docs.js +3 -1
  287. package/dist/ssr/content/Docs.js.map +1 -1
  288. package/dist/ssr/content/FileBrowser.js +30 -26
  289. package/dist/ssr/content/FileBrowser.js.map +1 -1
  290. package/dist/ssr/content/FileTree.js +9 -7
  291. package/dist/ssr/content/FileTree.js.map +1 -1
  292. package/dist/ssr/content/FileView.js +37 -28
  293. package/dist/ssr/content/FileView.js.map +1 -1
  294. package/dist/ssr/content/Lightbox.js +8 -6
  295. package/dist/ssr/content/Lightbox.js.map +1 -1
  296. package/dist/ssr/content/LogEntriesTable.js +3 -3
  297. package/dist/ssr/content/LogEntriesTable.js.map +1 -1
  298. package/dist/ssr/content/MessageRow.js +24 -22
  299. package/dist/ssr/content/MessageRow.js.map +1 -1
  300. package/dist/ssr/content/Pagination.js +6 -6
  301. package/dist/ssr/content/Pagination.js.map +1 -1
  302. package/dist/ssr/content/PdfPreview.js +15 -13
  303. package/dist/ssr/content/PdfPreview.js.map +1 -1
  304. package/dist/ssr/content/RangePicker.js +3 -1
  305. package/dist/ssr/content/RangePicker.js.map +1 -1
  306. package/dist/ssr/content/StructuredDataPreview.js +3 -1
  307. package/dist/ssr/content/StructuredDataPreview.js.map +1 -1
  308. package/dist/ssr/content/Timeline.js +13 -11
  309. package/dist/ssr/content/Timeline.js.map +1 -1
  310. package/dist/ssr/content/VideoPlayer.js +5 -5
  311. package/dist/ssr/content/VideoPlayer.js.map +1 -1
  312. package/dist/ssr/content/VirtualFeed.js +6 -4
  313. package/dist/ssr/content/VirtualFeed.js.map +1 -1
  314. package/dist/ssr/content/ZoomPanViewport.js +7 -4
  315. package/dist/ssr/content/ZoomPanViewport.js.map +1 -1
  316. package/dist/ssr/content/calendar-messages.js +39 -1
  317. package/dist/ssr/content/calendar-messages.js.map +1 -1
  318. package/dist/ssr/content/calendar-pointer.js +4 -3
  319. package/dist/ssr/content/calendar-pointer.js.map +1 -1
  320. package/dist/ssr/content/chart-messages.js +136 -0
  321. package/dist/ssr/content/chart-messages.js.map +1 -0
  322. package/dist/ssr/content/collection-selection.js +2 -0
  323. package/dist/ssr/content/collection-selection.js.map +1 -1
  324. package/dist/ssr/content/data-table-messages.js +24 -0
  325. package/dist/ssr/content/data-table-messages.js.map +1 -0
  326. package/dist/ssr/content/docs-messages.js +24 -0
  327. package/dist/ssr/content/docs-messages.js.map +1 -0
  328. package/dist/ssr/content/feed-messages.js +34 -0
  329. package/dist/ssr/content/feed-messages.js.map +1 -0
  330. package/dist/ssr/content/file-browser-messages.js +69 -0
  331. package/dist/ssr/content/file-browser-messages.js.map +1 -0
  332. package/dist/ssr/content/file-view-messages.js +64 -0
  333. package/dist/ssr/content/file-view-messages.js.map +1 -0
  334. package/dist/ssr/content/lightbox-messages.js +36 -0
  335. package/dist/ssr/content/lightbox-messages.js.map +1 -0
  336. package/dist/ssr/content/log-entries-messages.js +20 -0
  337. package/dist/ssr/content/log-entries-messages.js.map +1 -0
  338. package/dist/ssr/content/markdown-info-block-messages.js +24 -0
  339. package/dist/ssr/content/markdown-info-block-messages.js.map +1 -0
  340. package/dist/ssr/content/markdown-info-blocks.js +3 -3
  341. package/dist/ssr/content/markdown-info-blocks.js.map +1 -1
  342. package/dist/ssr/content/markdown-links.js +2 -2
  343. package/dist/ssr/content/markdown-links.js.map +1 -1
  344. package/dist/ssr/content/markdown-reference-messages.js +30 -0
  345. package/dist/ssr/content/markdown-reference-messages.js.map +1 -0
  346. package/dist/ssr/content/pagination-messages.js +38 -0
  347. package/dist/ssr/content/pagination-messages.js.map +1 -0
  348. package/dist/ssr/content/pdf-messages.js +43 -0
  349. package/dist/ssr/content/pdf-messages.js.map +1 -0
  350. package/dist/ssr/content/range-picker-messages.js +20 -0
  351. package/dist/ssr/content/range-picker-messages.js.map +1 -0
  352. package/dist/ssr/content/structured-data-messages.js +22 -0
  353. package/dist/ssr/content/structured-data-messages.js.map +1 -0
  354. package/dist/ssr/content/timeline-messages.js +62 -0
  355. package/dist/ssr/content/timeline-messages.js.map +1 -0
  356. package/dist/ssr/content/video-messages.js +24 -0
  357. package/dist/ssr/content/video-messages.js.map +1 -0
  358. package/dist/ssr/content/viewport-messages.js +28 -0
  359. package/dist/ssr/content/viewport-messages.js.map +1 -0
  360. package/dist/ssr/feedback/HoverPreview.js +34 -6
  361. package/dist/ssr/feedback/HoverPreview.js.map +1 -1
  362. package/dist/ssr/feedback/InstallGuide.js +18 -18
  363. package/dist/ssr/feedback/InstallGuide.js.map +1 -1
  364. package/dist/ssr/feedback/install-messages.js +104 -0
  365. package/dist/ssr/feedback/install-messages.js.map +1 -0
  366. package/dist/ssr/feedback/prompt-messages.js +65 -0
  367. package/dist/ssr/feedback/prompt-messages.js.map +1 -0
  368. package/dist/ssr/feedback/prompts.js +14 -11
  369. package/dist/ssr/feedback/prompts.js.map +1 -1
  370. package/dist/ssr/feedback/toast-messages.js +18 -0
  371. package/dist/ssr/feedback/toast-messages.js.map +1 -0
  372. package/dist/ssr/feedback/toast.js +4 -3
  373. package/dist/ssr/feedback/toast.js.map +1 -1
  374. package/dist/ssr/index.js +1 -1
  375. package/dist/ssr/index.js.map +1 -1
  376. package/dist/ssr/inputs/AutocompleteEditor.js +5 -3
  377. package/dist/ssr/inputs/AutocompleteEditor.js.map +1 -1
  378. package/dist/ssr/inputs/AutocompleteSelect.js +10 -8
  379. package/dist/ssr/inputs/AutocompleteSelect.js.map +1 -1
  380. package/dist/ssr/inputs/ChoiceGroups.js +4 -0
  381. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
  382. package/dist/ssr/inputs/ChoiceInputs.js +5 -5
  383. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  384. package/dist/ssr/inputs/Combobox.js +3 -1
  385. package/dist/ssr/inputs/Combobox.js.map +1 -1
  386. package/dist/ssr/inputs/FileDropTarget.js +6 -6
  387. package/dist/ssr/inputs/FileDropTarget.js.map +1 -1
  388. package/dist/ssr/inputs/FileInputs.js +29 -20
  389. package/dist/ssr/inputs/FileInputs.js.map +1 -1
  390. package/dist/ssr/inputs/MultiSelectInput.js +7 -5
  391. package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
  392. package/dist/ssr/inputs/NumberInput.js +4 -2
  393. package/dist/ssr/inputs/NumberInput.js.map +1 -1
  394. package/dist/ssr/inputs/QrScanner.js +4 -4
  395. package/dist/ssr/inputs/QrScanner.js.map +1 -1
  396. package/dist/ssr/inputs/Select.js +7 -5
  397. package/dist/ssr/inputs/Select.js.map +1 -1
  398. package/dist/ssr/inputs/SelectChip.js +3 -3
  399. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  400. package/dist/ssr/inputs/SignatureInput.js +9 -3
  401. package/dist/ssr/inputs/SignatureInput.js.map +1 -1
  402. package/dist/ssr/inputs/SpecialInputs.js +4 -2
  403. package/dist/ssr/inputs/SpecialInputs.js.map +1 -1
  404. package/dist/ssr/inputs/TagEditor.js +8 -6
  405. package/dist/ssr/inputs/TagEditor.js.map +1 -1
  406. package/dist/ssr/inputs/TagsInput.js +5 -5
  407. package/dist/ssr/inputs/TagsInput.js.map +1 -1
  408. package/dist/ssr/inputs/TemplateEditor.js +5 -5
  409. package/dist/ssr/inputs/TemplateEditor.js.map +1 -1
  410. package/dist/ssr/inputs/TextInput.js +3 -1
  411. package/dist/ssr/inputs/TextInput.js.map +1 -1
  412. package/dist/ssr/inputs/completion-messages.js +24 -0
  413. package/dist/ssr/inputs/completion-messages.js.map +1 -0
  414. package/dist/ssr/inputs/file-drop-messages.js +63 -0
  415. package/dist/ssr/inputs/file-drop-messages.js.map +1 -0
  416. package/dist/ssr/inputs/file-drop.js.map +1 -1
  417. package/dist/ssr/inputs/file-input-messages.js +60 -0
  418. package/dist/ssr/inputs/file-input-messages.js.map +1 -0
  419. package/dist/ssr/inputs/icon-messages.js +22 -0
  420. package/dist/ssr/inputs/icon-messages.js.map +1 -0
  421. package/dist/ssr/inputs/input-messages.js +38 -0
  422. package/dist/ssr/inputs/input-messages.js.map +1 -0
  423. package/dist/ssr/inputs/markdown/MarkdownEditor.js +9 -5
  424. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  425. package/dist/ssr/inputs/markdown/Toolbar.js +13 -13
  426. package/dist/ssr/inputs/markdown/Toolbar.js.map +1 -1
  427. package/dist/ssr/inputs/markdown/editor-messages.js +43 -0
  428. package/dist/ssr/inputs/markdown/editor-messages.js.map +1 -0
  429. package/dist/ssr/inputs/markdown/toolbar-messages.js +40 -0
  430. package/dist/ssr/inputs/markdown/toolbar-messages.js.map +1 -0
  431. package/dist/ssr/inputs/qr-messages.js +26 -0
  432. package/dist/ssr/inputs/qr-messages.js.map +1 -0
  433. package/dist/ssr/inputs/select-messages.js +63 -0
  434. package/dist/ssr/inputs/select-messages.js.map +1 -0
  435. package/dist/ssr/inputs/tag-messages.js +44 -0
  436. package/dist/ssr/inputs/tag-messages.js.map +1 -0
  437. package/dist/ssr/inputs/template-messages.js +22 -0
  438. package/dist/ssr/inputs/template-messages.js.map +1 -0
  439. package/dist/ssr/internal/render-error-messages.js +20 -0
  440. package/dist/ssr/internal/render-error-messages.js.map +1 -0
  441. package/dist/ssr/internal/render-error.js +3 -1
  442. package/dist/ssr/internal/render-error.js.map +1 -1
  443. package/dist/ssr/internal/text-selection.js +101 -0
  444. package/dist/ssr/internal/text-selection.js.map +1 -0
  445. package/dist/ssr/intl/messages.js +6 -1155
  446. package/dist/ssr/intl/messages.js.map +1 -1
  447. package/dist/ssr/layout/AppWorkspace.js +203 -96
  448. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  449. package/dist/ssr/layout/BottomSheet.js +1 -0
  450. package/dist/ssr/layout/BottomSheet.js.map +1 -1
  451. package/dist/ssr/layout/Discussion.js +8 -5
  452. package/dist/ssr/layout/Discussion.js.map +1 -1
  453. package/dist/ssr/layout/FloatingWindow.js +8 -5
  454. package/dist/ssr/layout/FloatingWindow.js.map +1 -1
  455. package/dist/ssr/layout/Navigation.js +6 -5
  456. package/dist/ssr/layout/Navigation.js.map +1 -1
  457. package/dist/ssr/layout/PageTitle.js +253 -0
  458. package/dist/ssr/layout/PageTitle.js.map +1 -0
  459. package/dist/ssr/layout/PanelDialog.js +8 -6
  460. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  461. package/dist/ssr/layout/Panes.js +22 -14
  462. package/dist/ssr/layout/Panes.js.map +1 -1
  463. package/dist/ssr/layout/PullToRefresh.js +13 -4
  464. package/dist/ssr/layout/PullToRefresh.js.map +1 -1
  465. package/dist/ssr/layout/Settings.js +14 -12
  466. package/dist/ssr/layout/Settings.js.map +1 -1
  467. package/dist/ssr/layout/SettingsCollection.js +6 -5
  468. package/dist/ssr/layout/SettingsCollection.js.map +1 -1
  469. package/dist/ssr/layout/SettingsModal.js +3 -1
  470. package/dist/ssr/layout/SettingsModal.js.map +1 -1
  471. package/dist/ssr/layout/app-workspace-controller.js +743 -12
  472. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  473. package/dist/ssr/layout/app-workspace-state.js +3 -2
  474. package/dist/ssr/layout/app-workspace-state.js.map +1 -1
  475. package/dist/ssr/layout/floating-window-messages.js +28 -0
  476. package/dist/ssr/layout/floating-window-messages.js.map +1 -0
  477. package/dist/ssr/layout/index.js +2 -0
  478. package/dist/ssr/layout/index.js.map +1 -1
  479. package/dist/ssr/layout/navigation-model.js.map +1 -1
  480. package/dist/ssr/layout/page-title-controller.js +169 -0
  481. package/dist/ssr/layout/page-title-controller.js.map +1 -0
  482. package/dist/ssr/layout/panel-dialog-messages.js +20 -0
  483. package/dist/ssr/layout/panel-dialog-messages.js.map +1 -0
  484. package/dist/ssr/layout/panes-messages.js +48 -0
  485. package/dist/ssr/layout/panes-messages.js.map +1 -0
  486. package/dist/ssr/layout/refresh-messages.js +20 -0
  487. package/dist/ssr/layout/refresh-messages.js.map +1 -0
  488. package/dist/ssr/layout/settings-messages.js +54 -0
  489. package/dist/ssr/layout/settings-messages.js.map +1 -0
  490. package/dist/ssr/layout/workspace-messages.js +56 -0
  491. package/dist/ssr/layout/workspace-messages.js.map +1 -0
  492. package/dist/ssr/surfaces/Avatar.js +5 -5
  493. package/dist/ssr/surfaces/Avatar.js.map +1 -1
  494. package/dist/ssr/surfaces/ResourceCard.js +4 -2
  495. package/dist/ssr/surfaces/ResourceCard.js.map +1 -1
  496. package/dist/ssr/surfaces/Tag.js +3 -3
  497. package/dist/ssr/surfaces/Tag.js.map +1 -1
  498. package/dist/ssr/surfaces/avatar-messages.js +26 -0
  499. package/dist/ssr/surfaces/avatar-messages.js.map +1 -0
  500. package/dist/ssr/surfaces/resource-messages.js +26 -0
  501. package/dist/ssr/surfaces/resource-messages.js.map +1 -0
  502. package/dist/ssr/widgets/Widget.js +6 -0
  503. package/dist/ssr/widgets/Widget.js.map +1 -1
  504. package/dist/styles.css +1 -1
  505. package/dist/types/actions/filter-messages.d.ts +8 -0
  506. package/dist/types/actions/spotlight-messages.d.ts +8 -0
  507. package/dist/types/chat/chat-messages.d.ts +116 -0
  508. package/dist/types/content/DataTable.d.ts +2 -0
  509. package/dist/types/content/FileView.d.ts +0 -10
  510. package/dist/types/content/calendar-messages.d.ts +20 -1
  511. package/dist/types/content/chart-messages.d.ts +32 -0
  512. package/dist/types/content/data-table-messages.d.ts +10 -0
  513. package/dist/types/content/docs-messages.d.ts +10 -0
  514. package/dist/types/content/feed-messages.d.ts +15 -0
  515. package/dist/types/content/file-browser-messages.d.ts +33 -0
  516. package/dist/types/content/file-view-messages.d.ts +30 -0
  517. package/dist/types/content/lightbox-messages.d.ts +16 -0
  518. package/dist/types/content/log-entries-messages.d.ts +8 -0
  519. package/dist/types/content/markdown-info-block-messages.d.ts +12 -0
  520. package/dist/types/content/markdown-reference-messages.d.ts +15 -0
  521. package/dist/types/content/pagination-messages.d.ts +17 -0
  522. package/dist/types/content/pdf-messages.d.ts +20 -0
  523. package/dist/types/content/range-picker-messages.d.ts +8 -0
  524. package/dist/types/content/structured-data-messages.d.ts +9 -0
  525. package/dist/types/content/timeline-messages.d.ts +29 -0
  526. package/dist/types/content/video-messages.d.ts +10 -0
  527. package/dist/types/content/viewport-messages.d.ts +12 -0
  528. package/dist/types/feedback/install-messages.d.ts +50 -0
  529. package/dist/types/feedback/prompt-messages.d.ts +31 -0
  530. package/dist/types/feedback/toast-messages.d.ts +9 -0
  531. package/dist/types/index.d.ts +1 -0
  532. package/dist/types/inputs/completion-messages.d.ts +10 -0
  533. package/dist/types/inputs/file-drop-messages.d.ts +30 -0
  534. package/dist/types/inputs/file-drop.d.ts +3 -3
  535. package/dist/types/inputs/file-input-messages.d.ts +28 -0
  536. package/dist/types/inputs/icon-messages.d.ts +9 -0
  537. package/dist/types/inputs/input-messages.d.ts +17 -0
  538. package/dist/types/inputs/markdown/editor-messages.d.ts +20 -0
  539. package/dist/types/inputs/markdown/toolbar-messages.d.ts +18 -0
  540. package/dist/types/inputs/qr-messages.d.ts +11 -0
  541. package/dist/types/inputs/select-messages.d.ts +30 -0
  542. package/dist/types/inputs/tag-messages.d.ts +20 -0
  543. package/dist/types/inputs/template-messages.d.ts +9 -0
  544. package/dist/types/internal/render-error-messages.d.ts +8 -0
  545. package/dist/types/internal/text-selection.d.ts +18 -0
  546. package/dist/types/intl/messages.d.ts +3 -544
  547. package/dist/types/layout/AppWorkspace.d.ts +19 -4
  548. package/dist/types/layout/PageTitle.d.ts +64 -0
  549. package/dist/types/layout/app-workspace-controller.d.ts +4 -0
  550. package/dist/types/layout/app-workspace-state.d.ts +3 -2
  551. package/dist/types/layout/floating-window-messages.d.ts +12 -0
  552. package/dist/types/layout/index.d.ts +3 -0
  553. package/dist/types/layout/navigation-model.d.ts +7 -0
  554. package/dist/types/layout/page-title-controller.d.ts +13 -0
  555. package/dist/types/layout/panel-dialog-messages.d.ts +8 -0
  556. package/dist/types/layout/panes-messages.d.ts +22 -0
  557. package/dist/types/layout/refresh-messages.d.ts +8 -0
  558. package/dist/types/layout/settings-messages.d.ts +25 -0
  559. package/dist/types/layout/workspace-messages.d.ts +26 -0
  560. package/dist/types/surfaces/avatar-messages.d.ts +11 -0
  561. package/dist/types/surfaces/resource-messages.d.ts +11 -0
  562. package/dist/types/widgets/Widget.d.ts +5 -1
  563. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["layout/Panes.tsx"],"sourcesContent":["import { type DndCollisionContext, type DndController, type DndDroppableSnapshot, dnd } from \"@k2b/stdlib/solid\";\nimport { createEffect, createMemo, createSignal, createUniqueId, For, type JSX, onCleanup, onMount, Show } from \"solid-js\";\nimport { Tooltip } from \"../feedback/Tooltip\";\nimport { useUiMessages } from \"../intl/messages\";\nimport {\n activatePanesItem,\n applyPanesIntent,\n getPanesDropTargets,\n PANES_MAX_ID_LENGTH,\n PANES_MIN_RATIO,\n type PanesDropTarget,\n type PanesGroup,\n type PanesIntent,\n type PanesLayout,\n type PanesNode,\n type PanesPath,\n type PanesSplit,\n parsePanesLayout,\n resizePanesSplit,\n samePanesIntent,\n} from \"./panes-layout\";\nimport { assertUniqueStableUiIds } from \"./stable-id\";\n\nexport type PanesItem = {\n id: string;\n title: string;\n icon?: string;\n render: () => JSX.Element;\n onClose?: () => void;\n};\n\nexport type PanesProps = {\n layout: PanesLayout;\n onLayoutChange: (layout: PanesLayout) => void;\n items: readonly PanesItem[];\n movable?: boolean;\n resizable?: boolean;\n split?: false | \"horizontal\" | \"vertical\" | \"both\";\n onAddItem?: (targetItemId: string | null) => void;\n ariaLabel?: string;\n class?: string;\n};\n\ntype DragMeta = { itemId: string; label: string };\ntype DropMeta = { target: PanesDropTarget; label: string };\ntype PaneDnd = DndController<DragMeta, DropMeta, PanesIntent>;\n\ntype IndexedPanesDropTargets = {\n tabs: ReadonlyMap<string | null, PanesDropTarget>;\n body: readonly PanesDropTarget[];\n};\n\ntype PanesSeparatorGeometry = {\n coordinate: number;\n crossStart: number;\n crossEnd: number;\n};\n\nconst PANES_RESIZE_SNAP_DISTANCE = 8;\nconst PANES_RESIZE_UNSNAP_DISTANCE = 12;\nconst PANES_RESIZE_NEIGHBOR_GAP = 16;\n\nconst intervalGap = (left: PanesSeparatorGeometry, right: PanesSeparatorGeometry): number =>\n left.crossEnd < right.crossStart\n ? right.crossStart - left.crossEnd\n : right.crossEnd < left.crossStart\n ? left.crossStart - right.crossEnd\n : 0;\n\nexport const resolvePanesResizeSnap = (\n coordinate: number,\n source: PanesSeparatorGeometry,\n candidates: readonly PanesSeparatorGeometry[],\n options: { activeCoordinate?: number | null; previousCoordinate?: number } = {},\n): { coordinate: number; snappedTo: number | null } => {\n const neighbors = candidates.filter((candidate) => {\n const gap = intervalGap(source, candidate);\n return gap > 0 && gap <= PANES_RESIZE_NEIGHBOR_GAP;\n });\n const activeCoordinate = options.activeCoordinate;\n const active =\n activeCoordinate === null || activeCoordinate === undefined\n ? null\n : neighbors.find((candidate) => Math.abs(candidate.coordinate - activeCoordinate) < 0.5);\n if (active && Math.abs(coordinate - active.coordinate) <= PANES_RESIZE_UNSNAP_DISTANCE) {\n return { coordinate: active.coordinate, snappedTo: active.coordinate };\n }\n\n const previous = options.previousCoordinate;\n let winner: PanesSeparatorGeometry | null = null;\n let winnerDistance = Number.POSITIVE_INFINITY;\n for (const candidate of neighbors) {\n if (previous !== undefined && Math.abs(candidate.coordinate - previous) < 0.5) continue;\n const distanceToRange =\n previous === undefined ||\n candidate.coordinate < Math.min(previous, coordinate) ||\n candidate.coordinate > Math.max(previous, coordinate)\n ? Math.abs(candidate.coordinate - coordinate)\n : 0;\n const distanceToCoordinate = Math.abs(candidate.coordinate - coordinate);\n if (distanceToRange <= PANES_RESIZE_SNAP_DISTANCE && distanceToCoordinate < winnerDistance) {\n winner = candidate;\n winnerDistance = distanceToCoordinate;\n }\n }\n return winner ? { coordinate: winner.coordinate, snappedTo: winner.coordinate } : { coordinate, snappedTo: null };\n};\n\nexport const indexPanesDropTargets = (targets: readonly PanesDropTarget[]): ReadonlyMap<string, IndexedPanesDropTargets> => {\n const mutable = new Map<string, { tabs: Map<string | null, PanesDropTarget>; body: PanesDropTarget[] }>();\n for (const target of targets) {\n let indexed = mutable.get(target.targetItemId);\n if (!indexed) {\n indexed = { tabs: new Map(), body: [] };\n mutable.set(target.targetItemId, indexed);\n }\n if (target.kind === \"tab\") indexed.tabs.set(target.beforeItemId ?? null, target);\n else indexed.body.push(target);\n }\n return mutable;\n};\n\nconst iconClass = (icon: string | undefined): string => {\n const value = icon?.trim() || \"ti-layout-sidebar-right\";\n return value.startsWith(\"ti \") ? value : `ti ${value}`;\n};\n\nconst collectLayoutItemIds = (node: PanesNode | null, ids: string[] = []): string[] => {\n if (!node) return ids;\n if (node.type === \"group\") ids.push(...node.items);\n else {\n collectLayoutItemIds(node.first, ids);\n collectLayoutItemIds(node.second, ids);\n }\n return ids;\n};\n\nconst nearestDroppable = (entries: DndDroppableSnapshot<DropMeta>[]): DndDroppableSnapshot<DropMeta> | null =>\n entries.reduce<DndDroppableSnapshot<DropMeta> | null>(\n (winner, entry) => (!winner || entry.distance < winner.distance ? entry : winner),\n null,\n );\n\nexport const pointerHitsPanesDropTarget = (\n entry: Pick<DndDroppableSnapshot<DropMeta>, \"containsPointer\" | \"meta\" | \"rect\"> &\n Partial<Pick<DndDroppableSnapshot<DropMeta>, \"element\">>,\n pointer: { x: number; y: number },\n hitElement?: Element | null,\n): boolean => {\n if (hitElement !== undefined && !entry.element?.contains(hitElement)) return false;\n const side = entry.meta.target.side;\n if (entry.meta.target.kind !== \"split\" || !side) return entry.containsPointer;\n if (!entry.containsPointer) return false;\n const x = pointer.x - entry.rect.left;\n const y = pointer.y - entry.rect.top;\n if (side === \"top\") return x >= y && x <= entry.rect.width - y;\n if (side === \"bottom\") {\n const corner = entry.rect.height - y;\n return x >= corner && x <= entry.rect.width - corner;\n }\n if (side === \"left\") return y >= x && y <= entry.rect.height - x;\n const corner = entry.rect.width - x;\n return y >= corner && y <= entry.rect.height - corner;\n};\n\nconst panesCollisionDetector = (\n context: DndCollisionContext<DragMeta, DropMeta, PanesIntent>,\n mode: \"pointer\" | \"keyboard\" | null,\n): string | null => {\n const document = mode === \"pointer\" ? context.droppables[0]?.element.ownerDocument : undefined;\n const hitElement = document?.elementFromPoint(context.pointer.x, context.pointer.y) ?? undefined;\n return nearestDroppable(context.droppables.filter((entry) => pointerHitsPanesDropTarget(entry, context.pointer, hitElement)))?.id ?? null;\n};\n\nconst createItemMap = (items: readonly PanesItem[]): Map<string, PanesItem> => {\n assertUniqueStableUiIds(\n items.map((item) => item.id),\n \"Panes item id\",\n PANES_MAX_ID_LENGTH,\n );\n return new Map(items.map((item) => [item.id, item]));\n};\n\nconst requireItem = (items: Map<string, PanesItem>, id: string): PanesItem => {\n const item = items.get(id);\n if (!item) throw new Error(`Panes layout references missing item \"${id}\".`);\n return item;\n};\n\nexport default function Panes(props: PanesProps): JSX.Element {\n const messages = useUiMessages();\n const instanceId = `k2b-panes-${createUniqueId()}`;\n const items = createMemo(() => createItemMap(props.items));\n const layout = createMemo(() => {\n if (!parsePanesLayout(props.layout)) throw new Error(\"Panes layout must be a valid version 2 layout.\");\n for (const id of collectLayoutItemIds(props.layout.root)) requireItem(items(), id);\n return props.layout;\n });\n const canMove = () => props.movable ?? true;\n const canResize = () => props.resizable ?? true;\n const split = () => props.split ?? \"both\";\n const [draggedItemId, setDraggedItemId] = createSignal<string | null>(null);\n const [dragMode, setDragMode] = createSignal<\"pointer\" | \"keyboard\" | null>(null);\n const dropTargets = createMemo(() => {\n const itemId = draggedItemId();\n return itemId ? getPanesDropTargets(layout(), itemId, { movable: canMove(), split: split() }) : [];\n });\n const dropTargetIndex = createMemo(() => indexPanesDropTargets(dropTargets()));\n const paneDnd = dnd.create<DragMeta, DropMeta, PanesIntent>({\n collisionDetector: (context) => panesCollisionDetector(context, dragMode()),\n buildIntent: ({ over }) => over?.meta.target.intent ?? null,\n isSameIntent: samePanesIntent,\n onDragStart: ({ active, mode }) => {\n setDragMode(mode);\n setDraggedItemId(active.meta.itemId);\n },\n announcements: {\n dragStart: (active) => `Picked up ${active.meta.label}.`,\n dragOver: (active, over) => (over ? `Move ${active.meta.label} to ${over.meta.label}.` : `${active.meta.label} is not over a pane.`),\n drop: (active, over) => (over ? `Moved ${active.meta.label} to ${over.meta.label}.` : `Did not move ${active.meta.label}.`),\n cancel: (active) => `Cancelled moving ${active.meta.label}.`,\n },\n onDrop: ({ intent, mode }) => {\n setDragMode(null);\n setDraggedItemId(null);\n if (!intent) return;\n const current = layout();\n const next = applyPanesIntent(current, intent);\n if (next === current) return;\n props.onLayoutChange(next);\n if (mode === \"keyboard\") queueMicrotask(() => document.getElementById(`${instanceId}-${intent.itemId}-tab`)?.focus());\n },\n onCancel: () => {\n setDragMode(null);\n setDraggedItemId(null);\n },\n });\n const activate = (itemId: string) => {\n const current = layout();\n const next = activatePanesItem(current, itemId);\n if (next !== current) props.onLayoutChange(next);\n };\n const requestAdd = (targetItemId: string | null) => props.onAddItem?.(targetItemId);\n\n return (\n <div class={`k2b-panes ${props.class ?? \"\"}`} data-k2b-panes role=\"group\" aria-label={props.ariaLabel ?? messages().paneWorkspace}>\n <Show\n when={layout().root}\n fallback={\n <div class=\"k2b-panes__empty\">\n <Show when={props.onAddItem !== undefined}>\n <button type=\"button\" class=\"k2b-panes__add\" onClick={() => requestAdd(null)} aria-label={messages().addPane}>\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n <span>{messages().addPane}</span>\n </button>\n </Show>\n </div>\n }\n >\n {(root) => (\n <PanesNodeRenderer\n node={root}\n path={[]}\n layout={layout}\n itemById={items}\n dnd={paneDnd}\n dropTargetIndex={dropTargetIndex}\n instanceId={instanceId}\n canMove={canMove}\n canResize={canResize}\n addItem={requestAdd}\n canAdd={() => props.onAddItem !== undefined}\n onActivate={activate}\n onLayoutChange={props.onLayoutChange}\n />\n )}\n </Show>\n </div>\n );\n}\n\ntype RendererProps = {\n node: () => PanesNode;\n path: PanesPath;\n layout: () => PanesLayout;\n itemById: () => Map<string, PanesItem>;\n dnd: PaneDnd;\n dropTargetIndex: () => ReadonlyMap<string, IndexedPanesDropTargets>;\n instanceId: string;\n canMove: () => boolean;\n canResize: () => boolean;\n addItem: (targetItemId: string | null) => void;\n canAdd: () => boolean;\n onActivate: (itemId: string) => void;\n onLayoutChange: (layout: PanesLayout) => void;\n};\n\nfunction PanesNodeRenderer(props: RendererProps): JSX.Element {\n const split = createMemo(() => {\n const node = props.node();\n return node.type === \"split\" ? node : null;\n });\n const group = createMemo(() => {\n const node = props.node();\n return node.type === \"group\" ? node : null;\n });\n return (\n <>\n <Show when={split()}>{(node) => <PanesSplitRenderer {...props} node={node} />}</Show>\n <Show when={group()}>{(node) => <PanesGroupRenderer {...props} node={node} />}</Show>\n </>\n );\n}\n\nfunction PanesSplitRenderer(props: Omit<RendererProps, \"node\"> & { node: () => PanesSplit }): JSX.Element {\n const messages = useUiMessages();\n let container: HTMLDivElement | undefined;\n let separatorElement: HTMLButtonElement | undefined;\n let stopResize: (() => void) | undefined;\n let finishResize: (() => void) | undefined;\n const stopActiveResize = () => {\n stopResize?.();\n stopResize = undefined;\n finishResize = undefined;\n };\n const finishActiveResize = () => {\n finishResize?.();\n stopResize = undefined;\n finishResize = undefined;\n };\n onCleanup(stopActiveResize);\n const commitRatio = (ratio: number) => {\n const current = props.layout();\n const next = resizePanesSplit(current, props.path, ratio);\n if (next !== current) props.onLayoutChange(next);\n };\n const resizeGeometry = (separator: HTMLElement | undefined) => {\n if (!separator) return null;\n const direction = props.node().direction;\n const containerRect = container?.getBoundingClientRect();\n const separatorRect = separator.getBoundingClientRect();\n const extent = direction === \"horizontal\" ? (containerRect?.width ?? 0) : (containerRect?.height ?? 0);\n const separatorExtent = direction === \"horizontal\" ? separatorRect.width : separatorRect.height;\n const availableExtent = extent - separatorExtent;\n if (!containerRect || availableExtent <= 0 || separatorRect.width <= 0 || separatorRect.height <= 0) return null;\n const geometry = (rect: DOMRect): PanesSeparatorGeometry =>\n direction === \"horizontal\"\n ? { coordinate: rect.left + rect.width / 2, crossStart: rect.top, crossEnd: rect.bottom }\n : { coordinate: rect.top + rect.height / 2, crossStart: rect.left, crossEnd: rect.right };\n const panes = separator.closest<HTMLElement>(\"[data-k2b-panes]\");\n const candidates = panes\n ? Array.from(panes.querySelectorAll<HTMLElement>(`.k2b-panes__separator[data-direction=\"${direction}\"]`))\n .filter((candidate) => candidate !== separator && candidate.closest(\"[data-k2b-panes]\") === panes)\n .map((candidate) => candidate.getBoundingClientRect())\n .filter((rect) => rect.width > 0 && rect.height > 0)\n .map(geometry)\n : [];\n const origin = direction === \"horizontal\" ? containerRect.left + separatorExtent / 2 : containerRect.top + separatorExtent / 2;\n return {\n source: geometry(separatorRect),\n candidates,\n coordinateForRatio: (ratio: number) => origin + availableExtent * ratio,\n ratioForCoordinate: (coordinate: number) => (coordinate - origin) / availableExtent,\n };\n };\n const startResize = (event: PointerEvent) => {\n if (!props.canResize()) return;\n event.preventDefault();\n stopActiveResize();\n const pointerId = event.pointerId;\n const captureTarget = (event.currentTarget as HTMLElement | null) ?? separatorElement;\n if (!captureTarget) return;\n const start = props.node().direction === \"horizontal\" ? event.clientX : event.clientY;\n const geometry = resizeGeometry(captureTarget);\n const startRatio = props.node().ratio;\n const startCoordinate = geometry?.source.coordinate;\n const rect = container?.getBoundingClientRect();\n const extent = Math.max(1, props.node().direction === \"horizontal\" ? (rect?.width ?? 1) : (rect?.height ?? 1));\n let snappedTo: number | null = null;\n let frame: number | undefined;\n let pendingRatio: number | undefined;\n const flush = () => {\n if (frame !== undefined) cancelAnimationFrame(frame);\n frame = undefined;\n if (pendingRatio === undefined) return;\n const ratio = pendingRatio;\n pendingRatio = undefined;\n commitRatio(ratio);\n };\n const onMove = (move: PointerEvent) => {\n if (move.pointerId !== pointerId) return;\n const current = props.node().direction === \"horizontal\" ? move.clientX : move.clientY;\n if (geometry && startCoordinate !== undefined) {\n const snapped = resolvePanesResizeSnap(startCoordinate + current - start, geometry.source, geometry.candidates, {\n activeCoordinate: snappedTo,\n });\n snappedTo = snapped.snappedTo;\n pendingRatio = geometry.ratioForCoordinate(snapped.coordinate);\n } else {\n pendingRatio = startRatio + (current - start) / extent;\n }\n if (frame === undefined) frame = requestAnimationFrame(flush);\n };\n const onEnd = (end: PointerEvent) => {\n if (end.pointerId === pointerId) finishActiveResize();\n };\n stopResize = () => {\n if (frame !== undefined) cancelAnimationFrame(frame);\n frame = undefined;\n pendingRatio = undefined;\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onEnd);\n window.removeEventListener(\"pointercancel\", onEnd);\n window.removeEventListener(\"blur\", finishActiveResize);\n if (captureTarget.hasPointerCapture?.(pointerId)) captureTarget.releasePointerCapture(pointerId);\n };\n finishResize = () => {\n flush();\n stopResize?.();\n };\n captureTarget.setPointerCapture?.(pointerId);\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onEnd);\n window.addEventListener(\"pointercancel\", onEnd);\n window.addEventListener(\"blur\", finishActiveResize);\n };\n const onResizeKeyDown = (event: KeyboardEvent) => {\n if (!props.canResize()) return;\n const step = event.shiftKey ? 0.08 : 0.02;\n let ratio: number | null = null;\n if (event.key === \"Home\") ratio = PANES_MIN_RATIO;\n if (event.key === \"End\") ratio = 1 - PANES_MIN_RATIO;\n if (props.node().direction === \"horizontal\" && event.key === \"ArrowLeft\") ratio = props.node().ratio - step;\n if (props.node().direction === \"horizontal\" && event.key === \"ArrowRight\") ratio = props.node().ratio + step;\n if (props.node().direction === \"vertical\" && event.key === \"ArrowUp\") ratio = props.node().ratio - step;\n if (props.node().direction === \"vertical\" && event.key === \"ArrowDown\") ratio = props.node().ratio + step;\n if (ratio === null) return;\n event.preventDefault();\n const geometry = resizeGeometry((event.currentTarget as HTMLElement | null) ?? separatorElement);\n if (geometry) {\n const snapped = resolvePanesResizeSnap(geometry.coordinateForRatio(ratio), geometry.source, geometry.candidates, {\n previousCoordinate: geometry.source.coordinate,\n });\n ratio = geometry.ratioForCoordinate(snapped.coordinate);\n }\n commitRatio(ratio);\n };\n return (\n <div ref={container} class=\"k2b-panes__split\" data-direction={props.node().direction}>\n <div class=\"k2b-panes__split-child\" style={{ flex: `${props.node().ratio} 1 0` }}>\n <PanesNodeRenderer {...props} node={() => props.node().first} path={[...props.path, \"first\"]} />\n </div>\n <button\n ref={separatorElement}\n type=\"button\"\n role=\"separator\"\n aria-orientation={props.node().direction === \"horizontal\" ? \"vertical\" : \"horizontal\"}\n aria-valuemin={Math.round(PANES_MIN_RATIO * 100)}\n aria-valuemax={Math.round((1 - PANES_MIN_RATIO) * 100)}\n aria-valuenow={Math.round(props.node().ratio * 100)}\n aria-disabled={!props.canResize()}\n tabIndex={props.canResize() ? 0 : -1}\n class=\"k2b-panes__separator\"\n data-direction={props.node().direction}\n aria-label={messages().resizePanes}\n onPointerDown={startResize}\n onKeyDown={onResizeKeyDown}\n >\n <span aria-hidden=\"true\" />\n </button>\n <div class=\"k2b-panes__split-child\" style={{ flex: `${1 - props.node().ratio} 1 0` }}>\n <PanesNodeRenderer {...props} node={() => props.node().second} path={[...props.path, \"second\"]} />\n </div>\n </div>\n );\n}\n\nfunction ActivePane(props: { itemId: string; itemById: () => Map<string, PanesItem> }): JSX.Element {\n return requireItem(props.itemById(), props.itemId).render();\n}\n\nfunction PanesGroupRenderer(props: Omit<RendererProps, \"node\"> & { node: () => PanesGroup }): JSX.Element {\n const messages = useUiMessages();\n let tabsElement: HTMLDivElement | undefined;\n let scrollbarDragOffset = 0;\n let stopTabPress: (() => void) | undefined;\n let suppressedPointerClick: string | null = null;\n let clearSuppressedPointerClick: number | undefined;\n const dndInstanceId = createUniqueId();\n const draggableId = (id: string) => `panes-item:${dndInstanceId}:${id}`;\n const itemIds = createMemo(() => props.node().items);\n const groupTargets = createMemo<IndexedPanesDropTargets | null>(() => {\n const index = props.dropTargetIndex();\n for (const itemId of itemIds()) {\n const indexed = index.get(itemId);\n if (indexed) return indexed;\n }\n return null;\n });\n const targetBefore = (itemId: string) => groupTargets()?.tabs.get(itemId);\n const targetAtEnd = () => groupTargets()?.tabs.get(null);\n const bodyTargets = () => groupTargets()?.body ?? [];\n const startTabPress = (event: PointerEvent & { currentTarget: HTMLButtonElement }, itemId: string) => {\n if (event.button !== 0 || event.isPrimary === false) return;\n stopTabPress?.();\n const pointerId = event.pointerId;\n const button = event.currentTarget;\n const ownerWindow = window;\n const stop = () => {\n ownerWindow.removeEventListener(\"pointerup\", onPointerUp, true);\n ownerWindow.removeEventListener(\"pointercancel\", onPointerCancel, true);\n if (stopTabPress === stop) stopTabPress = undefined;\n };\n const onPointerUp = (up: PointerEvent) => {\n if (up.pointerId !== pointerId) return;\n const rect = button.getBoundingClientRect();\n const releasedInside = up.clientX >= rect.left && up.clientX <= rect.right && up.clientY >= rect.top && up.clientY <= rect.bottom;\n const shouldActivate = releasedInside && !props.dnd.isDragging();\n stop();\n if (!shouldActivate) return;\n suppressedPointerClick = itemId;\n if (clearSuppressedPointerClick !== undefined) ownerWindow.clearTimeout(clearSuppressedPointerClick);\n clearSuppressedPointerClick = ownerWindow.setTimeout(() => {\n if (suppressedPointerClick === itemId) suppressedPointerClick = null;\n clearSuppressedPointerClick = undefined;\n }, 0);\n props.onActivate(itemId);\n };\n const onPointerCancel = (cancel: PointerEvent) => {\n if (cancel.pointerId === pointerId) stop();\n };\n stopTabPress = stop;\n ownerWindow.addEventListener(\"pointerup\", onPointerUp, true);\n ownerWindow.addEventListener(\"pointercancel\", onPointerCancel, true);\n };\n onCleanup(() => {\n stopTabPress?.();\n if (clearSuppressedPointerClick !== undefined) window.clearTimeout(clearSuppressedPointerClick);\n });\n const [scrollbar, setScrollbar] = createSignal({ overflow: false, left: 0, width: 0 });\n const syncScrollbar = () => {\n if (!tabsElement) return;\n const { clientWidth, scrollLeft, scrollWidth } = tabsElement;\n if (scrollWidth <= clientWidth || clientWidth <= 0) {\n setScrollbar({ overflow: false, left: 0, width: 0 });\n return;\n }\n const width = Math.min(clientWidth, Math.max(24, (clientWidth * clientWidth) / scrollWidth));\n const left = (scrollLeft / (scrollWidth - clientWidth)) * (clientWidth - width);\n setScrollbar({ overflow: true, left, width });\n };\n const scrollFromPointer = (event: PointerEvent & { currentTarget: HTMLDivElement }) => {\n if (!tabsElement) return;\n const track = event.currentTarget;\n const { left, width } = scrollbar();\n const rect = track.getBoundingClientRect();\n const available = Math.max(1, rect.width - width);\n const thumbLeft = Math.min(available, Math.max(0, event.clientX - rect.left - scrollbarDragOffset));\n tabsElement.scrollLeft = (thumbLeft / available) * (tabsElement.scrollWidth - tabsElement.clientWidth);\n syncScrollbar();\n };\n const startScrollbarDrag = (event: PointerEvent & { currentTarget: HTMLDivElement }) => {\n event.preventDefault();\n const track = event.currentTarget;\n const current = scrollbar();\n scrollbarDragOffset =\n event.target === track\n ? current.width / 2\n : Math.min(current.width, Math.max(0, event.clientX - track.getBoundingClientRect().left - current.left));\n track.setPointerCapture(event.pointerId);\n scrollFromPointer(event);\n };\n onMount(() => {\n syncScrollbar();\n const observer = typeof ResizeObserver === \"undefined\" ? null : new ResizeObserver(syncScrollbar);\n if (tabsElement) observer?.observe(tabsElement);\n onCleanup(() => observer?.disconnect());\n });\n createEffect(() => {\n itemIds().length;\n props.itemById();\n groupTargets();\n props.canAdd();\n queueMicrotask(syncScrollbar);\n });\n const tabId = (itemId: string) => `${props.instanceId}-${itemId}-tab`;\n const panelId = (itemId: string) => `${props.instanceId}-${itemId}-panel`;\n const focusTab = (index: number) => {\n const itemId = itemIds()[index];\n if (!itemId) return;\n props.onActivate(itemId);\n queueMicrotask(() => document.getElementById(tabId(itemId))?.focus());\n };\n const onTabKeyDown = (event: KeyboardEvent, index: number, itemId: string) => {\n if (props.dnd.activeId() === draggableId(itemId)) return;\n const item = requireItem(props.itemById(), itemId);\n if ((event.key === \"Delete\" || event.key === \"Backspace\") && item.onClose) {\n event.preventDefault();\n item.onClose();\n return;\n }\n const count = itemIds().length;\n let next: number | null = null;\n if (event.key === \"ArrowLeft\") next = (index - 1 + count) % count;\n if (event.key === \"ArrowRight\") next = (index + 1) % count;\n if (event.key === \"Home\") next = 0;\n if (event.key === \"End\") next = count - 1;\n if (next === null) return;\n event.preventDefault();\n focusTab(next);\n };\n const targetLabel = (target: PanesDropTarget): string => {\n const targetItem = requireItem(props.itemById(), target.targetItemId);\n if (target.kind === \"group\") return messages().addToNamed({ name: targetItem.title });\n if (target.kind === \"tab\") {\n const before = target.beforeItemId ? requireItem(props.itemById(), target.beforeItemId) : null;\n return before ? messages().insertBeforeNamed({ name: before.title }) : messages().insertAtEnd;\n }\n return target.side\n ? messages().addPaneSide({ side: target.side, name: targetItem.title })\n : messages().addToNamed({ name: targetItem.title });\n };\n return (\n <section class=\"k2b-panes__group\">\n <div\n ref={tabsElement}\n class=\"k2b-panes__tabs\"\n role=\"tablist\"\n aria-label={messages().paneTabs}\n aria-orientation=\"horizontal\"\n onScroll={syncScrollbar}\n >\n <For each={itemIds()}>\n {(itemId, index) => {\n const item = () => requireItem(props.itemById(), itemId);\n const active = () => props.node().active === itemId;\n return (\n <div\n ref={(surface) =>\n props.dnd.draggable(surface, () => ({\n id: draggableId(itemId),\n meta: { itemId, label: item().title },\n disabled: !props.canMove(),\n focusable: false,\n keyboard: true,\n handleSelector: \".k2b-panes__tab-button\",\n }))\n }\n class=\"k2b-panes__tab\"\n data-active={active() ? \"true\" : undefined}\n data-closable={item().onClose !== undefined ? \"true\" : undefined}\n data-movable={props.canMove() ? \"true\" : undefined}\n data-dnd-active={props.dnd.activeId() === draggableId(itemId) ? \"true\" : undefined}\n >\n <Show when={targetBefore(itemId)}>\n {(target) => <PanesDropTargetView target={target()} label={targetLabel(target())} dnd={props.dnd} placement=\"tab\" />}\n </Show>\n <button\n id={tabId(itemId)}\n type=\"button\"\n class=\"k2b-panes__tab-button\"\n role=\"tab\"\n aria-label={item().title}\n aria-selected={active()}\n aria-controls={active() ? panelId(itemId) : undefined}\n aria-posinset={index() + 1}\n aria-setsize={itemIds().length}\n aria-keyshortcuts={item().onClose ? \"Delete Backspace\" : undefined}\n tabIndex={active() ? 0 : -1}\n title={item().title}\n onPointerDown={(event) => startTabPress(event, itemId)}\n onClick={(event) => {\n if (event?.detail > 0 && suppressedPointerClick === itemId) {\n suppressedPointerClick = null;\n if (clearSuppressedPointerClick !== undefined) {\n window.clearTimeout(clearSuppressedPointerClick);\n clearSuppressedPointerClick = undefined;\n }\n return;\n }\n props.onActivate(itemId);\n }}\n onKeyDown={(event) => onTabKeyDown(event, index(), itemId)}\n >\n <span class=\"k2b-ui k2b-panes__drag-surface k2b-panes__drag-preview\" data-dnd-preview>\n <i class={`${iconClass(item().icon)} k2b-panes__icon`} aria-hidden=\"true\" />\n <span>{item().title}</span>\n </span>\n </button>\n <Show when={item().onClose !== undefined}>\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-panes__close\"\n content={messages().closeNamed({ name: item().title })}\n aria-label={messages().closeNamed({ name: item().title })}\n onPointerDown={(event) => event.stopPropagation()}\n onClick={(event) => {\n event.stopPropagation();\n item().onClose?.();\n }}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </Tooltip.Trigger>\n </Show>\n </div>\n );\n }}\n </For>\n <Show when={targetAtEnd()}>\n {(target) => <PanesDropTargetView target={target()} label={targetLabel(target())} dnd={props.dnd} placement=\"tab-end\" />}\n </Show>\n <Show when={props.canAdd()}>\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-panes__add k2b-panes__add--tab\"\n aria-label={messages().addPane}\n content={messages().addPane}\n onClick={() => props.addItem(props.node().active)}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n </Tooltip.Trigger>\n </Show>\n </div>\n <Show when={scrollbar().overflow}>\n <div\n class=\"k2b-panes__tabs-scrollbar\"\n aria-hidden=\"true\"\n onPointerDown={startScrollbarDrag}\n onPointerMove={(event) => {\n if (event.currentTarget.hasPointerCapture(event.pointerId)) scrollFromPointer(event);\n }}\n onPointerUp={(event) => event.currentTarget.releasePointerCapture(event.pointerId)}\n onPointerCancel={(event) => event.currentTarget.releasePointerCapture(event.pointerId)}\n >\n <span\n style={{\n \"--k2b-panes-scroll-left\": `${scrollbar().left}px`,\n \"--k2b-panes-scroll-width\": `${scrollbar().width}px`,\n }}\n />\n </div>\n </Show>\n <div class=\"k2b-panes__body\">\n <div id={panelId(props.node().active)} class=\"k2b-panes__panel\" role=\"tabpanel\" aria-labelledby={tabId(props.node().active)}>\n <Show when={props.node().active} keyed>\n {(itemId) => <ActivePane itemId={itemId} itemById={props.itemById} />}\n </Show>\n </div>\n </div>\n <Show when={bodyTargets().length > 0}>\n <div class=\"k2b-panes__drop-targets\" aria-hidden=\"true\">\n <For each={bodyTargets()}>\n {(target) => <PanesDropTargetView target={target} label={targetLabel(target)} dnd={props.dnd} placement=\"body\" />}\n </For>\n </div>\n </Show>\n </section>\n );\n}\n\nfunction PanesDropTargetView(props: {\n target: PanesDropTarget;\n label: string;\n dnd: PaneDnd;\n placement: \"tab\" | \"tab-end\" | \"body\";\n}): JSX.Element {\n const icon = () => {\n if (props.target.kind === \"group\") return \"ti ti-plus\";\n if (props.target.kind === \"tab\") return props.placement === \"tab\" ? \"ti ti-spacing-horizontal\" : null;\n if (props.target.side === \"top\") return \"ti ti-row-insert-top\";\n if (props.target.side === \"bottom\") return \"ti ti-row-insert-bottom\";\n if (props.target.side === \"left\") return \"ti ti-column-insert-left\";\n return \"ti ti-column-insert-right\";\n };\n return (\n <div\n ref={(element) =>\n props.dnd.droppable(element, () => ({\n id: `panes-target:${props.target.id}`,\n meta: { target: props.target, label: props.label },\n }))\n }\n class=\"k2b-panes__drop-target\"\n data-kind={props.target.kind}\n data-placement={props.placement}\n data-zone={props.target.side}\n data-active={props.dnd.overId() === `panes-target:${props.target.id}` ? \"true\" : undefined}\n title={props.label}\n aria-hidden=\"true\"\n >\n <Show when={icon()} keyed>\n {(iconClass) => <i class={iconClass} aria-hidden=\"true\" />}\n </Show>\n <Show when={props.target.kind === \"split\"}>\n <span>{props.label}</span>\n </Show>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["layout/Panes.tsx"],"sourcesContent":["import { type DndCollisionContext, type DndController, type DndDroppableSnapshot, dnd } from \"@k2b/stdlib/solid\";\nimport { createEffect, createMemo, createSignal, createUniqueId, For, type JSX, onCleanup, onMount, Show } from \"solid-js\";\nimport { Tooltip } from \"../feedback/Tooltip\";\nimport { suppressTextSelection } from \"../internal/text-selection\";\nimport { useUiMessages } from \"../intl/messages\";\nimport {\n activatePanesItem,\n applyPanesIntent,\n getPanesDropTargets,\n PANES_MAX_ID_LENGTH,\n PANES_MIN_RATIO,\n type PanesDropTarget,\n type PanesGroup,\n type PanesIntent,\n type PanesLayout,\n type PanesNode,\n type PanesPath,\n type PanesSplit,\n parsePanesLayout,\n resizePanesSplit,\n samePanesIntent,\n} from \"./panes-layout\";\nimport { usePanesMessages } from \"./panes-messages\";\nimport { assertUniqueStableUiIds } from \"./stable-id\";\n\nexport type PanesItem = {\n id: string;\n title: string;\n icon?: string;\n render: () => JSX.Element;\n onClose?: () => void;\n};\n\nexport type PanesProps = {\n layout: PanesLayout;\n onLayoutChange: (layout: PanesLayout) => void;\n items: readonly PanesItem[];\n movable?: boolean;\n resizable?: boolean;\n split?: false | \"horizontal\" | \"vertical\" | \"both\";\n onAddItem?: (targetItemId: string | null) => void;\n ariaLabel?: string;\n class?: string;\n};\n\ntype DragMeta = { itemId: string; label: string };\ntype DropMeta = { target: PanesDropTarget; label: string };\ntype PaneDnd = DndController<DragMeta, DropMeta, PanesIntent>;\n\ntype IndexedPanesDropTargets = {\n tabs: ReadonlyMap<string | null, PanesDropTarget>;\n body: readonly PanesDropTarget[];\n};\n\ntype PanesSeparatorGeometry = {\n coordinate: number;\n crossStart: number;\n crossEnd: number;\n};\n\nconst PANES_RESIZE_SNAP_DISTANCE = 8;\nconst PANES_RESIZE_UNSNAP_DISTANCE = 12;\nconst PANES_RESIZE_NEIGHBOR_GAP = 16;\n\nconst intervalGap = (left: PanesSeparatorGeometry, right: PanesSeparatorGeometry): number =>\n left.crossEnd < right.crossStart\n ? right.crossStart - left.crossEnd\n : right.crossEnd < left.crossStart\n ? left.crossStart - right.crossEnd\n : 0;\n\nexport const resolvePanesResizeSnap = (\n coordinate: number,\n source: PanesSeparatorGeometry,\n candidates: readonly PanesSeparatorGeometry[],\n options: { activeCoordinate?: number | null; previousCoordinate?: number } = {},\n): { coordinate: number; snappedTo: number | null } => {\n const neighbors = candidates.filter((candidate) => {\n const gap = intervalGap(source, candidate);\n return gap > 0 && gap <= PANES_RESIZE_NEIGHBOR_GAP;\n });\n const activeCoordinate = options.activeCoordinate;\n const active =\n activeCoordinate === null || activeCoordinate === undefined\n ? null\n : neighbors.find((candidate) => Math.abs(candidate.coordinate - activeCoordinate) < 0.5);\n if (active && Math.abs(coordinate - active.coordinate) <= PANES_RESIZE_UNSNAP_DISTANCE) {\n return { coordinate: active.coordinate, snappedTo: active.coordinate };\n }\n\n const previous = options.previousCoordinate;\n let winner: PanesSeparatorGeometry | null = null;\n let winnerDistance = Number.POSITIVE_INFINITY;\n for (const candidate of neighbors) {\n if (previous !== undefined && Math.abs(candidate.coordinate - previous) < 0.5) continue;\n const distanceToRange =\n previous === undefined ||\n candidate.coordinate < Math.min(previous, coordinate) ||\n candidate.coordinate > Math.max(previous, coordinate)\n ? Math.abs(candidate.coordinate - coordinate)\n : 0;\n const distanceToCoordinate = Math.abs(candidate.coordinate - coordinate);\n if (distanceToRange <= PANES_RESIZE_SNAP_DISTANCE && distanceToCoordinate < winnerDistance) {\n winner = candidate;\n winnerDistance = distanceToCoordinate;\n }\n }\n return winner ? { coordinate: winner.coordinate, snappedTo: winner.coordinate } : { coordinate, snappedTo: null };\n};\n\nexport const indexPanesDropTargets = (targets: readonly PanesDropTarget[]): ReadonlyMap<string, IndexedPanesDropTargets> => {\n const mutable = new Map<string, { tabs: Map<string | null, PanesDropTarget>; body: PanesDropTarget[] }>();\n for (const target of targets) {\n let indexed = mutable.get(target.targetItemId);\n if (!indexed) {\n indexed = { tabs: new Map(), body: [] };\n mutable.set(target.targetItemId, indexed);\n }\n if (target.kind === \"tab\") indexed.tabs.set(target.beforeItemId ?? null, target);\n else indexed.body.push(target);\n }\n return mutable;\n};\n\nconst iconClass = (icon: string | undefined): string => {\n const value = icon?.trim() || \"ti-layout-sidebar-right\";\n return value.startsWith(\"ti \") ? value : `ti ${value}`;\n};\n\nconst collectLayoutItemIds = (node: PanesNode | null, ids: string[] = []): string[] => {\n if (!node) return ids;\n if (node.type === \"group\") ids.push(...node.items);\n else {\n collectLayoutItemIds(node.first, ids);\n collectLayoutItemIds(node.second, ids);\n }\n return ids;\n};\n\nconst nearestDroppable = (entries: DndDroppableSnapshot<DropMeta>[]): DndDroppableSnapshot<DropMeta> | null =>\n entries.reduce<DndDroppableSnapshot<DropMeta> | null>(\n (winner, entry) => (!winner || entry.distance < winner.distance ? entry : winner),\n null,\n );\n\nexport const pointerHitsPanesDropTarget = (\n entry: Pick<DndDroppableSnapshot<DropMeta>, \"containsPointer\" | \"meta\" | \"rect\"> &\n Partial<Pick<DndDroppableSnapshot<DropMeta>, \"element\">>,\n pointer: { x: number; y: number },\n hitElement?: Element | null,\n): boolean => {\n if (hitElement !== undefined && !entry.element?.contains(hitElement)) return false;\n const side = entry.meta.target.side;\n if (entry.meta.target.kind !== \"split\" || !side) return entry.containsPointer;\n if (!entry.containsPointer) return false;\n const x = pointer.x - entry.rect.left;\n const y = pointer.y - entry.rect.top;\n if (side === \"top\") return x >= y && x <= entry.rect.width - y;\n if (side === \"bottom\") {\n const corner = entry.rect.height - y;\n return x >= corner && x <= entry.rect.width - corner;\n }\n if (side === \"left\") return y >= x && y <= entry.rect.height - x;\n const corner = entry.rect.width - x;\n return y >= corner && y <= entry.rect.height - corner;\n};\n\nconst panesCollisionDetector = (\n context: DndCollisionContext<DragMeta, DropMeta, PanesIntent>,\n mode: \"pointer\" | \"keyboard\" | null,\n): string | null => {\n const document = mode === \"pointer\" ? context.droppables[0]?.element.ownerDocument : undefined;\n const hitElement = document?.elementFromPoint(context.pointer.x, context.pointer.y) ?? undefined;\n return nearestDroppable(context.droppables.filter((entry) => pointerHitsPanesDropTarget(entry, context.pointer, hitElement)))?.id ?? null;\n};\n\nconst createItemMap = (items: readonly PanesItem[]): Map<string, PanesItem> => {\n assertUniqueStableUiIds(\n items.map((item) => item.id),\n \"Panes item id\",\n PANES_MAX_ID_LENGTH,\n );\n return new Map(items.map((item) => [item.id, item]));\n};\n\nconst requireItem = (items: Map<string, PanesItem>, id: string): PanesItem => {\n const item = items.get(id);\n if (!item) throw new Error(`Panes layout references missing item \"${id}\".`);\n return item;\n};\n\nexport default function Panes(props: PanesProps): JSX.Element {\n const panesMessages = usePanesMessages();\n const instanceId = `k2b-panes-${createUniqueId()}`;\n const items = createMemo(() => createItemMap(props.items));\n const layout = createMemo(() => {\n if (!parsePanesLayout(props.layout)) throw new Error(\"Panes layout must be a valid version 2 layout.\");\n for (const id of collectLayoutItemIds(props.layout.root)) requireItem(items(), id);\n return props.layout;\n });\n const canMove = () => props.movable ?? true;\n const canResize = () => props.resizable ?? true;\n const split = () => props.split ?? \"both\";\n const [draggedItemId, setDraggedItemId] = createSignal<string | null>(null);\n const [dragMode, setDragMode] = createSignal<\"pointer\" | \"keyboard\" | null>(null);\n const dropTargets = createMemo(() => {\n const itemId = draggedItemId();\n return itemId ? getPanesDropTargets(layout(), itemId, { movable: canMove(), split: split() }) : [];\n });\n const dropTargetIndex = createMemo(() => indexPanesDropTargets(dropTargets()));\n const paneDnd = dnd.create<DragMeta, DropMeta, PanesIntent>({\n collisionDetector: (context) => panesCollisionDetector(context, dragMode()),\n buildIntent: ({ over }) => over?.meta.target.intent ?? null,\n isSameIntent: samePanesIntent,\n onDragStart: ({ active, mode }) => {\n setDragMode(mode);\n setDraggedItemId(active.meta.itemId);\n },\n announcements: {\n dragStart: (active) => `Picked up ${active.meta.label}.`,\n dragOver: (active, over) => (over ? `Move ${active.meta.label} to ${over.meta.label}.` : `${active.meta.label} is not over a pane.`),\n drop: (active, over) => (over ? `Moved ${active.meta.label} to ${over.meta.label}.` : `Did not move ${active.meta.label}.`),\n cancel: (active) => `Cancelled moving ${active.meta.label}.`,\n },\n onDrop: ({ intent, mode }) => {\n setDragMode(null);\n setDraggedItemId(null);\n if (!intent) return;\n const current = layout();\n const next = applyPanesIntent(current, intent);\n if (next === current) return;\n props.onLayoutChange(next);\n if (mode === \"keyboard\") queueMicrotask(() => document.getElementById(`${instanceId}-${intent.itemId}-tab`)?.focus());\n },\n onCancel: () => {\n setDragMode(null);\n setDraggedItemId(null);\n },\n });\n const activate = (itemId: string) => {\n const current = layout();\n const next = activatePanesItem(current, itemId);\n if (next !== current) props.onLayoutChange(next);\n };\n const requestAdd = (targetItemId: string | null) => props.onAddItem?.(targetItemId);\n\n return (\n <div class={`k2b-panes ${props.class ?? \"\"}`} data-k2b-panes role=\"group\" aria-label={props.ariaLabel ?? panesMessages().paneWorkspace}>\n <Show\n when={layout().root}\n fallback={\n <div class=\"k2b-panes__empty\">\n <Show when={props.onAddItem !== undefined}>\n <button type=\"button\" class=\"k2b-panes__add\" onClick={() => requestAdd(null)} aria-label={panesMessages().addPane}>\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n <span>{panesMessages().addPane}</span>\n </button>\n </Show>\n </div>\n }\n >\n {(root) => (\n <PanesNodeRenderer\n node={root}\n path={[]}\n layout={layout}\n itemById={items}\n dnd={paneDnd}\n dropTargetIndex={dropTargetIndex}\n instanceId={instanceId}\n canMove={canMove}\n canResize={canResize}\n addItem={requestAdd}\n canAdd={() => props.onAddItem !== undefined}\n onActivate={activate}\n onLayoutChange={props.onLayoutChange}\n />\n )}\n </Show>\n </div>\n );\n}\n\ntype RendererProps = {\n node: () => PanesNode;\n path: PanesPath;\n layout: () => PanesLayout;\n itemById: () => Map<string, PanesItem>;\n dnd: PaneDnd;\n dropTargetIndex: () => ReadonlyMap<string, IndexedPanesDropTargets>;\n instanceId: string;\n canMove: () => boolean;\n canResize: () => boolean;\n addItem: (targetItemId: string | null) => void;\n canAdd: () => boolean;\n onActivate: (itemId: string) => void;\n onLayoutChange: (layout: PanesLayout) => void;\n};\n\nfunction PanesNodeRenderer(props: RendererProps): JSX.Element {\n const split = createMemo(() => {\n const node = props.node();\n return node.type === \"split\" ? node : null;\n });\n const group = createMemo(() => {\n const node = props.node();\n return node.type === \"group\" ? node : null;\n });\n return (\n <>\n <Show when={split()}>{(node) => <PanesSplitRenderer {...props} node={node} />}</Show>\n <Show when={group()}>{(node) => <PanesGroupRenderer {...props} node={node} />}</Show>\n </>\n );\n}\n\nfunction PanesSplitRenderer(props: Omit<RendererProps, \"node\"> & { node: () => PanesSplit }): JSX.Element {\n const panesMessages = usePanesMessages();\n let container: HTMLDivElement | undefined;\n let separatorElement: HTMLButtonElement | undefined;\n let stopResize: (() => void) | undefined;\n let finishResize: (() => void) | undefined;\n const stopActiveResize = () => {\n stopResize?.();\n stopResize = undefined;\n finishResize = undefined;\n };\n const finishActiveResize = () => {\n finishResize?.();\n stopResize = undefined;\n finishResize = undefined;\n };\n onCleanup(stopActiveResize);\n const commitRatio = (ratio: number) => {\n const current = props.layout();\n const next = resizePanesSplit(current, props.path, ratio);\n if (next !== current) props.onLayoutChange(next);\n };\n const resizeGeometry = (separator: HTMLElement | undefined) => {\n if (!separator) return null;\n const direction = props.node().direction;\n const containerRect = container?.getBoundingClientRect();\n const separatorRect = separator.getBoundingClientRect();\n const extent = direction === \"horizontal\" ? (containerRect?.width ?? 0) : (containerRect?.height ?? 0);\n const separatorExtent = direction === \"horizontal\" ? separatorRect.width : separatorRect.height;\n const availableExtent = extent - separatorExtent;\n if (!containerRect || availableExtent <= 0 || separatorRect.width <= 0 || separatorRect.height <= 0) return null;\n const geometry = (rect: DOMRect): PanesSeparatorGeometry =>\n direction === \"horizontal\"\n ? { coordinate: rect.left + rect.width / 2, crossStart: rect.top, crossEnd: rect.bottom }\n : { coordinate: rect.top + rect.height / 2, crossStart: rect.left, crossEnd: rect.right };\n const panes = separator.closest<HTMLElement>(\"[data-k2b-panes]\");\n const candidates = panes\n ? Array.from(panes.querySelectorAll<HTMLElement>(`.k2b-panes__separator[data-direction=\"${direction}\"]`))\n .filter((candidate) => candidate !== separator && candidate.closest(\"[data-k2b-panes]\") === panes)\n .map((candidate) => candidate.getBoundingClientRect())\n .filter((rect) => rect.width > 0 && rect.height > 0)\n .map(geometry)\n : [];\n const origin = direction === \"horizontal\" ? containerRect.left + separatorExtent / 2 : containerRect.top + separatorExtent / 2;\n return {\n source: geometry(separatorRect),\n candidates,\n coordinateForRatio: (ratio: number) => origin + availableExtent * ratio,\n ratioForCoordinate: (coordinate: number) => (coordinate - origin) / availableExtent,\n };\n };\n const startResize = (event: PointerEvent) => {\n if (!props.canResize() || event.button !== 0) return;\n event.preventDefault();\n stopActiveResize();\n const pointerId = event.pointerId;\n const captureTarget = (event.currentTarget as HTMLElement | null) ?? separatorElement;\n if (!captureTarget) return;\n const start = props.node().direction === \"horizontal\" ? event.clientX : event.clientY;\n const geometry = resizeGeometry(captureTarget);\n const startRatio = props.node().ratio;\n const startCoordinate = geometry?.source.coordinate;\n const rect = container?.getBoundingClientRect();\n const extent = Math.max(1, props.node().direction === \"horizontal\" ? (rect?.width ?? 1) : (rect?.height ?? 1));\n let snappedTo: number | null = null;\n let frame: number | undefined;\n let pendingRatio: number | undefined;\n const flush = () => {\n if (frame !== undefined) cancelAnimationFrame(frame);\n frame = undefined;\n if (pendingRatio === undefined) return;\n const ratio = pendingRatio;\n pendingRatio = undefined;\n commitRatio(ratio);\n };\n const onMove = (move: PointerEvent) => {\n if (move.pointerId !== pointerId) return;\n const current = props.node().direction === \"horizontal\" ? move.clientX : move.clientY;\n if (geometry && startCoordinate !== undefined) {\n const snapped = resolvePanesResizeSnap(startCoordinate + current - start, geometry.source, geometry.candidates, {\n activeCoordinate: snappedTo,\n });\n snappedTo = snapped.snappedTo;\n pendingRatio = geometry.ratioForCoordinate(snapped.coordinate);\n } else {\n pendingRatio = startRatio + (current - start) / extent;\n }\n if (frame === undefined) frame = requestAnimationFrame(flush);\n };\n const onEnd = (end: PointerEvent) => {\n if (end.pointerId === pointerId) finishActiveResize();\n };\n const releaseTextSelection = suppressTextSelection(pointerId);\n stopResize = () => {\n releaseTextSelection();\n if (frame !== undefined) cancelAnimationFrame(frame);\n frame = undefined;\n pendingRatio = undefined;\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onEnd);\n window.removeEventListener(\"pointercancel\", onEnd);\n window.removeEventListener(\"blur\", finishActiveResize);\n if (captureTarget.hasPointerCapture?.(pointerId)) captureTarget.releasePointerCapture(pointerId);\n };\n finishResize = () => {\n flush();\n stopResize?.();\n };\n captureTarget.setPointerCapture?.(pointerId);\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onEnd);\n window.addEventListener(\"pointercancel\", onEnd);\n window.addEventListener(\"blur\", finishActiveResize);\n };\n const onResizeKeyDown = (event: KeyboardEvent) => {\n if (!props.canResize()) return;\n const step = event.shiftKey ? 0.08 : 0.02;\n let ratio: number | null = null;\n if (event.key === \"Home\") ratio = PANES_MIN_RATIO;\n if (event.key === \"End\") ratio = 1 - PANES_MIN_RATIO;\n if (props.node().direction === \"horizontal\" && event.key === \"ArrowLeft\") ratio = props.node().ratio - step;\n if (props.node().direction === \"horizontal\" && event.key === \"ArrowRight\") ratio = props.node().ratio + step;\n if (props.node().direction === \"vertical\" && event.key === \"ArrowUp\") ratio = props.node().ratio - step;\n if (props.node().direction === \"vertical\" && event.key === \"ArrowDown\") ratio = props.node().ratio + step;\n if (ratio === null) return;\n event.preventDefault();\n const geometry = resizeGeometry((event.currentTarget as HTMLElement | null) ?? separatorElement);\n if (geometry) {\n const snapped = resolvePanesResizeSnap(geometry.coordinateForRatio(ratio), geometry.source, geometry.candidates, {\n previousCoordinate: geometry.source.coordinate,\n });\n ratio = geometry.ratioForCoordinate(snapped.coordinate);\n }\n commitRatio(ratio);\n };\n return (\n <div ref={container} class=\"k2b-panes__split\" data-direction={props.node().direction}>\n <div class=\"k2b-panes__split-child\" style={{ flex: `${props.node().ratio} 1 0` }}>\n <PanesNodeRenderer {...props} node={() => props.node().first} path={[...props.path, \"first\"]} />\n </div>\n <button\n ref={separatorElement}\n type=\"button\"\n role=\"separator\"\n aria-orientation={props.node().direction === \"horizontal\" ? \"vertical\" : \"horizontal\"}\n aria-valuemin={Math.round(PANES_MIN_RATIO * 100)}\n aria-valuemax={Math.round((1 - PANES_MIN_RATIO) * 100)}\n aria-valuenow={Math.round(props.node().ratio * 100)}\n aria-disabled={!props.canResize()}\n tabIndex={props.canResize() ? 0 : -1}\n class=\"k2b-panes__separator\"\n data-direction={props.node().direction}\n aria-label={panesMessages().resizePanes}\n onPointerDown={startResize}\n onKeyDown={onResizeKeyDown}\n >\n <span aria-hidden=\"true\" />\n </button>\n <div class=\"k2b-panes__split-child\" style={{ flex: `${1 - props.node().ratio} 1 0` }}>\n <PanesNodeRenderer {...props} node={() => props.node().second} path={[...props.path, \"second\"]} />\n </div>\n </div>\n );\n}\n\nfunction ActivePane(props: { itemId: string; itemById: () => Map<string, PanesItem> }): JSX.Element {\n return requireItem(props.itemById(), props.itemId).render();\n}\n\nfunction PanesGroupRenderer(props: Omit<RendererProps, \"node\"> & { node: () => PanesGroup }): JSX.Element {\n const messages = useUiMessages();\n const panesMessages = usePanesMessages();\n let tabsElement: HTMLDivElement | undefined;\n let scrollbarDragOffset = 0;\n let stopTabPress: (() => void) | undefined;\n let suppressedPointerClick: string | null = null;\n let clearSuppressedPointerClick: number | undefined;\n const dndInstanceId = createUniqueId();\n const draggableId = (id: string) => `panes-item:${dndInstanceId}:${id}`;\n const itemIds = createMemo(() => props.node().items);\n const groupTargets = createMemo<IndexedPanesDropTargets | null>(() => {\n const index = props.dropTargetIndex();\n for (const itemId of itemIds()) {\n const indexed = index.get(itemId);\n if (indexed) return indexed;\n }\n return null;\n });\n const targetBefore = (itemId: string) => groupTargets()?.tabs.get(itemId);\n const targetAtEnd = () => groupTargets()?.tabs.get(null);\n const bodyTargets = () => groupTargets()?.body ?? [];\n const startTabPress = (event: PointerEvent & { currentTarget: HTMLButtonElement }, itemId: string) => {\n if (event.button !== 0 || event.isPrimary === false) return;\n stopTabPress?.();\n const pointerId = event.pointerId;\n const button = event.currentTarget;\n const ownerWindow = window;\n const stop = () => {\n ownerWindow.removeEventListener(\"pointerup\", onPointerUp, true);\n ownerWindow.removeEventListener(\"pointercancel\", onPointerCancel, true);\n if (stopTabPress === stop) stopTabPress = undefined;\n };\n const onPointerUp = (up: PointerEvent) => {\n if (up.pointerId !== pointerId) return;\n const rect = button.getBoundingClientRect();\n const releasedInside = up.clientX >= rect.left && up.clientX <= rect.right && up.clientY >= rect.top && up.clientY <= rect.bottom;\n const shouldActivate = releasedInside && !props.dnd.isDragging();\n stop();\n if (!shouldActivate) return;\n suppressedPointerClick = itemId;\n if (clearSuppressedPointerClick !== undefined) ownerWindow.clearTimeout(clearSuppressedPointerClick);\n clearSuppressedPointerClick = ownerWindow.setTimeout(() => {\n if (suppressedPointerClick === itemId) suppressedPointerClick = null;\n clearSuppressedPointerClick = undefined;\n }, 0);\n props.onActivate(itemId);\n };\n const onPointerCancel = (cancel: PointerEvent) => {\n if (cancel.pointerId === pointerId) stop();\n };\n stopTabPress = stop;\n ownerWindow.addEventListener(\"pointerup\", onPointerUp, true);\n ownerWindow.addEventListener(\"pointercancel\", onPointerCancel, true);\n };\n onCleanup(() => {\n stopTabPress?.();\n if (clearSuppressedPointerClick !== undefined) window.clearTimeout(clearSuppressedPointerClick);\n });\n const [scrollbar, setScrollbar] = createSignal({ overflow: false, left: 0, width: 0 });\n const syncScrollbar = () => {\n if (!tabsElement) return;\n const { clientWidth, scrollLeft, scrollWidth } = tabsElement;\n if (scrollWidth <= clientWidth || clientWidth <= 0) {\n setScrollbar({ overflow: false, left: 0, width: 0 });\n return;\n }\n const width = Math.min(clientWidth, Math.max(24, (clientWidth * clientWidth) / scrollWidth));\n const left = (scrollLeft / (scrollWidth - clientWidth)) * (clientWidth - width);\n setScrollbar({ overflow: true, left, width });\n };\n const scrollFromPointer = (event: PointerEvent & { currentTarget: HTMLDivElement }) => {\n if (!tabsElement) return;\n const track = event.currentTarget;\n const { left, width } = scrollbar();\n const rect = track.getBoundingClientRect();\n const available = Math.max(1, rect.width - width);\n const thumbLeft = Math.min(available, Math.max(0, event.clientX - rect.left - scrollbarDragOffset));\n tabsElement.scrollLeft = (thumbLeft / available) * (tabsElement.scrollWidth - tabsElement.clientWidth);\n syncScrollbar();\n };\n const startScrollbarDrag = (event: PointerEvent & { currentTarget: HTMLDivElement }) => {\n if (event.button !== 0) return;\n event.preventDefault();\n const track = event.currentTarget;\n const current = scrollbar();\n scrollbarDragOffset =\n event.target === track\n ? current.width / 2\n : Math.min(current.width, Math.max(0, event.clientX - track.getBoundingClientRect().left - current.left));\n track.setPointerCapture(event.pointerId);\n // The track's own pointerup or pointercancel ends the hold.\n suppressTextSelection(event.pointerId);\n scrollFromPointer(event);\n };\n onMount(() => {\n syncScrollbar();\n const observer = typeof ResizeObserver === \"undefined\" ? null : new ResizeObserver(syncScrollbar);\n if (tabsElement) observer?.observe(tabsElement);\n onCleanup(() => observer?.disconnect());\n });\n createEffect(() => {\n itemIds().length;\n props.itemById();\n groupTargets();\n props.canAdd();\n queueMicrotask(syncScrollbar);\n });\n const tabId = (itemId: string) => `${props.instanceId}-${itemId}-tab`;\n const panelId = (itemId: string) => `${props.instanceId}-${itemId}-panel`;\n const focusTab = (index: number) => {\n const itemId = itemIds()[index];\n if (!itemId) return;\n props.onActivate(itemId);\n queueMicrotask(() => document.getElementById(tabId(itemId))?.focus());\n };\n const onTabKeyDown = (event: KeyboardEvent, index: number, itemId: string) => {\n if (props.dnd.activeId() === draggableId(itemId)) return;\n const item = requireItem(props.itemById(), itemId);\n if ((event.key === \"Delete\" || event.key === \"Backspace\") && item.onClose) {\n event.preventDefault();\n item.onClose();\n return;\n }\n const count = itemIds().length;\n let next: number | null = null;\n if (event.key === \"ArrowLeft\") next = (index - 1 + count) % count;\n if (event.key === \"ArrowRight\") next = (index + 1) % count;\n if (event.key === \"Home\") next = 0;\n if (event.key === \"End\") next = count - 1;\n if (next === null) return;\n event.preventDefault();\n focusTab(next);\n };\n const targetLabel = (target: PanesDropTarget): string => {\n const targetItem = requireItem(props.itemById(), target.targetItemId);\n if (target.kind === \"group\") return panesMessages().addToNamed({ name: targetItem.title });\n if (target.kind === \"tab\") {\n const before = target.beforeItemId ? requireItem(props.itemById(), target.beforeItemId) : null;\n return before ? panesMessages().insertBeforeNamed({ name: before.title }) : panesMessages().insertAtEnd;\n }\n return target.side\n ? panesMessages().addPaneSide({ side: target.side, name: targetItem.title })\n : panesMessages().addToNamed({ name: targetItem.title });\n };\n return (\n <section class=\"k2b-panes__group\">\n <div\n ref={tabsElement}\n class=\"k2b-panes__tabs\"\n role=\"tablist\"\n aria-label={panesMessages().paneTabs}\n aria-orientation=\"horizontal\"\n onScroll={syncScrollbar}\n >\n <For each={itemIds()}>\n {(itemId, index) => {\n const item = () => requireItem(props.itemById(), itemId);\n const active = () => props.node().active === itemId;\n return (\n <div\n ref={(surface) =>\n props.dnd.draggable(surface, () => ({\n id: draggableId(itemId),\n meta: { itemId, label: item().title },\n disabled: !props.canMove(),\n focusable: false,\n keyboard: true,\n handleSelector: \".k2b-panes__tab-button\",\n }))\n }\n class=\"k2b-panes__tab\"\n data-active={active() ? \"true\" : undefined}\n data-closable={item().onClose !== undefined ? \"true\" : undefined}\n data-movable={props.canMove() ? \"true\" : undefined}\n data-dnd-active={props.dnd.activeId() === draggableId(itemId) ? \"true\" : undefined}\n >\n <Show when={targetBefore(itemId)}>\n {(target) => <PanesDropTargetView target={target()} label={targetLabel(target())} dnd={props.dnd} placement=\"tab\" />}\n </Show>\n <button\n id={tabId(itemId)}\n type=\"button\"\n class=\"k2b-panes__tab-button\"\n role=\"tab\"\n aria-label={item().title}\n aria-selected={active()}\n aria-controls={active() ? panelId(itemId) : undefined}\n aria-posinset={index() + 1}\n aria-setsize={itemIds().length}\n aria-keyshortcuts={item().onClose ? \"Delete Backspace\" : undefined}\n tabIndex={active() ? 0 : -1}\n title={item().title}\n onPointerDown={(event) => startTabPress(event, itemId)}\n onClick={(event) => {\n if (event?.detail > 0 && suppressedPointerClick === itemId) {\n suppressedPointerClick = null;\n if (clearSuppressedPointerClick !== undefined) {\n window.clearTimeout(clearSuppressedPointerClick);\n clearSuppressedPointerClick = undefined;\n }\n return;\n }\n props.onActivate(itemId);\n }}\n onKeyDown={(event) => onTabKeyDown(event, index(), itemId)}\n >\n <span class=\"k2b-ui k2b-panes__drag-surface k2b-panes__drag-preview\" data-dnd-preview>\n <i class={`${iconClass(item().icon)} k2b-panes__icon`} aria-hidden=\"true\" />\n <span>{item().title}</span>\n </span>\n </button>\n <Show when={item().onClose !== undefined}>\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-panes__close\"\n content={messages().closeNamed({ name: item().title })}\n aria-label={messages().closeNamed({ name: item().title })}\n onPointerDown={(event) => event.stopPropagation()}\n onClick={(event) => {\n event.stopPropagation();\n item().onClose?.();\n }}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </Tooltip.Trigger>\n </Show>\n </div>\n );\n }}\n </For>\n <Show when={targetAtEnd()}>\n {(target) => <PanesDropTargetView target={target()} label={targetLabel(target())} dnd={props.dnd} placement=\"tab-end\" />}\n </Show>\n <Show when={props.canAdd()}>\n <Tooltip.Trigger\n type=\"button\"\n class=\"k2b-panes__add k2b-panes__add--tab\"\n aria-label={panesMessages().addPane}\n content={panesMessages().addPane}\n onClick={() => props.addItem(props.node().active)}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n </Tooltip.Trigger>\n </Show>\n </div>\n <Show when={scrollbar().overflow}>\n <div\n class=\"k2b-panes__tabs-scrollbar\"\n aria-hidden=\"true\"\n onPointerDown={startScrollbarDrag}\n onPointerMove={(event) => {\n if (event.currentTarget.hasPointerCapture(event.pointerId)) scrollFromPointer(event);\n }}\n onPointerUp={(event) => event.currentTarget.releasePointerCapture(event.pointerId)}\n onPointerCancel={(event) => event.currentTarget.releasePointerCapture(event.pointerId)}\n >\n <span\n style={{\n \"--k2b-panes-scroll-left\": `${scrollbar().left}px`,\n \"--k2b-panes-scroll-width\": `${scrollbar().width}px`,\n }}\n />\n </div>\n </Show>\n <div class=\"k2b-panes__body\">\n <div id={panelId(props.node().active)} class=\"k2b-panes__panel\" role=\"tabpanel\" aria-labelledby={tabId(props.node().active)}>\n <Show when={props.node().active} keyed>\n {(itemId) => <ActivePane itemId={itemId} itemById={props.itemById} />}\n </Show>\n </div>\n </div>\n <Show when={bodyTargets().length > 0}>\n <div class=\"k2b-panes__drop-targets\" aria-hidden=\"true\">\n <For each={bodyTargets()}>\n {(target) => <PanesDropTargetView target={target} label={targetLabel(target)} dnd={props.dnd} placement=\"body\" />}\n </For>\n </div>\n </Show>\n </section>\n );\n}\n\nfunction PanesDropTargetView(props: {\n target: PanesDropTarget;\n label: string;\n dnd: PaneDnd;\n placement: \"tab\" | \"tab-end\" | \"body\";\n}): JSX.Element {\n const icon = () => {\n if (props.target.kind === \"group\") return \"ti ti-plus\";\n if (props.target.kind === \"tab\") return props.placement === \"tab\" ? \"ti ti-spacing-horizontal\" : null;\n if (props.target.side === \"top\") return \"ti ti-row-insert-top\";\n if (props.target.side === \"bottom\") return \"ti ti-row-insert-bottom\";\n if (props.target.side === \"left\") return \"ti ti-column-insert-left\";\n return \"ti ti-column-insert-right\";\n };\n return (\n <div\n ref={(element) =>\n props.dnd.droppable(element, () => ({\n id: `panes-target:${props.target.id}`,\n meta: { target: props.target, label: props.label },\n }))\n }\n class=\"k2b-panes__drop-target\"\n data-kind={props.target.kind}\n data-placement={props.placement}\n data-zone={props.target.side}\n data-active={props.dnd.overId() === `panes-target:${props.target.id}` ? \"true\" : undefined}\n title={props.label}\n aria-hidden=\"true\"\n >\n <Show when={icon()} keyed>\n {(iconClass) => <i class={iconClass} aria-hidden=\"true\" />}\n </Show>\n <Show when={props.target.kind === \"split\"}>\n <span>{props.label}</span>\n </Show>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -4,7 +4,8 @@ import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
4
4
  import { escape as _$escape } from "solid-js/web";
5
5
  var _tmpl$ = ["<div", " style=\"", "\"><div class=\"k2b-pull-to-refresh__indicator\" role=\"status\" aria-live=\"polite\"><span class=\"k2b-pull-to-refresh__icon\" aria-hidden=\"true\"><i", "></i></span><span class=\"k2b-sr-only\">", "</span></div>", "</div>"];
6
6
  import { createSignal, onCleanup, onMount } from "solid-js";
7
- import { useUiMessages } from "../intl/messages";
7
+ import { suppressTextSelection } from "../internal/text-selection";
8
+ import { useRefreshMessages } from "./refresh-messages";
8
9
 
9
10
  /** Android's SwipeRefreshLayout triggers at 64dp; the pull is damped to half the input travel. */
10
11
  const THRESHOLD = 64;
@@ -23,7 +24,7 @@ const INTERACTIVE = "a, button, input, textarea, select, [contenteditable], [rol
23
24
  * reload) next to it.
24
25
  */
25
26
  export function PullToRefresh(props) {
26
- const messages = useUiMessages();
27
+ const refreshMessages = useRefreshMessages();
27
28
  const [state, setState] = createSignal("idle");
28
29
  const [distance, setDistance] = createSignal(0);
29
30
  let root;
@@ -93,19 +94,27 @@ export function PullToRefresh(props) {
93
94
  };
94
95
  const onPointerMove = event => {
95
96
  if (!pointer || event.pointerId !== pointer.id) return;
97
+ // Before the pull captures the pointer, a release outside the wrapper never
98
+ // reaches it; a move without the pressed button shows that press is over.
99
+ if ((event.buttons & 1) === 0) return onPointerCancel(event);
96
100
  const travel = event.clientY - pointer.startY;
97
101
  if (travel <= 0 && state() === "idle") return;
98
- if (state() === "idle") capture(pointer.id);
102
+ if (state() === "idle") {
103
+ capture(pointer.id);
104
+ pointer.releaseTextSelection ??= suppressTextSelection(pointer.id);
105
+ }
99
106
  pull(travel);
100
107
  if (state() !== "idle") event.preventDefault();
101
108
  };
102
109
  const onPointerUp = event => {
103
110
  if (!pointer || event.pointerId !== pointer.id) return;
111
+ pointer.releaseTextSelection?.();
104
112
  pointer = null;
105
113
  release();
106
114
  };
107
115
  const onPointerCancel = event => {
108
116
  if (!pointer || event.pointerId !== pointer.id) return;
117
+ pointer.releaseTextSelection?.();
109
118
  pointer = null;
110
119
  abort();
111
120
  };
@@ -171,7 +180,7 @@ export function PullToRefresh(props) {
171
180
  });
172
181
  const className = () => props.class?.trim() ? `k2b-pull-to-refresh ${props.class.trim()}` : "k2b-pull-to-refresh";
173
182
  const progress = () => Math.min(1, distance() / THRESHOLD);
174
- return _$ssr(_tmpl$, _$ssrAttribute("class", _$escape(className(), true), false) + _$ssrAttribute("data-state", _$escape(state(), true), false), _$ssrStyleProperty("--k2b-pull-to-refresh-distance:", `${_$escape(distance(), true)}px`) + _$ssrStyleProperty(";--k2b-pull-to-refresh-progress:", _$escape(String(progress()), true)), _$ssrAttribute("class", state() === "refreshing" ? "ti ti-loader-2 k2b-spin" : "ti ti-refresh", false), state() === "refreshing" ? _$escape(props.label ?? messages().refreshing) : "", _$escape(props.children));
183
+ return _$ssr(_tmpl$, _$ssrAttribute("class", _$escape(className(), true), false) + _$ssrAttribute("data-state", _$escape(state(), true), false), _$ssrStyleProperty("--k2b-pull-to-refresh-distance:", `${_$escape(distance(), true)}px`) + _$ssrStyleProperty(";--k2b-pull-to-refresh-progress:", _$escape(String(progress()), true)), _$ssrAttribute("class", state() === "refreshing" ? "ti ti-loader-2 k2b-spin" : "ti ti-refresh", false), state() === "refreshing" ? _$escape(props.label ?? refreshMessages().refreshing) : "", _$escape(props.children));
175
184
  }
176
185
  export default PullToRefresh;
177
186
  //# sourceMappingURL=PullToRefresh.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["layout/PullToRefresh.tsx"],"sourcesContent":["import { createSignal, type JSX, onCleanup, onMount } from \"solid-js\";\nimport { useUiMessages } from \"../intl/messages\";\n\n/** Android's SwipeRefreshLayout triggers at 64dp; the pull is damped to half the input travel. */\nconst THRESHOLD = 64;\nconst MAX_DISTANCE = 96;\nconst RESISTANCE = 0.5;\n/** A trackpad has no release event, so an idle gap ends the wheel gesture. */\nconst WHEEL_IDLE_MS = 300;\nconst LINE_HEIGHT = 16;\n\nexport type PullToRefreshState = \"idle\" | \"pulling\" | \"ready\" | \"refreshing\";\n\nexport type PullToRefreshProps = {\n /** Reloads the wrapped content. The indicator stays busy until the promise settles. */\n onRefresh: () => Promise<void>;\n disabled?: boolean;\n /** Status text announced while refreshing. Defaults to the shared \"Refreshing\" message. */\n label?: string;\n class?: string;\n /** Exactly one scroll container; the gesture only starts while it is scrolled to the top. */\n children: JSX.Element;\n};\n\nconst INTERACTIVE = \"a, button, input, textarea, select, [contenteditable], [role='button']\";\n\n/**\n * Turns a downward pull on a scroll container that is already at its top into\n * one `onRefresh` call. Touch pulls, mouse or pen drags on non-interactive\n * space, and trackpad or wheel overscroll share one gesture model. The gesture\n * is an enhancement: keep a keyboard-reachable refresh (a button or the page\n * reload) next to it.\n */\nexport function PullToRefresh(props: PullToRefreshProps): JSX.Element {\n const messages = useUiMessages();\n const [state, setState] = createSignal<PullToRefreshState>(\"idle\");\n const [distance, setDistance] = createSignal(0);\n let root!: HTMLDivElement;\n\n const active = () => !props.disabled && state() !== \"refreshing\";\n const atTop = (target: EventTarget | null) => {\n for (let node = target instanceof Element ? target : null; node && node !== root; node = node.parentElement)\n if (node.scrollTop > 0) return false;\n return true;\n };\n const interactive = (target: EventTarget | null) => target instanceof Element && target.closest(INTERACTIVE) !== null;\n /** Keeps the drag alive when the pointer leaves the wrapper; a pointer that is already gone must not end the gesture. */\n const capture = (id: number) => {\n try {\n root.setPointerCapture(id);\n } catch {}\n };\n\n const reset = () => {\n setDistance(0);\n setState(\"idle\");\n };\n const pull = (travel: number) => {\n const next = Math.min(MAX_DISTANCE, Math.max(0, travel * RESISTANCE));\n setDistance(next);\n setState(next >= THRESHOLD ? \"ready\" : next > 0 ? \"pulling\" : \"idle\");\n };\n const refresh = async () => {\n if (state() === \"refreshing\") return;\n setState(\"refreshing\");\n setDistance(THRESHOLD);\n try {\n await props.onRefresh();\n } finally {\n reset();\n }\n };\n const release = () => {\n if (state() === \"ready\") void refresh();\n else if (state() !== \"refreshing\") reset();\n };\n const abort = () => {\n if (state() !== \"refreshing\") reset();\n };\n\n let wheelTravel = 0;\n let wheelTimer: ReturnType<typeof setTimeout> | undefined;\n const endWheel = () => {\n wheelTravel = 0;\n abort();\n };\n const onWheel = (event: WheelEvent) => {\n if (!active()) return;\n clearTimeout(wheelTimer);\n wheelTimer = setTimeout(endWheel, WHEEL_IDLE_MS);\n if (event.deltaY >= 0 || !atTop(event.target)) return endWheel();\n const scale = event.deltaMode === 1 ? LINE_HEIGHT : event.deltaMode === 2 ? root.clientHeight : 1;\n wheelTravel -= event.deltaY * scale;\n pull(wheelTravel);\n if (state() === \"ready\") {\n wheelTravel = 0;\n void refresh();\n }\n };\n\n let pointer: { id: number; startY: number } | null = null;\n const onPointerDown = (event: PointerEvent) => {\n if (event.pointerType === \"touch\" || event.button !== 0 || !active() || interactive(event.target) || !atTop(event.target)) return;\n pointer = { id: event.pointerId, startY: event.clientY };\n };\n const onPointerMove = (event: PointerEvent) => {\n if (!pointer || event.pointerId !== pointer.id) return;\n const travel = event.clientY - pointer.startY;\n if (travel <= 0 && state() === \"idle\") return;\n if (state() === \"idle\") capture(pointer.id);\n pull(travel);\n if (state() !== \"idle\") event.preventDefault();\n };\n const onPointerUp = (event: PointerEvent) => {\n if (!pointer || event.pointerId !== pointer.id) return;\n pointer = null;\n release();\n };\n const onPointerCancel = (event: PointerEvent) => {\n if (!pointer || event.pointerId !== pointer.id) return;\n pointer = null;\n abort();\n };\n\n let touch: { id: number; startY: number } | null = null;\n const onTouchStart = (event: TouchEvent) => {\n const first = event.touches[0];\n if (!first || event.touches.length !== 1 || !active() || !atTop(event.target)) return;\n touch = { id: first.identifier, startY: first.clientY };\n };\n const onTouchMove = (event: TouchEvent) => {\n if (!touch) return;\n const current = Array.from(event.touches).find((item) => item.identifier === touch?.id);\n if (!current) return;\n const travel = current.clientY - touch.startY;\n if (travel <= 0 && state() === \"idle\") {\n touch = null;\n return;\n }\n pull(travel);\n if (state() !== \"idle\" && event.cancelable) event.preventDefault();\n };\n const onTouchEnd = () => {\n if (!touch) return;\n touch = null;\n release();\n };\n const onTouchCancel = () => {\n if (!touch) return;\n touch = null;\n abort();\n };\n\n onMount(() => {\n root.addEventListener(\"wheel\", onWheel, { passive: true });\n root.addEventListener(\"pointerdown\", onPointerDown);\n root.addEventListener(\"pointermove\", onPointerMove);\n root.addEventListener(\"pointerup\", onPointerUp);\n root.addEventListener(\"pointercancel\", onPointerCancel);\n root.addEventListener(\"touchstart\", onTouchStart, { passive: true });\n root.addEventListener(\"touchmove\", onTouchMove, { passive: false });\n root.addEventListener(\"touchend\", onTouchEnd);\n root.addEventListener(\"touchcancel\", onTouchCancel);\n onCleanup(() => {\n clearTimeout(wheelTimer);\n root.removeEventListener(\"wheel\", onWheel);\n root.removeEventListener(\"pointerdown\", onPointerDown);\n root.removeEventListener(\"pointermove\", onPointerMove);\n root.removeEventListener(\"pointerup\", onPointerUp);\n root.removeEventListener(\"pointercancel\", onPointerCancel);\n root.removeEventListener(\"touchstart\", onTouchStart);\n root.removeEventListener(\"touchmove\", onTouchMove);\n root.removeEventListener(\"touchend\", onTouchEnd);\n root.removeEventListener(\"touchcancel\", onTouchCancel);\n });\n });\n\n const className = () => (props.class?.trim() ? `k2b-pull-to-refresh ${props.class.trim()}` : \"k2b-pull-to-refresh\");\n const progress = () => Math.min(1, distance() / THRESHOLD);\n\n return (\n <div\n ref={root}\n class={className()}\n data-state={state()}\n style={{ \"--k2b-pull-to-refresh-distance\": `${distance()}px`, \"--k2b-pull-to-refresh-progress\": String(progress()) }}\n >\n <div class=\"k2b-pull-to-refresh__indicator\" role=\"status\" aria-live=\"polite\">\n <span class=\"k2b-pull-to-refresh__icon\" aria-hidden=\"true\">\n <i class={state() === \"refreshing\" ? \"ti ti-loader-2 k2b-spin\" : \"ti ti-refresh\"} />\n </span>\n <span class=\"k2b-sr-only\">{state() === \"refreshing\" ? (props.label ?? messages().refreshing) : \"\"}</span>\n </div>\n {props.children}\n </div>\n );\n}\n\nexport default PullToRefresh;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["layout/PullToRefresh.tsx"],"sourcesContent":["import { createSignal, type JSX, onCleanup, onMount } from \"solid-js\";\nimport { suppressTextSelection } from \"../internal/text-selection\";\nimport { useRefreshMessages } from \"./refresh-messages\";\n\n/** Android's SwipeRefreshLayout triggers at 64dp; the pull is damped to half the input travel. */\nconst THRESHOLD = 64;\nconst MAX_DISTANCE = 96;\nconst RESISTANCE = 0.5;\n/** A trackpad has no release event, so an idle gap ends the wheel gesture. */\nconst WHEEL_IDLE_MS = 300;\nconst LINE_HEIGHT = 16;\n\nexport type PullToRefreshState = \"idle\" | \"pulling\" | \"ready\" | \"refreshing\";\n\nexport type PullToRefreshProps = {\n /** Reloads the wrapped content. The indicator stays busy until the promise settles. */\n onRefresh: () => Promise<void>;\n disabled?: boolean;\n /** Status text announced while refreshing. Defaults to the shared \"Refreshing\" message. */\n label?: string;\n class?: string;\n /** Exactly one scroll container; the gesture only starts while it is scrolled to the top. */\n children: JSX.Element;\n};\n\nconst INTERACTIVE = \"a, button, input, textarea, select, [contenteditable], [role='button']\";\n\n/**\n * Turns a downward pull on a scroll container that is already at its top into\n * one `onRefresh` call. Touch pulls, mouse or pen drags on non-interactive\n * space, and trackpad or wheel overscroll share one gesture model. The gesture\n * is an enhancement: keep a keyboard-reachable refresh (a button or the page\n * reload) next to it.\n */\nexport function PullToRefresh(props: PullToRefreshProps): JSX.Element {\n const refreshMessages = useRefreshMessages();\n const [state, setState] = createSignal<PullToRefreshState>(\"idle\");\n const [distance, setDistance] = createSignal(0);\n let root!: HTMLDivElement;\n\n const active = () => !props.disabled && state() !== \"refreshing\";\n const atTop = (target: EventTarget | null) => {\n for (let node = target instanceof Element ? target : null; node && node !== root; node = node.parentElement)\n if (node.scrollTop > 0) return false;\n return true;\n };\n const interactive = (target: EventTarget | null) => target instanceof Element && target.closest(INTERACTIVE) !== null;\n /** Keeps the drag alive when the pointer leaves the wrapper; a pointer that is already gone must not end the gesture. */\n const capture = (id: number) => {\n try {\n root.setPointerCapture(id);\n } catch {}\n };\n\n const reset = () => {\n setDistance(0);\n setState(\"idle\");\n };\n const pull = (travel: number) => {\n const next = Math.min(MAX_DISTANCE, Math.max(0, travel * RESISTANCE));\n setDistance(next);\n setState(next >= THRESHOLD ? \"ready\" : next > 0 ? \"pulling\" : \"idle\");\n };\n const refresh = async () => {\n if (state() === \"refreshing\") return;\n setState(\"refreshing\");\n setDistance(THRESHOLD);\n try {\n await props.onRefresh();\n } finally {\n reset();\n }\n };\n const release = () => {\n if (state() === \"ready\") void refresh();\n else if (state() !== \"refreshing\") reset();\n };\n const abort = () => {\n if (state() !== \"refreshing\") reset();\n };\n\n let wheelTravel = 0;\n let wheelTimer: ReturnType<typeof setTimeout> | undefined;\n const endWheel = () => {\n wheelTravel = 0;\n abort();\n };\n const onWheel = (event: WheelEvent) => {\n if (!active()) return;\n clearTimeout(wheelTimer);\n wheelTimer = setTimeout(endWheel, WHEEL_IDLE_MS);\n if (event.deltaY >= 0 || !atTop(event.target)) return endWheel();\n const scale = event.deltaMode === 1 ? LINE_HEIGHT : event.deltaMode === 2 ? root.clientHeight : 1;\n wheelTravel -= event.deltaY * scale;\n pull(wheelTravel);\n if (state() === \"ready\") {\n wheelTravel = 0;\n void refresh();\n }\n };\n\n let pointer: { id: number; startY: number; releaseTextSelection?: () => void } | null = null;\n const onPointerDown = (event: PointerEvent) => {\n if (event.pointerType === \"touch\" || event.button !== 0 || !active() || interactive(event.target) || !atTop(event.target)) return;\n pointer = { id: event.pointerId, startY: event.clientY };\n };\n const onPointerMove = (event: PointerEvent) => {\n if (!pointer || event.pointerId !== pointer.id) return;\n // Before the pull captures the pointer, a release outside the wrapper never\n // reaches it; a move without the pressed button shows that press is over.\n if ((event.buttons & 1) === 0) return onPointerCancel(event);\n const travel = event.clientY - pointer.startY;\n if (travel <= 0 && state() === \"idle\") return;\n if (state() === \"idle\") {\n capture(pointer.id);\n pointer.releaseTextSelection ??= suppressTextSelection(pointer.id);\n }\n pull(travel);\n if (state() !== \"idle\") event.preventDefault();\n };\n const onPointerUp = (event: PointerEvent) => {\n if (!pointer || event.pointerId !== pointer.id) return;\n pointer.releaseTextSelection?.();\n pointer = null;\n release();\n };\n const onPointerCancel = (event: PointerEvent) => {\n if (!pointer || event.pointerId !== pointer.id) return;\n pointer.releaseTextSelection?.();\n pointer = null;\n abort();\n };\n\n let touch: { id: number; startY: number } | null = null;\n const onTouchStart = (event: TouchEvent) => {\n const first = event.touches[0];\n if (!first || event.touches.length !== 1 || !active() || !atTop(event.target)) return;\n touch = { id: first.identifier, startY: first.clientY };\n };\n const onTouchMove = (event: TouchEvent) => {\n if (!touch) return;\n const current = Array.from(event.touches).find((item) => item.identifier === touch?.id);\n if (!current) return;\n const travel = current.clientY - touch.startY;\n if (travel <= 0 && state() === \"idle\") {\n touch = null;\n return;\n }\n pull(travel);\n if (state() !== \"idle\" && event.cancelable) event.preventDefault();\n };\n const onTouchEnd = () => {\n if (!touch) return;\n touch = null;\n release();\n };\n const onTouchCancel = () => {\n if (!touch) return;\n touch = null;\n abort();\n };\n\n onMount(() => {\n root.addEventListener(\"wheel\", onWheel, { passive: true });\n root.addEventListener(\"pointerdown\", onPointerDown);\n root.addEventListener(\"pointermove\", onPointerMove);\n root.addEventListener(\"pointerup\", onPointerUp);\n root.addEventListener(\"pointercancel\", onPointerCancel);\n root.addEventListener(\"touchstart\", onTouchStart, { passive: true });\n root.addEventListener(\"touchmove\", onTouchMove, { passive: false });\n root.addEventListener(\"touchend\", onTouchEnd);\n root.addEventListener(\"touchcancel\", onTouchCancel);\n onCleanup(() => {\n clearTimeout(wheelTimer);\n root.removeEventListener(\"wheel\", onWheel);\n root.removeEventListener(\"pointerdown\", onPointerDown);\n root.removeEventListener(\"pointermove\", onPointerMove);\n root.removeEventListener(\"pointerup\", onPointerUp);\n root.removeEventListener(\"pointercancel\", onPointerCancel);\n root.removeEventListener(\"touchstart\", onTouchStart);\n root.removeEventListener(\"touchmove\", onTouchMove);\n root.removeEventListener(\"touchend\", onTouchEnd);\n root.removeEventListener(\"touchcancel\", onTouchCancel);\n });\n });\n\n const className = () => (props.class?.trim() ? `k2b-pull-to-refresh ${props.class.trim()}` : \"k2b-pull-to-refresh\");\n const progress = () => Math.min(1, distance() / THRESHOLD);\n\n return (\n <div\n ref={root}\n class={className()}\n data-state={state()}\n style={{ \"--k2b-pull-to-refresh-distance\": `${distance()}px`, \"--k2b-pull-to-refresh-progress\": String(progress()) }}\n >\n <div class=\"k2b-pull-to-refresh__indicator\" role=\"status\" aria-live=\"polite\">\n <span class=\"k2b-pull-to-refresh__icon\" aria-hidden=\"true\">\n <i class={state() === \"refreshing\" ? \"ti ti-loader-2 k2b-spin\" : \"ti ti-refresh\"} />\n </span>\n <span class=\"k2b-sr-only\">{state() === \"refreshing\" ? (props.label ?? refreshMessages().refreshing) : \"\"}</span>\n </div>\n {props.children}\n </div>\n );\n}\n\nexport default PullToRefresh;\n"],"mappings":"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","ignoreList":[]}
@@ -24,7 +24,8 @@ var _tmpl$ = ["<p>", "</p>"],
24
24
  _tmpl$15 = ["<p class=\"k2b-settings-panel-footer__status\" role=\"status\" aria-live=\"polite\">", "</p>"];
25
25
  import { children, createMemo, createUniqueId, Show } from "solid-js";
26
26
  import { Button } from "../actions/Button";
27
- import { useUiMessages } from "../intl/messages";
27
+ import { usePromptMessages } from "../feedback/prompt-messages";
28
+ import { useSettingsMessages } from "./settings-messages";
28
29
  const read = value => typeof value === "function" ? value() : value;
29
30
  export function SettingsPage(props) {
30
31
  return _$ssr(_tmpl$4, `k2b-settings-page${props.class ? ` ${_$escape(props.class, true)}` : ""}`, _$ssrStyle(props.style), _$escape(_$createComponent(Show, {
@@ -124,7 +125,7 @@ export const readSettingsError = async (response, fallback) => {
124
125
  };
125
126
  };
126
127
  export function SettingsField(props) {
127
- const messages = useUiMessages();
128
+ const settingsMessages = useSettingsMessages();
128
129
  const id = createUniqueId();
129
130
  const descriptionId = `k2b-settings-field-${id}-description`;
130
131
  const errorId = `k2b-settings-field-${id}-error`;
@@ -137,7 +138,7 @@ export function SettingsField(props) {
137
138
  return _$memo(() => props.changed !== undefined)() && read(props.changed);
138
139
  },
139
140
  get children() {
140
- return _$ssr(_tmpl$0, _$escape(messages().unsaved));
141
+ return _$ssr(_tmpl$0, _$escape(settingsMessages().unsaved));
141
142
  }
142
143
  })), _$ssrAttribute("id", _$escape(descriptionId, true), false), _$escape(props.description), _$escape(control()), _$escape(_$createComponent(Show, {
143
144
  get when() {
@@ -147,7 +148,8 @@ export function SettingsField(props) {
147
148
  })));
148
149
  }
149
150
  const SettingsActions = props => {
150
- const messages = useUiMessages();
151
+ const promptMessages = usePromptMessages();
152
+ const settingsMessages = useSettingsMessages();
151
153
  const changeCount = () => read(props.changeCount);
152
154
  const loading = () => read(props.loading);
153
155
  const disabled = () => loading() || Boolean(props.disableWithoutChanges && changeCount() === 0);
@@ -161,7 +163,7 @@ const SettingsActions = props => {
161
163
  return props.onDiscard;
162
164
  },
163
165
  get children() {
164
- return messages().discard;
166
+ return promptMessages().discard;
165
167
  }
166
168
  })), _$escape(_$createComponent(Button, {
167
169
  get variant() {
@@ -171,7 +173,7 @@ const SettingsActions = props => {
171
173
  return loading();
172
174
  },
173
175
  get loadingLabel() {
174
- return messages().saving;
176
+ return settingsMessages().saving;
175
177
  },
176
178
  get disabled() {
177
179
  return saveDisabled();
@@ -180,36 +182,36 @@ const SettingsActions = props => {
180
182
  return props.onSave;
181
183
  },
182
184
  get children() {
183
- return [_$ssr(_tmpl$11), props.saveLabel ?? messages().saveChanges];
185
+ return [_$ssr(_tmpl$11), props.saveLabel ?? settingsMessages().saveChanges];
184
186
  }
185
187
  })));
186
188
  };
187
189
  export function SettingsSaveBar(props) {
188
- const messages = useUiMessages();
190
+ const settingsMessages = useSettingsMessages();
189
191
  const changeCount = () => read(props.changeCount);
190
192
  return _$createComponent(Show, {
191
193
  get when() {
192
194
  return changeCount() > 0;
193
195
  },
194
196
  get children() {
195
- return _$ssr(_tmpl$13, `k2b-settings-save-bar ${_$escape(props.class ?? "", true)}`, _$escape(changeCount()), _$escape(messages().unsavedChangeLabel({
197
+ return _$ssr(_tmpl$13, `k2b-settings-save-bar ${_$escape(props.class ?? "", true)}`, _$escape(changeCount()), _$escape(settingsMessages().unsavedChangeLabel({
196
198
  count: changeCount()
197
199
  })), _$escape(_$createComponent(SettingsActions, props)));
198
200
  }
199
201
  });
200
202
  }
201
203
  export function SettingsPanelFooter(props) {
202
- const messages = useUiMessages();
204
+ const settingsMessages = useSettingsMessages();
203
205
  const changeCount = () => read(props.changeCount);
204
206
  return [_$ssr(_tmpl$15, _$escape(_$createComponent(Show, {
205
207
  get when() {
206
208
  return changeCount() > 0;
207
209
  },
208
210
  get fallback() {
209
- return messages().noUnsavedChanges;
211
+ return settingsMessages().noUnsavedChanges;
210
212
  },
211
213
  get children() {
212
- return [_$ssr(_tmpl$14, _$escape(changeCount())), " ", messages().unsavedChangeLabel({
214
+ return [_$ssr(_tmpl$14, _$escape(changeCount())), " ", settingsMessages().unsavedChangeLabel({
213
215
  count: changeCount()
214
216
  })];
215
217
  }