@k2b/ui 0.1.1 → 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 (386) 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 +10 -4
  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 +143 -77
  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 +34 -15
  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 +20 -3
  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/Tooltip.js +6 -2
  86. package/dist/browser/feedback/Tooltip.js.map +1 -1
  87. package/dist/browser/feedback/dialog-core.js +102 -9
  88. package/dist/browser/feedback/dialog-core.js.map +1 -1
  89. package/dist/browser/feedback/prompts.js +6 -0
  90. package/dist/browser/feedback/prompts.js.map +1 -1
  91. package/dist/browser/feedback/toast.js +29 -6
  92. package/dist/browser/feedback/toast.js.map +1 -1
  93. package/dist/browser/feedback/tooltip-position.js +15 -0
  94. package/dist/browser/feedback/tooltip-position.js.map +1 -1
  95. package/dist/browser/inputs/ChoiceInputs.js +47 -38
  96. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  97. package/dist/browser/inputs/SelectChip.js +3 -2
  98. package/dist/browser/inputs/SelectChip.js.map +1 -1
  99. package/dist/browser/inputs/TextInput.js +7 -1
  100. package/dist/browser/inputs/TextInput.js.map +1 -1
  101. package/dist/browser/inputs/markdown/MarkdownEditor.js +61 -37
  102. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  103. package/dist/browser/internal/portal.js +1 -1
  104. package/dist/browser/internal/portal.js.map +1 -1
  105. package/dist/browser/intl/Format.js +89 -16
  106. package/dist/browser/intl/Format.js.map +1 -1
  107. package/dist/browser/intl/index.js.map +1 -1
  108. package/dist/browser/intl/messages.js +130 -2
  109. package/dist/browser/intl/messages.js.map +1 -1
  110. package/dist/browser/layout/AppWorkspace.js +712 -624
  111. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  112. package/dist/browser/layout/BottomSheet.js +95 -0
  113. package/dist/browser/layout/BottomSheet.js.map +1 -0
  114. package/dist/browser/layout/DetailPanel.js +232 -107
  115. package/dist/browser/layout/DetailPanel.js.map +1 -1
  116. package/dist/browser/layout/Navigation.js +278 -0
  117. package/dist/browser/layout/Navigation.js.map +1 -0
  118. package/dist/browser/layout/PanelDialog.js +229 -72
  119. package/dist/browser/layout/PanelDialog.js.map +1 -1
  120. package/dist/browser/layout/ScrollArea.js +21 -1
  121. package/dist/browser/layout/ScrollArea.js.map +1 -1
  122. package/dist/browser/layout/Settings.js.map +1 -1
  123. package/dist/browser/layout/SidebarItemPreview.js +183 -0
  124. package/dist/browser/layout/SidebarItemPreview.js.map +1 -0
  125. package/dist/browser/layout/app-workspace-controller.js +3 -0
  126. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  127. package/dist/browser/layout/index.js +3 -0
  128. package/dist/browser/layout/index.js.map +1 -1
  129. package/dist/browser/layout/navigation-model.js +23 -0
  130. package/dist/browser/layout/navigation-model.js.map +1 -0
  131. package/dist/browser/layout/scroll-fade.js +100 -0
  132. package/dist/browser/layout/scroll-fade.js.map +1 -0
  133. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  134. package/dist/browser/surfaces/StatusBadge.js +2 -1
  135. package/dist/browser/surfaces/StatusBadge.js.map +1 -1
  136. package/dist/fonts/ibm-plex-mono-cyrillic-400-italic-4aded3f2f2a7d27d.woff2 +0 -0
  137. package/dist/fonts/ibm-plex-mono-cyrillic-400-normal-7635422bd10ddbbc.woff2 +0 -0
  138. package/dist/fonts/ibm-plex-mono-cyrillic-500-normal-1d89462e86cb8e87.woff2 +0 -0
  139. package/dist/fonts/ibm-plex-mono-cyrillic-600-normal-2b05a8695c7f9f4a.woff2 +0 -0
  140. package/dist/fonts/ibm-plex-mono-cyrillic-ext-400-italic-a0b3b8cbe5a516e7.woff2 +0 -0
  141. package/dist/fonts/ibm-plex-mono-cyrillic-ext-400-normal-f8c22ec1804bd696.woff2 +0 -0
  142. package/dist/fonts/ibm-plex-mono-cyrillic-ext-500-normal-3febe5c7f22e4b07.woff2 +0 -0
  143. package/dist/fonts/ibm-plex-mono-cyrillic-ext-600-normal-83109cdd4f8665b4.woff2 +0 -0
  144. package/dist/fonts/ibm-plex-mono-latin-400-italic-0840095faae86403.woff2 +0 -0
  145. package/dist/fonts/ibm-plex-mono-latin-400-normal-08949f728dc52d52.woff2 +0 -0
  146. package/dist/fonts/ibm-plex-mono-latin-500-normal-01d285447409c8a5.woff2 +0 -0
  147. package/dist/fonts/ibm-plex-mono-latin-600-normal-0d1f0b8d0722224e.woff2 +0 -0
  148. package/dist/fonts/ibm-plex-mono-latin-ext-400-italic-1b07eee6df7d26b3.woff2 +0 -0
  149. package/dist/fonts/ibm-plex-mono-latin-ext-400-normal-6bc0f226a5b7884a.woff2 +0 -0
  150. package/dist/fonts/ibm-plex-mono-latin-ext-500-normal-6bb06407c97584b0.woff2 +0 -0
  151. package/dist/fonts/ibm-plex-mono-latin-ext-600-normal-32057cf50dd14bdb.woff2 +0 -0
  152. package/dist/fonts/ibm-plex-mono-vietnamese-400-italic-a6bab38af4f9c761.woff2 +0 -0
  153. package/dist/fonts/ibm-plex-mono-vietnamese-400-normal-62632b6375305e70.woff2 +0 -0
  154. package/dist/fonts/ibm-plex-mono-vietnamese-500-normal-781633d95de88040.woff2 +0 -0
  155. package/dist/fonts/ibm-plex-mono-vietnamese-600-normal-51b74d53e106ba8a.woff2 +0 -0
  156. package/dist/fonts/ibm-plex-sans-cyrillic-400-italic-e8731a7e2b00fc4f.woff2 +0 -0
  157. package/dist/fonts/ibm-plex-sans-cyrillic-400-normal-69afad88a0740b6e.woff2 +0 -0
  158. package/dist/fonts/ibm-plex-sans-cyrillic-500-normal-200be3a2a6b1789f.woff2 +0 -0
  159. package/dist/fonts/ibm-plex-sans-cyrillic-600-normal-730becc6f005c18c.woff2 +0 -0
  160. package/dist/fonts/ibm-plex-sans-cyrillic-700-normal-40540598b4c9eb2c.woff2 +0 -0
  161. package/dist/fonts/ibm-plex-sans-cyrillic-ext-400-italic-4ffb25726a7ce4cc.woff2 +0 -0
  162. package/dist/fonts/ibm-plex-sans-cyrillic-ext-400-normal-e2580ad78906551e.woff2 +0 -0
  163. package/dist/fonts/ibm-plex-sans-cyrillic-ext-500-normal-08578d906af6d986.woff2 +0 -0
  164. package/dist/fonts/ibm-plex-sans-cyrillic-ext-600-normal-d60d3d0b182753d5.woff2 +0 -0
  165. package/dist/fonts/ibm-plex-sans-cyrillic-ext-700-normal-d07dd53642480097.woff2 +0 -0
  166. package/dist/fonts/ibm-plex-sans-greek-400-italic-1bc10b01688ba9fa.woff2 +0 -0
  167. package/dist/fonts/ibm-plex-sans-greek-400-normal-02296067bc904d2a.woff2 +0 -0
  168. package/dist/fonts/ibm-plex-sans-greek-500-normal-8cb6e20b4dbbaa5f.woff2 +0 -0
  169. package/dist/fonts/ibm-plex-sans-greek-600-normal-0a9ebd9019415ee9.woff2 +0 -0
  170. package/dist/fonts/ibm-plex-sans-greek-700-normal-c949641d10a3bebc.woff2 +0 -0
  171. package/dist/fonts/ibm-plex-sans-latin-400-italic-6de912e531b6c980.woff2 +0 -0
  172. package/dist/fonts/ibm-plex-sans-latin-400-normal-3b646991d30055a9.woff2 +0 -0
  173. package/dist/fonts/ibm-plex-sans-latin-500-normal-0717336fb31fcdcd.woff2 +0 -0
  174. package/dist/fonts/ibm-plex-sans-latin-600-normal-8960851d691c054e.woff2 +0 -0
  175. package/dist/fonts/ibm-plex-sans-latin-700-normal-42e7b0c143c19df9.woff2 +0 -0
  176. package/dist/fonts/ibm-plex-sans-latin-ext-400-italic-c5c00e8a32022dfe.woff2 +0 -0
  177. package/dist/fonts/ibm-plex-sans-latin-ext-400-normal-c93d2a12aaa280f6.woff2 +0 -0
  178. package/dist/fonts/ibm-plex-sans-latin-ext-500-normal-2846035d85100f84.woff2 +0 -0
  179. package/dist/fonts/ibm-plex-sans-latin-ext-600-normal-b25dfd4f979e442a.woff2 +0 -0
  180. package/dist/fonts/ibm-plex-sans-latin-ext-700-normal-92f0392bd74fa395.woff2 +0 -0
  181. package/dist/fonts/ibm-plex-sans-vietnamese-400-italic-675d4bace127bffb.woff2 +0 -0
  182. package/dist/fonts/ibm-plex-sans-vietnamese-400-normal-771538f7f26551bd.woff2 +0 -0
  183. package/dist/fonts/ibm-plex-sans-vietnamese-500-normal-85ba3d9c2488a813.woff2 +0 -0
  184. package/dist/fonts/ibm-plex-sans-vietnamese-600-normal-5d34b803637befe3.woff2 +0 -0
  185. package/dist/fonts/ibm-plex-sans-vietnamese-700-normal-b79d0c4b68b85007.woff2 +0 -0
  186. package/dist/plex.css +1 -1
  187. package/dist/ssr/actions/Button.js +11 -2
  188. package/dist/ssr/actions/Button.js.map +1 -1
  189. package/dist/ssr/actions/Disclosure.js +2 -2
  190. package/dist/ssr/actions/Disclosure.js.map +1 -1
  191. package/dist/ssr/actions/Dropdown.js +5 -2
  192. package/dist/ssr/actions/Dropdown.js.map +1 -1
  193. package/dist/ssr/actions/FilterChip.js +16 -2
  194. package/dist/ssr/actions/FilterChip.js.map +1 -1
  195. package/dist/ssr/actions/SplitButton.js +69 -22
  196. package/dist/ssr/actions/SplitButton.js.map +1 -1
  197. package/dist/ssr/actions/SpotlightSearch.js +3 -7
  198. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  199. package/dist/ssr/actions/Tabs.js +58 -11
  200. package/dist/ssr/actions/Tabs.js.map +1 -1
  201. package/dist/ssr/actions/index.js +1 -1
  202. package/dist/ssr/actions/index.js.map +1 -1
  203. package/dist/ssr/chat/ChatComposer.js +366 -134
  204. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  205. package/dist/ssr/chat/ChatContextPopup.js +86 -0
  206. package/dist/ssr/chat/ChatContextPopup.js.map +1 -0
  207. package/dist/ssr/chat/ChatPrimitives.js +50 -12
  208. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  209. package/dist/ssr/chat/ChatTasks.js +48 -0
  210. package/dist/ssr/chat/ChatTasks.js.map +1 -0
  211. package/dist/ssr/chat/ChatTimeline.js +16 -4
  212. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  213. package/dist/ssr/chat/chat-behavior.js +0 -5
  214. package/dist/ssr/chat/chat-behavior.js.map +1 -1
  215. package/dist/ssr/chat/composer-document.js +55 -0
  216. package/dist/ssr/chat/composer-document.js.map +1 -0
  217. package/dist/ssr/chat/index.js +6 -1
  218. package/dist/ssr/chat/index.js.map +1 -1
  219. package/dist/ssr/chat/types.js.map +1 -1
  220. package/dist/ssr/content/Chart.js +121 -219
  221. package/dist/ssr/content/Chart.js.map +1 -1
  222. package/dist/ssr/content/ChartExplorer.js +257 -0
  223. package/dist/ssr/content/ChartExplorer.js.map +1 -0
  224. package/dist/ssr/content/ChartExplorerControls.js +105 -0
  225. package/dist/ssr/content/ChartExplorerControls.js.map +1 -0
  226. package/dist/ssr/content/ChartFilterControls.js +139 -0
  227. package/dist/ssr/content/ChartFilterControls.js.map +1 -0
  228. package/dist/ssr/content/ChartSnapshotView.js +57 -0
  229. package/dist/ssr/content/ChartSnapshotView.js.map +1 -0
  230. package/dist/ssr/content/DataTable.js +13 -9
  231. package/dist/ssr/content/DataTable.js.map +1 -1
  232. package/dist/ssr/content/FileBrowser.js +3 -0
  233. package/dist/ssr/content/FileBrowser.js.map +1 -1
  234. package/dist/ssr/content/FileGrid.js +38 -0
  235. package/dist/ssr/content/FileGrid.js.map +1 -0
  236. package/dist/ssr/content/FileTree.js +2 -2
  237. package/dist/ssr/content/FileTree.js.map +1 -1
  238. package/dist/ssr/content/FileView.js +352 -75
  239. package/dist/ssr/content/FileView.js.map +1 -1
  240. package/dist/ssr/content/MarkdownView.js +20 -3
  241. package/dist/ssr/content/MarkdownView.js.map +1 -1
  242. package/dist/ssr/content/PdfPreview.js +37 -24
  243. package/dist/ssr/content/PdfPreview.js.map +1 -1
  244. package/dist/ssr/content/chart-cursor.js +33 -0
  245. package/dist/ssr/content/chart-cursor.js.map +1 -0
  246. package/dist/ssr/content/chart-explorer.js +147 -0
  247. package/dist/ssr/content/chart-explorer.js.map +1 -0
  248. package/dist/ssr/content/chart-inspection.js +447 -0
  249. package/dist/ssr/content/chart-inspection.js.map +1 -0
  250. package/dist/ssr/content/chart-line-gaps.js +53 -0
  251. package/dist/ssr/content/chart-line-gaps.js.map +1 -0
  252. package/dist/ssr/content/chart-map-viewport.js +5 -1
  253. package/dist/ssr/content/chart-map-viewport.js.map +1 -1
  254. package/dist/ssr/content/chart-snapshot.js +63 -0
  255. package/dist/ssr/content/chart-snapshot.js.map +1 -0
  256. package/dist/ssr/content/chart-state-timeline.js +32 -4
  257. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  258. package/dist/ssr/content/chart-svg.js +54 -0
  259. package/dist/ssr/content/chart-svg.js.map +1 -0
  260. package/dist/ssr/content/collection-selection.js +109 -0
  261. package/dist/ssr/content/collection-selection.js.map +1 -0
  262. package/dist/ssr/content/delimited-preferences.js +21 -0
  263. package/dist/ssr/content/delimited-preferences.js.map +1 -0
  264. package/dist/ssr/content/file-tree.js.map +1 -1
  265. package/dist/ssr/content/file-view-preview.js +11 -7
  266. package/dist/ssr/content/file-view-preview.js.map +1 -1
  267. package/dist/ssr/content/index.js +9 -0
  268. package/dist/ssr/content/index.js.map +1 -1
  269. package/dist/ssr/feedback/InlineGuidance.js +17 -3
  270. package/dist/ssr/feedback/InlineGuidance.js.map +1 -1
  271. package/dist/ssr/feedback/Tooltip.js +6 -4
  272. package/dist/ssr/feedback/Tooltip.js.map +1 -1
  273. package/dist/ssr/feedback/dialog-core.js +102 -9
  274. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  275. package/dist/ssr/feedback/prompts.js +6 -0
  276. package/dist/ssr/feedback/prompts.js.map +1 -1
  277. package/dist/ssr/feedback/toast.js +29 -6
  278. package/dist/ssr/feedback/toast.js.map +1 -1
  279. package/dist/ssr/feedback/tooltip-position.js +15 -0
  280. package/dist/ssr/feedback/tooltip-position.js.map +1 -1
  281. package/dist/ssr/inputs/ChoiceInputs.js +9 -6
  282. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  283. package/dist/ssr/inputs/SelectChip.js +3 -3
  284. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  285. package/dist/ssr/inputs/TextInput.js.map +1 -1
  286. package/dist/ssr/inputs/markdown/MarkdownEditor.js +19 -11
  287. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  288. package/dist/ssr/internal/portal.js +1 -1
  289. package/dist/ssr/internal/portal.js.map +1 -1
  290. package/dist/ssr/intl/Format.js +61 -0
  291. package/dist/ssr/intl/Format.js.map +1 -1
  292. package/dist/ssr/intl/index.js.map +1 -1
  293. package/dist/ssr/intl/messages.js +130 -2
  294. package/dist/ssr/intl/messages.js.map +1 -1
  295. package/dist/ssr/layout/AppWorkspace.js +368 -275
  296. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  297. package/dist/ssr/layout/BottomSheet.js +43 -0
  298. package/dist/ssr/layout/BottomSheet.js.map +1 -0
  299. package/dist/ssr/layout/DetailPanel.js +95 -17
  300. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  301. package/dist/ssr/layout/Navigation.js +181 -0
  302. package/dist/ssr/layout/Navigation.js.map +1 -0
  303. package/dist/ssr/layout/PanelDialog.js +112 -27
  304. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  305. package/dist/ssr/layout/ScrollArea.js +16 -1
  306. package/dist/ssr/layout/ScrollArea.js.map +1 -1
  307. package/dist/ssr/layout/Settings.js.map +1 -1
  308. package/dist/ssr/layout/SidebarItemPreview.js +133 -0
  309. package/dist/ssr/layout/SidebarItemPreview.js.map +1 -0
  310. package/dist/ssr/layout/app-workspace-controller.js +3 -0
  311. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  312. package/dist/ssr/layout/index.js +3 -0
  313. package/dist/ssr/layout/index.js.map +1 -1
  314. package/dist/ssr/layout/navigation-model.js +23 -0
  315. package/dist/ssr/layout/navigation-model.js.map +1 -0
  316. package/dist/ssr/layout/scroll-fade.js +100 -0
  317. package/dist/ssr/layout/scroll-fade.js.map +1 -0
  318. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  319. package/dist/ssr/surfaces/StatusBadge.js +2 -1
  320. package/dist/ssr/surfaces/StatusBadge.js.map +1 -1
  321. package/dist/styles.css +1 -1
  322. package/dist/tabler.css +1 -1
  323. package/dist/types/actions/Button.d.ts +4 -0
  324. package/dist/types/actions/Disclosure.d.ts +1 -0
  325. package/dist/types/actions/Dropdown.d.ts +3 -1
  326. package/dist/types/actions/FilterChip.d.ts +4 -0
  327. package/dist/types/actions/SplitButton.d.ts +6 -0
  328. package/dist/types/actions/SpotlightSearch.d.ts +0 -4
  329. package/dist/types/actions/Tabs.d.ts +4 -0
  330. package/dist/types/actions/index.d.ts +1 -1
  331. package/dist/types/chat/ChatComposer.d.ts +20 -2
  332. package/dist/types/chat/ChatContextPopup.d.ts +6 -0
  333. package/dist/types/chat/ChatPrimitives.d.ts +4 -0
  334. package/dist/types/chat/ChatTasks.d.ts +15 -0
  335. package/dist/types/chat/ChatTimeline.d.ts +2 -0
  336. package/dist/types/chat/chat-behavior.d.ts +0 -3
  337. package/dist/types/chat/composer-document.d.ts +14 -0
  338. package/dist/types/chat/index.d.ts +8 -1
  339. package/dist/types/chat/types.d.ts +9 -0
  340. package/dist/types/content/Chart.d.ts +42 -23
  341. package/dist/types/content/ChartExplorer.d.ts +34 -0
  342. package/dist/types/content/ChartExplorerControls.d.ts +10 -0
  343. package/dist/types/content/ChartFilterControls.d.ts +21 -0
  344. package/dist/types/content/ChartSnapshotView.d.ts +11 -0
  345. package/dist/types/content/DataTable.d.ts +4 -0
  346. package/dist/types/content/FileBrowser.d.ts +1 -0
  347. package/dist/types/content/FileGrid.d.ts +21 -0
  348. package/dist/types/content/FileView.d.ts +20 -0
  349. package/dist/types/content/MarkdownView.d.ts +6 -1
  350. package/dist/types/content/PdfPreview.d.ts +8 -1
  351. package/dist/types/content/chart-cursor.d.ts +15 -0
  352. package/dist/types/content/chart-explorer.d.ts +48 -0
  353. package/dist/types/content/chart-inspection.d.ts +40 -0
  354. package/dist/types/content/chart-line-gaps.d.ts +5 -0
  355. package/dist/types/content/chart-map-viewport.d.ts +1 -1
  356. package/dist/types/content/chart-snapshot.d.ts +26 -0
  357. package/dist/types/content/chart-svg.d.ts +21 -0
  358. package/dist/types/content/collection-selection.d.ts +24 -0
  359. package/dist/types/content/delimited-preferences.d.ts +11 -0
  360. package/dist/types/content/file-tree.d.ts +2 -0
  361. package/dist/types/content/file-view-preview.d.ts +4 -1
  362. package/dist/types/content/index.d.ts +15 -1
  363. package/dist/types/feedback/InlineGuidance.d.ts +1 -0
  364. package/dist/types/feedback/dialog-core.d.ts +13 -0
  365. package/dist/types/feedback/prompts.d.ts +2 -0
  366. package/dist/types/feedback/toast.d.ts +7 -1
  367. package/dist/types/feedback/tooltip-position.d.ts +1 -1
  368. package/dist/types/inputs/ChoiceInputs.d.ts +3 -0
  369. package/dist/types/inputs/markdown/MarkdownEditor.d.ts +5 -1
  370. package/dist/types/intl/Format.d.ts +9 -0
  371. package/dist/types/intl/index.d.ts +1 -1
  372. package/dist/types/intl/messages.d.ts +31 -1
  373. package/dist/types/layout/AppWorkspace.d.ts +35 -18
  374. package/dist/types/layout/BottomSheet.d.ts +23 -0
  375. package/dist/types/layout/DetailPanel.d.ts +7 -0
  376. package/dist/types/layout/Navigation.d.ts +8 -0
  377. package/dist/types/layout/PanelDialog.d.ts +14 -1
  378. package/dist/types/layout/ScrollArea.d.ts +4 -0
  379. package/dist/types/layout/Settings.d.ts +1 -1
  380. package/dist/types/layout/SidebarItemPreview.d.ts +11 -0
  381. package/dist/types/layout/index.d.ts +4 -1
  382. package/dist/types/layout/navigation-model.d.ts +48 -0
  383. package/dist/types/layout/scroll-fade.d.ts +3 -0
  384. package/dist/types/surfaces/DescriptionList.d.ts +1 -1
  385. package/dist/types/surfaces/StatusBadge.d.ts +1 -1
  386. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"names":["charts","createEffect","createMemo","createSignal","createUniqueId","onCleanup","onMount","Show","positionTooltipSurface","useUiMessages","DEFAULT_MAP_VIEWPORT","normalizeMapViewport","panMapViewport","zoomMapViewport","panStateTimelineViewport","renderStateTimelineSvg","stateTimelineDomain","stateTimelineHeight","zoomStateTimelineViewport","renderSvg","props","width","height","mapViewport","timelineViewport","kind","class","_class","style","_style","labels","_labels","interactive","_interactive","opts","viewport","isEmpty","series","length","every","s","data","groups","rows","row","intervals","Chart","messages","containerRef","chartTooltipRef","lineAnchorRef","chartTooltipTriggerRef","initialHeight","legend","size","setSize","initialMapViewport","setMapViewport","initialTimelineViewport","domain","setTimelineViewport","linePointIndex","setLinePointIndex","lineInspectionActive","setLineInspectionActive","dragging","setDragging","chartTooltipId","timelineViewportLocallyChanged","drag","timelineDrag","pointerFrame","pendingPointer","interactiveMap","interactiveTimeline","interactiveLine","draggable","timelineFullDomain","updateTimelineViewport","update","mapDimensions","viewportElement","querySelector","rect","getBoundingClientRect","zoom","delta","current","reset","handlePointerDown","event","button","target","closest","closeChartTooltip","pointerId","x","clientX","Math","max","currentTarget","setPointerCapture","dimensions","y","clientY","flushPointerMove","undefined","cancelAnimationFrame","sample","showLineTooltip","activeTimelineDrag","handlePointerMove","requestAnimationFrame","stopDragging","hasPointerCapture","releasePointerCapture","handleWheel","ctrlKey","metaKey","preventDefault","deltaY","anchor","left","shiftKey","handleKeyDown","values","lineXValues","key","next","min","showLinePoint","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","removeAttribute","matches","hidePopover","showTimelineTooltip","trigger","content","dataset","chartTooltip","setAttribute","textContent","showPopover","lineInspection","Set","map","entry","points","Map","point","Number","isFinite","add","has","set","label","sort","right","linePlotBounds","padding","rightInset","yAxis","index","pointerY","inspection","pointIndex","get","filter","xFormat","xAxis","format","String","yFormat","join","at","bounds","ratio","top","localX","low","high","middle","floor","previous","abs","round","ro","ResizeObserver","entries","contentRect","prev","w","h","observe","window","addEventListener","disconnect","removeEventListener","chartStyle","_$createComponent","when","fallback","_$ssr","_tmpl$5","_$escape","_$ssrStyle","empty","noData","children","_tmpl$4","_$ssrAttribute","interactiveLineChart","_tmpl$","_tmpl$2","_tmpl$3","zoomIn","zoomOut","resetMap","resetMapView","resetTimeline","resetTimelineView"],"sources":["content/Chart.tsx"],"sourcesContent":["import type { MapViewport } from \"@k2b/stdlib\";\nimport { charts } from \"@k2b/stdlib\";\nimport type { JSX } from \"solid-js\";\nimport { createEffect, createMemo, createSignal, createUniqueId, onCleanup, onMount, Show } from \"solid-js\";\nimport { positionTooltipSurface } from \"../feedback/tooltip-position\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { DEFAULT_MAP_VIEWPORT, normalizeMapViewport, panMapViewport, zoomMapViewport } from \"./chart-map-viewport\";\nimport {\n panStateTimelineViewport,\n renderStateTimelineSvg,\n type StateTimelineChartOptions,\n type StateTimelineDomain,\n stateTimelineDomain,\n stateTimelineHeight,\n zoomStateTimelineViewport,\n} from \"./chart-state-timeline\";\n\n/**\n * Chart — minimal Solid wrapper around `stdlib.charts`.\n *\n * **Live-update story.** `charts.<kind>(opts)` returns an SVG string;\n * Solid's `innerHTML` is reactive, so any time a prop (signal, store\n * slice, derived value) changes, the SVG re-renders. No manual\n * subscription, no imperative DOM patching. Trade-off: every change\n * is a full SVG re-build, not a diff — fine for dashboard cadences\n * (poll, websocket, store updates). Don't use this for 60fps streaming.\n *\n * **Sizing.** stdlib emits `<svg viewBox=\"0 0 W H\">` with no width/\n * height attributes, so the SVG would otherwise fall back to the\n * browser's replaced-element default (300×150) and either overflow\n * or look squished. We measure the wrapping `<div>` with a\n * ResizeObserver and pass the actual pixel dimensions to stdlib —\n * the viewBox matches the container, no aspect distortion, no\n * letterboxing. Sizing the wrapper itself is the caller's job\n * (`style={{ height: \"14rem\" }}`, an app class, a flex child, …).\n * On SSR (no observer)\n * the chart renders at stdlib's default size; the first client-side\n * frame re-measures and re-renders.\n *\n * One documented exception: `kind: \"stateTimeline\"` derives its own\n * initial height from the row count and legend via\n * `stateTimelineHeight()`, because a timeline's height is a function of\n * how many rows it has rather than of the layout around it. Every other\n * kind starts at 280px until the observer reports the real box. Layout\n * code that sizes charts uniformly must account for this.\n *\n * **Why so thin.** The props are a discriminated union over each\n * stdlib chart function — `kind: \"line\"` brings in exactly the params\n * `charts.line` expects, `kind: \"bar\"` brings in `charts.bar`'s, etc.\n * Options stay aligned with stdlib without renaming. Shared interactive\n * layers add bounded pan / zoom controls to maps and state timelines, plus\n * nearest-point hover and keyboard inspection for line charts.\n * If stdlib gains a new option, it's automatically available at every\n * callsite.\n *\n * **Theming.** stdlib charts use `currentColor` for axes / ticks /\n * tick labels — set the wrapping element's `color` and everything\n * inherits. Series colors come from `--stdlib-chart-c1..c8` CSS\n * custom properties; override on the parent for per-chart palettes.\n *\n * ```tsx\n * <Chart kind=\"line\" style={{ height: \"12rem\" }}\n * series={[{ data: points() }]}\n * yAxis={{ format: v => `€${v}k` }} />\n *\n * <Chart kind=\"donut\" style={{ height: \"12rem\" }} data={slices()} />\n *\n * <Chart kind=\"sparkline\" style={{ width: \"6rem\", height: \"1.5rem\" }} data={trend()} />\n *\n * <Chart kind=\"map\" style={{ height: \"16rem\" }} series={locations()} interactive />\n * ```\n */\n\n/** All chart kinds shipped by `stdlib.charts`. */\nexport type ChartKind = keyof typeof charts;\n\nexport type ChartLabels = Partial<{\n empty: string;\n series: string;\n interactiveMap: string;\n interactiveTimeline: string;\n interactiveLine: string;\n zoomIn: string;\n zoomOut: string;\n resetMap: string;\n resetTimeline: string;\n}>;\n\n/**\n * Per-kind props: `kind` discriminator + the exact options that\n * `charts.<kind>` accepts, **minus** `width` / `height` (the wrapper\n * owns those — they're derived from container measurement). Solid's\n * component model handles discriminated unions natively, so callsites\n * get full type safety.\n */\nexport type ChartProps = {\n [K in ChartKind]: {\n kind: K;\n class?: string;\n style?: JSX.CSSProperties | string;\n labels?: ChartLabels;\n } & (K extends \"stateTimeline\"\n ? StateTimelineChartOptions\n : Omit<Parameters<(typeof charts)[K]>[0], \"width\" | \"height\"> & (K extends \"map\" | \"line\" ? { interactive?: boolean } : {}));\n}[ChartKind];\n\n/**\n * Internal — strips wrapper-only keys from props and forwards the\n * rest (plus measured size) to `charts[kind]`. The `any` is the\n * price for dispatching one function call across 8 different option\n * types; an explicit per-kind switch would type it but balloon the\n * component for no runtime benefit.\n */\nconst renderSvg = (\n props: ChartProps,\n width: number,\n height: number,\n mapViewport?: MapViewport,\n timelineViewport?: StateTimelineDomain,\n): string => {\n const {\n kind,\n class: _class,\n style: _style,\n labels: _labels,\n interactive: _interactive,\n ...opts\n } = props as ChartProps & { interactive?: boolean };\n if (kind === \"stateTimeline\") {\n return renderStateTimelineSvg({\n ...(opts as StateTimelineChartOptions),\n width,\n height,\n viewport: timelineViewport,\n });\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (charts[kind] as (o: unknown) => string)({\n ...(opts as any),\n ...(kind === \"map\" && mapViewport ? { viewport: mapViewport } : {}),\n width,\n height,\n });\n};\n\n/** Empty-data short-circuit. Kept per-kind because stdlib's payload\n * key differs (series vs data vs groups). We're conservative: only\n * block on truly empty inputs; partially-filled series get rendered\n * as-is and stdlib handles the gaps. */\nconst isEmpty = (props: ChartProps): boolean => {\n if (props.kind === \"line\" || props.kind === \"scatter\") {\n return !props.series?.length || props.series.every((s) => !s.data.length);\n }\n if (props.kind === \"bar\" || props.kind === \"donut\" || props.kind === \"pie\") {\n return !props.data?.length;\n }\n if (props.kind === \"histogram\" || props.kind === \"sparkline\") {\n return !props.data?.length;\n }\n if (props.kind === \"boxplot\") {\n return !props.groups?.length;\n }\n if (props.kind === \"stateTimeline\") {\n return !props.rows?.length || props.rows.every((row) => !row.intervals.length);\n }\n return false;\n};\n\nconst Chart = (props: ChartProps): JSX.Element => {\n const messages = useUiMessages();\n let containerRef: HTMLDivElement | undefined;\n let chartTooltipRef: HTMLSpanElement | undefined;\n let lineAnchorRef: HTMLSpanElement | undefined;\n let chartTooltipTriggerRef: Element | undefined;\n // Initial size matches stdlib's chart-function defaults so the SSR\n // render is sensible. The observer updates this on the first\n // client-side frame; the SVG re-renders reactively via innerHTML.\n const initialHeight = props.kind === \"stateTimeline\" ? stateTimelineHeight(props.rows.length, props.legend !== false) : 280;\n const [size, setSize] = createSignal({ width: 480, height: initialHeight });\n const initialMapViewport = props.kind === \"map\" ? normalizeMapViewport(props.viewport) : DEFAULT_MAP_VIEWPORT;\n const [mapViewport, setMapViewport] = createSignal<MapViewport>(initialMapViewport);\n const initialTimelineViewport =\n props.kind === \"stateTimeline\" ? stateTimelineDomain(props.rows, props.domain) : ([0, 1] as StateTimelineDomain);\n const [timelineViewport, setTimelineViewport] = createSignal<StateTimelineDomain>(initialTimelineViewport);\n const [linePointIndex, setLinePointIndex] = createSignal(0);\n const [lineInspectionActive, setLineInspectionActive] = createSignal(false);\n const [dragging, setDragging] = createSignal(false);\n const chartTooltipId = `k2b-chart-tooltip-${createUniqueId()}`;\n let timelineViewportLocallyChanged = false;\n let drag:\n | {\n pointerId: number;\n x: number;\n y: number;\n width: number;\n height: number;\n viewport: MapViewport;\n }\n | undefined;\n let timelineDrag:\n | {\n pointerId: number;\n x: number;\n width: number;\n viewport: StateTimelineDomain;\n }\n | undefined;\n let pointerFrame: number | undefined;\n let pendingPointer: { pointerId: number; clientX: number; clientY: number } | undefined;\n\n const interactiveMap = () => props.kind === \"map\" && props.interactive === true;\n const interactiveTimeline = () => props.kind === \"stateTimeline\" && props.interactive === true;\n const interactiveLine = () => props.kind === \"line\" && props.interactive === true;\n const interactive = () => interactiveMap() || interactiveTimeline() || interactiveLine();\n const draggable = () => interactiveMap() || interactiveTimeline();\n const labels = () => props.labels ?? {};\n const timelineFullDomain = (): StateTimelineDomain =>\n props.kind === \"stateTimeline\" ? stateTimelineDomain(props.rows, props.domain) : [0, 1];\n\n createEffect(() => {\n if (props.kind === \"map\") {\n setMapViewport(normalizeMapViewport(props.viewport));\n }\n });\n\n createEffect(() => {\n if (props.kind === \"stateTimeline\" && !timelineViewportLocallyChanged) {\n setTimelineViewport(timelineFullDomain());\n }\n });\n\n const updateTimelineViewport = (update: (current: StateTimelineDomain) => StateTimelineDomain) => {\n timelineViewportLocallyChanged = true;\n setTimelineViewport(update);\n };\n\n const mapDimensions = () => {\n const viewportElement = containerRef?.querySelector(\".stdlib-chart-map-viewport\");\n const rect = viewportElement?.getBoundingClientRect();\n if (rect && rect.width > 0 && rect.height > 0) {\n return { width: rect.width, height: rect.height };\n }\n return size();\n };\n\n const zoom = (delta: number) => {\n if (interactiveMap()) {\n setMapViewport((current) => zoomMapViewport(current, delta));\n } else if (interactiveTimeline()) {\n updateTimelineViewport((current) => zoomStateTimelineViewport(current, timelineFullDomain(), delta));\n }\n };\n\n const reset = () => {\n if (interactiveMap() && props.kind === \"map\") {\n setMapViewport(normalizeMapViewport(props.viewport));\n }\n if (interactiveTimeline()) {\n timelineViewportLocallyChanged = false;\n setTimelineViewport(timelineFullDomain());\n }\n };\n\n const handlePointerDown: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n if (!draggable() || event.button !== 0 || (event.target as Element).closest(\"button, a\")) {\n return;\n }\n closeChartTooltip();\n if (interactiveTimeline()) {\n timelineDrag = {\n pointerId: event.pointerId,\n x: event.clientX,\n width: Math.max(1, event.currentTarget.getBoundingClientRect().width),\n viewport: timelineViewport(),\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n setDragging(true);\n return;\n }\n const dimensions = mapDimensions();\n drag = {\n pointerId: event.pointerId,\n x: event.clientX,\n y: event.clientY,\n width: dimensions.width,\n height: dimensions.height,\n viewport: mapViewport(),\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n setDragging(true);\n };\n\n const flushPointerMove = () => {\n if (pointerFrame !== undefined) {\n cancelAnimationFrame(pointerFrame);\n pointerFrame = undefined;\n }\n const sample = pendingPointer;\n pendingPointer = undefined;\n if (!sample) return;\n if (interactiveLine()) {\n showLineTooltip(sample.clientX, sample.clientY);\n return;\n }\n const activeTimelineDrag = timelineDrag;\n if (activeTimelineDrag?.pointerId === sample.pointerId) {\n updateTimelineViewport(() =>\n panStateTimelineViewport(\n activeTimelineDrag.viewport,\n timelineFullDomain(),\n sample.clientX - activeTimelineDrag.x,\n activeTimelineDrag.width,\n ),\n );\n return;\n }\n if (!drag || drag.pointerId !== sample.pointerId) return;\n setMapViewport(panMapViewport(drag.viewport, sample.clientX - drag.x, sample.clientY - drag.y, drag.width, drag.height));\n };\n\n const handlePointerMove: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n if (!interactiveLine() && timelineDrag?.pointerId !== event.pointerId && drag?.pointerId !== event.pointerId) return;\n pendingPointer = { pointerId: event.pointerId, clientX: event.clientX, clientY: event.clientY };\n if (pointerFrame !== undefined) return;\n pointerFrame = requestAnimationFrame(flushPointerMove);\n };\n\n const stopDragging: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n if (pendingPointer?.pointerId === event.pointerId) flushPointerMove();\n if (timelineDrag?.pointerId === event.pointerId) {\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n timelineDrag = undefined;\n setDragging(false);\n return;\n }\n if (!drag || drag.pointerId !== event.pointerId) return;\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n drag = undefined;\n setDragging(false);\n };\n\n const handleWheel: JSX.EventHandlerUnion<HTMLDivElement, WheelEvent> = (event) => {\n if (interactiveMap() && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n zoom(event.deltaY < 0 ? 1 : -1);\n return;\n }\n if (!interactiveTimeline()) return;\n if (event.ctrlKey || event.metaKey) {\n event.preventDefault();\n const rect = event.currentTarget.getBoundingClientRect();\n const anchor = rect.width > 0 ? (event.clientX - rect.left) / rect.width : 0.5;\n updateTimelineViewport((current) => zoomStateTimelineViewport(current, timelineFullDomain(), event.deltaY < 0 ? 1 : -1, anchor));\n } else if (event.shiftKey) {\n event.preventDefault();\n updateTimelineViewport((current) =>\n panStateTimelineViewport(current, timelineFullDomain(), -event.deltaY, event.currentTarget.getBoundingClientRect().width),\n );\n }\n };\n\n const handleKeyDown: JSX.EventHandlerUnion<HTMLDivElement, KeyboardEvent> = (event) => {\n if (!interactive()) return;\n if (interactiveLine()) {\n const values = lineXValues();\n if (values.length === 0) return;\n if (event.key === \"Escape\") {\n closeChartTooltip();\n return;\n }\n const next =\n event.key === \"Home\"\n ? 0\n : event.key === \"End\"\n ? values.length - 1\n : event.key === \"ArrowLeft\"\n ? Math.max(0, linePointIndex() - 1)\n : event.key === \"ArrowRight\"\n ? Math.min(values.length - 1, linePointIndex() + 1)\n : null;\n if (next === null) return;\n event.preventDefault();\n showLinePoint(next);\n return;\n }\n if (event.key === \"+\" || event.key === \"=\") {\n event.preventDefault();\n zoom(1);\n return;\n }\n if (event.key === \"-\" || event.key === \"_\") {\n event.preventDefault();\n zoom(-1);\n return;\n }\n if (event.key === \"0\" || event.key === \"Home\") {\n event.preventDefault();\n reset();\n return;\n }\n if (interactiveTimeline() && (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\")) {\n event.preventDefault();\n updateTimelineViewport((current) =>\n panStateTimelineViewport(\n current,\n timelineFullDomain(),\n event.key === \"ArrowLeft\" ? 80 : -80,\n event.currentTarget.getBoundingClientRect().width,\n ),\n );\n return;\n }\n const delta: readonly [number, number] | undefined = {\n ArrowLeft: [40, 0],\n ArrowRight: [-40, 0],\n ArrowUp: [0, 40],\n ArrowDown: [0, -40],\n }[event.key] as readonly [number, number] | undefined;\n if (!delta) return;\n event.preventDefault();\n const dimensions = mapDimensions();\n setMapViewport((current) => panMapViewport(current, delta[0], delta[1], dimensions.width, dimensions.height));\n };\n\n const closeChartTooltip = () => {\n if (interactiveLine()) {\n if (pointerFrame !== undefined) cancelAnimationFrame(pointerFrame);\n pointerFrame = undefined;\n pendingPointer = undefined;\n }\n chartTooltipTriggerRef?.removeAttribute(\"aria-describedby\");\n chartTooltipTriggerRef = undefined;\n setLineInspectionActive(false);\n if (!chartTooltipRef) return;\n try {\n if (chartTooltipRef.matches(\":popover-open\")) chartTooltipRef.hidePopover();\n } catch {\n // A disconnect can race with the Popover API.\n }\n };\n\n const showTimelineTooltip = (target: Element | null) => {\n if (!interactiveTimeline() || !chartTooltipRef) return;\n const trigger = target?.closest<HTMLElement>(\"[data-chart-tooltip]\");\n const content = trigger?.dataset.chartTooltip;\n if (!trigger || !content) return;\n chartTooltipTriggerRef?.removeAttribute(\"aria-describedby\");\n chartTooltipTriggerRef = trigger;\n trigger.setAttribute(\"aria-describedby\", chartTooltipId);\n chartTooltipRef.textContent = content;\n try {\n if (!chartTooltipRef.matches(\":popover-open\")) chartTooltipRef.showPopover();\n positionTooltipSurface(chartTooltipRef, trigger);\n } catch {\n // SVG <title> remains as the fallback on browsers without Popover.\n }\n };\n\n const lineInspection = createMemo(() => {\n if (props.kind !== \"line\") {\n return {\n values: [] as number[],\n series: [] as Array<{ label: string; points: Map<number, { x: number; y: number }> }>,\n };\n }\n const values = new Set<number>();\n const series = props.series.map((entry) => {\n const points = new Map<number, { x: number; y: number }>();\n for (const point of entry.data) {\n if (!Number.isFinite(point.x)) continue;\n values.add(point.x);\n if (Number.isFinite(point.y) && !points.has(point.x)) points.set(point.x, point);\n }\n return { label: entry.label ?? labels().series ?? messages().series, points };\n });\n return { values: [...values].sort((left, right) => left - right), series };\n });\n const lineXValues = () => lineInspection().values;\n\n const linePlotBounds = (): { left: number; right: number } => {\n if (props.kind !== \"line\") return { left: 0, right: size().width };\n const padding = props.padding;\n const left = (typeof padding === \"number\" ? padding : padding?.left) ?? 40;\n const rightInset = (typeof padding === \"number\" ? padding : padding?.right) ?? 16;\n return {\n left: left + (props.yAxis?.label ? 14 : 0),\n right: Math.max(left + 1, size().width - rightInset),\n };\n };\n\n const showLinePoint = (index: number, pointerY?: number) => {\n if (props.kind !== \"line\" || !chartTooltipRef || !lineAnchorRef) return;\n const inspection = lineInspection();\n const values = inspection.values;\n const pointIndex = Math.min(values.length - 1, Math.max(0, index));\n const x = values[pointIndex];\n if (x === undefined) return;\n const points = inspection.series\n .map((series) => {\n const point = series.points.get(x);\n return point ? { label: series.label, point } : null;\n })\n .filter((entry): entry is NonNullable<typeof entry> => entry !== null);\n if (points.length === 0) return;\n\n const xFormat = props.xAxis?.format ?? String;\n const yFormat = props.yAxis?.format ?? String;\n chartTooltipRef.textContent = [xFormat(x), ...points.map((entry) => `${entry.label}: ${yFormat(entry.point.y)}`)].join(\" · \");\n\n const [min, max] = [values[0] ?? x, values.at(-1) ?? x];\n const bounds = linePlotBounds();\n const ratio = max === min ? 0.5 : (x - min) / (max - min);\n lineAnchorRef.style.left = `${bounds.left + ratio * (bounds.right - bounds.left)}px`;\n lineAnchorRef.style.top = `${Math.min(size().height - 8, Math.max(8, pointerY ?? 24))}px`;\n setLinePointIndex(pointIndex);\n setLineInspectionActive(true);\n try {\n if (!chartTooltipRef.matches(\":popover-open\")) chartTooltipRef.showPopover();\n positionTooltipSurface(chartTooltipRef, lineAnchorRef);\n } catch {\n // The chart remains readable on browsers without Popover support.\n }\n };\n\n const showLineTooltip = (clientX: number, clientY: number) => {\n const values = lineXValues();\n if (values.length === 0) return;\n const rect = containerRef?.getBoundingClientRect();\n if (!rect) return;\n const bounds = linePlotBounds();\n const localX = clientX - rect.left;\n const ratio = Math.min(1, Math.max(0, (localX - bounds.left) / Math.max(1, bounds.right - bounds.left)));\n const target = (values[0] ?? 0) + ratio * ((values.at(-1) ?? 0) - (values[0] ?? 0));\n let low = 0;\n let high = values.length - 1;\n while (low < high) {\n const middle = Math.floor((low + high) / 2);\n if (values[middle]! < target) low = middle + 1;\n else high = middle;\n }\n const previous = Math.max(0, low - 1);\n const index = Math.abs(values[previous]! - target) <= Math.abs(values[low]! - target) ? previous : low;\n showLinePoint(index, clientY - rect.top);\n };\n\n onCleanup(() => {\n if (pointerFrame !== undefined) cancelAnimationFrame(pointerFrame);\n pointerFrame = undefined;\n pendingPointer = undefined;\n });\n\n onMount(() => {\n if (!containerRef) return;\n // Seed immediately from layout — avoids one wasted re-render in\n // the case where the container already has its final size at\n // mount time (the common case for dashboard widgets).\n const rect = containerRef.getBoundingClientRect();\n if (rect.width > 0 && rect.height > 0) {\n setSize({ width: Math.round(rect.width), height: Math.round(rect.height) });\n }\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (!entry) return;\n const { width, height } = entry.contentRect;\n // Floor to integer pixels; sub-pixel jitter would trigger an\n // SVG re-render on every scroll/zoom otherwise.\n if (width > 0 && height > 0) {\n setSize((prev) => {\n const w = Math.round(width);\n const h = Math.round(height);\n return prev.width === w && prev.height === h ? prev : { width: w, height: h };\n });\n }\n });\n ro.observe(containerRef);\n window.addEventListener(\"scroll\", closeChartTooltip, true);\n window.addEventListener(\"resize\", closeChartTooltip);\n onCleanup(() => {\n ro.disconnect();\n window.removeEventListener(\"scroll\", closeChartTooltip, true);\n window.removeEventListener(\"resize\", closeChartTooltip);\n });\n });\n\n const chartStyle = () =>\n props.style ??\n (props.kind === \"stateTimeline\"\n ? {\n height: `${stateTimelineHeight(props.rows.length, props.legend !== false)}px`,\n }\n : undefined);\n\n return (\n <Show\n when={!isEmpty(props)}\n fallback={\n <div ref={containerRef} class={`k2b-chart k2b-chart__empty ${props.class ?? \"\"}`} style={chartStyle()}>\n {labels().empty ?? messages().noData}\n </div>\n }\n >\n {/* The wrapping div is what the ResizeObserver watches. `block`\n + the caller's sizing classes (h-48, w-full, flex-1, …) drive\n the available space; the SVG inside fills it via viewBox =\n container size. `innerHTML` is reactive in Solid — re-runs\n on every prop / size change, so live data updates propagate\n without ceremony. */}\n <div\n ref={containerRef}\n class={`k2b-chart ${props.class ?? \"\"}`}\n data-chart-kind={props.kind}\n data-drag={draggable() ? (dragging() ? \"active\" : \"idle\") : undefined}\n data-crosshair={!draggable() && interactiveLine() ? \"true\" : undefined}\n data-interactive={interactive() ? \"true\" : undefined}\n style={chartStyle()}\n role=\"group\"\n aria-describedby={interactiveLine() && lineInspectionActive() ? chartTooltipId : undefined}\n aria-label={\n interactiveMap()\n ? (labels().interactiveMap ?? messages().interactiveMap)\n : interactiveTimeline()\n ? (labels().interactiveTimeline ?? messages().interactiveTimeline)\n : interactiveLine()\n ? (labels().interactiveLine ?? messages().interactiveLineChart)\n : undefined\n }\n tabIndex={interactive() ? 0 : undefined}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={stopDragging}\n onPointerCancel={stopDragging}\n onPointerOver={(event) => showTimelineTooltip(event.target as Element)}\n onPointerOut={(event) => {\n const trigger = (event.target as Element).closest(\"[data-chart-tooltip]\");\n if (trigger && !trigger.contains(event.relatedTarget as Node | null)) closeChartTooltip();\n }}\n onPointerLeave={closeChartTooltip}\n onFocusIn={(event) => {\n if (interactiveLine()) showLinePoint(lineXValues().length - 1);\n else showTimelineTooltip(event.target as Element);\n }}\n onFocusOut={closeChartTooltip}\n onWheel={handleWheel}\n onKeyDown={handleKeyDown}\n >\n <div\n class=\"k2b-chart__svg\"\n innerHTML={renderSvg(\n props,\n size().width,\n size().height,\n interactiveMap() ? mapViewport() : undefined,\n interactiveTimeline() ? timelineViewport() : undefined,\n )}\n />\n <Show when={interactiveTimeline() || interactiveLine()}>\n <span ref={lineAnchorRef} class=\"k2b-chart__anchor\" aria-hidden=\"true\" />\n <span id={chartTooltipId} ref={chartTooltipRef} role=\"tooltip\" popover=\"manual\" class=\"k2b-tooltip\" />\n </Show>\n <Show when={draggable()}>\n <div class=\"k2b-chart__controls\">\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={labels().zoomIn ?? messages().zoomIn}\n title={`${labels().zoomIn ?? messages().zoomIn} (+)`}\n onClick={() => zoom(1)}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={labels().zoomOut ?? messages().zoomOut}\n title={`${labels().zoomOut ?? messages().zoomOut} (-)`}\n onClick={() => zoom(-1)}\n >\n <i class=\"ti ti-minus\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={\n interactiveMap() ? (labels().resetMap ?? messages().resetMapView) : (labels().resetTimeline ?? messages().resetTimelineView)\n }\n title={`${interactiveMap() ? (labels().resetMap ?? messages().resetMapView) : (labels().resetTimeline ?? messages().resetTimelineView)} (0)`}\n onClick={reset}\n >\n <i class=\"ti ti-focus-centered\" aria-hidden=\"true\" />\n </button>\n </div>\n </Show>\n </div>\n </Show>\n );\n};\n\nexport default Chart;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["lineGapsSvg","charts","createEffect","createMemo","createSignal","createUniqueId","onCleanup","onMount","Show","splitProps","untrack","createChartInspection","useLocale","useUiMessages","DEFAULT_MAP_VIEWPORT","normalizeMapViewport","panMapViewport","zoomMapViewport","panStateTimelineViewport","renderStateTimelineSvg","stateTimelineDomain","stateTimelineHeight","zoomStateTimelineViewport","isServer","responsiveChartSvg","responsiveMapSvg","selectedChartSvg","chartRenderHeight","props","kind","rows","length","legend","Math","max","title","subtitle","data","renderChartSvg","width","height","mapViewport","timelineViewport","class","_class","style","_style","labels","_labels","interactive","_interactive","onSelect","_onSelect","selected","_selected","tooltip","_tooltip","cursor","_cursor","zoomFocus","_zoomFocus","opts","viewport","svg","inspect","maxGap","undefined","area","errorBand","Error","preservesAspectRatio","isEmpty","series","every","s","groups","row","intervals","Chart","drawingProps","messages","locale","containerRef","chartTooltipRef","lineAnchorRef","size","dimensions","getBoundingClientRect","initialMapViewport","setMapViewport","initialTimelineViewport","domain","setTimelineViewport","dragging","setDragging","chartTooltipId","timelineViewportLocallyChanged","drag","timelineDrag","pointerFrame","pendingPointer","interactiveMap","interactiveTimeline","interactiveLine","draggable","timelineFullDomain","updateTimelineViewport","update","mapDimensions","viewportElement","querySelector","matrix","getScreenCTM","box","viewBox","baseVal","hypot","a","b","c","d","rect","zoom","delta","closeChartTooltip","current","reset","handlePointerDown","event","inspection","down","button","target","closest","pointerId","x","clientX","currentTarget","setPointerCapture","y","clientY","flushPointerMove","cancelAnimationFrame","sample","start","activeTimelineDrag","handlePointerMove","move","requestAnimationFrame","stopDragging","hasPointerCapture","releasePointerCapture","handleWheel","ctrlKey","metaKey","preventDefault","deltaY","anchor","left","shiftKey","handleKeyDown","key","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","container","enabled","select","selection","format","fields","chartFields","Intl","NumberFormat","maximumFractionDigits","datum","label","seriesIndex","values","map","field","value","formatted","yes","no","close","svgMarkup","invalidate","selectDatum","outside","Node","contains","window","addEventListener","scroll","removeEventListener","chartStyle","_$createComponent","when","fallback","_$ssr","_tmpl$5","_$escape","_$ssrStyle","empty","noData","children","_tmpl$4","_$ssrAttribute","interactiveLineChart","interactiveChart","_$ssrStyleProperty","_tmpl$","_tmpl$2","_tmpl$3","zoomIn","zoomOut","resetMap","resetMapView","resetTimeline","resetTimelineView"],"sources":["content/Chart.tsx"],"sourcesContent":["import { lineGapsSvg } from \"./chart-line-gaps\";\nimport type { ChartCursor } from \"./chart-cursor\";\nimport type { MapViewport } from \"@k2b/stdlib\";\nimport { charts } from \"@k2b/stdlib\";\nimport type { JSX } from \"solid-js\";\nimport { createEffect, createMemo, createSignal, createUniqueId, onCleanup, onMount, Show, splitProps, untrack } from \"solid-js\";\nimport { createChartInspection, type ChartSelection, type ChartTooltipFormatter, type ChartDatumRef } from \"./chart-inspection\";\nimport { useLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { DEFAULT_MAP_VIEWPORT, normalizeMapViewport, panMapViewport, zoomMapViewport } from \"./chart-map-viewport\";\nimport {\n panStateTimelineViewport,\n renderStateTimelineSvg,\n type StateTimelineChartOptions,\n type StateTimelineDomain,\n stateTimelineDomain,\n stateTimelineHeight,\n zoomStateTimelineViewport,\n} from \"./chart-state-timeline\";\nimport { isServer } from \"solid-js/web\";\nimport { responsiveChartSvg, responsiveMapSvg, selectedChartSvg } from \"./chart-svg\";\n\n/**\n * Chart — minimal Solid wrapper around `stdlib.charts`.\n *\n * **Live-update story.** `charts.<kind>(opts)` returns an SVG string;\n * Solid's `innerHTML` is reactive, so any time a prop (signal, store\n * slice, derived value) changes, the SVG re-renders. No manual\n * subscription, no imperative DOM patching. Trade-off: every change\n * is a full SVG re-build, not a diff — fine for dashboard cadences\n * (poll, websocket, store updates). Don't use this for 60fps streaming.\n *\n * **Sizing.** The server and browser render the same logical viewBox. CSS\n * fits Cartesian plots to the container and preserves text/marker sizes;\n * maps fit the whole world and zoom uniformly across the full plot; pies, donuts and gauges retain\n * their aspect ratio. No measurement\n * or hydration redraw is needed. The caller sizes the wrapper, for example\n * `style={{ height: \"14rem\" }}`. State timelines derive their default height\n * from the row count and legend via `stateTimelineHeight()`.\n *\n * **Why so thin.** The props are a discriminated union over each\n * stdlib chart function — `kind: \"line\"` brings in exactly the params\n * `charts.line` expects, `kind: \"bar\"` brings in `charts.bar`'s, etc.\n * Options stay aligned with stdlib without renaming. Shared interactive\n * layers add bounded pan / zoom controls to maps and state timelines, plus\n * renderer-owned inspection, tooltips and optional selection for all chart kinds.\n * If stdlib gains a new option, it's automatically available at every\n * callsite.\n *\n * **Theming.** stdlib charts use `currentColor` for axes / ticks /\n * tick labels — set the wrapping element's `color` and everything\n * inherits. Series colors come from `--stdlib-chart-c1..c8` CSS\n * custom properties; override on the parent for per-chart palettes.\n *\n * ```tsx\n * <Chart kind=\"line\" style={{ height: \"12rem\" }}\n * series={[{ data: points() }]}\n * yAxis={{ format: v => `€${v}k` }} />\n *\n * <Chart kind=\"donut\" style={{ height: \"12rem\" }} data={slices()} />\n *\n * <Chart kind=\"sparkline\" style={{ width: \"6rem\", height: \"1.5rem\" }} data={trend()} />\n *\n * <Chart kind=\"map\" style={{ height: \"16rem\" }} series={locations()} interactive />\n * ```\n */\n\n/** All chart kinds shipped by `stdlib.charts`. */\nexport type ChartKind = keyof typeof charts;\n\nexport type ChartLabels = Partial<{\n empty: string;\n series: string;\n interactiveMap: string;\n interactiveTimeline: string;\n interactiveLine: string;\n interactiveChart: string;\n zoomIn: string;\n zoomOut: string;\n resetMap: string;\n resetTimeline: string;\n}>;\n\n/**\n * Per-kind props: `kind` discriminator + the exact options that\n * `charts.<kind>` accepts, **minus** `width` / `height` (the wrapper\n * owns those — CSS fits a stable coordinate space to the box). Solid's\n * component model handles discriminated unions natively, so callsites\n * get full type safety.\n */\nexport type ChartProps = {\n [K in ChartKind]: {\n kind: K;\n class?: string;\n style?: JSX.CSSProperties | string;\n labels?: ChartLabels;\n interactive?: boolean;\n onSelect?: (selection: ChartSelection) => void;\n /** Controlled highlight; indices belong to this exact input snapshot. */\n selected?: ChartDatumRef | null;\n tooltip?: ChartTooltipFormatter;\n /** Optional shared X cursor for line charts. */\n cursor?: ChartCursor;\n } & (K extends \"map\"\n ? {\n /** Target when zooming in from the world view. Defaults to Europe (50, 10). */\n zoomFocus?: Pick<MapViewport, \"latitude\" | \"longitude\">;\n }\n : {}) &\n (K extends \"line\" ? { /** Largest connected X distance; positive, finite, without area/errorBand fills. */ maxGap?: number } : {}) &\n (K extends \"stateTimeline\" ? StateTimelineChartOptions : Omit<Parameters<(typeof charts)[K]>[0], \"width\" | \"height\" | \"inspect\">);\n}[ChartKind];\n\n/** Pure renderer options: component layout, events and inspection are configured elsewhere. */\nexport type ChartRenderOptions = {\n [K in ChartKind]: Omit<\n Extract<ChartProps, { kind: K }>,\n \"class\" | \"style\" | \"labels\" | \"interactive\" | \"onSelect\" | \"selected\" | \"tooltip\" | \"cursor\"\n >;\n}[ChartKind];\n\n/** Keep the fixed 28-unit bar-gauge rows inside the shared SSR/browser coordinate space. */\nexport const chartRenderHeight = (props: ChartRenderOptions): number => {\n if (props.kind === \"stateTimeline\") return stateTimelineHeight(props.rows.length, props.legend !== false);\n if (props.kind === \"barGauge\") return Math.max(280, (props.title || props.subtitle ? 42 : 16) + props.data.length * 28 + 14);\n return 280;\n};\n\n/**\n * Internal — strips wrapper-only keys from props and forwards the\n * rest (plus logical size) to `charts[kind]`. The `any` is the\n * price for dispatching one function call across 14 different option\n * types; an explicit per-kind switch would type it but balloon the\n * component for no runtime benefit.\n */\nexport const renderChartSvg = (\n props: ChartProps,\n width: number,\n height: number,\n mapViewport?: MapViewport,\n timelineViewport?: StateTimelineDomain,\n): string => {\n const {\n kind,\n class: _class,\n style: _style,\n labels: _labels,\n interactive: _interactive,\n onSelect: _onSelect,\n selected: _selected,\n tooltip: _tooltip,\n cursor: _cursor,\n zoomFocus: _zoomFocus,\n ...opts\n } = props as ChartProps & { interactive?: boolean; zoomFocus?: Pick<MapViewport, \"latitude\" | \"longitude\"> };\n if (kind === \"stateTimeline\") {\n return responsiveChartSvg(\n renderStateTimelineSvg({\n ...(opts as StateTimelineChartOptions),\n width,\n height,\n viewport: timelineViewport,\n interactive: props.interactive,\n }),\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let svg = (charts[kind] as (o: unknown) => string)({\n ...(opts as any),\n ...(kind === \"map\" ? { viewport: DEFAULT_MAP_VIEWPORT } : {}),\n width,\n height,\n inspect: props.interactive === true || (props.kind === \"line\" && props.maxGap !== undefined),\n });\n if (props.kind === \"line\" && props.maxGap !== undefined) {\n if (props.area || props.errorBand) throw new Error(\"Chart maxGap does not support area or errorBand fills\");\n svg = lineGapsSvg(svg, props.maxGap, props);\n }\n if (props.kind === \"map\") return responsiveMapSvg(svg, width, height, normalizeMapViewport(mapViewport ?? props.viewport));\n return preservesAspectRatio(kind) ? svg : responsiveChartSvg(svg);\n};\n\nconst preservesAspectRatio = (kind: ChartKind) => kind === \"map\" || kind === \"pie\" || kind === \"donut\" || kind === \"gauge\";\n\n/** Empty-data short-circuit. Kept per-kind because stdlib's payload\n * key differs (series vs data vs groups). We're conservative: only\n * block on truly empty inputs; partially-filled series get rendered\n * as-is and stdlib handles the gaps. */\nconst isEmpty = (props: ChartProps): boolean => {\n if (props.kind === \"line\" || props.kind === \"scatter\") {\n return !props.series?.length || props.series.every((s) => !s.data.length);\n }\n if (props.kind === \"bar\" || props.kind === \"donut\" || props.kind === \"pie\") {\n return !props.data?.length;\n }\n if (props.kind === \"histogram\" || props.kind === \"sparkline\") {\n return !props.data?.length;\n }\n if (props.kind === \"boxplot\") {\n return !props.groups?.length;\n }\n if (props.kind === \"stateTimeline\") {\n return !props.rows?.length || props.rows.every((row) => !row.intervals.length);\n }\n return false;\n};\n\nconst Chart = (props: ChartProps): JSX.Element => {\n const [, drawingProps] = splitProps(props, [\"selected\", \"onSelect\", \"tooltip\", \"cursor\"]);\n const messages = useUiMessages();\n const locale = useLocale();\n let containerRef: HTMLDivElement | undefined;\n let chartTooltipRef: HTMLSpanElement | undefined;\n let lineAnchorRef: HTMLSpanElement | undefined;\n // One deterministic coordinate space on the server and client. CSS fits the\n // SVG to its box; hydration must never replace it with measured geometry.\n const size = () => ({\n width: 480,\n height: chartRenderHeight(props),\n });\n const dimensions = () => containerRef?.getBoundingClientRect() ?? size();\n const initialMapViewport = props.kind === \"map\" ? normalizeMapViewport(props.viewport) : DEFAULT_MAP_VIEWPORT;\n const [mapViewport, setMapViewport] = createSignal<MapViewport>(initialMapViewport);\n const initialTimelineViewport =\n props.kind === \"stateTimeline\" ? stateTimelineDomain(props.rows, props.domain) : ([0, 1] as StateTimelineDomain);\n const [timelineViewport, setTimelineViewport] = createSignal<StateTimelineDomain>(initialTimelineViewport);\n const [dragging, setDragging] = createSignal(false);\n const chartTooltipId = `k2b-chart-tooltip-${createUniqueId()}`;\n let timelineViewportLocallyChanged = false;\n let drag:\n | {\n pointerId: number;\n x: number;\n y: number;\n width: number;\n height: number;\n viewport: MapViewport;\n }\n | undefined;\n let timelineDrag:\n | {\n pointerId: number;\n x: number;\n width: number;\n viewport: StateTimelineDomain;\n }\n | undefined;\n let pointerFrame: number | undefined;\n let pendingPointer: { pointerId: number; clientX: number; clientY: number } | undefined;\n\n const interactiveMap = () => props.kind === \"map\" && props.interactive === true;\n const interactiveTimeline = () => props.kind === \"stateTimeline\" && props.interactive === true;\n const interactiveLine = () => props.kind === \"line\" && props.interactive === true;\n const interactive = () => props.interactive === true;\n const draggable = () => interactiveMap() || interactiveTimeline();\n const labels = () => props.labels ?? {};\n const timelineFullDomain = (): StateTimelineDomain =>\n props.kind === \"stateTimeline\" ? stateTimelineDomain(props.rows, props.domain) : [0, 1];\n\n createEffect(() => {\n if (props.kind === \"map\") {\n setMapViewport(normalizeMapViewport(props.viewport));\n }\n });\n\n createEffect(() => {\n if (props.kind === \"stateTimeline\" && !timelineViewportLocallyChanged) {\n setTimelineViewport(timelineFullDomain());\n }\n });\n\n const updateTimelineViewport = (update: (current: StateTimelineDomain) => StateTimelineDomain) => {\n timelineViewportLocallyChanged = true;\n setTimelineViewport(update);\n };\n\n const mapDimensions = () => {\n const viewportElement = containerRef?.querySelector<SVGSVGElement>(\".stdlib-chart-map-viewport\");\n const matrix = viewportElement?.getScreenCTM?.();\n const box = viewportElement?.viewBox?.baseVal;\n if (matrix && box?.width && box.height) {\n return { width: box.width * Math.hypot(matrix.a, matrix.b), height: box.height * Math.hypot(matrix.c, matrix.d) };\n }\n const rect = viewportElement?.getBoundingClientRect();\n if (rect && rect.width > 0 && rect.height > 0) {\n return { width: rect.width, height: rect.height };\n }\n return dimensions();\n };\n\n const zoom = (delta: number) => {\n closeChartTooltip();\n if (interactiveMap()) {\n setMapViewport((current) => zoomMapViewport(current, delta, props.kind === \"map\" ? props.zoomFocus : undefined));\n } else if (interactiveTimeline()) {\n updateTimelineViewport((current) => zoomStateTimelineViewport(current, timelineFullDomain(), delta));\n }\n };\n\n const reset = () => {\n closeChartTooltip();\n if (interactiveMap() && props.kind === \"map\") {\n setMapViewport(normalizeMapViewport(props.viewport));\n }\n if (interactiveTimeline()) {\n timelineViewportLocallyChanged = false;\n setTimelineViewport(timelineFullDomain());\n }\n };\n\n const handlePointerDown: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n inspection.down(event);\n if (!draggable() || event.button !== 0 || (event.target as Element).closest(\"button, a\")) {\n return;\n }\n closeChartTooltip();\n if (interactiveTimeline()) {\n timelineDrag = {\n pointerId: event.pointerId,\n x: event.clientX,\n width: Math.max(1, event.currentTarget.getBoundingClientRect().width),\n viewport: timelineViewport(),\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n setDragging(true);\n return;\n }\n const dimensions = mapDimensions();\n drag = {\n pointerId: event.pointerId,\n x: event.clientX,\n y: event.clientY,\n width: dimensions.width,\n height: dimensions.height,\n viewport: mapViewport(),\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n setDragging(true);\n };\n\n const flushPointerMove = () => {\n if (pointerFrame !== undefined) {\n cancelAnimationFrame(pointerFrame);\n pointerFrame = undefined;\n }\n const sample = pendingPointer;\n pendingPointer = undefined;\n if (!sample) return;\n const start = timelineDrag ?? drag;\n if (start && Math.hypot(sample.clientX - start.x, sample.clientY - (\"y\" in start ? start.y : sample.clientY)) <= 6) return;\n const activeTimelineDrag = timelineDrag;\n if (activeTimelineDrag?.pointerId === sample.pointerId) {\n updateTimelineViewport(() =>\n panStateTimelineViewport(\n activeTimelineDrag.viewport,\n timelineFullDomain(),\n sample.clientX - activeTimelineDrag.x,\n activeTimelineDrag.width,\n ),\n );\n return;\n }\n if (!drag || drag.pointerId !== sample.pointerId) return;\n setMapViewport(panMapViewport(drag.viewport, sample.clientX - drag.x, sample.clientY - drag.y, drag.width, drag.height));\n };\n\n const handlePointerMove: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n inspection.move(event);\n if (timelineDrag?.pointerId !== event.pointerId && drag?.pointerId !== event.pointerId) return;\n pendingPointer = { pointerId: event.pointerId, clientX: event.clientX, clientY: event.clientY };\n if (pointerFrame !== undefined) return;\n pointerFrame = requestAnimationFrame(flushPointerMove);\n };\n\n const stopDragging: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n if (pendingPointer?.pointerId === event.pointerId) flushPointerMove();\n if (timelineDrag?.pointerId === event.pointerId) {\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n timelineDrag = undefined;\n setDragging(false);\n return;\n }\n if (!drag || drag.pointerId !== event.pointerId) return;\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n drag = undefined;\n setDragging(false);\n };\n\n const handleWheel: JSX.EventHandlerUnion<HTMLDivElement, WheelEvent> = (event) => {\n if (interactiveMap() && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n zoom(event.deltaY < 0 ? 1 : -1);\n return;\n }\n if (!interactiveTimeline()) return;\n if (event.ctrlKey || event.metaKey) {\n event.preventDefault();\n const rect = event.currentTarget.getBoundingClientRect();\n const anchor = rect.width > 0 ? (event.clientX - rect.left) / rect.width : 0.5;\n updateTimelineViewport((current) => zoomStateTimelineViewport(current, timelineFullDomain(), event.deltaY < 0 ? 1 : -1, anchor));\n } else if (event.shiftKey) {\n event.preventDefault();\n updateTimelineViewport((current) =>\n panStateTimelineViewport(current, timelineFullDomain(), -event.deltaY, event.currentTarget.getBoundingClientRect().width),\n );\n }\n };\n\n const handleKeyDown: JSX.EventHandlerUnion<HTMLDivElement, KeyboardEvent> = (event) => {\n if (inspection.key(event)) return;\n if (!draggable() || event.target !== containerRef) return;\n if (event.key === \"+\" || event.key === \"=\") {\n event.preventDefault();\n zoom(1);\n return;\n }\n if (event.key === \"-\" || event.key === \"_\") {\n event.preventDefault();\n zoom(-1);\n return;\n }\n if (event.key === \"0\" || event.key === \"Home\") {\n event.preventDefault();\n reset();\n return;\n }\n if (interactiveTimeline() && (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\")) {\n event.preventDefault();\n updateTimelineViewport((current) =>\n panStateTimelineViewport(\n current,\n timelineFullDomain(),\n event.key === \"ArrowLeft\" ? 80 : -80,\n event.currentTarget.getBoundingClientRect().width,\n ),\n );\n return;\n }\n const delta: readonly [number, number] | undefined = {\n ArrowLeft: [40, 0],\n ArrowRight: [-40, 0],\n ArrowUp: [0, 40],\n ArrowDown: [0, -40],\n }[event.key] as readonly [number, number] | undefined;\n if (!delta) return;\n event.preventDefault();\n const dimensions = mapDimensions();\n setMapViewport((current) => panMapViewport(current, delta[0], delta[1], dimensions.width, dimensions.height));\n };\n\n const inspection = createChartInspection({\n container: () => containerRef,\n cursor: () => props.cursor,\n tooltip: () => chartTooltipRef,\n anchor: () => lineAnchorRef,\n kind: () => props.kind,\n enabled: interactive,\n select: (selection) => props.onSelect?.(selection),\n format: (selection) => {\n if (props.tooltip) return props.tooltip(selection);\n const fields = messages().chartFields;\n const format = new Intl.NumberFormat(locale(), { maximumFractionDigits: 6 });\n return {\n title:\n selection.datum.label ??\n (selection.datum.seriesIndex !== undefined\n ? `${labels().series ?? messages().series} ${selection.datum.seriesIndex + 1}`\n : undefined),\n rows: selection.datum.values.map((field) => ({\n label:\n selection.kind === \"line\" && field.key === \"y\"\n ? (selection.datum.label ?? labels().series ?? messages().series)\n : fields({ key: field.key }),\n value:\n field.formatted ??\n (field.key === \"upperInclusive\"\n ? field.value === \"true\"\n ? messages().yes\n : messages().no\n : typeof field.value === \"number\"\n ? `${format.format(field.value)}${field.key === \"percent\" ? \"%\" : \"\"}`\n : field.value),\n })),\n };\n },\n });\n const closeChartTooltip = () => inspection.close();\n const svgMarkup = createMemo(() =>\n renderChartSvg(\n drawingProps,\n size().width,\n size().height,\n interactiveMap() ? mapViewport() : undefined,\n interactiveTimeline() ? timelineViewport() : undefined,\n ),\n );\n createEffect(() => {\n svgMarkup();\n inspection.invalidate();\n untrack(() => inspection.selectDatum(props.selected));\n });\n\n createEffect(() => inspection.selectDatum(props.selected));\n\n onCleanup(() => {\n inspection.close();\n if (pointerFrame !== undefined) cancelAnimationFrame(pointerFrame);\n pointerFrame = undefined;\n pendingPointer = undefined;\n });\n\n onMount(() => {\n if (!containerRef) return;\n const outside = (event: PointerEvent) => {\n if (event.target instanceof Node && !containerRef?.contains(event.target)) closeChartTooltip();\n };\n window.addEventListener(\"pointerdown\", outside);\n const scroll = (event: Event) => {\n if (event.target instanceof Node && chartTooltipRef?.contains(event.target)) return;\n closeChartTooltip();\n };\n window.addEventListener(\"scroll\", scroll, true);\n window.addEventListener(\"resize\", closeChartTooltip);\n onCleanup(() => {\n window.removeEventListener(\"pointerdown\", outside);\n window.removeEventListener(\"scroll\", scroll, true);\n window.removeEventListener(\"resize\", closeChartTooltip);\n });\n });\n\n const chartStyle = () =>\n props.style ??\n (props.kind === \"stateTimeline\"\n ? {\n height: `${stateTimelineHeight(props.rows.length, props.legend !== false)}px`,\n }\n : undefined);\n\n return (\n <Show\n when={!isEmpty(props)}\n fallback={\n <div ref={containerRef} class={`k2b-chart k2b-chart__empty ${props.class ?? \"\"}`} style={chartStyle()}>\n {labels().empty ?? messages().noData}\n </div>\n }\n >\n {/* CSS fits the server-rendered SVG to the caller's box. Only changes\n to chart data/options rebuild the SVG; resizing does not. */}\n <div\n ref={containerRef}\n class={`k2b-chart ${props.class ?? \"\"}`}\n data-chart-kind={props.kind}\n data-drag={draggable() ? (dragging() ? \"active\" : \"idle\") : undefined}\n data-crosshair={!draggable() && interactiveLine() ? \"true\" : undefined}\n data-interactive={interactive() ? \"true\" : undefined}\n style={chartStyle()}\n role=\"group\"\n aria-label={\n interactiveMap()\n ? (labels().interactiveMap ?? messages().interactiveMap)\n : interactiveTimeline()\n ? (labels().interactiveTimeline ?? messages().interactiveTimeline)\n : interactiveLine()\n ? (labels().interactiveLine ?? messages().interactiveLineChart)\n : interactive()\n ? (labels().interactiveChart ?? messages().interactiveChart)\n : undefined\n }\n aria-description={interactive() ? messages().interactiveChart : undefined}\n tabIndex={interactive() ? 0 : undefined}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={stopDragging}\n onPointerCancel={stopDragging}\n onClick={inspection.click}\n onPointerLeave={inspection.leave}\n onFocusIn={inspection.focus}\n onFocusOut={closeChartTooltip}\n onWheel={handleWheel}\n onKeyDown={handleKeyDown}\n >\n <div\n class=\"k2b-chart__svg\"\n data-stretch={!preservesAspectRatio(props.kind) ? \"true\" : undefined}\n style={{\n \"--k2b-chart-width\": `${size().width}px`,\n \"--k2b-chart-height\": `${size().height}px`,\n \"aspect-ratio\": `${size().width} / ${size().height}`,\n }}\n innerHTML={isServer ? selectedChartSvg(svgMarkup(), props.selected) : svgMarkup()}\n />\n <Show when={interactive()}>\n <span ref={lineAnchorRef} class=\"k2b-chart__anchor\" aria-hidden=\"true\" />\n <span\n id={chartTooltipId}\n ref={chartTooltipRef}\n role=\"tooltip\"\n popover=\"manual\"\n data-instant=\"true\"\n class=\"k2b-tooltip k2b-chart__tooltip\"\n />\n </Show>\n <Show when={draggable()}>\n <div class=\"k2b-chart__controls\">\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={labels().zoomIn ?? messages().zoomIn}\n title={`${labels().zoomIn ?? messages().zoomIn} (+)`}\n onClick={() => zoom(1)}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={labels().zoomOut ?? messages().zoomOut}\n title={`${labels().zoomOut ?? messages().zoomOut} (-)`}\n onClick={() => zoom(-1)}\n >\n <i class=\"ti ti-minus\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={\n interactiveMap() ? (labels().resetMap ?? messages().resetMapView) : (labels().resetTimeline ?? messages().resetTimelineView)\n }\n title={`${interactiveMap() ? (labels().resetMap ?? messages().resetMapView) : (labels().resetTimeline ?? messages().resetTimelineView)} (0)`}\n onClick={reset}\n >\n <i class=\"ti ti-focus-centered\" aria-hidden=\"true\" />\n </button>\n </div>\n </Show>\n </div>\n </Show>\n );\n};\n\nexport default Chart;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,257 @@
1
+ import { ssrStyleProperty as _$ssrStyleProperty } from "solid-js/web";
2
+ import { createComponent as _$createComponent } from "solid-js/web";
3
+ import { ssr as _$ssr } from "solid-js/web";
4
+ import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
5
+ import { escape as _$escape } from "solid-js/web";
6
+ var _tmpl$ = ["<div>", "</div>"],
7
+ _tmpl$2 = ["<span role=\"alert\">", "</span>"],
8
+ _tmpl$3 = ["<div class=\"k2b-chart-explorer__details\" aria-live=\"polite\">", "</div>"],
9
+ _tmpl$4 = ["<section class=\"", "\"", "><header class=\"k2b-chart-explorer__header\"><div><h3", ">", "</h3>", "</div><div class=\"k2b-chart-explorer__actions\">", "", "</div></header>", "<div class=\"k2b-chart-explorer__viewport\" style=\"", "\">", "</div>", "</section>"],
10
+ _tmpl$5 = ["<div class=\"k2b-chart__empty\">", "</div>"],
11
+ _tmpl$6 = ["<span class=\"k2b-chart-explorer__sort-icon\" aria-hidden=\"true\">", "</span>"],
12
+ _tmpl$7 = "<i class=\"ti ti-x\" aria-hidden=\"true\"></i>",
13
+ _tmpl$8 = ["<div class=\"k2b-chart-explorer__detail-header\"><span>", "</span>", "</div>"];
14
+ import { createEffect, createMemo, createSignal, createUniqueId, Show } from "solid-js";
15
+ import { Button } from "../actions/Button";
16
+ import { CopyButton } from "../actions/CopyButton";
17
+ import { Paper } from "../surfaces/Paper";
18
+ import { DescriptionList } from "../surfaces/DescriptionList";
19
+ import { SelectChip } from "../inputs/SelectChip";
20
+ import { useUiMessages } from "../intl/messages";
21
+ import { useLocale } from "../intl/locale";
22
+ import DataTable from "./DataTable";
23
+ import { ChartSnapshotView } from "./ChartSnapshotView";
24
+ import { validateChartExplorerData } from "./chart-explorer";
25
+ const tsvCell = value => /[\t\r\n"]/.test(value) ? `"${value.replaceAll('"', '""')}"` : value;
26
+ export function ChartExplorer(props) {
27
+ const messages = useUiMessages();
28
+ const locale = useLocale();
29
+ const id = `k2b-chart-explorer-${createUniqueId()}`;
30
+ const data = () => props.data;
31
+ const [copyFailed, setCopyFailed] = createSignal(false);
32
+ const [localSelection, setLocalSelection] = createSignal(null);
33
+ const [localView, setLocalView] = createSignal(props.defaultView ?? "chart");
34
+ const [localSort, setLocalSort] = createSignal(props.defaultSort ?? null);
35
+ const view = () => props.view ?? localView();
36
+ const sort = () => props.sort === undefined ? localSort() : props.sort;
37
+ const setView = value => {
38
+ if (props.view === undefined) setLocalView(value);
39
+ props.onViewChange?.(value);
40
+ };
41
+ const setSort = value => {
42
+ if (props.sort === undefined) setLocalSort(value);
43
+ props.onSortChange?.(value);
44
+ };
45
+ const rowsByKey = createMemo(() => new Map(data().rows.map(row => [row.key, row])));
46
+ const rawSelected = () => props.selectedKey !== undefined ? props.selectedKey : localSelection();
47
+ const selected = () => rowsByKey().has(rawSelected() ?? "") ? rawSelected() : null;
48
+ const selectedRow = () => rowsByKey().get(selected() ?? "");
49
+ const select = key => {
50
+ if (key !== null && !rowsByKey().has(key)) return;
51
+ setLocalSelection(key);
52
+ props.onSelectedKeyChange?.(key);
53
+ };
54
+ if (!props.columns.length || props.columns.some(column => !column.id) || new Set(props.columns.map(column => column.id)).size !== props.columns.length) {
55
+ throw new Error("Chart columns require unique nonempty IDs and at least one column");
56
+ }
57
+ validateChartExplorerData(data());
58
+ createEffect(() => validateChartExplorerData(data()));
59
+ createEffect(() => {
60
+ if (props.selectedKey === undefined && rawSelected() !== null && selected() === null) select(null);
61
+ });
62
+ const rows = createMemo(() => {
63
+ const result = [...data().rows];
64
+ const order = sort();
65
+ const column = props.columns.find(c => c.id === order?.key);
66
+ const value = column?.sortValue;
67
+ if (!order || !value) return result;
68
+ const collator = new Intl.Collator(locale(), {
69
+ numeric: true
70
+ });
71
+ return result.sort((a, b) => {
72
+ const av = value(a),
73
+ bv = value(b);
74
+ if (av === null) return bv === null ? 0 : 1;
75
+ if (bv === null) return -1;
76
+ const comparison = typeof av === "number" && typeof bv === "number" ? av - bv : collator.compare(String(av), String(bv));
77
+ return order.direction === "asc" ? comparison : -comparison;
78
+ });
79
+ });
80
+ const copyText = () => [props.columns.map(c => tsvCell(c.label)).join("\t"), ...rows().map(row => props.columns.map(c => tsvCell(c.value(row))).join("\t"))].join("\n");
81
+ return _$ssr(_tmpl$4, `k2b-chart-explorer ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("aria-labelledby", _$escape(id, true), false), _$ssrAttribute("id", _$escape(id, true), false), _$escape(props.title), _$escape(_$createComponent(Show, {
82
+ get when() {
83
+ return props.description;
84
+ },
85
+ get children() {
86
+ return _$ssr(_tmpl$, _$escape(props.description));
87
+ }
88
+ })), _$escape(_$createComponent(CopyButton, {
89
+ get text() {
90
+ return copyText();
91
+ },
92
+ get label() {
93
+ return messages().chartCopyData;
94
+ },
95
+ iconOnly: true,
96
+ size: "sm",
97
+ variant: "ghost",
98
+ get disabled() {
99
+ return !rows().length;
100
+ },
101
+ onCopyError: () => setCopyFailed(true),
102
+ onCopied: () => setCopyFailed(false)
103
+ })), _$escape(_$createComponent(SelectChip, {
104
+ get value() {
105
+ return view();
106
+ },
107
+ onValueChange: setView,
108
+ get ["aria-label"]() {
109
+ return messages().chartView;
110
+ },
111
+ get options() {
112
+ return [{
113
+ value: "chart",
114
+ label: messages().chartDiagram
115
+ }, {
116
+ value: "table",
117
+ label: messages().chartData
118
+ }];
119
+ }
120
+ })), _$escape(_$createComponent(Show, {
121
+ get when() {
122
+ return copyFailed();
123
+ },
124
+ get children() {
125
+ return _$ssr(_tmpl$2, _$escape(messages().chartCopyFailed));
126
+ }
127
+ })), _$ssrStyleProperty("height:", _$escape(props.height ?? "18rem", true)), _$escape(_$createComponent(Show, {
128
+ get when() {
129
+ return data().rows.length > 0;
130
+ },
131
+ get fallback() {
132
+ return _$ssr(_tmpl$5, _$escape(messages().noData));
133
+ },
134
+ get children() {
135
+ return _$createComponent(Show, {
136
+ get when() {
137
+ return view() === "chart";
138
+ },
139
+ get fallback() {
140
+ return _$createComponent(DataTable, {
141
+ get rows() {
142
+ return rows();
143
+ },
144
+ get columns() {
145
+ return props.columns.map(column => ({
146
+ id: column.id,
147
+ header: column.label,
148
+ value: column.value,
149
+ align: column.align,
150
+ sortable: Boolean(column.sortValue)
151
+ }));
152
+ },
153
+ ariaLabelledBy: id,
154
+ getRowId: row => row.key,
155
+ get selectedRowId() {
156
+ return selected();
157
+ },
158
+ get sort() {
159
+ return sort();
160
+ },
161
+ fillHeight: true,
162
+ surface: "paper",
163
+ onRowClick: row => select(row.key),
164
+ renderCell: ({
165
+ row,
166
+ col,
167
+ value,
168
+ render
169
+ }) => {
170
+ const custom = props.columns.find(column => column.id === col.id)?.render;
171
+ const cell = () => custom ? custom(row) : render(value);
172
+ return col.id === props.columns[0]?.id ? _$createComponent(Button, {
173
+ variant: "text",
174
+ size: "sm",
175
+ onClick: () => select(row.key),
176
+ get children() {
177
+ return cell();
178
+ }
179
+ }) : cell();
180
+ },
181
+ renderHeader: ({
182
+ col,
183
+ render
184
+ }) => col.sortable ? _$createComponent(Button, {
185
+ variant: "text",
186
+ size: "sm",
187
+ onClick: () => setSort({
188
+ key: col.id,
189
+ direction: sort()?.key === col.id && sort()?.direction === "asc" ? "desc" : "asc"
190
+ }),
191
+ get children() {
192
+ return [props.columns.find(column => column.id === col.id)?.label, " ", _$ssr(_tmpl$6, sort()?.key === col.id ? sort()?.direction === "asc" ? "↑" : "↓" : "↕")];
193
+ }
194
+ }) : render()
195
+ });
196
+ },
197
+ get children() {
198
+ return _$createComponent(ChartSnapshotView, {
199
+ get cursor() {
200
+ return props.cursor;
201
+ },
202
+ get snapshot() {
203
+ return data().chart;
204
+ },
205
+ get selectedKey() {
206
+ return selected();
207
+ },
208
+ onSelect: select,
209
+ style: {
210
+ height: "100%"
211
+ }
212
+ });
213
+ }
214
+ });
215
+ }
216
+ })), _$escape(_$createComponent(Show, {
217
+ get when() {
218
+ return props.renderDetails !== false;
219
+ },
220
+ get children() {
221
+ return _$ssr(_tmpl$3, _$escape(_$createComponent(Show, {
222
+ get when() {
223
+ return selectedRow();
224
+ },
225
+ children: row => _$createComponent(Paper, {
226
+ "class": "k2b-chart-explorer__detail-paper",
227
+ get children() {
228
+ return [_$ssr(_tmpl$8, _$escape(messages().chartSelectedDatum), _$escape(_$createComponent(Button, {
229
+ variant: "text",
230
+ size: "sm",
231
+ get ["aria-label"]() {
232
+ return messages().clearSelection;
233
+ },
234
+ get title() {
235
+ return messages().clearSelection;
236
+ },
237
+ onClick: () => select(null),
238
+ get children() {
239
+ return _$ssr(_tmpl$7);
240
+ }
241
+ }))), props.renderDetails ? props.renderDetails(row()) : _$createComponent(DescriptionList, {
242
+ columns: 3,
243
+ size: "sm",
244
+ get items() {
245
+ return props.columns.map(column => ({
246
+ term: column.label,
247
+ description: column.value(row())
248
+ }));
249
+ }
250
+ })];
251
+ }
252
+ })
253
+ })));
254
+ }
255
+ })));
256
+ }
257
+ //# sourceMappingURL=ChartExplorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createEffect","createMemo","createSignal","createUniqueId","Show","Button","CopyButton","Paper","DescriptionList","SelectChip","useUiMessages","useLocale","DataTable","ChartSnapshotView","validateChartExplorerData","tsvCell","value","test","replaceAll","ChartExplorer","props","messages","locale","id","data","copyFailed","setCopyFailed","localSelection","setLocalSelection","localView","setLocalView","defaultView","localSort","setLocalSort","defaultSort","view","sort","undefined","setView","onViewChange","setSort","onSortChange","rowsByKey","Map","rows","map","row","key","rawSelected","selectedKey","selected","has","selectedRow","get","select","onSelectedKeyChange","columns","length","some","column","Set","size","Error","result","order","find","c","sortValue","collator","Intl","Collator","numeric","a","b","av","bv","comparison","compare","String","direction","copyText","label","join","_$ssr","_tmpl$4","_$escape","class","_$ssrAttribute","title","_$createComponent","when","description","children","_tmpl$","text","chartCopyData","iconOnly","variant","disabled","onCopyError","onCopied","onValueChange","aria-label","chartView","options","chartDiagram","chartData","_tmpl$2","chartCopyFailed","_$ssrStyleProperty","height","fallback","_tmpl$5","noData","header","align","sortable","Boolean","ariaLabelledBy","getRowId","selectedRowId","fillHeight","surface","onRowClick","renderCell","col","render","custom","cell","onClick","renderHeader","_tmpl$6","cursor","snapshot","chart","onSelect","style","renderDetails","_tmpl$3","_tmpl$8","chartSelectedDatum","clearSelection","_tmpl$7","items","term"],"sources":["content/ChartExplorer.tsx"],"sourcesContent":["import type { ChartCursor } from \"./chart-cursor\";\nimport { createEffect, createMemo, createSignal, createUniqueId, Show, type JSX } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { CopyButton } from \"../actions/CopyButton\";\nimport { Paper } from \"../surfaces/Paper\";\nimport { DescriptionList } from \"../surfaces/DescriptionList\";\nimport { SelectChip } from \"../inputs/SelectChip\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { useLocale } from \"../intl/locale\";\nimport DataTable, { type DataTableSort } from \"./DataTable\";\nimport { ChartSnapshotView } from \"./ChartSnapshotView\";\nimport { validateChartExplorerData, type ChartExplorerData, type ChartExplorerRow } from \"./chart-explorer\";\n\nexport type ChartExplorerColumn<T> = {\n id: string;\n label: string;\n value: (row: T) => string;\n /** Optional table cell presentation; value remains the plain text used for copy/details. */\n render?: (row: T) => JSX.Element;\n /** Explicit comparable value. Omit to leave the column unsortable. */\n sortValue?: (row: T) => string | number | null;\n align?: \"left\" | \"center\" | \"right\";\n};\nexport type ChartExplorerProps<T extends ChartExplorerRow> = {\n cursor?: ChartCursor;\n title: string;\n description?: JSX.Element;\n data: ChartExplorerData<T>;\n columns: readonly ChartExplorerColumn<T>[];\n view?: \"chart\" | \"table\";\n defaultView?: \"chart\" | \"table\";\n onViewChange?: (view: \"chart\" | \"table\") => void;\n sort?: DataTableSort | null;\n defaultSort?: DataTableSort | null;\n onSortChange?: (sort: DataTableSort | null) => void;\n selectedKey?: string | null;\n onSelectedKeyChange?: (key: string | null) => void;\n /** false hides the complete local detail area for a shared selection panel. */\n renderDetails?: false | ((row: T) => JSX.Element);\n height?: string;\n class?: string;\n};\n\nconst tsvCell = (value: string) => (/[\\t\\r\\n\"]/.test(value) ? `\"${value.replaceAll('\"', '\"\"')}\"` : value);\n\nexport function ChartExplorer<T extends ChartExplorerRow>(props: ChartExplorerProps<T>) {\n const messages = useUiMessages();\n const locale = useLocale();\n const id = `k2b-chart-explorer-${createUniqueId()}`;\n const data = () => props.data;\n const [copyFailed, setCopyFailed] = createSignal(false);\n const [localSelection, setLocalSelection] = createSignal<string | null>(null);\n const [localView, setLocalView] = createSignal(props.defaultView ?? \"chart\");\n const [localSort, setLocalSort] = createSignal<DataTableSort | null>(props.defaultSort ?? null);\n const view = () => props.view ?? localView();\n const sort = () => (props.sort === undefined ? localSort() : props.sort);\n const setView = (value: \"chart\" | \"table\") => {\n if (props.view === undefined) setLocalView(value);\n props.onViewChange?.(value);\n };\n const setSort = (value: DataTableSort | null) => {\n if (props.sort === undefined) setLocalSort(value);\n props.onSortChange?.(value);\n };\n const rowsByKey = createMemo(() => new Map(data().rows.map((row) => [row.key, row])));\n const rawSelected = () => (props.selectedKey !== undefined ? props.selectedKey : localSelection());\n const selected = () => (rowsByKey().has(rawSelected() ?? \"\") ? rawSelected() : null);\n const selectedRow = () => rowsByKey().get(selected() ?? \"\");\n const select = (key: string | null) => {\n if (key !== null && !rowsByKey().has(key)) return;\n setLocalSelection(key);\n props.onSelectedKeyChange?.(key);\n };\n if (\n !props.columns.length ||\n props.columns.some((column) => !column.id) ||\n new Set(props.columns.map((column) => column.id)).size !== props.columns.length\n ) {\n throw new Error(\"Chart columns require unique nonempty IDs and at least one column\");\n }\n validateChartExplorerData(data());\n createEffect(() => validateChartExplorerData(data()));\n createEffect(() => {\n if (props.selectedKey === undefined && rawSelected() !== null && selected() === null) select(null);\n });\n const rows = createMemo(() => {\n const result = [...data().rows];\n const order = sort();\n const column = props.columns.find((c) => c.id === order?.key);\n const value = column?.sortValue;\n if (!order || !value) return result;\n const collator = new Intl.Collator(locale(), { numeric: true });\n return result.sort((a, b) => {\n const av = value(a),\n bv = value(b);\n if (av === null) return bv === null ? 0 : 1;\n if (bv === null) return -1;\n const comparison = typeof av === \"number\" && typeof bv === \"number\" ? av - bv : collator.compare(String(av), String(bv));\n return order.direction === \"asc\" ? comparison : -comparison;\n });\n });\n const copyText = () =>\n [\n props.columns.map((c) => tsvCell(c.label)).join(\"\\t\"),\n ...rows().map((row) => props.columns.map((c) => tsvCell(c.value(row))).join(\"\\t\")),\n ].join(\"\\n\");\n return (\n <section class={`k2b-chart-explorer ${props.class ?? \"\"}`} aria-labelledby={id}>\n <header class=\"k2b-chart-explorer__header\">\n <div>\n <h3 id={id}>{props.title}</h3>\n <Show when={props.description}>\n <div>{props.description}</div>\n </Show>\n </div>\n <div class=\"k2b-chart-explorer__actions\">\n <CopyButton\n text={copyText()}\n label={messages().chartCopyData}\n iconOnly\n size=\"sm\"\n variant=\"ghost\"\n disabled={!rows().length}\n onCopyError={() => setCopyFailed(true)}\n onCopied={() => setCopyFailed(false)}\n />\n <SelectChip<\"chart\" | \"table\">\n value={view()}\n onValueChange={setView}\n aria-label={messages().chartView}\n options={[\n { value: \"chart\", label: messages().chartDiagram },\n { value: \"table\", label: messages().chartData },\n ]}\n />\n </div>\n </header>\n <Show when={copyFailed()}>\n <span role=\"alert\">{messages().chartCopyFailed}</span>\n </Show>\n <div class=\"k2b-chart-explorer__viewport\" style={{ height: props.height ?? \"18rem\" }}>\n <Show when={data().rows.length > 0} fallback={<div class=\"k2b-chart__empty\">{messages().noData}</div>}>\n <Show\n when={view() === \"chart\"}\n fallback={\n <DataTable\n rows={rows()}\n columns={props.columns.map((column) => ({\n id: column.id,\n header: column.label,\n value: column.value,\n align: column.align,\n sortable: Boolean(column.sortValue),\n }))}\n ariaLabelledBy={id}\n getRowId={(row) => row.key}\n selectedRowId={selected()}\n sort={sort()}\n fillHeight\n surface=\"paper\"\n onRowClick={(row) => select(row.key)}\n renderCell={({ row, col, value, render }) => {\n const custom = props.columns.find((column) => column.id === col.id)?.render;\n const cell = () => (custom ? custom(row) : render(value));\n return col.id === props.columns[0]?.id ? (\n <Button variant=\"text\" size=\"sm\" onClick={() => select(row.key)}>\n {cell()}\n </Button>\n ) : (\n cell()\n );\n }}\n renderHeader={({ col, render }) =>\n col.sortable ? (\n <Button\n variant=\"text\"\n size=\"sm\"\n onClick={() =>\n setSort({\n key: col.id,\n direction: sort()?.key === col.id && sort()?.direction === \"asc\" ? \"desc\" : \"asc\",\n })\n }\n >\n {props.columns.find((column) => column.id === col.id)?.label}{\" \"}\n <span class=\"k2b-chart-explorer__sort-icon\" aria-hidden=\"true\">\n {sort()?.key === col.id ? (sort()?.direction === \"asc\" ? \"↑\" : \"↓\") : \"↕\"}\n </span>\n </Button>\n ) : (\n render()\n )\n }\n />\n }\n >\n <ChartSnapshotView\n cursor={props.cursor}\n snapshot={data().chart}\n selectedKey={selected()}\n onSelect={select}\n style={{ height: \"100%\" }}\n />\n </Show>\n </Show>\n </div>\n <Show when={props.renderDetails !== false}>\n <div class=\"k2b-chart-explorer__details\" aria-live=\"polite\">\n <Show when={selectedRow()}>\n {(row) => (\n <Paper class=\"k2b-chart-explorer__detail-paper\">\n <div class=\"k2b-chart-explorer__detail-header\">\n <span>{messages().chartSelectedDatum}</span>\n <Button\n variant=\"text\"\n size=\"sm\"\n aria-label={messages().clearSelection}\n title={messages().clearSelection}\n onClick={() => select(null)}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </Button>\n </div>\n {props.renderDetails ? (\n props.renderDetails(row())\n ) : (\n <DescriptionList\n columns={3}\n size=\"sm\"\n items={props.columns.map((column) => ({\n term: column.label,\n description: column.value(row()),\n }))}\n />\n )}\n </Paper>\n )}\n </Show>\n </div>\n </Show>\n </section>\n );\n}\n"],"mappings":"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","ignoreList":[]}