@sqlrooms/mosaic 0.29.0-rc.7 → 0.29.0-rc.8

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 (344) hide show
  1. package/LICENSE.md +2 -1
  2. package/README.md +134 -0
  3. package/dist/MosaicSlice.d.ts +1 -0
  4. package/dist/MosaicSlice.d.ts.map +1 -1
  5. package/dist/MosaicSlice.js.map +1 -1
  6. package/dist/VgPlotChart.d.ts.map +1 -1
  7. package/dist/VgPlotChart.js +9 -3
  8. package/dist/VgPlotChart.js.map +1 -1
  9. package/dist/ai/ai.d.ts +9 -4
  10. package/dist/ai/ai.d.ts.map +1 -1
  11. package/dist/ai/ai.js +91 -49
  12. package/dist/ai/ai.js.map +1 -1
  13. package/dist/ai.d.ts.map +1 -1
  14. package/dist/ai.js.map +1 -1
  15. package/dist/charts/MosaicChart.d.ts +3 -1
  16. package/dist/charts/MosaicChart.d.ts.map +1 -1
  17. package/dist/charts/MosaicChart.js +2 -2
  18. package/dist/charts/MosaicChart.js.map +1 -1
  19. package/dist/charts/MosaicChartError.d.ts +8 -2
  20. package/dist/charts/MosaicChartError.d.ts.map +1 -1
  21. package/dist/charts/MosaicChartError.js +29 -3
  22. package/dist/charts/MosaicChartError.js.map +1 -1
  23. package/dist/charts/MosaicChartSettingsButton.d.ts +15 -0
  24. package/dist/charts/MosaicChartSettingsButton.d.ts.map +1 -0
  25. package/dist/charts/MosaicChartSettingsButton.js +7 -0
  26. package/dist/charts/MosaicChartSettingsButton.js.map +1 -0
  27. package/dist/charts/MosaicChartView.d.ts +2 -0
  28. package/dist/charts/MosaicChartView.d.ts.map +1 -1
  29. package/dist/charts/MosaicChartView.js +20 -7
  30. package/dist/charts/MosaicChartView.js.map +1 -1
  31. package/dist/charts/chart-settings/MosaicChartSettings.d.ts.map +1 -1
  32. package/dist/charts/chart-settings/MosaicChartSettings.js +3 -3
  33. package/dist/charts/chart-settings/MosaicChartSettings.js.map +1 -1
  34. package/dist/charts/chart-settings/MosaicChartSettingsPanel.js +1 -1
  35. package/dist/charts/chart-settings/MosaicChartSettingsPanel.js.map +1 -1
  36. package/dist/charts/chart-settings/MosaicChartTypeSelector.d.ts.map +1 -1
  37. package/dist/charts/chart-settings/MosaicChartTypeSelector.js +11 -4
  38. package/dist/charts/chart-settings/MosaicChartTypeSelector.js.map +1 -1
  39. package/dist/charts/chart-types/base-types.d.ts +17 -6
  40. package/dist/charts/chart-types/base-types.d.ts.map +1 -1
  41. package/dist/charts/chart-types/base-types.js +3 -0
  42. package/dist/charts/chart-types/base-types.js.map +1 -1
  43. package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.d.ts.map +1 -1
  44. package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.js +3 -8
  45. package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.js.map +1 -1
  46. package/dist/charts/chart-types/chart-config.d.ts +3 -1
  47. package/dist/charts/chart-types/chart-config.d.ts.map +1 -1
  48. package/dist/charts/chart-types/chart-config.js +2 -2
  49. package/dist/charts/chart-types/chart-config.js.map +1 -1
  50. package/dist/charts/chart-types/count-plot/spec.d.ts +2 -1
  51. package/dist/charts/chart-types/count-plot/spec.d.ts.map +1 -1
  52. package/dist/charts/chart-types/count-plot/spec.js +65 -34
  53. package/dist/charts/chart-types/count-plot/spec.js.map +1 -1
  54. package/dist/charts/chart-types/count-plot/tool.js +1 -1
  55. package/dist/charts/chart-types/count-plot/tool.js.map +1 -1
  56. package/dist/charts/chart-types/createDefaultChartTypes.js +2 -2
  57. package/dist/charts/chart-types/createDefaultChartTypes.js.map +1 -1
  58. package/dist/charts/chart-types/custom-spec/spec.d.ts +2 -1
  59. package/dist/charts/chart-types/custom-spec/spec.d.ts.map +1 -1
  60. package/dist/charts/chart-types/custom-spec/spec.js +16 -12
  61. package/dist/charts/chart-types/custom-spec/spec.js.map +1 -1
  62. package/dist/charts/chart-types/errors.d.ts +25 -0
  63. package/dist/charts/chart-types/errors.d.ts.map +1 -1
  64. package/dist/charts/chart-types/errors.js +38 -0
  65. package/dist/charts/chart-types/errors.js.map +1 -1
  66. package/dist/charts/chart-types/heatmap/spec.d.ts +2 -1
  67. package/dist/charts/chart-types/heatmap/spec.d.ts.map +1 -1
  68. package/dist/charts/chart-types/heatmap/spec.js +53 -21
  69. package/dist/charts/chart-types/heatmap/spec.js.map +1 -1
  70. package/dist/charts/chart-types/heatmap/tool.js +2 -2
  71. package/dist/charts/chart-types/heatmap/tool.js.map +1 -1
  72. package/dist/charts/chart-types/histogram/HistogramSettings.d.ts.map +1 -1
  73. package/dist/charts/chart-types/histogram/HistogramSettings.js +3 -1
  74. package/dist/charts/chart-types/histogram/HistogramSettings.js.map +1 -1
  75. package/dist/charts/chart-types/histogram/schema.d.ts +2 -0
  76. package/dist/charts/chart-types/histogram/schema.d.ts.map +1 -1
  77. package/dist/charts/chart-types/histogram/schema.js +1 -0
  78. package/dist/charts/chart-types/histogram/schema.js.map +1 -1
  79. package/dist/charts/chart-types/histogram/spec.d.ts +2 -1
  80. package/dist/charts/chart-types/histogram/spec.d.ts.map +1 -1
  81. package/dist/charts/chart-types/histogram/spec.js +50 -27
  82. package/dist/charts/chart-types/histogram/spec.js.map +1 -1
  83. package/dist/charts/chart-types/histogram/tool.d.ts +2 -0
  84. package/dist/charts/chart-types/histogram/tool.d.ts.map +1 -1
  85. package/dist/charts/chart-types/histogram/tool.js +1 -1
  86. package/dist/charts/chart-types/histogram/tool.js.map +1 -1
  87. package/dist/charts/chart-types/index.d.ts +4 -4
  88. package/dist/charts/chart-types/index.js +4 -4
  89. package/dist/charts/chart-types/index.js.map +1 -1
  90. package/dist/charts/chart-types/line-chart/LineChartSettings.d.ts.map +1 -1
  91. package/dist/charts/chart-types/line-chart/LineChartSettings.js +4 -13
  92. package/dist/charts/chart-types/line-chart/LineChartSettings.js.map +1 -1
  93. package/dist/charts/chart-types/line-chart/LineChartXFieldSelector.d.ts +7 -0
  94. package/dist/charts/chart-types/line-chart/LineChartXFieldSelector.d.ts.map +1 -0
  95. package/dist/charts/chart-types/line-chart/LineChartXFieldSelector.js +22 -0
  96. package/dist/charts/chart-types/line-chart/LineChartXFieldSelector.js.map +1 -0
  97. package/dist/charts/chart-types/line-chart/LineChartYFieldsSelector.d.ts +7 -0
  98. package/dist/charts/chart-types/line-chart/LineChartYFieldsSelector.d.ts.map +1 -0
  99. package/dist/charts/chart-types/line-chart/LineChartYFieldsSelector.js +42 -0
  100. package/dist/charts/chart-types/line-chart/LineChartYFieldsSelector.js.map +1 -0
  101. package/dist/charts/chart-types/line-chart/schema.d.ts +2 -0
  102. package/dist/charts/chart-types/line-chart/schema.d.ts.map +1 -1
  103. package/dist/charts/chart-types/line-chart/schema.js +5 -0
  104. package/dist/charts/chart-types/line-chart/schema.js.map +1 -1
  105. package/dist/charts/chart-types/line-chart/spec.d.ts +2 -1
  106. package/dist/charts/chart-types/line-chart/spec.d.ts.map +1 -1
  107. package/dist/charts/chart-types/line-chart/spec.js +97 -65
  108. package/dist/charts/chart-types/line-chart/spec.js.map +1 -1
  109. package/dist/charts/chart-types/line-chart/tool.d.ts +2 -0
  110. package/dist/charts/chart-types/line-chart/tool.d.ts.map +1 -1
  111. package/dist/charts/chart-types/line-chart/tool.js +1 -1
  112. package/dist/charts/chart-types/line-chart/tool.js.map +1 -1
  113. package/dist/charts/chart-types/line-chart/utils.d.ts +7 -0
  114. package/dist/charts/chart-types/line-chart/utils.d.ts.map +1 -0
  115. package/dist/charts/chart-types/line-chart/utils.js +17 -0
  116. package/dist/charts/chart-types/line-chart/utils.js.map +1 -0
  117. package/dist/charts/chart-types/mosaicChartTypes.d.ts +4 -2
  118. package/dist/charts/chart-types/mosaicChartTypes.d.ts.map +1 -1
  119. package/dist/charts/chart-types/mosaicChartTypes.js +2 -2
  120. package/dist/charts/chart-types/mosaicChartTypes.js.map +1 -1
  121. package/dist/charts/chart-types/scatter-plot/ScatterPlotSettings.d.ts +3 -0
  122. package/dist/charts/chart-types/scatter-plot/ScatterPlotSettings.d.ts.map +1 -0
  123. package/dist/charts/chart-types/{bubble-chart/BubbleChartSettings.js → scatter-plot/ScatterPlotSettings.js} +4 -4
  124. package/dist/charts/chart-types/scatter-plot/ScatterPlotSettings.js.map +1 -0
  125. package/dist/charts/chart-types/scatter-plot/definition.d.ts +4 -0
  126. package/dist/charts/chart-types/scatter-plot/definition.d.ts.map +1 -0
  127. package/dist/charts/chart-types/scatter-plot/definition.js +24 -0
  128. package/dist/charts/chart-types/scatter-plot/definition.js.map +1 -0
  129. package/dist/charts/chart-types/{bubble-chart → scatter-plot}/schema.d.ts +5 -5
  130. package/dist/charts/chart-types/scatter-plot/schema.d.ts.map +1 -0
  131. package/dist/charts/chart-types/{bubble-chart → scatter-plot}/schema.js +5 -5
  132. package/dist/charts/chart-types/scatter-plot/schema.js.map +1 -0
  133. package/dist/charts/chart-types/scatter-plot/spec.d.ts +5 -0
  134. package/dist/charts/chart-types/scatter-plot/spec.d.ts.map +1 -0
  135. package/dist/charts/chart-types/scatter-plot/spec.js +81 -0
  136. package/dist/charts/chart-types/scatter-plot/spec.js.map +1 -0
  137. package/dist/charts/chart-types/{bubble-chart → scatter-plot}/tool.d.ts +3 -3
  138. package/dist/charts/chart-types/{bubble-chart → scatter-plot}/tool.d.ts.map +1 -1
  139. package/dist/charts/chart-types/{bubble-chart → scatter-plot}/tool.js +17 -13
  140. package/dist/charts/chart-types/scatter-plot/tool.js.map +1 -0
  141. package/dist/charts/dashboard/MosaicDashboardChartHeaderActions.d.ts.map +1 -1
  142. package/dist/charts/dashboard/MosaicDashboardChartHeaderActions.js +12 -5
  143. package/dist/charts/dashboard/MosaicDashboardChartHeaderActions.js.map +1 -1
  144. package/dist/charts/dashboard/MosaicDashboardChartRenderer.d.ts.map +1 -1
  145. package/dist/charts/dashboard/MosaicDashboardChartRenderer.js +2 -2
  146. package/dist/charts/dashboard/MosaicDashboardChartRenderer.js.map +1 -1
  147. package/dist/charts/useChartDataPolicy.d.ts.map +1 -1
  148. package/dist/charts/useChartDataPolicy.js +2 -1
  149. package/dist/charts/useChartDataPolicy.js.map +1 -1
  150. package/dist/charts/useChartPanelClients.d.ts +8 -0
  151. package/dist/charts/useChartPanelClients.d.ts.map +1 -0
  152. package/dist/charts/useChartPanelClients.js +22 -0
  153. package/dist/charts/useChartPanelClients.js.map +1 -0
  154. package/dist/charts/useMosaicChartRenderContext.d.ts +2 -3
  155. package/dist/charts/useMosaicChartRenderContext.d.ts.map +1 -1
  156. package/dist/charts/useMosaicChartRenderContext.js +15 -15
  157. package/dist/charts/useMosaicChartRenderContext.js.map +1 -1
  158. package/dist/charts/worksheet/ChartBlockHeader.d.ts.map +1 -1
  159. package/dist/charts/worksheet/ChartBlockHeader.js +4 -3
  160. package/dist/charts/worksheet/ChartBlockHeader.js.map +1 -1
  161. package/dist/charts/worksheet/ChartBlockRenderer.d.ts.map +1 -1
  162. package/dist/charts/worksheet/ChartBlockRenderer.js +3 -13
  163. package/dist/charts/worksheet/ChartBlockRenderer.js.map +1 -1
  164. package/dist/column-types-utils.d.ts.map +1 -1
  165. package/dist/column-types-utils.js +12 -4
  166. package/dist/column-types-utils.js.map +1 -1
  167. package/dist/components/AggregationSelector.d.ts.map +1 -1
  168. package/dist/components/AggregationSelector.js +9 -2
  169. package/dist/components/AggregationSelector.js.map +1 -1
  170. package/dist/components/BlockCaptionEditor.d.ts +20 -0
  171. package/dist/components/BlockCaptionEditor.d.ts.map +1 -0
  172. package/dist/components/BlockCaptionEditor.js +15 -0
  173. package/dist/components/BlockCaptionEditor.js.map +1 -0
  174. package/dist/components/ColorSelector.d.ts +12 -0
  175. package/dist/components/ColorSelector.d.ts.map +1 -0
  176. package/dist/components/ColorSelector.js +14 -0
  177. package/dist/components/ColorSelector.js.map +1 -0
  178. package/dist/components/ColumnSelector.d.ts +1 -0
  179. package/dist/components/ColumnSelector.d.ts.map +1 -1
  180. package/dist/components/ColumnSelector.js +2 -2
  181. package/dist/components/ColumnSelector.js.map +1 -1
  182. package/dist/components/Combobox.d.ts +45 -0
  183. package/dist/components/Combobox.d.ts.map +1 -0
  184. package/dist/components/Combobox.js +58 -0
  185. package/dist/components/Combobox.js.map +1 -0
  186. package/dist/components/FieldSelectorInput.d.ts +1 -0
  187. package/dist/components/FieldSelectorInput.d.ts.map +1 -1
  188. package/dist/components/FieldSelectorInput.js +4 -9
  189. package/dist/components/FieldSelectorInput.js.map +1 -1
  190. package/dist/components/MultiFieldSelector.d.ts +4 -1
  191. package/dist/components/MultiFieldSelector.d.ts.map +1 -1
  192. package/dist/components/MultiFieldSelector.js +4 -13
  193. package/dist/components/MultiFieldSelector.js.map +1 -1
  194. package/dist/components/TemporalGranularitySelector.d.ts.map +1 -1
  195. package/dist/components/TemporalGranularitySelector.js +13 -9
  196. package/dist/components/TemporalGranularitySelector.js.map +1 -1
  197. package/dist/components/useCombobox.d.ts +23 -0
  198. package/dist/components/useCombobox.d.ts.map +1 -0
  199. package/dist/components/useCombobox.js +26 -0
  200. package/dist/components/useCombobox.js.map +1 -0
  201. package/dist/constants/chart-colors.d.ts +3 -0
  202. package/dist/constants/chart-colors.d.ts.map +1 -0
  203. package/dist/constants/chart-colors.js +5 -0
  204. package/dist/constants/chart-colors.js.map +1 -0
  205. package/dist/dashboard/DefaultMosaicDashboardBlock.d.ts +2 -1
  206. package/dist/dashboard/DefaultMosaicDashboardBlock.d.ts.map +1 -1
  207. package/dist/dashboard/DefaultMosaicDashboardBlock.js +1 -1
  208. package/dist/dashboard/DefaultMosaicDashboardBlock.js.map +1 -1
  209. package/dist/dashboard/MosaicDashboardSlice.d.ts +22 -4
  210. package/dist/dashboard/MosaicDashboardSlice.d.ts.map +1 -1
  211. package/dist/dashboard/MosaicDashboardSlice.js +55 -0
  212. package/dist/dashboard/MosaicDashboardSlice.js.map +1 -1
  213. package/dist/dashboard/components/ResetFiltersButton.d.ts +14 -0
  214. package/dist/dashboard/components/ResetFiltersButton.d.ts.map +1 -0
  215. package/dist/dashboard/components/ResetFiltersButton.js +15 -0
  216. package/dist/dashboard/components/ResetFiltersButton.js.map +1 -0
  217. package/dist/dashboard/dashboard-types.d.ts +9 -3
  218. package/dist/dashboard/dashboard-types.d.ts.map +1 -1
  219. package/dist/dashboard/hooks/useDashboardResetFilters.d.ts +14 -0
  220. package/dist/dashboard/hooks/useDashboardResetFilters.d.ts.map +1 -0
  221. package/dist/dashboard/hooks/useDashboardResetFilters.js +39 -0
  222. package/dist/dashboard/hooks/useDashboardResetFilters.js.map +1 -0
  223. package/dist/dashboard/hooks/usePanelResetFilters.d.ts +16 -0
  224. package/dist/dashboard/hooks/usePanelResetFilters.d.ts.map +1 -0
  225. package/dist/dashboard/hooks/usePanelResetFilters.js +47 -0
  226. package/dist/dashboard/hooks/usePanelResetFilters.js.map +1 -0
  227. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.d.ts.map +1 -1
  228. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.js +3 -3
  229. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.js.map +1 -1
  230. package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.d.ts +7 -0
  231. package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.d.ts.map +1 -0
  232. package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.js +18 -0
  233. package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.js.map +1 -0
  234. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.d.ts.map +1 -1
  235. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.js +4 -32
  236. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.js.map +1 -1
  237. package/dist/dashboard/toolbar/MosaicDashboardToolbar.d.ts +2 -2
  238. package/dist/dashboard/toolbar/MosaicDashboardToolbar.d.ts.map +1 -1
  239. package/dist/dashboard/toolbar/MosaicDashboardToolbar.js +12 -10
  240. package/dist/dashboard/toolbar/MosaicDashboardToolbar.js.map +1 -1
  241. package/dist/dashboard/usePanelClientRegistration.d.ts +7 -0
  242. package/dist/dashboard/usePanelClientRegistration.d.ts.map +1 -0
  243. package/dist/dashboard/usePanelClientRegistration.js +30 -0
  244. package/dist/dashboard/usePanelClientRegistration.js.map +1 -0
  245. package/dist/dashboard/usePanelClients.d.ts +7 -0
  246. package/dist/dashboard/usePanelClients.d.ts.map +1 -0
  247. package/dist/dashboard/usePanelClients.js +13 -0
  248. package/dist/dashboard/usePanelClients.js.map +1 -0
  249. package/dist/data-table-explorer/DataTableExplorer.d.ts +4 -2
  250. package/dist/data-table-explorer/DataTableExplorer.d.ts.map +1 -1
  251. package/dist/data-table-explorer/DataTableExplorer.js +4 -4
  252. package/dist/data-table-explorer/DataTableExplorer.js.map +1 -1
  253. package/dist/data-table-explorer/DataTableExplorerCategoryClient.d.ts.map +1 -1
  254. package/dist/data-table-explorer/DataTableExplorerCategoryClient.js +1 -0
  255. package/dist/data-table-explorer/DataTableExplorerCategoryClient.js.map +1 -1
  256. package/dist/data-table-explorer/createDataTableExplorerStore.d.ts +3 -0
  257. package/dist/data-table-explorer/createDataTableExplorerStore.d.ts.map +1 -1
  258. package/dist/data-table-explorer/createDataTableExplorerStore.js +6 -0
  259. package/dist/data-table-explorer/createDataTableExplorerStore.js.map +1 -1
  260. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerHeaderActions.d.ts +4 -0
  261. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerHeaderActions.d.ts.map +1 -0
  262. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerHeaderActions.js +13 -0
  263. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerHeaderActions.js.map +1 -0
  264. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.d.ts.map +1 -1
  265. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.js +22 -7
  266. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.js.map +1 -1
  267. package/dist/data-table-explorer/dashboard/useDataTableExplorerPanelClients.d.ts +13 -0
  268. package/dist/data-table-explorer/dashboard/useDataTableExplorerPanelClients.d.ts.map +1 -0
  269. package/dist/data-table-explorer/dashboard/useDataTableExplorerPanelClients.js +32 -0
  270. package/dist/data-table-explorer/dashboard/useDataTableExplorerPanelClients.js.map +1 -0
  271. package/dist/data-table-explorer/dataTableExplorerController.d.ts +5 -1
  272. package/dist/data-table-explorer/dataTableExplorerController.d.ts.map +1 -1
  273. package/dist/data-table-explorer/dataTableExplorerController.js +5 -2
  274. package/dist/data-table-explorer/dataTableExplorerController.js.map +1 -1
  275. package/dist/data-table-explorer/hooks/useDataTableExplorerColumns.d.ts +12 -0
  276. package/dist/data-table-explorer/hooks/useDataTableExplorerColumns.d.ts.map +1 -0
  277. package/dist/data-table-explorer/hooks/useDataTableExplorerColumns.js +19 -0
  278. package/dist/data-table-explorer/hooks/useDataTableExplorerColumns.js.map +1 -0
  279. package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.d.ts +30 -0
  280. package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.d.ts.map +1 -0
  281. package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.js +120 -0
  282. package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.js.map +1 -0
  283. package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.d.ts +28 -0
  284. package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.d.ts.map +1 -0
  285. package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.js +40 -0
  286. package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.js.map +1 -0
  287. package/dist/data-table-explorer/hooks/useDataTableExplorerSelection.d.ts +13 -0
  288. package/dist/data-table-explorer/hooks/useDataTableExplorerSelection.d.ts.map +1 -0
  289. package/dist/data-table-explorer/hooks/useDataTableExplorerSelection.js +40 -0
  290. package/dist/data-table-explorer/hooks/useDataTableExplorerSelection.js.map +1 -0
  291. package/dist/data-table-explorer/hooks/useDataTableExplorerStatus.d.ts +18 -0
  292. package/dist/data-table-explorer/hooks/useDataTableExplorerStatus.d.ts.map +1 -0
  293. package/dist/data-table-explorer/hooks/useDataTableExplorerStatus.js +23 -0
  294. package/dist/data-table-explorer/hooks/useDataTableExplorerStatus.js.map +1 -0
  295. package/dist/data-table-explorer/hooks/useDataTableExplorerStoreState.d.ts +27 -0
  296. package/dist/data-table-explorer/hooks/useDataTableExplorerStoreState.d.ts.map +1 -0
  297. package/dist/data-table-explorer/hooks/useDataTableExplorerStoreState.js +28 -0
  298. package/dist/data-table-explorer/hooks/useDataTableExplorerStoreState.js.map +1 -0
  299. package/dist/data-table-explorer/hooks/useDataTableExplorerVisiblePage.d.ts +15 -0
  300. package/dist/data-table-explorer/hooks/useDataTableExplorerVisiblePage.d.ts.map +1 -0
  301. package/dist/data-table-explorer/hooks/useDataTableExplorerVisiblePage.js +21 -0
  302. package/dist/data-table-explorer/hooks/useDataTableExplorerVisiblePage.js.map +1 -0
  303. package/dist/data-table-explorer/types.d.ts +6 -3
  304. package/dist/data-table-explorer/types.d.ts.map +1 -1
  305. package/dist/data-table-explorer/types.js.map +1 -1
  306. package/dist/data-table-explorer/useDataTableExplorer.d.ts.map +1 -1
  307. package/dist/data-table-explorer/useDataTableExplorer.js +12 -275
  308. package/dist/data-table-explorer/useDataTableExplorer.js.map +1 -1
  309. package/dist/data-table-explorer/worksheet/DataTableBlockHeader.d.ts +1 -0
  310. package/dist/data-table-explorer/worksheet/DataTableBlockHeader.d.ts.map +1 -1
  311. package/dist/data-table-explorer/worksheet/DataTableBlockHeader.js +4 -2
  312. package/dist/data-table-explorer/worksheet/DataTableBlockHeader.js.map +1 -1
  313. package/dist/data-table-explorer/worksheet/DataTableBlockRenderer.d.ts.map +1 -1
  314. package/dist/data-table-explorer/worksheet/DataTableBlockRenderer.js +3 -3
  315. package/dist/data-table-explorer/worksheet/DataTableBlockRenderer.js.map +1 -1
  316. package/dist/index.d.ts +8 -4
  317. package/dist/index.d.ts.map +1 -1
  318. package/dist/index.js +7 -3
  319. package/dist/index.js.map +1 -1
  320. package/dist/useVgPlotChartRender.d.ts.map +1 -1
  321. package/dist/useVgPlotChartRender.js +125 -24
  322. package/dist/useVgPlotChartRender.js.map +1 -1
  323. package/dist/useVgPlotChartRetention.d.ts +11 -0
  324. package/dist/useVgPlotChartRetention.d.ts.map +1 -1
  325. package/dist/useVgPlotChartRetention.js.map +1 -1
  326. package/package.json +14 -14
  327. package/dist/charts/chart-types/bubble-chart/BubbleChartSettings.d.ts +0 -3
  328. package/dist/charts/chart-types/bubble-chart/BubbleChartSettings.d.ts.map +0 -1
  329. package/dist/charts/chart-types/bubble-chart/BubbleChartSettings.js.map +0 -1
  330. package/dist/charts/chart-types/bubble-chart/definition.d.ts +0 -4
  331. package/dist/charts/chart-types/bubble-chart/definition.d.ts.map +0 -1
  332. package/dist/charts/chart-types/bubble-chart/definition.js +0 -24
  333. package/dist/charts/chart-types/bubble-chart/definition.js.map +0 -1
  334. package/dist/charts/chart-types/bubble-chart/schema.d.ts.map +0 -1
  335. package/dist/charts/chart-types/bubble-chart/schema.js.map +0 -1
  336. package/dist/charts/chart-types/bubble-chart/spec.d.ts +0 -4
  337. package/dist/charts/chart-types/bubble-chart/spec.d.ts.map +0 -1
  338. package/dist/charts/chart-types/bubble-chart/spec.js +0 -31
  339. package/dist/charts/chart-types/bubble-chart/spec.js.map +0 -1
  340. package/dist/charts/chart-types/bubble-chart/tool.js.map +0 -1
  341. package/dist/hooks/useDataTable.d.ts +0 -3
  342. package/dist/hooks/useDataTable.d.ts.map +0 -1
  343. package/dist/hooks/useDataTable.js +0 -28
  344. package/dist/hooks/useDataTable.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/charts/chart-types/scatter-plot/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,6BAA6B,EAAC,MAAM,uBAAuB,CAAC;AAEpE,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACvE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACvE,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,0CAA0C,CAAC;CACxD,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IACpC,QAAQ,EAAE,wBAAwB;IAClC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACpC,UAAU,EAAE,6BAA6B,CAAC,QAAQ,EAAE;CACrD,CAAC,CAAC","sourcesContent":["import {z} from 'zod';\nimport {ChartDataPolicyOverrideConfig} from '../data-policy-schema';\n\nexport const ScatterPlotChartSettings = z.object({\n x: z.string().optional().describe('Numeric column for X axis position'),\n y: z.string().optional().describe('Numeric column for Y axis position'),\n size: z\n .string()\n .optional()\n .describe('Numeric column for point size (optional)'),\n});\n\nexport type ScatterPlotChartSettings = z.infer<typeof ScatterPlotChartSettings>;\n\nexport const ScatterPlotChartConfig = z.object({\n chartType: z.literal('scatter-plot'),\n settings: ScatterPlotChartSettings,\n settingsOpen: z.boolean().optional(),\n dataPolicy: ChartDataPolicyOverrideConfig.optional(),\n});\n\nexport type ScatterPlotChartConfig = z.infer<typeof ScatterPlotChartConfig>;\n"]}
