@sqlrooms/mosaic 0.29.0-rc.2 → 0.29.0-rc.4

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 (454) hide show
  1. package/README.md +209 -0
  2. package/dist/MosaicChartBuilder.d.ts +44 -13
  3. package/dist/MosaicChartBuilder.d.ts.map +1 -1
  4. package/dist/MosaicChartBuilder.js +22 -30
  5. package/dist/MosaicChartBuilder.js.map +1 -1
  6. package/dist/MosaicSlice.d.ts +28 -10
  7. package/dist/MosaicSlice.d.ts.map +1 -1
  8. package/dist/MosaicSlice.js +77 -11
  9. package/dist/MosaicSlice.js.map +1 -1
  10. package/dist/ResponsivePlot.d.ts +23 -0
  11. package/dist/ResponsivePlot.d.ts.map +1 -0
  12. package/dist/ResponsivePlot.js +43 -0
  13. package/dist/ResponsivePlot.js.map +1 -0
  14. package/dist/VgPlotChart.d.ts +18 -2
  15. package/dist/VgPlotChart.d.ts.map +1 -1
  16. package/dist/VgPlotChart.js +112 -26
  17. package/dist/VgPlotChart.js.map +1 -1
  18. package/dist/boxplot/BoxPlotClient.d.ts +58 -0
  19. package/dist/boxplot/BoxPlotClient.d.ts.map +1 -0
  20. package/dist/boxplot/BoxPlotClient.js +264 -0
  21. package/dist/boxplot/BoxPlotClient.js.map +1 -0
  22. package/dist/chart/MosaicDashboardChart.d.ts +14 -0
  23. package/dist/chart/MosaicDashboardChart.d.ts.map +1 -0
  24. package/dist/chart/MosaicDashboardChart.js +21 -0
  25. package/dist/chart/MosaicDashboardChart.js.map +1 -0
  26. package/dist/chart/MosaicDashboardChartContent.d.ts +16 -0
  27. package/dist/chart/MosaicDashboardChartContent.d.ts.map +1 -0
  28. package/dist/chart/MosaicDashboardChartContent.js +18 -0
  29. package/dist/chart/MosaicDashboardChartContent.js.map +1 -0
  30. package/dist/chart/MosaicDashboardChartHeaderActions.d.ts +4 -0
  31. package/dist/chart/MosaicDashboardChartHeaderActions.d.ts.map +1 -0
  32. package/dist/chart/MosaicDashboardChartHeaderActions.js +16 -0
  33. package/dist/chart/MosaicDashboardChartHeaderActions.js.map +1 -0
  34. package/dist/chart/MosaicDashboardChartRenderer.d.ts +3 -0
  35. package/dist/chart/MosaicDashboardChartRenderer.d.ts.map +1 -0
  36. package/dist/chart/MosaicDashboardChartRenderer.js +31 -0
  37. package/dist/chart/MosaicDashboardChartRenderer.js.map +1 -0
  38. package/dist/chart/MosaicDashboardComponentChart.d.ts +14 -0
  39. package/dist/chart/MosaicDashboardComponentChart.d.ts.map +1 -0
  40. package/dist/chart/MosaicDashboardComponentChart.js +11 -0
  41. package/dist/chart/MosaicDashboardComponentChart.js.map +1 -0
  42. package/dist/chart/MosaicDashboardVgPlotChart.d.ts +10 -0
  43. package/dist/chart/MosaicDashboardVgPlotChart.d.ts.map +1 -0
  44. package/dist/chart/MosaicDashboardVgPlotChart.js +10 -0
  45. package/dist/chart/MosaicDashboardVgPlotChart.js.map +1 -0
  46. package/dist/chart/MosaicDashboardVgPlotError.d.ts +8 -0
  47. package/dist/chart/MosaicDashboardVgPlotError.d.ts.map +1 -0
  48. package/dist/chart/MosaicDashboardVgPlotError.js +11 -0
  49. package/dist/chart/MosaicDashboardVgPlotError.js.map +1 -0
  50. package/dist/chart/chart-settings/ChartSettings.d.ts +44 -0
  51. package/dist/chart/chart-settings/ChartSettings.d.ts.map +1 -0
  52. package/dist/chart/chart-settings/ChartSettings.js +71 -0
  53. package/dist/chart/chart-settings/ChartSettings.js.map +1 -0
  54. package/dist/chart/chart-settings/ChartSettingsContent.d.ts +13 -0
  55. package/dist/chart/chart-settings/ChartSettingsContent.d.ts.map +1 -0
  56. package/dist/chart/chart-settings/ChartSettingsContent.js +18 -0
  57. package/dist/chart/chart-settings/ChartSettingsContent.js.map +1 -0
  58. package/dist/chart/chart-settings/ChartSettingsContext.d.ts +27 -0
  59. package/dist/chart/chart-settings/ChartSettingsContext.d.ts.map +1 -0
  60. package/dist/chart/chart-settings/ChartSettingsContext.js +35 -0
  61. package/dist/chart/chart-settings/ChartSettingsContext.js.map +1 -0
  62. package/dist/chart/chart-settings/ChartSettingsPanel.d.ts +14 -0
  63. package/dist/chart/chart-settings/ChartSettingsPanel.d.ts.map +1 -0
  64. package/dist/chart/chart-settings/ChartSettingsPanel.js +17 -0
  65. package/dist/chart/chart-settings/ChartSettingsPanel.js.map +1 -0
  66. package/dist/chart/chart-settings/ChartSpecViewerPanel.d.ts +9 -0
  67. package/dist/chart/chart-settings/ChartSpecViewerPanel.d.ts.map +1 -0
  68. package/dist/chart/chart-settings/ChartSpecViewerPanel.js +11 -0
  69. package/dist/chart/chart-settings/ChartSpecViewerPanel.js.map +1 -0
  70. package/dist/chart/chart-settings/ChartTypeSelector.d.ts +9 -0
  71. package/dist/chart/chart-settings/ChartTypeSelector.d.ts.map +1 -0
  72. package/dist/chart/chart-settings/ChartTypeSelector.js +16 -0
  73. package/dist/chart/chart-settings/ChartTypeSelector.js.map +1 -0
  74. package/dist/chart/chart-settings/useTableColumns.d.ts +3 -0
  75. package/dist/chart/chart-settings/useTableColumns.d.ts.map +1 -0
  76. package/dist/chart/chart-settings/useTableColumns.js +12 -0
  77. package/dist/chart/chart-settings/useTableColumns.js.map +1 -0
  78. package/dist/chart/useBrushSelectionParams.d.ts +3 -0
  79. package/dist/chart/useBrushSelectionParams.d.ts.map +1 -0
  80. package/dist/chart/useBrushSelectionParams.js +16 -0
  81. package/dist/chart/useBrushSelectionParams.js.map +1 -0
  82. package/dist/chart/useChartRetainer.d.ts +3 -0
  83. package/dist/chart/useChartRetainer.d.ts.map +1 -0
  84. package/dist/chart/useChartRetainer.js +11 -0
  85. package/dist/chart/useChartRetainer.js.map +1 -0
  86. package/dist/chart/useGenerateSpec.d.ts +13 -0
  87. package/dist/chart/useGenerateSpec.d.ts.map +1 -0
  88. package/dist/chart/useGenerateSpec.js +32 -0
  89. package/dist/chart/useGenerateSpec.js.map +1 -0
  90. package/dist/chart-builders/AggregationSelector.d.ts +11 -0
  91. package/dist/chart-builders/AggregationSelector.d.ts.map +1 -0
  92. package/dist/chart-builders/AggregationSelector.js +9 -0
  93. package/dist/chart-builders/AggregationSelector.js.map +1 -0
  94. package/dist/chart-builders/ChartBuilderActions.d.ts +6 -0
  95. package/dist/chart-builders/ChartBuilderActions.d.ts.map +1 -0
  96. package/dist/chart-builders/ChartBuilderActions.js +36 -0
  97. package/dist/chart-builders/ChartBuilderActions.js.map +1 -0
  98. package/dist/chart-builders/ChartBuilderContent.d.ts +12 -12
  99. package/dist/chart-builders/ChartBuilderContent.d.ts.map +1 -1
  100. package/dist/chart-builders/ChartBuilderContent.js +21 -52
  101. package/dist/chart-builders/ChartBuilderContent.js.map +1 -1
  102. package/dist/chart-builders/ChartBuilderContext.d.ts +8 -4
  103. package/dist/chart-builders/ChartBuilderContext.d.ts.map +1 -1
  104. package/dist/chart-builders/ChartBuilderContext.js +5 -0
  105. package/dist/chart-builders/ChartBuilderContext.js.map +1 -1
  106. package/dist/chart-builders/ChartBuilderDialog.d.ts +30 -8
  107. package/dist/chart-builders/ChartBuilderDialog.d.ts.map +1 -1
  108. package/dist/chart-builders/ChartBuilderDialog.js +25 -10
  109. package/dist/chart-builders/ChartBuilderDialog.js.map +1 -1
  110. package/dist/chart-builders/ChartBuilderFields.d.ts +6 -0
  111. package/dist/chart-builders/ChartBuilderFields.d.ts.map +1 -0
  112. package/dist/chart-builders/ChartBuilderFields.js +39 -0
  113. package/dist/chart-builders/ChartBuilderFields.js.map +1 -0
  114. package/dist/chart-builders/ChartBuilderRoot.d.ts +25 -0
  115. package/dist/chart-builders/ChartBuilderRoot.d.ts.map +1 -0
  116. package/dist/chart-builders/ChartBuilderRoot.js +42 -0
  117. package/dist/chart-builders/ChartBuilderRoot.js.map +1 -0
  118. package/dist/chart-builders/ChartBuilderTypeGrid.d.ts +7 -0
  119. package/dist/chart-builders/ChartBuilderTypeGrid.d.ts.map +1 -0
  120. package/dist/chart-builders/ChartBuilderTypeGrid.js +23 -0
  121. package/dist/chart-builders/ChartBuilderTypeGrid.js.map +1 -0
  122. package/dist/chart-builders/ColumnSelector.d.ts +15 -0
  123. package/dist/chart-builders/ColumnSelector.d.ts.map +1 -0
  124. package/dist/chart-builders/ColumnSelector.js +31 -0
  125. package/dist/chart-builders/ColumnSelector.js.map +1 -0
  126. package/dist/chart-builders/Field.d.ts +11 -0
  127. package/dist/chart-builders/Field.d.ts.map +1 -0
  128. package/dist/chart-builders/Field.js +9 -0
  129. package/dist/chart-builders/Field.js.map +1 -0
  130. package/dist/chart-builders/FieldSelectorInput.d.ts +2 -1
  131. package/dist/chart-builders/FieldSelectorInput.d.ts.map +1 -1
  132. package/dist/chart-builders/FieldSelectorInput.js +5 -5
  133. package/dist/chart-builders/FieldSelectorInput.js.map +1 -1
  134. package/dist/chart-builders/MultiFieldSelector.d.ts +14 -0
  135. package/dist/chart-builders/MultiFieldSelector.d.ts.map +1 -0
  136. package/dist/chart-builders/MultiFieldSelector.js +53 -0
  137. package/dist/chart-builders/MultiFieldSelector.js.map +1 -0
  138. package/dist/chart-builders/TemporalGranularitySelector.d.ts +10 -0
  139. package/dist/chart-builders/TemporalGranularitySelector.d.ts.map +1 -0
  140. package/dist/chart-builders/TemporalGranularitySelector.js +37 -0
  141. package/dist/chart-builders/TemporalGranularitySelector.js.map +1 -0
  142. package/dist/chart-builders/chartSpecTitle.d.ts +3 -4
  143. package/dist/chart-builders/chartSpecTitle.d.ts.map +1 -1
  144. package/dist/chart-builders/chartSpecTitle.js +3 -5
  145. package/dist/chart-builders/chartSpecTitle.js.map +1 -1
  146. package/dist/chart-builders/chartTypeUtils.d.ts +13 -0
  147. package/dist/chart-builders/chartTypeUtils.d.ts.map +1 -0
  148. package/dist/chart-builders/chartTypeUtils.js +47 -0
  149. package/dist/chart-builders/chartTypeUtils.js.map +1 -0
  150. package/dist/chart-builders/constants.d.ts +12 -0
  151. package/dist/chart-builders/constants.d.ts.map +1 -0
  152. package/dist/chart-builders/constants.js +47 -0
  153. package/dist/chart-builders/constants.js.map +1 -0
  154. package/dist/chart-builders/createChartBuilderStore.d.ts +11 -0
  155. package/dist/chart-builders/createChartBuilderStore.d.ts.map +1 -0
  156. package/dist/chart-builders/createChartBuilderStore.js +26 -0
  157. package/dist/chart-builders/createChartBuilderStore.js.map +1 -0
  158. package/dist/chart-types/base-types.d.ts +148 -0
  159. package/dist/chart-types/base-types.d.ts.map +1 -0
  160. package/dist/chart-types/base-types.js +11 -0
  161. package/dist/chart-types/base-types.js.map +1 -0
  162. package/dist/chart-types/box-plot/BoxPlotSettings.d.ts +3 -0
  163. package/dist/chart-types/box-plot/BoxPlotSettings.d.ts.map +1 -0
  164. package/dist/chart-types/box-plot/BoxPlotSettings.js +9 -0
  165. package/dist/chart-types/box-plot/BoxPlotSettings.js.map +1 -0
  166. package/dist/chart-types/box-plot/definition.d.ts +4 -0
  167. package/dist/chart-types/box-plot/definition.d.ts.map +1 -0
  168. package/dist/chart-types/box-plot/definition.js +19 -0
  169. package/dist/chart-types/box-plot/definition.js.map +1 -0
  170. package/dist/chart-types/box-plot/renderer/BoxPlotErrorBoundary.d.ts +18 -0
  171. package/dist/chart-types/box-plot/renderer/BoxPlotErrorBoundary.d.ts.map +1 -0
  172. package/dist/chart-types/box-plot/renderer/BoxPlotErrorBoundary.js +28 -0
  173. package/dist/chart-types/box-plot/renderer/BoxPlotErrorBoundary.js.map +1 -0
  174. package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.d.ts +9 -0
  175. package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.d.ts.map +1 -0
  176. package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.js +115 -0
  177. package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.js.map +1 -0
  178. package/dist/chart-types/box-plot/renderer/constants.d.ts +24 -0
  179. package/dist/chart-types/box-plot/renderer/constants.d.ts.map +1 -0
  180. package/dist/chart-types/box-plot/renderer/constants.js +17 -0
  181. package/dist/chart-types/box-plot/renderer/constants.js.map +1 -0
  182. package/dist/chart-types/box-plot/renderer/plot.d.ts +14 -0
  183. package/dist/chart-types/box-plot/renderer/plot.d.ts.map +1 -0
  184. package/dist/chart-types/box-plot/renderer/plot.js +91 -0
  185. package/dist/chart-types/box-plot/renderer/plot.js.map +1 -0
  186. package/dist/chart-types/box-plot/renderer/useBoxPlotClient.d.ts +14 -0
  187. package/dist/chart-types/box-plot/renderer/useBoxPlotClient.d.ts.map +1 -0
  188. package/dist/chart-types/box-plot/renderer/useBoxPlotClient.js +45 -0
  189. package/dist/chart-types/box-plot/renderer/useBoxPlotClient.js.map +1 -0
  190. package/dist/chart-types/box-plot/renderer/utils.d.ts +6 -0
  191. package/dist/chart-types/box-plot/renderer/utils.d.ts.map +1 -0
  192. package/dist/chart-types/box-plot/renderer/utils.js +34 -0
  193. package/dist/chart-types/box-plot/renderer/utils.js.map +1 -0
  194. package/dist/chart-types/box-plot/schema.d.ts +16 -0
  195. package/dist/chart-types/box-plot/schema.d.ts.map +1 -0
  196. package/dist/chart-types/box-plot/schema.js +11 -0
  197. package/dist/chart-types/box-plot/schema.js.map +1 -0
  198. package/dist/chart-types/box-plot/tool.d.ts +44 -0
  199. package/dist/chart-types/box-plot/tool.d.ts.map +1 -0
  200. package/dist/chart-types/box-plot/tool.js +59 -0
  201. package/dist/chart-types/box-plot/tool.js.map +1 -0
  202. package/dist/chart-types/bubble-chart/BubbleChartSettings.d.ts +3 -0
  203. package/dist/chart-types/bubble-chart/BubbleChartSettings.d.ts.map +1 -0
  204. package/dist/chart-types/bubble-chart/BubbleChartSettings.js +9 -0
  205. package/dist/chart-types/bubble-chart/BubbleChartSettings.js.map +1 -0
  206. package/dist/chart-types/bubble-chart/definition.d.ts +4 -0
  207. package/dist/chart-types/bubble-chart/definition.d.ts.map +1 -0
  208. package/dist/chart-types/bubble-chart/definition.js +19 -0
  209. package/dist/chart-types/bubble-chart/definition.js.map +1 -0
  210. package/dist/chart-types/bubble-chart/schema.d.ts +18 -0
  211. package/dist/chart-types/bubble-chart/schema.d.ts.map +1 -0
  212. package/dist/chart-types/bubble-chart/schema.js +15 -0
  213. package/dist/chart-types/bubble-chart/schema.js.map +1 -0
  214. package/dist/chart-types/bubble-chart/spec.d.ts +4 -0
  215. package/dist/chart-types/bubble-chart/spec.d.ts.map +1 -0
  216. package/dist/chart-types/bubble-chart/spec.js +31 -0
  217. package/dist/chart-types/bubble-chart/spec.js.map +1 -0
  218. package/dist/chart-types/bubble-chart/tool.d.ts +46 -0
  219. package/dist/chart-types/bubble-chart/tool.d.ts.map +1 -0
  220. package/dist/chart-types/bubble-chart/tool.js +58 -0
  221. package/dist/chart-types/bubble-chart/tool.js.map +1 -0
  222. package/dist/chart-types/chart-config.d.ts +92 -0
  223. package/dist/chart-types/chart-config.d.ts.map +1 -0
  224. package/dist/chart-types/chart-config.js +47 -0
  225. package/dist/chart-types/chart-config.js.map +1 -0
  226. package/dist/chart-types/count-plot/CountPlotSettings.d.ts +3 -0
  227. package/dist/chart-types/count-plot/CountPlotSettings.d.ts.map +1 -0
  228. package/dist/chart-types/count-plot/CountPlotSettings.js +9 -0
  229. package/dist/chart-types/count-plot/CountPlotSettings.js.map +1 -0
  230. package/dist/chart-types/count-plot/definition.d.ts +4 -0
  231. package/dist/chart-types/count-plot/definition.d.ts.map +1 -0
  232. package/dist/chart-types/count-plot/definition.js +19 -0
  233. package/dist/chart-types/count-plot/definition.js.map +1 -0
  234. package/dist/chart-types/count-plot/schema.d.ts +14 -0
  235. package/dist/chart-types/count-plot/schema.d.ts.map +1 -0
  236. package/dist/chart-types/count-plot/schema.js +13 -0
  237. package/dist/chart-types/count-plot/schema.js.map +1 -0
  238. package/dist/chart-types/count-plot/spec.d.ts +4 -0
  239. package/dist/chart-types/count-plot/spec.d.ts.map +1 -0
  240. package/dist/chart-types/count-plot/spec.js +49 -0
  241. package/dist/chart-types/count-plot/spec.js.map +1 -0
  242. package/dist/chart-types/count-plot/tool.d.ts +42 -0
  243. package/dist/chart-types/count-plot/tool.d.ts.map +1 -0
  244. package/dist/chart-types/count-plot/tool.js +55 -0
  245. package/dist/chart-types/count-plot/tool.js.map +1 -0
  246. package/dist/chart-types/custom-spec/CustomSpecSettings.d.ts +7 -0
  247. package/dist/chart-types/custom-spec/CustomSpecSettings.d.ts.map +1 -0
  248. package/dist/chart-types/custom-spec/CustomSpecSettings.js +30 -0
  249. package/dist/chart-types/custom-spec/CustomSpecSettings.js.map +1 -0
  250. package/dist/chart-types/custom-spec/definition.d.ts +4 -0
  251. package/dist/chart-types/custom-spec/definition.d.ts.map +1 -0
  252. package/dist/chart-types/custom-spec/definition.js +17 -0
  253. package/dist/chart-types/custom-spec/definition.js.map +1 -0
  254. package/dist/chart-types/custom-spec/schema.d.ts +14 -0
  255. package/dist/chart-types/custom-spec/schema.d.ts.map +1 -0
  256. package/dist/chart-types/custom-spec/schema.js +10 -0
  257. package/dist/chart-types/custom-spec/schema.js.map +1 -0
  258. package/dist/chart-types/custom-spec/spec.d.ts +4 -0
  259. package/dist/chart-types/custom-spec/spec.d.ts.map +1 -0
  260. package/dist/chart-types/custom-spec/spec.js +24 -0
  261. package/dist/chart-types/custom-spec/spec.js.map +1 -0
  262. package/dist/chart-types/errors.d.ts +23 -0
  263. package/dist/chart-types/errors.d.ts.map +1 -0
  264. package/dist/chart-types/errors.js +26 -0
  265. package/dist/chart-types/errors.js.map +1 -0
  266. package/dist/chart-types/heatmap/HeatmapSettings.d.ts +3 -0
  267. package/dist/chart-types/heatmap/HeatmapSettings.d.ts.map +1 -0
  268. package/dist/chart-types/heatmap/HeatmapSettings.js +9 -0
  269. package/dist/chart-types/heatmap/HeatmapSettings.js.map +1 -0
  270. package/dist/chart-types/heatmap/definition.d.ts +4 -0
  271. package/dist/chart-types/heatmap/definition.d.ts.map +1 -0
  272. package/dist/chart-types/heatmap/definition.js +19 -0
  273. package/dist/chart-types/heatmap/definition.js.map +1 -0
  274. package/dist/chart-types/heatmap/schema.d.ts +16 -0
  275. package/dist/chart-types/heatmap/schema.d.ts.map +1 -0
  276. package/dist/chart-types/heatmap/schema.js +11 -0
  277. package/dist/chart-types/heatmap/schema.js.map +1 -0
  278. package/dist/chart-types/heatmap/spec.d.ts +4 -0
  279. package/dist/chart-types/heatmap/spec.d.ts.map +1 -0
  280. package/dist/chart-types/heatmap/spec.js +32 -0
  281. package/dist/chart-types/heatmap/spec.js.map +1 -0
  282. package/dist/chart-types/heatmap/tool.d.ts +44 -0
  283. package/dist/chart-types/heatmap/tool.d.ts.map +1 -0
  284. package/dist/chart-types/heatmap/tool.js +59 -0
  285. package/dist/chart-types/heatmap/tool.js.map +1 -0
  286. package/dist/chart-types/histogram/HistogramSettings.d.ts +3 -0
  287. package/dist/chart-types/histogram/HistogramSettings.d.ts.map +1 -0
  288. package/dist/chart-types/histogram/HistogramSettings.js +9 -0
  289. package/dist/chart-types/histogram/HistogramSettings.js.map +1 -0
  290. package/dist/chart-types/histogram/definition.d.ts +4 -0
  291. package/dist/chart-types/histogram/definition.d.ts.map +1 -0
  292. package/dist/chart-types/histogram/definition.js +19 -0
  293. package/dist/chart-types/histogram/definition.js.map +1 -0
  294. package/dist/chart-types/histogram/schema.d.ts +14 -0
  295. package/dist/chart-types/histogram/schema.d.ts.map +1 -0
  296. package/dist/chart-types/histogram/schema.js +13 -0
  297. package/dist/chart-types/histogram/schema.js.map +1 -0
  298. package/dist/chart-types/histogram/spec.d.ts +4 -0
  299. package/dist/chart-types/histogram/spec.d.ts.map +1 -0
  300. package/dist/chart-types/histogram/spec.js +36 -0
  301. package/dist/chart-types/histogram/spec.js.map +1 -0
  302. package/dist/chart-types/histogram/tool.d.ts +42 -0
  303. package/dist/chart-types/histogram/tool.d.ts.map +1 -0
  304. package/dist/chart-types/histogram/tool.js +55 -0
  305. package/dist/chart-types/histogram/tool.js.map +1 -0
  306. package/dist/chart-types/index.d.ts +115 -0
  307. package/dist/chart-types/index.d.ts.map +1 -0
  308. package/dist/chart-types/index.js +100 -0
  309. package/dist/chart-types/index.js.map +1 -0
  310. package/dist/chart-types/line-chart/LineChartSettings.d.ts +7 -0
  311. package/dist/chart-types/line-chart/LineChartSettings.d.ts.map +1 -0
  312. package/dist/chart-types/line-chart/LineChartSettings.js +22 -0
  313. package/dist/chart-types/line-chart/LineChartSettings.js.map +1 -0
  314. package/dist/chart-types/line-chart/definition.d.ts +4 -0
  315. package/dist/chart-types/line-chart/definition.d.ts.map +1 -0
  316. package/dist/chart-types/line-chart/definition.js +19 -0
  317. package/dist/chart-types/line-chart/definition.js.map +1 -0
  318. package/dist/chart-types/line-chart/schema.d.ts +83 -0
  319. package/dist/chart-types/line-chart/schema.d.ts.map +1 -0
  320. package/dist/chart-types/line-chart/schema.js +39 -0
  321. package/dist/chart-types/line-chart/schema.js.map +1 -0
  322. package/dist/chart-types/line-chart/spec.d.ts +4 -0
  323. package/dist/chart-types/line-chart/spec.d.ts.map +1 -0
  324. package/dist/chart-types/line-chart/spec.js +91 -0
  325. package/dist/chart-types/line-chart/spec.js.map +1 -0
  326. package/dist/chart-types/line-chart/tool.d.ts +68 -0
  327. package/dist/chart-types/line-chart/tool.d.ts.map +1 -0
  328. package/dist/chart-types/line-chart/tool.js +66 -0
  329. package/dist/chart-types/line-chart/tool.js.map +1 -0
  330. package/dist/chart-types/tool-schemas.d.ts +8 -0
  331. package/dist/chart-types/tool-schemas.d.ts.map +1 -0
  332. package/dist/chart-types/tool-schemas.js +18 -0
  333. package/dist/chart-types/tool-schemas.js.map +1 -0
  334. package/dist/chart-types/tool-types.d.ts +26 -0
  335. package/dist/chart-types/tool-types.d.ts.map +1 -0
  336. package/dist/chart-types/tool-types.js +2 -0
  337. package/dist/chart-types/tool-types.js.map +1 -0
  338. package/dist/chart-types/tool-validation.d.ts +3 -0
  339. package/dist/chart-types/tool-validation.d.ts.map +1 -0
  340. package/dist/chart-types/tool-validation.js +11 -0
  341. package/dist/chart-types/tool-validation.js.map +1 -0
  342. package/dist/chart-types/useChartTypeDefinition.d.ts +3 -0
  343. package/dist/chart-types/useChartTypeDefinition.d.ts.map +1 -0
  344. package/dist/chart-types/useChartTypeDefinition.js +8 -0
  345. package/dist/chart-types/useChartTypeDefinition.js.map +1 -0
  346. package/dist/dashboard/DashboardPanelErrorBoundary.d.ts +17 -0
  347. package/dist/dashboard/DashboardPanelErrorBoundary.d.ts.map +1 -0
  348. package/dist/dashboard/DashboardPanelErrorBoundary.js +21 -0
  349. package/dist/dashboard/DashboardPanelErrorBoundary.js.map +1 -0
  350. package/dist/dashboard/MosaicDashboard.d.ts +2 -4
  351. package/dist/dashboard/MosaicDashboard.d.ts.map +1 -1
  352. package/dist/dashboard/MosaicDashboard.js +38 -19
  353. package/dist/dashboard/MosaicDashboard.js.map +1 -1
  354. package/dist/dashboard/MosaicDashboardContext.d.ts +1 -0
  355. package/dist/dashboard/MosaicDashboardContext.d.ts.map +1 -1
  356. package/dist/dashboard/MosaicDashboardContext.js.map +1 -1
  357. package/dist/dashboard/MosaicDashboardEmptyState.d.ts +2 -0
  358. package/dist/dashboard/MosaicDashboardEmptyState.d.ts.map +1 -0
  359. package/dist/dashboard/MosaicDashboardEmptyState.js +50 -0
  360. package/dist/dashboard/MosaicDashboardEmptyState.js.map +1 -0
  361. package/dist/dashboard/MosaicDashboardPanel.d.ts +3 -0
  362. package/dist/dashboard/MosaicDashboardPanel.d.ts.map +1 -0
  363. package/dist/dashboard/MosaicDashboardPanel.js +26 -0
  364. package/dist/dashboard/MosaicDashboardPanel.js.map +1 -0
  365. package/dist/dashboard/MosaicDashboardPanelDragOverlay.d.ts +8 -0
  366. package/dist/dashboard/MosaicDashboardPanelDragOverlay.d.ts.map +1 -0
  367. package/dist/dashboard/MosaicDashboardPanelDragOverlay.js +17 -0
  368. package/dist/dashboard/MosaicDashboardPanelDragOverlay.js.map +1 -0
  369. package/dist/dashboard/MosaicDashboardPanelHeader.d.ts +13 -0
  370. package/dist/dashboard/MosaicDashboardPanelHeader.d.ts.map +1 -0
  371. package/dist/dashboard/MosaicDashboardPanelHeader.js +30 -0
  372. package/dist/dashboard/MosaicDashboardPanelHeader.js.map +1 -0
  373. package/dist/dashboard/MosaicDashboardPanelLayout.d.ts +10 -0
  374. package/dist/dashboard/MosaicDashboardPanelLayout.d.ts.map +1 -0
  375. package/dist/dashboard/MosaicDashboardPanelLayout.js +46 -0
  376. package/dist/dashboard/MosaicDashboardPanelLayout.js.map +1 -0
  377. package/dist/dashboard/MosaicDashboardPanels.d.ts +2 -0
  378. package/dist/dashboard/MosaicDashboardPanels.d.ts.map +1 -0
  379. package/dist/dashboard/MosaicDashboardPanels.js +53 -0
  380. package/dist/dashboard/MosaicDashboardPanels.js.map +1 -0
  381. package/dist/dashboard/MosaicDashboardSlice.d.ts +607 -27
  382. package/dist/dashboard/MosaicDashboardSlice.d.ts.map +1 -1
  383. package/dist/dashboard/MosaicDashboardSlice.js +525 -93
  384. package/dist/dashboard/MosaicDashboardSlice.js.map +1 -1
  385. package/dist/dashboard/MosaicDashboardToolbar.d.ts.map +1 -1
  386. package/dist/dashboard/MosaicDashboardToolbar.js +74 -7
  387. package/dist/dashboard/MosaicDashboardToolbar.js.map +1 -1
  388. package/dist/dashboard/defaultPanelRenderers.d.ts +3 -0
  389. package/dist/dashboard/defaultPanelRenderers.d.ts.map +1 -0
  390. package/dist/dashboard/defaultPanelRenderers.js +13 -0
  391. package/dist/dashboard/defaultPanelRenderers.js.map +1 -0
  392. package/dist/dashboard/utils.d.ts +3 -0
  393. package/dist/dashboard/utils.d.ts.map +1 -0
  394. package/dist/dashboard/utils.js +16 -0
  395. package/dist/dashboard/utils.js.map +1 -0
  396. package/dist/editor/MosaicChartDisplay.d.ts.map +1 -1
  397. package/dist/editor/MosaicChartDisplay.js +6 -1
  398. package/dist/editor/MosaicChartDisplay.js.map +1 -1
  399. package/dist/index.d.ts +28 -5
  400. package/dist/index.d.ts.map +1 -1
  401. package/dist/index.js +20 -3
  402. package/dist/index.js.map +1 -1
  403. package/dist/profiler/MosaicDashboardProfilerPanelRenderer.d.ts +3 -0
  404. package/dist/profiler/MosaicDashboardProfilerPanelRenderer.d.ts.map +1 -0
  405. package/dist/profiler/MosaicDashboardProfilerPanelRenderer.js +32 -0
  406. package/dist/profiler/MosaicDashboardProfilerPanelRenderer.js.map +1 -0
  407. package/dist/profiler/useMosaicProfiler.d.ts.map +1 -1
  408. package/dist/profiler/useMosaicProfiler.js.map +1 -1
  409. package/dist/tableInterop.js.map +1 -1
  410. package/dist/text/MosaicDashboardTextRenderer.d.ts +3 -0
  411. package/dist/text/MosaicDashboardTextRenderer.d.ts.map +1 -0
  412. package/dist/text/MosaicDashboardTextRenderer.js +46 -0
  413. package/dist/text/MosaicDashboardTextRenderer.js.map +1 -0
  414. package/dist/useMosaicClient.d.ts +4 -15
  415. package/dist/useMosaicClient.d.ts.map +1 -1
  416. package/dist/useMosaicClient.js +10 -4
  417. package/dist/useMosaicClient.js.map +1 -1
  418. package/package.json +40 -31
  419. package/dist/chart-builders/builders.d.ts +0 -7
  420. package/dist/chart-builders/builders.d.ts.map +0 -1
  421. package/dist/chart-builders/builders.js +0 -280
  422. package/dist/chart-builders/builders.js.map +0 -1
  423. package/dist/chart-builders/createMosaicChartTool.d.ts +0 -45
  424. package/dist/chart-builders/createMosaicChartTool.d.ts.map +0 -1
  425. package/dist/chart-builders/createMosaicChartTool.js +0 -109
  426. package/dist/chart-builders/createMosaicChartTool.js.map +0 -1
  427. package/dist/chart-builders/describeChartSpecs.d.ts +0 -7
  428. package/dist/chart-builders/describeChartSpecs.d.ts.map +0 -1
  429. package/dist/chart-builders/describeChartSpecs.js +0 -38
  430. package/dist/chart-builders/describeChartSpecs.js.map +0 -1
  431. package/dist/chart-builders/types.d.ts +0 -40
  432. package/dist/chart-builders/types.d.ts.map +0 -1
  433. package/dist/chart-builders/types.js +0 -2
  434. package/dist/chart-builders/types.js.map +0 -1
  435. package/dist/dashboard/MosaicDashboardChartPanel.d.ts +0 -3
  436. package/dist/dashboard/MosaicDashboardChartPanel.d.ts.map +0 -1
  437. package/dist/dashboard/MosaicDashboardChartPanel.js +0 -49
  438. package/dist/dashboard/MosaicDashboardChartPanel.js.map +0 -1
  439. package/dist/dashboard/MosaicDashboardCharts.d.ts +0 -3
  440. package/dist/dashboard/MosaicDashboardCharts.d.ts.map +0 -1
  441. package/dist/dashboard/MosaicDashboardCharts.js +0 -45
  442. package/dist/dashboard/MosaicDashboardCharts.js.map +0 -1
  443. package/dist/dashboard/MosaicDashboardProfiler.d.ts +0 -3
  444. package/dist/dashboard/MosaicDashboardProfiler.d.ts.map +0 -1
  445. package/dist/dashboard/MosaicDashboardProfiler.js +0 -21
  446. package/dist/dashboard/MosaicDashboardProfiler.js.map +0 -1
  447. package/dist/dashboard/VgPlotSpecPopoverEditor.d.ts +0 -8
  448. package/dist/dashboard/VgPlotSpecPopoverEditor.d.ts.map +0 -1
  449. package/dist/dashboard/VgPlotSpecPopoverEditor.js +0 -40
  450. package/dist/dashboard/VgPlotSpecPopoverEditor.js.map +0 -1
  451. package/dist/use-mosaic.d.ts +0 -11
  452. package/dist/use-mosaic.d.ts.map +0 -1
  453. package/dist/use-mosaic.js +0 -42
  454. package/dist/use-mosaic.js.map +0 -1
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Base types for chart configurations.
3
+ * Separated to avoid circular dependencies.
4
+ */
5
+ import type { Spec } from '@uwdata/mosaic-spec';
6
+ import { type Tool } from 'ai';
7
+ import type { Coordinator } from '@uwdata/mosaic-core';
8
+ import type { ComponentType } from 'react';
9
+ import type * as z from 'zod';
10
+ import { ChartConfig, ChartType } from './chart-config';
11
+ import { RetainedVgPlotChart } from '../VgPlotChart';
12
+ import type { Selection } from '@uwdata/mosaic-core';
13
+ export type { ChartType };
14
+ /**
15
+ * Column info passed to chart builder UI
16
+ */
17
+ export interface ChartBuilderColumn {
18
+ name: string;
19
+ type: string;
20
+ }
21
+ /**
22
+ * Describes a field selector in a chart builder UI
23
+ */
24
+ export interface ChartBuilderField {
25
+ /** Unique key for this field */
26
+ key: string;
27
+ /** Display label */
28
+ label: string;
29
+ /** Whether the field is required */
30
+ required?: boolean;
31
+ /** Filter columns by DuckDB type (e.g. 'INTEGER', 'VARCHAR', 'DOUBLE') */
32
+ types?: string[];
33
+ /** Optional helper text for AI or custom UIs */
34
+ description?: string;
35
+ /** Whether this field accepts multiple values (array) */
36
+ multiple?: boolean;
37
+ }
38
+ /**
39
+ * Dependencies injected into chart tool creation functions.
40
+ * Provides the resources and operations needed to create charts.
41
+ */
42
+ export interface ChartToolDeps {
43
+ resolveResources: (params: {
44
+ artifactId?: string;
45
+ tableName?: string;
46
+ createArtifactIfMissing?: boolean;
47
+ }, context?: ChartToolExecutionContext) => {
48
+ artifactId: string;
49
+ tableName: string;
50
+ columns: ChartBuilderColumn[];
51
+ };
52
+ createChart: (params: {
53
+ artifactId: string;
54
+ tableName: string;
55
+ title: string;
56
+ config: any;
57
+ }) => {
58
+ panelId: string;
59
+ artifactId: string;
60
+ tableName: string;
61
+ title: string;
62
+ config: any;
63
+ };
64
+ }
65
+ export type ChartToolExecutionContext = object & {
66
+ sessionId?: string;
67
+ aiRunContext?: unknown;
68
+ };
69
+ export type ChartBuilderPanelSource = {
70
+ tableName?: string;
71
+ sqlQuery?: string;
72
+ };
73
+ export type ChartBuilderVgPlotOutput = {
74
+ kind: 'vgplot';
75
+ spec: Spec;
76
+ };
77
+ export type ChartBuilderDashboardPanelOutput = {
78
+ kind: 'dashboard-panel';
79
+ type: string;
80
+ source?: ChartBuilderPanelSource;
81
+ config?: Record<string, unknown>;
82
+ };
83
+ export type ChartBuilderOutput = ChartBuilderVgPlotOutput | ChartBuilderDashboardPanelOutput;
84
+ export type ChartRetainer = {
85
+ chart: RetainedVgPlotChart | undefined;
86
+ setChart: (chart: RetainedVgPlotChart) => void;
87
+ };
88
+ export type BrushSelectionParams = Map<string, Selection>;
89
+ /**
90
+ * Props passed to chart renderer components.
91
+ */
92
+ export interface ChartRendererProps<TConfig extends ChartConfig = ChartConfig> {
93
+ tableName: string;
94
+ config: TConfig;
95
+ coordinator: Coordinator;
96
+ /**
97
+ * Pre-defined params/selections to inject when rendering vgplot specs.
98
+ * Keys are param names (without $), values are Param or Selection instances.
99
+ */
100
+ params?: BrushSelectionParams;
101
+ /**
102
+ * Optional retention adapter for preserving the underlying vgplot
103
+ * instance across temporary unmount/remount cycles.
104
+ */
105
+ retention?: ChartRetainer;
106
+ }
107
+ type BaseChartTypeDefinition<TConfig extends ChartConfig = ChartConfig> = {
108
+ /** Unique identifier */
109
+ id: ChartType;
110
+ /** Short human-friendly name used in chart-type grids and prompts */
111
+ label?: string;
112
+ /** Short description of what this builder creates */
113
+ description: string;
114
+ /** Zod schema for runtime validation of settings */
115
+ schema: z.ZodType<TConfig['settings']>;
116
+ /** Generate a chart title from selected field values */
117
+ buildTitle?: (fieldValues: Record<string, unknown>) => string;
118
+ /** Optional availability override for a given table schema */
119
+ isAvailable?: (columns: ChartBuilderColumn[]) => boolean;
120
+ /** Explicit settings component for this chart type */
121
+ settingsComponent: ComponentType;
122
+ /** Optional icon component for chart-type grids */
123
+ icon: ComponentType<{
124
+ className?: string;
125
+ }>;
126
+ /** Optional function to create an AI tool for this chart type */
127
+ createTool?: (deps: ChartToolDeps) => Tool;
128
+ };
129
+ export type SpecChartTypeDefinition<TConfig extends ChartConfig = ChartConfig> = BaseChartTypeDefinition<TConfig> & {
130
+ createSpec: (tableName: string, config: TConfig['settings']) => Spec;
131
+ canViewSpec?: boolean;
132
+ };
133
+ export type ComponentChartTypeDefinition<TConfig extends ChartConfig = ChartConfig> = BaseChartTypeDefinition<TConfig> & {
134
+ renderer: ComponentType<ChartRendererProps<TConfig>>;
135
+ };
136
+ /**
137
+ * Shared chart-type definition used by both the chart-builder UI and
138
+ * assistant-driven chart creation.
139
+ */
140
+ export type ChartTypeDefinition<TConfig extends ChartConfig = ChartConfig> = SpecChartTypeDefinition<TConfig> | ComponentChartTypeDefinition<TConfig>;
141
+ export declare function isSpecChartType<TConfig extends ChartConfig>(chartType: ChartTypeDefinition<TConfig>): chartType is SpecChartTypeDefinition<TConfig>;
142
+ export declare function isComponentChartType<TConfig extends ChartConfig>(chartType: ChartTypeDefinition<TConfig>): chartType is ComponentChartTypeDefinition<TConfig>;
143
+ /**
144
+ * Backward-compatible alias for earlier chart-builder helper APIs.
145
+ * @deprecated Use {@link ChartTypeDefinition} instead.
146
+ */
147
+ export type ChartSpec = ChartTypeDefinition;
148
+ //# sourceMappingURL=base-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-types.d.ts","sourceRoot":"","sources":["../../src/chart-types/base-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAC,KAAK,IAAI,EAAC,MAAM,IAAI,CAAC;AAC7B,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,OAAO,CAAC;AACzC,OAAO,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,EAAC,WAAW,EAAE,SAAS,EAAC,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAC,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,qBAAqB,CAAC;AAGnD,YAAY,EAAC,SAAS,EAAC,CAAC;AAExB;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,CAChB,MAAM,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,uBAAuB,CAAC,EAAE,OAAO,CAAC;KACnC,EACD,OAAO,CAAC,EAAE,yBAAyB,KAChC;QACH,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,kBAAkB,EAAE,CAAC;KAC/B,CAAC;IACF,WAAW,EAAE,CAAC,MAAM,EAAE;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,GAAG,CAAC;KACb,KAAK;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,GAAG,CAAC;KACb,CAAC;CACH;AAED,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B,wBAAwB,GACxB,gCAAgC,CAAC;AAErC,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACvC,QAAQ,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,OAAO,SAAS,WAAW,GAAG,WAAW;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,WAAW,CAAC;IACzB;;;OAGG;IACH,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B;;;OAGG;IACH,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAED,KAAK,uBAAuB,CAAC,OAAO,SAAS,WAAW,GAAG,WAAW,IAAI;IACxE,wBAAwB;IACxB,EAAE,EAAE,SAAS,CAAC;IACd,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACvC,wDAAwD;IACxD,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;IAC9D,8DAA8D;IAC9D,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,EAAE,KAAK,OAAO,CAAC;IACzD,sDAAsD;IACtD,iBAAiB,EAAE,aAAa,CAAC;IACjC,mDAAmD;IACnD,IAAI,EAAE,aAAa,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;IAC1C,iEAAiE;IACjE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,uBAAuB,CAAC,OAAO,SAAS,WAAW,GAAG,WAAW,IAC3E,uBAAuB,CAAC,OAAO,CAAC,GAAG;IACjC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEJ,MAAM,MAAM,4BAA4B,CACtC,OAAO,SAAS,WAAW,GAAG,WAAW,IACvC,uBAAuB,CAAC,OAAO,CAAC,GAAG;IACrC,QAAQ,EAAE,aAAa,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;CACtD,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,mBAAmB,CAAC,OAAO,SAAS,WAAW,GAAG,WAAW,IACrE,uBAAuB,CAAC,OAAO,CAAC,GAChC,4BAA4B,CAAC,OAAO,CAAC,CAAC;AAE1C,wBAAgB,eAAe,CAAC,OAAO,SAAS,WAAW,EACzD,SAAS,EAAE,mBAAmB,CAAC,OAAO,CAAC,GACtC,SAAS,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAE/C;AAED,wBAAgB,oBAAoB,CAAC,OAAO,SAAS,WAAW,EAC9D,SAAS,EAAE,mBAAmB,CAAC,OAAO,CAAC,GACtC,SAAS,IAAI,4BAA4B,CAAC,OAAO,CAAC,CAEpD;AAED;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,mBAAmB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Base types for chart configurations.
3
+ * Separated to avoid circular dependencies.
4
+ */
5
+ export function isSpecChartType(chartType) {
6
+ return 'createSpec' in chartType;
7
+ }
8
+ export function isComponentChartType(chartType) {
9
+ return 'renderer' in chartType;
10
+ }
11
+ //# sourceMappingURL=base-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-types.js","sourceRoot":"","sources":["../../src/chart-types/base-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoKH,MAAM,UAAU,eAAe,CAC7B,SAAuC;IAEvC,OAAO,YAAY,IAAI,SAAS,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,SAAuC;IAEvC,OAAO,UAAU,IAAI,SAAS,CAAC;AACjC,CAAC","sourcesContent":["/**\n * Base types for chart configurations.\n * Separated to avoid circular dependencies.\n */\n\nimport type {Spec} from '@uwdata/mosaic-spec';\nimport {type Tool} from 'ai';\nimport type {Coordinator} from '@uwdata/mosaic-core';\nimport type {ComponentType} from 'react';\nimport type * as z from 'zod';\nimport {ChartConfig, ChartType} from './chart-config';\nimport {RetainedVgPlotChart} from '../VgPlotChart';\nimport type {Selection} from '@uwdata/mosaic-core';\n\n// Re-export ChartType for convenience\nexport type {ChartType};\n\n/**\n * Column info passed to chart builder UI\n */\nexport interface ChartBuilderColumn {\n name: string;\n type: string;\n}\n\n/**\n * Describes a field selector in a chart builder UI\n */\nexport interface ChartBuilderField {\n /** Unique key for this field */\n key: string;\n /** Display label */\n label: string;\n /** Whether the field is required */\n required?: boolean;\n /** Filter columns by DuckDB type (e.g. 'INTEGER', 'VARCHAR', 'DOUBLE') */\n types?: string[];\n /** Optional helper text for AI or custom UIs */\n description?: string;\n /** Whether this field accepts multiple values (array) */\n multiple?: boolean;\n}\n\n/**\n * Dependencies injected into chart tool creation functions.\n * Provides the resources and operations needed to create charts.\n */\nexport interface ChartToolDeps {\n resolveResources: (\n params: {\n artifactId?: string;\n tableName?: string;\n createArtifactIfMissing?: boolean;\n },\n context?: ChartToolExecutionContext,\n ) => {\n artifactId: string;\n tableName: string;\n columns: ChartBuilderColumn[];\n };\n createChart: (params: {\n artifactId: string;\n tableName: string;\n title: string;\n config: any;\n }) => {\n panelId: string;\n artifactId: string;\n tableName: string;\n title: string;\n config: any;\n };\n}\n\nexport type ChartToolExecutionContext = object & {\n sessionId?: string;\n aiRunContext?: unknown;\n};\n\nexport type ChartBuilderPanelSource = {\n tableName?: string;\n sqlQuery?: string;\n};\n\nexport type ChartBuilderVgPlotOutput = {\n kind: 'vgplot';\n spec: Spec;\n};\n\nexport type ChartBuilderDashboardPanelOutput = {\n kind: 'dashboard-panel';\n type: string;\n source?: ChartBuilderPanelSource;\n config?: Record<string, unknown>;\n};\n\nexport type ChartBuilderOutput =\n | ChartBuilderVgPlotOutput\n | ChartBuilderDashboardPanelOutput;\n\nexport type ChartRetainer = {\n chart: RetainedVgPlotChart | undefined;\n setChart: (chart: RetainedVgPlotChart) => void;\n};\n\nexport type BrushSelectionParams = Map<string, Selection>;\n\n/**\n * Props passed to chart renderer components.\n */\nexport interface ChartRendererProps<TConfig extends ChartConfig = ChartConfig> {\n tableName: string;\n config: TConfig;\n coordinator: Coordinator;\n /**\n * Pre-defined params/selections to inject when rendering vgplot specs.\n * Keys are param names (without $), values are Param or Selection instances.\n */\n params?: BrushSelectionParams;\n /**\n * Optional retention adapter for preserving the underlying vgplot\n * instance across temporary unmount/remount cycles.\n */\n retention?: ChartRetainer;\n}\n\ntype BaseChartTypeDefinition<TConfig extends ChartConfig = ChartConfig> = {\n /** Unique identifier */\n id: ChartType;\n /** Short human-friendly name used in chart-type grids and prompts */\n label?: string;\n /** Short description of what this builder creates */\n description: string;\n /** Zod schema for runtime validation of settings */\n schema: z.ZodType<TConfig['settings']>;\n /** Generate a chart title from selected field values */\n buildTitle?: (fieldValues: Record<string, unknown>) => string;\n /** Optional availability override for a given table schema */\n isAvailable?: (columns: ChartBuilderColumn[]) => boolean;\n /** Explicit settings component for this chart type */\n settingsComponent: ComponentType;\n /** Optional icon component for chart-type grids */\n icon: ComponentType<{className?: string}>;\n /** Optional function to create an AI tool for this chart type */\n createTool?: (deps: ChartToolDeps) => Tool;\n};\n\nexport type SpecChartTypeDefinition<TConfig extends ChartConfig = ChartConfig> =\n BaseChartTypeDefinition<TConfig> & {\n createSpec: (tableName: string, config: TConfig['settings']) => Spec;\n canViewSpec?: boolean;\n };\n\nexport type ComponentChartTypeDefinition<\n TConfig extends ChartConfig = ChartConfig,\n> = BaseChartTypeDefinition<TConfig> & {\n renderer: ComponentType<ChartRendererProps<TConfig>>;\n};\n\n/**\n * Shared chart-type definition used by both the chart-builder UI and\n * assistant-driven chart creation.\n */\nexport type ChartTypeDefinition<TConfig extends ChartConfig = ChartConfig> =\n | SpecChartTypeDefinition<TConfig>\n | ComponentChartTypeDefinition<TConfig>;\n\nexport function isSpecChartType<TConfig extends ChartConfig>(\n chartType: ChartTypeDefinition<TConfig>,\n): chartType is SpecChartTypeDefinition<TConfig> {\n return 'createSpec' in chartType;\n}\n\nexport function isComponentChartType<TConfig extends ChartConfig>(\n chartType: ChartTypeDefinition<TConfig>,\n): chartType is ComponentChartTypeDefinition<TConfig> {\n return 'renderer' in chartType;\n}\n\n/**\n * Backward-compatible alias for earlier chart-builder helper APIs.\n * @deprecated Use {@link ChartTypeDefinition} instead.\n */\nexport type ChartSpec = ChartTypeDefinition;\n"]}
@@ -0,0 +1,3 @@
1
+ import { type FC } from 'react';
2
+ export declare const BoxPlotSettingsComponent: FC;
3
+ //# sourceMappingURL=BoxPlotSettings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoxPlotSettings.d.ts","sourceRoot":"","sources":["../../../src/chart-types/box-plot/BoxPlotSettings.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAC,MAAM,OAAO,CAAC;AAK9B,eAAO,MAAM,wBAAwB,EAAE,EAoBtC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Field } from '../../chart-builders/Field';
3
+ import { ColumnSelector } from '../../chart-builders/ColumnSelector';
4
+ import { useChartSettingsContext } from '../../chart/chart-settings/ChartSettingsContext';
5
+ export const BoxPlotSettingsComponent = () => {
6
+ const { onChangeConfig, config } = useChartSettingsContext('box-plot');
7
+ return (_jsxs("div", { className: "space-y-4", children: [_jsx(Field, { label: "X Field (categorical)", required: true, children: _jsx(ColumnSelector.Categorical, { value: config.settings.x, onChange: (x) => onChangeConfig('x', x) }) }), _jsx(Field, { label: "Y Field (numeric)", required: true, children: _jsx(ColumnSelector.Numeric, { value: config.settings.y, onChange: (y) => onChangeConfig('y', y) }) })] }));
8
+ };
9
+ //# sourceMappingURL=BoxPlotSettings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoxPlotSettings.js","sourceRoot":"","sources":["../../../src/chart-types/box-plot/BoxPlotSettings.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,KAAK,EAAC,MAAM,4BAA4B,CAAC;AACjD,OAAO,EAAC,cAAc,EAAC,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAC,uBAAuB,EAAC,MAAM,iDAAiD,CAAC;AAExF,MAAM,CAAC,MAAM,wBAAwB,GAAO,GAAG,EAAE;IAC/C,MAAM,EAAC,cAAc,EAAE,MAAM,EAAC,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAErE,OAAO,CACL,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,KAAK,IAAC,KAAK,EAAC,uBAAuB,EAAC,QAAQ,kBAC3C,KAAC,cAAc,CAAC,WAAW,IACzB,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,EACxB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,GACvC,GACI,EAER,KAAC,KAAK,IAAC,KAAK,EAAC,mBAAmB,EAAC,QAAQ,kBACvC,KAAC,cAAc,CAAC,OAAO,IACrB,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,EACxB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,GACvC,GACI,IACJ,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {type FC} from 'react';\nimport {Field} from '../../chart-builders/Field';\nimport {ColumnSelector} from '../../chart-builders/ColumnSelector';\nimport {useChartSettingsContext} from '../../chart/chart-settings/ChartSettingsContext';\n\nexport const BoxPlotSettingsComponent: FC = () => {\n const {onChangeConfig, config} = useChartSettingsContext('box-plot');\n\n return (\n <div className=\"space-y-4\">\n <Field label=\"X Field (categorical)\" required>\n <ColumnSelector.Categorical\n value={config.settings.x}\n onChange={(x) => onChangeConfig('x', x)}\n />\n </Field>\n\n <Field label=\"Y Field (numeric)\" required>\n <ColumnSelector.Numeric\n value={config.settings.y}\n onChange={(y) => onChangeConfig('y', y)}\n />\n </Field>\n </div>\n );\n};\n"]}
@@ -0,0 +1,4 @@
1
+ import type { ComponentChartTypeDefinition } from '../base-types';
2
+ import { BoxPlotChartConfig } from './schema';
3
+ export declare const boxPlotChartType: ComponentChartTypeDefinition<BoxPlotChartConfig>;
4
+ //# sourceMappingURL=definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../../src/chart-types/box-plot/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,4BAA4B,EAAC,MAAM,eAAe,CAAC;AAChE,OAAO,EAAC,kBAAkB,EAAuB,MAAM,UAAU,CAAC;AASlE,eAAO,MAAM,gBAAgB,EAAE,4BAA4B,CAAC,kBAAkB,CAW3E,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { BoxPlotChartSettings } from './schema';
2
+ import { titleFromDescription } from '../../chart-builders/chartTypeUtils';
3
+ import { BoxPlotPanelRenderer } from './renderer/BoxPlotPanelRenderer';
4
+ import { BoxPlotSettingsComponent } from './BoxPlotSettings';
5
+ import { createBoxPlotAiTool } from './tool';
6
+ import { AlignHorizontalDistributeCenter } from 'lucide-react';
7
+ const DESCRIPTION = 'Create a box plot';
8
+ export const boxPlotChartType = {
9
+ id: 'box-plot',
10
+ label: 'Box Plot',
11
+ description: DESCRIPTION,
12
+ icon: AlignHorizontalDistributeCenter,
13
+ schema: BoxPlotChartSettings,
14
+ settingsComponent: BoxPlotSettingsComponent,
15
+ buildTitle: titleFromDescription(DESCRIPTION),
16
+ renderer: BoxPlotPanelRenderer,
17
+ createTool: createBoxPlotAiTool,
18
+ };
19
+ //# sourceMappingURL=definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../src/chart-types/box-plot/definition.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,oBAAoB,EAAC,MAAM,UAAU,CAAC;AAClE,OAAO,EAAC,oBAAoB,EAAC,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAC,oBAAoB,EAAC,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAC,wBAAwB,EAAC,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAC,mBAAmB,EAAC,MAAM,QAAQ,CAAC;AAC3C,OAAO,EAAC,+BAA+B,EAAC,MAAM,cAAc,CAAC;AAE7D,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAExC,MAAM,CAAC,MAAM,gBAAgB,GAC3B;IACE,EAAE,EAAE,UAAU;IACd,KAAK,EAAE,UAAU;IACjB,WAAW,EAAE,WAAW;IACxB,IAAI,EAAE,+BAA+B;IACrC,MAAM,EAAE,oBAAoB;IAC5B,iBAAiB,EAAE,wBAAwB;IAC3C,UAAU,EAAE,oBAAoB,CAAC,WAAW,CAAC;IAC7C,QAAQ,EAAE,oBAAoB;IAC9B,UAAU,EAAE,mBAAmB;CAChC,CAAC","sourcesContent":["import type {ComponentChartTypeDefinition} from '../base-types';\nimport {BoxPlotChartConfig, BoxPlotChartSettings} from './schema';\nimport {titleFromDescription} from '../../chart-builders/chartTypeUtils';\nimport {BoxPlotPanelRenderer} from './renderer/BoxPlotPanelRenderer';\nimport {BoxPlotSettingsComponent} from './BoxPlotSettings';\nimport {createBoxPlotAiTool} from './tool';\nimport {AlignHorizontalDistributeCenter} from 'lucide-react';\n\nconst DESCRIPTION = 'Create a box plot';\n\nexport const boxPlotChartType: ComponentChartTypeDefinition<BoxPlotChartConfig> =\n {\n id: 'box-plot',\n label: 'Box Plot',\n description: DESCRIPTION,\n icon: AlignHorizontalDistributeCenter,\n schema: BoxPlotChartSettings,\n settingsComponent: BoxPlotSettingsComponent,\n buildTitle: titleFromDescription(DESCRIPTION),\n renderer: BoxPlotPanelRenderer,\n createTool: createBoxPlotAiTool,\n };\n"]}
@@ -0,0 +1,18 @@
1
+ import type { ErrorInfo, PropsWithChildren } from 'react';
2
+ import { Component } from 'react';
3
+ interface BoxPlotErrorBoundaryState {
4
+ error: Error | null;
5
+ }
6
+ /**
7
+ * Error boundary for box plot rendering to prevent crashes from propagating
8
+ * to the entire dashboard. Catches errors during rendering, in lifecycle methods,
9
+ * and in constructors of the component tree below it.
10
+ */
11
+ export declare class BoxPlotErrorBoundary extends Component<PropsWithChildren, BoxPlotErrorBoundaryState> {
12
+ constructor(props: PropsWithChildren);
13
+ static getDerivedStateFromError(error: Error): BoxPlotErrorBoundaryState;
14
+ componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
15
+ render(): string | number | bigint | boolean | Iterable<import("react").ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<import("react").ReactNode> | null | undefined> | import("react/jsx-runtime").JSX.Element | null | undefined;
16
+ }
17
+ export {};
18
+ //# sourceMappingURL=BoxPlotErrorBoundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoxPlotErrorBoundary.d.ts","sourceRoot":"","sources":["../../../../src/chart-types/box-plot/renderer/BoxPlotErrorBoundary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAE,iBAAiB,EAAC,MAAM,OAAO,CAAC;AACxD,OAAO,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAEhC,UAAU,yBAAyB;IACjC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,SAAS,CACjD,iBAAiB,EACjB,yBAAyB,CAC1B;gBACa,KAAK,EAAE,iBAAiB;IAKpC,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,yBAAyB;IAK/D,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAK3D,MAAM;CAchB"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Component } from 'react';
3
+ /**
4
+ * Error boundary for box plot rendering to prevent crashes from propagating
5
+ * to the entire dashboard. Catches errors during rendering, in lifecycle methods,
6
+ * and in constructors of the component tree below it.
7
+ */
8
+ export class BoxPlotErrorBoundary extends Component {
9
+ constructor(props) {
10
+ super(props);
11
+ this.state = { error: null };
12
+ }
13
+ static getDerivedStateFromError(error) {
14
+ // Update state so the next render will show the fallback UI
15
+ return { error };
16
+ }
17
+ componentDidCatch(error, errorInfo) {
18
+ // Log error details for debugging
19
+ console.error('Box plot rendering error:', error, errorInfo);
20
+ }
21
+ render() {
22
+ if (this.state.error) {
23
+ return (_jsxs("div", { className: "text-destructive flex h-full flex-col items-center justify-center p-4 text-sm", children: [_jsx("div", { className: "font-medium", children: "Failed to render box plot" }), _jsx("div", { className: "mt-2 text-xs opacity-75", children: this.state.error.message })] }));
24
+ }
25
+ return this.props.children;
26
+ }
27
+ }
28
+ //# sourceMappingURL=BoxPlotErrorBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoxPlotErrorBoundary.js","sourceRoot":"","sources":["../../../../src/chart-types/box-plot/renderer/BoxPlotErrorBoundary.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAMhC;;;;GAIG;AACH,MAAM,OAAO,oBAAqB,SAAQ,SAGzC;IACC,YAAY,KAAwB;QAClC,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,wBAAwB,CAAC,KAAY;QAC1C,4DAA4D;QAC5D,OAAO,EAAC,KAAK,EAAC,CAAC;IACjB,CAAC;IAEQ,iBAAiB,CAAC,KAAY,EAAE,SAAoB;QAC3D,kCAAkC;QAClC,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAC/D,CAAC;IAEQ,MAAM;QACb,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACrB,OAAO,CACL,eAAK,SAAS,EAAC,+EAA+E,aAC5F,cAAK,SAAS,EAAC,aAAa,0CAAgC,EAC5D,cAAK,SAAS,EAAC,yBAAyB,YACrC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GACrB,IACF,CACP,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,CAAC;CACF","sourcesContent":["import type {ErrorInfo, PropsWithChildren} from 'react';\nimport {Component} from 'react';\n\ninterface BoxPlotErrorBoundaryState {\n error: Error | null;\n}\n\n/**\n * Error boundary for box plot rendering to prevent crashes from propagating\n * to the entire dashboard. Catches errors during rendering, in lifecycle methods,\n * and in constructors of the component tree below it.\n */\nexport class BoxPlotErrorBoundary extends Component<\n PropsWithChildren,\n BoxPlotErrorBoundaryState\n> {\n constructor(props: PropsWithChildren) {\n super(props);\n this.state = {error: null};\n }\n\n static getDerivedStateFromError(error: Error): BoxPlotErrorBoundaryState {\n // Update state so the next render will show the fallback UI\n return {error};\n }\n\n override componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n // Log error details for debugging\n console.error('Box plot rendering error:', error, errorInfo);\n }\n\n override render() {\n if (this.state.error) {\n return (\n <div className=\"text-destructive flex h-full flex-col items-center justify-center p-4 text-sm\">\n <div className=\"font-medium\">Failed to render box plot</div>\n <div className=\"mt-2 text-xs opacity-75\">\n {this.state.error.message}\n </div>\n </div>\n );\n }\n\n return this.props.children;\n }\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import type { FC } from 'react';
2
+ import type { ChartRendererProps } from '../../base-types';
3
+ import type { BoxPlotChartConfig } from '../schema';
4
+ /**
5
+ * Custom renderer for box-plot chart type.
6
+ * Uses BoxPlotClient for SQL-based quartile calculations and custom Observable Plot rendering.
7
+ */
8
+ export declare const BoxPlotPanelRenderer: FC<ChartRendererProps<BoxPlotChartConfig>>;
9
+ //# sourceMappingURL=BoxPlotPanelRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoxPlotPanelRenderer.d.ts","sourceRoot":"","sources":["../../../../src/chart-types/box-plot/renderer/BoxPlotPanelRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,EAAE,EAAoC,MAAM,OAAO,CAAC;AAIjE,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAQzD,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,WAAW,CAAC;AAKlD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,EAAE,CACnC,kBAAkB,CAAC,kBAAkB,CAAC,CAgMvC,CAAC"}
@@ -0,0 +1,115 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
+ import { SpinnerPane } from '@sqlrooms/ui';
4
+ import { ResponsivePlot } from '../../../ResponsivePlot';
5
+ import { DRAG_CLICK_THRESHOLD, MARGINS, } from './constants';
6
+ import { createBoxPlotElement } from './plot';
7
+ import { useBoxPlotClient } from './useBoxPlotClient';
8
+ import { formatCategory, getYDomain, yPixelToValue } from './utils';
9
+ import { BoxPlotErrorBoundary } from './BoxPlotErrorBoundary';
10
+ /**
11
+ * Custom renderer for box-plot chart type.
12
+ * Uses BoxPlotClient for SQL-based quartile calculations and custom Observable Plot rendering.
13
+ */
14
+ export const BoxPlotPanelRenderer = ({ tableName, config, coordinator, params }) => {
15
+ const configX = config.settings.x;
16
+ const configY = config.settings.y;
17
+ const boxPlotConfig = useMemo(() => typeof configX === 'string' && typeof configY === 'string'
18
+ ? { x: configX, y: configY }
19
+ : null, [configX, configY]);
20
+ const [size, setSize] = useState(null);
21
+ const [drag, setDrag] = useState(null);
22
+ const plotRef = useRef(null);
23
+ const { clientRef, state } = useBoxPlotClient({
24
+ config: boxPlotConfig,
25
+ coordinator,
26
+ params,
27
+ tableName,
28
+ });
29
+ const summaries = useMemo(() => state.summaries.map((row) => ({
30
+ ...row,
31
+ categoryLabel: formatCategory(row.category),
32
+ })), [state.summaries]);
33
+ const outliers = useMemo(() => state.outliers.map((row) => ({
34
+ ...row,
35
+ categoryLabel: formatCategory(row.category),
36
+ })), [state.outliers]);
37
+ const yDomain = useMemo(() => getYDomain(state.summaries, state.outliers), [state.outliers, state.summaries]);
38
+ useEffect(() => {
39
+ const container = plotRef.current;
40
+ if (!container || !size || !boxPlotConfig) {
41
+ return;
42
+ }
43
+ if (!summaries.length) {
44
+ container.replaceChildren();
45
+ return;
46
+ }
47
+ const plot = createBoxPlotElement({
48
+ config: boxPlotConfig,
49
+ domain: yDomain,
50
+ outliers,
51
+ size,
52
+ summaries,
53
+ });
54
+ container.replaceChildren(plot);
55
+ }, [boxPlotConfig, outliers, size, summaries, yDomain]);
56
+ const getLocalY = useCallback((event) => {
57
+ const rect = event.currentTarget.getBoundingClientRect();
58
+ return event.clientY - rect.top;
59
+ }, []);
60
+ const handlePointerDown = useCallback((event) => {
61
+ if (!size || !summaries.length)
62
+ return;
63
+ event.currentTarget.setPointerCapture(event.pointerId);
64
+ const y = getLocalY(event);
65
+ setDrag({ currentY: y, startY: y });
66
+ }, [getLocalY, size, summaries.length]);
67
+ const handlePointerMove = useCallback((event) => {
68
+ if (!drag)
69
+ return;
70
+ setDrag({ ...drag, currentY: getLocalY(event) });
71
+ }, [drag, getLocalY]);
72
+ const finishDrag = useCallback((event) => {
73
+ if (!drag || !size)
74
+ return;
75
+ event.currentTarget.releasePointerCapture(event.pointerId);
76
+ const currentY = getLocalY(event);
77
+ const pixelDistance = Math.abs(currentY - drag.startY);
78
+ setDrag(null);
79
+ if (pixelDistance < DRAG_CLICK_THRESHOLD) {
80
+ clientRef.current?.updateYBrush();
81
+ return;
82
+ }
83
+ clientRef.current?.updateYBrush([
84
+ yPixelToValue(drag.startY, size, yDomain),
85
+ yPixelToValue(currentY, size, yDomain),
86
+ ]);
87
+ }, [clientRef, drag, getLocalY, size, yDomain]);
88
+ const brushStyle = useMemo(() => {
89
+ const extent = drag
90
+ ? [drag.startY, drag.currentY]
91
+ : state.yBrush && size
92
+ ? state.yBrush.map((value) => {
93
+ const plotHeight = Math.max(1, size.height - MARGINS.top - MARGINS.bottom);
94
+ const span = yDomain[1] - yDomain[0] || 1;
95
+ const pixelPos = MARGINS.top + ((yDomain[1] - value) / span) * plotHeight;
96
+ return Math.max(MARGINS.top, Math.min(MARGINS.top + plotHeight, pixelPos));
97
+ })
98
+ : null;
99
+ if (!extent)
100
+ return undefined;
101
+ const top = Math.max(MARGINS.top, Math.min(...extent));
102
+ const bottom = Math.min(size?.height ? size.height - MARGINS.bottom : Number.POSITIVE_INFINITY, Math.max(...extent));
103
+ return {
104
+ height: `${Math.max(0, bottom - top)}px`,
105
+ left: `${MARGINS.left}px`,
106
+ right: `${MARGINS.right}px`,
107
+ top: `${top}px`,
108
+ };
109
+ }, [drag, size, state.yBrush, yDomain]);
110
+ if (!config.settings.x || !config.settings.y) {
111
+ return (_jsxs("div", { className: "flex h-full flex-col items-center justify-center", children: [_jsx("div", { className: "text-center font-medium", children: "Configure chart to display visualization" }), _jsx("div", { className: "text-center text-xs", children: "X and Y fields are required for box plot" })] }));
112
+ }
113
+ return (_jsx(BoxPlotErrorBoundary, { children: _jsx("div", { className: "h-full min-h-0 overflow-auto p-2", children: _jsx("div", { className: "bg-background text-foreground relative flex h-full min-h-[220px] w-full items-center justify-center rounded-md p-2", children: state.error ? (_jsx("div", { className: "text-destructive flex h-full items-center justify-center p-4 text-sm", children: state.error.message })) : state.isLoading && !state.summaries.length ? (_jsx(SpinnerPane, { className: "h-full w-full" })) : !state.summaries.length ? (_jsx("div", { className: "text-muted-foreground flex h-full items-center justify-center text-sm", children: "No numeric values for this box plot" })) : (_jsxs(ResponsivePlot, { onResize: setSize, className: "relative h-full min-h-[220px] w-full", children: [_jsx("div", { ref: plotRef, className: "absolute inset-0" }), brushStyle ? (_jsx("div", { className: "bg-primary/15 border-primary/60 pointer-events-none absolute border", style: brushStyle })) : null, _jsx("div", { className: "absolute inset-0 cursor-crosshair touch-none", onPointerCancel: finishDrag, onPointerDown: handlePointerDown, onPointerMove: handlePointerMove, onPointerUp: finishDrag })] })) }) }) }));
114
+ };
115
+ //# sourceMappingURL=BoxPlotPanelRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoxPlotPanelRenderer.js","sourceRoot":"","sources":["../../../../src/chart-types/box-plot/renderer/BoxPlotPanelRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["import type {FC, PointerEvent as ReactPointerEvent} from 'react';\nimport {useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport {SpinnerPane} from '@sqlrooms/ui';\nimport {type PlotSize, ResponsivePlot} from '../../../ResponsivePlot';\nimport type {ChartRendererProps} from '../../base-types';\nimport {\n DRAG_CLICK_THRESHOLD,\n MARGINS,\n type PlotOutlierDatum,\n type PlotSummaryDatum,\n} from './constants';\nimport {createBoxPlotElement} from './plot';\nimport type {BoxPlotChartConfig} from '../schema';\nimport {useBoxPlotClient} from './useBoxPlotClient';\nimport {formatCategory, getYDomain, yPixelToValue} from './utils';\nimport {BoxPlotErrorBoundary} from './BoxPlotErrorBoundary';\n\n/**\n * Custom renderer for box-plot chart type.\n * Uses BoxPlotClient for SQL-based quartile calculations and custom Observable Plot rendering.\n */\nexport const BoxPlotPanelRenderer: FC<\n ChartRendererProps<BoxPlotChartConfig>\n> = ({tableName, config, coordinator, params}) => {\n const configX = config.settings.x;\n const configY = config.settings.y;\n const boxPlotConfig = useMemo(\n () =>\n typeof configX === 'string' && typeof configY === 'string'\n ? {x: configX, y: configY}\n : null,\n [configX, configY],\n );\n\n const [size, setSize] = useState<PlotSize | null>(null);\n const [drag, setDrag] = useState<{startY: number; currentY: number} | null>(\n null,\n );\n const plotRef = useRef<HTMLDivElement>(null);\n\n const {clientRef, state} = useBoxPlotClient({\n config: boxPlotConfig,\n coordinator,\n params,\n tableName,\n });\n\n const summaries = useMemo<PlotSummaryDatum[]>(\n () =>\n state.summaries.map((row) => ({\n ...row,\n categoryLabel: formatCategory(row.category),\n })),\n [state.summaries],\n );\n const outliers = useMemo<PlotOutlierDatum[]>(\n () =>\n state.outliers.map((row) => ({\n ...row,\n categoryLabel: formatCategory(row.category),\n })),\n [state.outliers],\n );\n const yDomain = useMemo(\n () => getYDomain(state.summaries, state.outliers),\n [state.outliers, state.summaries],\n );\n\n useEffect(() => {\n const container = plotRef.current;\n if (!container || !size || !boxPlotConfig) {\n return;\n }\n if (!summaries.length) {\n container.replaceChildren();\n return;\n }\n\n const plot = createBoxPlotElement({\n config: boxPlotConfig,\n domain: yDomain,\n outliers,\n size,\n summaries,\n });\n container.replaceChildren(plot);\n }, [boxPlotConfig, outliers, size, summaries, yDomain]);\n\n const getLocalY = useCallback((event: ReactPointerEvent<HTMLDivElement>) => {\n const rect = event.currentTarget.getBoundingClientRect();\n return event.clientY - rect.top;\n }, []);\n\n const handlePointerDown = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n if (!size || !summaries.length) return;\n event.currentTarget.setPointerCapture(event.pointerId);\n const y = getLocalY(event);\n setDrag({currentY: y, startY: y});\n },\n [getLocalY, size, summaries.length],\n );\n\n const handlePointerMove = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n if (!drag) return;\n setDrag({...drag, currentY: getLocalY(event)});\n },\n [drag, getLocalY],\n );\n\n const finishDrag = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n if (!drag || !size) return;\n event.currentTarget.releasePointerCapture(event.pointerId);\n const currentY = getLocalY(event);\n const pixelDistance = Math.abs(currentY - drag.startY);\n setDrag(null);\n if (pixelDistance < DRAG_CLICK_THRESHOLD) {\n clientRef.current?.updateYBrush();\n return;\n }\n clientRef.current?.updateYBrush([\n yPixelToValue(drag.startY, size, yDomain),\n yPixelToValue(currentY, size, yDomain),\n ]);\n },\n [clientRef, drag, getLocalY, size, yDomain],\n );\n\n const brushStyle = useMemo(() => {\n const extent = drag\n ? [drag.startY, drag.currentY]\n : state.yBrush && size\n ? state.yBrush.map((value) => {\n const plotHeight = Math.max(\n 1,\n size.height - MARGINS.top - MARGINS.bottom,\n );\n const span = yDomain[1] - yDomain[0] || 1;\n const pixelPos =\n MARGINS.top + ((yDomain[1] - value) / span) * plotHeight;\n return Math.max(\n MARGINS.top,\n Math.min(MARGINS.top + plotHeight, pixelPos),\n );\n })\n : null;\n if (!extent) return undefined;\n const top = Math.max(MARGINS.top, Math.min(...extent));\n const bottom = Math.min(\n size?.height ? size.height - MARGINS.bottom : Number.POSITIVE_INFINITY,\n Math.max(...extent),\n );\n return {\n height: `${Math.max(0, bottom - top)}px`,\n left: `${MARGINS.left}px`,\n right: `${MARGINS.right}px`,\n top: `${top}px`,\n };\n }, [drag, size, state.yBrush, yDomain]);\n\n if (!config.settings.x || !config.settings.y) {\n return (\n <div className=\"flex h-full flex-col items-center justify-center\">\n <div className=\"text-center font-medium\">\n Configure chart to display visualization\n </div>\n <div className=\"text-center text-xs\">\n X and Y fields are required for box plot\n </div>\n </div>\n );\n }\n\n return (\n <BoxPlotErrorBoundary>\n <div className=\"h-full min-h-0 overflow-auto p-2\">\n <div className=\"bg-background text-foreground relative flex h-full min-h-[220px] w-full items-center justify-center rounded-md p-2\">\n {state.error ? (\n <div className=\"text-destructive flex h-full items-center justify-center p-4 text-sm\">\n {state.error.message}\n </div>\n ) : state.isLoading && !state.summaries.length ? (\n <SpinnerPane className=\"h-full w-full\" />\n ) : !state.summaries.length ? (\n <div className=\"text-muted-foreground flex h-full items-center justify-center text-sm\">\n No numeric values for this box plot\n </div>\n ) : (\n <ResponsivePlot\n onResize={setSize}\n className=\"relative h-full min-h-[220px] w-full\"\n >\n <div ref={plotRef} className=\"absolute inset-0\" />\n {brushStyle ? (\n <div\n className=\"bg-primary/15 border-primary/60 pointer-events-none absolute border\"\n style={brushStyle}\n />\n ) : null}\n <div\n className=\"absolute inset-0 cursor-crosshair touch-none\"\n onPointerCancel={finishDrag}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={finishDrag}\n />\n </ResponsivePlot>\n )}\n </div>\n </div>\n </BoxPlotErrorBoundary>\n );\n};\n"]}
@@ -0,0 +1,24 @@
1
+ import type { BoxPlotOutlierRow, BoxPlotSummaryRow } from '../../../boxplot/BoxPlotClient';
2
+ export declare const BOX_FILL = "var(--color-chart-1)";
3
+ export declare const BOX_STROKE = "var(--color-chart-1)";
4
+ export declare const GRID_COLOR = "var(--border)";
5
+ export declare const OUTLIER_FILL = "var(--color-chart-2)";
6
+ export declare const MAX_BOX_ITEM_WIDTH = 20;
7
+ export declare const MARGINS: {
8
+ readonly bottom: 64;
9
+ readonly left: 56;
10
+ readonly right: 24;
11
+ readonly top: 20;
12
+ };
13
+ /**
14
+ * Minimum pixel distance to distinguish a drag from a click.
15
+ * Drags shorter than this threshold are treated as clicks that clear the brush.
16
+ */
17
+ export declare const DRAG_CLICK_THRESHOLD = 4;
18
+ export type PlotSummaryDatum = BoxPlotSummaryRow & {
19
+ categoryLabel: string;
20
+ };
21
+ export type PlotOutlierDatum = BoxPlotOutlierRow & {
22
+ categoryLabel: string;
23
+ };
24
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/chart-types/box-plot/renderer/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,gCAAgC,CAAC;AAExC,eAAO,MAAM,QAAQ,yBAAyB,CAAC;AAC/C,eAAO,MAAM,UAAU,yBAAyB,CAAC;AACjD,eAAO,MAAM,UAAU,kBAAkB,CAAC;AAC1C,eAAO,MAAM,YAAY,yBAAyB,CAAC;AACnD,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,eAAO,MAAM,OAAO;;;;;CAKV,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,GAAG;IACjD,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,GAAG;IACjD,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC"}
@@ -0,0 +1,17 @@
1
+ export const BOX_FILL = 'var(--color-chart-1)';
2
+ export const BOX_STROKE = 'var(--color-chart-1)';
3
+ export const GRID_COLOR = 'var(--border)';
4
+ export const OUTLIER_FILL = 'var(--color-chart-2)';
5
+ export const MAX_BOX_ITEM_WIDTH = 20;
6
+ export const MARGINS = {
7
+ bottom: 64,
8
+ left: 56,
9
+ right: 24,
10
+ top: 20,
11
+ };
12
+ /**
13
+ * Minimum pixel distance to distinguish a drag from a click.
14
+ * Drags shorter than this threshold are treated as clicks that clear the brush.
15
+ */
16
+ export const DRAG_CLICK_THRESHOLD = 4;
17
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/chart-types/box-plot/renderer/constants.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,QAAQ,GAAG,sBAAsB,CAAC;AAC/C,MAAM,CAAC,MAAM,UAAU,GAAG,sBAAsB,CAAC;AACjD,MAAM,CAAC,MAAM,UAAU,GAAG,eAAe,CAAC;AAC1C,MAAM,CAAC,MAAM,YAAY,GAAG,sBAAsB,CAAC;AACnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAErC,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;IACT,GAAG,EAAE,EAAE;CACC,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC","sourcesContent":["import type {\n BoxPlotOutlierRow,\n BoxPlotSummaryRow,\n} from '../../../boxplot/BoxPlotClient';\n\nexport const BOX_FILL = 'var(--color-chart-1)';\nexport const BOX_STROKE = 'var(--color-chart-1)';\nexport const GRID_COLOR = 'var(--border)';\nexport const OUTLIER_FILL = 'var(--color-chart-2)';\nexport const MAX_BOX_ITEM_WIDTH = 20;\n\nexport const MARGINS = {\n bottom: 64,\n left: 56,\n right: 24,\n top: 20,\n} as const;\n\n/**\n * Minimum pixel distance to distinguish a drag from a click.\n * Drags shorter than this threshold are treated as clicks that clear the brush.\n */\nexport const DRAG_CLICK_THRESHOLD = 4;\n\nexport type PlotSummaryDatum = BoxPlotSummaryRow & {\n categoryLabel: string;\n};\n\nexport type PlotOutlierDatum = BoxPlotOutlierRow & {\n categoryLabel: string;\n};\n"]}
@@ -0,0 +1,14 @@
1
+ import * as Plot from '@observablehq/plot';
2
+ import type { PlotSize } from '../../../ResponsivePlot';
3
+ import { type PlotOutlierDatum, type PlotSummaryDatum } from './constants';
4
+ export declare function createBoxPlotElement(args: {
5
+ config: {
6
+ x: string;
7
+ y: string;
8
+ };
9
+ domain: [number, number];
10
+ outliers: PlotOutlierDatum[];
11
+ size: PlotSize;
12
+ summaries: PlotSummaryDatum[];
13
+ }): (HTMLElement | SVGSVGElement) & Plot.Plot;
14
+ //# sourceMappingURL=plot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plot.d.ts","sourceRoot":"","sources":["../../../../src/chart-types/box-plot/renderer/plot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAOL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,aAAa,CAAC;AAErB,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,MAAM,EAAE;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC;IAC/B,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B,6CAwFA"}