@sqlrooms/mosaic 0.29.0-rc.5 → 0.29.0-rc.6

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 (334) hide show
  1. package/README.md +43 -39
  2. package/dist/DataPointLimitError.d.ts +9 -0
  3. package/dist/DataPointLimitError.d.ts.map +1 -0
  4. package/dist/DataPointLimitError.js +14 -0
  5. package/dist/DataPointLimitError.js.map +1 -0
  6. package/dist/MosaicSlice.d.ts.map +1 -1
  7. package/dist/MosaicSlice.js +3 -3
  8. package/dist/MosaicSlice.js.map +1 -1
  9. package/dist/VgPlotChart.d.ts +8 -11
  10. package/dist/VgPlotChart.d.ts.map +1 -1
  11. package/dist/VgPlotChart.js +74 -90
  12. package/dist/VgPlotChart.js.map +1 -1
  13. package/dist/VgPlotChartError.d.ts +7 -0
  14. package/dist/VgPlotChartError.d.ts.map +1 -0
  15. package/dist/VgPlotChartError.js +9 -0
  16. package/dist/VgPlotChartError.js.map +1 -0
  17. package/dist/ai.d.ts +103 -0
  18. package/dist/ai.d.ts.map +1 -0
  19. package/dist/ai.js +445 -0
  20. package/dist/ai.js.map +1 -0
  21. package/dist/boxplot/BoxPlotClient.d.ts +7 -0
  22. package/dist/boxplot/BoxPlotClient.d.ts.map +1 -1
  23. package/dist/boxplot/BoxPlotClient.js +22 -0
  24. package/dist/boxplot/BoxPlotClient.js.map +1 -1
  25. package/dist/chart/ChartRuntimeIssuePanel.d.ts +7 -0
  26. package/dist/chart/ChartRuntimeIssuePanel.d.ts.map +1 -0
  27. package/dist/chart/ChartRuntimeIssuePanel.js +10 -0
  28. package/dist/chart/ChartRuntimeIssuePanel.js.map +1 -0
  29. package/dist/chart/MosaicDashboardChart.d.ts +1 -1
  30. package/dist/chart/MosaicDashboardChart.d.ts.map +1 -1
  31. package/dist/chart/MosaicDashboardChart.js +1 -1
  32. package/dist/chart/MosaicDashboardChart.js.map +1 -1
  33. package/dist/chart/MosaicDashboardChartContent.d.ts +1 -1
  34. package/dist/chart/MosaicDashboardChartContent.d.ts.map +1 -1
  35. package/dist/chart/MosaicDashboardChartContent.js +29 -2
  36. package/dist/chart/MosaicDashboardChartContent.js.map +1 -1
  37. package/dist/chart/MosaicDashboardChartRenderer.d.ts +2 -1
  38. package/dist/chart/MosaicDashboardChartRenderer.d.ts.map +1 -1
  39. package/dist/chart/MosaicDashboardChartRenderer.js +2 -2
  40. package/dist/chart/MosaicDashboardChartRenderer.js.map +1 -1
  41. package/dist/chart/MosaicDashboardComponentChart.d.ts +5 -1
  42. package/dist/chart/MosaicDashboardComponentChart.d.ts.map +1 -1
  43. package/dist/chart/MosaicDashboardComponentChart.js +4 -1
  44. package/dist/chart/MosaicDashboardComponentChart.js.map +1 -1
  45. package/dist/chart/MosaicDashboardVgPlotChart.d.ts +4 -0
  46. package/dist/chart/MosaicDashboardVgPlotChart.d.ts.map +1 -1
  47. package/dist/chart/MosaicDashboardVgPlotChart.js +2 -2
  48. package/dist/chart/MosaicDashboardVgPlotChart.js.map +1 -1
  49. package/dist/chart/addChartPanelAction.d.ts +3 -0
  50. package/dist/chart/addChartPanelAction.d.ts.map +1 -0
  51. package/dist/chart/addChartPanelAction.js +14 -0
  52. package/dist/chart/addChartPanelAction.js.map +1 -0
  53. package/dist/chart/chart-settings/ChartSettings.d.ts.map +1 -1
  54. package/dist/chart/chart-settings/ChartSettings.js +7 -4
  55. package/dist/chart/chart-settings/ChartSettings.js.map +1 -1
  56. package/dist/chart/chart-settings/ChartSettingsContent.d.ts +1 -1
  57. package/dist/chart/chart-settings/ChartSettingsContent.d.ts.map +1 -1
  58. package/dist/chart/chart-settings/ChartSettingsContent.js.map +1 -1
  59. package/dist/chart/chart-settings/ChartSettingsContext.d.ts +0 -2
  60. package/dist/chart/chart-settings/ChartSettingsContext.d.ts.map +1 -1
  61. package/dist/chart/chart-settings/ChartSettingsContext.js +6 -7
  62. package/dist/chart/chart-settings/ChartSettingsContext.js.map +1 -1
  63. package/dist/chart/chart-settings/ChartSettingsPanel.d.ts +1 -1
  64. package/dist/chart/chart-settings/ChartSettingsPanel.d.ts.map +1 -1
  65. package/dist/chart/chart-settings/ChartSettingsPanel.js +1 -1
  66. package/dist/chart/chart-settings/ChartSettingsPanel.js.map +1 -1
  67. package/dist/chart/chart-settings/ChartTypeSelector.d.ts.map +1 -1
  68. package/dist/chart/chart-settings/ChartTypeSelector.js +5 -5
  69. package/dist/chart/chart-settings/ChartTypeSelector.js.map +1 -1
  70. package/dist/chart-builders/ColumnSelector.d.ts +0 -2
  71. package/dist/chart-builders/ColumnSelector.d.ts.map +1 -1
  72. package/dist/chart-builders/ColumnSelector.js +4 -5
  73. package/dist/chart-builders/ColumnSelector.js.map +1 -1
  74. package/dist/chart-builders/ColumnsContext.d.ts +13 -0
  75. package/dist/chart-builders/ColumnsContext.d.ts.map +1 -0
  76. package/dist/chart-builders/ColumnsContext.js +15 -0
  77. package/dist/chart-builders/ColumnsContext.js.map +1 -0
  78. package/dist/chart-builders/MultiFieldSelector.js +4 -4
  79. package/dist/chart-builders/MultiFieldSelector.js.map +1 -1
  80. package/dist/chart-builders/TableSelector.d.ts +14 -0
  81. package/dist/chart-builders/TableSelector.d.ts.map +1 -0
  82. package/dist/chart-builders/TableSelector.js +23 -0
  83. package/dist/chart-builders/TableSelector.js.map +1 -0
  84. package/dist/chart-runtime.d.ts +50 -0
  85. package/dist/chart-runtime.d.ts.map +1 -0
  86. package/dist/chart-runtime.js +76 -0
  87. package/dist/chart-runtime.js.map +1 -0
  88. package/dist/chart-types/base-types.d.ts +45 -25
  89. package/dist/chart-types/base-types.d.ts.map +1 -1
  90. package/dist/chart-types/base-types.js.map +1 -1
  91. package/dist/chart-types/box-plot/definition.d.ts.map +1 -1
  92. package/dist/chart-types/box-plot/definition.js +5 -0
  93. package/dist/chart-types/box-plot/definition.js.map +1 -1
  94. package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.d.ts.map +1 -1
  95. package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.js +4 -1
  96. package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.js.map +1 -1
  97. package/dist/chart-types/box-plot/renderer/useBoxPlotClient.d.ts +4 -0
  98. package/dist/chart-types/box-plot/renderer/useBoxPlotClient.d.ts.map +1 -1
  99. package/dist/chart-types/box-plot/renderer/useBoxPlotClient.js +13 -2
  100. package/dist/chart-types/box-plot/renderer/useBoxPlotClient.js.map +1 -1
  101. package/dist/chart-types/box-plot/schema.d.ts +5 -0
  102. package/dist/chart-types/box-plot/schema.d.ts.map +1 -1
  103. package/dist/chart-types/box-plot/schema.js +2 -0
  104. package/dist/chart-types/box-plot/schema.js.map +1 -1
  105. package/dist/chart-types/box-plot/tool.d.ts +5 -9
  106. package/dist/chart-types/box-plot/tool.d.ts.map +1 -1
  107. package/dist/chart-types/box-plot/tool.js +14 -6
  108. package/dist/chart-types/box-plot/tool.js.map +1 -1
  109. package/dist/chart-types/bubble-chart/definition.d.ts.map +1 -1
  110. package/dist/chart-types/bubble-chart/definition.js +5 -0
  111. package/dist/chart-types/bubble-chart/definition.js.map +1 -1
  112. package/dist/chart-types/bubble-chart/schema.d.ts +5 -0
  113. package/dist/chart-types/bubble-chart/schema.d.ts.map +1 -1
  114. package/dist/chart-types/bubble-chart/schema.js +2 -0
  115. package/dist/chart-types/bubble-chart/schema.js.map +1 -1
  116. package/dist/chart-types/bubble-chart/tool.d.ts +5 -9
  117. package/dist/chart-types/bubble-chart/tool.d.ts.map +1 -1
  118. package/dist/chart-types/bubble-chart/tool.js +17 -9
  119. package/dist/chart-types/bubble-chart/tool.js.map +1 -1
  120. package/dist/chart-types/chart-config.d.ts +46 -0
  121. package/dist/chart-types/chart-config.d.ts.map +1 -1
  122. package/dist/chart-types/chart-config.js +2 -0
  123. package/dist/chart-types/chart-config.js.map +1 -1
  124. package/dist/chart-types/count-plot/schema.d.ts +5 -0
  125. package/dist/chart-types/count-plot/schema.d.ts.map +1 -1
  126. package/dist/chart-types/count-plot/schema.js +2 -0
  127. package/dist/chart-types/count-plot/schema.js.map +1 -1
  128. package/dist/chart-types/count-plot/tool.d.ts +5 -9
  129. package/dist/chart-types/count-plot/tool.d.ts.map +1 -1
  130. package/dist/chart-types/count-plot/tool.js +14 -6
  131. package/dist/chart-types/count-plot/tool.js.map +1 -1
  132. package/dist/chart-types/custom-spec/definition.d.ts.map +1 -1
  133. package/dist/chart-types/custom-spec/definition.js +5 -0
  134. package/dist/chart-types/custom-spec/definition.js.map +1 -1
  135. package/dist/chart-types/custom-spec/schema.d.ts +5 -0
  136. package/dist/chart-types/custom-spec/schema.d.ts.map +1 -1
  137. package/dist/chart-types/custom-spec/schema.js +2 -0
  138. package/dist/chart-types/custom-spec/schema.js.map +1 -1
  139. package/dist/chart-types/data-policy-schema.d.ts +8 -0
  140. package/dist/chart-types/data-policy-schema.d.ts.map +1 -0
  141. package/dist/chart-types/data-policy-schema.js +7 -0
  142. package/dist/chart-types/data-policy-schema.js.map +1 -0
  143. package/dist/chart-types/heatmap/schema.d.ts +5 -0
  144. package/dist/chart-types/heatmap/schema.d.ts.map +1 -1
  145. package/dist/chart-types/heatmap/schema.js +2 -0
  146. package/dist/chart-types/heatmap/schema.js.map +1 -1
  147. package/dist/chart-types/heatmap/tool.d.ts +5 -9
  148. package/dist/chart-types/heatmap/tool.d.ts.map +1 -1
  149. package/dist/chart-types/heatmap/tool.js +16 -8
  150. package/dist/chart-types/heatmap/tool.js.map +1 -1
  151. package/dist/chart-types/histogram/HistogramSettings.d.ts.map +1 -1
  152. package/dist/chart-types/histogram/HistogramSettings.js +4 -2
  153. package/dist/chart-types/histogram/HistogramSettings.js.map +1 -1
  154. package/dist/chart-types/histogram/schema.d.ts +10 -0
  155. package/dist/chart-types/histogram/schema.d.ts.map +1 -1
  156. package/dist/chart-types/histogram/schema.js +13 -0
  157. package/dist/chart-types/histogram/schema.js.map +1 -1
  158. package/dist/chart-types/histogram/spec.d.ts +1 -1
  159. package/dist/chart-types/histogram/spec.d.ts.map +1 -1
  160. package/dist/chart-types/histogram/spec.js +4 -3
  161. package/dist/chart-types/histogram/spec.js.map +1 -1
  162. package/dist/chart-types/histogram/tool.d.ts +7 -9
  163. package/dist/chart-types/histogram/tool.d.ts.map +1 -1
  164. package/dist/chart-types/histogram/tool.js +17 -7
  165. package/dist/chart-types/histogram/tool.js.map +1 -1
  166. package/dist/chart-types/index.d.ts +45 -3
  167. package/dist/chart-types/index.d.ts.map +1 -1
  168. package/dist/chart-types/index.js +8 -2
  169. package/dist/chart-types/index.js.map +1 -1
  170. package/dist/chart-types/line-chart/LineChartSettings.d.ts.map +1 -1
  171. package/dist/chart-types/line-chart/LineChartSettings.js +3 -1
  172. package/dist/chart-types/line-chart/LineChartSettings.js.map +1 -1
  173. package/dist/chart-types/line-chart/definition.d.ts.map +1 -1
  174. package/dist/chart-types/line-chart/definition.js +7 -0
  175. package/dist/chart-types/line-chart/definition.js.map +1 -1
  176. package/dist/chart-types/line-chart/schema.d.ts +5 -0
  177. package/dist/chart-types/line-chart/schema.d.ts.map +1 -1
  178. package/dist/chart-types/line-chart/schema.js +2 -0
  179. package/dist/chart-types/line-chart/schema.js.map +1 -1
  180. package/dist/chart-types/line-chart/tool.d.ts +5 -9
  181. package/dist/chart-types/line-chart/tool.d.ts.map +1 -1
  182. package/dist/chart-types/line-chart/tool.js +16 -8
  183. package/dist/chart-types/line-chart/tool.js.map +1 -1
  184. package/dist/chart-types/list-panels-tool.d.ts +35 -0
  185. package/dist/chart-types/list-panels-tool.d.ts.map +1 -0
  186. package/dist/chart-types/list-panels-tool.js +66 -0
  187. package/dist/chart-types/list-panels-tool.js.map +1 -0
  188. package/dist/chart-types/profiler-tool.d.ts +40 -0
  189. package/dist/chart-types/profiler-tool.d.ts.map +1 -0
  190. package/dist/chart-types/profiler-tool.js +73 -0
  191. package/dist/chart-types/profiler-tool.js.map +1 -0
  192. package/dist/chart-types/remove-panel-tool.d.ts +31 -0
  193. package/dist/chart-types/remove-panel-tool.d.ts.map +1 -0
  194. package/dist/chart-types/remove-panel-tool.js +55 -0
  195. package/dist/chart-types/remove-panel-tool.js.map +1 -0
  196. package/dist/chart-types/text-panel-tool.d.ts +42 -0
  197. package/dist/chart-types/text-panel-tool.d.ts.map +1 -0
  198. package/dist/chart-types/text-panel-tool.js +71 -0
  199. package/dist/chart-types/text-panel-tool.js.map +1 -0
  200. package/dist/chart-types/tool-helpers.d.ts +44 -0
  201. package/dist/chart-types/tool-helpers.d.ts.map +1 -0
  202. package/dist/chart-types/tool-helpers.js +129 -0
  203. package/dist/chart-types/tool-helpers.js.map +1 -0
  204. package/dist/chart-types/tool-schemas.d.ts +1 -0
  205. package/dist/chart-types/tool-schemas.d.ts.map +1 -1
  206. package/dist/chart-types/tool-schemas.js +5 -1
  207. package/dist/chart-types/tool-schemas.js.map +1 -1
  208. package/dist/dashboard/MosaicDashboard.d.ts +5 -2
  209. package/dist/dashboard/MosaicDashboard.d.ts.map +1 -1
  210. package/dist/dashboard/MosaicDashboard.js +20 -39
  211. package/dist/dashboard/MosaicDashboard.js.map +1 -1
  212. package/dist/dashboard/MosaicDashboardContext.d.ts +2 -0
  213. package/dist/dashboard/MosaicDashboardContext.d.ts.map +1 -1
  214. package/dist/dashboard/MosaicDashboardContext.js.map +1 -1
  215. package/dist/dashboard/MosaicDashboardEmptyState.d.ts.map +1 -1
  216. package/dist/dashboard/MosaicDashboardEmptyState.js +8 -44
  217. package/dist/dashboard/MosaicDashboardEmptyState.js.map +1 -1
  218. package/dist/dashboard/MosaicDashboardPanel.d.ts.map +1 -1
  219. package/dist/dashboard/MosaicDashboardPanel.js +2 -5
  220. package/dist/dashboard/MosaicDashboardPanel.js.map +1 -1
  221. package/dist/dashboard/MosaicDashboardPanelHeader.d.ts +2 -2
  222. package/dist/dashboard/MosaicDashboardPanelHeader.d.ts.map +1 -1
  223. package/dist/dashboard/MosaicDashboardPanelHeader.js +2 -2
  224. package/dist/dashboard/MosaicDashboardPanelHeader.js.map +1 -1
  225. package/dist/dashboard/MosaicDashboardPanels.d.ts.map +1 -1
  226. package/dist/dashboard/MosaicDashboardPanels.js +3 -2
  227. package/dist/dashboard/MosaicDashboardPanels.js.map +1 -1
  228. package/dist/dashboard/MosaicDashboardSlice.d.ts +185 -107
  229. package/dist/dashboard/MosaicDashboardSlice.d.ts.map +1 -1
  230. package/dist/dashboard/MosaicDashboardSlice.js +80 -57
  231. package/dist/dashboard/MosaicDashboardSlice.js.map +1 -1
  232. package/dist/dashboard/action-types.d.ts +25 -0
  233. package/dist/dashboard/action-types.d.ts.map +1 -0
  234. package/dist/dashboard/action-types.js +5 -0
  235. package/dist/dashboard/action-types.js.map +1 -0
  236. package/dist/dashboard/core-types.d.ts +26 -0
  237. package/dist/dashboard/core-types.d.ts.map +1 -0
  238. package/dist/dashboard/core-types.js +21 -0
  239. package/dist/dashboard/core-types.js.map +1 -0
  240. package/dist/dashboard/dashboard-types.d.ts +491 -0
  241. package/dist/dashboard/dashboard-types.d.ts.map +1 -0
  242. package/dist/dashboard/dashboard-types.js +54 -0
  243. package/dist/dashboard/dashboard-types.js.map +1 -0
  244. package/dist/dashboard/defaultPanelActions.d.ts +3 -0
  245. package/dist/dashboard/defaultPanelActions.d.ts.map +1 -0
  246. package/dist/dashboard/defaultPanelActions.js +9 -0
  247. package/dist/dashboard/defaultPanelActions.js.map +1 -0
  248. package/dist/dashboard/defaultPanelRenderers.d.ts.map +1 -1
  249. package/dist/dashboard/defaultPanelRenderers.js +1 -1
  250. package/dist/dashboard/defaultPanelRenderers.js.map +1 -1
  251. package/dist/dashboard/initial-state/BuildDashboardManuallyPanel.d.ts +6 -0
  252. package/dist/dashboard/initial-state/BuildDashboardManuallyPanel.d.ts.map +1 -0
  253. package/dist/dashboard/initial-state/BuildDashboardManuallyPanel.js +46 -0
  254. package/dist/dashboard/initial-state/BuildDashboardManuallyPanel.js.map +1 -0
  255. package/dist/dashboard/initial-state/BuildDashboardWithAIPanel.d.ts +7 -0
  256. package/dist/dashboard/initial-state/BuildDashboardWithAIPanel.d.ts.map +1 -0
  257. package/dist/dashboard/initial-state/BuildDashboardWithAIPanel.js +29 -0
  258. package/dist/dashboard/initial-state/BuildDashboardWithAIPanel.js.map +1 -0
  259. package/dist/dashboard/initial-state/MosaicDashboardInitialState.d.ts +6 -0
  260. package/dist/dashboard/initial-state/MosaicDashboardInitialState.d.ts.map +1 -0
  261. package/dist/dashboard/initial-state/MosaicDashboardInitialState.js +9 -0
  262. package/dist/dashboard/initial-state/MosaicDashboardInitialState.js.map +1 -0
  263. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.d.ts +7 -0
  264. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.d.ts.map +1 -0
  265. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.js +12 -0
  266. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.js.map +1 -0
  267. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.d.ts +7 -0
  268. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.d.ts.map +1 -0
  269. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.js +36 -0
  270. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.js.map +1 -0
  271. package/dist/dashboard/toolbar/MosaicDashboardToolbar.d.ts.map +1 -0
  272. package/dist/dashboard/toolbar/MosaicDashboardToolbar.js +15 -0
  273. package/dist/dashboard/toolbar/MosaicDashboardToolbar.js.map +1 -0
  274. package/dist/dashboard/useAddPanelActions.d.ts +10 -0
  275. package/dist/dashboard/useAddPanelActions.d.ts.map +1 -0
  276. package/dist/dashboard/useAddPanelActions.js +26 -0
  277. package/dist/dashboard/useAddPanelActions.js.map +1 -0
  278. package/dist/dashboard/useMosaicDashboardAddPanelActionContext.d.ts +3 -0
  279. package/dist/dashboard/useMosaicDashboardAddPanelActionContext.d.ts.map +1 -0
  280. package/dist/dashboard/useMosaicDashboardAddPanelActionContext.js +18 -0
  281. package/dist/dashboard/useMosaicDashboardAddPanelActionContext.js.map +1 -0
  282. package/dist/dashboard/useSelectedOrFirstTable.d.ts +10 -0
  283. package/dist/dashboard/useSelectedOrFirstTable.d.ts.map +1 -0
  284. package/dist/dashboard/useSelectedOrFirstTable.js +25 -0
  285. package/dist/dashboard/useSelectedOrFirstTable.js.map +1 -0
  286. package/dist/dashboard/useTablesWithColumns.d.ts +9 -0
  287. package/dist/dashboard/useTablesWithColumns.d.ts.map +1 -0
  288. package/dist/dashboard/useTablesWithColumns.js +13 -0
  289. package/dist/dashboard/useTablesWithColumns.js.map +1 -0
  290. package/dist/index.d.ts +25 -4
  291. package/dist/index.d.ts.map +1 -1
  292. package/dist/index.js +22 -2
  293. package/dist/index.js.map +1 -1
  294. package/dist/profiler/MosaicDashboardProfilerPanelRenderer.d.ts +2 -1
  295. package/dist/profiler/MosaicDashboardProfilerPanelRenderer.d.ts.map +1 -1
  296. package/dist/profiler/MosaicDashboardProfilerPanelRenderer.js +3 -3
  297. package/dist/profiler/MosaicDashboardProfilerPanelRenderer.js.map +1 -1
  298. package/dist/profiler/addProfilerPanelAction.d.ts +3 -0
  299. package/dist/profiler/addProfilerPanelAction.d.ts.map +1 -0
  300. package/dist/profiler/addProfilerPanelAction.js +9 -0
  301. package/dist/profiler/addProfilerPanelAction.js.map +1 -0
  302. package/dist/text/MosaicDashboardTextRenderer.d.ts +2 -1
  303. package/dist/text/MosaicDashboardTextRenderer.d.ts.map +1 -1
  304. package/dist/text/MosaicDashboardTextRenderer.js +4 -4
  305. package/dist/text/MosaicDashboardTextRenderer.js.map +1 -1
  306. package/dist/text/addTextPanelAction.d.ts +3 -0
  307. package/dist/text/addTextPanelAction.d.ts.map +1 -0
  308. package/dist/text/addTextPanelAction.js +9 -0
  309. package/dist/text/addTextPanelAction.js.map +1 -0
  310. package/dist/useMosaicClient.d.ts +4 -0
  311. package/dist/useMosaicClient.d.ts.map +1 -1
  312. package/dist/useMosaicClient.js +33 -3
  313. package/dist/useMosaicClient.js.map +1 -1
  314. package/dist/useVgPlotChartError.d.ts +13 -0
  315. package/dist/useVgPlotChartError.d.ts.map +1 -0
  316. package/dist/useVgPlotChartError.js +18 -0
  317. package/dist/useVgPlotChartError.js.map +1 -0
  318. package/dist/useVgPlotChartRender.d.ts +24 -0
  319. package/dist/useVgPlotChartRender.d.ts.map +1 -0
  320. package/dist/useVgPlotChartRender.js +152 -0
  321. package/dist/useVgPlotChartRender.js.map +1 -0
  322. package/dist/useVgPlotChartRetention.d.ts +21 -0
  323. package/dist/useVgPlotChartRetention.d.ts.map +1 -0
  324. package/dist/useVgPlotChartRetention.js +63 -0
  325. package/dist/useVgPlotChartRetention.js.map +1 -0
  326. package/dist/wrapCoordinatorWithValidation.d.ts +11 -0
  327. package/dist/wrapCoordinatorWithValidation.d.ts.map +1 -0
  328. package/dist/wrapCoordinatorWithValidation.js +23 -0
  329. package/dist/wrapCoordinatorWithValidation.js.map +1 -0
  330. package/package.json +31 -13
  331. package/dist/dashboard/MosaicDashboardToolbar.d.ts.map +0 -1
  332. package/dist/dashboard/MosaicDashboardToolbar.js +0 -86
  333. package/dist/dashboard/MosaicDashboardToolbar.js.map +0 -1
  334. /package/dist/dashboard/{MosaicDashboardToolbar.d.ts → toolbar/MosaicDashboardToolbar.d.ts} +0 -0