@@ -0,0 +1,5 @@
1
+ import type { Spec } from '@uwdata/mosaic-spec';
2
+ import { ScatterPlotChartSettings } from './schema';
3
+ import { CreateSpecOptions } from '../base-types';
4
+ export declare function createScatterPlotSpec(options: CreateSpecOptions<ScatterPlotChartSettings>): Spec;
5
+ //# sourceMappingURL=spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../../../src/charts/chart-types/scatter-plot/spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAC,wBAAwB,EAAC,MAAM,UAAU,CAAC;AAMlD,OAAO,EAAC,iBAAiB,EAAyB,MAAM,eAAe,CAAC;AAMxE,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,iBAAiB,CAAC,wBAAwB,CAAC,GACnD,IAAI,CAoCN"}
@@ -0,0 +1,81 @@
1
+ import { InvalidColumnTypeError, MissingColumnsError, RequiredFieldsError, } from '../errors';
2
+ import { getChartTableReference } from '../base-types';
3
+ import { isNumericType } from '../../../column-types-utils';
4
+ const FG_COLOR = 'var(--color-chart-1)';
5
+ const DEFAULT_POINT_SIZE = 3;
6
+ export function createScatterPlotSpec(options) {
7
+ const { dataTable, selectionName } = options;
8
+ const { xColumn, yColumn, sizeColumn } = validateScatterPlotSettings(options);
9
+ const dotMark = {
10
+ mark: 'dot',
11
+ data: { from: getChartTableReference(dataTable), filterBy: '$brush' },
12
+ x: xColumn.name,
13
+ y: yColumn.name,
14
+ fill: FG_COLOR,
15
+ fillOpacity: 0.5,
16
+ };
17
+ // If size column is provided, use it for point radius; otherwise use fixed size
18
+ if (sizeColumn) {
19
+ dotMark.r = sizeColumn.name;
20
+ }
21
+ else {
22
+ dotMark.r = DEFAULT_POINT_SIZE;
23
+ }
24
+ const plot = [dotMark];
25
+ if (selectionName) {
26
+ plot.push({ select: 'intervalXY', as: '$brush' });
27
+ }
28
+ return {
29
+ plot,
30
+ xLabel: xColumn.name,
31
+ yLabel: yColumn.name,
32
+ height: 250,
33
+ width: 380,
34
+ margins: { left: 50, right: 20, top: 20, bottom: 50 },
35
+ params: { brush: { select: 'crossfilter' } },
36
+ };
37
+ }
38
+ function validateScatterPlotSettings({ dataTable, settings: { x, y, size }, }) {
39
+ // Basic validation for required fields
40
+ if (!x || !y) {
41
+ throw new RequiredFieldsError([
42
+ ...(x ? [] : ['X field']),
43
+ ...(y ? [] : ['Y field']),
44
+ ]);
45
+ }
46
+ // Validate X and Y field existence
47
+ const xColumn = dataTable.columns.find((col) => col.name === x);
48
+ const yColumn = dataTable.columns.find((col) => col.name === y);
49
+ if (!xColumn || !yColumn) {
50
+ throw new MissingColumnsError([
51
+ ...(xColumn ? [] : [x]),
52
+ ...(yColumn ? [] : [y]),
53
+ ]);
54
+ }
55
+ // Validate X and Y field are numeric
56
+ const xIsNumeric = isNumericType(xColumn.type);
57
+ const yIsNumeric = isNumericType(yColumn.type);
58
+ if (!xIsNumeric || !yIsNumeric) {
59
+ throw new InvalidColumnTypeError([
60
+ ...(!xIsNumeric ? [xColumn.name] : []),
61
+ ...(!yIsNumeric ? [yColumn.name] : []),
62
+ ], 'numeric');
63
+ }
64
+ // Validate size field if provided
65
+ let sizeColumn = undefined;
66
+ if (size) {
67
+ sizeColumn = dataTable.columns.find((col) => col.name === size);
68
+ if (!sizeColumn) {
69
+ throw new MissingColumnsError([size]);
70
+ }
71
+ if (!isNumericType(sizeColumn.type)) {
72
+ throw new InvalidColumnTypeError([sizeColumn.name], 'numeric');
73
+ }
74
+ }
75
+ return {
76
+ xColumn,
77
+ yColumn,
78
+ sizeColumn,
79
+ };
80
+ }
81
+ //# sourceMappingURL=spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../../src/charts/chart-types/scatter-plot/spec.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Spec} from '@uwdata/mosaic-spec';\nimport {ScatterPlotChartSettings} from './schema';\nimport {\n InvalidColumnTypeError,\n MissingColumnsError,\n RequiredFieldsError,\n} from '../errors';\nimport {CreateSpecOptions, getChartTableReference} from '../base-types';\nimport {isNumericType} from '../../../column-types-utils';\n\nconst FG_COLOR = 'var(--color-chart-1)';\nconst DEFAULT_POINT_SIZE = 3;\n\nexport function createScatterPlotSpec(\n options: CreateSpecOptions<ScatterPlotChartSettings>,\n): Spec {\n const {dataTable, selectionName} = options;\n\n const {xColumn, yColumn, sizeColumn} = validateScatterPlotSettings(options);\n\n const dotMark: Record<string, unknown> = {\n mark: 'dot',\n data: {from: getChartTableReference(dataTable), filterBy: '$brush'},\n x: xColumn.name,\n y: yColumn.name,\n fill: FG_COLOR,\n fillOpacity: 0.5,\n };\n\n // If size column is provided, use it for point radius; otherwise use fixed size\n if (sizeColumn) {\n dotMark.r = sizeColumn.name;\n } else {\n dotMark.r = DEFAULT_POINT_SIZE;\n }\n\n const plot: unknown[] = [dotMark];\n\n if (selectionName) {\n plot.push({select: 'intervalXY', as: '$brush'});\n }\n\n return {\n plot,\n xLabel: xColumn.name,\n yLabel: yColumn.name,\n height: 250,\n width: 380,\n margins: {left: 50, right: 20, top: 20, bottom: 50},\n params: {brush: {select: 'crossfilter'}},\n } as Spec;\n}\n\nfunction validateScatterPlotSettings({\n dataTable,\n settings: {x, y, size},\n}: CreateSpecOptions<ScatterPlotChartSettings>) {\n // Basic validation for required fields\n if (!x || !y) {\n throw new RequiredFieldsError([\n ...(x ? [] : ['X field']),\n ...(y ? [] : ['Y field']),\n ]);\n }\n\n // Validate X and Y field existence\n const xColumn = dataTable.columns.find((col) => col.name === x);\n const yColumn = dataTable.columns.find((col) => col.name === y);\n\n if (!xColumn || !yColumn) {\n throw new MissingColumnsError([\n ...(xColumn ? [] : [x]),\n ...(yColumn ? [] : [y]),\n ]);\n }\n\n // Validate X and Y field are numeric\n const xIsNumeric = isNumericType(xColumn.type);\n const yIsNumeric = isNumericType(yColumn.type);\n if (!xIsNumeric || !yIsNumeric) {\n throw new InvalidColumnTypeError(\n [\n ...(!xIsNumeric ? [xColumn.name] : []),\n ...(!yIsNumeric ? [yColumn.name] : []),\n ],\n 'numeric',\n );\n }\n\n // Validate size field if provided\n let sizeColumn = undefined;\n if (size) {\n sizeColumn = dataTable.columns.find((col) => col.name === size);\n if (!sizeColumn) {\n throw new MissingColumnsError([size]);\n }\n if (!isNumericType(sizeColumn.type)) {\n throw new InvalidColumnTypeError([sizeColumn.name], 'numeric');\n }\n }\n\n return {\n xColumn,\n yColumn,\n sizeColumn,\n };\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { type DashboardToolDeps } from '../base-types';
3
- export declare const BubbleChartToolParameters: z.ZodObject<{
3
+ export declare const ScatterPlotToolParameters: z.ZodObject<{
4
4
  artifactId: z.ZodOptional<z.ZodString>;
5
5
  tableName: z.ZodOptional<z.ZodString>;
6
6
  createArtifactIfMissing: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
@@ -12,8 +12,8 @@ export declare const BubbleChartToolParameters: z.ZodObject<{
12
12
  size: z.ZodNonOptional<z.ZodOptional<z.ZodString>>;
13
13
  }, z.core.$strip>;
14
14
  }, z.core.$strip>;
15
- export type BubbleChartToolParams = z.infer<typeof BubbleChartToolParameters>;
16
- export declare function createBubbleChartAiTool(deps: DashboardToolDeps): import("ai").Tool<{
15
+ export type ScatterPlotToolParams = z.infer<typeof ScatterPlotToolParameters>;
16
+ export declare function createScatterPlotAiTool(deps: DashboardToolDeps): import("ai").Tool<{
17
17
  createArtifactIfMissing: boolean;
18
18
  reasoning: string;
19
19
  settings: {
@@ -1 +1 @@
1
- {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../../../src/charts/chart-types/bubble-chart/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAGtB,OAAO,EAAC,KAAK,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAKrD,eAAO,MAAM,yBAAyB;;;;;;;;;;;iBAEpC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE9E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;GA6E9D"}
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../../../src/charts/chart-types/scatter-plot/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAGtB,OAAO,EAAC,KAAK,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAKrD,eAAO,MAAM,yBAAyB;;;;;;;;;;;iBAEpC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE9E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;GAuF9D"}
@@ -1,15 +1,15 @@
1
1
  import { tool } from 'ai';
2
- import { BubbleChartSettings } from './schema';
2
+ import { ScatterPlotChartSettings } from './schema';
3
3
  import { BaseChartToolParameters } from '../../../ai/tool-schemas';
4
4
  import { validateColumnExists } from '../../../ai/tool-validation';
5
5
  import { NUMERIC_COLUMN_TYPES } from '../../../column-types-utils';
6
6
  import { createOrUpdateChartPanel } from '../../../ai/tool-helpers';
7
- export const BubbleChartToolParameters = BaseChartToolParameters.extend({
8
- settings: BubbleChartSettings.required(),
7
+ export const ScatterPlotToolParameters = BaseChartToolParameters.extend({
8
+ settings: ScatterPlotChartSettings.required(),
9
9
  });
10
- export function createBubbleChartAiTool(deps) {
10
+ export function createScatterPlotAiTool(deps) {
11
11
  return tool({
12
- description: `Bubble/scatter chart: plots individual points positioned by two numeric columns (x, y), with optional size dimension.
12
+ description: `Scatter chart: plots individual points positioned by two numeric columns (x, y), with optional size dimension.
13
13
 
14
14
  Use when: user asks to "plot X vs Y", "show relationship between", "scatter plot", "correlation", "compare two numeric columns".
15
15
  Example queries: "plot latitude vs longitude", "show correlation between elevation and temperature", "visualize coordinates sized by population", "plot area vs population density".
@@ -17,12 +17,12 @@ Example queries: "plot latitude vs longitude", "show correlation between elevati
17
17
  Required: x and y must be numeric (${NUMERIC_COLUMN_TYPES.join(', ')}).
18
18
  Optional: size can encode a third numeric dimension (magnitude, frequency, count).
19
19
 
20
- IMPORTANT: Bubble charts render ALL rows as individual points. Do NOT create bubble charts for tables with more than ${deps.maxDataPoints.toLocaleString()} rows - use aggregated visualizations instead (histogram, count-plot, line-chart with time intervals, or heatmap).
20
+ IMPORTANT: Scatter charts render ALL rows as individual points. Do NOT create scatter charts for tables with more than ${deps.maxDataPoints.toLocaleString()} rows - use aggregated visualizations instead (histogram, count-plot, line-chart with time intervals, or heatmap).
21
21
 
22
- To UPDATE an existing bubble chart: provide the panelId parameter. Otherwise creates new panel.
22
+ To UPDATE an existing scatter chart: provide the panelId parameter. Otherwise creates new panel.
23
23
 
24
24
  Do NOT use for: distributions (use histogram), categorical counts (use count-plot), trends over time (use line-chart), or large datasets (>${deps.maxDataPoints.toLocaleString()} rows).`,
25
- inputSchema: BubbleChartToolParameters,
25
+ inputSchema: ScatterPlotToolParameters,
26
26
  execute: async (params, context) => {
27
27
  try {
28
28
  const artifactId = deps.resolveArtifact(params.artifactId, params.createArtifactIfMissing, context);
@@ -30,15 +30,19 @@ Do NOT use for: distributions (use histogram), categorical counts (use count-plo
30
30
  // Validate settings
31
31
  validateColumnExists(params.settings.x, NUMERIC_COLUMN_TYPES, columns, 'x');
32
32
  validateColumnExists(params.settings.y, NUMERIC_COLUMN_TYPES, columns, 'y');
33
+ // Validate size if provided
34
+ if (params.settings.size) {
35
+ validateColumnExists(params.settings.size, NUMERIC_COLUMN_TYPES, columns, 'size');
36
+ }
33
37
  const result = createOrUpdateChartPanel(deps, {
34
38
  panelId: params.panelId,
35
39
  dashboardId: artifactId,
36
40
  tableName,
37
41
  title: params.settings.x && params.settings.y
38
- ? `Bubble chart - ${params.settings.x} vs ${params.settings.y}`
39
- : 'Bubble chart',
42
+ ? `Scatter chart - ${params.settings.x} vs ${params.settings.y}`
43
+ : 'Scatter chart',
40
44
  config: {
41
- chartType: 'bubble-chart',
45
+ chartType: 'scatter-plot',
42
46
  settings: params.settings,
43
47
  },
44
48
  });
@@ -46,8 +50,8 @@ Do NOT use for: distributions (use histogram), categorical counts (use count-plo
46
50
  llmResult: {
47
51
  success: true,
48
52
  details: params.panelId
49
- ? `Updated bubble chart "${result.title}".`
50
- : `Created bubble chart "${result.title}".`,
53
+ ? `Updated scatter chart "${result.title}".`
54
+ : `Created scatter chart "${result.title}".`,
51
55
  data: result,
52
56
  },
53
57
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../../src/charts/chart-types/scatter-plot/tool.ts"],"names":[],"mappings":"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","sourcesContent":["import {tool} from 'ai';\nimport {z} from 'zod';\nimport {ScatterPlotChartSettings} from './schema';\nimport {BaseChartToolParameters} from '../../../ai/tool-schemas';\nimport {type DashboardToolDeps} from '../base-types';\nimport {validateColumnExists} from '../../../ai/tool-validation';\nimport {NUMERIC_COLUMN_TYPES} from '../../../column-types-utils';\nimport {createOrUpdateChartPanel} from '../../../ai/tool-helpers';\n\nexport const ScatterPlotToolParameters = BaseChartToolParameters.extend({\n settings: ScatterPlotChartSettings.required(),\n});\n\nexport type ScatterPlotToolParams = z.infer<typeof ScatterPlotToolParameters>;\n\nexport function createScatterPlotAiTool(deps: DashboardToolDeps) {\n return tool({\n description: `Scatter chart: plots individual points positioned by two numeric columns (x, y), with optional size dimension.\n\nUse when: user asks to \"plot X vs Y\", \"show relationship between\", \"scatter plot\", \"correlation\", \"compare two numeric columns\".\nExample queries: \"plot latitude vs longitude\", \"show correlation between elevation and temperature\", \"visualize coordinates sized by population\", \"plot area vs population density\".\n\nRequired: x and y must be numeric (${NUMERIC_COLUMN_TYPES.join(', ')}).\nOptional: size can encode a third numeric dimension (magnitude, frequency, count).\n\nIMPORTANT: Scatter charts render ALL rows as individual points. Do NOT create scatter charts for tables with more than ${deps.maxDataPoints.toLocaleString()} rows - use aggregated visualizations instead (histogram, count-plot, line-chart with time intervals, or heatmap).\n\nTo UPDATE an existing scatter chart: provide the panelId parameter. Otherwise creates new panel.\n\nDo NOT use for: distributions (use histogram), categorical counts (use count-plot), trends over time (use line-chart), or large datasets (>${deps.maxDataPoints.toLocaleString()} rows).`,\n inputSchema: ScatterPlotToolParameters,\n execute: async (params, context) => {\n try {\n const artifactId = deps.resolveArtifact(\n params.artifactId,\n params.createArtifactIfMissing,\n context,\n );\n const {tableName, columns} = deps.resolveTable(\n artifactId,\n params.tableName,\n );\n\n // Validate settings\n validateColumnExists(\n params.settings.x,\n NUMERIC_COLUMN_TYPES,\n columns,\n 'x',\n );\n\n validateColumnExists(\n params.settings.y,\n NUMERIC_COLUMN_TYPES,\n columns,\n 'y',\n );\n\n // Validate size if provided\n if (params.settings.size) {\n validateColumnExists(\n params.settings.size,\n NUMERIC_COLUMN_TYPES,\n columns,\n 'size',\n );\n }\n\n const result = createOrUpdateChartPanel(deps, {\n panelId: params.panelId,\n dashboardId: artifactId,\n tableName,\n title:\n params.settings.x && params.settings.y\n ? `Scatter chart - ${params.settings.x} vs ${params.settings.y}`\n : 'Scatter chart',\n config: {\n chartType: 'scatter-plot',\n settings: params.settings,\n },\n });\n\n return {\n llmResult: {\n success: true,\n details: params.panelId\n ? `Updated scatter chart \"${result.title}\".`\n : `Created scatter chart \"${result.title}\".`,\n data: result,\n },\n };\n } catch (error) {\n return {\n llmResult: {\n success: false,\n errorMessage:\n error instanceof Error ? error.message : String(error),\n },\n };\n }\n },\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardChartHeaderActions.d.ts","sourceRoot":"","sources":["../../../src/charts/dashboard/MosaicDashboardChartHeaderActions.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAC,KAAK,EAAE,EAAc,MAAM,OAAO,CAAC;AAC3C,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,sCAAsC,CAAC;AAE9C,eAAO,MAAM,iCAAiC,EAAE,EAAE,CAAC,uBAAuB,CAmCzE,CAAC"}
1
+ {"version":3,"file":"MosaicDashboardChartHeaderActions.d.ts","sourceRoot":"","sources":["../../../src/charts/dashboard/MosaicDashboardChartHeaderActions.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAc,MAAM,OAAO,CAAC;AAC3C,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,sCAAsC,CAAC;AAM9C,eAAO,MAAM,iCAAiC,EAAE,EAAE,CAAC,uBAAuB,CAmCzE,CAAC"}
@@ -1,16 +1,23 @@
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';
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
4
2
  import { useCallback } from 'react';
5
3
  import { useStoreWithMosaicDashboard, } from '../../dashboard/MosaicDashboardSlice';
6
- export const MosaicDashboardChartHeaderActions = ({ dashboardId, panel, }) => {
4
+ import { usePanelClients } from '../../dashboard/usePanelClients';
5
+ import { usePanelResetFilters } from '../../dashboard/hooks/usePanelResetFilters';
6
+ import { ResetFiltersButton } from '../../dashboard/components/ResetFiltersButton';
7
+ import { MosaicChartSettingsButton } from '../MosaicChartSettingsButton';
8
+ export const MosaicDashboardChartHeaderActions = ({ dashboardId, panel, selectionName, }) => {
7
9
  const updatePanel = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.updatePanel);
10
+ const panelClients = usePanelClients(dashboardId, panel.id);
11
+ const { hasActiveFilters, reset } = usePanelResetFilters({
12
+ panelClients,
13
+ selectionName,
14
+ });
8
15
  const isSettingsOpen = Boolean(panel.config.settingsOpen);
9
16
  const handleToggleSettings = useCallback(() => {
10
17
  updatePanel(dashboardId, panel.id, {
11
18
  config: { ...panel.config, settingsOpen: !isSettingsOpen },
12
19
  });
13
20
  }, [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" })] }) }));
21
+ return (_jsxs(_Fragment, { children: [_jsx(ResetFiltersButton, { disabled: !hasActiveFilters, onClick: reset, tooltip: "Reset panel filters" }), _jsx(MosaicChartSettingsButton, { isSettingsOpen: isSettingsOpen, onToggleSettings: handleToggleSettings })] }));
15
22
  };
16
23
  //# sourceMappingURL=MosaicDashboardChartHeaderActions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardChartHeaderActions.js","sourceRoot":"","sources":["../../../src/charts/dashboard/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,sCAAsC,CAAC;AAE9C,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"]}
1
+ {"version":3,"file":"MosaicDashboardChartHeaderActions.js","sourceRoot":"","sources":["../../../src/charts/dashboard/MosaicDashboardChartHeaderActions.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAU,WAAW,EAAC,MAAM,OAAO,CAAC;AAC3C,OAAO,EAEL,2BAA2B,GAC5B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAC,eAAe,EAAC,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAC,oBAAoB,EAAC,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAC,kBAAkB,EAAC,MAAM,+CAA+C,CAAC;AACjF,OAAO,EAAC,yBAAyB,EAAC,MAAM,8BAA8B,CAAC;AAEvE,MAAM,CAAC,MAAM,iCAAiC,GAAgC,CAAC,EAC7E,WAAW,EACX,KAAK,EACL,aAAa,GACd,EAAE,EAAE;IACH,MAAM,WAAW,GAAG,2BAA2B,CAC7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAC7C,CAAC;IACF,MAAM,YAAY,GAAG,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5D,MAAM,EAAC,gBAAgB,EAAE,KAAK,EAAC,GAAG,oBAAoB,CAAC;QACrD,YAAY;QACZ,aAAa;KACd,CAAC,CAAC;IAEH,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,8BACE,KAAC,kBAAkB,IACjB,QAAQ,EAAE,CAAC,gBAAgB,EAC3B,OAAO,EAAE,KAAK,EACd,OAAO,EAAC,qBAAqB,GAC7B,EACF,KAAC,yBAAyB,IACxB,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,oBAAoB,GACtC,IACD,CACJ,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {type FC, useCallback} from 'react';\nimport {\n type ChartPanelRendererProps,\n useStoreWithMosaicDashboard,\n} from '../../dashboard/MosaicDashboardSlice';\nimport {usePanelClients} from '../../dashboard/usePanelClients';\nimport {usePanelResetFilters} from '../../dashboard/hooks/usePanelResetFilters';\nimport {ResetFiltersButton} from '../../dashboard/components/ResetFiltersButton';\nimport {MosaicChartSettingsButton} from '../MosaicChartSettingsButton';\n\nexport const MosaicDashboardChartHeaderActions: FC<ChartPanelRendererProps> = ({\n dashboardId,\n panel,\n selectionName,\n}) => {\n const updatePanel = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.updatePanel,\n );\n const panelClients = usePanelClients(dashboardId, panel.id);\n const {hasActiveFilters, reset} = usePanelResetFilters({\n panelClients,\n selectionName,\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 <ResetFiltersButton\n disabled={!hasActiveFilters}\n onClick={reset}\n tooltip=\"Reset panel filters\"\n />\n <MosaicChartSettingsButton\n isSettingsOpen={isSettingsOpen}\n onToggleSettings={handleToggleSettings}\n />\n </>\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardChartRenderer.d.ts","sourceRoot":"","sources":["../../../src/charts/dashboard/MosaicDashboardChartRenderer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,iCAAiC,CAAC;AACtE,OAAO,EACL,KAAK,4BAA4B,EAIlC,MAAM,sCAAsC,CAAC;AAsC9C,eAAO,MAAM,4BAA4B,EAAE,4BAA4B,CAAC,gBAAgB,CAKrF,CAAC"}
1
+ {"version":3,"file":"MosaicDashboardChartRenderer.d.ts","sourceRoot":"","sources":["../../../src/charts/dashboard/MosaicDashboardChartRenderer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,iCAAiC,CAAC;AACtE,OAAO,EACL,KAAK,4BAA4B,EAIlC,MAAM,sCAAsC,CAAC;AAwC9C,eAAO,MAAM,4BAA4B,EAAE,4BAA4B,CAAC,gBAAgB,CAKrF,CAAC"}
@@ -4,7 +4,7 @@ import { useCallback } from 'react';
4
4
  import { MosaicDashboardChartHeaderActions } from './MosaicDashboardChartHeaderActions';
5
5
  import { useStoreWithMosaicDashboard, getMosaicDashboardPanelId, } from '../../dashboard/MosaicDashboardSlice';
6
6
  import { MosaicChart } from '../MosaicChart';
7
- import { useDataTable } from '../../hooks/useDataTable';
7
+ import { useDataTable } from '@sqlrooms/db';
8
8
  const MosaicDashboardChartRenderer = ({ panel, dashboardId, dashboard, selectionName, }) => {
9
9
  const tableName = dashboard.selectedTable;
10
10
  const dataTable = useDataTable(tableName);
@@ -13,7 +13,7 @@ const MosaicDashboardChartRenderer = ({ panel, dashboardId, dashboard, selection
13
13
  const handleConfigChange = useCallback((config) => {
14
14
  updatePanel(dashboardId, panel.id, { config });
15
15
  }, [dashboardId, panel.id, updatePanel]);
16
- return (_jsx(MosaicChart, { dataTable: dataTable, selectionName: selectionName, config: panel.config, runtimeKey: runtimeKey, onConfigChange: handleConfigChange }));
16
+ return (_jsx(MosaicChart, { dataTable: dataTable, selectionName: selectionName, config: panel.config, runtimeKey: runtimeKey, onConfigChange: handleConfigChange, dashboardId: dashboardId, panelId: panel.id }));
17
17
  };
18
18
  export const mosaicDashboardChartRenderer = {
19
19
  component: MosaicDashboardChartRenderer,
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardChartRenderer.js","sourceRoot":"","sources":["../../../src/charts/dashboard/MosaicDashboardChartRenderer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAC,WAAW,EAAU,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAC,iCAAiC,EAAC,MAAM,qCAAqC,CAAC;AAEtF,OAAO,EAGL,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAC,YAAY,EAAC,MAAM,0BAA0B,CAAC;AAEtD,MAAM,4BAA4B,GAAgC,CAAC,EACjE,KAAK,EACL,WAAW,EACX,SAAS,EACT,aAAa,GACd,EAAE,EAAE;IACH,MAAM,SAAS,GAAG,SAAS,CAAC,aAAa,CAAC;IAC1C,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAE1C,MAAM,WAAW,GAAG,2BAA2B,CAC7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAC7C,CAAC;IAEF,MAAM,UAAU,GAAG,yBAAyB,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAEpE,MAAM,kBAAkB,GAAG,WAAW,CACpC,CAAC,MAAmB,EAAE,EAAE;QACtB,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,EAAC,MAAM,EAAC,CAAC,CAAC;IAC/C,CAAC,EACD,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CACrC,CAAC;IAEF,OAAO,CACL,KAAC,WAAW,IACV,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,kBAAkB,GAClC,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 {BarChart3Icon} from 'lucide-react';\nimport {useCallback, type FC} from 'react';\nimport {MosaicDashboardChartHeaderActions} from './MosaicDashboardChartHeaderActions';\nimport type {ChartPanelConfig} from '../../dashboard/dashboard-types';\nimport {\n type MosaicDashboardPanelRenderer,\n type ChartPanelRendererProps,\n useStoreWithMosaicDashboard,\n getMosaicDashboardPanelId,\n} from '../../dashboard/MosaicDashboardSlice';\nimport {ChartConfig} from '../chart-types/chart-config';\nimport {MosaicChart} from '../MosaicChart';\nimport {useDataTable} from '../../hooks/useDataTable';\n\nconst MosaicDashboardChartRenderer: FC<ChartPanelRendererProps> = ({\n panel,\n dashboardId,\n dashboard,\n selectionName,\n}) => {\n const tableName = dashboard.selectedTable;\n const dataTable = useDataTable(tableName);\n\n const updatePanel = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.updatePanel,\n );\n\n const runtimeKey = getMosaicDashboardPanelId(dashboardId, panel.id);\n\n const handleConfigChange = useCallback(\n (config: ChartConfig) => {\n updatePanel(dashboardId, panel.id, {config});\n },\n [dashboardId, panel.id, updatePanel],\n );\n\n return (\n <MosaicChart\n dataTable={dataTable}\n selectionName={selectionName}\n config={panel.config}\n runtimeKey={runtimeKey}\n onConfigChange={handleConfigChange}\n />\n );\n};\n\nexport const mosaicDashboardChartRenderer: MosaicDashboardPanelRenderer<ChartPanelConfig> =\n {\n component: MosaicDashboardChartRenderer,\n headerActions: MosaicDashboardChartHeaderActions,\n icon: BarChart3Icon,\n };\n"]}
1
+ {"version":3,"file":"MosaicDashboardChartRenderer.js","sourceRoot":"","sources":["../../../src/charts/dashboard/MosaicDashboardChartRenderer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAC,WAAW,EAAU,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAC,iCAAiC,EAAC,MAAM,qCAAqC,CAAC;AAEtF,OAAO,EAGL,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAE1C,MAAM,4BAA4B,GAAgC,CAAC,EACjE,KAAK,EACL,WAAW,EACX,SAAS,EACT,aAAa,GACd,EAAE,EAAE;IACH,MAAM,SAAS,GAAG,SAAS,CAAC,aAAa,CAAC;IAC1C,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAE1C,MAAM,WAAW,GAAG,2BAA2B,CAC7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAC7C,CAAC;IAEF,MAAM,UAAU,GAAG,yBAAyB,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAEpE,MAAM,kBAAkB,GAAG,WAAW,CACpC,CAAC,MAAmB,EAAE,EAAE;QACtB,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,EAAC,MAAM,EAAC,CAAC,CAAC;IAC/C,CAAC,EACD,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CACrC,CAAC;IAEF,OAAO,CACL,KAAC,WAAW,IACV,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,kBAAkB,EAClC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,KAAK,CAAC,EAAE,GACjB,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 {BarChart3Icon} from 'lucide-react';\nimport {useCallback, type FC} from 'react';\nimport {MosaicDashboardChartHeaderActions} from './MosaicDashboardChartHeaderActions';\nimport type {ChartPanelConfig} from '../../dashboard/dashboard-types';\nimport {\n type MosaicDashboardPanelRenderer,\n type ChartPanelRendererProps,\n useStoreWithMosaicDashboard,\n getMosaicDashboardPanelId,\n} from '../../dashboard/MosaicDashboardSlice';\nimport {ChartConfig} from '../chart-types/chart-config';\nimport {MosaicChart} from '../MosaicChart';\nimport {useDataTable} from '@sqlrooms/db';\n\nconst MosaicDashboardChartRenderer: FC<ChartPanelRendererProps> = ({\n panel,\n dashboardId,\n dashboard,\n selectionName,\n}) => {\n const tableName = dashboard.selectedTable;\n const dataTable = useDataTable(tableName);\n\n const updatePanel = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.updatePanel,\n );\n\n const runtimeKey = getMosaicDashboardPanelId(dashboardId, panel.id);\n\n const handleConfigChange = useCallback(\n (config: ChartConfig) => {\n updatePanel(dashboardId, panel.id, {config});\n },\n [dashboardId, panel.id, updatePanel],\n );\n\n return (\n <MosaicChart\n dataTable={dataTable}\n selectionName={selectionName}\n config={panel.config}\n runtimeKey={runtimeKey}\n onConfigChange={handleConfigChange}\n dashboardId={dashboardId}\n panelId={panel.id}\n />\n );\n};\n\nexport const mosaicDashboardChartRenderer: MosaicDashboardPanelRenderer<ChartPanelConfig> =\n {\n component: MosaicDashboardChartRenderer,\n headerActions: MosaicDashboardChartHeaderActions,\n icon: BarChart3Icon,\n };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useChartDataPolicy.d.ts","sourceRoot":"","sources":["../../src/charts/useChartDataPolicy.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAEtD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAEvC,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,MAAM,EAAE,WAAW,GAClB,eAAe,GAAG,IAAI,CAgBxB"}
1
+ {"version":3,"file":"useChartDataPolicy.d.ts","sourceRoot":"","sources":["../../src/charts/useChartDataPolicy.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAC;AAEtD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,4BAA4B,CAAC;AAG5D,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAEvC,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,MAAM,EAAE,WAAW,GAClB,eAAe,GAAG,IAAI,CAgBxB"}
@@ -1,5 +1,6 @@
1
1
  import { useMemo } from 'react';
2
2
  import { resolveChartDataPolicy } from '../chart-runtime';
3
+ import { getChartTableReference } from './chart-types/base-types';
3
4
  import { useChartTypeDefinition } from './useChartTypeDefinition';
4
5
  export function useChartDataPolicy(dataTable, config) {
5
6
  const chartTypeDefinition = useChartTypeDefinition(config.chartType);
@@ -8,7 +9,7 @@ export function useChartDataPolicy(dataTable, config) {
8
9
  return null;
9
10
  }
10
11
  const defaultPolicy = chartTypeDefinition.getDataPolicy({
11
- tableName: dataTable.table.table,
12
+ tableName: getChartTableReference(dataTable),
12
13
  config,
13
14
  }) ?? null;
14
15
  return resolveChartDataPolicy(defaultPolicy, config.dataPolicy);
@@ -1 +1 @@
1
- {"version":3,"file":"useChartDataPolicy.js","sourceRoot":"","sources":["../../src/charts/useChartDataPolicy.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAC,sBAAsB,EAAC,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAGhE,MAAM,UAAU,kBAAkB,CAChC,SAAgC,EAChC,MAAmB;IAEnB,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAErE,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI,CAAC,mBAAmB,EAAE,aAAa,IAAI,CAAC,SAAS,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,aAAa,GACjB,mBAAmB,CAAC,aAAa,CAAC;YAChC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK;YAChC,MAAM;SACP,CAAC,IAAI,IAAI,CAAC;QAEb,OAAO,sBAAsB,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAClE,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAAC,CAAC;AAC/C,CAAC","sourcesContent":["import {useMemo} from 'react';\nimport type {ChartDataPolicy} from '../chart-runtime';\nimport {resolveChartDataPolicy} from '../chart-runtime';\nimport type {ChartConfig} from './chart-types/chart-config';\nimport {useChartTypeDefinition} from './useChartTypeDefinition';\nimport {DataTable} from '@sqlrooms/db';\n\nexport function useChartDataPolicy(\n dataTable: DataTable | undefined,\n config: ChartConfig,\n): ChartDataPolicy | null {\n const chartTypeDefinition = useChartTypeDefinition(config.chartType);\n\n return useMemo(() => {\n if (!chartTypeDefinition?.getDataPolicy || !dataTable) {\n return null;\n }\n\n const defaultPolicy =\n chartTypeDefinition.getDataPolicy({\n tableName: dataTable.table.table,\n config,\n }) ?? null;\n\n return resolveChartDataPolicy(defaultPolicy, config.dataPolicy);\n }, [config, chartTypeDefinition, dataTable]);\n}\n"]}
1
+ {"version":3,"file":"useChartDataPolicy.js","sourceRoot":"","sources":["../../src/charts/useChartDataPolicy.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAC,sBAAsB,EAAC,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAGhE,MAAM,UAAU,kBAAkB,CAChC,SAAgC,EAChC,MAAmB;IAEnB,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAErE,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI,CAAC,mBAAmB,EAAE,aAAa,IAAI,CAAC,SAAS,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,aAAa,GACjB,mBAAmB,CAAC,aAAa,CAAC;YAChC,SAAS,EAAE,sBAAsB,CAAC,SAAS,CAAC;YAC5C,MAAM;SACP,CAAC,IAAI,IAAI,CAAC;QAEb,OAAO,sBAAsB,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAClE,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAAC,CAAC;AAC/C,CAAC","sourcesContent":["import {useMemo} from 'react';\nimport type {ChartDataPolicy} from '../chart-runtime';\nimport {resolveChartDataPolicy} from '../chart-runtime';\nimport type {ChartConfig} from './chart-types/chart-config';\nimport {getChartTableReference} from './chart-types/base-types';\nimport {useChartTypeDefinition} from './useChartTypeDefinition';\nimport {DataTable} from '@sqlrooms/db';\n\nexport function useChartDataPolicy(\n dataTable: DataTable | undefined,\n config: ChartConfig,\n): ChartDataPolicy | null {\n const chartTypeDefinition = useChartTypeDefinition(config.chartType);\n\n return useMemo(() => {\n if (!chartTypeDefinition?.getDataPolicy || !dataTable) {\n return null;\n }\n\n const defaultPolicy =\n chartTypeDefinition.getDataPolicy({\n tableName: getChartTableReference(dataTable),\n config,\n }) ?? null;\n\n return resolveChartDataPolicy(defaultPolicy, config.dataPolicy);\n }, [config, chartTypeDefinition, dataTable]);\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { type MosaicClient } from '@uwdata/mosaic-core';
2
+ import type { VgPlotChartRetention } from '../VgPlotChart';
3
+ /**
4
+ * Extracts chart interactors from a retained chart instance for panel client registration.
5
+ * Chart interactors create filter clauses when users interact with the chart (e.g., brushing).
6
+ */
7
+ export declare function useChartPanelClients(retention: VgPlotChartRetention | null | undefined): MosaicClient[];
8
+ //# sourceMappingURL=useChartPanelClients.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChartPanelClients.d.ts","sourceRoot":"","sources":["../../src/charts/useChartPanelClients.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAEtD,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,gBAAgB,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,GACjD,YAAY,EAAE,CAoBhB"}
@@ -0,0 +1,22 @@
1
+ import { useMemo } from 'react';
2
+ /**
3
+ * Extracts chart interactors from a retained chart instance for panel client registration.
4
+ * Chart interactors create filter clauses when users interact with the chart (e.g., brushing).
5
+ */
6
+ export function useChartPanelClients(retention) {
7
+ return useMemo(() => {
8
+ if (!retention?.chart) {
9
+ return [];
10
+ }
11
+ // VgPlotChart element structure: element.value is the vgplot instance
12
+ const element = retention.chart.element;
13
+ const plotInstance = element?.value;
14
+ if (!plotInstance) {
15
+ return [];
16
+ }
17
+ // Interactors create clauses, so we need to register them as "clients" for filtering
18
+ const interactors = plotInstance.interactors;
19
+ return interactors ?? [];
20
+ }, [retention?.chart]);
21
+ }
22
+ //# sourceMappingURL=useChartPanelClients.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChartPanelClients.js","sourceRoot":"","sources":["../../src/charts/useChartPanelClients.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAG9B;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAkD;IAElD,OAAO,OAAO,CAAiB,GAAG,EAAE;QAClC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;YACtB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,sEAAsE;QACtE,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;QACxC,MAAM,YAAY,GAAI,OAAe,EAAE,KAAK,CAAC;QAE7C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,qFAAqF;QACrF,MAAM,WAAW,GAAG,YAAY,CAAC,WAEpB,CAAC;QACd,OAAO,WAAW,IAAI,EAAE,CAAC;IAC3B,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;AACzB,CAAC","sourcesContent":["import {type MosaicClient} from '@uwdata/mosaic-core';\nimport {useMemo} from 'react';\nimport type {VgPlotChartRetention} from '../VgPlotChart';\n\n/**\n * Extracts chart interactors from a retained chart instance for panel client registration.\n * Chart interactors create filter clauses when users interact with the chart (e.g., brushing).\n */\nexport function useChartPanelClients(\n retention: VgPlotChartRetention | null | undefined,\n): MosaicClient[] {\n return useMemo<MosaicClient[]>(() => {\n if (!retention?.chart) {\n return [];\n }\n\n // VgPlotChart element structure: element.value is the vgplot instance\n const element = retention.chart.element;\n const plotInstance = (element as any)?.value;\n\n if (!plotInstance) {\n return [];\n }\n\n // Interactors create clauses, so we need to register them as \"clients\" for filtering\n const interactors = plotInstance.interactors as\n | Array<MosaicClient>\n | undefined;\n return interactors ?? [];\n }, [retention?.chart]);\n}\n"]}
@@ -13,9 +13,8 @@ export type MosaicSpecChartRenderContext = {
13
13
  };
14
14
  export type MosaicChartRenderErrorContext = {
15
15
  type: 'error';
16
- title: string;
17
- message: string;
16
+ error: Error;
18
17
  };
19
18
  export type MosaicChartRenderContext = MosaicComponentChartRenderContext | MosaicSpecChartRenderContext | MosaicChartRenderErrorContext;
20
- export declare function useMosaicChartRenderContext(dataTable: DataTable | undefined, config: ChartConfig): MosaicChartRenderContext;
19
+ export declare function useMosaicChartRenderContext(dataTable: DataTable | undefined, config: ChartConfig, selectionName?: string): MosaicChartRenderContext;
21
20
  //# sourceMappingURL=useMosaicChartRenderContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMosaicChartRenderContext.d.ts","sourceRoot":"","sources":["../../src/charts/useMosaicChartRenderContext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,qBAAqB,CAAC;AAE9C,OAAO,KAAK,EAAC,WAAW,EAAgB,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EACL,4BAA4B,EAI7B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAEvC,MAAM,MAAM,iCAAiC,GAAG;IAC9C,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,4BAA4B,CAAC,UAAU,CAAC,CAAC;IACnD,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAChC,iCAAiC,GACjC,4BAA4B,GAC5B,6BAA6B,CAAC;AAElC,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,MAAM,EAAE,WAAW,GAClB,wBAAwB,CA0C1B"}
1
+ {"version":3,"file":"useMosaicChartRenderContext.d.ts","sourceRoot":"","sources":["../../src/charts/useMosaicChartRenderContext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,qBAAqB,CAAC;AAE9C,OAAO,KAAK,EAAC,WAAW,EAAgB,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EACL,4BAA4B,EAI7B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAEvC,MAAM,MAAM,iCAAiC,GAAG;IAC9C,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,4BAA4B,CAAC,UAAU,CAAC,CAAC;IACnD,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAChC,iCAAiC,GACjC,4BAA4B,GAC5B,6BAA6B,CAAC;AAElC,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,MAAM,EAAE,WAAW,EACnB,aAAa,CAAC,EAAE,MAAM,GACrB,wBAAwB,CAwC1B"}
@@ -2,25 +2,23 @@ import { useMemo } from 'react';
2
2
  import { ChartSpecError } from './chart-types/errors';
3
3
  import { isComponentChartType, isSpecChartType, } from './chart-types/base-types';
4
4
  import { useChartTypeDefinition } from './useChartTypeDefinition';
5
- export function useMosaicChartRenderContext(dataTable, config) {
5
+ export function useMosaicChartRenderContext(dataTable, config, selectionName) {
6
6
  const chartTypeDefinition = useChartTypeDefinition(config.chartType);
7
7
  return useMemo(() => {
8
8
  if (!chartTypeDefinition) {
9
9
  return {
10
10
  type: 'error',
11
- title: 'Ooops! Something went wrong',
12
- message: 'Invalid chart type definition',
11
+ error: new Error(`Invalid chart type definition`),
13
12
  };
14
13
  }
15
14
  if (!dataTable) {
16
15
  return {
17
16
  type: 'error',
18
- title: 'Ooops! Something went wrong',
19
- message: 'Please select a data table first',
17
+ error: new Error('Data table is required to render the chart'),
20
18
  };
21
19
  }
22
20
  if (isSpecChartType(chartTypeDefinition)) {
23
- return createMosaicSpecChartRenderContext(chartTypeDefinition, dataTable, config.settings);
21
+ return createMosaicSpecChartRenderContext(chartTypeDefinition, dataTable, config.settings, selectionName);
24
22
  }
25
23
  if (isComponentChartType(chartTypeDefinition)) {
26
24
  return {
@@ -31,14 +29,17 @@ export function useMosaicChartRenderContext(dataTable, config) {
31
29
  }
32
30
  return {
33
31
  type: 'error',
34
- title: 'Ooops! Something went wrong',
35
- message: 'Unsupported chart type definition',
32
+ error: new Error('Unsupported chart type definition'),
36
33
  };
37
- }, [chartTypeDefinition, dataTable, config]);
34
+ }, [chartTypeDefinition, dataTable, config, selectionName]);
38
35
  }
39
- function createMosaicSpecChartRenderContext(chartTypeDefinition, dataTable, settings) {
36
+ function createMosaicSpecChartRenderContext(chartTypeDefinition, dataTable, settings, selectionName) {
40
37
  try {
41
- const spec = chartTypeDefinition.createSpec(dataTable.table.table, settings);
38
+ const spec = chartTypeDefinition.createSpec({
39
+ dataTable,
40
+ settings,
41
+ selectionName,
42
+ });
42
43
  return {
43
44
  type: 'spec',
44
45
  spec,
@@ -49,14 +50,13 @@ function createMosaicSpecChartRenderContext(chartTypeDefinition, dataTable, sett
49
50
  // ChartSpecError is expected as part of validation logic, don't log
50
51
  return {
51
52
  type: 'error',
52
- title: 'Configure chart to display visualization',
53
- message: error.message,
53
+ error,
54
54
  };
55
55
  }
56
+ console.error('Unexpected error creating chart spec:', error);
56
57
  return {
57
58
  type: 'error',
58
- title: 'Ooops! Something went wrong',
59
- message: 'An unexpected error occurred',
59
+ error: new Error('An unexpected error occurred while creating the chart spec'),
60
60
  };
61
61
  }
62
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useMosaicChartRenderContext.js","sourceRoot":"","sources":["../../src/charts/useMosaicChartRenderContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAEL,oBAAoB,EACpB,eAAe,GAEhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAyBhE,MAAM,UAAU,2BAA2B,CACzC,SAAgC,EAChC,MAAmB;IAEnB,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAErE,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,6BAA6B;gBACpC,OAAO,EAAE,+BAA+B;aACzC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,6BAA6B;gBACpC,OAAO,EAAE,kCAAkC;aAC5C,CAAC;QACJ,CAAC;QAED,IAAI,eAAe,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACzC,OAAO,kCAAkC,CACvC,mBAAmB,EACnB,SAAS,EACT,MAAM,CAAC,QAAQ,CAChB,CAAC;QACJ,CAAC;QAED,IAAI,oBAAoB,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC9C,OAAO;gBACL,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,mBAAmB,CAAC,QAAQ;gBACtC,SAAS;aACV,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,6BAA6B;YACpC,OAAO,EAAE,mCAAmC;SAC7C,CAAC;IACJ,CAAC,EAAE,CAAC,mBAAmB,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,kCAAkC,CACzC,mBAAqD,EACrD,SAAoB,EACpB,QAAuB;IAEvB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,mBAAmB,CAAC,UAAU,CACzC,SAAS,CAAC,KAAK,CAAC,KAAK,EACrB,QAAQ,CACT,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,IAAI;SACL,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;YACpC,oEAAoE;YACpE,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,0CAA0C;gBACjD,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,6BAA6B;YACpC,OAAO,EAAE,8BAA8B;SACxC,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import {useMemo} from 'react';\nimport type {Spec} from '@uwdata/mosaic-spec';\nimport {ChartSpecError} from './chart-types/errors';\nimport type {ChartConfig, ChartSettings} from './chart-types/chart-config';\nimport {\n ComponentChartTypeDefinition,\n isComponentChartType,\n isSpecChartType,\n SpecChartTypeDefinition,\n} from './chart-types/base-types';\nimport {useChartTypeDefinition} from './useChartTypeDefinition';\nimport {DataTable} from '@sqlrooms/db';\n\nexport type MosaicComponentChartRenderContext = {\n type: 'component';\n renderer: ComponentChartTypeDefinition['renderer'];\n dataTable: DataTable;\n};\n\nexport type MosaicSpecChartRenderContext = {\n type: 'spec';\n spec: Spec;\n};\n\nexport type MosaicChartRenderErrorContext = {\n type: 'error';\n title: string;\n message: string;\n};\n\nexport type MosaicChartRenderContext =\n | MosaicComponentChartRenderContext\n | MosaicSpecChartRenderContext\n | MosaicChartRenderErrorContext;\n\nexport function useMosaicChartRenderContext(\n dataTable: DataTable | undefined,\n config: ChartConfig,\n): MosaicChartRenderContext {\n const chartTypeDefinition = useChartTypeDefinition(config.chartType);\n\n return useMemo(() => {\n if (!chartTypeDefinition) {\n return {\n type: 'error',\n title: 'Ooops! Something went wrong',\n message: 'Invalid chart type definition',\n };\n }\n\n if (!dataTable) {\n return {\n type: 'error',\n title: 'Ooops! Something went wrong',\n message: 'Please select a data table first',\n };\n }\n\n if (isSpecChartType(chartTypeDefinition)) {\n return createMosaicSpecChartRenderContext(\n chartTypeDefinition,\n dataTable,\n config.settings,\n );\n }\n\n if (isComponentChartType(chartTypeDefinition)) {\n return {\n type: 'component',\n renderer: chartTypeDefinition.renderer,\n dataTable,\n };\n }\n\n return {\n type: 'error',\n title: 'Ooops! Something went wrong',\n message: 'Unsupported chart type definition',\n };\n }, [chartTypeDefinition, dataTable, config]);\n}\n\nfunction createMosaicSpecChartRenderContext<TConfig extends ChartConfig>(\n chartTypeDefinition: SpecChartTypeDefinition<TConfig>,\n dataTable: DataTable,\n settings: ChartSettings,\n): MosaicSpecChartRenderContext | MosaicChartRenderErrorContext {\n try {\n const spec = chartTypeDefinition.createSpec(\n dataTable.table.table,\n settings,\n );\n\n return {\n type: 'spec',\n spec,\n };\n } catch (error) {\n if (error instanceof ChartSpecError) {\n // ChartSpecError is expected as part of validation logic, don't log\n return {\n type: 'error',\n title: 'Configure chart to display visualization',\n message: error.message,\n };\n }\n\n return {\n type: 'error',\n title: 'Ooops! Something went wrong',\n message: 'An unexpected error occurred',\n };\n }\n}\n"]}
1
+ {"version":3,"file":"useMosaicChartRenderContext.js","sourceRoot":"","sources":["../../src/charts/useMosaicChartRenderContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAEL,oBAAoB,EACpB,eAAe,GAEhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAwBhE,MAAM,UAAU,2BAA2B,CACzC,SAAgC,EAChC,MAAmB,EACnB,aAAsB;IAEtB,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAErE,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,IAAI,KAAK,CAAC,+BAA+B,CAAC;aAClD,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,IAAI,KAAK,CAAC,4CAA4C,CAAC;aAC/D,CAAC;QACJ,CAAC;QAED,IAAI,eAAe,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACzC,OAAO,kCAAkC,CACvC,mBAAmB,EACnB,SAAS,EACT,MAAM,CAAC,QAAQ,EACf,aAAa,CACd,CAAC;QACJ,CAAC;QAED,IAAI,oBAAoB,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC9C,OAAO;gBACL,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,mBAAmB,CAAC,QAAQ;gBACtC,SAAS;aACV,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,IAAI,KAAK,CAAC,mCAAmC,CAAC;SACtD,CAAC;IACJ,CAAC,EAAE,CAAC,mBAAmB,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,kCAAkC,CACzC,mBAAqD,EACrD,SAAoB,EACpB,QAAuB,EACvB,aAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,mBAAmB,CAAC,UAAU,CAAC;YAC1C,SAAS;YACT,QAAQ;YACR,aAAa;SACd,CAAC,CAAC;QAEH,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,IAAI;SACL,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;YACpC,oEAAoE;YACpE,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK;aACN,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;QAE9D,OAAO;YACL,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,IAAI,KAAK,CACd,4DAA4D,CAC7D;SACF,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import {useMemo} from 'react';\nimport type {Spec} from '@uwdata/mosaic-spec';\nimport {ChartSpecError} from './chart-types/errors';\nimport type {ChartConfig, ChartSettings} from './chart-types/chart-config';\nimport {\n ComponentChartTypeDefinition,\n isComponentChartType,\n isSpecChartType,\n SpecChartTypeDefinition,\n} from './chart-types/base-types';\nimport {useChartTypeDefinition} from './useChartTypeDefinition';\nimport {DataTable} from '@sqlrooms/db';\n\nexport type MosaicComponentChartRenderContext = {\n type: 'component';\n renderer: ComponentChartTypeDefinition['renderer'];\n dataTable: DataTable;\n};\n\nexport type MosaicSpecChartRenderContext = {\n type: 'spec';\n spec: Spec;\n};\n\nexport type MosaicChartRenderErrorContext = {\n type: 'error';\n error: Error;\n};\n\nexport type MosaicChartRenderContext =\n | MosaicComponentChartRenderContext\n | MosaicSpecChartRenderContext\n | MosaicChartRenderErrorContext;\n\nexport function useMosaicChartRenderContext(\n dataTable: DataTable | undefined,\n config: ChartConfig,\n selectionName?: string,\n): MosaicChartRenderContext {\n const chartTypeDefinition = useChartTypeDefinition(config.chartType);\n\n return useMemo(() => {\n if (!chartTypeDefinition) {\n return {\n type: 'error',\n error: new Error(`Invalid chart type definition`),\n };\n }\n\n if (!dataTable) {\n return {\n type: 'error',\n error: new Error('Data table is required to render the chart'),\n };\n }\n\n if (isSpecChartType(chartTypeDefinition)) {\n return createMosaicSpecChartRenderContext(\n chartTypeDefinition,\n dataTable,\n config.settings,\n selectionName,\n );\n }\n\n if (isComponentChartType(chartTypeDefinition)) {\n return {\n type: 'component',\n renderer: chartTypeDefinition.renderer,\n dataTable,\n };\n }\n\n return {\n type: 'error',\n error: new Error('Unsupported chart type definition'),\n };\n }, [chartTypeDefinition, dataTable, config, selectionName]);\n}\n\nfunction createMosaicSpecChartRenderContext<TConfig extends ChartConfig>(\n chartTypeDefinition: SpecChartTypeDefinition<TConfig>,\n dataTable: DataTable,\n settings: ChartSettings,\n selectionName?: string,\n): MosaicSpecChartRenderContext | MosaicChartRenderErrorContext {\n try {\n const spec = chartTypeDefinition.createSpec({\n dataTable,\n settings,\n selectionName,\n });\n\n return {\n type: 'spec',\n spec,\n };\n } catch (error) {\n if (error instanceof ChartSpecError) {\n // ChartSpecError is expected as part of validation logic, don't log\n return {\n type: 'error',\n error,\n };\n }\n\n console.error('Unexpected error creating chart spec:', error);\n\n return {\n type: 'error',\n error: new Error(\n 'An unexpected error occurred while creating the chart spec',\n ),\n };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ChartBlockHeader.d.ts","sourceRoot":"","sources":["../../../src/charts/worksheet/ChartBlockHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,6BAA6B,CAAC;AAG7D,OAAO,EAAC,EAAE,EAAC,MAAM,OAAO,CAAC;AAGzB,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACxD,oBAAoB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,aAAa,EAAE,SAAS,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAoDtD,CAAC"}
1
+ {"version":3,"file":"ChartBlockHeader.d.ts","sourceRoot":"","sources":["../../../src/charts/worksheet/ChartBlockHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAC,EAAE,EAAC,MAAM,OAAO,CAAC;AAKzB,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACxD,oBAAoB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,aAAa,EAAE,SAAS,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAmCtD,CAAC"}
@@ -1,9 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Button, cn } from '@sqlrooms/ui';
3
- import { Settings2Icon } from 'lucide-react';
2
+ import { cn } from '@sqlrooms/ui';
4
3
  import { DataTableSelector } from '../../components/DataTableSelector';
4
+ import { MosaicChartSettingsButton } from '../MosaicChartSettingsButton';
5
+ import { BlockCaptionEditor } from '../../components/BlockCaptionEditor';
5
6
  export const ChartBlockHeader = ({ caption, chartConfig, onCaptionChange, onSettingsOpenChange, onTableChange, readOnly, selectedTable, tables, }) => {
6
7
  const tableName = selectedTable.table.table;
7
- return (_jsxs("div", { className: "border-border flex min-h-10 items-center gap-2 border-b px-3 py-2", children: [readOnly ? (_jsx("div", { className: "min-w-0 flex-1 truncate text-sm font-medium", children: caption || tableName || 'Chart' })) : (_jsx("input", { className: "placeholder:text-muted-foreground min-w-0 flex-1 bg-transparent text-sm font-medium outline-none", value: caption ?? '', placeholder: tableName || 'Chart caption', "aria-label": "Chart caption", onChange: (event) => onCaptionChange?.(event.target.value || undefined) })), _jsx(DataTableSelector, { className: "w-48", disabled: readOnly || !onTableChange, onChange: onTableChange, tables: tables, value: selectedTable }), _jsx(Button, { type: "button", size: "icon", variant: chartConfig.settingsOpen ? 'secondary' : 'ghost', className: cn('h-7 w-7', readOnly && 'hidden'), "aria-label": "Chart settings", title: "Chart settings", "aria-pressed": chartConfig.settingsOpen, onClick: () => onSettingsOpenChange(!chartConfig.settingsOpen), children: _jsx(Settings2Icon, { className: "h-4 w-4" }) })] }));
8
+ return (_jsxs("div", { className: "border-border flex min-h-10 items-center gap-2 border-b px-3 py-2", children: [_jsx(BlockCaptionEditor, { value: caption ?? '', placeholder: tableName || 'Chart caption', isReadOnly: readOnly, onChange: (value) => onCaptionChange?.(value || undefined) }), _jsx(DataTableSelector, { disabled: readOnly || !onTableChange, onChange: onTableChange, tables: tables, value: selectedTable }), _jsx(MosaicChartSettingsButton, { className: cn('h-8 w-8', { hidden: readOnly }), isSettingsOpen: chartConfig.settingsOpen, onToggleSettings: () => onSettingsOpenChange(!chartConfig.settingsOpen) })] }));
8
9
  };
9
10
  //# sourceMappingURL=ChartBlockHeader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartBlockHeader.js","sourceRoot":"","sources":["../../../src/charts/worksheet/ChartBlockHeader.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAC,MAAM,EAAE,EAAE,EAAC,MAAM,cAAc,CAAC;AACxC,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAC,iBAAiB,EAAC,MAAM,oCAAoC,CAAC;AAarE,MAAM,CAAC,MAAM,gBAAgB,GAA8B,CAAC,EAC1D,OAAO,EACP,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,QAAQ,EACR,aAAa,EACb,MAAM,GACP,EAAE,EAAE;IACH,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;IAE5C,OAAO,CACL,eAAK,SAAS,EAAC,mEAAmE,aAC/E,QAAQ,CAAC,CAAC,CAAC,CACV,cAAK,SAAS,EAAC,6CAA6C,YACzD,OAAO,IAAI,SAAS,IAAI,OAAO,GAC5B,CACP,CAAC,CAAC,CAAC,CACF,gBACE,SAAS,EAAC,kGAAkG,EAC5G,KAAK,EAAE,OAAO,IAAI,EAAE,EACpB,WAAW,EAAE,SAAS,IAAI,eAAe,gBAC9B,eAAe,EAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,eAAe,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC,GAEpD,CACH,EAED,KAAC,iBAAiB,IAChB,SAAS,EAAC,MAAM,EAChB,QAAQ,EAAE,QAAQ,IAAI,CAAC,aAAa,EACpC,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,GACpB,EAEF,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,MAAM,EACX,OAAO,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EACzD,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,QAAQ,IAAI,QAAQ,CAAC,gBACnC,gBAAgB,EAC3B,KAAK,EAAC,gBAAgB,kBACR,WAAW,CAAC,YAAY,EACtC,OAAO,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,YAE9D,KAAC,aAAa,IAAC,SAAS,EAAC,SAAS,GAAG,GAC9B,IACL,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type {DataTable} from '@sqlrooms/db';\nimport type {ChartConfig} from '../chart-types/chart-config';\nimport {Button, cn} from '@sqlrooms/ui';\nimport {Settings2Icon} from 'lucide-react';\nimport {FC} from 'react';\nimport {DataTableSelector} from '../../components/DataTableSelector';\n\nexport type ChartBlockHeaderProps = {\n caption?: string;\n chartConfig: ChartConfig;\n onCaptionChange?: (caption: string | undefined) => void;\n onSettingsOpenChange: (open: boolean) => void;\n onTableChange?: (table: DataTable) => void;\n readOnly?: boolean;\n tables: DataTable[];\n selectedTable: DataTable;\n};\n\nexport const ChartBlockHeader: FC<ChartBlockHeaderProps> = ({\n caption,\n chartConfig,\n onCaptionChange,\n onSettingsOpenChange,\n onTableChange,\n readOnly,\n selectedTable,\n tables,\n}) => {\n const tableName = selectedTable.table.table;\n\n return (\n <div className=\"border-border flex min-h-10 items-center gap-2 border-b px-3 py-2\">\n {readOnly ? (\n <div className=\"min-w-0 flex-1 truncate text-sm font-medium\">\n {caption || tableName || 'Chart'}\n </div>\n ) : (\n <input\n className=\"placeholder:text-muted-foreground min-w-0 flex-1 bg-transparent text-sm font-medium outline-none\"\n value={caption ?? ''}\n placeholder={tableName || 'Chart caption'}\n aria-label=\"Chart caption\"\n onChange={(event) =>\n onCaptionChange?.(event.target.value || undefined)\n }\n />\n )}\n\n <DataTableSelector\n className=\"w-48\"\n disabled={readOnly || !onTableChange}\n onChange={onTableChange}\n tables={tables}\n value={selectedTable}\n />\n\n <Button\n type=\"button\"\n size=\"icon\"\n variant={chartConfig.settingsOpen ? 'secondary' : 'ghost'}\n className={cn('h-7 w-7', readOnly && 'hidden')}\n aria-label=\"Chart settings\"\n title=\"Chart settings\"\n aria-pressed={chartConfig.settingsOpen}\n onClick={() => onSettingsOpenChange(!chartConfig.settingsOpen)}\n >\n <Settings2Icon className=\"h-4 w-4\" />\n </Button>\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"ChartBlockHeader.js","sourceRoot":"","sources":["../../../src/charts/worksheet/ChartBlockHeader.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAC,EAAE,EAAC,MAAM,cAAc,CAAC;AAEhC,OAAO,EAAC,iBAAiB,EAAC,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAC,yBAAyB,EAAC,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAC,kBAAkB,EAAC,MAAM,qCAAqC,CAAC;AAavE,MAAM,CAAC,MAAM,gBAAgB,GAA8B,CAAC,EAC1D,OAAO,EACP,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,QAAQ,EACR,aAAa,EACb,MAAM,GACP,EAAE,EAAE;IACH,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;IAE5C,OAAO,CACL,eAAK,SAAS,EAAC,mEAAmE,aAChF,KAAC,kBAAkB,IACjB,KAAK,EAAE,OAAO,IAAI,EAAE,EACpB,WAAW,EAAE,SAAS,IAAI,eAAe,EACzC,UAAU,EAAE,QAAQ,EACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,EAAE,CAAC,KAAK,IAAI,SAAS,CAAC,GAC1D,EAEF,KAAC,iBAAiB,IAChB,QAAQ,EAAE,QAAQ,IAAI,CAAC,aAAa,EACpC,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,GACpB,EAEF,KAAC,yBAAyB,IACxB,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,QAAQ,EAAC,CAAC,EAC5C,cAAc,EAAE,WAAW,CAAC,YAAY,EACxC,gBAAgB,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,GACvE,IACE,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type {DataTable} from '@sqlrooms/db';\nimport type {ChartConfig} from '../chart-types/chart-config';\nimport {cn} from '@sqlrooms/ui';\nimport {FC} from 'react';\nimport {DataTableSelector} from '../../components/DataTableSelector';\nimport {MosaicChartSettingsButton} from '../MosaicChartSettingsButton';\nimport {BlockCaptionEditor} from '../../components/BlockCaptionEditor';\n\nexport type ChartBlockHeaderProps = {\n caption?: string;\n chartConfig: ChartConfig;\n onCaptionChange?: (caption: string | undefined) => void;\n onSettingsOpenChange: (open: boolean) => void;\n onTableChange?: (table: DataTable) => void;\n readOnly?: boolean;\n tables: DataTable[];\n selectedTable: DataTable;\n};\n\nexport const ChartBlockHeader: FC<ChartBlockHeaderProps> = ({\n caption,\n chartConfig,\n onCaptionChange,\n onSettingsOpenChange,\n onTableChange,\n readOnly,\n selectedTable,\n tables,\n}) => {\n const tableName = selectedTable.table.table;\n\n return (\n <div className=\"border-border flex min-h-10 items-center gap-2 border-b px-3 py-2\">\n <BlockCaptionEditor\n value={caption ?? ''}\n placeholder={tableName || 'Chart caption'}\n isReadOnly={readOnly}\n onChange={(value) => onCaptionChange?.(value || undefined)}\n />\n\n <DataTableSelector\n disabled={readOnly || !onTableChange}\n onChange={onTableChange}\n tables={tables}\n value={selectedTable}\n />\n\n <MosaicChartSettingsButton\n className={cn('h-8 w-8', {hidden: readOnly})}\n isSettingsOpen={chartConfig.settingsOpen}\n onToggleSettings={() => onSettingsOpenChange(!chartConfig.settingsOpen)}\n />\n </div>\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ChartBlockRenderer.d.ts","sourceRoot":"","sources":["../../../src/charts/worksheet/ChartBlockRenderer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,+BAA+B,EAAC,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAC,EAAE,EAAc,MAAM,OAAO,CAAC;AA6BtC,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,+BAA+B,CA2FlE,CAAC"}
1
+ {"version":3,"file":"ChartBlockRenderer.d.ts","sourceRoot":"","sources":["../../../src/charts/worksheet/ChartBlockRenderer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,+BAA+B,EAAC,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAC,EAAE,EAAc,MAAM,OAAO,CAAC;AAgBtC,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,+BAA+B,CAmFlE,CAAC"}