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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/README.md +43 -39
  2. package/dist/DataPointLimitError.d.ts +9 -0
  3. package/dist/DataPointLimitError.d.ts.map +1 -0
  4. package/dist/DataPointLimitError.js +14 -0
  5. package/dist/DataPointLimitError.js.map +1 -0
  6. package/dist/MosaicSlice.d.ts.map +1 -1
  7. package/dist/MosaicSlice.js +3 -3
  8. package/dist/MosaicSlice.js.map +1 -1
  9. package/dist/VgPlotChart.d.ts +8 -11
  10. package/dist/VgPlotChart.d.ts.map +1 -1
  11. package/dist/VgPlotChart.js +74 -90
  12. package/dist/VgPlotChart.js.map +1 -1
  13. package/dist/VgPlotChartError.d.ts +7 -0
  14. package/dist/VgPlotChartError.d.ts.map +1 -0
  15. package/dist/VgPlotChartError.js +9 -0
  16. package/dist/VgPlotChartError.js.map +1 -0
  17. package/dist/ai.d.ts +103 -0
  18. package/dist/ai.d.ts.map +1 -0
  19. package/dist/ai.js +445 -0
  20. package/dist/ai.js.map +1 -0
  21. package/dist/boxplot/BoxPlotClient.d.ts +7 -0
  22. package/dist/boxplot/BoxPlotClient.d.ts.map +1 -1
  23. package/dist/boxplot/BoxPlotClient.js +22 -0
  24. package/dist/boxplot/BoxPlotClient.js.map +1 -1
  25. package/dist/chart/ChartRuntimeIssuePanel.d.ts +7 -0
  26. package/dist/chart/ChartRuntimeIssuePanel.d.ts.map +1 -0
  27. package/dist/chart/ChartRuntimeIssuePanel.js +10 -0
  28. package/dist/chart/ChartRuntimeIssuePanel.js.map +1 -0
  29. package/dist/chart/MosaicDashboardChart.d.ts +1 -1
  30. package/dist/chart/MosaicDashboardChart.d.ts.map +1 -1
  31. package/dist/chart/MosaicDashboardChart.js +1 -1
  32. package/dist/chart/MosaicDashboardChart.js.map +1 -1
  33. package/dist/chart/MosaicDashboardChartContent.d.ts +1 -1
  34. package/dist/chart/MosaicDashboardChartContent.d.ts.map +1 -1
  35. package/dist/chart/MosaicDashboardChartContent.js +29 -2
  36. package/dist/chart/MosaicDashboardChartContent.js.map +1 -1
  37. package/dist/chart/MosaicDashboardChartRenderer.d.ts +2 -1
  38. package/dist/chart/MosaicDashboardChartRenderer.d.ts.map +1 -1
  39. package/dist/chart/MosaicDashboardChartRenderer.js +2 -2
  40. package/dist/chart/MosaicDashboardChartRenderer.js.map +1 -1
  41. package/dist/chart/MosaicDashboardComponentChart.d.ts +5 -1
  42. package/dist/chart/MosaicDashboardComponentChart.d.ts.map +1 -1
  43. package/dist/chart/MosaicDashboardComponentChart.js +4 -1
  44. package/dist/chart/MosaicDashboardComponentChart.js.map +1 -1
  45. package/dist/chart/MosaicDashboardVgPlotChart.d.ts +4 -0
  46. package/dist/chart/MosaicDashboardVgPlotChart.d.ts.map +1 -1
  47. package/dist/chart/MosaicDashboardVgPlotChart.js +2 -2
  48. package/dist/chart/MosaicDashboardVgPlotChart.js.map +1 -1
  49. package/dist/chart/addChartPanelAction.d.ts +3 -0
  50. package/dist/chart/addChartPanelAction.d.ts.map +1 -0
  51. package/dist/chart/addChartPanelAction.js +14 -0
  52. package/dist/chart/addChartPanelAction.js.map +1 -0
  53. package/dist/chart/chart-settings/ChartSettings.d.ts.map +1 -1
  54. package/dist/chart/chart-settings/ChartSettings.js +7 -4
  55. package/dist/chart/chart-settings/ChartSettings.js.map +1 -1
  56. package/dist/chart/chart-settings/ChartSettingsContent.d.ts +1 -1
  57. package/dist/chart/chart-settings/ChartSettingsContent.d.ts.map +1 -1
  58. package/dist/chart/chart-settings/ChartSettingsContent.js.map +1 -1
  59. package/dist/chart/chart-settings/ChartSettingsContext.d.ts +0 -2
  60. package/dist/chart/chart-settings/ChartSettingsContext.d.ts.map +1 -1
  61. package/dist/chart/chart-settings/ChartSettingsContext.js +6 -7
  62. package/dist/chart/chart-settings/ChartSettingsContext.js.map +1 -1
  63. package/dist/chart/chart-settings/ChartSettingsPanel.d.ts +1 -1
  64. package/dist/chart/chart-settings/ChartSettingsPanel.d.ts.map +1 -1
  65. package/dist/chart/chart-settings/ChartSettingsPanel.js +1 -1
  66. package/dist/chart/chart-settings/ChartSettingsPanel.js.map +1 -1
  67. package/dist/chart/chart-settings/ChartTypeSelector.d.ts.map +1 -1
  68. package/dist/chart/chart-settings/ChartTypeSelector.js +5 -5
  69. package/dist/chart/chart-settings/ChartTypeSelector.js.map +1 -1
  70. package/dist/chart-builders/ColumnSelector.d.ts +0 -2
  71. package/dist/chart-builders/ColumnSelector.d.ts.map +1 -1
  72. package/dist/chart-builders/ColumnSelector.js +4 -5
  73. package/dist/chart-builders/ColumnSelector.js.map +1 -1
  74. package/dist/chart-builders/ColumnsContext.d.ts +13 -0
  75. package/dist/chart-builders/ColumnsContext.d.ts.map +1 -0
  76. package/dist/chart-builders/ColumnsContext.js +15 -0
  77. package/dist/chart-builders/ColumnsContext.js.map +1 -0
  78. package/dist/chart-builders/MultiFieldSelector.js +4 -4
  79. package/dist/chart-builders/MultiFieldSelector.js.map +1 -1
  80. package/dist/chart-builders/TableSelector.d.ts +14 -0
  81. package/dist/chart-builders/TableSelector.d.ts.map +1 -0
  82. package/dist/chart-builders/TableSelector.js +23 -0
  83. package/dist/chart-builders/TableSelector.js.map +1 -0
  84. package/dist/chart-runtime.d.ts +50 -0
  85. package/dist/chart-runtime.d.ts.map +1 -0
  86. package/dist/chart-runtime.js +76 -0
  87. package/dist/chart-runtime.js.map +1 -0
  88. package/dist/chart-types/base-types.d.ts +45 -25
  89. package/dist/chart-types/base-types.d.ts.map +1 -1
  90. package/dist/chart-types/base-types.js.map +1 -1
  91. package/dist/chart-types/box-plot/definition.d.ts.map +1 -1
  92. package/dist/chart-types/box-plot/definition.js +5 -0
  93. package/dist/chart-types/box-plot/definition.js.map +1 -1
  94. package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.d.ts.map +1 -1
  95. package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.js +4 -1
  96. package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.js.map +1 -1
  97. package/dist/chart-types/box-plot/renderer/useBoxPlotClient.d.ts +4 -0
  98. package/dist/chart-types/box-plot/renderer/useBoxPlotClient.d.ts.map +1 -1
  99. package/dist/chart-types/box-plot/renderer/useBoxPlotClient.js +13 -2
  100. package/dist/chart-types/box-plot/renderer/useBoxPlotClient.js.map +1 -1
  101. package/dist/chart-types/box-plot/schema.d.ts +5 -0
  102. package/dist/chart-types/box-plot/schema.d.ts.map +1 -1
  103. package/dist/chart-types/box-plot/schema.js +2 -0
  104. package/dist/chart-types/box-plot/schema.js.map +1 -1
  105. package/dist/chart-types/box-plot/tool.d.ts +5 -9
  106. package/dist/chart-types/box-plot/tool.d.ts.map +1 -1
  107. package/dist/chart-types/box-plot/tool.js +14 -6
  108. package/dist/chart-types/box-plot/tool.js.map +1 -1
  109. package/dist/chart-types/bubble-chart/definition.d.ts.map +1 -1
  110. package/dist/chart-types/bubble-chart/definition.js +5 -0
  111. package/dist/chart-types/bubble-chart/definition.js.map +1 -1
  112. package/dist/chart-types/bubble-chart/schema.d.ts +5 -0
  113. package/dist/chart-types/bubble-chart/schema.d.ts.map +1 -1
  114. package/dist/chart-types/bubble-chart/schema.js +2 -0
  115. package/dist/chart-types/bubble-chart/schema.js.map +1 -1
  116. package/dist/chart-types/bubble-chart/tool.d.ts +5 -9
  117. package/dist/chart-types/bubble-chart/tool.d.ts.map +1 -1
  118. package/dist/chart-types/bubble-chart/tool.js +17 -9
  119. package/dist/chart-types/bubble-chart/tool.js.map +1 -1
  120. package/dist/chart-types/chart-config.d.ts +46 -0
  121. package/dist/chart-types/chart-config.d.ts.map +1 -1
  122. package/dist/chart-types/chart-config.js +2 -0
  123. package/dist/chart-types/chart-config.js.map +1 -1
  124. package/dist/chart-types/count-plot/schema.d.ts +5 -0
  125. package/dist/chart-types/count-plot/schema.d.ts.map +1 -1
  126. package/dist/chart-types/count-plot/schema.js +2 -0
  127. package/dist/chart-types/count-plot/schema.js.map +1 -1
  128. package/dist/chart-types/count-plot/tool.d.ts +5 -9
  129. package/dist/chart-types/count-plot/tool.d.ts.map +1 -1
  130. package/dist/chart-types/count-plot/tool.js +14 -6
  131. package/dist/chart-types/count-plot/tool.js.map +1 -1
  132. package/dist/chart-types/custom-spec/definition.d.ts.map +1 -1
  133. package/dist/chart-types/custom-spec/definition.js +5 -0
  134. package/dist/chart-types/custom-spec/definition.js.map +1 -1
  135. package/dist/chart-types/custom-spec/schema.d.ts +5 -0
  136. package/dist/chart-types/custom-spec/schema.d.ts.map +1 -1
  137. package/dist/chart-types/custom-spec/schema.js +2 -0
  138. package/dist/chart-types/custom-spec/schema.js.map +1 -1
  139. package/dist/chart-types/data-policy-schema.d.ts +8 -0
  140. package/dist/chart-types/data-policy-schema.d.ts.map +1 -0
  141. package/dist/chart-types/data-policy-schema.js +7 -0
  142. package/dist/chart-types/data-policy-schema.js.map +1 -0
  143. package/dist/chart-types/heatmap/schema.d.ts +5 -0
  144. package/dist/chart-types/heatmap/schema.d.ts.map +1 -1
  145. package/dist/chart-types/heatmap/schema.js +2 -0
  146. package/dist/chart-types/heatmap/schema.js.map +1 -1
  147. package/dist/chart-types/heatmap/tool.d.ts +5 -9
  148. package/dist/chart-types/heatmap/tool.d.ts.map +1 -1
  149. package/dist/chart-types/heatmap/tool.js +16 -8
  150. package/dist/chart-types/heatmap/tool.js.map +1 -1
  151. package/dist/chart-types/histogram/HistogramSettings.d.ts.map +1 -1
  152. package/dist/chart-types/histogram/HistogramSettings.js +4 -2
  153. package/dist/chart-types/histogram/HistogramSettings.js.map +1 -1
  154. package/dist/chart-types/histogram/schema.d.ts +10 -0
  155. package/dist/chart-types/histogram/schema.d.ts.map +1 -1
  156. package/dist/chart-types/histogram/schema.js +13 -0
  157. package/dist/chart-types/histogram/schema.js.map +1 -1
  158. package/dist/chart-types/histogram/spec.d.ts +1 -1
  159. package/dist/chart-types/histogram/spec.d.ts.map +1 -1
  160. package/dist/chart-types/histogram/spec.js +4 -3
  161. package/dist/chart-types/histogram/spec.js.map +1 -1
  162. package/dist/chart-types/histogram/tool.d.ts +7 -9
  163. package/dist/chart-types/histogram/tool.d.ts.map +1 -1
  164. package/dist/chart-types/histogram/tool.js +17 -7
  165. package/dist/chart-types/histogram/tool.js.map +1 -1
  166. package/dist/chart-types/index.d.ts +45 -3
  167. package/dist/chart-types/index.d.ts.map +1 -1
  168. package/dist/chart-types/index.js +8 -2
  169. package/dist/chart-types/index.js.map +1 -1
  170. package/dist/chart-types/line-chart/LineChartSettings.d.ts.map +1 -1
  171. package/dist/chart-types/line-chart/LineChartSettings.js +3 -1
  172. package/dist/chart-types/line-chart/LineChartSettings.js.map +1 -1
  173. package/dist/chart-types/line-chart/definition.d.ts.map +1 -1
  174. package/dist/chart-types/line-chart/definition.js +7 -0
  175. package/dist/chart-types/line-chart/definition.js.map +1 -1
  176. package/dist/chart-types/line-chart/schema.d.ts +5 -0
  177. package/dist/chart-types/line-chart/schema.d.ts.map +1 -1
  178. package/dist/chart-types/line-chart/schema.js +2 -0
  179. package/dist/chart-types/line-chart/schema.js.map +1 -1
  180. package/dist/chart-types/line-chart/tool.d.ts +5 -9
  181. package/dist/chart-types/line-chart/tool.d.ts.map +1 -1
  182. package/dist/chart-types/line-chart/tool.js +16 -8
  183. package/dist/chart-types/line-chart/tool.js.map +1 -1
  184. package/dist/chart-types/list-panels-tool.d.ts +35 -0
  185. package/dist/chart-types/list-panels-tool.d.ts.map +1 -0
  186. package/dist/chart-types/list-panels-tool.js +66 -0
  187. package/dist/chart-types/list-panels-tool.js.map +1 -0
  188. package/dist/chart-types/profiler-tool.d.ts +40 -0
  189. package/dist/chart-types/profiler-tool.d.ts.map +1 -0
  190. package/dist/chart-types/profiler-tool.js +73 -0
  191. package/dist/chart-types/profiler-tool.js.map +1 -0
  192. package/dist/chart-types/remove-panel-tool.d.ts +31 -0
  193. package/dist/chart-types/remove-panel-tool.d.ts.map +1 -0
  194. package/dist/chart-types/remove-panel-tool.js +55 -0
  195. package/dist/chart-types/remove-panel-tool.js.map +1 -0
  196. package/dist/chart-types/text-panel-tool.d.ts +42 -0
  197. package/dist/chart-types/text-panel-tool.d.ts.map +1 -0
  198. package/dist/chart-types/text-panel-tool.js +71 -0
  199. package/dist/chart-types/text-panel-tool.js.map +1 -0
  200. package/dist/chart-types/tool-helpers.d.ts +44 -0
  201. package/dist/chart-types/tool-helpers.d.ts.map +1 -0
  202. package/dist/chart-types/tool-helpers.js +129 -0
  203. package/dist/chart-types/tool-helpers.js.map +1 -0
  204. package/dist/chart-types/tool-schemas.d.ts +1 -0
  205. package/dist/chart-types/tool-schemas.d.ts.map +1 -1
  206. package/dist/chart-types/tool-schemas.js +5 -1
  207. package/dist/chart-types/tool-schemas.js.map +1 -1
  208. package/dist/dashboard/MosaicDashboard.d.ts +5 -2
  209. package/dist/dashboard/MosaicDashboard.d.ts.map +1 -1
  210. package/dist/dashboard/MosaicDashboard.js +20 -39
  211. package/dist/dashboard/MosaicDashboard.js.map +1 -1
  212. package/dist/dashboard/MosaicDashboardContext.d.ts +2 -0
  213. package/dist/dashboard/MosaicDashboardContext.d.ts.map +1 -1
  214. package/dist/dashboard/MosaicDashboardContext.js.map +1 -1
  215. package/dist/dashboard/MosaicDashboardEmptyState.d.ts.map +1 -1
  216. package/dist/dashboard/MosaicDashboardEmptyState.js +8 -44
  217. package/dist/dashboard/MosaicDashboardEmptyState.js.map +1 -1
  218. package/dist/dashboard/MosaicDashboardPanel.d.ts.map +1 -1
  219. package/dist/dashboard/MosaicDashboardPanel.js +2 -5
  220. package/dist/dashboard/MosaicDashboardPanel.js.map +1 -1
  221. package/dist/dashboard/MosaicDashboardPanelHeader.d.ts +2 -2
  222. package/dist/dashboard/MosaicDashboardPanelHeader.d.ts.map +1 -1
  223. package/dist/dashboard/MosaicDashboardPanelHeader.js +2 -2
  224. package/dist/dashboard/MosaicDashboardPanelHeader.js.map +1 -1
  225. package/dist/dashboard/MosaicDashboardPanels.d.ts.map +1 -1
  226. package/dist/dashboard/MosaicDashboardPanels.js +3 -2
  227. package/dist/dashboard/MosaicDashboardPanels.js.map +1 -1
  228. package/dist/dashboard/MosaicDashboardSlice.d.ts +185 -107
  229. package/dist/dashboard/MosaicDashboardSlice.d.ts.map +1 -1
  230. package/dist/dashboard/MosaicDashboardSlice.js +80 -57
  231. package/dist/dashboard/MosaicDashboardSlice.js.map +1 -1
  232. package/dist/dashboard/action-types.d.ts +25 -0
  233. package/dist/dashboard/action-types.d.ts.map +1 -0
  234. package/dist/dashboard/action-types.js +5 -0
  235. package/dist/dashboard/action-types.js.map +1 -0
  236. package/dist/dashboard/core-types.d.ts +26 -0
  237. package/dist/dashboard/core-types.d.ts.map +1 -0
  238. package/dist/dashboard/core-types.js +21 -0
  239. package/dist/dashboard/core-types.js.map +1 -0
  240. package/dist/dashboard/dashboard-types.d.ts +491 -0
  241. package/dist/dashboard/dashboard-types.d.ts.map +1 -0
  242. package/dist/dashboard/dashboard-types.js +54 -0
  243. package/dist/dashboard/dashboard-types.js.map +1 -0
  244. package/dist/dashboard/defaultPanelActions.d.ts +3 -0
  245. package/dist/dashboard/defaultPanelActions.d.ts.map +1 -0
  246. package/dist/dashboard/defaultPanelActions.js +9 -0
  247. package/dist/dashboard/defaultPanelActions.js.map +1 -0
  248. package/dist/dashboard/defaultPanelRenderers.d.ts.map +1 -1
  249. package/dist/dashboard/defaultPanelRenderers.js +1 -1
  250. package/dist/dashboard/defaultPanelRenderers.js.map +1 -1
  251. package/dist/dashboard/initial-state/BuildDashboardManuallyPanel.d.ts +6 -0
  252. package/dist/dashboard/initial-state/BuildDashboardManuallyPanel.d.ts.map +1 -0
  253. package/dist/dashboard/initial-state/BuildDashboardManuallyPanel.js +46 -0
  254. package/dist/dashboard/initial-state/BuildDashboardManuallyPanel.js.map +1 -0
  255. package/dist/dashboard/initial-state/BuildDashboardWithAIPanel.d.ts +7 -0
  256. package/dist/dashboard/initial-state/BuildDashboardWithAIPanel.d.ts.map +1 -0
  257. package/dist/dashboard/initial-state/BuildDashboardWithAIPanel.js +29 -0
  258. package/dist/dashboard/initial-state/BuildDashboardWithAIPanel.js.map +1 -0
  259. package/dist/dashboard/initial-state/MosaicDashboardInitialState.d.ts +6 -0
  260. package/dist/dashboard/initial-state/MosaicDashboardInitialState.d.ts.map +1 -0
  261. package/dist/dashboard/initial-state/MosaicDashboardInitialState.js +9 -0
  262. package/dist/dashboard/initial-state/MosaicDashboardInitialState.js.map +1 -0
  263. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.d.ts +7 -0
  264. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.d.ts.map +1 -0
  265. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.js +12 -0
  266. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.js.map +1 -0
  267. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.d.ts +7 -0
  268. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.d.ts.map +1 -0
  269. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.js +36 -0
  270. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.js.map +1 -0
  271. package/dist/dashboard/toolbar/MosaicDashboardToolbar.d.ts.map +1 -0
  272. package/dist/dashboard/toolbar/MosaicDashboardToolbar.js +15 -0
  273. package/dist/dashboard/toolbar/MosaicDashboardToolbar.js.map +1 -0
  274. package/dist/dashboard/useAddPanelActions.d.ts +10 -0
  275. package/dist/dashboard/useAddPanelActions.d.ts.map +1 -0
  276. package/dist/dashboard/useAddPanelActions.js +26 -0
  277. package/dist/dashboard/useAddPanelActions.js.map +1 -0
  278. package/dist/dashboard/useMosaicDashboardAddPanelActionContext.d.ts +3 -0
  279. package/dist/dashboard/useMosaicDashboardAddPanelActionContext.d.ts.map +1 -0
  280. package/dist/dashboard/useMosaicDashboardAddPanelActionContext.js +18 -0
  281. package/dist/dashboard/useMosaicDashboardAddPanelActionContext.js.map +1 -0
  282. package/dist/dashboard/useSelectedOrFirstTable.d.ts +10 -0
  283. package/dist/dashboard/useSelectedOrFirstTable.d.ts.map +1 -0
  284. package/dist/dashboard/useSelectedOrFirstTable.js +25 -0
  285. package/dist/dashboard/useSelectedOrFirstTable.js.map +1 -0
  286. package/dist/dashboard/useTablesWithColumns.d.ts +9 -0
  287. package/dist/dashboard/useTablesWithColumns.d.ts.map +1 -0
  288. package/dist/dashboard/useTablesWithColumns.js +13 -0
  289. package/dist/dashboard/useTablesWithColumns.js.map +1 -0
  290. package/dist/index.d.ts +25 -4
  291. package/dist/index.d.ts.map +1 -1
  292. package/dist/index.js +22 -2
  293. package/dist/index.js.map +1 -1
  294. package/dist/profiler/MosaicDashboardProfilerPanelRenderer.d.ts +2 -1
  295. package/dist/profiler/MosaicDashboardProfilerPanelRenderer.d.ts.map +1 -1
  296. package/dist/profiler/MosaicDashboardProfilerPanelRenderer.js +3 -3
  297. package/dist/profiler/MosaicDashboardProfilerPanelRenderer.js.map +1 -1
  298. package/dist/profiler/addProfilerPanelAction.d.ts +3 -0
  299. package/dist/profiler/addProfilerPanelAction.d.ts.map +1 -0
  300. package/dist/profiler/addProfilerPanelAction.js +9 -0
  301. package/dist/profiler/addProfilerPanelAction.js.map +1 -0
  302. package/dist/text/MosaicDashboardTextRenderer.d.ts +2 -1
  303. package/dist/text/MosaicDashboardTextRenderer.d.ts.map +1 -1
  304. package/dist/text/MosaicDashboardTextRenderer.js +4 -4
  305. package/dist/text/MosaicDashboardTextRenderer.js.map +1 -1
  306. package/dist/text/addTextPanelAction.d.ts +3 -0
  307. package/dist/text/addTextPanelAction.d.ts.map +1 -0
  308. package/dist/text/addTextPanelAction.js +9 -0
  309. package/dist/text/addTextPanelAction.js.map +1 -0
  310. package/dist/useMosaicClient.d.ts +4 -0
  311. package/dist/useMosaicClient.d.ts.map +1 -1
  312. package/dist/useMosaicClient.js +33 -3
  313. package/dist/useMosaicClient.js.map +1 -1
  314. package/dist/useVgPlotChartError.d.ts +13 -0
  315. package/dist/useVgPlotChartError.d.ts.map +1 -0
  316. package/dist/useVgPlotChartError.js +18 -0
  317. package/dist/useVgPlotChartError.js.map +1 -0
  318. package/dist/useVgPlotChartRender.d.ts +24 -0
  319. package/dist/useVgPlotChartRender.d.ts.map +1 -0
  320. package/dist/useVgPlotChartRender.js +152 -0
  321. package/dist/useVgPlotChartRender.js.map +1 -0
  322. package/dist/useVgPlotChartRetention.d.ts +21 -0
  323. package/dist/useVgPlotChartRetention.d.ts.map +1 -0
  324. package/dist/useVgPlotChartRetention.js +63 -0
  325. package/dist/useVgPlotChartRetention.js.map +1 -0
  326. package/dist/wrapCoordinatorWithValidation.d.ts +11 -0
  327. package/dist/wrapCoordinatorWithValidation.d.ts.map +1 -0
  328. package/dist/wrapCoordinatorWithValidation.js +23 -0
  329. package/dist/wrapCoordinatorWithValidation.js.map +1 -0
  330. package/package.json +31 -13
  331. package/dist/dashboard/MosaicDashboardToolbar.d.ts.map +0 -1
  332. package/dist/dashboard/MosaicDashboardToolbar.js +0 -86
  333. package/dist/dashboard/MosaicDashboardToolbar.js.map +0 -1
  334. /package/dist/dashboard/{MosaicDashboardToolbar.d.ts → toolbar/MosaicDashboardToolbar.d.ts} +0 -0
