@k2b/ui 0.2.0 → 0.3.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 (366) hide show
  1. package/dist/browser/actions/Button.js +11 -2
  2. package/dist/browser/actions/Button.js.map +1 -1
  3. package/dist/browser/actions/Disclosure.js +11 -8
  4. package/dist/browser/actions/Disclosure.js.map +1 -1
  5. package/dist/browser/actions/Dropdown.js +4 -1
  6. package/dist/browser/actions/Dropdown.js.map +1 -1
  7. package/dist/browser/actions/FilterChip.js +16 -2
  8. package/dist/browser/actions/FilterChip.js.map +1 -1
  9. package/dist/browser/actions/SplitButton.js +69 -22
  10. package/dist/browser/actions/SplitButton.js.map +1 -1
  11. package/dist/browser/actions/SpotlightSearch.js +3 -7
  12. package/dist/browser/actions/SpotlightSearch.js.map +1 -1
  13. package/dist/browser/actions/Tabs.js +132 -47
  14. package/dist/browser/actions/Tabs.js.map +1 -1
  15. package/dist/browser/actions/index.js +1 -1
  16. package/dist/browser/actions/index.js.map +1 -1
  17. package/dist/browser/chat/ChatComposer.js +751 -423
  18. package/dist/browser/chat/ChatComposer.js.map +1 -1
  19. package/dist/browser/chat/ChatContextPopup.js +123 -0
  20. package/dist/browser/chat/ChatContextPopup.js.map +1 -0
  21. package/dist/browser/chat/ChatPrimitives.js +141 -78
  22. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  23. package/dist/browser/chat/ChatTasks.js +112 -0
  24. package/dist/browser/chat/ChatTasks.js.map +1 -0
  25. package/dist/browser/chat/ChatTimeline.js +31 -14
  26. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  27. package/dist/browser/chat/chat-behavior.js +0 -5
  28. package/dist/browser/chat/chat-behavior.js.map +1 -1
  29. package/dist/browser/chat/composer-document.js +55 -0
  30. package/dist/browser/chat/composer-document.js.map +1 -0
  31. package/dist/browser/chat/index.js +6 -1
  32. package/dist/browser/chat/index.js.map +1 -1
  33. package/dist/browser/chat/types.js.map +1 -1
  34. package/dist/browser/content/Chart.js +148 -239
  35. package/dist/browser/content/Chart.js.map +1 -1
  36. package/dist/browser/content/ChartExplorer.js +324 -0
  37. package/dist/browser/content/ChartExplorer.js.map +1 -0
  38. package/dist/browser/content/ChartExplorerControls.js +153 -0
  39. package/dist/browser/content/ChartExplorerControls.js.map +1 -0
  40. package/dist/browser/content/ChartFilterControls.js +200 -0
  41. package/dist/browser/content/ChartFilterControls.js.map +1 -0
  42. package/dist/browser/content/ChartSnapshotView.js +113 -0
  43. package/dist/browser/content/ChartSnapshotView.js.map +1 -0
  44. package/dist/browser/content/DataTable.js +48 -32
  45. package/dist/browser/content/DataTable.js.map +1 -1
  46. package/dist/browser/content/FileBrowser.js +3 -0
  47. package/dist/browser/content/FileBrowser.js.map +1 -1
  48. package/dist/browser/content/FileGrid.js +93 -0
  49. package/dist/browser/content/FileGrid.js.map +1 -0
  50. package/dist/browser/content/FileTree.js +2 -2
  51. package/dist/browser/content/FileTree.js.map +1 -1
  52. package/dist/browser/content/FileView.js +507 -162
  53. package/dist/browser/content/FileView.js.map +1 -1
  54. package/dist/browser/content/MarkdownView.js +6 -0
  55. package/dist/browser/content/MarkdownView.js.map +1 -1
  56. package/dist/browser/content/PdfPreview.js +107 -90
  57. package/dist/browser/content/PdfPreview.js.map +1 -1
  58. package/dist/browser/content/chart-cursor.js +33 -0
  59. package/dist/browser/content/chart-cursor.js.map +1 -0
  60. package/dist/browser/content/chart-explorer.js +147 -0
  61. package/dist/browser/content/chart-explorer.js.map +1 -0
  62. package/dist/browser/content/chart-inspection.js +447 -0
  63. package/dist/browser/content/chart-inspection.js.map +1 -0
  64. package/dist/browser/content/chart-line-gaps.js +53 -0
  65. package/dist/browser/content/chart-line-gaps.js.map +1 -0
  66. package/dist/browser/content/chart-map-viewport.js +5 -1
  67. package/dist/browser/content/chart-map-viewport.js.map +1 -1
  68. package/dist/browser/content/chart-snapshot.js +63 -0
  69. package/dist/browser/content/chart-snapshot.js.map +1 -0
  70. package/dist/browser/content/chart-state-timeline.js +32 -4
  71. package/dist/browser/content/chart-state-timeline.js.map +1 -1
  72. package/dist/browser/content/chart-svg.js +54 -0
  73. package/dist/browser/content/chart-svg.js.map +1 -0
  74. package/dist/browser/content/collection-selection.js +109 -0
  75. package/dist/browser/content/collection-selection.js.map +1 -0
  76. package/dist/browser/content/delimited-preferences.js +21 -0
  77. package/dist/browser/content/delimited-preferences.js.map +1 -0
  78. package/dist/browser/content/file-tree.js.map +1 -1
  79. package/dist/browser/content/file-view-preview.js +11 -7
  80. package/dist/browser/content/file-view-preview.js.map +1 -1
  81. package/dist/browser/content/index.js +9 -0
  82. package/dist/browser/content/index.js.map +1 -1
  83. package/dist/browser/feedback/InlineGuidance.js +17 -3
  84. package/dist/browser/feedback/InlineGuidance.js.map +1 -1
  85. package/dist/browser/feedback/dialog-core.js +81 -7
  86. package/dist/browser/feedback/dialog-core.js.map +1 -1
  87. package/dist/browser/feedback/prompts.js +6 -0
  88. package/dist/browser/feedback/prompts.js.map +1 -1
  89. package/dist/browser/feedback/toast.js +29 -6
  90. package/dist/browser/feedback/toast.js.map +1 -1
  91. package/dist/browser/inputs/SelectChip.js +3 -2
  92. package/dist/browser/inputs/SelectChip.js.map +1 -1
  93. package/dist/browser/inputs/TextInput.js +7 -1
  94. package/dist/browser/inputs/TextInput.js.map +1 -1
  95. package/dist/browser/inputs/markdown/MarkdownEditor.js +61 -37
  96. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  97. package/dist/browser/intl/Format.js +89 -16
  98. package/dist/browser/intl/Format.js.map +1 -1
  99. package/dist/browser/intl/index.js.map +1 -1
  100. package/dist/browser/intl/messages.js +130 -2
  101. package/dist/browser/intl/messages.js.map +1 -1
  102. package/dist/browser/layout/AppWorkspace.js +712 -624
  103. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  104. package/dist/browser/layout/BottomSheet.js +95 -0
  105. package/dist/browser/layout/BottomSheet.js.map +1 -0
  106. package/dist/browser/layout/DetailPanel.js +56 -44
  107. package/dist/browser/layout/DetailPanel.js.map +1 -1
  108. package/dist/browser/layout/Navigation.js +278 -0
  109. package/dist/browser/layout/Navigation.js.map +1 -0
  110. package/dist/browser/layout/PanelDialog.js +219 -71
  111. package/dist/browser/layout/PanelDialog.js.map +1 -1
  112. package/dist/browser/layout/ScrollArea.js +21 -1
  113. package/dist/browser/layout/ScrollArea.js.map +1 -1
  114. package/dist/browser/layout/Settings.js.map +1 -1
  115. package/dist/browser/layout/SidebarItemPreview.js +183 -0
  116. package/dist/browser/layout/SidebarItemPreview.js.map +1 -0
  117. package/dist/browser/layout/app-workspace-controller.js +3 -0
  118. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  119. package/dist/browser/layout/index.js +3 -0
  120. package/dist/browser/layout/index.js.map +1 -1
  121. package/dist/browser/layout/navigation-model.js +23 -0
  122. package/dist/browser/layout/navigation-model.js.map +1 -0
  123. package/dist/browser/layout/scroll-fade.js +100 -0
  124. package/dist/browser/layout/scroll-fade.js.map +1 -0
  125. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  126. package/dist/browser/surfaces/StatusBadge.js +2 -1
  127. package/dist/browser/surfaces/StatusBadge.js.map +1 -1
  128. package/dist/fonts/ibm-plex-mono-cyrillic-400-italic-4aded3f2f2a7d27d.woff2 +0 -0
  129. package/dist/fonts/ibm-plex-mono-cyrillic-400-normal-7635422bd10ddbbc.woff2 +0 -0
  130. package/dist/fonts/ibm-plex-mono-cyrillic-500-normal-1d89462e86cb8e87.woff2 +0 -0
  131. package/dist/fonts/ibm-plex-mono-cyrillic-600-normal-2b05a8695c7f9f4a.woff2 +0 -0
  132. package/dist/fonts/ibm-plex-mono-cyrillic-ext-400-italic-a0b3b8cbe5a516e7.woff2 +0 -0
  133. package/dist/fonts/ibm-plex-mono-cyrillic-ext-400-normal-f8c22ec1804bd696.woff2 +0 -0
  134. package/dist/fonts/ibm-plex-mono-cyrillic-ext-500-normal-3febe5c7f22e4b07.woff2 +0 -0
  135. package/dist/fonts/ibm-plex-mono-cyrillic-ext-600-normal-83109cdd4f8665b4.woff2 +0 -0
  136. package/dist/fonts/ibm-plex-mono-latin-400-italic-0840095faae86403.woff2 +0 -0
  137. package/dist/fonts/ibm-plex-mono-latin-400-normal-08949f728dc52d52.woff2 +0 -0
  138. package/dist/fonts/ibm-plex-mono-latin-500-normal-01d285447409c8a5.woff2 +0 -0
  139. package/dist/fonts/ibm-plex-mono-latin-600-normal-0d1f0b8d0722224e.woff2 +0 -0
  140. package/dist/fonts/ibm-plex-mono-latin-ext-400-italic-1b07eee6df7d26b3.woff2 +0 -0
  141. package/dist/fonts/ibm-plex-mono-latin-ext-400-normal-6bc0f226a5b7884a.woff2 +0 -0
  142. package/dist/fonts/ibm-plex-mono-latin-ext-500-normal-6bb06407c97584b0.woff2 +0 -0
  143. package/dist/fonts/ibm-plex-mono-latin-ext-600-normal-32057cf50dd14bdb.woff2 +0 -0
  144. package/dist/fonts/ibm-plex-mono-vietnamese-400-italic-a6bab38af4f9c761.woff2 +0 -0
  145. package/dist/fonts/ibm-plex-mono-vietnamese-400-normal-62632b6375305e70.woff2 +0 -0
  146. package/dist/fonts/ibm-plex-mono-vietnamese-500-normal-781633d95de88040.woff2 +0 -0
  147. package/dist/fonts/ibm-plex-mono-vietnamese-600-normal-51b74d53e106ba8a.woff2 +0 -0
  148. package/dist/fonts/ibm-plex-sans-cyrillic-400-italic-e8731a7e2b00fc4f.woff2 +0 -0
  149. package/dist/fonts/ibm-plex-sans-cyrillic-400-normal-69afad88a0740b6e.woff2 +0 -0
  150. package/dist/fonts/ibm-plex-sans-cyrillic-500-normal-200be3a2a6b1789f.woff2 +0 -0
  151. package/dist/fonts/ibm-plex-sans-cyrillic-600-normal-730becc6f005c18c.woff2 +0 -0
  152. package/dist/fonts/ibm-plex-sans-cyrillic-700-normal-40540598b4c9eb2c.woff2 +0 -0
  153. package/dist/fonts/ibm-plex-sans-cyrillic-ext-400-italic-4ffb25726a7ce4cc.woff2 +0 -0
  154. package/dist/fonts/ibm-plex-sans-cyrillic-ext-400-normal-e2580ad78906551e.woff2 +0 -0
  155. package/dist/fonts/ibm-plex-sans-cyrillic-ext-500-normal-08578d906af6d986.woff2 +0 -0
  156. package/dist/fonts/ibm-plex-sans-cyrillic-ext-600-normal-d60d3d0b182753d5.woff2 +0 -0
  157. package/dist/fonts/ibm-plex-sans-cyrillic-ext-700-normal-d07dd53642480097.woff2 +0 -0
  158. package/dist/fonts/ibm-plex-sans-greek-400-italic-1bc10b01688ba9fa.woff2 +0 -0
  159. package/dist/fonts/ibm-plex-sans-greek-400-normal-02296067bc904d2a.woff2 +0 -0
  160. package/dist/fonts/ibm-plex-sans-greek-500-normal-8cb6e20b4dbbaa5f.woff2 +0 -0
  161. package/dist/fonts/ibm-plex-sans-greek-600-normal-0a9ebd9019415ee9.woff2 +0 -0
  162. package/dist/fonts/ibm-plex-sans-greek-700-normal-c949641d10a3bebc.woff2 +0 -0
  163. package/dist/fonts/ibm-plex-sans-latin-400-italic-6de912e531b6c980.woff2 +0 -0
  164. package/dist/fonts/ibm-plex-sans-latin-400-normal-3b646991d30055a9.woff2 +0 -0
  165. package/dist/fonts/ibm-plex-sans-latin-500-normal-0717336fb31fcdcd.woff2 +0 -0
  166. package/dist/fonts/ibm-plex-sans-latin-600-normal-8960851d691c054e.woff2 +0 -0
  167. package/dist/fonts/ibm-plex-sans-latin-700-normal-42e7b0c143c19df9.woff2 +0 -0
  168. package/dist/fonts/ibm-plex-sans-latin-ext-400-italic-c5c00e8a32022dfe.woff2 +0 -0
  169. package/dist/fonts/ibm-plex-sans-latin-ext-400-normal-c93d2a12aaa280f6.woff2 +0 -0
  170. package/dist/fonts/ibm-plex-sans-latin-ext-500-normal-2846035d85100f84.woff2 +0 -0
  171. package/dist/fonts/ibm-plex-sans-latin-ext-600-normal-b25dfd4f979e442a.woff2 +0 -0
  172. package/dist/fonts/ibm-plex-sans-latin-ext-700-normal-92f0392bd74fa395.woff2 +0 -0
  173. package/dist/fonts/ibm-plex-sans-vietnamese-400-italic-675d4bace127bffb.woff2 +0 -0
  174. package/dist/fonts/ibm-plex-sans-vietnamese-400-normal-771538f7f26551bd.woff2 +0 -0
  175. package/dist/fonts/ibm-plex-sans-vietnamese-500-normal-85ba3d9c2488a813.woff2 +0 -0
  176. package/dist/fonts/ibm-plex-sans-vietnamese-600-normal-5d34b803637befe3.woff2 +0 -0
  177. package/dist/fonts/ibm-plex-sans-vietnamese-700-normal-b79d0c4b68b85007.woff2 +0 -0
  178. package/dist/plex.css +1 -1
  179. package/dist/ssr/actions/Button.js +11 -2
  180. package/dist/ssr/actions/Button.js.map +1 -1
  181. package/dist/ssr/actions/Disclosure.js +2 -2
  182. package/dist/ssr/actions/Disclosure.js.map +1 -1
  183. package/dist/ssr/actions/Dropdown.js +4 -1
  184. package/dist/ssr/actions/Dropdown.js.map +1 -1
  185. package/dist/ssr/actions/FilterChip.js +16 -2
  186. package/dist/ssr/actions/FilterChip.js.map +1 -1
  187. package/dist/ssr/actions/SplitButton.js +69 -22
  188. package/dist/ssr/actions/SplitButton.js.map +1 -1
  189. package/dist/ssr/actions/SpotlightSearch.js +3 -7
  190. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  191. package/dist/ssr/actions/Tabs.js +58 -11
  192. package/dist/ssr/actions/Tabs.js.map +1 -1
  193. package/dist/ssr/actions/index.js +1 -1
  194. package/dist/ssr/actions/index.js.map +1 -1
  195. package/dist/ssr/chat/ChatComposer.js +366 -134
  196. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  197. package/dist/ssr/chat/ChatContextPopup.js +86 -0
  198. package/dist/ssr/chat/ChatContextPopup.js.map +1 -0
  199. package/dist/ssr/chat/ChatPrimitives.js +49 -11
  200. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  201. package/dist/ssr/chat/ChatTasks.js +48 -0
  202. package/dist/ssr/chat/ChatTasks.js.map +1 -0
  203. package/dist/ssr/chat/ChatTimeline.js +14 -4
  204. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  205. package/dist/ssr/chat/chat-behavior.js +0 -5
  206. package/dist/ssr/chat/chat-behavior.js.map +1 -1
  207. package/dist/ssr/chat/composer-document.js +55 -0
  208. package/dist/ssr/chat/composer-document.js.map +1 -0
  209. package/dist/ssr/chat/index.js +6 -1
  210. package/dist/ssr/chat/index.js.map +1 -1
  211. package/dist/ssr/chat/types.js.map +1 -1
  212. package/dist/ssr/content/Chart.js +121 -219
  213. package/dist/ssr/content/Chart.js.map +1 -1
  214. package/dist/ssr/content/ChartExplorer.js +257 -0
  215. package/dist/ssr/content/ChartExplorer.js.map +1 -0
  216. package/dist/ssr/content/ChartExplorerControls.js +105 -0
  217. package/dist/ssr/content/ChartExplorerControls.js.map +1 -0
  218. package/dist/ssr/content/ChartFilterControls.js +139 -0
  219. package/dist/ssr/content/ChartFilterControls.js.map +1 -0
  220. package/dist/ssr/content/ChartSnapshotView.js +57 -0
  221. package/dist/ssr/content/ChartSnapshotView.js.map +1 -0
  222. package/dist/ssr/content/DataTable.js +13 -9
  223. package/dist/ssr/content/DataTable.js.map +1 -1
  224. package/dist/ssr/content/FileBrowser.js +3 -0
  225. package/dist/ssr/content/FileBrowser.js.map +1 -1
  226. package/dist/ssr/content/FileGrid.js +38 -0
  227. package/dist/ssr/content/FileGrid.js.map +1 -0
  228. package/dist/ssr/content/FileTree.js +2 -2
  229. package/dist/ssr/content/FileTree.js.map +1 -1
  230. package/dist/ssr/content/FileView.js +352 -75
  231. package/dist/ssr/content/FileView.js.map +1 -1
  232. package/dist/ssr/content/MarkdownView.js +6 -0
  233. package/dist/ssr/content/MarkdownView.js.map +1 -1
  234. package/dist/ssr/content/PdfPreview.js +37 -24
  235. package/dist/ssr/content/PdfPreview.js.map +1 -1
  236. package/dist/ssr/content/chart-cursor.js +33 -0
  237. package/dist/ssr/content/chart-cursor.js.map +1 -0
  238. package/dist/ssr/content/chart-explorer.js +147 -0
  239. package/dist/ssr/content/chart-explorer.js.map +1 -0
  240. package/dist/ssr/content/chart-inspection.js +447 -0
  241. package/dist/ssr/content/chart-inspection.js.map +1 -0
  242. package/dist/ssr/content/chart-line-gaps.js +53 -0
  243. package/dist/ssr/content/chart-line-gaps.js.map +1 -0
  244. package/dist/ssr/content/chart-map-viewport.js +5 -1
  245. package/dist/ssr/content/chart-map-viewport.js.map +1 -1
  246. package/dist/ssr/content/chart-snapshot.js +63 -0
  247. package/dist/ssr/content/chart-snapshot.js.map +1 -0
  248. package/dist/ssr/content/chart-state-timeline.js +32 -4
  249. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  250. package/dist/ssr/content/chart-svg.js +54 -0
  251. package/dist/ssr/content/chart-svg.js.map +1 -0
  252. package/dist/ssr/content/collection-selection.js +109 -0
  253. package/dist/ssr/content/collection-selection.js.map +1 -0
  254. package/dist/ssr/content/delimited-preferences.js +21 -0
  255. package/dist/ssr/content/delimited-preferences.js.map +1 -0
  256. package/dist/ssr/content/file-tree.js.map +1 -1
  257. package/dist/ssr/content/file-view-preview.js +11 -7
  258. package/dist/ssr/content/file-view-preview.js.map +1 -1
  259. package/dist/ssr/content/index.js +9 -0
  260. package/dist/ssr/content/index.js.map +1 -1
  261. package/dist/ssr/feedback/InlineGuidance.js +17 -3
  262. package/dist/ssr/feedback/InlineGuidance.js.map +1 -1
  263. package/dist/ssr/feedback/dialog-core.js +81 -7
  264. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  265. package/dist/ssr/feedback/prompts.js +6 -0
  266. package/dist/ssr/feedback/prompts.js.map +1 -1
  267. package/dist/ssr/feedback/toast.js +29 -6
  268. package/dist/ssr/feedback/toast.js.map +1 -1
  269. package/dist/ssr/inputs/SelectChip.js +3 -3
  270. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  271. package/dist/ssr/inputs/TextInput.js.map +1 -1
  272. package/dist/ssr/inputs/markdown/MarkdownEditor.js +19 -11
  273. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  274. package/dist/ssr/intl/Format.js +61 -0
  275. package/dist/ssr/intl/Format.js.map +1 -1
  276. package/dist/ssr/intl/index.js.map +1 -1
  277. package/dist/ssr/intl/messages.js +130 -2
  278. package/dist/ssr/intl/messages.js.map +1 -1
  279. package/dist/ssr/layout/AppWorkspace.js +368 -275
  280. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  281. package/dist/ssr/layout/BottomSheet.js +43 -0
  282. package/dist/ssr/layout/BottomSheet.js.map +1 -0
  283. package/dist/ssr/layout/DetailPanel.js +11 -4
  284. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  285. package/dist/ssr/layout/Navigation.js +181 -0
  286. package/dist/ssr/layout/Navigation.js.map +1 -0
  287. package/dist/ssr/layout/PanelDialog.js +111 -26
  288. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  289. package/dist/ssr/layout/ScrollArea.js +16 -1
  290. package/dist/ssr/layout/ScrollArea.js.map +1 -1
  291. package/dist/ssr/layout/Settings.js.map +1 -1
  292. package/dist/ssr/layout/SidebarItemPreview.js +133 -0
  293. package/dist/ssr/layout/SidebarItemPreview.js.map +1 -0
  294. package/dist/ssr/layout/app-workspace-controller.js +3 -0
  295. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  296. package/dist/ssr/layout/index.js +3 -0
  297. package/dist/ssr/layout/index.js.map +1 -1
  298. package/dist/ssr/layout/navigation-model.js +23 -0
  299. package/dist/ssr/layout/navigation-model.js.map +1 -0
  300. package/dist/ssr/layout/scroll-fade.js +100 -0
  301. package/dist/ssr/layout/scroll-fade.js.map +1 -0
  302. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  303. package/dist/ssr/surfaces/StatusBadge.js +2 -1
  304. package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
  305. package/dist/styles.css +1 -1
  306. package/dist/tabler.css +1 -1
  307. package/dist/types/actions/Button.d.ts +4 -0
  308. package/dist/types/actions/Disclosure.d.ts +1 -0
  309. package/dist/types/actions/FilterChip.d.ts +4 -0
  310. package/dist/types/actions/SplitButton.d.ts +6 -0
  311. package/dist/types/actions/SpotlightSearch.d.ts +0 -4
  312. package/dist/types/actions/Tabs.d.ts +4 -0
  313. package/dist/types/actions/index.d.ts +1 -1
  314. package/dist/types/chat/ChatComposer.d.ts +20 -2
  315. package/dist/types/chat/ChatContextPopup.d.ts +6 -0
  316. package/dist/types/chat/ChatPrimitives.d.ts +4 -0
  317. package/dist/types/chat/ChatTasks.d.ts +15 -0
  318. package/dist/types/chat/ChatTimeline.d.ts +2 -0
  319. package/dist/types/chat/chat-behavior.d.ts +0 -3
  320. package/dist/types/chat/composer-document.d.ts +14 -0
  321. package/dist/types/chat/index.d.ts +8 -1
  322. package/dist/types/chat/types.d.ts +7 -0
  323. package/dist/types/content/Chart.d.ts +42 -23
  324. package/dist/types/content/ChartExplorer.d.ts +34 -0
  325. package/dist/types/content/ChartExplorerControls.d.ts +10 -0
  326. package/dist/types/content/ChartFilterControls.d.ts +21 -0
  327. package/dist/types/content/ChartSnapshotView.d.ts +11 -0
  328. package/dist/types/content/DataTable.d.ts +4 -0
  329. package/dist/types/content/FileBrowser.d.ts +1 -0
  330. package/dist/types/content/FileGrid.d.ts +21 -0
  331. package/dist/types/content/FileView.d.ts +20 -0
  332. package/dist/types/content/PdfPreview.d.ts +8 -1
  333. package/dist/types/content/chart-cursor.d.ts +15 -0
  334. package/dist/types/content/chart-explorer.d.ts +48 -0
  335. package/dist/types/content/chart-inspection.d.ts +40 -0
  336. package/dist/types/content/chart-line-gaps.d.ts +5 -0
  337. package/dist/types/content/chart-map-viewport.d.ts +1 -1
  338. package/dist/types/content/chart-snapshot.d.ts +26 -0
  339. package/dist/types/content/chart-svg.d.ts +21 -0
  340. package/dist/types/content/collection-selection.d.ts +24 -0
  341. package/dist/types/content/delimited-preferences.d.ts +11 -0
  342. package/dist/types/content/file-tree.d.ts +2 -0
  343. package/dist/types/content/file-view-preview.d.ts +4 -1
  344. package/dist/types/content/index.d.ts +15 -1
  345. package/dist/types/feedback/InlineGuidance.d.ts +1 -0
  346. package/dist/types/feedback/dialog-core.d.ts +11 -0
  347. package/dist/types/feedback/prompts.d.ts +2 -0
  348. package/dist/types/feedback/toast.d.ts +7 -1
  349. package/dist/types/inputs/markdown/MarkdownEditor.d.ts +5 -1
  350. package/dist/types/intl/Format.d.ts +9 -0
  351. package/dist/types/intl/index.d.ts +1 -1
  352. package/dist/types/intl/messages.d.ts +31 -1
  353. package/dist/types/layout/AppWorkspace.d.ts +35 -18
  354. package/dist/types/layout/BottomSheet.d.ts +23 -0
  355. package/dist/types/layout/DetailPanel.d.ts +1 -0
  356. package/dist/types/layout/Navigation.d.ts +8 -0
  357. package/dist/types/layout/PanelDialog.d.ts +14 -1
  358. package/dist/types/layout/ScrollArea.d.ts +4 -0
  359. package/dist/types/layout/Settings.d.ts +1 -1
  360. package/dist/types/layout/SidebarItemPreview.d.ts +11 -0
  361. package/dist/types/layout/index.d.ts +4 -1
  362. package/dist/types/layout/navigation-model.d.ts +48 -0
  363. package/dist/types/layout/scroll-fade.d.ts +3 -0
  364. package/dist/types/surfaces/DescriptionList.d.ts +1 -1
  365. package/dist/types/surfaces/StatusBadge.d.ts +1 -1
  366. package/package.json +5 -5
