@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,264 @@
1
+ import { MosaicClient, clauseInterval, } from '@uwdata/mosaic-core';
2
+ function quoteIdentifier(identifier) {
3
+ return `"${identifier.replace(/"/g, '""')}"`;
4
+ }
5
+ function quoteTableReference(tableName) {
6
+ return tableName.split('.').map(quoteIdentifier).join('.');
7
+ }
8
+ function normalizeFilter(filter) {
9
+ if (!filter) {
10
+ return [];
11
+ }
12
+ const filters = Array.isArray(filter) ? filter.flat(Infinity) : [filter];
13
+ return filters
14
+ .map((expr) => {
15
+ if (typeof expr === 'boolean') {
16
+ return expr ? null : 'FALSE';
17
+ }
18
+ return `(${expr.toString()})`;
19
+ })
20
+ .filter((expr) => Boolean(expr));
21
+ }
22
+ /**
23
+ * Type guard to check if data has a toArray method.
24
+ */
25
+ function hasToArrayMethod(data) {
26
+ return (data !== null &&
27
+ data !== undefined &&
28
+ typeof data === 'object' &&
29
+ 'toArray' in data &&
30
+ typeof data.toArray === 'function');
31
+ }
32
+ /**
33
+ * Safely extract rows from query result data.
34
+ * Handles both direct arrays and objects with toArray() method.
35
+ * Returns empty array if data is invalid or doesn't have expected structure.
36
+ */
37
+ function rowsFromQueryResult(data) {
38
+ // Handle direct arrays
39
+ if (Array.isArray(data)) {
40
+ return data;
41
+ }
42
+ // Handle objects with toArray() method (Arrow Tables, Mosaic results, etc.)
43
+ if (!hasToArrayMethod(data)) {
44
+ return [];
45
+ }
46
+ try {
47
+ const result = data.toArray();
48
+ // Validate that toArray() returned an array
49
+ if (!Array.isArray(result)) {
50
+ console.warn('BoxPlotClient: toArray() did not return an array', typeof result);
51
+ return [];
52
+ }
53
+ return result;
54
+ }
55
+ catch (error) {
56
+ console.error('BoxPlotClient: Error calling toArray():', error);
57
+ return [];
58
+ }
59
+ }
60
+ function numericValue(value) {
61
+ const numeric = Number(value);
62
+ return Number.isFinite(numeric) ? numeric : undefined;
63
+ }
64
+ export function buildBoxPlotQuery(args) {
65
+ const table = quoteTableReference(args.tableName);
66
+ const x = quoteIdentifier(args.x);
67
+ const y = quoteIdentifier(args.y);
68
+ const filters = normalizeFilter(args.filter).join(' AND ');
69
+ const where = [`${y} IS NOT NULL`, filters].filter(Boolean).join(' AND ');
70
+ return `
71
+ WITH base AS (
72
+ SELECT
73
+ ${x} AS "category",
74
+ TRY_CAST(${y} AS DOUBLE) AS "value"
75
+ FROM ${table}
76
+ WHERE ${where}
77
+ ),
78
+ stats AS (
79
+ SELECT
80
+ "category",
81
+ COUNT(*)::DOUBLE AS "count",
82
+ quantile_cont("value", 0.25) AS "q1",
83
+ quantile_cont("value", 0.5) AS "median",
84
+ quantile_cont("value", 0.75) AS "q3"
85
+ FROM base
86
+ WHERE "value" IS NOT NULL
87
+ GROUP BY "category"
88
+ ),
89
+ fences AS (
90
+ SELECT
91
+ *,
92
+ "q1" - 1.5 * ("q3" - "q1") AS "lowerFence",
93
+ "q3" + 1.5 * ("q3" - "q1") AS "upperFence"
94
+ FROM stats
95
+ ),
96
+ whiskers AS (
97
+ SELECT
98
+ b."category",
99
+ MIN(b."value") AS "whiskerLow",
100
+ MAX(b."value") AS "whiskerHigh"
101
+ FROM base b
102
+ JOIN fences f ON b."category" IS NOT DISTINCT FROM f."category"
103
+ WHERE b."value" BETWEEN f."lowerFence" AND f."upperFence"
104
+ GROUP BY b."category"
105
+ ),
106
+ summary AS (
107
+ SELECT
108
+ 'summary' AS "rowKind",
109
+ f."category",
110
+ f."count",
111
+ f."q1",
112
+ f."median",
113
+ f."q3",
114
+ f."lowerFence",
115
+ f."upperFence",
116
+ w."whiskerLow",
117
+ w."whiskerHigh",
118
+ NULL::DOUBLE AS "value"
119
+ FROM fences f
120
+ JOIN whiskers w ON w."category" IS NOT DISTINCT FROM f."category"
121
+ ),
122
+ outliers AS (
123
+ SELECT
124
+ 'outlier' AS "rowKind",
125
+ b."category",
126
+ NULL::DOUBLE AS "count",
127
+ NULL::DOUBLE AS "q1",
128
+ NULL::DOUBLE AS "median",
129
+ NULL::DOUBLE AS "q3",
130
+ NULL::DOUBLE AS "lowerFence",
131
+ NULL::DOUBLE AS "upperFence",
132
+ NULL::DOUBLE AS "whiskerLow",
133
+ NULL::DOUBLE AS "whiskerHigh",
134
+ b."value"
135
+ FROM base b
136
+ JOIN fences f ON b."category" IS NOT DISTINCT FROM f."category"
137
+ WHERE b."value" < f."lowerFence" OR b."value" > f."upperFence"
138
+ )
139
+ SELECT * FROM summary
140
+ UNION ALL
141
+ SELECT * FROM outliers
142
+ ORDER BY "category", "rowKind", "value"
143
+ `.trim();
144
+ }
145
+ export class BoxPlotClient extends MosaicClient {
146
+ onStateChange;
147
+ tableName;
148
+ x;
149
+ y;
150
+ selection;
151
+ state = {
152
+ isLoading: true,
153
+ outliers: [],
154
+ summaries: [],
155
+ };
156
+ destroyed = false;
157
+ constructor(options) {
158
+ super(options.selection);
159
+ this.onStateChange = options.onStateChange;
160
+ this.tableName = options.tableName;
161
+ this.x = options.x;
162
+ this.y = options.y;
163
+ this.selection = options.selection;
164
+ }
165
+ get filterStable() {
166
+ return false;
167
+ }
168
+ fields() {
169
+ return [this.x, this.y];
170
+ }
171
+ emitState(next) {
172
+ if (this.destroyed) {
173
+ return;
174
+ }
175
+ this.state = { ...this.state, ...next };
176
+ this.onStateChange(this.state);
177
+ }
178
+ queryPending() {
179
+ this.emitState({ error: undefined, isLoading: true });
180
+ return this;
181
+ }
182
+ query(filter) {
183
+ return buildBoxPlotQuery({
184
+ filter,
185
+ tableName: this.tableName,
186
+ x: this.x,
187
+ y: this.y,
188
+ });
189
+ }
190
+ queryResult(data) {
191
+ const rows = rowsFromQueryResult(data);
192
+ const summaries = [];
193
+ const outliers = [];
194
+ for (const row of rows) {
195
+ if (row.rowKind === 'summary') {
196
+ const count = numericValue(row.count);
197
+ const q1 = numericValue(row.q1);
198
+ const median = numericValue(row.median);
199
+ const q3 = numericValue(row.q3);
200
+ const lowerFence = numericValue(row.lowerFence);
201
+ const upperFence = numericValue(row.upperFence);
202
+ const whiskerLow = numericValue(row.whiskerLow);
203
+ const whiskerHigh = numericValue(row.whiskerHigh);
204
+ if (count === undefined ||
205
+ q1 === undefined ||
206
+ median === undefined ||
207
+ q3 === undefined ||
208
+ lowerFence === undefined ||
209
+ upperFence === undefined ||
210
+ whiskerLow === undefined ||
211
+ whiskerHigh === undefined) {
212
+ continue;
213
+ }
214
+ summaries.push({
215
+ category: row.category,
216
+ count,
217
+ lowerFence,
218
+ median,
219
+ q1,
220
+ q3,
221
+ upperFence,
222
+ whiskerHigh,
223
+ whiskerLow,
224
+ });
225
+ }
226
+ else if (row.rowKind === 'outlier') {
227
+ const value = numericValue(row.value);
228
+ if (value !== undefined) {
229
+ outliers.push({
230
+ category: row.category,
231
+ value,
232
+ });
233
+ }
234
+ }
235
+ }
236
+ this.emitState({
237
+ error: undefined,
238
+ isLoading: false,
239
+ outliers,
240
+ summaries,
241
+ });
242
+ return this;
243
+ }
244
+ queryError(error) {
245
+ this.emitState({ error, isLoading: false });
246
+ return this;
247
+ }
248
+ updateYBrush(extent) {
249
+ const normalized = extent
250
+ ? [Math.min(...extent), Math.max(...extent)]
251
+ : undefined;
252
+ this.emitState({ yBrush: normalized });
253
+ const clause = clauseInterval(this.y, normalized ?? null, { source: this });
254
+ this.selection.update(clause);
255
+ }
256
+ reset() {
257
+ this.updateYBrush();
258
+ }
259
+ destroy() {
260
+ this.destroyed = true;
261
+ super.destroy();
262
+ }
263
+ }
264
+ //# sourceMappingURL=BoxPlotClient.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,14 @@
1
+ import { type FC } from 'react';
2
+ import { type ChartPanelConfig } from '../dashboard/MosaicDashboardSlice';
3
+ import { MosaicReadyConnection } from '../MosaicSlice';
4
+ import { ChartTypeDefinition } from '../chart-types/base-types';
5
+ export type MosaicDashboardChartProps = {
6
+ dashboardId: string;
7
+ chartTypeDef: ChartTypeDefinition;
8
+ tableName: string;
9
+ connection: MosaicReadyConnection;
10
+ selectionName: string;
11
+ panel: ChartPanelConfig;
12
+ };
13
+ export declare const MosaicDashboardChart: FC<MosaicDashboardChartProps>;
14
+ //# sourceMappingURL=MosaicDashboardChart.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useCallback } from 'react';
3
+ import { ChartSettingsContent } from './chart-settings/ChartSettingsContent';
4
+ import { MosaicDashboardPanelLayout } from '../dashboard/MosaicDashboardPanelLayout';
5
+ import { useStoreWithMosaicDashboard, } from '../dashboard/MosaicDashboardSlice';
6
+ import { useGenerateSpec } from './useGenerateSpec';
7
+ import { MosaicDashboardChartContent } from './MosaicDashboardChartContent';
8
+ export const MosaicDashboardChart = ({ chartTypeDef, tableName, connection, dashboardId, selectionName, panel, }) => {
9
+ const updatePanel = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.updatePanel);
10
+ const isSettingsOpen = panel.config.settingsOpen;
11
+ const handleOpenChange = useCallback((isOpen) => {
12
+ updatePanel(dashboardId, panel.id, {
13
+ config: { ...panel.config, settingsOpen: isOpen },
14
+ });
15
+ }, [dashboardId, panel.config, panel.id, updatePanel]);
16
+ const spec = useGenerateSpec(tableName, panel.config.settings, chartTypeDef);
17
+ const settingsContent = (_jsx(ChartSettingsContent, { dashboardId: dashboardId, panel: panel, spec: spec.spec, tableName: tableName, onClose: () => handleOpenChange(false) }));
18
+ const chartContent = (_jsx("div", { className: "h-full overflow-auto p-2", children: _jsx(MosaicDashboardChartContent, { dashboardId: dashboardId, panel: panel, selectionName: selectionName, chartTypeDefinition: chartTypeDef, tableName: tableName, connection: connection, spec: spec }) }));
19
+ return (_jsx("div", { className: "h-full min-h-0", children: _jsx(MosaicDashboardPanelLayout, { isOpen: isSettingsOpen, onIsOpenChange: handleOpenChange, settings: settingsContent, content: chartContent }) }));
20
+ };
21
+ //# sourceMappingURL=MosaicDashboardChart.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,16 @@
1
+ import { type FC } from 'react';
2
+ import { ChartTypeDefinition } from '../chart-types/base-types';
3
+ import { UseGenerateSpecResult } from './useGenerateSpec';
4
+ import { MosaicReadyConnection } from '../MosaicSlice';
5
+ import { ChartPanelConfig } from '../dashboard/MosaicDashboardSlice';
6
+ export type MosaicDashboardChartContentProps = {
7
+ chartTypeDefinition: ChartTypeDefinition;
8
+ tableName: string;
9
+ connection: MosaicReadyConnection;
10
+ spec: UseGenerateSpecResult;
11
+ selectionName: string;
12
+ panel: ChartPanelConfig;
13
+ dashboardId: string;
14
+ };
15
+ export declare const MosaicDashboardChartContent: FC<MosaicDashboardChartContentProps>;
16
+ //# sourceMappingURL=MosaicDashboardChartContent.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { isComponentChartType, isSpecChartType, } from '../chart-types/base-types';
3
+ import { MosaicDashboardVgPlotChart } from './MosaicDashboardVgPlotChart';
4
+ import { MosaicDashboardComponentChart } from './MosaicDashboardComponentChart';
5
+ import { useChartRetainer } from './useChartRetainer';
6
+ import { useBrushSelectionParams } from './useBrushSelectionParams';
7
+ export const MosaicDashboardChartContent = ({ selectionName, panel, dashboardId, chartTypeDefinition, tableName, connection, spec, }) => {
8
+ const retention = useChartRetainer(dashboardId, panel.id);
9
+ const params = useBrushSelectionParams(selectionName);
10
+ if (isSpecChartType(chartTypeDefinition)) {
11
+ return (_jsx(MosaicDashboardVgPlotChart, { spec: spec, retention: retention, params: params }));
12
+ }
13
+ if (isComponentChartType(chartTypeDefinition)) {
14
+ return (_jsx(MosaicDashboardComponentChart, { tableName: tableName, panel: panel, chartTypeDefinition: chartTypeDefinition, connection: connection, retention: retention, params: params }));
15
+ }
16
+ throw new Error('Unsupported chart type definition');
17
+ };
18
+ //# sourceMappingURL=MosaicDashboardChartContent.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,4 @@
1
+ import { type FC } from 'react';
2
+ import { type ChartPanelRendererProps } from '../dashboard/MosaicDashboardSlice';
3
+ export declare const MosaicDashboardChartHeaderActions: FC<ChartPanelRendererProps>;
4
+ //# sourceMappingURL=MosaicDashboardChartHeaderActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardChartHeaderActions.d.ts","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChartHeaderActions.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAC,KAAK,EAAE,EAAc,MAAM,OAAO,CAAC;AAC3C,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,mCAAmC,CAAC;AAE3C,eAAO,MAAM,iCAAiC,EAAE,EAAE,CAAC,uBAAuB,CAmCzE,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Button, Tooltip, TooltipContent, TooltipTrigger } from '@sqlrooms/ui';
3
+ import { SettingsIcon } from 'lucide-react';
4
+ import { useCallback } from 'react';
5
+ import { useStoreWithMosaicDashboard, } from '../dashboard/MosaicDashboardSlice';
6
+ export const MosaicDashboardChartHeaderActions = ({ dashboardId, panel, }) => {
7
+ const updatePanel = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.updatePanel);
8
+ const isSettingsOpen = Boolean(panel.config.settingsOpen);
9
+ const handleToggleSettings = useCallback(() => {
10
+ updatePanel(dashboardId, panel.id, {
11
+ config: { ...panel.config, settingsOpen: !isSettingsOpen },
12
+ });
13
+ }, [dashboardId, isSettingsOpen, panel.config, panel.id, updatePanel]);
14
+ return (_jsx(_Fragment, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", className: "data-[state=active]:bg-accent h-6 w-6", title: "Chart settings", onClick: handleToggleSettings, "data-state": isSettingsOpen ? 'active' : 'inactive', children: _jsx(SettingsIcon, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Chart settings" })] }) }));
15
+ };
16
+ //# sourceMappingURL=MosaicDashboardChartHeaderActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardChartHeaderActions.js","sourceRoot":"","sources":["../../src/chart/MosaicDashboardChartHeaderActions.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAC,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAU,WAAW,EAAC,MAAM,OAAO,CAAC;AAC3C,OAAO,EAEL,2BAA2B,GAC5B,MAAM,mCAAmC,CAAC;AAE3C,MAAM,CAAC,MAAM,iCAAiC,GAAgC,CAAC,EAC7E,WAAW,EACX,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,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAE1D,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5C,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE;YACjC,MAAM,EAAE,EAAC,GAAG,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,cAAc,EAAC;SACzD,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;IAEvE,OAAO,CACL,4BACE,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,uCAAuC,EACjD,KAAK,EAAC,gBAAgB,EACtB,OAAO,EAAE,oBAAoB,gBACjB,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,YAElD,KAAC,YAAY,IAAC,SAAS,EAAC,aAAa,GAAG,GACjC,GACM,EACjB,KAAC,cAAc,iCAAgC,IACvC,GACT,CACJ,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {Button, Tooltip, TooltipContent, TooltipTrigger} from '@sqlrooms/ui';\nimport {SettingsIcon} from 'lucide-react';\nimport {type FC, useCallback} from 'react';\nimport {\n type ChartPanelRendererProps,\n useStoreWithMosaicDashboard,\n} from '../dashboard/MosaicDashboardSlice';\n\nexport const MosaicDashboardChartHeaderActions: FC<ChartPanelRendererProps> = ({\n dashboardId,\n panel,\n}) => {\n const updatePanel = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.updatePanel,\n );\n\n const isSettingsOpen = Boolean(panel.config.settingsOpen);\n\n const handleToggleSettings = useCallback(() => {\n updatePanel(dashboardId, panel.id, {\n config: {...panel.config, settingsOpen: !isSettingsOpen},\n });\n }, [dashboardId, isSettingsOpen, panel.config, panel.id, updatePanel]);\n\n return (\n <>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"data-[state=active]:bg-accent h-6 w-6\"\n title=\"Chart settings\"\n onClick={handleToggleSettings}\n data-state={isSettingsOpen ? 'active' : 'inactive'}\n >\n <SettingsIcon className=\"h-3.5 w-3.5\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Chart settings</TooltipContent>\n </Tooltip>\n </>\n );\n};\n"]}
@@ -0,0 +1,3 @@
1
+ import { type MosaicDashboardPanelRenderer, type ChartPanelConfig } from '../dashboard/MosaicDashboardSlice';
2
+ export declare const mosaicDashboardChartRenderer: MosaicDashboardPanelRenderer<ChartPanelConfig>;
3
+ //# sourceMappingURL=MosaicDashboardChartRenderer.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,31 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { SpinnerPane } from '@sqlrooms/ui';
3
+ import { BarChart3Icon } from 'lucide-react';
4
+ import { MosaicDashboardChartHeaderActions } from './MosaicDashboardChartHeaderActions';
5
+ import { useStoreWithMosaicDashboard, } from '../dashboard/MosaicDashboardSlice';
6
+ import { useChartTypeDefinition } from '../chart-types/useChartTypeDefinition';
7
+ import { MosaicDashboardChart } from './MosaicDashboardChart';
8
+ const MosaicDashboardChartRenderer = ({ panel, dashboardId, selectionName, }) => {
9
+ const connection = useStoreWithMosaicDashboard((state) => state.mosaic.connection);
10
+ const chartTypeDef = useChartTypeDefinition(panel.config.chartType);
11
+ const tableName = panel.source?.tableName;
12
+ if (!chartTypeDef) {
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
+ }
15
+ if (!tableName) {
16
+ return (_jsx("div", { className: "text-muted-foreground flex h-full items-center justify-center text-sm", children: "Please select a data table first" }));
17
+ }
18
+ if (connection.status === 'loading' || connection.status === 'idle') {
19
+ return _jsx(SpinnerPane, { className: "h-full w-full" });
20
+ }
21
+ if (connection.status === 'error') {
22
+ return (_jsx("div", { className: "text-muted-foreground flex h-full items-center justify-center text-sm", children: "Mosaic connection failed" }));
23
+ }
24
+ return (_jsx(MosaicDashboardChart, { dashboardId: dashboardId, selectionName: selectionName, panel: panel, chartTypeDef: chartTypeDef, tableName: tableName, connection: connection }));
25
+ };
26
+ export const mosaicDashboardChartRenderer = {
27
+ component: MosaicDashboardChartRenderer,
28
+ headerActions: MosaicDashboardChartHeaderActions,
29
+ icon: BarChart3Icon,
30
+ };
31
+ //# sourceMappingURL=MosaicDashboardChartRenderer.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,14 @@
1
+ import { FC } from 'react';
2
+ import { ComponentChartTypeDefinition, ChartRetainer, BrushSelectionParams } from '../chart-types/base-types';
3
+ import { ChartPanelConfig } from '../dashboard/MosaicDashboardSlice';
4
+ import { MosaicReadyConnection } from '../MosaicSlice';
5
+ export type MosaicDashboardComponentChartProps = {
6
+ tableName: string;
7
+ panel: ChartPanelConfig;
8
+ chartTypeDefinition: ComponentChartTypeDefinition;
9
+ connection: MosaicReadyConnection;
10
+ retention: ChartRetainer;
11
+ params: BrushSelectionParams | undefined;
12
+ };
13
+ export declare const MosaicDashboardComponentChart: FC<MosaicDashboardComponentChartProps>;
14
+ //# sourceMappingURL=MosaicDashboardComponentChart.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ export const MosaicDashboardComponentChart = ({ tableName, panel, chartTypeDefinition, connection, retention, params, }) => {
3
+ return React.createElement(chartTypeDefinition.renderer, {
4
+ tableName,
5
+ config: panel.config,
6
+ coordinator: connection.coordinator,
7
+ params,
8
+ retention,
9
+ });
10
+ };
11
+ //# sourceMappingURL=MosaicDashboardComponentChart.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,10 @@
1
+ import { FC } from 'react';
2
+ import { UseGenerateSpecResult } from './useGenerateSpec';
3
+ import { ChartRetainer, BrushSelectionParams } from '../chart-types/base-types';
4
+ export type MosaicDashboardVgPlotChartProps = {
5
+ spec: UseGenerateSpecResult;
6
+ retention: ChartRetainer;
7
+ params: BrushSelectionParams | undefined;
8
+ };
9
+ export declare const MosaicDashboardVgPlotChart: FC<MosaicDashboardVgPlotChartProps>;
10
+ //# sourceMappingURL=MosaicDashboardVgPlotChart.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { MosaicDashboardVgPlotError } from './MosaicDashboardVgPlotError';
3
+ import { VgPlotChart } from '../VgPlotChart';
4
+ export const MosaicDashboardVgPlotChart = ({ spec, retention, params }) => {
5
+ if (spec.error) {
6
+ return (_jsx("div", { className: "flex h-full flex-col items-center justify-center", children: _jsx(MosaicDashboardVgPlotError, { error: spec.error }) }));
7
+ }
8
+ return _jsx(VgPlotChart, { spec: spec.spec, params: params, retention: retention });
9
+ };
10
+ //# sourceMappingURL=MosaicDashboardVgPlotChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardVgPlotChart.js","sourceRoot":"","sources":["../../src/chart/MosaicDashboardVgPlotChart.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAC,0BAA0B,EAAC,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAS3C,MAAM,CAAC,MAAM,0BAA0B,GAEnC,CAAC,EAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAC,EAAE,EAAE;IAChC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CACL,cAAK,SAAS,EAAC,kDAAkD,YAC/D,KAAC,0BAA0B,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAI,GAC7C,CACP,CAAC;IACJ,CAAC;IAED,OAAO,KAAC,WAAW,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAI,CAAC;AAChF,CAAC,CAAC","sourcesContent":["import {FC} from 'react';\nimport {UseGenerateSpecResult} from './useGenerateSpec';\nimport {MosaicDashboardVgPlotError} from './MosaicDashboardVgPlotError';\nimport {VgPlotChart} from '../VgPlotChart';\nimport {ChartRetainer, BrushSelectionParams} from '../chart-types/base-types';\n\nexport type MosaicDashboardVgPlotChartProps = {\n spec: UseGenerateSpecResult;\n retention: ChartRetainer;\n params: BrushSelectionParams | undefined;\n};\n\nexport const MosaicDashboardVgPlotChart: FC<\n MosaicDashboardVgPlotChartProps\n> = ({spec, retention, params}) => {\n if (spec.error) {\n return (\n <div className=\"flex h-full flex-col items-center justify-center\">\n <MosaicDashboardVgPlotError error={spec.error} />\n </div>\n );\n }\n\n return <VgPlotChart spec={spec.spec} params={params} retention={retention} />;\n};\n"]}
@@ -0,0 +1,8 @@
1
+ import { type FC } from 'react';
2
+ import { ChartSpecError } from '../chart-types/errors';
3
+ interface MosaicDashboardVgPlotErrorProps {
4
+ error: ChartSpecError;
5
+ }
6
+ export declare const MosaicDashboardVgPlotError: FC<MosaicDashboardVgPlotErrorProps>;
7
+ export {};
8
+ //# sourceMappingURL=MosaicDashboardVgPlotError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardVgPlotError.d.ts","sourceRoot":"","sources":["../../src/chart/MosaicDashboardVgPlotError.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAC,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAC,cAAc,EAAsB,MAAM,uBAAuB,CAAC;AAE1E,UAAU,+BAA+B;IACvC,KAAK,EAAE,cAAc,CAAC;CACvB;AAED,eAAO,MAAM,0BAA0B,EAAE,EAAE,CACzC,+BAA+B,CAqBhC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { SpecGenerationError } from '../chart-types/errors';
3
+ export const MosaicDashboardVgPlotError = ({ error }) => {
4
+ // Configuration issues - user just needs to configure settings
5
+ if (error instanceof SpecGenerationError) {
6
+ return (_jsxs(_Fragment, { children: [_jsx("div", { className: "text-center font-medium", children: "Configure chart to display visualization" }), _jsx("div", { className: "text-center text-xs", children: error.message })] }));
7
+ }
8
+ // Generic error fallback
9
+ return (_jsxs(_Fragment, { children: [_jsx("div", { className: "text-center font-medium", children: "Unable to display chart" }), _jsx("div", { className: "text-center text-xs", children: error.message })] }));
10
+ };
11
+ //# sourceMappingURL=MosaicDashboardVgPlotError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardVgPlotError.js","sourceRoot":"","sources":["../../src/chart/MosaicDashboardVgPlotError.tsx"],"names":[],"mappings":";AACA,OAAO,EAAiB,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAM1E,MAAM,CAAC,MAAM,0BAA0B,GAEnC,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE;IACd,+DAA+D;IAC/D,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;QACzC,OAAO,CACL,8BACE,cAAK,SAAS,EAAC,yBAAyB,yDAElC,EACN,cAAK,SAAS,EAAC,qBAAqB,YAAE,KAAK,CAAC,OAAO,GAAO,IACzD,CACJ,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,OAAO,CACL,8BACE,cAAK,SAAS,EAAC,yBAAyB,wCAA8B,EACtE,cAAK,SAAS,EAAC,qBAAqB,YAAE,KAAK,CAAC,OAAO,GAAO,IACzD,CACJ,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {type FC} from 'react';\nimport {ChartSpecError, SpecGenerationError} from '../chart-types/errors';\n\ninterface MosaicDashboardVgPlotErrorProps {\n error: ChartSpecError;\n}\n\nexport const MosaicDashboardVgPlotError: FC<\n MosaicDashboardVgPlotErrorProps\n> = ({error}) => {\n // Configuration issues - user just needs to configure settings\n if (error instanceof SpecGenerationError) {\n return (\n <>\n <div className=\"text-center font-medium\">\n Configure chart to display visualization\n </div>\n <div className=\"text-center text-xs\">{error.message}</div>\n </>\n );\n }\n\n // Generic error fallback\n return (\n <>\n <div className=\"text-center font-medium\">Unable to display chart</div>\n <div className=\"text-center text-xs\">{error.message}</div>\n </>\n );\n};\n"]}