@@ -1 +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"]}
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;AAiB3C,MAAM,CAAC,MAAM,0BAA0B,GAEnC,CAAC,EACH,IAAI,EACJ,SAAS,EACT,MAAM,EACN,UAAU,EACV,mBAAmB,EACnB,oBAAoB,GACrB,EAAE,EAAE;IACH,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,CACL,KAAC,WAAW,IACV,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,mBAAmB,EAAE,mBAAmB,EACxC,oBAAoB,EAAE,oBAAoB,GAC1C,CACH,CAAC;AACJ,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';\nimport type {\n ChartDataPolicy,\n ChartRuntimeIssueContext,\n ChartRuntimeIssueReporter,\n} from '../chart-runtime';\n\nexport type MosaicDashboardVgPlotChartProps = {\n spec: UseGenerateSpecResult;\n retention: ChartRetainer;\n params: BrushSelectionParams | undefined;\n dataPolicy?: ChartDataPolicy | null;\n runtimeIssueContext: ChartRuntimeIssueContext;\n runtimeIssueReporter: ChartRuntimeIssueReporter;\n};\n\nexport const MosaicDashboardVgPlotChart: FC<\n MosaicDashboardVgPlotChartProps\n> = ({\n spec,\n retention,\n params,\n dataPolicy,\n runtimeIssueContext,\n runtimeIssueReporter,\n}) => {\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 (\n <VgPlotChart\n spec={spec.spec}\n params={params}\n retention={retention}\n dataPolicy={dataPolicy}\n runtimeIssueContext={runtimeIssueContext}\n runtimeIssueReporter={runtimeIssueReporter}\n />\n );\n};\n"]}
@@ -0,0 +1,3 @@
1
+ import { type MosaicDashboardAddPanelAction } from '../dashboard/action-types';
2
+ export declare const addChartPanelAction: MosaicDashboardAddPanelAction;
3
+ //# sourceMappingURL=addChartPanelAction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addChartPanelAction.d.ts","sourceRoot":"","sources":["../../src/chart/addChartPanelAction.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,6BAA6B,EAAC,MAAM,2BAA2B,CAAC;AAM7E,eAAO,MAAM,mBAAmB,EAAE,6BAWjC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { BarChart3 } from 'lucide-react';
2
+ import { createMosaicDashboardChartPanelConfig, MOSAIC_DASHBOARD_CHART_PANEL_TYPE, } from '../dashboard/MosaicDashboardSlice';
3
+ export const addChartPanelAction = {
4
+ type: MOSAIC_DASHBOARD_CHART_PANEL_TYPE,
5
+ label: 'Chart',
6
+ icon: BarChart3,
7
+ isEnabled: ({ chartTypes }) => Boolean(chartTypes?.length),
8
+ createPanel: ({ chartTypes }) => createMosaicDashboardChartPanelConfig('New Chart', {
9
+ chartType: chartTypes?.[0]?.id ?? 'histogram',
10
+ settings: {},
11
+ settingsOpen: true,
12
+ }),
13
+ };
14
+ //# sourceMappingURL=addChartPanelAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addChartPanelAction.js","sourceRoot":"","sources":["../../src/chart/addChartPanelAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAEvC,OAAO,EACL,qCAAqC,EACrC,iCAAiC,GAClC,MAAM,mCAAmC,CAAC;AAE3C,MAAM,CAAC,MAAM,mBAAmB,GAAkC;IAChE,IAAI,EAAE,iCAAiC;IACvC,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,CAAC,EAAC,UAAU,EAAC,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC;IACxD,WAAW,EAAE,CAAC,EAAC,UAAU,EAAC,EAAE,EAAE,CAC5B,qCAAqC,CAAC,WAAW,EAAE;QACjD,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,WAAW;QAC7C,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,IAAI;KACnB,CAAC;CACL,CAAC","sourcesContent":["import {BarChart3} from 'lucide-react';\nimport {type MosaicDashboardAddPanelAction} from '../dashboard/action-types';\nimport {\n createMosaicDashboardChartPanelConfig,\n MOSAIC_DASHBOARD_CHART_PANEL_TYPE,\n} from '../dashboard/MosaicDashboardSlice';\n\nexport const addChartPanelAction: MosaicDashboardAddPanelAction = {\n type: MOSAIC_DASHBOARD_CHART_PANEL_TYPE,\n label: 'Chart',\n icon: BarChart3,\n isEnabled: ({chartTypes}) => Boolean(chartTypes?.length),\n createPanel: ({chartTypes}) =>\n createMosaicDashboardChartPanelConfig('New Chart', {\n chartType: chartTypes?.[0]?.id ?? 'histogram',\n settings: {},\n settingsOpen: true,\n }),\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ChartSettings.d.ts","sourceRoot":"","sources":["../../../src/chart/chart-settings/ChartSettings.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAC,KAAK,EAAE,EAAE,KAAK,iBAAiB,EAAgB,MAAM,OAAO,CAAC;AAMrE,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAC,KAAK,WAAW,EAAiB,MAAM,mBAAmB,CAAC;AAKnE,UAAU,sBAAsB;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;CACzC;AAyGD,eAAO,MAAM,aAAa;;;;;;;;;;;kBApFuB,MAAM,IAAI;;;iBAed,MAAM,IAAI;;CA6EtD,CAAC"}
1
+ {"version":3,"file":"ChartSettings.d.ts","sourceRoot":"","sources":["../../../src/chart/chart-settings/ChartSettings.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAC,KAAK,EAAE,EAAE,KAAK,iBAAiB,EAAgB,MAAM,OAAO,CAAC;AAMrE,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAC,KAAK,WAAW,EAAiB,MAAM,mBAAmB,CAAC;AAOnE,UAAU,sBAAsB;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;CACzC;AAiHD,eAAO,MAAM,aAAa;;;;;;;;;;;kBA5FuB,MAAM,IAAI;;;iBAed,MAAM,IAAI;;CAqFtD,CAAC"}
@@ -21,6 +21,8 @@ import { ChartSettingsProvider, useChartSettingsContext, } from './ChartSettings
21
21
  import { Button } from '@sqlrooms/ui';
22
22
  import { CodeIcon, XIcon } from 'lucide-react';
23
23
  import { useChartTypeDefinition } from '../../chart-types/useChartTypeDefinition';
24
+ import { Field } from '../../chart-builders/Field';
25
+ import { useColumnsContext } from '../../chart-builders/ColumnsContext';
24
26
  const ChartSettingsRoot = ({ tableName, config, columns, onChange, children, }) => {
25
27
  return (_jsx(ChartSettingsProvider, { tableName: tableName, config: config, columns: columns, onChange: onChange, children: children }));
26
28
  };
@@ -46,16 +48,17 @@ const ChartSettingsTypeSelector = () => {
46
48
  settingsOpen: config.settingsOpen,
47
49
  });