package/dist/ai.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Reusable AI helpers for Mosaic dashboards.\n *\n * Host apps provide a narrow adapter for their store/artifact model; Mosaic owns\n * the dashboard tool behavior and prompts.\n *\n * @packageDocumentation\n */\n\nimport {\n type LanguageModel,\n type Tool,\n ToolLoopAgent,\n stepCountIs,\n tool,\n} from 'ai';\nimport {z} from 'zod';\nimport {\n createChartTools,\n createDefaultChartTypes,\n createListPanelsTool,\n createProfilerTool,\n createRemovePanelTool,\n createTextPanelTool,\n type ChartBuilderColumn,\n type ChartToolExecutionContext,\n type DashboardToolDeps,\n type PanelPatch,\n type ChartTypeDefinition,\n} from './chart-types';\nimport type {\n MosaicDashboardEntry,\n MosaicDashboardPanelConfig,\n} from './dashboard/dashboard-types';\nimport type {MosaicDashboardLayoutType} from './dashboard/core-types';\nimport {\n DEFAULT_CHART_MAX_DATA_POINTS,\n type ChartRuntimeIssue,\n} from './chart-runtime';\n\nexport type {ChartToolExecutionContext} from './chart-types';\n\nexport type DashboardAiStore<TState> = {\n getState: () => TState;\n};\n\nexport type DashboardAiTable = {\n tableName: string;\n columns?: ChartBuilderColumn[];\n rowCount?: number;\n};\n\nexport type DashboardAiAdapter<TState> = {\n getTables: (state: TState) => DashboardAiTable[];\n hasRunContext?: (\n state: TState,\n context?: ChartToolExecutionContext,\n ) => boolean;\n resolveContextDashboardArtifactId?: (\n state: TState,\n context?: ChartToolExecutionContext,\n ) => string | undefined;\n makeDashboardPrimaryForRun?: (\n state: TState,\n dashboardId: string,\n context?: ChartToolExecutionContext,\n ) => void;\n getCurrentDashboardArtifactId: (state: TState) => string | undefined;\n createDashboardArtifact: (\n state: TState,\n title?: string,\n layoutType?: MosaicDashboardLayoutType,\n ) => string;\n isDashboardArtifact: (state: TState, artifactId: string) => boolean;\n setCurrentArtifact: (state: TState, artifactId: string) => void;\n ensureDashboard: (\n state: TState,\n dashboardId: string,\n title?: string,\n layoutType?: MosaicDashboardLayoutType,\n ) => void;\n getDashboard: (\n state: TState,\n dashboardId: string,\n ) => MosaicDashboardEntry | undefined;\n getPanelIssue?: (\n state: TState,\n dashboardId: string,\n panelId: string,\n ) => ChartRuntimeIssue | undefined;\n setSelectedTable: (\n state: TState,\n dashboardId: string,\n tableName: string,\n ) => void;\n addPanel: (\n state: TState,\n dashboardId: string,\n panel: MosaicDashboardPanelConfig,\n ) => string;\n updatePanel: (\n state: TState,\n dashboardId: string,\n panelId: string,\n patch: Partial<PanelPatch>,\n ) => void;\n removePanel: (state: TState, dashboardId: string, panelId: string) => void;\n};\n\nexport type CreateDashboardToolDepsOptions<TState> = {\n store: DashboardAiStore<TState>;\n adapter: DashboardAiAdapter<TState>;\n};\n\nexport type CreateDashboardAiToolsOptions<TState> =\n CreateDashboardToolDepsOptions<TState> & {\n chartTypes?: ChartTypeDefinition<any>[];\n /**\n * Host-provided dashboard tools keyed by their registered tool name.\n * Register geospatial map tools under MAP_TOOL_KEY so prompts and tools\n * stay in sync.\n */\n extraTools?: (deps: DashboardToolDeps) => Record<string, Tool>;\n };\n\nexport type DashboardAgentToolCall = {\n toolName: string;\n};\n\nexport type DashboardAgentRunResult = {\n finalOutput?: string;\n agentToolCalls?: DashboardAgentToolCall[];\n};\n\nexport type DashboardAgentResult = {\n success: boolean;\n finalOutput: string;\n dashboardId: string;\n error?: string;\n metadata?: {\n tableName: string;\n panelsCreated: number;\n stepsExecuted: number;\n queriesRun: number;\n };\n};\n\nexport type CreateDashboardAgentToolOptions<TState> =\n CreateDashboardToolDepsOptions<TState> & {\n getModel: (args: {state: TState}) => LanguageModel;\n createQueryTools?: (args: {store: DashboardAiStore<TState>}) => {\n query: Tool;\n };\n runSubAgent: (args: {\n agent: ToolLoopAgent<any, any, any>;\n prompt: string;\n store: DashboardAiStore<TState>;\n parentToolCallId: string;\n abortSignal?: AbortSignal;\n }) => Promise<DashboardAgentRunResult>;\n instructions?: string;\n chartTypes?: ChartTypeDefinition<any>[];\n /**\n * Host-provided dashboard tools keyed by their registered tool name.\n * Register geospatial map tools under MAP_TOOL_KEY so prompts and tools\n * stay in sync.\n */\n extraTools?: (deps: DashboardToolDeps) => Record<string, Tool>;\n };\n\nexport const MAP_TOOL_KEY = 'create_dashboard_map';\n\nexport const DASHBOARD_AI_INSTRUCTIONS = `\nDashboard authoring:\n\n**When to use dashboard_agent vs individual tools:**\n- Use \\`dashboard_agent\\` for exploratory requests that require data analysis and discovery:\n - \"analyze the earthquakes dataset\"\n - \"create insights dashboard for sales data\"\n - \"find interesting patterns in customer behavior\"\n - Any request asking to \"discover\", \"explore\", \"find insights\", or \"analyze\"\n- Use individual chart tools for direct, specific requests:\n - \"create histogram of magnitude with 20 bins\"\n - \"add a line chart showing sales over time\"\n - \"update the histogram to use 30 bins\"\n\n**Individual dashboard chart tools:**\n- create_dashboard_histogram, create_dashboard_line_chart, create_dashboard_box_plot, create_dashboard_bubble_chart, create_dashboard_count_plot, create_dashboard_heatmap\n- Each chart type has its own tool with specific parameters.\n- For line charts with aggregation, use yFields array with {field: string, aggregate: \"sum\"|\"avg\"|\"min\"|\"max\"}.\n- Set xInterval for temporal binning (year, month, day, hour, etc.).\n- If the host app provides \\`${MAP_TOOL_KEY}\\`, use it for map/geospatial/location requests and tables with longitude/latitude or geometry columns. Author its config as native Deck JSON with layer classes in \\`spec.layers[].@@type\\`, dataset bindings in \\`_sqlroomsBinding.dataset\\`, and table/query sources in \\`config.datasets\\`. For data-driven map colors, use color accessors such as \\`getFillColor\\`, \\`getLineColor\\`, \\`getColor\\`, \\`getSourceColor\\`, or \\`getTargetColor\\` with \\`{\"@@function\":\"colorScale\", \"field\":\"...\", \"type\":\"sequential\"|\"diverging\"|\"quantize\"|\"quantile\"|\"categorical\", \"scheme\":\"Viridis\", \"domain\":\"auto\"}\\`.\n- Use \\`set_dashboard_vgplot\\` with complete JSON only when no chart tool fits your needs.\n- When calling \\`create_dashboard_artifact\\`, \\`layoutType\\` may be \\`grid\\` or \\`dock\\`; omitted values default to \\`grid\\`.\n- Ensure specs are valid JSON objects compatible with https://idl.uw.edu/mosaic/schema/latest.json.\n- \\`list_dashboard_panels\\` includes runtime issues when a chart failed. Use those issues to repair panels in place: convert too-large bubble charts to heatmaps, add \\`xInterval\\` to too-large line charts, and inspect columns/settings for SQL errors.\n`;\n\nexport const DASHBOARD_AGENT_INSTRUCTIONS = `You are a dashboard builder agent that creates and modifies interactive data dashboards.\n\n## Your Role\n\nYou analyze data and create insightful dashboards with multiple visualizations (charts, profilers, text annotations). You can handle both direct requests (\"create histogram of magnitude\") and exploratory requests (\"find interesting insights in earthquakes dataset\").\n\n## Available Tools\n\n**Chart Tools:**\n- create_dashboard_histogram - distribution of numeric values (always safe, aggregates automatically)\n- create_dashboard_line_chart - trends over time or ordered variable (use with aggregations for >10k rows)\n- create_dashboard_box_plot - compare distributions across categories\n- create_dashboard_bubble_chart - relationship between two numeric columns (avoid for >10k rows, use heatmap instead)\n- create_dashboard_count_plot - frequency of categorical values (always safe, aggregates automatically)\n- create_dashboard_heatmap - density/patterns across two dimensions (preferred for large datasets)\n\n**Panel Tools:**\n- create_dashboard_profiler - table statistics and column summaries\n- create_dashboard_text_panel - markdown annotations and insights\n- ${MAP_TOOL_KEY} - native Deck JSON geospatial map panel (if provided by the host app)\n\n**Data Tools:**\n- query - execute SQL queries for data exploration\n\n**Management Tools:**\n- list_dashboard_panels - discover panel IDs and what's on the dashboard\n- remove_dashboard_panel - delete a panel by ID\n\n## Workflows\n\n### Direct Requests\nWhen user provides specific instructions:\n1. Parse intent -> identify chart type\n2. Call appropriate tool with settings\n3. Done\n\nExample: \"create histogram of magnitude with 20 bins\"\n-> create_dashboard_histogram(settings: {field: \"magnitude\", bins: 20})\n\n### Exploratory Requests\nWhen user asks to discover insights:\n1. Use query tool to explore data:\n - Start with simple stats: COUNT, MIN, MAX, AVG, DISTINCT (check total row count!)\n - Check distributions: GROUP BY with COUNT\n - Find correlations: CORR(col1, col2)\n - Identify outliers and patterns\n2. Create targeted charts based on discoveries:\n - If dataset has >10k rows: avoid bubble charts and unaggregated line charts\n - Use histogram, count plot, heatmap, or aggregated visualizations instead\n3. **ALWAYS create ONE text panel** with a concise summary of ALL key findings\n4. Stop when dashboard tells coherent story\n\n**CRITICAL:**\n- Create exactly ONE text panel with insights summary (can be first, last, or in between)\n- Insights should be concise but USEFUL - each bullet should provide actionable or interesting information\n- Include specific numbers, percentages, and comparisons that tell the story\n- Use query tool to discover actual patterns, don't make vague statements\n- Focus on 3-5 most important findings that answer \"what's interesting about this data?\"\n- Do NOT create additional text panels unless absolutely necessary\n\n**Good insight examples:**\n- \"Peak activity between 4-5 magnitude (62% of events)\" - specific, actionable\n- \"Strong correlation (0.73) between depth and magnitude suggests tectonic pattern\" - specific with interpretation\n- \"California accounts for 3,234/5,234 events (62%), followed by Japan (18%)\" - specific comparison\n\n**Bad insight examples:**\n- \"Dataset has data\" - useless\n- \"Various magnitudes observed\" - vague\n- \"Interesting patterns found\" - not specific\n\n### Update Requests\nTo update existing panels:\n1. Call list_dashboard_panels() to discover panel IDs\n2. Call appropriate create tool with panelId parameter\n3. Panel is updated in-place\n\n## Query Guidelines\n\n**Keep queries simple:**\n- Start with aggregations: COUNT, MIN, MAX, AVG, SUM\n- Use GROUP BY for breakdowns and distributions\n- Use LIMIT to control result size (especially with GROUP BY)\n- Avoid expensive operations: large JOINs, full table scans\n\n**Exploration strategy:**\n- Limit exploration to 5-10 queries per request\n- Start broad (overall stats), then narrow (specific patterns)\n- Stop when you have enough insights for a coherent dashboard\n\n## Best Practices\n\n- **ONE text panel for exploratory requests:** Always create exactly ONE text panel with insights summary when exploring data. It can be created at any point in the workflow.\n- **Make insights useful, not just concise:** Each bullet should include specific numbers, percentages, or patterns discovered through queries. Avoid vague statements.\n- **Use queries to find real insights:** Run queries to discover actual patterns (correlations, distributions, outliers, top values). Don't make assumptions.\n- **No additional text panels:** Do NOT create multiple text panels. All insights go in the single summary panel.\n- **Avoid unaggregated charts for large datasets:** For datasets >10k rows, DO NOT use bubble charts or line charts without aggregations. Use aggregated alternatives instead:\n - For scatter/bubble plots: use heatmap or binned aggregations\n - For line charts: use GROUP BY with time buckets or aggregations\n - Histograms and count plots are always safe (they aggregate automatically)\n- **Check before update:** Always call list_dashboard_panels before updating/removing panels\n- **Repair broken charts:** list_dashboard_panels may return an \\`issue\\` per panel. For \\`too-much-data\\`, switch to an aggregated chart or add aggregation. For \\`sql-error\\`, inspect available columns/types and update the broken panel in place.\n- **Validate columns:** Query tools will validate column existence and types\n- **Handle errors gracefully:** If a query or chart creation fails, try alternative approach\n- **Use markdown formatting:** Use headings (##), bullet lists (-), and **bold** in text panels for readability`;\n\nconst DashboardCreateArtifactToolParameters = z.object({\n title: z.string().optional(),\n layoutType: z\n .enum(['dock', 'grid'])\n .optional()\n .default('grid')\n .describe('Dashboard layout node type to use at creation time.'),\n});\ntype DashboardCreateArtifactToolParameters = z.infer<\n typeof DashboardCreateArtifactToolParameters\n>;\n\nconst DashboardAgentInputSchema = z.object({\n reasoning: z\n .string()\n .describe('Reasoning for why the dashboard agent is being called'),\n prompt: z\n .string()\n .describe('The exploratory data analysis prompt for the agent'),\n tableName: z\n .string()\n .describe('REQUIRED: The name of the table/dataset to analyze.'),\n dashboardTitle: z\n .string()\n .optional()\n .describe('Optional title for the dashboard artifact'),\n maxSteps: z\n .number()\n .optional()\n .default(20)\n .describe('Maximum exploration steps (default: 20, range: 5-50)'),\n temperature: z\n .number()\n .optional()\n .default(0.7)\n .describe(\n 'Model temperature for creativity vs consistency (default: 0.7, range: 0.0-1.0)',\n ),\n});\ntype DashboardAgentInputSchema = z.infer<typeof DashboardAgentInputSchema>;\n\nclass DashboardAgentException extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'DashboardAgentException';\n }\n}\n\nfunction getTablesWithColumns<TState>(\n state: TState,\n adapter: DashboardAiAdapter<TState>,\n): DashboardAiTable[] {\n return adapter\n .getTables(state)\n .filter((table) => table.columns && table.columns.length > 0);\n}\n\nfunction findTableColumns<TState>(\n state: TState,\n adapter: DashboardAiAdapter<TState>,\n tableName: string,\n): ChartBuilderColumn[] | null {\n const table = getTablesWithColumns(state, adapter).find(\n (candidate) => candidate.tableName === tableName,\n );\n if (!table?.columns) return null;\n return table.columns.map((column) => ({\n name: column.name,\n type: column.type,\n }));\n}\n\nfunction formatAvailableTables(tables: DashboardAiTable[]): string {\n return tables.map((table) => table.tableName).join(', ') || '(none)';\n}\n\nexport function createDashboardToolDeps<TState>({\n store,\n adapter,\n}: CreateDashboardToolDepsOptions<TState>): DashboardToolDeps {\n const resolveArtifact = (\n artifactId?: string,\n createIfMissing?: boolean,\n context?: ChartToolExecutionContext,\n ): string => {\n const state = store.getState();\n const hasRunContext = adapter.hasRunContext?.(state, context) ?? false;\n const contextDashboardArtifactId =\n adapter.resolveContextDashboardArtifactId?.(state, context);\n let targetArtifactId =\n artifactId ??\n contextDashboardArtifactId ??\n (!hasRunContext\n ? adapter.getCurrentDashboardArtifactId(state)\n : undefined);\n\n if (!targetArtifactId && hasRunContext) {\n throw new Error(\n 'No primary dashboard artifact is available in the current run context. Pass artifactId explicitly or use set_primary_context_artifact first.',\n );\n }\n\n if (!targetArtifactId && createIfMissing) {\n targetArtifactId = adapter.createDashboardArtifact(\n state,\n undefined,\n 'grid',\n );\n adapter.setCurrentArtifact(state, targetArtifactId);\n adapter.makeDashboardPrimaryForRun?.(state, targetArtifactId, context);\n }\n\n if (!targetArtifactId) {\n throw new Error(\n 'No dashboard artifact is available. Set createArtifactIfMissing=true or create one first.',\n );\n }\n\n if (!adapter.isDashboardArtifact(state, targetArtifactId)) {\n throw new Error(\n `Artifact \"${targetArtifactId}\" is not a dashboard artifact.`,\n );\n }\n\n adapter.ensureDashboard(state, targetArtifactId);\n return targetArtifactId;\n };\n\n const resolveTable = (artifactId: string, tableName?: string) => {\n const state = store.getState();\n const tables = getTablesWithColumns(state, adapter);\n const dashboard = adapter.getDashboard(state, artifactId);\n const explicitTableName = tableName?.trim() || undefined;\n\n if (explicitTableName) {\n const columns = findTableColumns(state, adapter, explicitTableName);\n if (!columns) {\n throw new Error(\n `Unknown table \"${explicitTableName}\". Available tables: ${formatAvailableTables(tables)}.`,\n );\n }\n adapter.setSelectedTable(state, artifactId, explicitTableName);\n return {tableName: explicitTableName, columns};\n }\n\n if (dashboard?.selectedTable) {\n const columns = findTableColumns(state, adapter, dashboard.selectedTable);\n if (columns) {\n return {tableName: dashboard.selectedTable, columns};\n }\n }\n\n if (tables.length === 1) {\n const onlyTable = tables[0];\n if (!onlyTable?.columns) {\n throw new Error('The only available table has no column metadata.');\n }\n adapter.setSelectedTable(state, artifactId, onlyTable.tableName);\n return {\n tableName: onlyTable.tableName,\n columns: onlyTable.columns.map((column) => ({\n name: column.name,\n type: column.type,\n })),\n };\n }\n\n throw new Error(\n `No dashboard table is selected. Provide tableName using one of: ${formatAvailableTables(tables)}.`,\n );\n };\n\n const deps: DashboardToolDeps = {\n maxDataPoints: DEFAULT_CHART_MAX_DATA_POINTS,\n resolveArtifact,\n resolveTable,\n addPanel: (dashboardId, panel) => {\n const state = store.getState();\n return adapter.addPanel(state, dashboardId, panel);\n },\n updatePanel: (dashboardId, panelId, patch) => {\n const state = store.getState();\n adapter.updatePanel(state, dashboardId, panelId, patch);\n },\n getDashboard: (dashboardId) => {\n const state = store.getState();\n return adapter.getDashboard(state, dashboardId);\n },\n removePanel: (dashboardId, panelId) => {\n const state = store.getState();\n adapter.removePanel(state, dashboardId, panelId);\n },\n setCurrentArtifact: (artifactId) => {\n const state = store.getState();\n adapter.setCurrentArtifact(state, artifactId);\n },\n };\n\n if (adapter.getPanelIssue) {\n deps.getPanelIssue = (dashboardId, panelId) => {\n const state = store.getState();\n return adapter.getPanelIssue?.(state, dashboardId, panelId);\n };\n }\n\n return deps;\n}\n\nexport function createDashboardAiTools<TState>({\n store,\n adapter,\n chartTypes,\n extraTools,\n}: CreateDashboardAiToolsOptions<TState>): Record<string, Tool> {\n const deps = createDashboardToolDeps({store, adapter});\n const resolvedChartTypes =\n chartTypes ?? createDefaultChartTypes({includeCustomSpec: false});\n const chartTools = createChartTools(resolvedChartTypes, deps);\n const hostTools = extraTools?.(deps) ?? {};\n\n const builtInTools = {\n create_dashboard_artifact: tool({\n description:\n 'Create a new dashboard artifact with a dock or grid layout and make it the active artifact. Use when no dashboard artifact exists yet.',\n inputSchema: DashboardCreateArtifactToolParameters,\n execute: async (\n params: DashboardCreateArtifactToolParameters,\n context,\n ) => {\n const state = store.getState();\n const artifactId = adapter.createDashboardArtifact(\n state,\n params.title,\n params.layoutType,\n );\n adapter.setCurrentArtifact(state, artifactId);\n adapter.makeDashboardPrimaryForRun?.(state, artifactId, context);\n return {\n llmResult: {\n success: true,\n details: `Created dashboard artifact \"${artifactId}\".`,\n data: {artifactId},\n },\n };\n },\n }),\n ...chartTools,\n create_dashboard_profiler: createProfilerTool(deps),\n create_dashboard_text_panel: createTextPanelTool(deps),\n list_dashboard_panels: createListPanelsTool(deps),\n remove_dashboard_panel: createRemovePanelTool(deps),\n };\n\n for (const key of Object.keys(hostTools)) {\n if (key in builtInTools) {\n throw new Error(\n `Dashboard extraTools cannot override built-in tool \"${key}\". Register the host tool under a unique key.`,\n );\n }\n }\n\n return {\n ...builtInTools,\n ...hostTools,\n };\n}\n\nfunction buildAgentPrompt<TState>(\n userPrompt: string,\n tableName: string,\n state: TState,\n adapter: DashboardAiAdapter<TState>,\n): string {\n const table = adapter\n .getTables(state)\n .find((candidate) => candidate.tableName === tableName);\n const columnNames =\n table?.columns?.map((column) => column.name).join(', ') || 'unknown';\n const rowInfo =\n table?.rowCount !== undefined ? `Approximate rows: ${table.rowCount}` : '';\n\n return `Analyze the \"${tableName}\" table.\n\nTable info:\n- Columns: ${columnNames}${rowInfo ? `\\n- ${rowInfo}` : ''}\n\nUser request: ${userPrompt}\n\nFocus on discovering meaningful patterns and creating visualizations that tell a clear story.`;\n}\n\nfunction validateTableExists<TState>(\n state: TState,\n adapter: DashboardAiAdapter<TState>,\n tableName: string,\n): void {\n const tables = adapter.getTables(state);\n const table = tables.find((candidate) => candidate.tableName === tableName);\n if (!table) {\n throw new DashboardAgentException(\n `Table \"${tableName}\" not found. Available tables: ${formatAvailableTables(tables)}`,\n );\n }\n}\n\nfunction getOrCreateDashboard<TState>(\n state: TState,\n adapter: DashboardAiAdapter<TState>,\n tableName: string,\n dashboardTitle?: string,\n): string {\n const dashboardId = adapter.getCurrentDashboardArtifactId(state);\n if (dashboardId) {\n adapter.ensureDashboard(state, dashboardId);\n return dashboardId;\n }\n\n const suggestedTitle =\n dashboardTitle ||\n `${tableName.charAt(0).toUpperCase() + tableName.slice(1)} Insights`;\n const newDashboardId = adapter.createDashboardArtifact(\n state,\n suggestedTitle,\n 'grid',\n );\n adapter.setCurrentArtifact(state, newDashboardId);\n return newDashboardId;\n}\n\nfunction calculateAgentMetadata<TState>(\n state: TState,\n adapter: DashboardAiAdapter<TState>,\n dashboardId: string,\n tableName: string,\n agentToolCalls: DashboardAgentToolCall[],\n): DashboardAgentResult['metadata'] {\n const dashboard = adapter.getDashboard(state, dashboardId);\n return {\n tableName,\n panelsCreated: dashboard?.panels?.length || 0,\n stepsExecuted: agentToolCalls.length,\n queriesRun: agentToolCalls.filter((call) => call.toolName === 'query')\n .length,\n };\n}\n\nexport function createDashboardAgentTool<TState>(\n options: CreateDashboardAgentToolOptions<TState>,\n): Tool {\n const {store, adapter} = options;\n\n return tool({\n description: `An AI agent that explores datasets and creates comprehensive dashboards with multiple visualizations.\n\nUse this for exploratory data analysis tasks like \"analyze the earthquakes dataset\" or \"create insights dashboard for sales data\".\n\nThe agent will query the data, discover patterns, and create charts, profilers, and text panels with findings.\n\nFor simple tasks like \"create a histogram of magnitude\", use the individual chart tools instead.\n\nIMPORTANT: Always provide tableName parameter when the user mentions a specific dataset.`,\n inputSchema: DashboardAgentInputSchema,\n execute: async (params, toolOptions): Promise<DashboardAgentResult> => {\n const {prompt, tableName, dashboardTitle, maxSteps, temperature} = params;\n\n let dashboardId = '';\n\n try {\n const state = store.getState();\n validateTableExists(state, adapter, tableName);\n\n dashboardId = getOrCreateDashboard(\n state,\n adapter,\n tableName,\n dashboardTitle,\n );\n adapter.setSelectedTable(state, dashboardId, tableName);\n const queryTools = options.createQueryTools?.({store});\n\n const dashboardAgent = new ToolLoopAgent({\n model: options.getModel({state}),\n tools: {\n ...(queryTools ? {query: queryTools.query} : {}),\n ...createDashboardAiTools({\n store,\n adapter,\n chartTypes: options.chartTypes,\n extraTools: options.extraTools,\n }),\n },\n temperature: Math.max(0, Math.min(1, temperature ?? 0.7)),\n stopWhen: [stepCountIs(Math.max(5, Math.min(50, maxSteps ?? 20)))],\n instructions: options.instructions ?? DASHBOARD_AGENT_INSTRUCTIONS,\n });\n\n const result = await options.runSubAgent({\n agent: dashboardAgent,\n prompt: buildAgentPrompt(prompt, tableName, state, adapter),\n store,\n parentToolCallId: toolOptions?.toolCallId || '',\n abortSignal: toolOptions?.abortSignal,\n });\n\n const finalState = store.getState();\n const metadata = calculateAgentMetadata(\n finalState,\n adapter,\n dashboardId,\n tableName,\n result.agentToolCalls || [],\n );\n\n return {\n success: true,\n finalOutput: result.finalOutput || 'Dashboard created successfully.',\n dashboardId,\n metadata,\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n const friendlyMessage =\n error instanceof DashboardAgentException\n ? errorMessage\n : 'Dashboard agent execution failed.';\n\n return {\n success: false,\n finalOutput: friendlyMessage,\n dashboardId,\n error: errorMessage,\n };\n }\n },\n });\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import { MosaicClient, type Selection } from '@uwdata/mosaic-core';
2
2
  import type { FilterExpr } from '@uwdata/mosaic-sql';
3
+ import { type ChartDataPolicy, type ChartRuntimeIssueContext, type ChartRuntimeIssueReporter } from '../chart-runtime';
3
4
  export type BoxPlotSummaryRow = {
4
5
  category: unknown;
5
6
  count: number;
@@ -23,7 +24,10 @@ export type BoxPlotState = {
23
24
  yBrush?: [number, number];
24
25
  };
25
26
  export type BoxPlotClientOptions = {
27
+ dataPolicy?: ChartDataPolicy | null;
26
28
  onStateChange: (state: BoxPlotState) => void;
29
+ runtimeIssueContext?: ChartRuntimeIssueContext;
30
+ runtimeIssueReporter?: ChartRuntimeIssueReporter;
27
31
  selection: Selection;
28
32
  tableName: string;
29
33
  x: string;
@@ -41,6 +45,9 @@ export declare class BoxPlotClient extends MosaicClient {
41
45
  private readonly x;
42
46
  private readonly y;
43
47
  private readonly selection;
48
+ private readonly dataPolicy?;
49
+ private readonly runtimeIssueContext?;
50
+ private readonly runtimeIssueReporter?;
44
51
  private state;
45
52
  private destroyed;
46
53
  constructor(options: BoxPlotClientOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"BoxPlotClient.d.ts","sourceRoot":"","sources":["../../src/boxplot/BoxPlotClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAEZ,KAAK,SAAS,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAW,UAAU,EAAC,MAAM,oBAAoB,CAAC;AAE7D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC7C,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAkFF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,GAAG,MAAM,CAiFT;AAED,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgC;IAC9D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,KAAK,CAIX;IACF,OAAO,CAAC,SAAS,CAAS;gBAEd,OAAO,EAAE,oBAAoB;IASzC,IAAa,YAAY,IAAI,OAAO,CAEnC;IAED,MAAM,IAAI,MAAM,EAAE;IAIlB,OAAO,CAAC,SAAS;IAQR,YAAY,IAAI,IAAI;IAKpB,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,MAAM;IASzC,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IA0DhC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAKvC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IAStC,KAAK;IAII,OAAO;CAIjB"}
1
+ {"version":3,"file":"BoxPlotClient.d.ts","sourceRoot":"","sources":["../../src/boxplot/BoxPlotClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAEZ,KAAK,SAAS,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAW,UAAU,EAAC,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC/B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACpC,aAAa,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC7C,mBAAmB,CAAC,EAAE,wBAAwB,CAAC;IAC/C,oBAAoB,CAAC,EAAE,yBAAyB,CAAC;IACjD,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAkFF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,GAAG,MAAM,CAiFT;AAED,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgC;IAC9D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAyB;IACrD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAA2B;IAChE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAA4B;IAClE,OAAO,CAAC,KAAK,CAIX;IACF,OAAO,CAAC,SAAS,CAAS;gBAEd,OAAO,EAAE,oBAAoB;IAYzC,IAAa,YAAY,IAAI,OAAO,CAEnC;IAED,MAAM,IAAI,MAAM,EAAE;IAIlB,OAAO,CAAC,SAAS;IAQR,YAAY,IAAI,IAAI;IAKpB,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,MAAM;IASzC,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IA6EhC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAcvC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IAStC,KAAK;IAII,OAAO;CAIjB"}
@@ -1,4 +1,5 @@
1
1
  import { MosaicClient, clauseInterval, } from '@uwdata/mosaic-core';
2
+ import { assertChartDataPolicy, createChartRuntimeIssueFromError, } from '../chart-runtime';
2
3
  function quoteIdentifier(identifier) {
3
4
  return `"${identifier.replace(/"/g, '""')}"`;
4
5
  }
@@ -148,6 +149,9 @@ export class BoxPlotClient extends MosaicClient {
148
149
  x;
149
150
  y;
150
151
  selection;
152
+ dataPolicy;
153
+ runtimeIssueContext;
154
+ runtimeIssueReporter;
151
155
  state = {
152
156
  isLoading: true,
153
157
  outliers: [],
@@ -156,7 +160,10 @@ export class BoxPlotClient extends MosaicClient {
156
160
  destroyed = false;
157
161
  constructor(options) {
158
162
  super(options.selection);
163
+ this.dataPolicy = options.dataPolicy;
159
164
  this.onStateChange = options.onStateChange;
165
+ this.runtimeIssueContext = options.runtimeIssueContext;
166
+ this.runtimeIssueReporter = options.runtimeIssueReporter;
160
167
  this.tableName = options.tableName;
161
168
  this.x = options.x;
162
169
  this.y = options.y;
@@ -188,6 +195,18 @@ export class BoxPlotClient extends MosaicClient {
188
195
  });
189
196
  }
190
197
  queryResult(data) {
198
+ try {
199
+ assertChartDataPolicy(this.dataPolicy, data);
200
+ this.runtimeIssueReporter?.clearIssue();
201
+ }
202
+ catch (error) {
203
+ const normalizedError = error instanceof Error ? error : new Error(String(error));
204
+ if (this.runtimeIssueContext) {
205
+ this.runtimeIssueReporter?.reportIssue(createChartRuntimeIssueFromError(normalizedError, this.runtimeIssueContext, this.dataPolicy));
206
+ }
207
+ this.emitState({ error: normalizedError, isLoading: false });
208
+ return this;
209
+ }
191
210
  const rows = rowsFromQueryResult(data);
192
211
  const summaries = [];
193
212
  const outliers = [];
@@ -242,6 +261,9 @@ export class BoxPlotClient extends MosaicClient {
242
261
  return this;
243
262
  }
244
263
  queryError(error) {
264
+ if (this.runtimeIssueContext) {
265
+ this.runtimeIssueReporter?.reportIssue(createChartRuntimeIssueFromError(error, this.runtimeIssueContext, this.dataPolicy));
266
+ }
245
267
  this.emitState({ error, isLoading: false });
246
268
  return this;
247
269
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BoxPlotClient.js","sourceRoot":"","sources":["../../src/boxplot/BoxPlotClient.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n MosaicClient,\n clauseInterval,\n type Selection,\n} from '@uwdata/mosaic-core';\nimport type {ExprNode, FilterExpr} from '@uwdata/mosaic-sql';\n\nexport type BoxPlotSummaryRow = {\n category: unknown;\n count: number;\n lowerFence: number;\n median: number;\n q1: number;\n q3: number;\n upperFence: number;\n whiskerHigh: number;\n whiskerLow: number;\n};\n\nexport type BoxPlotOutlierRow = {\n category: unknown;\n value: number;\n};\n\nexport type BoxPlotState = {\n error?: Error;\n isLoading: boolean;\n outliers: BoxPlotOutlierRow[];\n summaries: BoxPlotSummaryRow[];\n yBrush?: [number, number];\n};\n\nexport type BoxPlotClientOptions = {\n onStateChange: (state: BoxPlotState) => void;\n selection: Selection;\n tableName: string;\n x: string;\n y: string;\n};\n\ntype BoxPlotQueryRow = Partial<BoxPlotSummaryRow & BoxPlotOutlierRow> & {\n rowKind?: 'summary' | 'outlier';\n};\n\nfunction quoteIdentifier(identifier: string): string {\n return `\"${identifier.replace(/\"/g, '\"\"')}\"`;\n}\n\nfunction quoteTableReference(tableName: string): string {\n return tableName.split('.').map(quoteIdentifier).join('.');\n}\n\nfunction normalizeFilter(filter?: FilterExpr | null): string[] {\n if (!filter) {\n return [];\n }\n const filters = Array.isArray(filter) ? filter.flat(Infinity) : [filter];\n return filters\n .map((expr) => {\n if (typeof expr === 'boolean') {\n return expr ? null : 'FALSE';\n }\n return `(${(expr as string | ExprNode).toString()})`;\n })\n .filter((expr): expr is string => Boolean(expr));\n}\n\n/**\n * Type guard to check if data has a toArray method.\n */\nfunction hasToArrayMethod(data: unknown): data is {toArray: () => unknown} {\n return (\n data !== null &&\n data !== undefined &&\n typeof data === 'object' &&\n 'toArray' in data &&\n typeof (data as Record<string, unknown>).toArray === 'function'\n );\n}\n\n/**\n * Safely extract rows from query result data.\n * Handles both direct arrays and objects with toArray() method.\n * Returns empty array if data is invalid or doesn't have expected structure.\n */\nfunction rowsFromQueryResult<T>(data: unknown): T[] {\n // Handle direct arrays\n if (Array.isArray(data)) {\n return data as T[];\n }\n\n // Handle objects with toArray() method (Arrow Tables, Mosaic results, etc.)\n if (!hasToArrayMethod(data)) {\n return [];\n }\n\n try {\n const result = data.toArray();\n\n // Validate that toArray() returned an array\n if (!Array.isArray(result)) {\n console.warn(\n 'BoxPlotClient: toArray() did not return an array',\n typeof result,\n );\n return [];\n }\n\n return result as T[];\n } catch (error) {\n console.error('BoxPlotClient: Error calling toArray():', error);\n return [];\n }\n}\n\nfunction numericValue(value: unknown): number | undefined {\n const numeric = Number(value);\n return Number.isFinite(numeric) ? numeric : undefined;\n}\n\nexport function buildBoxPlotQuery(args: {\n filter?: FilterExpr | null;\n tableName: string;\n x: string;\n y: string;\n}): string {\n const table = quoteTableReference(args.tableName);\n const x = quoteIdentifier(args.x);\n const y = quoteIdentifier(args.y);\n const filters = normalizeFilter(args.filter).join(' AND ');\n const where = [`${y} IS NOT NULL`, filters].filter(Boolean).join(' AND ');\n\n return `\nWITH base AS (\n SELECT\n ${x} AS \"category\",\n TRY_CAST(${y} AS DOUBLE) AS \"value\"\n FROM ${table}\n WHERE ${where}\n),\nstats AS (\n SELECT\n \"category\",\n COUNT(*)::DOUBLE AS \"count\",\n quantile_cont(\"value\", 0.25) AS \"q1\",\n quantile_cont(\"value\", 0.5) AS \"median\",\n quantile_cont(\"value\", 0.75) AS \"q3\"\n FROM base\n WHERE \"value\" IS NOT NULL\n GROUP BY \"category\"\n),\nfences AS (\n SELECT\n *,\n \"q1\" - 1.5 * (\"q3\" - \"q1\") AS \"lowerFence\",\n \"q3\" + 1.5 * (\"q3\" - \"q1\") AS \"upperFence\"\n FROM stats\n),\nwhiskers AS (\n SELECT\n b.\"category\",\n MIN(b.\"value\") AS \"whiskerLow\",\n MAX(b.\"value\") AS \"whiskerHigh\"\n FROM base b\n JOIN fences f ON b.\"category\" IS NOT DISTINCT FROM f.\"category\"\n WHERE b.\"value\" BETWEEN f.\"lowerFence\" AND f.\"upperFence\"\n GROUP BY b.\"category\"\n),\nsummary AS (\n SELECT\n 'summary' AS \"rowKind\",\n f.\"category\",\n f.\"count\",\n f.\"q1\",\n f.\"median\",\n f.\"q3\",\n f.\"lowerFence\",\n f.\"upperFence\",\n w.\"whiskerLow\",\n w.\"whiskerHigh\",\n NULL::DOUBLE AS \"value\"\n FROM fences f\n JOIN whiskers w ON w.\"category\" IS NOT DISTINCT FROM f.\"category\"\n),\noutliers AS (\n SELECT\n 'outlier' AS \"rowKind\",\n b.\"category\",\n NULL::DOUBLE AS \"count\",\n NULL::DOUBLE AS \"q1\",\n NULL::DOUBLE AS \"median\",\n NULL::DOUBLE AS \"q3\",\n NULL::DOUBLE AS \"lowerFence\",\n NULL::DOUBLE AS \"upperFence\",\n NULL::DOUBLE AS \"whiskerLow\",\n NULL::DOUBLE AS \"whiskerHigh\",\n b.\"value\"\n FROM base b\n JOIN fences f ON b.\"category\" IS NOT DISTINCT FROM f.\"category\"\n WHERE b.\"value\" < f.\"lowerFence\" OR b.\"value\" > f.\"upperFence\"\n)\nSELECT * FROM summary\nUNION ALL\nSELECT * FROM outliers\nORDER BY \"category\", \"rowKind\", \"value\"\n`.trim();\n}\n\nexport class BoxPlotClient extends MosaicClient {\n private readonly onStateChange: (state: BoxPlotState) => void;\n private readonly tableName: string;\n private readonly x: string;\n private readonly y: string;\n private readonly selection: Selection;\n private state: BoxPlotState = {\n isLoading: true,\n outliers: [],\n summaries: [],\n };\n private destroyed = false;\n\n constructor(options: BoxPlotClientOptions) {\n super(options.selection);\n this.onStateChange = options.onStateChange;\n this.tableName = options.tableName;\n this.x = options.x;\n this.y = options.y;\n this.selection = options.selection;\n }\n\n override get filterStable(): boolean {\n return false;\n }\n\n fields(): string[] {\n return [this.x, this.y];\n }\n\n private emitState(next: Partial<BoxPlotState>) {\n if (this.destroyed) {\n return;\n }\n this.state = {...this.state, ...next};\n this.onStateChange(this.state);\n }\n\n override queryPending(): this {\n this.emitState({error: undefined, isLoading: true});\n return this;\n }\n\n override query(filter?: FilterExpr | null): string {\n return buildBoxPlotQuery({\n filter,\n tableName: this.tableName,\n x: this.x,\n y: this.y,\n });\n }\n\n override queryResult(data: unknown): this {\n const rows = rowsFromQueryResult<BoxPlotQueryRow>(data);\n const summaries: BoxPlotSummaryRow[] = [];\n const outliers: BoxPlotOutlierRow[] = [];\n\n for (const row of rows) {\n if (row.rowKind === 'summary') {\n const count = numericValue(row.count);\n const q1 = numericValue(row.q1);\n const median = numericValue(row.median);\n const q3 = numericValue(row.q3);\n const lowerFence = numericValue(row.lowerFence);\n const upperFence = numericValue(row.upperFence);\n const whiskerLow = numericValue(row.whiskerLow);\n const whiskerHigh = numericValue(row.whiskerHigh);\n if (\n count === undefined ||\n q1 === undefined ||\n median === undefined ||\n q3 === undefined ||\n lowerFence === undefined ||\n upperFence === undefined ||\n whiskerLow === undefined ||\n whiskerHigh === undefined\n ) {\n continue;\n }\n summaries.push({\n category: row.category,\n count,\n lowerFence,\n median,\n q1,\n q3,\n upperFence,\n whiskerHigh,\n whiskerLow,\n });\n } else if (row.rowKind === 'outlier') {\n const value = numericValue(row.value);\n if (value !== undefined) {\n outliers.push({\n category: row.category,\n value,\n });\n }\n }\n }\n\n this.emitState({\n error: undefined,\n isLoading: false,\n outliers,\n summaries,\n });\n return this;\n }\n\n override queryError(error: Error): this {\n this.emitState({error, isLoading: false});\n return this;\n }\n\n updateYBrush(extent?: [number, number]) {\n const normalized = extent\n ? ([Math.min(...extent), Math.max(...extent)] as [number, number])\n : undefined;\n this.emitState({yBrush: normalized});\n const clause = clauseInterval(this.y, normalized ?? null, {source: this});\n this.selection.update(clause);\n }\n\n reset() {\n this.updateYBrush();\n }\n\n override destroy() {\n this.destroyed = true;\n super.destroy();\n }\n}\n"]}
1
+ {"version":3,"file":"BoxPlotClient.js","sourceRoot":"","sources":["../../src/boxplot/BoxPlotClient.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n MosaicClient,\n clauseInterval,\n type Selection,\n} from '@uwdata/mosaic-core';\nimport type {ExprNode, FilterExpr} from '@uwdata/mosaic-sql';\nimport {\n assertChartDataPolicy,\n createChartRuntimeIssueFromError,\n type ChartDataPolicy,\n type ChartRuntimeIssueContext,\n type ChartRuntimeIssueReporter,\n} from '../chart-runtime';\n\nexport type BoxPlotSummaryRow = {\n category: unknown;\n count: number;\n lowerFence: number;\n median: number;\n q1: number;\n q3: number;\n upperFence: number;\n whiskerHigh: number;\n whiskerLow: number;\n};\n\nexport type BoxPlotOutlierRow = {\n category: unknown;\n value: number;\n};\n\nexport type BoxPlotState = {\n error?: Error;\n isLoading: boolean;\n outliers: BoxPlotOutlierRow[];\n summaries: BoxPlotSummaryRow[];\n yBrush?: [number, number];\n};\n\nexport type BoxPlotClientOptions = {\n dataPolicy?: ChartDataPolicy | null;\n onStateChange: (state: BoxPlotState) => void;\n runtimeIssueContext?: ChartRuntimeIssueContext;\n runtimeIssueReporter?: ChartRuntimeIssueReporter;\n selection: Selection;\n tableName: string;\n x: string;\n y: string;\n};\n\ntype BoxPlotQueryRow = Partial<BoxPlotSummaryRow & BoxPlotOutlierRow> & {\n rowKind?: 'summary' | 'outlier';\n};\n\nfunction quoteIdentifier(identifier: string): string {\n return `\"${identifier.replace(/\"/g, '\"\"')}\"`;\n}\n\nfunction quoteTableReference(tableName: string): string {\n return tableName.split('.').map(quoteIdentifier).join('.');\n}\n\nfunction normalizeFilter(filter?: FilterExpr | null): string[] {\n if (!filter) {\n return [];\n }\n const filters = Array.isArray(filter) ? filter.flat(Infinity) : [filter];\n return filters\n .map((expr) => {\n if (typeof expr === 'boolean') {\n return expr ? null : 'FALSE';\n }\n return `(${(expr as string | ExprNode).toString()})`;\n })\n .filter((expr): expr is string => Boolean(expr));\n}\n\n/**\n * Type guard to check if data has a toArray method.\n */\nfunction hasToArrayMethod(data: unknown): data is {toArray: () => unknown} {\n return (\n data !== null &&\n data !== undefined &&\n typeof data === 'object' &&\n 'toArray' in data &&\n typeof (data as Record<string, unknown>).toArray === 'function'\n );\n}\n\n/**\n * Safely extract rows from query result data.\n * Handles both direct arrays and objects with toArray() method.\n * Returns empty array if data is invalid or doesn't have expected structure.\n */\nfunction rowsFromQueryResult<T>(data: unknown): T[] {\n // Handle direct arrays\n if (Array.isArray(data)) {\n return data as T[];\n }\n\n // Handle objects with toArray() method (Arrow Tables, Mosaic results, etc.)\n if (!hasToArrayMethod(data)) {\n return [];\n }\n\n try {\n const result = data.toArray();\n\n // Validate that toArray() returned an array\n if (!Array.isArray(result)) {\n console.warn(\n 'BoxPlotClient: toArray() did not return an array',\n typeof result,\n );\n return [];\n }\n\n return result as T[];\n } catch (error) {\n console.error('BoxPlotClient: Error calling toArray():', error);\n return [];\n }\n}\n\nfunction numericValue(value: unknown): number | undefined {\n const numeric = Number(value);\n return Number.isFinite(numeric) ? numeric : undefined;\n}\n\nexport function buildBoxPlotQuery(args: {\n filter?: FilterExpr | null;\n tableName: string;\n x: string;\n y: string;\n}): string {\n const table = quoteTableReference(args.tableName);\n const x = quoteIdentifier(args.x);\n const y = quoteIdentifier(args.y);\n const filters = normalizeFilter(args.filter).join(' AND ');\n const where = [`${y} IS NOT NULL`, filters].filter(Boolean).join(' AND ');\n\n return `\nWITH base AS (\n SELECT\n ${x} AS \"category\",\n TRY_CAST(${y} AS DOUBLE) AS \"value\"\n FROM ${table}\n WHERE ${where}\n),\nstats AS (\n SELECT\n \"category\",\n COUNT(*)::DOUBLE AS \"count\",\n quantile_cont(\"value\", 0.25) AS \"q1\",\n quantile_cont(\"value\", 0.5) AS \"median\",\n quantile_cont(\"value\", 0.75) AS \"q3\"\n FROM base\n WHERE \"value\" IS NOT NULL\n GROUP BY \"category\"\n),\nfences AS (\n SELECT\n *,\n \"q1\" - 1.5 * (\"q3\" - \"q1\") AS \"lowerFence\",\n \"q3\" + 1.5 * (\"q3\" - \"q1\") AS \"upperFence\"\n FROM stats\n),\nwhiskers AS (\n SELECT\n b.\"category\",\n MIN(b.\"value\") AS \"whiskerLow\",\n MAX(b.\"value\") AS \"whiskerHigh\"\n FROM base b\n JOIN fences f ON b.\"category\" IS NOT DISTINCT FROM f.\"category\"\n WHERE b.\"value\" BETWEEN f.\"lowerFence\" AND f.\"upperFence\"\n GROUP BY b.\"category\"\n),\nsummary AS (\n SELECT\n 'summary' AS \"rowKind\",\n f.\"category\",\n f.\"count\",\n f.\"q1\",\n f.\"median\",\n f.\"q3\",\n f.\"lowerFence\",\n f.\"upperFence\",\n w.\"whiskerLow\",\n w.\"whiskerHigh\",\n NULL::DOUBLE AS \"value\"\n FROM fences f\n JOIN whiskers w ON w.\"category\" IS NOT DISTINCT FROM f.\"category\"\n),\noutliers AS (\n SELECT\n 'outlier' AS \"rowKind\",\n b.\"category\",\n NULL::DOUBLE AS \"count\",\n NULL::DOUBLE AS \"q1\",\n NULL::DOUBLE AS \"median\",\n NULL::DOUBLE AS \"q3\",\n NULL::DOUBLE AS \"lowerFence\",\n NULL::DOUBLE AS \"upperFence\",\n NULL::DOUBLE AS \"whiskerLow\",\n NULL::DOUBLE AS \"whiskerHigh\",\n b.\"value\"\n FROM base b\n JOIN fences f ON b.\"category\" IS NOT DISTINCT FROM f.\"category\"\n WHERE b.\"value\" < f.\"lowerFence\" OR b.\"value\" > f.\"upperFence\"\n)\nSELECT * FROM summary\nUNION ALL\nSELECT * FROM outliers\nORDER BY \"category\", \"rowKind\", \"value\"\n`.trim();\n}\n\nexport class BoxPlotClient extends MosaicClient {\n private readonly onStateChange: (state: BoxPlotState) => void;\n private readonly tableName: string;\n private readonly x: string;\n private readonly y: string;\n private readonly selection: Selection;\n private readonly dataPolicy?: ChartDataPolicy | null;\n private readonly runtimeIssueContext?: ChartRuntimeIssueContext;\n private readonly runtimeIssueReporter?: ChartRuntimeIssueReporter;\n private state: BoxPlotState = {\n isLoading: true,\n outliers: [],\n summaries: [],\n };\n private destroyed = false;\n\n constructor(options: BoxPlotClientOptions) {\n super(options.selection);\n this.dataPolicy = options.dataPolicy;\n this.onStateChange = options.onStateChange;\n this.runtimeIssueContext = options.runtimeIssueContext;\n this.runtimeIssueReporter = options.runtimeIssueReporter;\n this.tableName = options.tableName;\n this.x = options.x;\n this.y = options.y;\n this.selection = options.selection;\n }\n\n override get filterStable(): boolean {\n return false;\n }\n\n fields(): string[] {\n return [this.x, this.y];\n }\n\n private emitState(next: Partial<BoxPlotState>) {\n if (this.destroyed) {\n return;\n }\n this.state = {...this.state, ...next};\n this.onStateChange(this.state);\n }\n\n override queryPending(): this {\n this.emitState({error: undefined, isLoading: true});\n return this;\n }\n\n override query(filter?: FilterExpr | null): string {\n return buildBoxPlotQuery({\n filter,\n tableName: this.tableName,\n x: this.x,\n y: this.y,\n });\n }\n\n override queryResult(data: unknown): this {\n try {\n assertChartDataPolicy(this.dataPolicy, data);\n this.runtimeIssueReporter?.clearIssue();\n } catch (error) {\n const normalizedError =\n error instanceof Error ? error : new Error(String(error));\n if (this.runtimeIssueContext) {\n this.runtimeIssueReporter?.reportIssue(\n createChartRuntimeIssueFromError(\n normalizedError,\n this.runtimeIssueContext,\n this.dataPolicy,\n ),\n );\n }\n this.emitState({error: normalizedError, isLoading: false});\n return this;\n }\n\n const rows = rowsFromQueryResult<BoxPlotQueryRow>(data);\n const summaries: BoxPlotSummaryRow[] = [];\n const outliers: BoxPlotOutlierRow[] = [];\n\n for (const row of rows) {\n if (row.rowKind === 'summary') {\n const count = numericValue(row.count);\n const q1 = numericValue(row.q1);\n const median = numericValue(row.median);\n const q3 = numericValue(row.q3);\n const lowerFence = numericValue(row.lowerFence);\n const upperFence = numericValue(row.upperFence);\n const whiskerLow = numericValue(row.whiskerLow);\n const whiskerHigh = numericValue(row.whiskerHigh);\n if (\n count === undefined ||\n q1 === undefined ||\n median === undefined ||\n q3 === undefined ||\n lowerFence === undefined ||\n upperFence === undefined ||\n whiskerLow === undefined ||\n whiskerHigh === undefined\n ) {\n continue;\n }\n summaries.push({\n category: row.category,\n count,\n lowerFence,\n median,\n q1,\n q3,\n upperFence,\n whiskerHigh,\n whiskerLow,\n });\n } else if (row.rowKind === 'outlier') {\n const value = numericValue(row.value);\n if (value !== undefined) {\n outliers.push({\n category: row.category,\n value,\n });\n }\n }\n }\n\n this.emitState({\n error: undefined,\n isLoading: false,\n outliers,\n summaries,\n });\n return this;\n }\n\n override queryError(error: Error): this {\n if (this.runtimeIssueContext) {\n this.runtimeIssueReporter?.reportIssue(\n createChartRuntimeIssueFromError(\n error,\n this.runtimeIssueContext,\n this.dataPolicy,\n ),\n );\n }\n this.emitState({error, isLoading: false});\n return this;\n }\n\n updateYBrush(extent?: [number, number]) {\n const normalized = extent\n ? ([Math.min(...extent), Math.max(...extent)] as [number, number])\n : undefined;\n this.emitState({yBrush: normalized});\n const clause = clauseInterval(this.y, normalized ?? null, {source: this});\n this.selection.update(clause);\n }\n\n reset() {\n this.updateYBrush();\n }\n\n override destroy() {\n this.destroyed = true;\n super.destroy();\n }\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import type { FC } from 'react';
2
+ import type { ChartRuntimeIssue } from '../chart-runtime';
3
+ export type ChartRuntimeIssuePanelProps = {
4
+ issue: ChartRuntimeIssue;
5
+ };
6
+ export declare const ChartRuntimeIssuePanel: FC<ChartRuntimeIssuePanelProps>;
7
+ //# sourceMappingURL=ChartRuntimeIssuePanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartRuntimeIssuePanel.d.ts","sourceRoot":"","sources":["../../src/chart/ChartRuntimeIssuePanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,EAAE,EAAC,MAAM,OAAO,CAAC;AAC9B,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AAExD,MAAM,MAAM,2BAA2B,GAAG;IACxC,KAAK,EAAE,iBAAiB,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,2BAA2B,CAkBlE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export const ChartRuntimeIssuePanel = ({ issue, }) => {
3
+ const title = issue.kind === 'too-much-data'
4
+ ? 'Too much data'
5
+ : issue.kind === 'sql-error'
6
+ ? 'Chart query failed'
7
+ : 'Unable to display chart';
8
+ return (_jsxs("div", { className: "flex h-full min-h-[200px] flex-col items-center justify-center p-4", children: [_jsx("div", { className: "mb-2 text-center font-semibold", children: title }), _jsx("div", { className: "text-center text-sm whitespace-pre-wrap", children: issue.message })] }));
9
+ };
10
+ //# sourceMappingURL=ChartRuntimeIssuePanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartRuntimeIssuePanel.js","sourceRoot":"","sources":["../../src/chart/ChartRuntimeIssuePanel.tsx"],"names":[],"mappings":";AAOA,MAAM,CAAC,MAAM,sBAAsB,GAAoC,CAAC,EACtE,KAAK,GACN,EAAE,EAAE;IACH,MAAM,KAAK,GACT,KAAK,CAAC,IAAI,KAAK,eAAe;QAC5B,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW;YAC1B,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,yBAAyB,CAAC;IAElC,OAAO,CACL,eAAK,SAAS,EAAC,oEAAoE,aACjF,cAAK,SAAS,EAAC,gCAAgC,YAAE,KAAK,GAAO,EAC7D,cAAK,SAAS,EAAC,yCAAyC,YACrD,KAAK,CAAC,OAAO,GACV,IACF,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type {FC} from 'react';\nimport type {ChartRuntimeIssue} from '../chart-runtime';\n\nexport type ChartRuntimeIssuePanelProps = {\n issue: ChartRuntimeIssue;\n};\n\nexport const ChartRuntimeIssuePanel: FC<ChartRuntimeIssuePanelProps> = ({\n issue,\n}) => {\n const title =\n issue.kind === 'too-much-data'\n ? 'Too much data'\n : issue.kind === 'sql-error'\n ? 'Chart query failed'\n : 'Unable to display chart';\n\n return (\n <div className=\"flex h-full min-h-[200px] flex-col items-center justify-center p-4\">\n <div className=\"mb-2 text-center font-semibold\">{title}</div>\n <div className=\"text-center text-sm whitespace-pre-wrap\">\n {issue.message}\n </div>\n </div>\n );\n};\n"]}
@@ -1,5 +1,5 @@
1
1
  import { type FC } from 'react';
2
- import { type ChartPanelConfig } from '../dashboard/MosaicDashboardSlice';
2
+ import type { ChartPanelConfig } from '../dashboard/dashboard-types';
3
3
  import { MosaicReadyConnection } from '../MosaicSlice';
4
4
  import { ChartTypeDefinition } from '../chart-types/base-types';
5
5
  export type MosaicDashboardChartProps = {
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardChart.d.ts","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChart.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAc,MAAM,OAAO,CAAC;AAG3C,OAAO,EACL,KAAK,gBAAgB,EAEtB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAC,qBAAqB,EAAC,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAC,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AAG9D,MAAM,MAAM,yBAAyB,GAAG;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,mBAAmB,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,qBAAqB,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,gBAAgB,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,yBAAyB,CA2D9D,CAAC"}
1
+ {"version":3,"file":"MosaicDashboardChart.d.ts","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChart.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAc,MAAM,OAAO,CAAC;AAG3C,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,8BAA8B,CAAC;AAGnE,OAAO,EAAC,qBAAqB,EAAC,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAC,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AAG9D,MAAM,MAAM,yBAAyB,GAAG;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,mBAAmB,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,qBAAqB,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,gBAAgB,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,yBAAyB,CA2D9D,CAAC"}
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useCallback } from 'react';
3
3
  import { ChartSettingsContent } from './chart-settings/ChartSettingsContent';
4
4
  import { MosaicDashboardPanelLayout } from '../dashboard/MosaicDashboardPanelLayout';
5
- import { useStoreWithMosaicDashboard, } from '../dashboard/MosaicDashboardSlice';
5
+ import { useStoreWithMosaicDashboard } from '../dashboard/MosaicDashboardSlice';
6
6
  import { useGenerateSpec } from './useGenerateSpec';
7
7
  import { MosaicDashboardChartContent } from './MosaicDashboardChartContent';
8
8
  export const MosaicDashboardChart = ({ chartTypeDef, tableName, connection, dashboardId, selectionName, panel, }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardChart.js","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChart.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAU,WAAW,EAAC,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAC,oBAAoB,EAAC,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAC,0BAA0B,EAAC,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAEL,2BAA2B,GAC5B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAGlD,OAAO,EAAC,2BAA2B,EAAC,MAAM,+BAA+B,CAAC;AAW1E,MAAM,CAAC,MAAM,oBAAoB,GAAkC,CAAC,EAClE,YAAY,EACZ,SAAS,EACT,UAAU,EACV,WAAW,EACX,aAAa,EACb,KAAK,GACN,EAAE,EAAE;IACH,MAAM,WAAW,GAAG,2BAA2B,CAC7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAC7C,CAAC;IAEF,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC;IAEjD,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,MAAe,EAAE,EAAE;QAClB,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE;YACjC,MAAM,EAAE,EAAC,GAAG,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAC;SAChD,CAAC,CAAC;IACL,CAAC,EACD,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CACnD,CAAC;IAEF,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAE7E,MAAM,eAAe,GAAG,CACtB,KAAC,oBAAoB,IACnB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,GACtC,CACH,CAAC;IAEF,MAAM,YAAY,GAAG,CACnB,cAAK,SAAS,EAAC,0BAA0B,YACvC,KAAC,2BAA2B,IAC1B,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,YAAY,EACjC,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,GACV,GACE,CACP,CAAC;IAEF,OAAO,CACL,cAAK,SAAS,EAAC,gBAAgB,YAC7B,KAAC,0BAA0B,IACzB,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,gBAAgB,EAChC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,YAAY,GACrB,GACE,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {type FC, useCallback} from 'react';\nimport {ChartSettingsContent} from './chart-settings/ChartSettingsContent';\nimport {MosaicDashboardPanelLayout} from '../dashboard/MosaicDashboardPanelLayout';\nimport {\n type ChartPanelConfig,\n useStoreWithMosaicDashboard,\n} from '../dashboard/MosaicDashboardSlice';\nimport {useGenerateSpec} from './useGenerateSpec';\nimport {MosaicReadyConnection} from '../MosaicSlice';\nimport {ChartTypeDefinition} from '../chart-types/base-types';\nimport {MosaicDashboardChartContent} from './MosaicDashboardChartContent';\n\nexport type MosaicDashboardChartProps = {\n dashboardId: string;\n chartTypeDef: ChartTypeDefinition;\n tableName: string;\n connection: MosaicReadyConnection;\n selectionName: string;\n panel: ChartPanelConfig;\n};\n\nexport const MosaicDashboardChart: FC<MosaicDashboardChartProps> = ({\n chartTypeDef,\n tableName,\n connection,\n dashboardId,\n selectionName,\n panel,\n}) => {\n const updatePanel = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.updatePanel,\n );\n\n const isSettingsOpen = panel.config.settingsOpen;\n\n const handleOpenChange = useCallback(\n (isOpen: boolean) => {\n updatePanel(dashboardId, panel.id, {\n config: {...panel.config, settingsOpen: isOpen},\n });\n },\n [dashboardId, panel.config, panel.id, updatePanel],\n );\n\n const spec = useGenerateSpec(tableName, panel.config.settings, chartTypeDef);\n\n const settingsContent = (\n <ChartSettingsContent\n dashboardId={dashboardId}\n panel={panel}\n spec={spec.spec}\n tableName={tableName}\n onClose={() => handleOpenChange(false)}\n />\n );\n\n const chartContent = (\n <div className=\"h-full overflow-auto p-2\">\n <MosaicDashboardChartContent\n dashboardId={dashboardId}\n panel={panel}\n selectionName={selectionName}\n chartTypeDefinition={chartTypeDef}\n tableName={tableName}\n connection={connection}\n spec={spec}\n />\n </div>\n );\n\n return (\n <div className=\"h-full min-h-0\">\n <MosaicDashboardPanelLayout\n isOpen={isSettingsOpen}\n onIsOpenChange={handleOpenChange}\n settings={settingsContent}\n content={chartContent}\n />\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"MosaicDashboardChart.js","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChart.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAU,WAAW,EAAC,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAC,oBAAoB,EAAC,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAC,0BAA0B,EAAC,MAAM,yCAAyC,CAAC;AAEnF,OAAO,EAAC,2BAA2B,EAAC,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAGlD,OAAO,EAAC,2BAA2B,EAAC,MAAM,+BAA+B,CAAC;AAW1E,MAAM,CAAC,MAAM,oBAAoB,GAAkC,CAAC,EAClE,YAAY,EACZ,SAAS,EACT,UAAU,EACV,WAAW,EACX,aAAa,EACb,KAAK,GACN,EAAE,EAAE;IACH,MAAM,WAAW,GAAG,2BAA2B,CAC7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAC7C,CAAC;IAEF,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC;IAEjD,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,MAAe,EAAE,EAAE;QAClB,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE;YACjC,MAAM,EAAE,EAAC,GAAG,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAC;SAChD,CAAC,CAAC;IACL,CAAC,EACD,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CACnD,CAAC;IAEF,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAE7E,MAAM,eAAe,GAAG,CACtB,KAAC,oBAAoB,IACnB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,GACtC,CACH,CAAC;IAEF,MAAM,YAAY,GAAG,CACnB,cAAK,SAAS,EAAC,0BAA0B,YACvC,KAAC,2BAA2B,IAC1B,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,YAAY,EACjC,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,GACV,GACE,CACP,CAAC;IAEF,OAAO,CACL,cAAK,SAAS,EAAC,gBAAgB,YAC7B,KAAC,0BAA0B,IACzB,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,gBAAgB,EAChC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,YAAY,GACrB,GACE,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {type FC, useCallback} from 'react';\nimport {ChartSettingsContent} from './chart-settings/ChartSettingsContent';\nimport {MosaicDashboardPanelLayout} from '../dashboard/MosaicDashboardPanelLayout';\nimport type {ChartPanelConfig} from '../dashboard/dashboard-types';\nimport {useStoreWithMosaicDashboard} from '../dashboard/MosaicDashboardSlice';\nimport {useGenerateSpec} from './useGenerateSpec';\nimport {MosaicReadyConnection} from '../MosaicSlice';\nimport {ChartTypeDefinition} from '../chart-types/base-types';\nimport {MosaicDashboardChartContent} from './MosaicDashboardChartContent';\n\nexport type MosaicDashboardChartProps = {\n dashboardId: string;\n chartTypeDef: ChartTypeDefinition;\n tableName: string;\n connection: MosaicReadyConnection;\n selectionName: string;\n panel: ChartPanelConfig;\n};\n\nexport const MosaicDashboardChart: FC<MosaicDashboardChartProps> = ({\n chartTypeDef,\n tableName,\n connection,\n dashboardId,\n selectionName,\n panel,\n}) => {\n const updatePanel = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.updatePanel,\n );\n\n const isSettingsOpen = panel.config.settingsOpen;\n\n const handleOpenChange = useCallback(\n (isOpen: boolean) => {\n updatePanel(dashboardId, panel.id, {\n config: {...panel.config, settingsOpen: isOpen},\n });\n },\n [dashboardId, panel.config, panel.id, updatePanel],\n );\n\n const spec = useGenerateSpec(tableName, panel.config.settings, chartTypeDef);\n\n const settingsContent = (\n <ChartSettingsContent\n dashboardId={dashboardId}\n panel={panel}\n spec={spec.spec}\n tableName={tableName}\n onClose={() => handleOpenChange(false)}\n />\n );\n\n const chartContent = (\n <div className=\"h-full overflow-auto p-2\">\n <MosaicDashboardChartContent\n dashboardId={dashboardId}\n panel={panel}\n selectionName={selectionName}\n chartTypeDefinition={chartTypeDef}\n tableName={tableName}\n connection={connection}\n spec={spec}\n />\n </div>\n );\n\n return (\n <div className=\"h-full min-h-0\">\n <MosaicDashboardPanelLayout\n isOpen={isSettingsOpen}\n onIsOpenChange={handleOpenChange}\n settings={settingsContent}\n content={chartContent}\n />\n </div>\n );\n};\n"]}
@@ -2,7 +2,7 @@ import { type FC } from 'react';
2
2
  import { ChartTypeDefinition } from '../chart-types/base-types';
3
3
  import { UseGenerateSpecResult } from './useGenerateSpec';
4
4
  import { MosaicReadyConnection } from '../MosaicSlice';
5
- import { ChartPanelConfig } from '../dashboard/MosaicDashboardSlice';
5
+ import type { ChartPanelConfig } from '../dashboard/dashboard-types';
6
6
  export type MosaicDashboardChartContentProps = {
7
7
  chartTypeDefinition: ChartTypeDefinition;
8
8
  tableName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardChartContent.d.ts","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChartContent.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAC,MAAM,OAAO,CAAC;AAC9B,OAAO,EACL,mBAAmB,EAGpB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAC,qBAAqB,EAAC,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAC,gBAAgB,EAAC,MAAM,mCAAmC,CAAC;AAInE,MAAM,MAAM,gCAAgC,GAAG;IAC7C,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,qBAAqB,CAAC;IAClC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,gBAAgB,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,EAAE,CAC1C,gCAAgC,CAqCjC,CAAC"}
1
+ {"version":3,"file":"MosaicDashboardChartContent.d.ts","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChartContent.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAU,MAAM,OAAO,CAAC;AACvC,OAAO,EACL,mBAAmB,EAGpB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAC,qBAAqB,EAAC,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,8BAA8B,CAAC;AAOnE,MAAM,MAAM,gCAAgC,GAAG;IAC7C,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,qBAAqB,CAAC;IAClC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,gBAAgB,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,EAAE,CAC1C,gCAAgC,CAgFjC,CAAC"}
@@ -1,17 +1,44 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
2
3
  import { isComponentChartType, isSpecChartType, } from '../chart-types/base-types';
3
4
  import { MosaicDashboardVgPlotChart } from './MosaicDashboardVgPlotChart';
4
5
  import { MosaicDashboardComponentChart } from './MosaicDashboardComponentChart';
5
6
  import { useChartRetainer } from './useChartRetainer';
6
7
  import { useBrushSelectionParams } from './useBrushSelectionParams';
8
+ import { useStoreWithMosaicDashboard } from '../dashboard/MosaicDashboardSlice';
9
+ import { ChartRuntimeIssuePanel } from './ChartRuntimeIssuePanel';
10
+ import { resolveChartDataPolicy } from '../chart-runtime';
7
11
  export const MosaicDashboardChartContent = ({ selectionName, panel, dashboardId, chartTypeDefinition, tableName, connection, spec, }) => {
8
12
  const retention = useChartRetainer(dashboardId, panel.id);
9
13
  const params = useBrushSelectionParams(selectionName);
14
+ const issue = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.getPanelIssue(dashboardId, panel.id));
15
+ const reportPanelIssue = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.reportPanelIssue);
16
+ const clearPanelIssue = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.clearPanelIssue);
17
+ const dataPolicy = useMemo(() => {
18
+ const defaultPolicy = chartTypeDefinition.getDataPolicy?.({
19
+ tableName,
20
+ config: panel.config,
21
+ }) ?? null;
22
+ return resolveChartDataPolicy(defaultPolicy, panel.config.dataPolicy);
23
+ }, [chartTypeDefinition, panel.config, tableName]);
24
+ const runtimeIssueReporter = useMemo(() => ({
25
+ reportIssue: (issueToReport) => {
26
+ reportPanelIssue(dashboardId, panel.id, issueToReport);
27
+ },
28
+ clearIssue: () => clearPanelIssue(dashboardId, panel.id),
29
+ }), [clearPanelIssue, dashboardId, panel.id, reportPanelIssue]);
30
+ const runtimeIssueContext = useMemo(() => ({
31
+ panelId: panel.id,
32
+ chartType: panel.config.chartType,
33
+ }), [panel.config.chartType, panel.id]);
34
+ if (issue) {
35
+ return _jsx(ChartRuntimeIssuePanel, { issue: issue });
36
+ }
10
37
  if (isSpecChartType(chartTypeDefinition)) {
11
- return (_jsx(MosaicDashboardVgPlotChart, { spec: spec, retention: retention, params: params }));
38
+ return (_jsx(MosaicDashboardVgPlotChart, { spec: spec, retention: retention, params: params, dataPolicy: dataPolicy, runtimeIssueReporter: runtimeIssueReporter, runtimeIssueContext: runtimeIssueContext }));
12
39
  }
13
40
  if (isComponentChartType(chartTypeDefinition)) {
14
- return (_jsx(MosaicDashboardComponentChart, { tableName: tableName, panel: panel, chartTypeDefinition: chartTypeDefinition, connection: connection, retention: retention, params: params }));
41
+ return (_jsx(MosaicDashboardComponentChart, { tableName: tableName, panel: panel, chartTypeDefinition: chartTypeDefinition, connection: connection, retention: retention, params: params, dataPolicy: dataPolicy, runtimeIssueContext: runtimeIssueContext, runtimeIssueReporter: runtimeIssueReporter }));
15
42
  }
16
43
  throw new Error('Unsupported chart type definition');
17
44
  };
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardChartContent.js","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChartContent.tsx"],"names":[],"mappings":";AACA,OAAO,EAEL,oBAAoB,EACpB,eAAe,GAChB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAC,0BAA0B,EAAC,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAC,6BAA6B,EAAC,MAAM,iCAAiC,CAAC;AAI9E,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAYlE,MAAM,CAAC,MAAM,2BAA2B,GAEpC,CAAC,EACH,aAAa,EACb,KAAK,EACL,WAAW,EACX,mBAAmB,EACnB,SAAS,EACT,UAAU,EACV,IAAI,GACL,EAAE,EAAE;IACH,MAAM,SAAS,GAAG,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;IAEtD,IAAI,eAAe,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACzC,OAAO,CACL,KAAC,0BAA0B,IACzB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,GACd,CACH,CAAC;IACJ,CAAC;IAED,IAAI,oBAAoB,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC9C,OAAO,CACL,KAAC,6BAA6B,IAC5B,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,mBAAmB,EAAE,mBAAmB,EACxC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,GACd,CACH,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACvD,CAAC,CAAC","sourcesContent":["import {type FC} from 'react';\nimport {\n ChartTypeDefinition,\n isComponentChartType,\n isSpecChartType,\n} from '../chart-types/base-types';\nimport {MosaicDashboardVgPlotChart} from './MosaicDashboardVgPlotChart';\nimport {MosaicDashboardComponentChart} from './MosaicDashboardComponentChart';\nimport {UseGenerateSpecResult} from './useGenerateSpec';\nimport {MosaicReadyConnection} from '../MosaicSlice';\nimport {ChartPanelConfig} from '../dashboard/MosaicDashboardSlice';\nimport {useChartRetainer} from './useChartRetainer';\nimport {useBrushSelectionParams} from './useBrushSelectionParams';\n\nexport type MosaicDashboardChartContentProps = {\n chartTypeDefinition: ChartTypeDefinition;\n tableName: string;\n connection: MosaicReadyConnection;\n spec: UseGenerateSpecResult;\n selectionName: string;\n panel: ChartPanelConfig;\n dashboardId: string;\n};\n\nexport const MosaicDashboardChartContent: FC<\n MosaicDashboardChartContentProps\n> = ({\n selectionName,\n panel,\n dashboardId,\n chartTypeDefinition,\n tableName,\n connection,\n spec,\n}) => {\n const retention = useChartRetainer(dashboardId, panel.id);\n const params = useBrushSelectionParams(selectionName);\n\n if (isSpecChartType(chartTypeDefinition)) {\n return (\n <MosaicDashboardVgPlotChart\n spec={spec}\n retention={retention}\n params={params}\n />\n );\n }\n\n if (isComponentChartType(chartTypeDefinition)) {\n return (\n <MosaicDashboardComponentChart\n tableName={tableName}\n panel={panel}\n chartTypeDefinition={chartTypeDefinition}\n connection={connection}\n retention={retention}\n params={params}\n />\n );\n }\n\n throw new Error('Unsupported chart type definition');\n};\n"]}
1
+ {"version":3,"file":"MosaicDashboardChartContent.js","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChartContent.tsx"],"names":[],"mappings":"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","sourcesContent":["import {type FC, useMemo} from 'react';\nimport {\n ChartTypeDefinition,\n isComponentChartType,\n isSpecChartType,\n} from '../chart-types/base-types';\nimport {MosaicDashboardVgPlotChart} from './MosaicDashboardVgPlotChart';\nimport {MosaicDashboardComponentChart} from './MosaicDashboardComponentChart';\nimport {UseGenerateSpecResult} from './useGenerateSpec';\nimport {MosaicReadyConnection} from '../MosaicSlice';\nimport type {ChartPanelConfig} from '../dashboard/dashboard-types';\nimport {useChartRetainer} from './useChartRetainer';\nimport {useBrushSelectionParams} from './useBrushSelectionParams';\nimport {useStoreWithMosaicDashboard} from '../dashboard/MosaicDashboardSlice';\nimport {ChartRuntimeIssuePanel} from './ChartRuntimeIssuePanel';\nimport {resolveChartDataPolicy, type ChartRuntimeIssue} from '../chart-runtime';\n\nexport type MosaicDashboardChartContentProps = {\n chartTypeDefinition: ChartTypeDefinition;\n tableName: string;\n connection: MosaicReadyConnection;\n spec: UseGenerateSpecResult;\n selectionName: string;\n panel: ChartPanelConfig;\n dashboardId: string;\n};\n\nexport const MosaicDashboardChartContent: FC<\n MosaicDashboardChartContentProps\n> = ({\n selectionName,\n panel,\n dashboardId,\n chartTypeDefinition,\n tableName,\n connection,\n spec,\n}) => {\n const retention = useChartRetainer(dashboardId, panel.id);\n const params = useBrushSelectionParams(selectionName);\n const issue = useStoreWithMosaicDashboard((state) =>\n state.mosaicDashboard.getPanelIssue(dashboardId, panel.id),\n );\n const reportPanelIssue = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.reportPanelIssue,\n );\n const clearPanelIssue = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.clearPanelIssue,\n );\n const dataPolicy = useMemo(() => {\n const defaultPolicy =\n chartTypeDefinition.getDataPolicy?.({\n tableName,\n config: panel.config,\n }) ?? null;\n return resolveChartDataPolicy(defaultPolicy, panel.config.dataPolicy);\n }, [chartTypeDefinition, panel.config, tableName]);\n const runtimeIssueReporter = useMemo(\n () => ({\n reportIssue: (issueToReport: ChartRuntimeIssue) => {\n reportPanelIssue(dashboardId, panel.id, issueToReport);\n },\n clearIssue: () => clearPanelIssue(dashboardId, panel.id),\n }),\n [clearPanelIssue, dashboardId, panel.id, reportPanelIssue],\n );\n const runtimeIssueContext = useMemo(\n () => ({\n panelId: panel.id,\n chartType: panel.config.chartType,\n }),\n [panel.config.chartType, panel.id],\n );\n\n if (issue) {\n return <ChartRuntimeIssuePanel issue={issue} />;\n }\n\n if (isSpecChartType(chartTypeDefinition)) {\n return (\n <MosaicDashboardVgPlotChart\n spec={spec}\n retention={retention}\n params={params}\n dataPolicy={dataPolicy}\n runtimeIssueReporter={runtimeIssueReporter}\n runtimeIssueContext={runtimeIssueContext}\n />\n );\n }\n\n if (isComponentChartType(chartTypeDefinition)) {\n return (\n <MosaicDashboardComponentChart\n tableName={tableName}\n panel={panel}\n chartTypeDefinition={chartTypeDefinition}\n connection={connection}\n retention={retention}\n params={params}\n dataPolicy={dataPolicy}\n runtimeIssueContext={runtimeIssueContext}\n runtimeIssueReporter={runtimeIssueReporter}\n />\n );\n }\n\n throw new Error('Unsupported chart type definition');\n};\n"]}
@@ -1,3 +1,4 @@
1
- import { type MosaicDashboardPanelRenderer, type ChartPanelConfig } from '../dashboard/MosaicDashboardSlice';
1
+ import type { ChartPanelConfig } from '../dashboard/dashboard-types';
2
+ import { type MosaicDashboardPanelRenderer } from '../dashboard/MosaicDashboardSlice';
2
3
  export declare const mosaicDashboardChartRenderer: MosaicDashboardPanelRenderer<ChartPanelConfig>;
3
4
  //# sourceMappingURL=MosaicDashboardChartRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardChartRenderer.d.ts","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChartRenderer.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,gBAAgB,EAGtB,MAAM,mCAAmC,CAAC;AAwD3C,eAAO,MAAM,4BAA4B,EAAE,4BAA4B,CAAC,gBAAgB,CAKrF,CAAC"}
1
+ {"version":3,"file":"MosaicDashboardChartRenderer.d.ts","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChartRenderer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,8BAA8B,CAAC;AACnE,OAAO,EACL,KAAK,4BAA4B,EAGlC,MAAM,mCAAmC,CAAC;AAyD3C,eAAO,MAAM,4BAA4B,EAAE,4BAA4B,CAAC,gBAAgB,CAKrF,CAAC"}
@@ -5,10 +5,10 @@ import { MosaicDashboardChartHeaderActions } from './MosaicDashboardChartHeaderA
5
5
  import { useStoreWithMosaicDashboard, } from '../dashboard/MosaicDashboardSlice';
6
6
  import { useChartTypeDefinition } from '../chart-types/useChartTypeDefinition';
7
7
  import { MosaicDashboardChart } from './MosaicDashboardChart';
8
- const MosaicDashboardChartRenderer = ({ panel, dashboardId, selectionName, }) => {
8
+ const MosaicDashboardChartRenderer = ({ panel, dashboardId, dashboard, selectionName, }) => {
9
9
  const connection = useStoreWithMosaicDashboard((state) => state.mosaic.connection);
10
10
  const chartTypeDef = useChartTypeDefinition(panel.config.chartType);
11
- const tableName = panel.source?.tableName;
11
+ const tableName = dashboard.selectedTable;
12
12
  if (!chartTypeDef) {
13
13
  return (_jsxs("div", { className: "text-muted-foreground flex h-full items-center justify-center text-sm", children: ["Unknown chart type: ", panel.config.chartType] }));
14
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardChartRenderer.js","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChartRenderer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAC,iCAAiC,EAAC,MAAM,qCAAqC,CAAC;AACtF,OAAO,EAIL,2BAA2B,GAC5B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAC,sBAAsB,EAAC,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAE5D,MAAM,4BAA4B,GAAgC,CAAC,EACjE,KAAK,EACL,WAAW,EACX,aAAa,GACd,EAAE,EAAE;IACH,MAAM,UAAU,GAAG,2BAA2B,CAC5C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CACnC,CAAC;IAEF,MAAM,YAAY,GAAG,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC;IAE1C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,CACL,eAAK,SAAS,EAAC,uEAAuE,qCAC/D,KAAK,CAAC,MAAM,CAAC,SAAS,IACvC,CACP,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CACL,cAAK,SAAS,EAAC,uEAAuE,iDAEhF,CACP,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QACpE,OAAO,KAAC,WAAW,IAAC,SAAS,EAAC,eAAe,GAAG,CAAC;IACnD,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAClC,OAAO,CACL,cAAK,SAAS,EAAC,uEAAuE,yCAEhF,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,oBAAoB,IACnB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GACvC;IACE,SAAS,EAAE,4BAA4B;IACvC,aAAa,EAAE,iCAAiC;IAChD,IAAI,EAAE,aAAa;CACpB,CAAC","sourcesContent":["import {SpinnerPane} from '@sqlrooms/ui';\nimport {BarChart3Icon} from 'lucide-react';\nimport {type FC} from 'react';\nimport {MosaicDashboardChartHeaderActions} from './MosaicDashboardChartHeaderActions';\nimport {\n type MosaicDashboardPanelRenderer,\n type ChartPanelConfig,\n type ChartPanelRendererProps,\n useStoreWithMosaicDashboard,\n} from '../dashboard/MosaicDashboardSlice';\nimport {useChartTypeDefinition} from '../chart-types/useChartTypeDefinition';\nimport {MosaicDashboardChart} from './MosaicDashboardChart';\n\nconst MosaicDashboardChartRenderer: FC<ChartPanelRendererProps> = ({\n panel,\n dashboardId,\n selectionName,\n}) => {\n const connection = useStoreWithMosaicDashboard(\n (state) => state.mosaic.connection,\n );\n\n const chartTypeDef = useChartTypeDefinition(panel.config.chartType);\n const tableName = panel.source?.tableName;\n\n if (!chartTypeDef) {\n return (\n <div className=\"text-muted-foreground flex h-full items-center justify-center text-sm\">\n Unknown chart type: {panel.config.chartType}\n </div>\n );\n }\n\n if (!tableName) {\n return (\n <div className=\"text-muted-foreground flex h-full items-center justify-center text-sm\">\n Please select a data table first\n </div>\n );\n }\n\n if (connection.status === 'loading' || connection.status === 'idle') {\n return <SpinnerPane className=\"h-full w-full\" />;\n }\n\n if (connection.status === 'error') {\n return (\n <div className=\"text-muted-foreground flex h-full items-center justify-center text-sm\">\n Mosaic connection failed\n </div>\n );\n }\n\n return (\n <MosaicDashboardChart\n dashboardId={dashboardId}\n selectionName={selectionName}\n panel={panel}\n chartTypeDef={chartTypeDef}\n tableName={tableName}\n connection={connection}\n />\n );\n};\n\nexport const mosaicDashboardChartRenderer: MosaicDashboardPanelRenderer<ChartPanelConfig> =\n {\n component: MosaicDashboardChartRenderer,\n headerActions: MosaicDashboardChartHeaderActions,\n icon: BarChart3Icon,\n };\n"]}
1
+ {"version":3,"file":"MosaicDashboardChartRenderer.js","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChartRenderer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAC,iCAAiC,EAAC,MAAM,qCAAqC,CAAC;AAEtF,OAAO,EAGL,2BAA2B,GAC5B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAC,sBAAsB,EAAC,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAE5D,MAAM,4BAA4B,GAAgC,CAAC,EACjE,KAAK,EACL,WAAW,EACX,SAAS,EACT,aAAa,GACd,EAAE,EAAE;IACH,MAAM,UAAU,GAAG,2BAA2B,CAC5C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CACnC,CAAC;IAEF,MAAM,YAAY,GAAG,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,SAAS,CAAC,aAAa,CAAC;IAE1C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,CACL,eAAK,SAAS,EAAC,uEAAuE,qCAC/D,KAAK,CAAC,MAAM,CAAC,SAAS,IACvC,CACP,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CACL,cAAK,SAAS,EAAC,uEAAuE,iDAEhF,CACP,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QACpE,OAAO,KAAC,WAAW,IAAC,SAAS,EAAC,eAAe,GAAG,CAAC;IACnD,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAClC,OAAO,CACL,cAAK,SAAS,EAAC,uEAAuE,yCAEhF,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,oBAAoB,IACnB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GACvC;IACE,SAAS,EAAE,4BAA4B;IACvC,aAAa,EAAE,iCAAiC;IAChD,IAAI,EAAE,aAAa;CACpB,CAAC","sourcesContent":["import {SpinnerPane} from '@sqlrooms/ui';\nimport {BarChart3Icon} from 'lucide-react';\nimport {type FC} from 'react';\nimport {MosaicDashboardChartHeaderActions} from './MosaicDashboardChartHeaderActions';\nimport type {ChartPanelConfig} from '../dashboard/dashboard-types';\nimport {\n type MosaicDashboardPanelRenderer,\n type ChartPanelRendererProps,\n useStoreWithMosaicDashboard,\n} from '../dashboard/MosaicDashboardSlice';\nimport {useChartTypeDefinition} from '../chart-types/useChartTypeDefinition';\nimport {MosaicDashboardChart} from './MosaicDashboardChart';\n\nconst MosaicDashboardChartRenderer: FC<ChartPanelRendererProps> = ({\n panel,\n dashboardId,\n dashboard,\n selectionName,\n}) => {\n const connection = useStoreWithMosaicDashboard(\n (state) => state.mosaic.connection,\n );\n\n const chartTypeDef = useChartTypeDefinition(panel.config.chartType);\n const tableName = dashboard.selectedTable;\n\n if (!chartTypeDef) {\n return (\n <div className=\"text-muted-foreground flex h-full items-center justify-center text-sm\">\n Unknown chart type: {panel.config.chartType}\n </div>\n );\n }\n\n if (!tableName) {\n return (\n <div className=\"text-muted-foreground flex h-full items-center justify-center text-sm\">\n Please select a data table first\n </div>\n );\n }\n\n if (connection.status === 'loading' || connection.status === 'idle') {\n return <SpinnerPane className=\"h-full w-full\" />;\n }\n\n if (connection.status === 'error') {\n return (\n <div className=\"text-muted-foreground flex h-full items-center justify-center text-sm\">\n Mosaic connection failed\n </div>\n );\n }\n\n return (\n <MosaicDashboardChart\n dashboardId={dashboardId}\n selectionName={selectionName}\n panel={panel}\n chartTypeDef={chartTypeDef}\n tableName={tableName}\n connection={connection}\n />\n );\n};\n\nexport const mosaicDashboardChartRenderer: MosaicDashboardPanelRenderer<ChartPanelConfig> =\n {\n component: MosaicDashboardChartRenderer,\n headerActions: MosaicDashboardChartHeaderActions,\n icon: BarChart3Icon,\n };\n"]}
@@ -1,7 +1,8 @@
1
1
  import { FC } from 'react';
2
2
  import { ComponentChartTypeDefinition, ChartRetainer, BrushSelectionParams } from '../chart-types/base-types';
3
- import { ChartPanelConfig } from '../dashboard/MosaicDashboardSlice';
3
+ import type { ChartPanelConfig } from '../dashboard/dashboard-types';
4
4
  import { MosaicReadyConnection } from '../MosaicSlice';
5
+ import type { ChartDataPolicy, ChartRuntimeIssueContext, ChartRuntimeIssueReporter } from '../chart-runtime';
5
6
  export type MosaicDashboardComponentChartProps = {
6
7
  tableName: string;
7
8
  panel: ChartPanelConfig;
@@ -9,6 +10,9 @@ export type MosaicDashboardComponentChartProps = {
9
10
  connection: MosaicReadyConnection;
10
11
  retention: ChartRetainer;
11
12
  params: BrushSelectionParams | undefined;
13
+ dataPolicy?: ChartDataPolicy | null;
14
+ runtimeIssueContext: ChartRuntimeIssueContext;
15
+ runtimeIssueReporter: ChartRuntimeIssueReporter;
12
16
  };
13
17
  export declare const MosaicDashboardComponentChart: FC<MosaicDashboardComponentChartProps>;
14
18
  //# sourceMappingURL=MosaicDashboardComponentChart.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardComponentChart.d.ts","sourceRoot":"","sources":["../../src/chart/MosaicDashboardComponentChart.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAC,EAAE,EAAC,MAAM,OAAO,CAAC;AAChC,OAAO,EACL,4BAA4B,EAC5B,aAAa,EACb,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAC,gBAAgB,EAAC,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAC,qBAAqB,EAAC,MAAM,gBAAgB,CAAC;AAErD,MAAM,MAAM,kCAAkC,GAAG;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,gBAAgB,CAAC;IACxB,mBAAmB,EAAE,4BAA4B,CAAC;IAClD,UAAU,EAAE,qBAAqB,CAAC;IAClC,SAAS,EAAE,aAAa,CAAC;IACzB,MAAM,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,EAAE,CAC5C,kCAAkC,CAgBnC,CAAC"}
1
+ {"version":3,"file":"MosaicDashboardComponentChart.d.ts","sourceRoot":"","sources":["../../src/chart/MosaicDashboardComponentChart.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAC,EAAE,EAAC,MAAM,OAAO,CAAC;AAChC,OAAO,EACL,4BAA4B,EAC5B,aAAa,EACb,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAC,qBAAqB,EAAC,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EACV,eAAe,EACf,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,kCAAkC,GAAG;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,gBAAgB,CAAC;IACxB,mBAAmB,EAAE,4BAA4B,CAAC;IAClD,UAAU,EAAE,qBAAqB,CAAC;IAClC,SAAS,EAAE,aAAa,CAAC;IACzB,MAAM,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACzC,UAAU,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACpC,mBAAmB,EAAE,wBAAwB,CAAC;IAC9C,oBAAoB,EAAE,yBAAyB,CAAC;CACjD,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,EAAE,CAC5C,kCAAkC,CAsBnC,CAAC"}
@@ -1,11 +1,14 @@
1
1
  import React from 'react';
2
- export const MosaicDashboardComponentChart = ({ tableName, panel, chartTypeDefinition, connection, retention, params, }) => {
2
+ export const MosaicDashboardComponentChart = ({ tableName, panel, chartTypeDefinition, connection, retention, params, dataPolicy, runtimeIssueContext, runtimeIssueReporter, }) => {
3
3
  return React.createElement(chartTypeDefinition.renderer, {
4
4
  tableName,
5
5
  config: panel.config,
6
6
  coordinator: connection.coordinator,
7
7
  params,
8
8
  retention,
9
+ dataPolicy,
10
+ runtimeIssueContext,
11
+ runtimeIssueReporter,
9
12
  });
10
13
  };
11
14
  //# sourceMappingURL=MosaicDashboardComponentChart.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardComponentChart.js","sourceRoot":"","sources":["../../src/chart/MosaicDashboardComponentChart.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAW,MAAM,OAAO,CAAC;AAkBhC,MAAM,CAAC,MAAM,6BAA6B,GAEtC,CAAC,EACH,SAAS,EACT,KAAK,EACL,mBAAmB,EACnB,UAAU,EACV,SAAS,EACT,MAAM,GACP,EAAE,EAAE;IACH,OAAO,KAAK,CAAC,aAAa,CAAC,mBAAmB,CAAC,QAAQ,EAAE;QACvD,SAAS;QACT,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,MAAM;QACN,SAAS;KACV,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import React, {FC} from 'react';\nimport {\n ComponentChartTypeDefinition,\n ChartRetainer,\n BrushSelectionParams,\n} from '../chart-types/base-types';\nimport {ChartPanelConfig} from '../dashboard/MosaicDashboardSlice';\nimport {MosaicReadyConnection} from '../MosaicSlice';\n\nexport type MosaicDashboardComponentChartProps = {\n tableName: string;\n panel: ChartPanelConfig;\n chartTypeDefinition: ComponentChartTypeDefinition;\n connection: MosaicReadyConnection;\n retention: ChartRetainer;\n params: BrushSelectionParams | undefined;\n};\n\nexport const MosaicDashboardComponentChart: FC<\n MosaicDashboardComponentChartProps\n> = ({\n tableName,\n panel,\n chartTypeDefinition,\n connection,\n retention,\n params,\n}) => {\n return React.createElement(chartTypeDefinition.renderer, {\n tableName,\n config: panel.config,\n coordinator: connection.coordinator,\n params,\n retention,\n });\n};\n"]}
1
+ {"version":3,"file":"MosaicDashboardComponentChart.js","sourceRoot":"","sources":["../../src/chart/MosaicDashboardComponentChart.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAW,MAAM,OAAO,CAAC;AA0BhC,MAAM,CAAC,MAAM,6BAA6B,GAEtC,CAAC,EACH,SAAS,EACT,KAAK,EACL,mBAAmB,EACnB,UAAU,EACV,SAAS,EACT,MAAM,EACN,UAAU,EACV,mBAAmB,EACnB,oBAAoB,GACrB,EAAE,EAAE;IACH,OAAO,KAAK,CAAC,aAAa,CAAC,mBAAmB,CAAC,QAAQ,EAAE;QACvD,SAAS;QACT,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,MAAM;QACN,SAAS;QACT,UAAU;QACV,mBAAmB;QACnB,oBAAoB;KACrB,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["import React, {FC} from 'react';\nimport {\n ComponentChartTypeDefinition,\n ChartRetainer,\n BrushSelectionParams,\n} from '../chart-types/base-types';\nimport type {ChartPanelConfig} from '../dashboard/dashboard-types';\nimport {MosaicReadyConnection} from '../MosaicSlice';\nimport type {\n ChartDataPolicy,\n ChartRuntimeIssueContext,\n ChartRuntimeIssueReporter,\n} from '../chart-runtime';\n\nexport type MosaicDashboardComponentChartProps = {\n tableName: string;\n panel: ChartPanelConfig;\n chartTypeDefinition: ComponentChartTypeDefinition;\n connection: MosaicReadyConnection;\n retention: ChartRetainer;\n params: BrushSelectionParams | undefined;\n dataPolicy?: ChartDataPolicy | null;\n runtimeIssueContext: ChartRuntimeIssueContext;\n runtimeIssueReporter: ChartRuntimeIssueReporter;\n};\n\nexport const MosaicDashboardComponentChart: FC<\n MosaicDashboardComponentChartProps\n> = ({\n tableName,\n panel,\n chartTypeDefinition,\n connection,\n retention,\n params,\n dataPolicy,\n runtimeIssueContext,\n runtimeIssueReporter,\n}) => {\n return React.createElement(chartTypeDefinition.renderer, {\n tableName,\n config: panel.config,\n coordinator: connection.coordinator,\n params,\n retention,\n dataPolicy,\n runtimeIssueContext,\n runtimeIssueReporter,\n });\n};\n"]}
@@ -1,10 +1,14 @@
1
1
  import { FC } from 'react';
2
2
  import { UseGenerateSpecResult } from './useGenerateSpec';
3
3
  import { ChartRetainer, BrushSelectionParams } from '../chart-types/base-types';
4
+ import type { ChartDataPolicy, ChartRuntimeIssueContext, ChartRuntimeIssueReporter } from '../chart-runtime';
4
5
  export type MosaicDashboardVgPlotChartProps = {
5
6
  spec: UseGenerateSpecResult;
6
7
  retention: ChartRetainer;
7
8
  params: BrushSelectionParams | undefined;
9
+ dataPolicy?: ChartDataPolicy | null;
10
+ runtimeIssueContext: ChartRuntimeIssueContext;
11
+ runtimeIssueReporter: ChartRuntimeIssueReporter;
8
12
  };
9
13
  export declare const MosaicDashboardVgPlotChart: FC<MosaicDashboardVgPlotChartProps>;
10
14
  //# sourceMappingURL=MosaicDashboardVgPlotChart.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardVgPlotChart.d.ts","sourceRoot":"","sources":["../../src/chart/MosaicDashboardVgPlotChart.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,EAAE,EAAC,MAAM,OAAO,CAAC;AACzB,OAAO,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EAAC,aAAa,EAAE,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAE9E,MAAM,MAAM,+BAA+B,GAAG;IAC5C,IAAI,EAAE,qBAAqB,CAAC;IAC5B,SAAS,EAAE,aAAa,CAAC;IACzB,MAAM,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,EAAE,CACzC,+BAA+B,CAWhC,CAAC"}
1
+ {"version":3,"file":"MosaicDashboardVgPlotChart.d.ts","sourceRoot":"","sources":["../../src/chart/MosaicDashboardVgPlotChart.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,EAAE,EAAC,MAAM,OAAO,CAAC;AACzB,OAAO,EAAC,qBAAqB,EAAC,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EAAC,aAAa,EAAE,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAC9E,OAAO,KAAK,EACV,eAAe,EACf,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,+BAA+B,GAAG;IAC5C,IAAI,EAAE,qBAAqB,CAAC;IAC5B,SAAS,EAAE,aAAa,CAAC;IACzB,MAAM,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACzC,UAAU,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACpC,mBAAmB,EAAE,wBAAwB,CAAC;IAC9C,oBAAoB,EAAE,yBAAyB,CAAC;CACjD,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,EAAE,CACzC,+BAA+B,CA2BhC,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { MosaicDashboardVgPlotError } from './MosaicDashboardVgPlotError';
3
3
  import { VgPlotChart } from '../VgPlotChart';
4
- export const MosaicDashboardVgPlotChart = ({ spec, retention, params }) => {
4
+ export const MosaicDashboardVgPlotChart = ({ spec, retention, params, dataPolicy, runtimeIssueContext, runtimeIssueReporter, }) => {
5
5
  if (spec.error) {
6
6
  return (_jsx("div", { className: "flex h-full flex-col items-center justify-center", children: _jsx(MosaicDashboardVgPlotError, { error: spec.error }) }));
7
7
  }
8
- return _jsx(VgPlotChart, { spec: spec.spec, params: params, retention: retention });
8
+ return (_jsx(VgPlotChart, { spec: spec.spec, params: params, retention: retention, dataPolicy: dataPolicy, runtimeIssueContext: runtimeIssueContext, runtimeIssueReporter: runtimeIssueReporter }));
9
9
  };
10
10
  //# sourceMappingURL=MosaicDashboardVgPlotChart.js.map