@@ -1,22 +1,22 @@
1
1
  import { template as _$template } from "solid-js/web";
2
2
  import { delegateEvents as _$delegateEvents } from "solid-js/web";
3
3
  import { setAttribute as _$setAttribute } from "solid-js/web";
4
- import { setProperty as _$setProperty } from "solid-js/web";
4
+ import { createComponent as _$createComponent } from "solid-js/web";
5
5
  import { className as _$className } from "solid-js/web";
6
+ import { setProperty as _$setProperty } from "solid-js/web";
6
7
  import { effect as _$effect } from "solid-js/web";
8
+ import { getNextElement as _$getNextElement } from "solid-js/web";
7
9
  import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
8
10
  import { getNextMarker as _$getNextMarker } from "solid-js/web";
9
- import { memo as _$memo } from "solid-js/web";
10
- import { createComponent as _$createComponent } from "solid-js/web";
11
- import { getNextElement as _$getNextElement } from "solid-js/web";
12
11
  import { insert as _$insert } from "solid-js/web";
13
- var _tmpl$ = /*#__PURE__*/_$template(`<h2 class=k2b-content-pdf-preview__title>`),
14
- _tmpl$2 = /*#__PURE__*/_$template(`<section><div class=k2b-content-pdf-preview__toolbar><div class=k2b-content-pdf-preview__heading></div><div class=k2b-content-pdf-preview__actions><button type=button class=k2b-button data-variant=secondary data-size=sm><i aria-hidden=true></i><!$><!/></button><button type=button class=k2b-button data-variant=secondary data-size=sm><i aria-hidden=true></i><!$><!/></button></div></div><!$><!/>`),
15
- _tmpl$3 = /*#__PURE__*/_$template(`<div class=k2b-content-pdf-preview__empty>`),
16
- _tmpl$4 = /*#__PURE__*/_$template(`<span>`),
17
- _tmpl$5 = /*#__PURE__*/_$template(`<div class=k2b-content-pdf-preview__error>`),
18
- _tmpl$6 = /*#__PURE__*/_$template(`<iframe class=k2b-content-pdf-preview__frame>`);
19
- import { createSignal, onCleanup, Show } from "solid-js";
12
+ import { memo as _$memo } from "solid-js/web";
13
+ var _tmpl$ = /*#__PURE__*/_$template(`<div class=k2b-content-pdf-preview__actions><button type=button class=k2b-button data-variant=secondary data-size=sm><i aria-hidden=true></i><!$><!/></button><button type=button class=k2b-button data-variant=secondary data-size=sm><i aria-hidden=true></i><!$><!/>`),
14
+ _tmpl$2 = /*#__PURE__*/_$template(`<div class=k2b-content-pdf-preview__empty><span>`),
15
+ _tmpl$3 = /*#__PURE__*/_$template(`<iframe class=k2b-content-pdf-preview__frame>`),
16
+ _tmpl$4 = /*#__PURE__*/_$template(`<div role=alert class=k2b-content-pdf-preview__error>`),
17
+ _tmpl$5 = /*#__PURE__*/_$template(`<h2 class=k2b-content-pdf-preview__title>`),
18
+ _tmpl$6 = /*#__PURE__*/_$template(`<section><div class=k2b-content-pdf-preview__toolbar><div class=k2b-content-pdf-preview__heading></div><!$><!/></div><!$><!/>`);
19
+ import { createSignal, onCleanup, onMount, Show } from "solid-js";
20
20
  import { resolveUiMessages, useUiMessages } from "../intl/messages";