48
50
  };
49
- return (_jsx(ChartTypeSelector, { value: config.chartType, onChange: handleChartTypeChange }));
51
+ return (_jsx(Field, { label: "Chart type", required: true, children: _jsx(ChartTypeSelector, { value: config.chartType, onChange: handleChartTypeChange }) }));
50
52
  };
51
53
  const ChartSettingsFields = () => {
52
- const { config, columns } = useChartSettingsContext();
54
+ const { config } = useChartSettingsContext();
55
+ const { columns } = useColumnsContext();
53
56
  const chartTypeDef = useChartTypeDefinition(config.chartType);
54
57
  if (!chartTypeDef) {
55
- return (_jsxs("div", { className: "text-muted-foreground flex h-full items-center justify-center p-4 text-sm", children: ["Unknown chart type: ", config.chartType] }));
58
+ return (_jsx(Field, { label: "Chart type", required: true, children: _jsxs("div", { className: "text-muted-foreground flex h-full items-center justify-center p-4 text-sm", children: ["Unknown chart type: ", config.chartType] }) }));
56
59
  }
57
60
  if (columns.length === 0) {
58
- return (_jsx("div", { className: "text-muted-foreground flex h-full items-center justify-center p-4 text-sm", children: "No columns available" }));
61
+ return (_jsx(Field, { label: "Columns", required: true, children: _jsx("div", { className: "text-muted-foreground flex h-full items-center justify-center p-4 text-sm", children: "No columns available" }) }));
59
62
  }
60
63
  return createElement(chartTypeDef.settingsComponent);
61
64
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ChartSettings.js","sourceRoot":"","sources":["../../../src/chart/chart-settings/ChartSettings.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Chart settings compound component for configuring chart types and their parameters.\n *\n * @example\n * ```tsx\n * <ChartSettings.Root\n * tableName={tableName}\n * config={config}\n * columns={columns}\n * onChange={handleChange}\n * >\n * <ChartSettings.TypeSelector />\n * <ChartSettings.Fields />\n * </ChartSettings.Root>\n * ```\n */\nimport {type FC, type PropsWithChildren, createElement} from 'react';\nimport {ChartTypeSelector} from './ChartTypeSelector';\nimport {\n ChartSettingsProvider,\n useChartSettingsContext,\n} from './ChartSettingsContext';\nimport type {TableColumn} from '@sqlrooms/duckdb';\nimport {type ChartConfig, type ChartType} from '../../chart-types';\nimport {Button} from '@sqlrooms/ui';\nimport {CodeIcon, XIcon} from 'lucide-react';\nimport {useChartTypeDefinition} from '../../chart-types/useChartTypeDefinition';\n\ninterface ChartSettingsRootProps {\n tableName?: string;\n config: ChartConfig;\n columns: TableColumn[];\n onChange: (config: ChartConfig) => void;\n}\n\nconst ChartSettingsRoot: FC<PropsWithChildren<ChartSettingsRootProps>> = ({\n tableName,\n config,\n columns,\n onChange,\n children,\n}) => {\n return (\n <ChartSettingsProvider\n tableName={tableName}\n config={config}\n columns={columns}\n onChange={onChange}\n >\n {children}\n </ChartSettingsProvider>\n );\n};\n\nconst ChartSettingsViewSpecButton: FC<{onClick?: () => void}> = ({onClick}) => {\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-5 w-5\"\n onClick={onClick}\n title=\"View spec\"\n aria-label=\"View spec\"\n >\n <CodeIcon className=\"h-3.5 w-3.5\" />\n </Button>\n );\n};\n\nconst ChartSettingsCloseButton: FC<{onClick: () => void}> = ({onClick}) => {\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-5 w-5\"\n onClick={onClick}\n aria-label=\"Close\"\n >\n <XIcon className=\"h-3.5 w-3.5\" />\n </Button>\n );\n};\n\nconst ChartSettingsHeader: FC<PropsWithChildren> = ({children}) => {\n return (\n <div className=\"flex items-center justify-between border-b px-3 py-1.5 text-xs font-medium\">\n {children}\n </div>\n );\n};\n\nconst ChartSettingsContent: FC<PropsWithChildren> = ({children}) => {\n return <div className=\"flex flex-col gap-2 p-2\">{children}</div>;\n};\n\nconst ChartSettingsTypeSelector: FC = () => {\n const {config, onChange} = useChartSettingsContext();\n\n const handleChartTypeChange = (newChartType: ChartType) => {\n // When changing chart type, clear settings\n onChange({\n chartType: newChartType,\n settings: {},\n settingsOpen: config.settingsOpen,\n });\n };\n\n return (\n <ChartTypeSelector\n value={config.chartType}\n onChange={handleChartTypeChange}\n />\n );\n};\n\nconst ChartSettingsFields: FC = () => {\n const {config, columns} = useChartSettingsContext();\n const chartTypeDef = useChartTypeDefinition(config.chartType);\n\n if (!chartTypeDef) {\n return (\n <div className=\"text-muted-foreground flex h-full items-center justify-center p-4 text-sm\">\n Unknown chart type: {config.chartType}\n </div>\n );\n }\n\n if (columns.length === 0) {\n return (\n <div className=\"text-muted-foreground flex h-full items-center justify-center p-4 text-sm\">\n No columns available\n </div>\n );\n }\n\n return createElement(chartTypeDef.settingsComponent);\n};\n\nexport const ChartSettings = {\n Root: ChartSettingsRoot,\n Header: ChartSettingsHeader,\n Content: ChartSettingsContent,\n TypeSelector: ChartSettingsTypeSelector,\n Fields: ChartSettingsFields,\n ViewSpecButton: ChartSettingsViewSpecButton,\n CloseButton: ChartSettingsCloseButton,\n};\n"]}
1
+ {"version":3,"file":"ChartSettings.js","sourceRoot":"","sources":["../../../src/chart/chart-settings/ChartSettings.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Chart settings compound component for configuring chart types and their parameters.\n *\n * @example\n * ```tsx\n * <ChartSettings.Root\n * tableName={tableName}\n * config={config}\n * columns={columns}\n * onChange={handleChange}\n * >\n * <ChartSettings.TypeSelector />\n * <ChartSettings.Fields />\n * </ChartSettings.Root>\n * ```\n */\nimport {type FC, type PropsWithChildren, createElement} from 'react';\nimport {ChartTypeSelector} from './ChartTypeSelector';\nimport {\n ChartSettingsProvider,\n useChartSettingsContext,\n} from './ChartSettingsContext';\nimport type {TableColumn} from '@sqlrooms/duckdb';\nimport {type ChartConfig, type ChartType} from '../../chart-types';\nimport {Button} from '@sqlrooms/ui';\nimport {CodeIcon, XIcon} from 'lucide-react';\nimport {useChartTypeDefinition} from '../../chart-types/useChartTypeDefinition';\nimport {Field} from '../../chart-builders/Field';\nimport {useColumnsContext} from '../../chart-builders/ColumnsContext';\n\ninterface ChartSettingsRootProps {\n tableName?: string;\n config: ChartConfig;\n columns: TableColumn[];\n onChange: (config: ChartConfig) => void;\n}\n\nconst ChartSettingsRoot: FC<PropsWithChildren<ChartSettingsRootProps>> = ({\n tableName,\n config,\n columns,\n onChange,\n children,\n}) => {\n return (\n <ChartSettingsProvider\n tableName={tableName}\n config={config}\n columns={columns}\n onChange={onChange}\n >\n {children}\n </ChartSettingsProvider>\n );\n};\n\nconst ChartSettingsViewSpecButton: FC<{onClick?: () => void}> = ({onClick}) => {\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-5 w-5\"\n onClick={onClick}\n title=\"View spec\"\n aria-label=\"View spec\"\n >\n <CodeIcon className=\"h-3.5 w-3.5\" />\n </Button>\n );\n};\n\nconst ChartSettingsCloseButton: FC<{onClick: () => void}> = ({onClick}) => {\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-5 w-5\"\n onClick={onClick}\n aria-label=\"Close\"\n >\n <XIcon className=\"h-3.5 w-3.5\" />\n </Button>\n );\n};\n\nconst ChartSettingsHeader: FC<PropsWithChildren> = ({children}) => {\n return (\n <div className=\"flex items-center justify-between border-b px-3 py-1.5 text-xs font-medium\">\n {children}\n </div>\n );\n};\n\nconst ChartSettingsContent: FC<PropsWithChildren> = ({children}) => {\n return <div className=\"flex flex-col gap-2 p-2\">{children}</div>;\n};\n\nconst ChartSettingsTypeSelector: FC = () => {\n const {config, onChange} = useChartSettingsContext();\n\n const handleChartTypeChange = (newChartType: ChartType) => {\n // When changing chart type, clear settings\n onChange({\n chartType: newChartType,\n settings: {},\n settingsOpen: config.settingsOpen,\n });\n };\n\n return (\n <Field label=\"Chart type\" required>\n <ChartTypeSelector\n value={config.chartType}\n onChange={handleChartTypeChange}\n />\n </Field>\n );\n};\n\nconst ChartSettingsFields: FC = () => {\n const {config} = useChartSettingsContext();\n const {columns} = useColumnsContext();\n\n const chartTypeDef = useChartTypeDefinition(config.chartType);\n\n if (!chartTypeDef) {\n return (\n <Field label=\"Chart type\" required>\n <div className=\"text-muted-foreground flex h-full items-center justify-center p-4 text-sm\">\n Unknown chart type: {config.chartType}\n </div>\n </Field>\n );\n }\n\n if (columns.length === 0) {\n return (\n <Field label=\"Columns\" required>\n <div className=\"text-muted-foreground flex h-full items-center justify-center p-4 text-sm\">\n No columns available\n </div>\n </Field>\n );\n }\n\n return createElement(chartTypeDef.settingsComponent);\n};\n\nexport const ChartSettings = {\n Root: ChartSettingsRoot,\n Header: ChartSettingsHeader,\n Content: ChartSettingsContent,\n TypeSelector: ChartSettingsTypeSelector,\n Fields: ChartSettingsFields,\n ViewSpecButton: ChartSettingsViewSpecButton,\n CloseButton: ChartSettingsCloseButton,\n};\n"]}
@@ -1,5 +1,5 @@
1
1
  import { FC } from 'react';
2
- import { ChartPanelConfig } from '../../dashboard/MosaicDashboardSlice';
2
+ import type { ChartPanelConfig } from '../../dashboard/dashboard-types';
3
3
  import { Spec } from '@uwdata/mosaic-spec';
4
4
  interface ChartSettingsContentProps {
5
5
  dashboardId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ChartSettingsContent.d.ts","sourceRoot":"","sources":["../../../src/chart/chart-settings/ChartSettingsContent.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,EAAE,EAAwB,MAAM,OAAO,CAAC;AAEhD,OAAO,EAAC,gBAAgB,EAAC,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAC,IAAI,EAAC,MAAM,qBAAqB,CAAC;AAGzC,UAAU,yBAAyB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,KAAK,EAAE,gBAAgB,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,yBAAyB,CA+B9D,CAAC"}
1
+ {"version":3,"file":"ChartSettingsContent.d.ts","sourceRoot":"","sources":["../../../src/chart/chart-settings/ChartSettingsContent.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,EAAE,EAAwB,MAAM,OAAO,CAAC;AAEhD,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAC,IAAI,EAAC,MAAM,qBAAqB,CAAC;AAGzC,UAAU,yBAAyB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,KAAK,EAAE,gBAAgB,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,yBAAyB,CA+B9D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChartSettingsContent.js","sourceRoot":"","sources":["../../../src/chart/chart-settings/ChartSettingsContent.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAK,WAAW,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAChD,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAG5D,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAUxD,MAAM,CAAC,MAAM,oBAAoB,GAAkC,CAAC,EAClE,WAAW,EACX,KAAK,EACL,SAAS,EACT,IAAI,EACJ,OAAO,GACR,EAAE,EAAE;IACH,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAsB,UAAU,CAAC,CAAC;IAE1E,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,WAAW,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5C,WAAW,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,IAAI,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QAChC,OAAO,KAAC,oBAAoB,IAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,GAAI,CAAC;IAC5E,CAAC;IAED,OAAO,CACL,KAAC,kBAAkB,IACjB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,cAAc,GAC1B,CACH,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {FC, useCallback, useState} from 'react';\nimport {ChartSpecViewerPanel} from './ChartSpecViewerPanel';\nimport {ChartPanelConfig} from '../../dashboard/MosaicDashboardSlice';\nimport {Spec} from '@uwdata/mosaic-spec';\nimport {ChartSettingsPanel} from './ChartSettingsPanel';\n\ninterface ChartSettingsContentProps {\n dashboardId: string;\n tableName: string;\n spec?: Spec;\n panel: ChartPanelConfig;\n onClose?: () => void;\n}\n\nexport const ChartSettingsContent: FC<ChartSettingsContentProps> = ({\n dashboardId,\n panel,\n tableName,\n spec,\n onClose,\n}) => {\n const [viewMode, setViewMode] = useState<'settings' | 'spec'>('settings');\n\n const handleViewSpec = useCallback(() => {\n setViewMode('spec');\n }, []);\n\n const handleBackToSettings = useCallback(() => {\n setViewMode('settings');\n }, []);\n\n if (spec && viewMode === 'spec') {\n return <ChartSpecViewerPanel spec={spec} onBack={handleBackToSettings} />;\n }\n\n return (\n <ChartSettingsPanel\n dashboardId={dashboardId}\n panel={panel}\n tableName={tableName}\n spec={spec}\n onClose={onClose}\n onViewSpec={handleViewSpec}\n />\n );\n};\n"]}
1
+ {"version":3,"file":"ChartSettingsContent.js","sourceRoot":"","sources":["../../../src/chart/chart-settings/ChartSettingsContent.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAK,WAAW,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAChD,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAG5D,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAUxD,MAAM,CAAC,MAAM,oBAAoB,GAAkC,CAAC,EAClE,WAAW,EACX,KAAK,EACL,SAAS,EACT,IAAI,EACJ,OAAO,GACR,EAAE,EAAE;IACH,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAsB,UAAU,CAAC,CAAC;IAE1E,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,WAAW,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5C,WAAW,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,IAAI,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QAChC,OAAO,KAAC,oBAAoB,IAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,GAAI,CAAC;IAC5E,CAAC;IAED,OAAO,CACL,KAAC,kBAAkB,IACjB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,cAAc,GAC1B,CACH,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {FC, useCallback, useState} from 'react';\nimport {ChartSpecViewerPanel} from './ChartSpecViewerPanel';\nimport type {ChartPanelConfig} from '../../dashboard/dashboard-types';\nimport {Spec} from '@uwdata/mosaic-spec';\nimport {ChartSettingsPanel} from './ChartSettingsPanel';\n\ninterface ChartSettingsContentProps {\n dashboardId: string;\n tableName: string;\n spec?: Spec;\n panel: ChartPanelConfig;\n onClose?: () => void;\n}\n\nexport const ChartSettingsContent: FC<ChartSettingsContentProps> = ({\n dashboardId,\n panel,\n tableName,\n spec,\n onClose,\n}) => {\n const [viewMode, setViewMode] = useState<'settings' | 'spec'>('settings');\n\n const handleViewSpec = useCallback(() => {\n setViewMode('spec');\n }, []);\n\n const handleBackToSettings = useCallback(() => {\n setViewMode('settings');\n }, []);\n\n if (spec && viewMode === 'spec') {\n return <ChartSpecViewerPanel spec={spec} onBack={handleBackToSettings} />;\n }\n\n return (\n <ChartSettingsPanel\n dashboardId={dashboardId}\n panel={panel}\n tableName={tableName}\n spec={spec}\n onClose={onClose}\n onViewSpec={handleViewSpec}\n />\n );\n};\n"]}
@@ -4,9 +4,7 @@ import type { ChartConfig } from '../../chart-types/chart-config';
4
4
  import type { ChartType } from '../../chart-types/base-types';
5
5
  type ChartSetting<T extends ChartConfig = ChartConfig> = T['settings'];
6
6
  interface ChartSettingsContextValue<T extends ChartConfig = ChartConfig> {
7
- tableName?: string;
8
7
  config: T;
9
- columns: TableColumn[];
10
8
  onChange: (config: T) => void;
11
9
  onChangeConfig: <K extends keyof ChartSetting<T>>(key: K, value: ChartSetting<T>[K]) => void;
12
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ChartSettingsContext.d.ts","sourceRoot":"","sources":["../../../src/chart/chart-settings/ChartSettingsContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,SAAS,EAA0B,MAAM,OAAO,CAAC;AAC7E,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gCAAgC,CAAC;AAChE,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,8BAA8B,CAAC;AAE5D,KAAK,YAAY,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;AAEvE,UAAU,yBAAyB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,CAAC,CAAC;IACV,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;IAC9B,cAAc,EAAE,CAAC,CAAC,SAAS,MAAM,YAAY,CAAC,CAAC,CAAC,EAC9C,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KACtB,IAAI,CAAC;CACX;AAOD,KAAK,kBAAkB,CAAC,CAAC,SAAS,SAAS,IAAI,OAAO,CACpD,WAAW,EACX;IAAC,SAAS,EAAE,CAAC,CAAA;CAAC,CACf,CAAC;AAEF,wBAAgB,uBAAuB,IAAI,yBAAyB,CAAC,WAAW,CAAC,CAAC;AAClF,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,SAAS,EACzD,SAAS,EAAE,CAAC,GACX,yBAAyB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AA2BpD,UAAU,0BAA0B;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,MAAM,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,GACT,EAAE,0BAA0B,2CA2B5B"}
1
+ {"version":3,"file":"ChartSettingsContext.d.ts","sourceRoot":"","sources":["../../../src/chart/chart-settings/ChartSettingsContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,SAAS,EAA0B,MAAM,OAAO,CAAC;AAC7E,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gCAAgC,CAAC;AAChE,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,8BAA8B,CAAC;AAG5D,KAAK,YAAY,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;AAEvE,UAAU,yBAAyB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IACrE,MAAM,EAAE,CAAC,CAAC;IACV,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;IAC9B,cAAc,EAAE,CAAC,CAAC,SAAS,MAAM,YAAY,CAAC,CAAC,CAAC,EAC9C,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KACtB,IAAI,CAAC;CACX;AAOD,KAAK,kBAAkB,CAAC,CAAC,SAAS,SAAS,IAAI,OAAO,CACpD,WAAW,EACX;IAAC,SAAS,EAAE,CAAC,CAAA;CAAC,CACf,CAAC;AAEF,wBAAgB,uBAAuB,IAAI,yBAAyB,CAAC,WAAW,CAAC,CAAC;AAClF,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,SAAS,EACzD,SAAS,EAAE,CAAC,GACX,yBAAyB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AA2BpD,UAAU,0BAA0B;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,MAAM,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,GACT,EAAE,0BAA0B,2CA2B5B"}
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { createContext, useCallback, useContext } from 'react';
3
+ import { ColumnsProvider } from '../../chart-builders/ColumnsContext';
3
4
  const ChartSettingsContext = createContext(null);
4
5
  export function useChartSettingsContext(chartType) {
5
6
  const context = useContext(ChartSettingsContext);
@@ -24,12 +25,10 @@ export function ChartSettingsProvider({ tableName, config, columns, onChange, ch
24
25
  },
25
26
  });
26
27
  }, [config, onChange]);
27
- return (_jsx(ChartSettingsContext.Provider, { value: {
28
- tableName,
29
- config,
30
- columns,
31
- onChange,
32
- onChangeConfig,
33
- }, children: children }));
28
+ return (_jsx(ColumnsProvider, { columns: columns, tableName: tableName, children: _jsx(ChartSettingsContext.Provider, { value: {
29
+ config,
30
+ onChange,
31
+ onChangeConfig,
32
+ }, children: children }) }));
34
33
  }
35
34
  //# sourceMappingURL=ChartSettingsContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartSettingsContext.js","sourceRoot":"","sources":["../../../src/chart/chart-settings/ChartSettingsContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,aAAa,EAAkB,WAAW,EAAE,UAAU,EAAC,MAAM,OAAO,CAAC;AAkB7E,MAAM,oBAAoB,GAAG,aAAa,CACxC,IAAI,CACL,CAAC;AAYF,MAAM,UAAU,uBAAuB,CACrC,SAAa;IAIb,MAAM,OAAO,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAEjD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,0EAA0E,CAC3E,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,OAA4D,CAAC;IACtE,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,GAAG,SAAS,yCAAyC,SAAS,gBAAgB,CAC/E,CAAC;IACJ,CAAC;IAED,OAAO,OAAsE,CAAC;AAChF,CAAC;AAUD,MAAM,UAAU,qBAAqB,CAAC,EACpC,SAAS,EACT,MAAM,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,GACmB;IAC3B,MAAM,cAAc,GAAG,WAAW,CAChC,UAAwC,GAAM,EAAE,KAAmB;QACjE,QAAQ,CAAC;YACP,GAAG,MAAM;YACT,QAAQ,EAAE;gBACR,GAAG,MAAM,CAAC,QAAQ;gBAClB,CAAC,GAAG,CAAC,EAAE,KAAK;aACb;SACa,CAAC,CAAC;IACpB,CAAC,EACD,CAAC,MAAM,EAAE,QAAQ,CAAC,CACnB,CAAC;IAEF,OAAO,CACL,KAAC,oBAAoB,CAAC,QAAQ,IAC5B,KAAK,EAAE;YACL,SAAS;YACT,MAAM;YACN,OAAO;YACP,QAAQ;YACR,cAAc;SACf,YAEA,QAAQ,GACqB,CACjC,CAAC;AACJ,CAAC","sourcesContent":["import {createContext, type ReactNode, useCallback, useContext} from 'react';\nimport type {TableColumn} from '@sqlrooms/duckdb';\nimport type {ChartConfig} from '../../chart-types/chart-config';\nimport type {ChartType} from '../../chart-types/base-types';\n\ntype ChartSetting<T extends ChartConfig = ChartConfig> = T['settings'];\n\ninterface ChartSettingsContextValue<T extends ChartConfig = ChartConfig> {\n tableName?: string;\n config: T;\n columns: TableColumn[];\n onChange: (config: T) => void;\n onChangeConfig: <K extends keyof ChartSetting<T>>(\n key: K,\n value: ChartSetting<T>[K],\n ) => void;\n}\n\nconst ChartSettingsContext = createContext<ChartSettingsContextValue | null>(\n null,\n);\n\n// Extract specific config type from the discriminated union by chartType\ntype ExtractChartConfig<T extends ChartType> = Extract<\n ChartConfig,\n {chartType: T}\n>;\n\nexport function useChartSettingsContext(): ChartSettingsContextValue<ChartConfig>;\nexport function useChartSettingsContext<T extends ChartType>(\n chartType: T,\n): ChartSettingsContextValue<ExtractChartConfig<T>>;\nexport function useChartSettingsContext<T extends ChartType>(\n chartType?: T,\n):\n | ChartSettingsContextValue<ExtractChartConfig<T>>\n | ChartSettingsContextValue<ChartConfig> {\n const context = useContext(ChartSettingsContext);\n\n if (!context) {\n throw new Error(\n 'ChartSettings compound components must be used within ChartSettings.Root',\n );\n }\n\n if (!chartType) {\n return context as unknown as ChartSettingsContextValue<ChartConfig>;\n }\n\n if (context.config.chartType !== chartType) {\n throw new Error(\n `${chartType} chart settings must be used within a ${chartType} chart context`,\n );\n }\n\n return context as unknown as ChartSettingsContextValue<ExtractChartConfig<T>>;\n}\n\ninterface ChartSettingsProviderProps {\n tableName?: string;\n config: ChartConfig;\n columns: TableColumn[];\n onChange: (config: ChartConfig) => void;\n children: ReactNode;\n}\n\nexport function ChartSettingsProvider({\n tableName,\n config,\n columns,\n onChange,\n children,\n}: ChartSettingsProviderProps) {\n const onChangeConfig = useCallback(\n function <K extends keyof ChartSetting>(key: K, value: ChartSetting) {\n onChange({\n ...config,\n settings: {\n ...config.settings,\n [key]: value,\n },\n } as ChartConfig);\n },\n [config, onChange],\n );\n\n return (\n <ChartSettingsContext.Provider\n value={{\n tableName,\n config,\n columns,\n onChange,\n onChangeConfig,\n }}\n >\n {children}\n </ChartSettingsContext.Provider>\n );\n}\n"]}
1
+ {"version":3,"file":"ChartSettingsContext.js","sourceRoot":"","sources":["../../../src/chart/chart-settings/ChartSettingsContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,aAAa,EAAkB,WAAW,EAAE,UAAU,EAAC,MAAM,OAAO,CAAC;AAI7E,OAAO,EAAC,eAAe,EAAC,MAAM,qCAAqC,CAAC;AAapE,MAAM,oBAAoB,GAAG,aAAa,CACxC,IAAI,CACL,CAAC;AAYF,MAAM,UAAU,uBAAuB,CACrC,SAAa;IAIb,MAAM,OAAO,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAEjD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,0EAA0E,CAC3E,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,OAA4D,CAAC;IACtE,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,GAAG,SAAS,yCAAyC,SAAS,gBAAgB,CAC/E,CAAC;IACJ,CAAC;IAED,OAAO,OAAsE,CAAC;AAChF,CAAC;AAUD,MAAM,UAAU,qBAAqB,CAAC,EACpC,SAAS,EACT,MAAM,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,GACmB;IAC3B,MAAM,cAAc,GAAG,WAAW,CAChC,UAAwC,GAAM,EAAE,KAAmB;QACjE,QAAQ,CAAC;YACP,GAAG,MAAM;YACT,QAAQ,EAAE;gBACR,GAAG,MAAM,CAAC,QAAQ;gBAClB,CAAC,GAAG,CAAC,EAAE,KAAK;aACb;SACa,CAAC,CAAC;IACpB,CAAC,EACD,CAAC,MAAM,EAAE,QAAQ,CAAC,CACnB,CAAC;IAEF,OAAO,CACL,KAAC,eAAe,IAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,YACrD,KAAC,oBAAoB,CAAC,QAAQ,IAC5B,KAAK,EAAE;gBACL,MAAM;gBACN,QAAQ;gBACR,cAAc;aACf,YAEA,QAAQ,GACqB,GAChB,CACnB,CAAC;AACJ,CAAC","sourcesContent":["import {createContext, type ReactNode, useCallback, useContext} from 'react';\nimport type {TableColumn} from '@sqlrooms/duckdb';\nimport type {ChartConfig} from '../../chart-types/chart-config';\nimport type {ChartType} from '../../chart-types/base-types';\nimport {ColumnsProvider} from '../../chart-builders/ColumnsContext';\n\ntype ChartSetting<T extends ChartConfig = ChartConfig> = T['settings'];\n\ninterface ChartSettingsContextValue<T extends ChartConfig = ChartConfig> {\n config: T;\n onChange: (config: T) => void;\n onChangeConfig: <K extends keyof ChartSetting<T>>(\n key: K,\n value: ChartSetting<T>[K],\n ) => void;\n}\n\nconst ChartSettingsContext = createContext<ChartSettingsContextValue | null>(\n null,\n);\n\n// Extract specific config type from the discriminated union by chartType\ntype ExtractChartConfig<T extends ChartType> = Extract<\n ChartConfig,\n {chartType: T}\n>;\n\nexport function useChartSettingsContext(): ChartSettingsContextValue<ChartConfig>;\nexport function useChartSettingsContext<T extends ChartType>(\n chartType: T,\n): ChartSettingsContextValue<ExtractChartConfig<T>>;\nexport function useChartSettingsContext<T extends ChartType>(\n chartType?: T,\n):\n | ChartSettingsContextValue<ExtractChartConfig<T>>\n | ChartSettingsContextValue<ChartConfig> {\n const context = useContext(ChartSettingsContext);\n\n if (!context) {\n throw new Error(\n 'ChartSettings compound components must be used within ChartSettings.Root',\n );\n }\n\n if (!chartType) {\n return context as unknown as ChartSettingsContextValue<ChartConfig>;\n }\n\n if (context.config.chartType !== chartType) {\n throw new Error(\n `${chartType} chart settings must be used within a ${chartType} chart context`,\n );\n }\n\n return context as unknown as ChartSettingsContextValue<ExtractChartConfig<T>>;\n}\n\ninterface ChartSettingsProviderProps {\n tableName?: string;\n config: ChartConfig;\n columns: TableColumn[];\n onChange: (config: ChartConfig) => void;\n children: ReactNode;\n}\n\nexport function ChartSettingsProvider({\n tableName,\n config,\n columns,\n onChange,\n children,\n}: ChartSettingsProviderProps) {\n const onChangeConfig = useCallback(\n function <K extends keyof ChartSetting>(key: K, value: ChartSetting) {\n onChange({\n ...config,\n settings: {\n ...config.settings,\n [key]: value,\n },\n } as ChartConfig);\n },\n [config, onChange],\n );\n\n return (\n <ColumnsProvider columns={columns} tableName={tableName}>\n <ChartSettingsContext.Provider\n value={{\n config,\n onChange,\n onChangeConfig,\n }}\n >\n {children}\n </ChartSettingsContext.Provider>\n </ColumnsProvider>\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { FC } from 'react';
2
- import { ChartPanelConfig } from '../../dashboard/MosaicDashboardSlice';
2
+ import type { ChartPanelConfig } from '../../dashboard/dashboard-types';
3
3
  import { Spec } from '@uwdata/mosaic-spec';
4
4
  interface ChartSettingsPanelProps {
5
5
  dashboardId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ChartSettingsPanel.d.ts","sourceRoot":"","sources":["../../../src/chart/chart-settings/ChartSettingsPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,EAAE,EAAc,MAAM,OAAO,CAAC;AAItC,OAAO,EAEL,gBAAgB,EACjB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAC,IAAI,EAAC,MAAM,qBAAqB,CAAC;AAEzC,UAAU,uBAAuB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,KAAK,EAAE,gBAAgB,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CA6C1D,CAAC"}
1
+ {"version":3,"file":"ChartSettingsPanel.d.ts","sourceRoot":"","sources":["../../../src/chart/chart-settings/ChartSettingsPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,EAAE,EAAc,MAAM,OAAO,CAAC;AAItC,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,iCAAiC,CAAC;AAEtE,OAAO,EAAC,IAAI,EAAC,MAAM,qBAAqB,CAAC;AAEzC,UAAU,uBAAuB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,KAAK,EAAE,gBAAgB,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CA6C1D,CAAC"}
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useCallback } from 'react';
3
3
  import { ChartSettings } from './ChartSettings';
4
4
  import { useTableColumns } from './useTableColumns';
5
- import { useStoreWithMosaicDashboard, } from '../../dashboard/MosaicDashboardSlice';
5
+ import { useStoreWithMosaicDashboard } from '../../dashboard/MosaicDashboardSlice';
6
6
  export const ChartSettingsPanel = ({ dashboardId, panel, tableName, spec, onClose, onViewSpec, }) => {
7
7
  const config = panel.config;
8
8
  const updatePanel = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.updatePanel);
@@ -1 +1 @@
1
- {"version":3,"file":"ChartSettingsPanel.js","sourceRoot":"","sources":["../../../src/chart/chart-settings/ChartSettingsPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAK,WAAW,EAAC,MAAM,OAAO,CAAC;AACtC,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EACL,2BAA2B,GAE5B,MAAM,sCAAsC,CAAC;AAY9C,MAAM,CAAC,MAAM,kBAAkB,GAAgC,CAAC,EAC9D,WAAW,EACX,KAAK,EACL,SAAS,EACT,IAAI,EACJ,OAAO,EACP,UAAU,GACX,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B,MAAM,WAAW,GAAG,2BAA2B,CAC7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAC7C,CAAC;IAEF,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAE3C,MAAM,oBAAoB,GAAG,WAAW,CACtC,CAAC,MAAmB,EAAE,EAAE;QACtB,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE;YACjC,MAAM;SACP,CAAC,CAAC;IACL,CAAC,EACD,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CACrC,CAAC;IAEF,OAAO,CACL,MAAC,aAAa,CAAC,IAAI,IACjB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,oBAAoB,aAE9B,MAAC,aAAa,CAAC,MAAM,eACnB,cAAK,SAAS,EAAC,mBAAmB,+BAAqB,EACvD,eAAK,SAAS,EAAC,yBAAyB,aACrC,IAAI,IAAI,KAAC,aAAa,CAAC,cAAc,IAAC,OAAO,EAAE,UAAU,GAAI,EAC7D,OAAO,IAAI,KAAC,aAAa,CAAC,WAAW,IAAC,OAAO,EAAE,OAAO,GAAI,IACvD,IACe,EACvB,MAAC,aAAa,CAAC,OAAO,eACpB,KAAC,aAAa,CAAC,YAAY,KAAG,EAC9B,KAAC,aAAa,CAAC,MAAM,KAAG,IACF,IACL,CACtB,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {FC, useCallback} from 'react';\nimport {ChartSettings} from './ChartSettings';\nimport {type ChartConfig} from '../../chart-types/chart-config';\nimport {useTableColumns} from './useTableColumns';\nimport {\n useStoreWithMosaicDashboard,\n ChartPanelConfig,\n} from '../../dashboard/MosaicDashboardSlice';\nimport {Spec} from '@uwdata/mosaic-spec';\n\ninterface ChartSettingsPanelProps {\n dashboardId: string;\n tableName: string;\n spec?: Spec;\n panel: ChartPanelConfig;\n onClose?: () => void;\n onViewSpec?: () => void;\n}\n\nexport const ChartSettingsPanel: FC<ChartSettingsPanelProps> = ({\n dashboardId,\n panel,\n tableName,\n spec,\n onClose,\n onViewSpec,\n}) => {\n const config = panel.config;\n\n const updatePanel = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.updatePanel,\n );\n\n const columns = useTableColumns(tableName);\n\n const handleSettingsChange = useCallback(\n (config: ChartConfig) => {\n updatePanel(dashboardId, panel.id, {\n config,\n });\n },\n [dashboardId, panel.id, updatePanel],\n );\n\n return (\n <ChartSettings.Root\n tableName={tableName}\n config={config}\n columns={columns}\n onChange={handleSettingsChange}\n >\n <ChartSettings.Header>\n <div className=\"flex items-center\">Chart settings</div>\n <div className=\"flex items-center gap-1\">\n {spec && <ChartSettings.ViewSpecButton onClick={onViewSpec} />}\n {onClose && <ChartSettings.CloseButton onClick={onClose} />}\n </div>\n </ChartSettings.Header>\n <ChartSettings.Content>\n <ChartSettings.TypeSelector />\n <ChartSettings.Fields />\n </ChartSettings.Content>\n </ChartSettings.Root>\n );\n};\n"]}
1
+ {"version":3,"file":"ChartSettingsPanel.js","sourceRoot":"","sources":["../../../src/chart/chart-settings/ChartSettingsPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAK,WAAW,EAAC,MAAM,OAAO,CAAC;AACtC,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAC,2BAA2B,EAAC,MAAM,sCAAsC,CAAC;AAYjF,MAAM,CAAC,MAAM,kBAAkB,GAAgC,CAAC,EAC9D,WAAW,EACX,KAAK,EACL,SAAS,EACT,IAAI,EACJ,OAAO,EACP,UAAU,GACX,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B,MAAM,WAAW,GAAG,2BAA2B,CAC7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAC7C,CAAC;IAEF,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAE3C,MAAM,oBAAoB,GAAG,WAAW,CACtC,CAAC,MAAmB,EAAE,EAAE;QACtB,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE;YACjC,MAAM;SACP,CAAC,CAAC;IACL,CAAC,EACD,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CACrC,CAAC;IAEF,OAAO,CACL,MAAC,aAAa,CAAC,IAAI,IACjB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,oBAAoB,aAE9B,MAAC,aAAa,CAAC,MAAM,eACnB,cAAK,SAAS,EAAC,mBAAmB,+BAAqB,EACvD,eAAK,SAAS,EAAC,yBAAyB,aACrC,IAAI,IAAI,KAAC,aAAa,CAAC,cAAc,IAAC,OAAO,EAAE,UAAU,GAAI,EAC7D,OAAO,IAAI,KAAC,aAAa,CAAC,WAAW,IAAC,OAAO,EAAE,OAAO,GAAI,IACvD,IACe,EACvB,MAAC,aAAa,CAAC,OAAO,eACpB,KAAC,aAAa,CAAC,YAAY,KAAG,EAC9B,KAAC,aAAa,CAAC,MAAM,KAAG,IACF,IACL,CACtB,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {FC, useCallback} from 'react';\nimport {ChartSettings} from './ChartSettings';\nimport {type ChartConfig} from '../../chart-types/chart-config';\nimport {useTableColumns} from './useTableColumns';\nimport type {ChartPanelConfig} from '../../dashboard/dashboard-types';\nimport {useStoreWithMosaicDashboard} from '../../dashboard/MosaicDashboardSlice';\nimport {Spec} from '@uwdata/mosaic-spec';\n\ninterface ChartSettingsPanelProps {\n dashboardId: string;\n tableName: string;\n spec?: Spec;\n panel: ChartPanelConfig;\n onClose?: () => void;\n onViewSpec?: () => void;\n}\n\nexport const ChartSettingsPanel: FC<ChartSettingsPanelProps> = ({\n dashboardId,\n panel,\n tableName,\n spec,\n onClose,\n onViewSpec,\n}) => {\n const config = panel.config;\n\n const updatePanel = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.updatePanel,\n );\n\n const columns = useTableColumns(tableName);\n\n const handleSettingsChange = useCallback(\n (config: ChartConfig) => {\n updatePanel(dashboardId, panel.id, {\n config,\n });\n },\n [dashboardId, panel.id, updatePanel],\n );\n\n return (\n <ChartSettings.Root\n tableName={tableName}\n config={config}\n columns={columns}\n onChange={handleSettingsChange}\n >\n <ChartSettings.Header>\n <div className=\"flex items-center\">Chart settings</div>\n <div className=\"flex items-center gap-1\">\n {spec && <ChartSettings.ViewSpecButton onClick={onViewSpec} />}\n {onClose && <ChartSettings.CloseButton onClick={onClose} />}\n </div>\n </ChartSettings.Header>\n <ChartSettings.Content>\n <ChartSettings.TypeSelector />\n <ChartSettings.Fields />\n </ChartSettings.Content>\n </ChartSettings.Root>\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ChartTypeSelector.d.ts","sourceRoot":"","sources":["../../../src/chart/chart-settings/ChartTypeSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAgB,MAAM,OAAO,CAAC;AAU7C,OAAO,EAAC,KAAK,SAAS,EAAC,MAAM,8BAA8B,CAAC;AAG5D,UAAU,sBAAsB;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;CAC1C;AAED,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CA6CxD,CAAC"}
1
+ {"version":3,"file":"ChartTypeSelector.d.ts","sourceRoot":"","sources":["../../../src/chart/chart-settings/ChartTypeSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAgB,MAAM,OAAO,CAAC;AAS7C,OAAO,EAAC,KAAK,SAAS,EAAC,MAAM,8BAA8B,CAAC;AAG5D,UAAU,sBAAsB;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;CAC1C;AAED,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CA0CxD,CAAC"}
@@ -1,16 +1,16 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { memo, useMemo } from 'react';
3
- import { Label, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@sqlrooms/ui';
3
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@sqlrooms/ui';
4
4
  import { ChartNoAxesCombined } from 'lucide-react';
5
5
  import { useStoreWithMosaicDashboard } from '../../dashboard/MosaicDashboardSlice';
6
6
  export const ChartTypeSelector = memo(({ value, onChange }) => {
7
7
  const chartTypes = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.chartTypes);
8
8
  const selectedChartType = useMemo(() => chartTypes?.find((chartType) => chartType.id === value), [chartTypes, value]);
9
9
  const SelectedChartTypeIcon = selectedChartType?.icon ?? ChartNoAxesCombined;
10
- return (_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { className: "text-xs", children: "Chart Type" }), _jsxs(Select, { value: value, onValueChange: onChange, children: [_jsx(SelectTrigger, { className: "h-8 text-xs", children: selectedChartType ? (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(SelectedChartTypeIcon, { className: "h-3.5 w-3.5" }), _jsx("span", { children: selectedChartType.label })] })) : (_jsx(SelectValue, { placeholder: "Select chart type" })) }), _jsx(SelectContent, { className: "text-xs", children: chartTypes?.map((chartType) => {
11
- const Icon = chartType.icon ?? ChartNoAxesCombined;
12
- return (_jsx(SelectItem, { value: chartType.id, children: _jsxs("div", { className: "flex items-center gap-2 text-xs", children: [_jsx(Icon, { className: "h-3.5 w-3.5" }), _jsx("span", { children: chartType.label })] }) }, chartType.id));
13
- }) })] })] }));
10
+ return (_jsxs(Select, { value: value, onValueChange: onChange, children: [_jsx(SelectTrigger, { className: "h-8 text-xs", "aria-label": "Chart type", children: selectedChartType ? (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(SelectedChartTypeIcon, { className: "h-3.5 w-3.5" }), _jsx("span", { children: selectedChartType.label })] })) : (_jsx(SelectValue, { placeholder: "Select chart type" })) }), _jsx(SelectContent, { className: "text-xs", children: chartTypes?.map((chartType) => {
11
+ const Icon = chartType.icon ?? ChartNoAxesCombined;
12
+ return (_jsx(SelectItem, { value: chartType.id, children: _jsxs("div", { className: "flex items-center gap-2 text-xs", children: [_jsx(Icon, { className: "h-3.5 w-3.5" }), _jsx("span", { children: chartType.label })] }) }, chartType.id));
13
+ }) })] }));
14
14
  });