21
21
  const readErrorMessage = async response => {
22
22
  try {
@@ -77,6 +77,9 @@ export default function PdfPreview(props) {
77
77
  if (!disposed && generation === loadGeneration) setLoading(false);
78
78
  }
79
79
  };
80
+ onMount(() => {
81
+ if (props.autoLoad) void load();
82
+ });
80
83
  const openInNewTab = async () => {
81
84
  if (loading() || opening() || props.disabled?.()) return;
82
85
  const generation = ++openGeneration;
@@ -106,99 +109,113 @@ export default function PdfPreview(props) {
106
109
  if (!disposed && generation === openGeneration) setOpening(false);
107
110
  }
108
111
  };
109
- return (() => {
110
- var _el$ = _$getNextElement(_tmpl$2),
112
+ const actions = () => (() => {
113
+ var _el$ = _$getNextElement(_tmpl$),
111
114
  _el$2 = _el$.firstChild,
112
115
  _el$3 = _el$2.firstChild,
113
- _el$5 = _el$3.nextSibling,
114
- _el$6 = _el$5.firstChild,
116
+ _el$4 = _el$3.nextSibling,
117
+ [_el$5, _co$] = _$getNextMarker(_el$4.nextSibling),
118
+ _el$6 = _el$2.nextSibling,
115
119
  _el$7 = _el$6.firstChild,
116
120
  _el$8 = _el$7.nextSibling,
117
- [_el$9, _co$] = _$getNextMarker(_el$8.nextSibling),
118
- _el$0 = _el$6.nextSibling,
119
- _el$1 = _el$0.firstChild,
120
- _el$10 = _el$1.nextSibling,
121
- [_el$11, _co$2] = _$getNextMarker(_el$10.nextSibling),
122
- _el$12 = _el$2.nextSibling,
123
- [_el$13, _co$3] = _$getNextMarker(_el$12.nextSibling);
124
- _$insert(_el$3, _$createComponent(Show, {
125
- get when() {
126
- return props.title;
127
- },
128
- get children() {
129
- var _el$4 = _$getNextElement(_tmpl$);
130
- _$insert(_el$4, () => props.title);
131
- return _el$4;
132
- }
133
- }));
134
- _el$6.$$click = () => void openInNewTab();
135
- _$insert(_el$6, () => props.openButtonLabel ?? messages().openPreview, _el$9, _co$);
136
- _el$0.$$click = () => void load();
137
- _$insert(_el$0, () => props.buttonLabel ?? messages().previewPdf, _el$11, _co$2);
138
- _$insert(_el$, _$createComponent(Show, {
139
- get when() {
140
- return url();
141
- },
142
- get fallback() {
143
- return (() => {
144
- var _el$14 = _$getNextElement(_tmpl$3);
145
- _$insert(_el$14, _$createComponent(Show, {
146
- get when() {
147
- return error();
148
- },
149
- get fallback() {
150
- return (() => {
151
- var _el$15 = _$getNextElement(_tmpl$4);
152
- _$insert(_el$15, () => props.emptyText ?? messages().renderPdfPreview);
153
- return _el$15;
154
- })();
155
- },
156
- children: message => (() => {
157
- var _el$16 = _$getNextElement(_tmpl$5);
158
- _$insert(_el$16, message);
159
- return _el$16;
160
- })()
161
- }));
162
- return _el$14;
163
- })();
164
- },
165
- children: currentUrl => (() => {
166
- var _el$17 = _$getNextElement(_tmpl$6);
167
- _$effect(_p$ => {
168
- var _v$6 = currentUrl(),
169
- _v$7 = props.title ?? messages().pdfPreview;
170
- _v$6 !== _p$.e && _$setAttribute(_el$17, "src", _p$.e = _v$6);
171
- _v$7 !== _p$.t && _$setAttribute(_el$17, "title", _p$.t = _v$7);
172
- return _p$;
173
- }, {
174
- e: undefined,
175
- t: undefined
176
- });
177
- return _el$17;
178
- })()
179
- }), _el$13, _co$3);
121
+ [_el$9, _co$2] = _$getNextMarker(_el$8.nextSibling);
122
+ _el$2.$$click = () => void openInNewTab();
123
+ _$insert(_el$2, () => props.openButtonLabel ?? messages().openPreview, _el$5, _co$);
124
+ _el$6.$$click = () => void load();
125
+ _$insert(_el$6, () => props.buttonLabel ?? messages().previewPdf, _el$9, _co$2);
180
126
  _$effect(_p$ => {
181
- var _v$ = `k2b-content-pdf-preview ${props.class ?? ""}`,
182
- _v$2 = loading() || opening() || props.disabled?.(),
183
- _v$3 = opening() ? "ti ti-loader-2 k2b-spin" : "ti ti-external-link",
184
- _v$4 = loading() || opening() || props.disabled?.(),
185
- _v$5 = loading() ? "ti ti-loader-2 k2b-spin" : "ti ti-file-type-pdf";
186
- _v$ !== _p$.e && _$className(_el$, _p$.e = _v$);
187
- _v$2 !== _p$.t && _$setProperty(_el$6, "disabled", _p$.t = _v$2);
188
- _v$3 !== _p$.a && _$className(_el$7, _p$.a = _v$3);
189
- _v$4 !== _p$.o && _$setProperty(_el$0, "disabled", _p$.o = _v$4);
190
- _v$5 !== _p$.i && _$className(_el$1, _p$.i = _v$5);
127
+ var _v$ = loading() || opening() || props.disabled?.(),
128
+ _v$2 = opening() ? "ti ti-loader-2 k2b-spin" : "ti ti-external-link",
129
+ _v$3 = loading() || opening() || props.disabled?.(),
130
+ _v$4 = loading() ? "ti ti-loader-2 k2b-spin" : "ti ti-file-type-pdf";
131
+ _v$ !== _p$.e && _$setProperty(_el$2, "disabled", _p$.e = _v$);
132
+ _v$2 !== _p$.t && _$className(_el$3, _p$.t = _v$2);
133
+ _v$3 !== _p$.a && _$setProperty(_el$6, "disabled", _p$.a = _v$3);
134
+ _v$4 !== _p$.o && _$className(_el$7, _p$.o = _v$4);
191
135
  return _p$;
192
136
  }, {
193
137
  e: undefined,
194
138
  t: undefined,
195
139
  a: undefined,
196
- o: undefined,
197
- i: undefined
140
+ o: undefined
198
141
  });
199
142
  _$runHydrationEvents();
200
143
  return _el$;
201
144
  })();
145
+ const content = () => _$createComponent(Show, {
146
+ get when() {
147
+ return error();
148
+ },
149
+ get fallback() {
150
+ return _$createComponent(Show, {
151
+ get when() {
152
+ return url();
153
+ },
154
+ get fallback() {
155
+ return (() => {
156
+ var _el$0 = _$getNextElement(_tmpl$2),
157
+ _el$1 = _el$0.firstChild;
158
+ _$insert(_el$1, (() => {
159
+ var _c$ = _$memo(() => !!loading());
160
+ return () => _c$() ? messages().loading : props.emptyText ?? messages().renderPdfPreview;
161
+ })());
162
+ _$effect(() => _$setAttribute(_el$1, "role", loading() ? "status" : undefined));
163
+ return _el$0;
164
+ })();
165
+ },
166
+ children: currentUrl => (() => {
167
+ var _el$10 = _$getNextElement(_tmpl$3);
168
+ _$effect(_p$ => {
169
+ var _v$5 = currentUrl(),
170
+ _v$6 = props.title ?? messages().pdfPreview;
171
+ _v$5 !== _p$.e && _$setAttribute(_el$10, "src", _p$.e = _v$5);
172
+ _v$6 !== _p$.t && _$setAttribute(_el$10, "title", _p$.t = _v$6);
173
+ return _p$;
174
+ }, {
175
+ e: undefined,
176
+ t: undefined
177
+ });
178
+ return _el$10;
179
+ })()
180
+ });
181
+ },
182
+ children: message => props.renderError?.(message()) ?? (() => {
183
+ var _el$11 = _$getNextElement(_tmpl$4);
184
+ _$insert(_el$11, message);
185
+ return _el$11;
186
+ })()
187
+ });
188
+ if (props.children) return props.children({
189
+ get actions() {
190
+ return actions();
191
+ },
192
+ get content() {
193
+ return content();
194
+ }
195
+ });
196
+ return (() => {
197
+ var _el$12 = _$getNextElement(_tmpl$6),
198
+ _el$13 = _el$12.firstChild,
199
+ _el$14 = _el$13.firstChild,
200
+ _el$16 = _el$14.nextSibling,
201
+ [_el$17, _co$3] = _$getNextMarker(_el$16.nextSibling),
202
+ _el$18 = _el$13.nextSibling,
203
+ [_el$19, _co$4] = _$getNextMarker(_el$18.nextSibling);
204
+ _$insert(_el$14, _$createComponent(Show, {
205
+ get when() {
206
+ return props.title;
207
+ },
208
+ get children() {
209
+ var _el$15 = _$getNextElement(_tmpl$5);
210
+ _$insert(_el$15, () => props.title);
211
+ return _el$15;
212
+ }
213
+ }));
214
+ _$insert(_el$13, actions, _el$17, _co$3);
215
+ _$insert(_el$12, content, _el$19, _co$4);
216
+ _$effect(() => _$className(_el$12, `k2b-content-pdf-preview ${props.class ?? ""}`));
217
+ return _el$12;
218
+ })();
202
219
  }
203
220
  _$delegateEvents(["click"]);
204
221
  //# sourceMappingURL=PdfPreview.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createSignal","onCleanup","Show","resolveUiMessages","useUiMessages","readErrorMessage","response","data","json","message","pdfPreviewHttpError","status","PdfPreview","props","messages","url","setUrl","loading","setLoading","opening","setOpening","error","setError","disposed","loadGeneration","openGeneration","revokeCurrent","current","URL","revokeObjectURL","readPdfBlob","request","blob","Response","ok","Error","type","load","disabled","generation","nextUrl","createObjectURL","previousUrl","e","openInNewTab","tab","window","open","opener","document","title","pdfPreview","body","textContent","close","objectUrl","location","href","setTimeout","_el$","_$getNextElement","_tmpl$2","_el$2","firstChild","_el$3","_el$5","nextSibling","_el$6","_el$7","_el$8","_el$9","_co$","_$getNextMarker","_el$0","_el$1","_el$10","_el$11","_co$2","_el$12","_el$13","_co$3","_$insert","_$createComponent","when","children","_el$4","_tmpl$","$$click","openButtonLabel","openPreview","buttonLabel","previewPdf","fallback","_el$14","_tmpl$3","_el$15","_tmpl$4","emptyText","renderPdfPreview","_el$16","_tmpl$5","currentUrl","_el$17","_tmpl$6","_$effect","_p$","_v$6","_v$7","_$setAttribute","t","undefined","_v$","class","_v$2","_v$3","_v$4","_v$5","_$className","_$setProperty","a","o","i","_$runHydrationEvents","_$delegateEvents"],"sources":["content/PdfPreview.tsx"],"sourcesContent":["import { createSignal, onCleanup, Show } from \"solid-js\";\nimport { resolveUiMessages, useUiMessages } from \"../intl/messages\";\n\nexport type PdfPreviewRequest = () => Promise<Response | Blob>;\n\nexport type PdfPreviewProps = {\n request: PdfPreviewRequest;\n disabled?: () => boolean;\n title?: string;\n buttonLabel?: string;\n openButtonLabel?: string;\n emptyText?: string;\n class?: string;\n};\n\nconst readErrorMessage = async (response: Response): Promise<string> => {\n try {\n const data = (await response.json()) as unknown;\n if (data && typeof data === \"object\" && \"message\" in data && typeof data.message === \"string\") return data.message;\n } catch {\n // Fall through to the HTTP status fallback.\n }\n return resolveUiMessages().pdfPreviewHttpError({ status: response.status });\n};\n\nexport default function PdfPreview(props: PdfPreviewProps) {\n const messages = useUiMessages();\n const [url, setUrl] = createSignal<string | null>(null);\n const [loading, setLoading] = createSignal(false);\n const [opening, setOpening] = createSignal(false);\n const [error, setError] = createSignal<string | null>(null);\n let disposed = false;\n let loadGeneration = 0;\n let openGeneration = 0;\n\n const revokeCurrent = () => {\n const current = url();\n if (current) URL.revokeObjectURL(current);\n setUrl(null);\n };\n\n onCleanup(() => {\n disposed = true;\n loadGeneration += 1;\n openGeneration += 1;\n revokeCurrent();\n });\n\n const readPdfBlob = async () => {\n const response = await props.request();\n const blob = response instanceof Response ? (response.ok ? await response.blob() : null) : response;\n if (!blob) throw new Error(await readErrorMessage(response as Response));\n if (blob.type && blob.type !== \"application/pdf\") throw new Error(`PDF preview returned ${blob.type} instead of application/pdf`);\n return blob;\n };\n\n const load = async () => {\n if (loading() || opening() || props.disabled?.()) return;\n const generation = ++loadGeneration;\n setLoading(true);\n setError(null);\n try {\n const blob = await readPdfBlob();\n const nextUrl = URL.createObjectURL(blob);\n if (disposed || generation !== loadGeneration) {\n URL.revokeObjectURL(nextUrl);\n return;\n }\n const previousUrl = url();\n setUrl(nextUrl);\n if (previousUrl) URL.revokeObjectURL(previousUrl);\n } catch (e) {\n if (!disposed && generation === loadGeneration) setError(e instanceof Error ? e.message : \"PDF preview failed\");\n } finally {\n if (!disposed && generation === loadGeneration) setLoading(false);\n }\n };\n\n const openInNewTab = async () => {\n if (loading() || opening() || props.disabled?.()) return;\n const generation = ++openGeneration;\n const tab = window.open(\"\", \"_blank\");\n if (!tab) {\n setError(\"Browser blocked the preview tab\");\n return;\n }\n tab.opener = null;\n tab.document.title = props.title ?? messages().pdfPreview;\n tab.document.body.textContent = \"Rendering PDF preview...\";\n setOpening(true);\n setError(null);\n try {\n const blob = await readPdfBlob();\n if (disposed || generation !== openGeneration) {\n tab.close();\n return;\n }\n const objectUrl = URL.createObjectURL(blob);\n tab.location.href = objectUrl;\n window.setTimeout(() => URL.revokeObjectURL(objectUrl), 60_000);\n } catch (e) {\n tab.close();\n if (!disposed && generation === openGeneration) setError(e instanceof Error ? e.message : \"PDF preview failed\");\n } finally {\n if (!disposed && generation === openGeneration) setOpening(false);\n }\n };\n\n return (\n <section class={`k2b-content-pdf-preview ${props.class ?? \"\"}`}>\n <div class=\"k2b-content-pdf-preview__toolbar\">\n <div class=\"k2b-content-pdf-preview__heading\">\n <Show when={props.title}>\n <h2 class=\"k2b-content-pdf-preview__title\">{props.title}</h2>\n </Show>\n </div>\n <div class=\"k2b-content-pdf-preview__actions\">\n <button\n type=\"button\"\n class=\"k2b-button\"\n data-variant=\"secondary\"\n data-size=\"sm\"\n onClick={() => void openInNewTab()}\n disabled={loading() || opening() || props.disabled?.()}\n >\n <i class={opening() ? \"ti ti-loader-2 k2b-spin\" : \"ti ti-external-link\"} aria-hidden=\"true\" />\n {props.openButtonLabel ?? messages().openPreview}\n </button>\n <button\n type=\"button\"\n class=\"k2b-button\"\n data-variant=\"secondary\"\n data-size=\"sm\"\n onClick={() => void load()}\n disabled={loading() || opening() || props.disabled?.()}\n >\n <i class={loading() ? \"ti ti-loader-2 k2b-spin\" : \"ti ti-file-type-pdf\"} aria-hidden=\"true\" />\n {props.buttonLabel ?? messages().previewPdf}\n </button>\n </div>\n </div>\n\n <Show\n when={url()}\n fallback={\n <div class=\"k2b-content-pdf-preview__empty\">\n <Show when={error()} fallback={<span>{props.emptyText ?? messages().renderPdfPreview}</span>}>\n {(message) => <div class=\"k2b-content-pdf-preview__error\">{message()}</div>}\n </Show>\n </div>\n }\n >\n {(currentUrl) => <iframe class=\"k2b-content-pdf-preview__frame\" src={currentUrl()} title={props.title ?? messages().pdfPreview} />}\n </Show>\n </section>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createSignal","onCleanup","onMount","Show","resolveUiMessages","useUiMessages","readErrorMessage","response","data","json","message","pdfPreviewHttpError","status","PdfPreview","props","messages","url","setUrl","loading","setLoading","opening","setOpening","error","setError","disposed","loadGeneration","openGeneration","revokeCurrent","current","URL","revokeObjectURL","readPdfBlob","request","blob","Response","ok","Error","type","load","disabled","generation","nextUrl","createObjectURL","previousUrl","e","autoLoad","openInNewTab","tab","window","open","opener","document","title","pdfPreview","body","textContent","close","objectUrl","location","href","setTimeout","actions","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_co$","_$getNextMarker","_el$6","_el$7","_el$8","_el$9","_co$2","$$click","_$insert","openButtonLabel","openPreview","buttonLabel","previewPdf","_$effect","_p$","_v$","_v$2","_v$3","_v$4","_$setProperty","t","_$className","a","o","undefined","_$runHydrationEvents","content","_$createComponent","when","fallback","_el$0","_tmpl$2","_el$1","_c$","_$memo","emptyText","renderPdfPreview","_$setAttribute","children","currentUrl","_el$10","_tmpl$3","_v$5","_v$6","renderError","_el$11","_tmpl$4","_el$12","_tmpl$6","_el$13","_el$14","_el$16","_el$17","_co$3","_el$18","_el$19","_co$4","_el$15","_tmpl$5","class","_$delegateEvents"],"sources":["content/PdfPreview.tsx"],"sourcesContent":["import { createSignal, type JSX, onCleanup, onMount, Show } from \"solid-js\";\nimport { resolveUiMessages, useUiMessages } from \"../intl/messages\";\n\nexport type PdfPreviewRequest = () => Promise<Response | Blob>;\n\nexport type PdfPreviewProps = {\n request: PdfPreviewRequest;\n autoLoad?: boolean;\n disabled?: () => boolean;\n title?: string;\n buttonLabel?: string;\n openButtonLabel?: string;\n emptyText?: string;\n class?: string;\n children?: (parts: { actions: JSX.Element; content: JSX.Element }) => JSX.Element;\n renderError?: (message: string) => JSX.Element;\n};\n\nconst readErrorMessage = async (response: Response): Promise<string> => {\n try {\n const data = (await response.json()) as unknown;\n if (data && typeof data === \"object\" && \"message\" in data && typeof data.message === \"string\") return data.message;\n } catch {\n // Fall through to the HTTP status fallback.\n }\n return resolveUiMessages().pdfPreviewHttpError({ status: response.status });\n};\n\nexport default function PdfPreview(props: PdfPreviewProps) {\n const messages = useUiMessages();\n const [url, setUrl] = createSignal<string | null>(null);\n const [loading, setLoading] = createSignal(false);\n const [opening, setOpening] = createSignal(false);\n const [error, setError] = createSignal<string | null>(null);\n let disposed = false;\n let loadGeneration = 0;\n let openGeneration = 0;\n\n const revokeCurrent = () => {\n const current = url();\n if (current) URL.revokeObjectURL(current);\n setUrl(null);\n };\n\n onCleanup(() => {\n disposed = true;\n loadGeneration += 1;\n openGeneration += 1;\n revokeCurrent();\n });\n\n const readPdfBlob = async () => {\n const response = await props.request();\n const blob = response instanceof Response ? (response.ok ? await response.blob() : null) : response;\n if (!blob) throw new Error(await readErrorMessage(response as Response));\n if (blob.type && blob.type !== \"application/pdf\") throw new Error(`PDF preview returned ${blob.type} instead of application/pdf`);\n return blob;\n };\n\n const load = async () => {\n if (loading() || opening() || props.disabled?.()) return;\n const generation = ++loadGeneration;\n setLoading(true);\n setError(null);\n try {\n const blob = await readPdfBlob();\n const nextUrl = URL.createObjectURL(blob);\n if (disposed || generation !== loadGeneration) {\n URL.revokeObjectURL(nextUrl);\n return;\n }\n const previousUrl = url();\n setUrl(nextUrl);\n if (previousUrl) URL.revokeObjectURL(previousUrl);\n } catch (e) {\n if (!disposed && generation === loadGeneration) setError(e instanceof Error ? e.message : \"PDF preview failed\");\n } finally {\n if (!disposed && generation === loadGeneration) setLoading(false);\n }\n };\n\n onMount(() => {\n if (props.autoLoad) void load();\n });\n\n const openInNewTab = async () => {\n if (loading() || opening() || props.disabled?.()) return;\n const generation = ++openGeneration;\n const tab = window.open(\"\", \"_blank\");\n if (!tab) {\n setError(\"Browser blocked the preview tab\");\n return;\n }\n tab.opener = null;\n tab.document.title = props.title ?? messages().pdfPreview;\n tab.document.body.textContent = \"Rendering PDF preview...\";\n setOpening(true);\n setError(null);\n try {\n const blob = await readPdfBlob();\n if (disposed || generation !== openGeneration) {\n tab.close();\n return;\n }\n const objectUrl = URL.createObjectURL(blob);\n tab.location.href = objectUrl;\n window.setTimeout(() => URL.revokeObjectURL(objectUrl), 60_000);\n } catch (e) {\n tab.close();\n if (!disposed && generation === openGeneration) setError(e instanceof Error ? e.message : \"PDF preview failed\");\n } finally {\n if (!disposed && generation === openGeneration) setOpening(false);\n }\n };\n\n const actions = () => (\n <div class=\"k2b-content-pdf-preview__actions\">\n <button\n type=\"button\"\n class=\"k2b-button\"\n data-variant=\"secondary\"\n data-size=\"sm\"\n onClick={() => void openInNewTab()}\n disabled={loading() || opening() || props.disabled?.()}\n >\n <i class={opening() ? \"ti ti-loader-2 k2b-spin\" : \"ti ti-external-link\"} aria-hidden=\"true\" />\n {props.openButtonLabel ?? messages().openPreview}\n </button>\n <button\n type=\"button\"\n class=\"k2b-button\"\n data-variant=\"secondary\"\n data-size=\"sm\"\n onClick={() => void load()}\n disabled={loading() || opening() || props.disabled?.()}\n >\n <i class={loading() ? \"ti ti-loader-2 k2b-spin\" : \"ti ti-file-type-pdf\"} aria-hidden=\"true\" />\n {props.buttonLabel ?? messages().previewPdf}\n </button>\n </div>\n );\n const content = () => (\n <Show\n when={error()}\n fallback={\n <Show\n when={url()}\n fallback={\n <div class=\"k2b-content-pdf-preview__empty\">\n <span role={loading() ? \"status\" : undefined}>\n {loading() ? messages().loading : (props.emptyText ?? messages().renderPdfPreview)}\n </span>\n </div>\n }\n >\n {(currentUrl) => (\n <iframe class=\"k2b-content-pdf-preview__frame\" src={currentUrl()} title={props.title ?? messages().pdfPreview} />\n )}\n </Show>\n }\n >\n {(message) =>\n props.renderError?.(message()) ?? (\n <div role=\"alert\" class=\"k2b-content-pdf-preview__error\">\n {message()}\n </div>\n )\n }\n </Show>\n );\n\n if (props.children)\n return props.children({\n get actions() {\n return actions();\n },\n get content() {\n return content();\n },\n });\n return (\n <section class={`k2b-content-pdf-preview ${props.class ?? \"\"}`}>\n <div class=\"k2b-content-pdf-preview__toolbar\">\n <div class=\"k2b-content-pdf-preview__heading\">\n <Show when={props.title}>\n <h2 class=\"k2b-content-pdf-preview__title\">{props.title}</h2>\n </Show>\n </div>\n {actions()}\n </div>\n {content()}\n </section>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,33 @@
1
+ /** Share one numeric X value between line charts. Create one instance per group. */
2
+ export function createChartCursor(options = {}) {
3
+ let state = null;
4
+ const listeners = new Set();
5
+ const notify = () => {
6
+ for (const listener of listeners) listener(state);
7
+ };
8
+ return {
9
+ formatX: options.formatX,
10
+ read: () => state,
11
+ subscribe(listener) {
12
+ listeners.add(listener);
13
+ listener(state);
14
+ return () => {
15
+ listeners.delete(listener);
16
+ };
17
+ },
18
+ move(source, x) {
19
+ if (!Number.isFinite(x) || state?.source === source && state.x === x) return;
20
+ state = {
21
+ source,
22
+ x
23
+ };
24
+ notify();
25
+ },
26
+ clear(source) {
27
+ if (state?.source !== source) return;
28
+ state = null;
29
+ notify();
30
+ }
31
+ };
32
+ }
33
+ //# sourceMappingURL=chart-cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createChartCursor","options","state","listeners","Set","notify","listener","formatX","read","subscribe","add","delete","move","source","x","Number","isFinite","clear"],"sources":["content/chart-cursor.ts"],"sourcesContent":["export type ChartCursorState = { source: symbol; x: number } | null;\n\n/** Share one numeric X value between line charts. Create one instance per group. */\nexport function createChartCursor(options: { formatX?: (x: number) => string } = {}) {\n let state: ChartCursorState = null;\n const listeners = new Set<(state: ChartCursorState) => void>();\n const notify = () => {\n for (const listener of listeners) listener(state);\n };\n return {\n formatX: options.formatX,\n read: () => state,\n subscribe(listener: (state: ChartCursorState) => void) {\n listeners.add(listener);\n listener(state);\n return () => {\n listeners.delete(listener);\n };\n },\n move(source: symbol, x: number) {\n if (!Number.isFinite(x) || (state?.source === source && state.x === x)) return;\n state = { source, x };\n notify();\n },\n clear(source: symbol) {\n if (state?.source !== source) return;\n state = null;\n notify();\n },\n };\n}\nexport type ChartCursor = ReturnType<typeof createChartCursor>;\n"],"mappings":"AAEA;AACA,OAAO,SAASA,iBAAiBA,CAACC,OAA4C,GAAG,CAAC,CAAC,EAAE;EACnF,IAAIC,KAAuB,GAAG,IAAI;EAClC,MAAMC,SAAS,GAAG,IAAIC,GAAG,CAAoC,CAAC;EAC9D,MAAMC,MAAM,GAAGA,CAAA,KAAM;IACnB,KAAK,MAAMC,QAAQ,IAAIH,SAAS,EAAEG,QAAQ,CAACJ,KAAK,CAAC;EACnD,CAAC;EACD,OAAO;IACLK,OAAO,EAAEN,OAAO,CAACM,OAAO;IACxBC,IAAI,EAAEA,CAAA,KAAMN,KAAK;IACjBO,SAASA,CAACH,QAA2C,EAAE;MACrDH,SAAS,CAACO,GAAG,CAACJ,QAAQ,CAAC;MACvBA,QAAQ,CAACJ,KAAK,CAAC;MACf,OAAO,MAAM;QACXC,SAAS,CAACQ,MAAM,CAACL,QAAQ,CAAC;MAC5B,CAAC;IACH,CAAC;IACDM,IAAIA,CAACC,MAAc,EAAEC,CAAS,EAAE;MAC9B,IAAI,CAACC,MAAM,CAACC,QAAQ,CAACF,CAAC,CAAC,IAAKZ,KAAK,EAAEW,MAAM,KAAKA,MAAM,IAAIX,KAAK,CAACY,CAAC,KAAKA,CAAE,EAAE;MACxEZ,KAAK,GAAG;QAAEW,MAAM;QAAEC;MAAE,CAAC;MACrBT,MAAM,CAAC,CAAC;IACV,CAAC;IACDY,KAAKA,CAACJ,MAAc,EAAE;MACpB,IAAIX,KAAK,EAAEW,MAAM,KAAKA,MAAM,EAAE;MAC9BX,KAAK,GAAG,IAAI;MACZG,MAAM,CAAC,CAAC;IACV;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,147 @@
1
+ import { batch, createEffect, createSignal, onCleanup, untrack } from "solid-js";
2
+
3
+ /** Omitted visibleKeys means no series filter; [] explicitly hides every series. */
4
+
5
+ export const sameExplorerRequest = (a, b) => a.step === b.step && a.referenceStep === b.referenceStep && (a.visibleKeys === undefined || b.visibleKeys === undefined ? a.visibleKeys === b.visibleKeys : a.visibleKeys.length === b.visibleKeys.length && a.visibleKeys.every(key => b.visibleKeys.includes(key)));
6
+ function validateRequest(request) {
7
+ if (request.step === "" || request.referenceStep === "" || request.referenceStep !== undefined && request.step === undefined || request.visibleKeys?.some(key => !key) || new Set(request.visibleKeys).size !== (request.visibleKeys?.length ?? 0)) {
8
+ throw new Error("Chart filters require nonempty unique keys; a reference requires a current step");
9
+ }
10
+ }
11
+ export function validateChartExplorerData(data) {
12
+ const keys = data.rows.map(row => row.key);
13
+ const rows = new Set(keys);
14
+ const marks = data.chart.marks.map(mark => mark.key);
15
+ if (keys.some(key => !key) || rows.size !== keys.length || marks.some(key => !key) || new Set(marks).size !== marks.length || data.chart.marks.some(mark => !rows.has(mark.rowKey))) {
16
+ throw new Error("Chart data requires unique row/mark keys and a row for every mark.rowKey");
17
+ }
18
+ }
19
+
20
+ /** One owner for one or many charts. Source/HTTP/aggregation remain caller-owned. */
21
+ export function createChartExplorer(options) {
22
+ if (options.request && !options.onRequestChange) throw new Error("Controlled chart filters require onRequestChange");
23
+ if (options.selectedKey && !options.onSelectedKeyChange) throw new Error("Controlled chart selection requires onSelectedKeyChange");
24
+ const initial = options.snapshot();
25
+ const ids = Object.keys(initial.charts).sort();
26
+ if (!ids.length || ids.some(id => !id)) throw new Error("An explorer needs named charts");
27
+ const validate = value => {
28
+ validateRequest(value.request);
29
+ const nextIds = Object.keys(value.charts).sort();
30
+ if (nextIds.length !== ids.length || nextIds.some((id, i) => id !== ids[i])) throw new Error("Return every configured chart");
31
+ Object.values(value.charts).forEach(validateChartExplorerData);
32
+ };
33
+ validate(initial);
34
+ const [snapshot, setSnapshot] = createSignal(initial);
35
+ const [desired, setDesired] = createSignal(options.request?.() ?? initial.request);
36
+ const [loading, setLoading] = createSignal(false);
37
+ const [error, setError] = createSignal(null);
38
+ const [localSelection, setLocalSelection] = createSignal(null);
39
+ const rawSelection = () => options.selectedKey ? options.selectedKey() : localSelection();
40
+ const hasRow = (value, key) => Object.values(value.charts).some(data => data.rows.some(row => row.key === key));
41
+ const selectedKey = () => {
42
+ const key = rawSelection();
43
+ return key !== null && hasRow(snapshot(), key) ? key : null;
44
+ };
45
+ const select = key => {
46
+ if (key !== null && !hasRow(snapshot(), key)) return;
47
+ if (!options.selectedKey) setLocalSelection(key);
48
+ options.onSelectedKeyChange?.(key);
49
+ };
50
+ let pending;
51
+ let disposed = false;
52
+ const adopt = next => {
53
+ setSnapshot(() => next);
54
+ const key = rawSelection();
55
+ if (!options.selectedKey && key !== null && !hasRow(next, key)) select(null);
56
+ };
57
+ const execute = async (next, force = false) => {
58
+ if (disposed) return;
59
+ validateRequest(next);
60
+ if (!force && pending && sameExplorerRequest(next, desired())) return;
61
+ pending?.abort();
62
+ const controller = new AbortController();
63
+ pending = controller;
64
+ batch(() => {
65
+ setDesired(next);
66
+ setError(null);
67
+ });
68
+ if (!force && sameExplorerRequest(next, snapshot().request)) {
69
+ pending = undefined;
70
+ setLoading(false);
71
+ return;
72
+ }
73
+ setLoading(true);
74
+ try {
75
+ const result = await options.load(next, controller.signal);
76
+ if (controller.signal.aborted || pending !== controller) return;
77
+ if (!sameExplorerRequest(result.request, next)) throw new Error("Chart response does not match requested filters");
78
+ validate(result);
79
+ batch(() => adopt(result));
80
+ } catch (cause) {
81
+ if (!controller.signal.aborted && pending === controller) setError(() => cause instanceof Error ? cause : new Error("Could not load chart data", {
82
+ cause
83
+ }));
84
+ } finally {
85
+ if (!controller.signal.aborted && pending === controller) {
86
+ setLoading(false);
87
+ pending = undefined;
88
+ }
89
+ }
90
+ };
91
+ createEffect(() => {
92
+ const next = options.snapshot();
93
+ untrack(() => {
94
+ validate(next);
95
+ pending?.abort();
96
+ pending = undefined;
97
+ batch(() => {
98
+ adopt(next);
99
+ setDesired(options.request?.() ?? next.request);
100
+ setLoading(false);
101
+ setError(null);
102
+ });
103
+ });
104
+ });
105
+ createEffect(() => {
106
+ options.snapshot();
107
+ const request = options.request?.();
108
+ if (request) untrack(() => {
109
+ void execute(request);
110
+ });
111
+ });
112
+ onCleanup(() => {
113
+ disposed = true;
114
+ pending?.abort();
115
+ });
116
+ const setRequest = next => {
117
+ validateRequest(next);
118
+ if (!options.request) void execute(next);
119
+ options.onRequestChange?.(next);
120
+ };
121
+ return {
122
+ snapshot,
123
+ desired,
124
+ loading,
125
+ error,
126
+ selectedKey,
127
+ select,
128
+ setRequest,
129
+ /** Force a fresh read of the desired filters, even when nothing changed. */
130
+ refresh: () => execute(options.request?.() ?? desired(), true),
131
+ retry: () => execute(options.request?.() ?? desired(), true),
132
+ pinReference() {
133
+ const step = snapshot().request.step;
134
+ if (step !== undefined) setRequest({
135
+ ...desired(),
136
+ referenceStep: step
137
+ });
138
+ },
139
+ clearReference() {
140
+ setRequest({
141
+ ...desired(),
142
+ referenceStep: undefined
143
+ });
144
+ }
145
+ };
146
+ }
147
+ //# sourceMappingURL=chart-explorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["batch","createEffect","createSignal","onCleanup","untrack","sameExplorerRequest","a","b","step","referenceStep","visibleKeys","undefined","length","every","key","includes","validateRequest","request","some","Set","size","Error","validateChartExplorerData","data","keys","rows","map","row","marks","chart","mark","has","rowKey","createChartExplorer","options","onRequestChange","selectedKey","onSelectedKeyChange","initial","snapshot","ids","Object","charts","sort","id","validate","value","nextIds","i","values","forEach","setSnapshot","desired","setDesired","loading","setLoading","error","setError","localSelection","setLocalSelection","rawSelection","hasRow","select","pending","disposed","adopt","next","execute","force","abort","controller","AbortController","result","load","signal","aborted","cause","setRequest","refresh","retry","pinReference","clearReference"],"sources":["content/chart-explorer.ts"],"sourcesContent":["import { batch, createEffect, createSignal, onCleanup, untrack, type Accessor } from \"solid-js\";\nimport type { ChartSnapshot } from \"./chart-snapshot\";\n\n/** Omitted visibleKeys means no series filter; [] explicitly hides every series. */\nexport type ChartExplorerRequest = { step?: string; visibleKeys?: readonly string[]; referenceStep?: string };\nexport type ChartExplorerRow = { key: string };\nexport type ChartExplorerData<T extends ChartExplorerRow = ChartExplorerRow> = { chart: ChartSnapshot; rows: readonly T[] };\nexport type ChartExplorerCharts = Readonly<Record<string, ChartExplorerData>>;\nexport type ChartExplorerSnapshot<C extends ChartExplorerCharts> = { request: ChartExplorerRequest; charts: C };\nexport type ChartExplorerOptions<C extends ChartExplorerCharts> = {\n /** Authoritative initial/replacement data. Replacements cancel pending work. */\n snapshot: Accessor<ChartExplorerSnapshot<C>>;\n load: (\n request: ChartExplorerRequest,\n signal: AbortSignal,\n ) => ChartExplorerSnapshot<NoInfer<C>> | Promise<ChartExplorerSnapshot<NoInfer<C>>>;\n /** Optional controlled filters. Changes trigger loading; setRequest emits onRequestChange. */\n request?: Accessor<ChartExplorerRequest>;\n onRequestChange?: (request: ChartExplorerRequest) => void;\n selectedKey?: Accessor<string | null>;\n onSelectedKeyChange?: (key: string | null) => void;\n};\nexport type ChartExplorerController<C extends ChartExplorerCharts> = ReturnType<typeof createChartExplorer<C>>;\n\nexport const sameExplorerRequest = (a: ChartExplorerRequest, b: ChartExplorerRequest) =>\n a.step === b.step &&\n a.referenceStep === b.referenceStep &&\n (a.visibleKeys === undefined || b.visibleKeys === undefined\n ? a.visibleKeys === b.visibleKeys\n : a.visibleKeys.length === b.visibleKeys.length && a.visibleKeys.every((key) => b.visibleKeys!.includes(key)));\n\nfunction validateRequest(request: ChartExplorerRequest) {\n if (\n request.step === \"\" ||\n request.referenceStep === \"\" ||\n (request.referenceStep !== undefined && request.step === undefined) ||\n request.visibleKeys?.some((key) => !key) ||\n new Set(request.visibleKeys).size !== (request.visibleKeys?.length ?? 0)\n ) {\n throw new Error(\"Chart filters require nonempty unique keys; a reference requires a current step\");\n }\n}\n\nexport function validateChartExplorerData(data: ChartExplorerData) {\n const keys = data.rows.map((row) => row.key);\n const rows = new Set(keys);\n const marks = data.chart.marks.map((mark) => mark.key);\n if (\n keys.some((key) => !key) ||\n rows.size !== keys.length ||\n marks.some((key) => !key) ||\n new Set(marks).size !== marks.length ||\n data.chart.marks.some((mark) => !rows.has(mark.rowKey))\n ) {\n throw new Error(\"Chart data requires unique row/mark keys and a row for every mark.rowKey\");\n }\n}\n\n/** One owner for one or many charts. Source/HTTP/aggregation remain caller-owned. */\nexport function createChartExplorer<C extends ChartExplorerCharts>(options: ChartExplorerOptions<C>) {\n if (options.request && !options.onRequestChange) throw new Error(\"Controlled chart filters require onRequestChange\");\n if (options.selectedKey && !options.onSelectedKeyChange) throw new Error(\"Controlled chart selection requires onSelectedKeyChange\");\n const initial = options.snapshot();\n const ids = Object.keys(initial.charts).sort();\n if (!ids.length || ids.some((id) => !id)) throw new Error(\"An explorer needs named charts\");\n const validate = (value: ChartExplorerSnapshot<C>) => {\n validateRequest(value.request);\n const nextIds = Object.keys(value.charts).sort();\n if (nextIds.length !== ids.length || nextIds.some((id, i) => id !== ids[i])) throw new Error(\"Return every configured chart\");\n Object.values(value.charts).forEach(validateChartExplorerData);\n };\n validate(initial);\n const [snapshot, setSnapshot] = createSignal(initial);\n const [desired, setDesired] = createSignal(options.request?.() ?? initial.request);\n const [loading, setLoading] = createSignal(false);\n const [error, setError] = createSignal<Error | null>(null);\n const [localSelection, setLocalSelection] = createSignal<string | null>(null);\n const rawSelection = () => (options.selectedKey ? options.selectedKey() : localSelection());\n const hasRow = (value: ChartExplorerSnapshot<C>, key: string) =>\n Object.values(value.charts).some((data) => data.rows.some((row) => row.key === key));\n const selectedKey = () => {\n const key = rawSelection();\n return key !== null && hasRow(snapshot(), key) ? key : null;\n };\n const select = (key: string | null) => {\n if (key !== null && !hasRow(snapshot(), key)) return;\n if (!options.selectedKey) setLocalSelection(key);\n options.onSelectedKeyChange?.(key);\n };\n let pending: AbortController | undefined;\n let disposed = false;\n const adopt = (next: ChartExplorerSnapshot<C>) => {\n setSnapshot(() => next);\n const key = rawSelection();\n if (!options.selectedKey && key !== null && !hasRow(next, key)) select(null);\n };\n const execute = async (next: ChartExplorerRequest, force = false) => {\n if (disposed) return;\n validateRequest(next);\n if (!force && pending && sameExplorerRequest(next, desired())) return;\n pending?.abort();\n const controller = new AbortController();\n pending = controller;\n batch(() => {\n setDesired(next);\n setError(null);\n });\n if (!force && sameExplorerRequest(next, snapshot().request)) {\n pending = undefined;\n setLoading(false);\n return;\n }\n setLoading(true);\n try {\n const result = await options.load(next, controller.signal);\n if (controller.signal.aborted || pending !== controller) return;\n if (!sameExplorerRequest(result.request, next)) throw new Error(\"Chart response does not match requested filters\");\n validate(result);\n batch(() => adopt(result));\n } catch (cause) {\n if (!controller.signal.aborted && pending === controller)\n setError(() => (cause instanceof Error ? cause : new Error(\"Could not load chart data\", { cause })));\n } finally {\n if (!controller.signal.aborted && pending === controller) {\n setLoading(false);\n pending = undefined;\n }\n }\n };\n createEffect(() => {\n const next = options.snapshot();\n untrack(() => {\n validate(next);\n pending?.abort();\n pending = undefined;\n batch(() => {\n adopt(next);\n setDesired(options.request?.() ?? next.request);\n setLoading(false);\n setError(null);\n });\n });\n });\n createEffect(() => {\n options.snapshot();\n const request = options.request?.();\n if (request)\n untrack(() => {\n void execute(request);\n });\n });\n onCleanup(() => {\n disposed = true;\n pending?.abort();\n });\n const setRequest = (next: ChartExplorerRequest) => {\n validateRequest(next);\n if (!options.request) void execute(next);\n options.onRequestChange?.(next);\n };\n return {\n snapshot,\n desired,\n loading,\n error,\n selectedKey,\n select,\n setRequest,\n /** Force a fresh read of the desired filters, even when nothing changed. */\n refresh: () => execute(options.request?.() ?? desired(), true),\n retry: () => execute(options.request?.() ?? desired(), true),\n pinReference() {\n const step = snapshot().request.step;\n if (step !== undefined) setRequest({ ...desired(), referenceStep: step });\n },\n clearReference() {\n setRequest({ ...desired(), referenceStep: undefined });\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}