15
15
  ChartTypeSelector.displayName = 'ChartTypeSelector';
16
16
  //# sourceMappingURL=ChartTypeSelector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartTypeSelector.js","sourceRoot":"","sources":["../../../src/chart/chart-settings/ChartTypeSelector.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAU,IAAI,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;AAC7C,OAAO,EACL,KAAK,EACL,MAAM,EACN,aAAa,EACb,UAAU,EACV,aAAa,EACb,WAAW,GACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,mBAAmB,EAAC,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAC,2BAA2B,EAAC,MAAM,sCAAsC,CAAC;AAOjF,MAAM,CAAC,MAAM,iBAAiB,GAA+B,IAAI,CAC/D,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAC,EAAE,EAAE;IACpB,MAAM,UAAU,GAAG,2BAA2B,CAC5C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAC5C,CAAC;IAEF,MAAM,iBAAiB,GAAG,OAAO,CAC/B,GAAG,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,KAAK,CAAC,EAC7D,CAAC,UAAU,EAAE,KAAK,CAAC,CACpB,CAAC;IAEF,MAAM,qBAAqB,GACzB,iBAAiB,EAAE,IAAI,IAAI,mBAAmB,CAAC;IAEjD,OAAO,CACL,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,KAAK,IAAC,SAAS,EAAC,SAAS,2BAAmB,EAC7C,MAAC,MAAM,IAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,aAC3C,KAAC,aAAa,IAAC,SAAS,EAAC,aAAa,YACnC,iBAAiB,CAAC,CAAC,CAAC,CACnB,eAAK,SAAS,EAAC,yBAAyB,aACtC,KAAC,qBAAqB,IAAC,SAAS,EAAC,aAAa,GAAG,EACjD,yBAAO,iBAAiB,CAAC,KAAK,GAAQ,IAClC,CACP,CAAC,CAAC,CAAC,CACF,KAAC,WAAW,IAAC,WAAW,EAAC,mBAAmB,GAAG,CAChD,GACa,EAChB,KAAC,aAAa,IAAC,SAAS,EAAC,SAAS,YAC/B,UAAU,EAAE,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;4BAC7B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,mBAAmB,CAAC;4BACnD,OAAO,CACL,KAAC,UAAU,IAAoB,KAAK,EAAE,SAAS,CAAC,EAAE,YAChD,eAAK,SAAS,EAAC,iCAAiC,aAC9C,KAAC,IAAI,IAAC,SAAS,EAAC,aAAa,GAAG,EAChC,yBAAO,SAAS,CAAC,KAAK,GAAQ,IAC1B,IAJS,SAAS,CAAC,EAAE,CAKhB,CACd,CAAC;wBACJ,CAAC,CAAC,GACY,IACT,IACL,CACP,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,iBAAiB,CAAC,WAAW,GAAG,mBAAmB,CAAC","sourcesContent":["import {type FC, memo, useMemo} from 'react';\nimport {\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@sqlrooms/ui';\nimport {ChartNoAxesCombined} from 'lucide-react';\nimport {type ChartType} from '../../chart-types/base-types';\nimport {useStoreWithMosaicDashboard} from '../../dashboard/MosaicDashboardSlice';\n\ninterface ChartTypeSelectorProps {\n value: ChartType;\n onChange: (chartType: ChartType) => void;\n}\n\nexport const ChartTypeSelector: FC<ChartTypeSelectorProps> = memo(\n ({value, onChange}) => {\n const chartTypes = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.chartTypes,\n );\n\n const selectedChartType = useMemo(\n () => chartTypes?.find((chartType) => chartType.id === value),\n [chartTypes, value],\n );\n\n const SelectedChartTypeIcon =\n selectedChartType?.icon ?? ChartNoAxesCombined;\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-xs\">Chart Type</Label>\n <Select value={value} onValueChange={onChange}>\n <SelectTrigger className=\"h-8 text-xs\">\n {selectedChartType ? (\n <div className=\"flex items-center gap-2\">\n <SelectedChartTypeIcon className=\"h-3.5 w-3.5\" />\n <span>{selectedChartType.label}</span>\n </div>\n ) : (\n <SelectValue placeholder=\"Select chart type\" />\n )}\n </SelectTrigger>\n <SelectContent className=\"text-xs\">\n {chartTypes?.map((chartType) => {\n const Icon = chartType.icon ?? ChartNoAxesCombined;\n return (\n <SelectItem key={chartType.id} value={chartType.id}>\n <div className=\"flex items-center gap-2 text-xs\">\n <Icon className=\"h-3.5 w-3.5\" />\n <span>{chartType.label}</span>\n </div>\n </SelectItem>\n );\n })}\n </SelectContent>\n </Select>\n </div>\n );\n },\n);\n\nChartTypeSelector.displayName = 'ChartTypeSelector';\n"]}
1
+ {"version":3,"file":"ChartTypeSelector.js","sourceRoot":"","sources":["../../../src/chart/chart-settings/ChartTypeSelector.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAU,IAAI,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;AAC7C,OAAO,EACL,MAAM,EACN,aAAa,EACb,UAAU,EACV,aAAa,EACb,WAAW,GACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,mBAAmB,EAAC,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAC,2BAA2B,EAAC,MAAM,sCAAsC,CAAC;AAOjF,MAAM,CAAC,MAAM,iBAAiB,GAA+B,IAAI,CAC/D,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAC,EAAE,EAAE;IACpB,MAAM,UAAU,GAAG,2BAA2B,CAC5C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAC5C,CAAC;IAEF,MAAM,iBAAiB,GAAG,OAAO,CAC/B,GAAG,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,KAAK,CAAC,EAC7D,CAAC,UAAU,EAAE,KAAK,CAAC,CACpB,CAAC;IAEF,MAAM,qBAAqB,GACzB,iBAAiB,EAAE,IAAI,IAAI,mBAAmB,CAAC;IAEjD,OAAO,CACL,MAAC,MAAM,IAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,aAC3C,KAAC,aAAa,IAAC,SAAS,EAAC,aAAa,gBAAY,YAAY,YAC3D,iBAAiB,CAAC,CAAC,CAAC,CACnB,eAAK,SAAS,EAAC,yBAAyB,aACtC,KAAC,qBAAqB,IAAC,SAAS,EAAC,aAAa,GAAG,EACjD,yBAAO,iBAAiB,CAAC,KAAK,GAAQ,IAClC,CACP,CAAC,CAAC,CAAC,CACF,KAAC,WAAW,IAAC,WAAW,EAAC,mBAAmB,GAAG,CAChD,GACa,EAChB,KAAC,aAAa,IAAC,SAAS,EAAC,SAAS,YAC/B,UAAU,EAAE,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;oBAC7B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,mBAAmB,CAAC;oBACnD,OAAO,CACL,KAAC,UAAU,IAAoB,KAAK,EAAE,SAAS,CAAC,EAAE,YAChD,eAAK,SAAS,EAAC,iCAAiC,aAC9C,KAAC,IAAI,IAAC,SAAS,EAAC,aAAa,GAAG,EAChC,yBAAO,SAAS,CAAC,KAAK,GAAQ,IAC1B,IAJS,SAAS,CAAC,EAAE,CAKhB,CACd,CAAC;gBACJ,CAAC,CAAC,GACY,IACT,CACV,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,iBAAiB,CAAC,WAAW,GAAG,mBAAmB,CAAC","sourcesContent":["import {type FC, memo, useMemo} from 'react';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@sqlrooms/ui';\nimport {ChartNoAxesCombined} from 'lucide-react';\nimport {type ChartType} from '../../chart-types/base-types';\nimport {useStoreWithMosaicDashboard} from '../../dashboard/MosaicDashboardSlice';\n\ninterface ChartTypeSelectorProps {\n value: ChartType;\n onChange: (chartType: ChartType) => void;\n}\n\nexport const ChartTypeSelector: FC<ChartTypeSelectorProps> = memo(\n ({value, onChange}) => {\n const chartTypes = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.chartTypes,\n );\n\n const selectedChartType = useMemo(\n () => chartTypes?.find((chartType) => chartType.id === value),\n [chartTypes, value],\n );\n\n const SelectedChartTypeIcon =\n selectedChartType?.icon ?? ChartNoAxesCombined;\n\n return (\n <Select value={value} onValueChange={onChange}>\n <SelectTrigger className=\"h-8 text-xs\" aria-label=\"Chart type\">\n {selectedChartType ? (\n <div className=\"flex items-center gap-2\">\n <SelectedChartTypeIcon className=\"h-3.5 w-3.5\" />\n <span>{selectedChartType.label}</span>\n </div>\n ) : (\n <SelectValue placeholder=\"Select chart type\" />\n )}\n </SelectTrigger>\n <SelectContent className=\"text-xs\">\n {chartTypes?.map((chartType) => {\n const Icon = chartType.icon ?? ChartNoAxesCombined;\n return (\n <SelectItem key={chartType.id} value={chartType.id}>\n <div className=\"flex items-center gap-2 text-xs\">\n <Icon className=\"h-3.5 w-3.5\" />\n <span>{chartType.label}</span>\n </div>\n </SelectItem>\n );\n })}\n </SelectContent>\n </Select>\n );\n },\n);\n\nChartTypeSelector.displayName = 'ChartTypeSelector';\n"]}
@@ -1,8 +1,6 @@
1
1
  import { type FC } from 'react';
2
- import { TableColumn } from '@sqlrooms/db';
3
2
  export interface ColumnSelectorProps {
4
3
  types?: string[];
5
- columns?: TableColumn[];
6
4
  value: string | undefined;
7
5
  onChange: (value: string) => void;
8
6
  placeholder?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnSelector.d.ts","sourceRoot":"","sources":["../../src/chart-builders/ColumnSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAC,MAAM,OAAO,CAAC;AAQ9B,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AAEzC,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAgDD,eAAO,MAAM,cAAc;;;;CAIzB,CAAC"}
1
+ {"version":3,"file":"ColumnSelector.d.ts","sourceRoot":"","sources":["../../src/chart-builders/ColumnSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAC,MAAM,OAAO,CAAC;AAS9B,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8CD,eAAO,MAAM,cAAc;;;;CAIzB,CAAC"}
@@ -1,24 +1,23 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { FieldSelectorInput } from './FieldSelectorInput';
3
3
  import { NUMERIC_COLUMN_TYPES, QUANTITATIVE_COLUMN_TYPES, CATEGORICAL_COLUMN_TYPES, } from './constants';
4
- import { useChartSettingsContext } from '../chart/chart-settings/ChartSettingsContext';
4
+ import { useColumnsContext } from './ColumnsContext';
5
5
  /**
6
6
  * Simplified wrapper around FieldSelectorInput for selecting a table column.
7
7
  * Removes the field prop requirement for easier composition.
8
8
  *
9
9
  * Can be used as:
10
- * - `<ColumnSelector types={...} />` - custom types
11
10
  * - `<ColumnSelector.Numeric />` - numeric types only
12
11
  * - `<ColumnSelector.Quantitative />` - numeric + temporal
13
12
  * - `<ColumnSelector.Categorical />` - text/enum types
14
13
  */
15
- const ColumnSelectorRoot = ({ types, value, onChange, columns, placeholder, }) => {
16
- const { columns: contextColumns } = useChartSettingsContext();
14
+ const ColumnSelectorRoot = ({ types, value, onChange, placeholder, }) => {
15
+ const { columns } = useColumnsContext();
17
16
  return (_jsx(FieldSelectorInput, { field: {
18
17
  key: '',
19
18
  label: '',
20
19
  types,
21
- }, columns: columns ?? contextColumns, value: value, onChange: onChange, placeholder: placeholder }));
20
+ }, value: value, columns: columns, onChange: onChange, placeholder: placeholder ?? 'Select column…' }));
22
21
  };
23
22
  const Numeric = (props) => (_jsx(ColumnSelectorRoot, { ...props, types: NUMERIC_COLUMN_TYPES }));
24
23
  const Quantitative = (props) => (_jsx(ColumnSelectorRoot, { ...props, types: QUANTITATIVE_COLUMN_TYPES }));
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnSelector.js","sourceRoot":"","sources":["../../src/chart-builders/ColumnSelector.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,uBAAuB,EAAC,MAAM,8CAA8C,CAAC;AAWrF;;;;;;;;;GASG;AACH,MAAM,kBAAkB,GAA4B,CAAC,EACnD,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAO,EACP,WAAW,GACZ,EAAE,EAAE;IACH,MAAM,EAAC,OAAO,EAAE,cAAc,EAAC,GAAG,uBAAuB,EAAE,CAAC;IAE5D,OAAO,CACL,KAAC,kBAAkB,IACjB,KAAK,EAAE;YACL,GAAG,EAAE,EAAE;YACP,KAAK,EAAE,EAAE;YACT,KAAK;SACN,EACD,OAAO,EAAE,OAAO,IAAI,cAAc,EAClC,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,GACxB,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,OAAO,GAA2C,CAAC,KAAK,EAAE,EAAE,CAAC,CACjE,KAAC,kBAAkB,OAAK,KAAK,EAAE,KAAK,EAAE,oBAAoB,GAAI,CAC/D,CAAC;AAEF,MAAM,YAAY,GAA2C,CAAC,KAAK,EAAE,EAAE,CAAC,CACtE,KAAC,kBAAkB,OAAK,KAAK,EAAE,KAAK,EAAE,yBAAyB,GAAI,CACpE,CAAC;AAEF,MAAM,WAAW,GAA2C,CAAC,KAAK,EAAE,EAAE,CAAC,CACrE,KAAC,kBAAkB,OAAK,KAAK,EAAE,KAAK,EAAE,wBAAwB,GAAI,CACnE,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE;IAC9D,OAAO;IACP,YAAY;IACZ,WAAW;CACZ,CAAC,CAAC","sourcesContent":["import {type FC} from 'react';\nimport {FieldSelectorInput} from './FieldSelectorInput';\nimport {\n NUMERIC_COLUMN_TYPES,\n QUANTITATIVE_COLUMN_TYPES,\n CATEGORICAL_COLUMN_TYPES,\n} from './constants';\nimport {useChartSettingsContext} from '../chart/chart-settings/ChartSettingsContext';\nimport {TableColumn} from '@sqlrooms/db';\n\nexport interface ColumnSelectorProps {\n types?: string[];\n columns?: TableColumn[];\n value: string | undefined;\n onChange: (value: string) => void;\n placeholder?: string;\n}\n\n/**\n * Simplified wrapper around FieldSelectorInput for selecting a table column.\n * Removes the field prop requirement for easier composition.\n *\n * Can be used as:\n * - `<ColumnSelector types={...} />` - custom types\n * - `<ColumnSelector.Numeric />` - numeric types only\n * - `<ColumnSelector.Quantitative />` - numeric + temporal\n * - `<ColumnSelector.Categorical />` - text/enum types\n */\nconst ColumnSelectorRoot: FC<ColumnSelectorProps> = ({\n types,\n value,\n onChange,\n columns,\n placeholder,\n}) => {\n const {columns: contextColumns} = useChartSettingsContext();\n\n return (\n <FieldSelectorInput\n field={{\n key: '',\n label: '',\n types,\n }}\n columns={columns ?? contextColumns}\n value={value}\n onChange={onChange}\n placeholder={placeholder}\n />\n );\n};\n\nconst Numeric: FC<Omit<ColumnSelectorProps, 'types'>> = (props) => (\n <ColumnSelectorRoot {...props} types={NUMERIC_COLUMN_TYPES} />\n);\n\nconst Quantitative: FC<Omit<ColumnSelectorProps, 'types'>> = (props) => (\n <ColumnSelectorRoot {...props} types={QUANTITATIVE_COLUMN_TYPES} />\n);\n\nconst Categorical: FC<Omit<ColumnSelectorProps, 'types'>> = (props) => (\n <ColumnSelectorRoot {...props} types={CATEGORICAL_COLUMN_TYPES} />\n);\n\nexport const ColumnSelector = Object.assign(ColumnSelectorRoot, {\n Numeric,\n Quantitative,\n Categorical,\n});\n"]}
1
+ {"version":3,"file":"ColumnSelector.js","sourceRoot":"","sources":["../../src/chart-builders/ColumnSelector.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AASnD;;;;;;;;GAQG;AACH,MAAM,kBAAkB,GAA4B,CAAC,EACnD,KAAK,EACL,KAAK,EACL,QAAQ,EACR,WAAW,GACZ,EAAE,EAAE;IACH,MAAM,EAAC,OAAO,EAAC,GAAG,iBAAiB,EAAE,CAAC;IAEtC,OAAO,CACL,KAAC,kBAAkB,IACjB,KAAK,EAAE;YACL,GAAG,EAAE,EAAE;YACP,KAAK,EAAE,EAAE;YACT,KAAK;SACN,EACD,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,IAAI,gBAAgB,GAC5C,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,OAAO,GAA2C,CAAC,KAAK,EAAE,EAAE,CAAC,CACjE,KAAC,kBAAkB,OAAK,KAAK,EAAE,KAAK,EAAE,oBAAoB,GAAI,CAC/D,CAAC;AAEF,MAAM,YAAY,GAA2C,CAAC,KAAK,EAAE,EAAE,CAAC,CACtE,KAAC,kBAAkB,OAAK,KAAK,EAAE,KAAK,EAAE,yBAAyB,GAAI,CACpE,CAAC;AAEF,MAAM,WAAW,GAA2C,CAAC,KAAK,EAAE,EAAE,CAAC,CACrE,KAAC,kBAAkB,OAAK,KAAK,EAAE,KAAK,EAAE,wBAAwB,GAAI,CACnE,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE;IAC9D,OAAO;IACP,YAAY;IACZ,WAAW;CACZ,CAAC,CAAC","sourcesContent":["import {type FC} from 'react';\nimport {FieldSelectorInput} from './FieldSelectorInput';\nimport {\n NUMERIC_COLUMN_TYPES,\n QUANTITATIVE_COLUMN_TYPES,\n CATEGORICAL_COLUMN_TYPES,\n} from './constants';\nimport {useColumnsContext} from './ColumnsContext';\n\nexport interface ColumnSelectorProps {\n types?: string[];\n value: string | undefined;\n onChange: (value: string) => void;\n placeholder?: string;\n}\n\n/**\n * Simplified wrapper around FieldSelectorInput for selecting a table column.\n * Removes the field prop requirement for easier composition.\n *\n * Can be used as:\n * - `<ColumnSelector.Numeric />` - numeric types only\n * - `<ColumnSelector.Quantitative />` - numeric + temporal\n * - `<ColumnSelector.Categorical />` - text/enum types\n */\nconst ColumnSelectorRoot: FC<ColumnSelectorProps> = ({\n types,\n value,\n onChange,\n placeholder,\n}) => {\n const {columns} = useColumnsContext();\n\n return (\n <FieldSelectorInput\n field={{\n key: '',\n label: '',\n types,\n }}\n value={value}\n columns={columns}\n onChange={onChange}\n placeholder={placeholder ?? 'Select column…'}\n />\n );\n};\n\nconst Numeric: FC<Omit<ColumnSelectorProps, 'types'>> = (props) => (\n <ColumnSelectorRoot {...props} types={NUMERIC_COLUMN_TYPES} />\n);\n\nconst Quantitative: FC<Omit<ColumnSelectorProps, 'types'>> = (props) => (\n <ColumnSelectorRoot {...props} types={QUANTITATIVE_COLUMN_TYPES} />\n);\n\nconst Categorical: FC<Omit<ColumnSelectorProps, 'types'>> = (props) => (\n <ColumnSelectorRoot {...props} types={CATEGORICAL_COLUMN_TYPES} />\n);\n\nexport const ColumnSelector = Object.assign(ColumnSelectorRoot, {\n Numeric,\n Quantitative,\n Categorical,\n});\n"]}
@@ -0,0 +1,13 @@
1
+ import { type FC, type PropsWithChildren } from 'react';
2
+ import type { TableColumn } from '@sqlrooms/duckdb';
3
+ export interface ColumnsContextValue {
4
+ columns: TableColumn[];
5
+ tableName?: string;
6
+ }
7
+ export declare function useColumnsContext(): ColumnsContextValue;
8
+ export interface ColumnsProviderProps extends PropsWithChildren {
9
+ columns: TableColumn[];
10
+ tableName?: string;
11
+ }
12
+ export declare const ColumnsProvider: FC<ColumnsProviderProps>;
13
+ //# sourceMappingURL=ColumnsContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColumnsContext.d.ts","sourceRoot":"","sources":["../../src/chart-builders/ColumnsContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,EAAE,EACP,KAAK,iBAAiB,EACvB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAElD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,iBAAiB,IAAI,mBAAmB,CAOvD;AAED,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAUpD,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext, useMemo, } from 'react';
3
+ const ColumnsContext = createContext(null);
4
+ export function useColumnsContext() {
5
+ const context = useContext(ColumnsContext);
6
+ if (!context) {
7
+ throw new Error('useColumnsContext must be used within a ColumnsProvider');
8
+ }
9
+ return context;
10
+ }
11
+ export const ColumnsProvider = ({ columns, tableName, children, }) => {
12
+ const value = useMemo(() => ({ columns, tableName }), [columns, tableName]);
13
+ return (_jsx(ColumnsContext.Provider, { value: value, children: children }));
14
+ };
15
+ //# sourceMappingURL=ColumnsContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColumnsContext.js","sourceRoot":"","sources":["../../src/chart-builders/ColumnsContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EACb,UAAU,EACV,OAAO,GAGR,MAAM,OAAO,CAAC;AAQf,MAAM,cAAc,GAAG,aAAa,CAA6B,IAAI,CAAC,CAAC;AAEvE,MAAM,UAAU,iBAAiB;IAC/B,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAOD,MAAM,CAAC,MAAM,eAAe,GAA6B,CAAC,EACxD,OAAO,EACP,SAAS,EACT,QAAQ,GACT,EAAE,EAAE;IACH,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAC,OAAO,EAAE,SAAS,EAAC,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAE1E,OAAO,CACL,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAA2B,CAC5E,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {\n createContext,\n useContext,\n useMemo,\n type FC,\n type PropsWithChildren,\n} from 'react';\nimport type {TableColumn} from '@sqlrooms/duckdb';\n\nexport interface ColumnsContextValue {\n columns: TableColumn[];\n tableName?: string;\n}\n\nconst ColumnsContext = createContext<ColumnsContextValue | null>(null);\n\nexport function useColumnsContext(): ColumnsContextValue {\n const context = useContext(ColumnsContext);\n if (!context) {\n throw new Error('useColumnsContext must be used within a ColumnsProvider');\n }\n\n return context;\n}\n\nexport interface ColumnsProviderProps extends PropsWithChildren {\n columns: TableColumn[];\n tableName?: string;\n}\n\nexport const ColumnsProvider: FC<ColumnsProviderProps> = ({\n columns,\n tableName,\n children,\n}) => {\n const value = useMemo(() => ({columns, tableName}), [columns, tableName]);\n\n return (\n <ColumnsContext.Provider value={value}>{children}</ColumnsContext.Provider>\n );\n};\n"]}
@@ -4,7 +4,7 @@ import { Trash2 } from 'lucide-react';
4
4
  import { useCallback, useMemo } from 'react';
5
5
  import { ColumnSelector } from './ColumnSelector';
6
6
  import { AggregationSelector } from './AggregationSelector';
7
- import { useChartSettingsContext } from '../chart/chart-settings/ChartSettingsContext';
7
+ import { ColumnsProvider, useColumnsContext } from './ColumnsContext';
8
8
  import { NUMERIC_COLUMN_TYPES, QUANTITATIVE_COLUMN_TYPES, CATEGORICAL_COLUMN_TYPES, } from './constants';
9
9
  /**
10
10
  * Manages an array of field configurations with add/update/remove logic.
@@ -17,7 +17,7 @@ import { NUMERIC_COLUMN_TYPES, QUANTITATIVE_COLUMN_TYPES, CATEGORICAL_COLUMN_TYP
17
17
  * - `<MultiFieldSelector.Categorical />` - text/enum types
18
18
  */
19
19
  const MultiFieldSelectorRoot = ({ types, value, onChange, showAggregation = false, }) => {
20
- const { columns } = useChartSettingsContext();
20
+ const { columns, tableName } = useColumnsContext();
21
21
  const selectedFieldNames = useMemo(() => value.map((v) => v.field), [value]);
22
22
  const availableColumns = useMemo(() => columns.filter((col) => !selectedFieldNames.includes(col.name)), [columns, selectedFieldNames]);
23
23
  const handleUpdate = useCallback((index, updates) => {
@@ -39,8 +39,8 @@ const MultiFieldSelectorRoot = ({ types, value, onChange, showAggregation = fals
39
39
  gridTemplateColumns: showAggregation
40
40
  ? 'minmax(120px, 1fr) 100px 32px'
41
41
  : 'minmax(120px, 1fr) 32px',
42
- }, children: [_jsx(ColumnSelector, { columns: columns, types: types, value: fieldConfig.field, onChange: (newField) => handleUpdate(index, { field: newField }) }), showAggregation && (_jsx(AggregationSelector, { value: aggregate, onChange: (agg) => handleUpdate(index, { aggregate: agg }) })), _jsx(Button, { variant: "ghost", size: "icon", onClick: () => handleRemove(index), className: "h-8 w-8 shrink-0", children: _jsx(Trash2, { className: "text-destructive h-4 w-4" }) })] }, fieldConfig.field));
43
- }), _jsx(ColumnSelector, { columns: availableColumns, types: types, value: undefined, onChange: handleAdd, placeholder: "Select field..." })] }));
42
+ }, children: [_jsx(ColumnSelector, { types: types, value: fieldConfig.field, onChange: (newField) => handleUpdate(index, { field: newField }) }), showAggregation && (_jsx(AggregationSelector, { value: aggregate, onChange: (agg) => handleUpdate(index, { aggregate: agg }) })), _jsx(Button, { variant: "ghost", size: "icon", onClick: () => handleRemove(index), className: "h-8 w-8 shrink-0", children: _jsx(Trash2, { className: "text-destructive h-4 w-4" }) })] }, fieldConfig.field));
43
+ }), _jsx(ColumnsProvider, { columns: availableColumns, tableName: tableName, children: _jsx(ColumnSelector, { types: types, value: undefined, onChange: handleAdd, placeholder: "Select field..." }) })] }));
44
44
  };
45
45
  const Numeric = (props) => (_jsx(MultiFieldSelectorRoot, { ...props, types: NUMERIC_COLUMN_TYPES }));
46
46
  const Quantitative = (props) => (_jsx(MultiFieldSelectorRoot, { ...props, types: QUANTITATIVE_COLUMN_TYPES }));
@@ -1 +1 @@
1
- {"version":3,"file":"MultiFieldSelector.js","sourceRoot":"","sources":["../../src/chart-builders/MultiFieldSelector.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACpC,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACpC,OAAO,EAAC,WAAW,EAAE,OAAO,EAAU,MAAM,OAAO,CAAC;AACpD,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAC,uBAAuB,EAAC,MAAM,8CAA8C,CAAC;AACrF,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAUrB;;;;;;;;;GASG;AACH,MAAM,sBAAsB,GAAgC,CAAC,EAC3D,KAAK,EACL,KAAK,EACL,QAAQ,EACR,eAAe,GAAG,KAAK,GACxB,EAAE,EAAE;IACH,MAAM,EAAC,OAAO,EAAC,GAAG,uBAAuB,EAAE,CAAC;IAE5C,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAE7E,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EACrE,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAC9B,CAAC;IAEF,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,KAAa,EAAE,OAAmC,EAAE,EAAE;QACrD,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,GAAG,EAAC,GAAG,OAAO,CAAC,KAAK,CAAE,EAAE,GAAG,OAAO,EAAC,CAAC;QAClD,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC,EACD,CAAC,KAAK,EAAE,QAAQ,CAAC,CAClB,CAAC;IAEF,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,KAAa,EAAE,EAAE;QAChB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;IAChD,CAAC,EACD,CAAC,KAAK,EAAE,QAAQ,CAAC,CAClB,CAAC;IAEF,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,SAAiB,EAAE,EAAE;QACpB,IAAI,SAAS,EAAE,CAAC;YACd,QAAQ,CAAC,CAAC,GAAG,KAAK,EAAE,EAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,EACD,CAAC,KAAK,EAAE,QAAQ,CAAC,CAClB,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAC,WAAW,aACvB,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE;gBAChC,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,IAAI,KAAK,CAAC;gBAEjD,OAAO,CACL,eAEE,SAAS,EAAC,sBAAsB,EAChC,KAAK,EAAE;wBACL,mBAAmB,EAAE,eAAe;4BAClC,CAAC,CAAC,+BAA+B;4BACjC,CAAC,CAAC,yBAAyB;qBAC9B,aAED,KAAC,cAAc,IACb,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,WAAW,CAAC,KAAK,EACxB,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,EAAC,KAAK,EAAE,QAAQ,EAAC,CAAC,GAC9D,EAED,eAAe,IAAI,CAClB,KAAC,mBAAmB,IAClB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,CAAC,GAAsB,EAAE,EAAE,CACnC,YAAY,CAAC,KAAK,EAAE,EAAC,SAAS,EAAE,GAAG,EAAC,CAAC,GAEvC,CACH,EAED,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,MAAM,EACX,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAClC,SAAS,EAAC,kBAAkB,YAE5B,KAAC,MAAM,IAAC,SAAS,EAAC,0BAA0B,GAAG,GACxC,KA/BJ,WAAW,CAAC,KAAK,CAgClB,CACP,CAAC;YACJ,CAAC,CAAC,EAEF,KAAC,cAAc,IACb,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,SAAS,EACnB,WAAW,EAAC,iBAAiB,GAC7B,IACE,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,OAAO,GAA+C,CAAC,KAAK,EAAE,EAAE,CAAC,CACrE,KAAC,sBAAsB,OAAK,KAAK,EAAE,KAAK,EAAE,oBAAoB,GAAI,CACnE,CAAC;AAEF,MAAM,YAAY,GAA+C,CAAC,KAAK,EAAE,EAAE,CAAC,CAC1E,KAAC,sBAAsB,OAAK,KAAK,EAAE,KAAK,EAAE,yBAAyB,GAAI,CACxE,CAAC;AAEF,MAAM,WAAW,GAA+C,CAAC,KAAK,EAAE,EAAE,CAAC,CACzE,KAAC,sBAAsB,OAAK,KAAK,EAAE,KAAK,EAAE,wBAAwB,GAAI,CACvE,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE;IACtE,OAAO;IACP,YAAY;IACZ,WAAW;CACZ,CAAC,CAAC","sourcesContent":["import {Button} from '@sqlrooms/ui';\nimport {Trash2} from 'lucide-react';\nimport {useCallback, useMemo, type FC} from 'react';\nimport {ColumnSelector} from './ColumnSelector';\nimport {AggregationSelector} from './AggregationSelector';\nimport type {AggregateFunction} from '../chart-types/line-chart/schema';\nimport {useChartSettingsContext} from '../chart/chart-settings/ChartSettingsContext';\nimport {\n NUMERIC_COLUMN_TYPES,\n QUANTITATIVE_COLUMN_TYPES,\n CATEGORICAL_COLUMN_TYPES,\n} from './constants';\nimport type {YFieldConfig} from '../chart-types/line-chart/schema';\n\nexport interface MultiFieldSelectorProps {\n types?: string[];\n value: YFieldConfig[];\n onChange: (value: YFieldConfig[]) => void;\n showAggregation?: boolean;\n}\n\n/**\n * Manages an array of field configurations with add/update/remove logic.\n * Emits the full updated array on every change.\n *\n * Can be used as:\n * - `<MultiFieldSelector types={...} />` - custom types\n * - `<MultiFieldSelector.Numeric />` - numeric types only\n * - `<MultiFieldSelector.Quantitative />` - numeric + temporal\n * - `<MultiFieldSelector.Categorical />` - text/enum types\n */\nconst MultiFieldSelectorRoot: FC<MultiFieldSelectorProps> = ({\n types,\n value,\n onChange,\n showAggregation = false,\n}) => {\n const {columns} = useChartSettingsContext();\n\n const selectedFieldNames = useMemo(() => value.map((v) => v.field), [value]);\n\n const availableColumns = useMemo(\n () => columns.filter((col) => !selectedFieldNames.includes(col.name)),\n [columns, selectedFieldNames],\n );\n\n const handleUpdate = useCallback(\n (index: number, updates: Partial<(typeof value)[0]>) => {\n const updated = [...value];\n updated[index] = {...updated[index]!, ...updates};\n onChange(updated);\n },\n [value, onChange],\n );\n\n const handleRemove = useCallback(\n (index: number) => {\n onChange(value.filter((_, i) => i !== index));\n },\n [value, onChange],\n );\n\n const handleAdd = useCallback(\n (fieldName: string) => {\n if (fieldName) {\n onChange([...value, {field: fieldName, aggregate: 'sum'}]);\n }\n },\n [value, onChange],\n );\n\n return (\n <div className=\"space-y-1\">\n {value.map((fieldConfig, index) => {\n const aggregate = fieldConfig.aggregate || 'sum';\n\n return (\n <div\n key={fieldConfig.field}\n className=\"grid items-end gap-2\"\n style={{\n gridTemplateColumns: showAggregation\n ? 'minmax(120px, 1fr) 100px 32px'\n : 'minmax(120px, 1fr) 32px',\n }}\n >\n <ColumnSelector\n columns={columns}\n types={types}\n value={fieldConfig.field}\n onChange={(newField) => handleUpdate(index, {field: newField})}\n />\n\n {showAggregation && (\n <AggregationSelector\n value={aggregate}\n onChange={(agg: AggregateFunction) =>\n handleUpdate(index, {aggregate: agg})\n }\n />\n )}\n\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => handleRemove(index)}\n className=\"h-8 w-8 shrink-0\"\n >\n <Trash2 className=\"text-destructive h-4 w-4\" />\n </Button>\n </div>\n );\n })}\n\n <ColumnSelector\n columns={availableColumns}\n types={types}\n value={undefined}\n onChange={handleAdd}\n placeholder=\"Select field...\"\n />\n </div>\n );\n};\n\nconst Numeric: FC<Omit<MultiFieldSelectorProps, 'types'>> = (props) => (\n <MultiFieldSelectorRoot {...props} types={NUMERIC_COLUMN_TYPES} />\n);\n\nconst Quantitative: FC<Omit<MultiFieldSelectorProps, 'types'>> = (props) => (\n <MultiFieldSelectorRoot {...props} types={QUANTITATIVE_COLUMN_TYPES} />\n);\n\nconst Categorical: FC<Omit<MultiFieldSelectorProps, 'types'>> = (props) => (\n <MultiFieldSelectorRoot {...props} types={CATEGORICAL_COLUMN_TYPES} />\n);\n\nexport const MultiFieldSelector = Object.assign(MultiFieldSelectorRoot, {\n Numeric,\n Quantitative,\n Categorical,\n});\n"]}
1
+ {"version":3,"file":"MultiFieldSelector.js","sourceRoot":"","sources":["../../src/chart-builders/MultiFieldSelector.tsx"],"names":[],"mappings":"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","sourcesContent":["import {Button} from '@sqlrooms/ui';\nimport {Trash2} from 'lucide-react';\nimport {useCallback, useMemo, type FC} from 'react';\nimport {ColumnSelector} from './ColumnSelector';\nimport {AggregationSelector} from './AggregationSelector';\nimport type {AggregateFunction} from '../chart-types/line-chart/schema';\nimport {ColumnsProvider, useColumnsContext} from './ColumnsContext';\nimport {\n NUMERIC_COLUMN_TYPES,\n QUANTITATIVE_COLUMN_TYPES,\n CATEGORICAL_COLUMN_TYPES,\n} from './constants';\nimport type {YFieldConfig} from '../chart-types/line-chart/schema';\n\nexport interface MultiFieldSelectorProps {\n types?: string[];\n value: YFieldConfig[];\n onChange: (value: YFieldConfig[]) => void;\n showAggregation?: boolean;\n}\n\n/**\n * Manages an array of field configurations with add/update/remove logic.\n * Emits the full updated array on every change.\n *\n * Can be used as:\n * - `<MultiFieldSelector types={...} />` - custom types\n * - `<MultiFieldSelector.Numeric />` - numeric types only\n * - `<MultiFieldSelector.Quantitative />` - numeric + temporal\n * - `<MultiFieldSelector.Categorical />` - text/enum types\n */\nconst MultiFieldSelectorRoot: FC<MultiFieldSelectorProps> = ({\n types,\n value,\n onChange,\n showAggregation = false,\n}) => {\n const {columns, tableName} = useColumnsContext();\n\n const selectedFieldNames = useMemo(() => value.map((v) => v.field), [value]);\n\n const availableColumns = useMemo(\n () => columns.filter((col) => !selectedFieldNames.includes(col.name)),\n [columns, selectedFieldNames],\n );\n\n const handleUpdate = useCallback(\n (index: number, updates: Partial<(typeof value)[0]>) => {\n const updated = [...value];\n updated[index] = {...updated[index]!, ...updates};\n onChange(updated);\n },\n [value, onChange],\n );\n\n const handleRemove = useCallback(\n (index: number) => {\n onChange(value.filter((_, i) => i !== index));\n },\n [value, onChange],\n );\n\n const handleAdd = useCallback(\n (fieldName: string) => {\n if (fieldName) {\n onChange([...value, {field: fieldName, aggregate: 'sum'}]);\n }\n },\n [value, onChange],\n );\n\n return (\n <div className=\"space-y-1\">\n {value.map((fieldConfig, index) => {\n const aggregate = fieldConfig.aggregate || 'sum';\n\n return (\n <div\n key={fieldConfig.field}\n className=\"grid items-end gap-2\"\n style={{\n gridTemplateColumns: showAggregation\n ? 'minmax(120px, 1fr) 100px 32px'\n : 'minmax(120px, 1fr) 32px',\n }}\n >\n <ColumnSelector\n types={types}\n value={fieldConfig.field}\n onChange={(newField) => handleUpdate(index, {field: newField})}\n />\n\n {showAggregation && (\n <AggregationSelector\n value={aggregate}\n onChange={(agg: AggregateFunction) =>\n handleUpdate(index, {aggregate: agg})\n }\n />\n )}\n\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => handleRemove(index)}\n className=\"h-8 w-8 shrink-0\"\n >\n <Trash2 className=\"text-destructive h-4 w-4\" />\n </Button>\n </div>\n );\n })}\n\n <ColumnsProvider columns={availableColumns} tableName={tableName}>\n <ColumnSelector\n types={types}\n value={undefined}\n onChange={handleAdd}\n placeholder=\"Select field...\"\n />\n </ColumnsProvider>\n </div>\n );\n};\n\nconst Numeric: FC<Omit<MultiFieldSelectorProps, 'types'>> = (props) => (\n <MultiFieldSelectorRoot {...props} types={NUMERIC_COLUMN_TYPES} />\n);\n\nconst Quantitative: FC<Omit<MultiFieldSelectorProps, 'types'>> = (props) => (\n <MultiFieldSelectorRoot {...props} types={QUANTITATIVE_COLUMN_TYPES} />\n);\n\nconst Categorical: FC<Omit<MultiFieldSelectorProps, 'types'>> = (props) => (\n <MultiFieldSelectorRoot {...props} types={CATEGORICAL_COLUMN_TYPES} />\n);\n\nexport const MultiFieldSelector = Object.assign(MultiFieldSelectorRoot, {\n Numeric,\n Quantitative,\n Categorical,\n});\n"]}
@@ -0,0 +1,14 @@
1
+ import { type FC } from 'react';
2
+ export interface TableSelectorProps {
3
+ value: string | undefined;
4
+ onChange?: (tableName: string) => void;
5
+ placeholder?: string;
6
+ }
7
+ /**
8
+ * Table selector component for choosing a table from available tables.
9
+ * Uses a searchable dropdown with command palette pattern.
10
+ *
11
+ * Filters to only show tables that have columns defined.
12
+ */
13
+ export declare const TableSelector: FC<TableSelectorProps>;
14
+ //# sourceMappingURL=TableSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableSelector.d.ts","sourceRoot":"","sources":["../../src/chart-builders/TableSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAW,MAAM,OAAO,CAAC;AAgBxC,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,kBAAkB,CAqDhD,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { Button, Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, Popover, PopoverContent, PopoverTrigger, } from '@sqlrooms/ui';
4
+ import { Check, ChevronsUpDown } from 'lucide-react';
5
+ import { useTablesWithColumns } from '../dashboard/useTablesWithColumns';
6
+ /**
7
+ * Table selector component for choosing a table from available tables.
8
+ * Uses a searchable dropdown with command palette pattern.
9
+ *
10
+ * Filters to only show tables that have columns defined.
11
+ */
12
+ export const TableSelector = ({ value, onChange, placeholder = 'Select table…', }) => {
13
+ const [open, setOpen] = useState(false);
14
+ const tables = useTablesWithColumns();
15
+ return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", size: "sm", role: "combobox", "aria-expanded": open, className: "w-full justify-between text-xs", children: [_jsx("span", { className: "truncate", children: value || placeholder }), _jsx(ChevronsUpDown, { className: "ml-1 h-3.5 w-3.5 shrink-0 opacity-50" })] }) }), _jsx(PopoverContent, { className: "w-[300px] p-0 text-xs", align: "start", children: _jsxs(Command, { children: [_jsx(CommandInput, { placeholder: "Search tables\u2026", className: "text-xs" }), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { className: "text-xs", children: "No tables found." }), _jsx(CommandGroup, { children: tables.map((table) => {
16
+ const tableName = table.table.table;
17
+ return (_jsxs(CommandItem, { value: tableName, onSelect: (selectedValue) => {
18
+ onChange?.(selectedValue);
19
+ setOpen(false);
20
+ }, className: "text-xs", children: [_jsx(Check, { className: `mr-2 h-3.5 w-3.5 ${value === tableName ? 'opacity-100' : 'opacity-0'}` }), tableName] }, tableName));
21
+ }) })] })] }) })] }));
22
+ };
23
+ //# sourceMappingURL=TableSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableSelector.js","sourceRoot":"","sources":["../../src/chart-builders/TableSelector.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAU,QAAQ,EAAC,MAAM,OAAO,CAAC;AACxC,OAAO,EACL,MAAM,EACN,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,WAAW,EACX,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,KAAK,EAAE,cAAc,EAAC,MAAM,cAAc,CAAC;AACnD,OAAO,EAAC,oBAAoB,EAAC,MAAM,mCAAmC,CAAC;AAQvE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAA2B,CAAC,EACpD,KAAK,EACL,QAAQ,EACR,WAAW,GAAG,eAAe,GAC9B,EAAE,EAAE;IACH,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IAEtC,OAAO,CACL,MAAC,OAAO,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,aACxC,KAAC,cAAc,IAAC,OAAO,kBACrB,MAAC,MAAM,IACL,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,IAAI,EACT,IAAI,EAAC,UAAU,mBACA,IAAI,EACnB,SAAS,EAAC,gCAAgC,aAE1C,eAAM,SAAS,EAAC,UAAU,YAAE,KAAK,IAAI,WAAW,GAAQ,EACxD,KAAC,cAAc,IAAC,SAAS,EAAC,sCAAsC,GAAG,IAC5D,GACM,EACjB,KAAC,cAAc,IAAC,SAAS,EAAC,uBAAuB,EAAC,KAAK,EAAC,OAAO,YAC7D,MAAC,OAAO,eACN,KAAC,YAAY,IAAC,WAAW,EAAC,qBAAgB,EAAC,SAAS,EAAC,SAAS,GAAG,EACjE,MAAC,WAAW,eACV,KAAC,YAAY,IAAC,SAAS,EAAC,SAAS,iCAAgC,EACjE,KAAC,YAAY,cACV,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;wCACpB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;wCACpC,OAAO,CACL,MAAC,WAAW,IAEV,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,CAAC,aAAa,EAAE,EAAE;gDAC1B,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC;gDAC1B,OAAO,CAAC,KAAK,CAAC,CAAC;4CACjB,CAAC,EACD,SAAS,EAAC,SAAS,aAEnB,KAAC,KAAK,IACJ,SAAS,EAAE,oBAAoB,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,EAAE,GAClF,EACD,SAAS,KAXL,SAAS,CAYF,CACf,CAAC;oCACJ,CAAC,CAAC,GACW,IACH,IACN,GACK,IACT,CACX,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {type FC, useState} from 'react';\nimport {\n Button,\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '@sqlrooms/ui';\nimport {Check, ChevronsUpDown} from 'lucide-react';\nimport {useTablesWithColumns} from '../dashboard/useTablesWithColumns';\n\nexport interface TableSelectorProps {\n value: string | undefined;\n onChange?: (tableName: string) => void;\n placeholder?: string;\n}\n\n/**\n * Table selector component for choosing a table from available tables.\n * Uses a searchable dropdown with command palette pattern.\n *\n * Filters to only show tables that have columns defined.\n */\nexport const TableSelector: FC<TableSelectorProps> = ({\n value,\n onChange,\n placeholder = 'Select table…',\n}) => {\n const [open, setOpen] = useState(false);\n const tables = useTablesWithColumns();\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n role=\"combobox\"\n aria-expanded={open}\n className=\"w-full justify-between text-xs\"\n >\n <span className=\"truncate\">{value || placeholder}</span>\n <ChevronsUpDown className=\"ml-1 h-3.5 w-3.5 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[300px] p-0 text-xs\" align=\"start\">\n <Command>\n <CommandInput placeholder=\"Search tables…\" className=\"text-xs\" />\n <CommandList>\n <CommandEmpty className=\"text-xs\">No tables found.</CommandEmpty>\n <CommandGroup>\n {tables.map((table) => {\n const tableName = table.table.table;\n return (\n <CommandItem\n key={tableName}\n value={tableName}\n onSelect={(selectedValue) => {\n onChange?.(selectedValue);\n setOpen(false);\n }}\n className=\"text-xs\"\n >\n <Check\n className={`mr-2 h-3.5 w-3.5 ${value === tableName ? 'opacity-100' : 'opacity-0'}`}\n />\n {tableName}\n </CommandItem>\n );\n })}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n );\n};\n"]}