@sqlrooms/mosaic 0.29.0-rc.4 → 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
@@ -0,0 +1,3 @@
1
+ import { type MosaicDashboardAddPanelAction } from './action-types';
2
+ export declare const defaultAddPanelActions: MosaicDashboardAddPanelAction[];
3
+ //# sourceMappingURL=defaultPanelActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultPanelActions.d.ts","sourceRoot":"","sources":["../../src/dashboard/defaultPanelActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,6BAA6B,EAAC,MAAM,gBAAgB,CAAC;AAKlE,eAAO,MAAM,sBAAsB,EAAE,6BAA6B,EAIjE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { addTextPanelAction } from '../text/addTextPanelAction';
2
+ import { addProfilerPanelAction } from '../profiler/addProfilerPanelAction';
3
+ import { addChartPanelAction } from '../chart/addChartPanelAction';
4
+ export const defaultAddPanelActions = [
5
+ addProfilerPanelAction,
6
+ addTextPanelAction,
7
+ addChartPanelAction,
8
+ ];
9
+ //# sourceMappingURL=defaultPanelActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultPanelActions.js","sourceRoot":"","sources":["../../src/dashboard/defaultPanelActions.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAC,sBAAsB,EAAC,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAC,mBAAmB,EAAC,MAAM,8BAA8B,CAAC;AAEjE,MAAM,CAAC,MAAM,sBAAsB,GAAoC;IACrE,sBAAsB;IACtB,kBAAkB;IAClB,mBAAmB;CACpB,CAAC","sourcesContent":["import {type MosaicDashboardAddPanelAction} from './action-types';\nimport {addTextPanelAction} from '../text/addTextPanelAction';\nimport {addProfilerPanelAction} from '../profiler/addProfilerPanelAction';\nimport {addChartPanelAction} from '../chart/addChartPanelAction';\n\nexport const defaultAddPanelActions: MosaicDashboardAddPanelAction[] = [\n addProfilerPanelAction,\n addTextPanelAction,\n addChartPanelAction,\n];\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"defaultPanelRenderers.d.ts","sourceRoot":"","sources":["../../src/dashboard/defaultPanelRenderers.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,oBAAoB,EAC1B,MAAM,wBAAwB,CAAC;AAKhC,wBAAgB,0CAA0C,CACxD,cAAc,GAAE,oBAAyB,GACxC,oBAAoB,CAUtB"}
1
+ {"version":3,"file":"defaultPanelRenderers.d.ts","sourceRoot":"","sources":["../../src/dashboard/defaultPanelRenderers.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,wBAAwB,CAAC;AAKhC,wBAAgB,0CAA0C,CACxD,cAAc,GAAE,oBAAyB,GACxC,oBAAoB,CAUtB"}
@@ -1,4 +1,4 @@
1
- import { MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE, MOSAIC_DASHBOARD_CHART_PANEL_TYPE, MOSAIC_DASHBOARD_TEXT_PANEL_TYPE, } from './MosaicDashboardSlice';
1
+ import { MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE, MOSAIC_DASHBOARD_CHART_PANEL_TYPE, MOSAIC_DASHBOARD_TEXT_PANEL_TYPE, } from './dashboard-types';
2
2
  import { mosaicDashboardProfilerPanelRenderer } from '../profiler/MosaicDashboardProfilerPanelRenderer';
3
3
  import { mosaicDashboardChartRenderer } from '../chart/MosaicDashboardChartRenderer';
4
4
  import { mosaicDashboardTextRenderer } from '../text/MosaicDashboardTextRenderer';
@@ -1 +1 @@
1
- {"version":3,"file":"defaultPanelRenderers.js","sourceRoot":"","sources":["../../src/dashboard/defaultPanelRenderers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oCAAoC,EACpC,iCAAiC,EACjC,gCAAgC,GAGjC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAC,oCAAoC,EAAC,MAAM,kDAAkD,CAAC;AACtG,OAAO,EAAC,4BAA4B,EAAC,MAAM,uCAAuC,CAAC;AACnF,OAAO,EAAC,2BAA2B,EAAC,MAAM,qCAAqC,CAAC;AAEhF,MAAM,UAAU,0CAA0C,CACxD,iBAAuC,EAAE;IAEzC,OAAO;QACL,CAAC,iCAAiC,CAAC,EACjC,4BAAgD;QAClD,CAAC,oCAAoC,CAAC,EACpC,oCAAwD;QAC1D,CAAC,gCAAgC,CAAC,EAChC,2BAA+C;QACjD,GAAG,cAAc;KAClB,CAAC;AACJ,CAAC","sourcesContent":["import {\n MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE,\n MOSAIC_DASHBOARD_CHART_PANEL_TYPE,\n MOSAIC_DASHBOARD_TEXT_PANEL_TYPE,\n type AnyPanelRenderer,\n type PanelRenderersRecord,\n} from './MosaicDashboardSlice';\nimport {mosaicDashboardProfilerPanelRenderer} from '../profiler/MosaicDashboardProfilerPanelRenderer';\nimport {mosaicDashboardChartRenderer} from '../chart/MosaicDashboardChartRenderer';\nimport {mosaicDashboardTextRenderer} from '../text/MosaicDashboardTextRenderer';\n\nexport function createDefaultMosaicDashboardPanelRenderers(\n extraRenderers: PanelRenderersRecord = {},\n): PanelRenderersRecord {\n return {\n [MOSAIC_DASHBOARD_CHART_PANEL_TYPE]:\n mosaicDashboardChartRenderer as AnyPanelRenderer,\n [MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE]:\n mosaicDashboardProfilerPanelRenderer as AnyPanelRenderer,\n [MOSAIC_DASHBOARD_TEXT_PANEL_TYPE]:\n mosaicDashboardTextRenderer as AnyPanelRenderer,\n ...extraRenderers,\n };\n}\n"]}
1
+ {"version":3,"file":"defaultPanelRenderers.js","sourceRoot":"","sources":["../../src/dashboard/defaultPanelRenderers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oCAAoC,EACpC,iCAAiC,EACjC,gCAAgC,GACjC,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EAAC,oCAAoC,EAAC,MAAM,kDAAkD,CAAC;AACtG,OAAO,EAAC,4BAA4B,EAAC,MAAM,uCAAuC,CAAC;AACnF,OAAO,EAAC,2BAA2B,EAAC,MAAM,qCAAqC,CAAC;AAEhF,MAAM,UAAU,0CAA0C,CACxD,iBAAuC,EAAE;IAEzC,OAAO;QACL,CAAC,iCAAiC,CAAC,EACjC,4BAAgD;QAClD,CAAC,oCAAoC,CAAC,EACpC,oCAAwD;QAC1D,CAAC,gCAAgC,CAAC,EAChC,2BAA+C;QACjD,GAAG,cAAc;KAClB,CAAC;AACJ,CAAC","sourcesContent":["import {\n MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE,\n MOSAIC_DASHBOARD_CHART_PANEL_TYPE,\n MOSAIC_DASHBOARD_TEXT_PANEL_TYPE,\n} from './dashboard-types';\nimport {\n type AnyPanelRenderer,\n type PanelRenderersRecord,\n} from './MosaicDashboardSlice';\nimport {mosaicDashboardProfilerPanelRenderer} from '../profiler/MosaicDashboardProfilerPanelRenderer';\nimport {mosaicDashboardChartRenderer} from '../chart/MosaicDashboardChartRenderer';\nimport {mosaicDashboardTextRenderer} from '../text/MosaicDashboardTextRenderer';\n\nexport function createDefaultMosaicDashboardPanelRenderers(\n extraRenderers: PanelRenderersRecord = {},\n): PanelRenderersRecord {\n return {\n [MOSAIC_DASHBOARD_CHART_PANEL_TYPE]:\n mosaicDashboardChartRenderer as AnyPanelRenderer,\n [MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE]:\n mosaicDashboardProfilerPanelRenderer as AnyPanelRenderer,\n [MOSAIC_DASHBOARD_TEXT_PANEL_TYPE]:\n mosaicDashboardTextRenderer as AnyPanelRenderer,\n ...extraRenderers,\n };\n}\n"]}
@@ -0,0 +1,6 @@
1
+ export interface BuildDashboardManuallyPanelProps {
2
+ isStarting: boolean;
3
+ onStartingChange: (isStarting: boolean) => void;
4
+ }
5
+ export declare const BuildDashboardManuallyPanel: React.FC<BuildDashboardManuallyPanelProps>;
6
+ //# sourceMappingURL=BuildDashboardManuallyPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuildDashboardManuallyPanel.d.ts","sourceRoot":"","sources":["../../../src/dashboard/initial-state/BuildDashboardManuallyPanel.tsx"],"names":[],"mappings":"AAUA,MAAM,WAAW,gCAAgC;IAC/C,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;CACjD;AAED,eAAO,MAAM,2BAA2B,EAAE,KAAK,CAAC,EAAE,CAChD,gCAAgC,CAgFjC,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button } from '@sqlrooms/ui';
3
+ import { useCallback, useState } from 'react';
4
+ import { TableSelector } from '../../chart-builders/TableSelector';
5
+ import { Field } from '../../chart-builders/Field';
6
+ import { useMosaicDashboardContext } from '../MosaicDashboardContext';
7
+ import { useStoreWithMosaicDashboard, createMosaicDashboardProfilerPanelConfig, } from '../MosaicDashboardSlice';
8
+ export const BuildDashboardManuallyPanel = ({ isStarting, onStartingChange }) => {
9
+ const { dashboardId } = useMosaicDashboardContext();
10
+ const setSelectedTable = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.setSelectedTable);
11
+ const addPanel = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.addPanel);
12
+ const tables = useStoreWithMosaicDashboard((state) => state.db.tables);
13
+ const [tableName, setTableName] = useState(undefined);
14
+ const handleStart = useCallback(() => {
15
+ if (!tableName || isStarting)
16
+ return;
17
+ onStartingChange(true);
18
+ try {
19
+ // Set the selected table
20
+ setSelectedTable(dashboardId, tableName);
21
+ // Find the table info to get the proper title
22
+ const tableInfo = tables.find((t) => t.table.table === tableName);
23
+ const title = tableInfo
24
+ ? `${tableInfo.table.table} profiler`
25
+ : `${tableName} profiler`;
26
+ // Create and add a profiler panel
27
+ const profilerPanel = createMosaicDashboardProfilerPanelConfig({
28
+ title,
29
+ });
30
+ addPanel(dashboardId, profilerPanel);
31
+ }
32
+ finally {
33
+ onStartingChange(false);
34
+ }
35
+ }, [
36
+ tableName,
37
+ dashboardId,
38
+ setSelectedTable,
39
+ addPanel,
40
+ tables,
41
+ onStartingChange,
42
+ isStarting,
43
+ ]);
44
+ return (_jsxs("div", { className: "bg-card flex flex-col gap-4 rounded-lg border p-6", children: [_jsxs("div", { children: [_jsx("h3", { className: "mb-1 font-medium", children: "Create Manually" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Start with a data profiler and build your dashboard step by step" })] }), _jsxs("div", { className: "flex flex-1 flex-col gap-3", children: [_jsx(Field, { label: "Table", required: true, children: _jsx(TableSelector, { value: tableName, onChange: setTableName, placeholder: "Select table\u2026" }) }), _jsxs("div", { className: "text-muted-foreground flex-1 space-y-2 text-sm", children: [_jsx("p", { children: "This will create a dashboard with:" }), _jsxs("ul", { className: "ml-4 list-disc space-y-1", children: [_jsx("li", { children: "Data profiler for exploring your table" }), _jsx("li", { children: "Quick stats and column information" }), _jsx("li", { children: "Ability to add charts and visualizations" })] })] }), _jsx(Button, { className: "mt-auto w-full", variant: "outline", disabled: !tableName || isStarting, onClick: handleStart, children: isStarting ? 'Starting...' : 'Create Dashboard' })] })] }));
45
+ };
46
+ //# sourceMappingURL=BuildDashboardManuallyPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuildDashboardManuallyPanel.js","sourceRoot":"","sources":["../../../src/dashboard/initial-state/BuildDashboardManuallyPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACpC,OAAO,EAAC,WAAW,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAC,aAAa,EAAC,MAAM,oCAAoC,CAAC;AACjE,OAAO,EAAC,KAAK,EAAC,MAAM,4BAA4B,CAAC;AACjD,OAAO,EAAC,yBAAyB,EAAC,MAAM,2BAA2B,CAAC;AACpE,OAAO,EACL,2BAA2B,EAC3B,wCAAwC,GACzC,MAAM,yBAAyB,CAAC;AAOjC,MAAM,CAAC,MAAM,2BAA2B,GAEpC,CAAC,EAAC,UAAU,EAAE,gBAAgB,EAAC,EAAE,EAAE;IACrC,MAAM,EAAC,WAAW,EAAC,GAAG,yBAAyB,EAAE,CAAC;IAClD,MAAM,gBAAgB,GAAG,2BAA2B,CAClD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,gBAAgB,CAClD,CAAC;IACF,MAAM,QAAQ,GAAG,2BAA2B,CAC1C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,CAC1C,CAAC;IACF,MAAM,MAAM,GAAG,2BAA2B,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAEvE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAC;IAE1E,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,IAAI,CAAC,SAAS,IAAI,UAAU;YAAE,OAAO;QAErC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC;YACH,yBAAyB;YACzB,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAEzC,8CAA8C;YAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;YAClE,MAAM,KAAK,GAAG,SAAS;gBACrB,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,WAAW;gBACrC,CAAC,CAAC,GAAG,SAAS,WAAW,CAAC;YAE5B,kCAAkC;YAClC,MAAM,aAAa,GAAG,wCAAwC,CAAC;gBAC7D,KAAK;aACN,CAAC,CAAC;YACH,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACvC,CAAC;gBAAS,CAAC;YACT,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,EAAE;QACD,SAAS;QACT,WAAW;QACX,gBAAgB;QAChB,QAAQ;QACR,MAAM;QACN,gBAAgB;QAChB,UAAU;KACX,CAAC,CAAC;IAEH,OAAO,CACL,eAAK,SAAS,EAAC,mDAAmD,aAChE,0BACE,aAAI,SAAS,EAAC,kBAAkB,gCAAqB,EACrD,YAAG,SAAS,EAAC,+BAA+B,iFAExC,IACA,EACN,eAAK,SAAS,EAAC,4BAA4B,aACzC,KAAC,KAAK,IAAC,KAAK,EAAC,OAAO,EAAC,QAAQ,kBAC3B,KAAC,aAAa,IACZ,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAC,oBAAe,GAC3B,GACI,EACR,eAAK,SAAS,EAAC,gDAAgD,aAC7D,6DAAyC,EACzC,cAAI,SAAS,EAAC,0BAA0B,aACtC,kEAA+C,EAC/C,8DAA2C,EAC3C,oEAAiD,IAC9C,IACD,EACN,KAAC,MAAM,IACL,SAAS,EAAC,gBAAgB,EAC1B,OAAO,EAAC,SAAS,EACjB,QAAQ,EAAE,CAAC,SAAS,IAAI,UAAU,EAClC,OAAO,EAAE,WAAW,YAEnB,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,kBAAkB,GACzC,IACL,IACF,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {Button} from '@sqlrooms/ui';\nimport {useCallback, useState} from 'react';\nimport {TableSelector} from '../../chart-builders/TableSelector';\nimport {Field} from '../../chart-builders/Field';\nimport {useMosaicDashboardContext} from '../MosaicDashboardContext';\nimport {\n useStoreWithMosaicDashboard,\n createMosaicDashboardProfilerPanelConfig,\n} from '../MosaicDashboardSlice';\n\nexport interface BuildDashboardManuallyPanelProps {\n isStarting: boolean;\n onStartingChange: (isStarting: boolean) => void;\n}\n\nexport const BuildDashboardManuallyPanel: React.FC<\n BuildDashboardManuallyPanelProps\n> = ({isStarting, onStartingChange}) => {\n const {dashboardId} = useMosaicDashboardContext();\n const setSelectedTable = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.setSelectedTable,\n );\n const addPanel = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.addPanel,\n );\n const tables = useStoreWithMosaicDashboard((state) => state.db.tables);\n\n const [tableName, setTableName] = useState<string | undefined>(undefined);\n\n const handleStart = useCallback(() => {\n if (!tableName || isStarting) return;\n\n onStartingChange(true);\n try {\n // Set the selected table\n setSelectedTable(dashboardId, tableName);\n\n // Find the table info to get the proper title\n const tableInfo = tables.find((t) => t.table.table === tableName);\n const title = tableInfo\n ? `${tableInfo.table.table} profiler`\n : `${tableName} profiler`;\n\n // Create and add a profiler panel\n const profilerPanel = createMosaicDashboardProfilerPanelConfig({\n title,\n });\n addPanel(dashboardId, profilerPanel);\n } finally {\n onStartingChange(false);\n }\n }, [\n tableName,\n dashboardId,\n setSelectedTable,\n addPanel,\n tables,\n onStartingChange,\n isStarting,\n ]);\n\n return (\n <div className=\"bg-card flex flex-col gap-4 rounded-lg border p-6\">\n <div>\n <h3 className=\"mb-1 font-medium\">Create Manually</h3>\n <p className=\"text-muted-foreground text-sm\">\n Start with a data profiler and build your dashboard step by step\n </p>\n </div>\n <div className=\"flex flex-1 flex-col gap-3\">\n <Field label=\"Table\" required>\n <TableSelector\n value={tableName}\n onChange={setTableName}\n placeholder=\"Select table…\"\n />\n </Field>\n <div className=\"text-muted-foreground flex-1 space-y-2 text-sm\">\n <p>This will create a dashboard with:</p>\n <ul className=\"ml-4 list-disc space-y-1\">\n <li>Data profiler for exploring your table</li>\n <li>Quick stats and column information</li>\n <li>Ability to add charts and visualizations</li>\n </ul>\n </div>\n <Button\n className=\"mt-auto w-full\"\n variant=\"outline\"\n disabled={!tableName || isStarting}\n onClick={handleStart}\n >\n {isStarting ? 'Starting...' : 'Create Dashboard'}\n </Button>\n </div>\n </div>\n );\n};\n"]}
@@ -0,0 +1,7 @@
1
+ export interface BuildDashboardWithAIPanelProps {
2
+ onStart?: (prompt: string) => void | Promise<void>;
3
+ isStarting: boolean;
4
+ onStartingChange: (isStarting: boolean) => void;
5
+ }
6
+ export declare const BuildDashboardWithAIPanel: React.FC<BuildDashboardWithAIPanelProps>;
7
+ //# sourceMappingURL=BuildDashboardWithAIPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuildDashboardWithAIPanel.d.ts","sourceRoot":"","sources":["../../../src/dashboard/initial-state/BuildDashboardWithAIPanel.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,8BAA8B;IAC7C,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;CACjD;AAED,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,EAAE,CAC9C,8BAA8B,CA6D/B,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Textarea } from '@sqlrooms/ui';
3
+ import { useCallback, useState } from 'react';
4
+ import { Field } from '../../chart-builders/Field';
5
+ export const BuildDashboardWithAIPanel = ({ onStart, isStarting, onStartingChange }) => {
6
+ const [prompt, setPrompt] = useState('');
7
+ const handleStart = useCallback(async () => {
8
+ if (!prompt.trim() || isStarting)
9
+ return;
10
+ onStartingChange(true);
11
+ try {
12
+ if (onStart) {
13
+ await onStart(prompt);
14
+ }
15
+ }
16
+ finally {
17
+ onStartingChange(false);
18
+ }
19
+ }, [prompt, onStart, onStartingChange, isStarting]);
20
+ return (_jsxs("div", { className: "bg-card flex flex-col gap-4 rounded-lg border p-6", children: [_jsxs("div", { children: [_jsx("h3", { className: "mb-1 font-medium", children: "Analyze with AI" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Describe what you want to explore and let AI build the dashboard" })] }), _jsxs("div", { className: "flex flex-1 flex-col gap-3", children: [_jsx(Field, { label: "What would you like to analyze?", required: true, children: _jsxs("div", { className: "space-y-1", children: [_jsx(Textarea, { value: prompt, onChange: (e) => setPrompt(e.target.value), placeholder: "e.g., Show me sales trends over time, identify top customers, analyze seasonal patterns...", rows: 6, className: "resize-none", onKeyDown: (e) => {
21
+ if (e.key === 'Enter' &&
22
+ (e.metaKey || e.ctrlKey) &&
23
+ prompt.trim()) {
24
+ e.preventDefault();
25
+ handleStart();
26
+ }
27
+ } }), _jsxs("p", { className: "text-muted-foreground text-xs", children: ["Press ", navigator.platform.includes('Mac') ? '⌘' : 'Ctrl', "+Enter to analyze"] })] }) }), _jsx(Button, { className: "mt-auto w-full", disabled: !prompt.trim() || isStarting, onClick: handleStart, children: isStarting ? 'Starting...' : 'Analyze with AI' })] })] }));
28
+ };
29
+ //# sourceMappingURL=BuildDashboardWithAIPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuildDashboardWithAIPanel.js","sourceRoot":"","sources":["../../../src/dashboard/initial-state/BuildDashboardWithAIPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAC,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAC,WAAW,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAC,KAAK,EAAC,MAAM,4BAA4B,CAAC;AAQjD,MAAM,CAAC,MAAM,yBAAyB,GAElC,CAAC,EAAC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAC,EAAE,EAAE;IAC9C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IAEjD,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACzC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,UAAU;YAAE,OAAO;QAEzC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC;YACH,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC;IAEpD,OAAO,CACL,eAAK,SAAS,EAAC,mDAAmD,aAChE,0BACE,aAAI,SAAS,EAAC,kBAAkB,gCAAqB,EACrD,YAAG,SAAS,EAAC,+BAA+B,iFAExC,IACA,EACN,eAAK,SAAS,EAAC,4BAA4B,aACzC,KAAC,KAAK,IAAC,KAAK,EAAC,iCAAiC,EAAC,QAAQ,kBACrD,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,QAAQ,IACP,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC1C,WAAW,EAAC,4FAA4F,EACxG,IAAI,EAAE,CAAC,EACP,SAAS,EAAC,aAAa,EACvB,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;wCACf,IACE,CAAC,CAAC,GAAG,KAAK,OAAO;4CACjB,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC;4CACxB,MAAM,CAAC,IAAI,EAAE,EACb,CAAC;4CACD,CAAC,CAAC,cAAc,EAAE,CAAC;4CACnB,WAAW,EAAE,CAAC;wCAChB,CAAC;oCACH,CAAC,GACD,EACF,aAAG,SAAS,EAAC,+BAA+B,uBACnC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,yBAEtD,IACA,GACA,EACR,KAAC,MAAM,IACL,SAAS,EAAC,gBAAgB,EAC1B,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,UAAU,EACtC,OAAO,EAAE,WAAW,YAEnB,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB,GACxC,IACL,IACF,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {Button, Textarea} from '@sqlrooms/ui';\nimport {useCallback, useState} from 'react';\nimport {Field} from '../../chart-builders/Field';\n\nexport interface BuildDashboardWithAIPanelProps {\n onStart?: (prompt: string) => void | Promise<void>;\n isStarting: boolean;\n onStartingChange: (isStarting: boolean) => void;\n}\n\nexport const BuildDashboardWithAIPanel: React.FC<\n BuildDashboardWithAIPanelProps\n> = ({onStart, isStarting, onStartingChange}) => {\n const [prompt, setPrompt] = useState<string>('');\n\n const handleStart = useCallback(async () => {\n if (!prompt.trim() || isStarting) return;\n\n onStartingChange(true);\n try {\n if (onStart) {\n await onStart(prompt);\n }\n } finally {\n onStartingChange(false);\n }\n }, [prompt, onStart, onStartingChange, isStarting]);\n\n return (\n <div className=\"bg-card flex flex-col gap-4 rounded-lg border p-6\">\n <div>\n <h3 className=\"mb-1 font-medium\">Analyze with AI</h3>\n <p className=\"text-muted-foreground text-sm\">\n Describe what you want to explore and let AI build the dashboard\n </p>\n </div>\n <div className=\"flex flex-1 flex-col gap-3\">\n <Field label=\"What would you like to analyze?\" required>\n <div className=\"space-y-1\">\n <Textarea\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n placeholder=\"e.g., Show me sales trends over time, identify top customers, analyze seasonal patterns...\"\n rows={6}\n className=\"resize-none\"\n onKeyDown={(e) => {\n if (\n e.key === 'Enter' &&\n (e.metaKey || e.ctrlKey) &&\n prompt.trim()\n ) {\n e.preventDefault();\n handleStart();\n }\n }}\n />\n <p className=\"text-muted-foreground text-xs\">\n Press {navigator.platform.includes('Mac') ? '⌘' : 'Ctrl'}+Enter to\n analyze\n </p>\n </div>\n </Field>\n <Button\n className=\"mt-auto w-full\"\n disabled={!prompt.trim() || isStarting}\n onClick={handleStart}\n >\n {isStarting ? 'Starting...' : 'Analyze with AI'}\n </Button>\n </div>\n </div>\n );\n};\n"]}
@@ -0,0 +1,6 @@
1
+ import type { OnStartDashboard } from '../action-types';
2
+ export interface MosaicDashboardInitialStateProps {
3
+ onStart?: OnStartDashboard;
4
+ }
5
+ export declare const MosaicDashboardInitialState: React.FC<MosaicDashboardInitialStateProps>;
6
+ //# sourceMappingURL=MosaicDashboardInitialState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardInitialState.d.ts","sourceRoot":"","sources":["../../../src/dashboard/initial-state/MosaicDashboardInitialState.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAItD,MAAM,WAAW,gCAAgC;IAC/C,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAED,eAAO,MAAM,2BAA2B,EAAE,KAAK,CAAC,EAAE,CAChD,gCAAgC,CA4BjC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { BuildDashboardWithAIPanel } from './BuildDashboardWithAIPanel';
4
+ import { BuildDashboardManuallyPanel } from './BuildDashboardManuallyPanel';
5
+ export const MosaicDashboardInitialState = ({ onStart }) => {
6
+ const [isStarting, setIsStarting] = useState(false);
7
+ return (_jsx("div", { className: "m-4 flex min-h-[240px] items-center justify-center rounded-md p-8", children: _jsxs("div", { className: "flex w-full max-w-4xl flex-col gap-8", children: [_jsxs("div", { className: "text-center", children: [_jsx("h2", { className: "text-lg font-semibold", children: "Create Your Dashboard" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Choose how you'd like to start" })] }), _jsxs("div", { className: "grid gap-8 md:grid-cols-2", children: [_jsx(BuildDashboardWithAIPanel, { onStart: onStart, isStarting: isStarting, onStartingChange: setIsStarting }), _jsx(BuildDashboardManuallyPanel, { isStarting: isStarting, onStartingChange: setIsStarting })] })] }) }));
8
+ };
9
+ //# sourceMappingURL=MosaicDashboardInitialState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardInitialState.js","sourceRoot":"","sources":["../../../src/dashboard/initial-state/MosaicDashboardInitialState.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAC,yBAAyB,EAAC,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAC,2BAA2B,EAAC,MAAM,+BAA+B,CAAC;AAM1E,MAAM,CAAC,MAAM,2BAA2B,GAEpC,CAAC,EAAC,OAAO,EAAC,EAAE,EAAE;IAChB,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,OAAO,CACL,cAAK,SAAS,EAAC,mEAAmE,YAChF,eAAK,SAAS,EAAC,sCAAsC,aACnD,eAAK,SAAS,EAAC,aAAa,aAC1B,aAAI,SAAS,EAAC,uBAAuB,sCAA2B,EAChE,YAAG,SAAS,EAAC,+BAA+B,+CAExC,IACA,EAEN,eAAK,SAAS,EAAC,2BAA2B,aACxC,KAAC,yBAAyB,IACxB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,aAAa,GAC/B,EACF,KAAC,2BAA2B,IAC1B,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,aAAa,GAC/B,IACE,IACF,GACF,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {useState} from 'react';\nimport type {OnStartDashboard} from '../action-types';\nimport {BuildDashboardWithAIPanel} from './BuildDashboardWithAIPanel';\nimport {BuildDashboardManuallyPanel} from './BuildDashboardManuallyPanel';\n\nexport interface MosaicDashboardInitialStateProps {\n onStart?: OnStartDashboard;\n}\n\nexport const MosaicDashboardInitialState: React.FC<\n MosaicDashboardInitialStateProps\n> = ({onStart}) => {\n const [isStarting, setIsStarting] = useState(false);\n\n return (\n <div className=\"m-4 flex min-h-[240px] items-center justify-center rounded-md p-8\">\n <div className=\"flex w-full max-w-4xl flex-col gap-8\">\n <div className=\"text-center\">\n <h2 className=\"text-lg font-semibold\">Create Your Dashboard</h2>\n <p className=\"text-muted-foreground text-sm\">\n Choose how you&apos;d like to start\n </p>\n </div>\n\n <div className=\"grid gap-8 md:grid-cols-2\">\n <BuildDashboardWithAIPanel\n onStart={onStart}\n isStarting={isStarting}\n onStartingChange={setIsStarting}\n />\n <BuildDashboardManuallyPanel\n isStarting={isStarting}\n onStartingChange={setIsStarting}\n />\n </div>\n </div>\n </div>\n );\n};\n"]}
@@ -0,0 +1,7 @@
1
+ import { type FC } from 'react';
2
+ interface MosaicDashboardAddPanelDropdownProps {
3
+ dashboardId: string;
4
+ }
5
+ export declare const MosaicDashboardAddPanelDropdown: FC<MosaicDashboardAddPanelDropdownProps>;
6
+ export {};
7
+ //# sourceMappingURL=MosaicDashboardAddPanelDropdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardAddPanelDropdown.d.ts","sourceRoot":"","sources":["../../../src/dashboard/toolbar/MosaicDashboardAddPanelDropdown.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAC,MAAM,OAAO,CAAC;AAW9B,UAAU,oCAAoC;IAC5C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,+BAA+B,EAAE,EAAE,CAC9C,oCAAoC,CA+BrC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@sqlrooms/ui';
3
+ import { Plus } from 'lucide-react';
4
+ import { useAddPanelActions } from '../useAddPanelActions';
5
+ export const MosaicDashboardAddPanelDropdown = ({ dashboardId }) => {
6
+ const { handleAddPanel, canAddPanel, actions, canAddAnyPanel } = useAddPanelActions(dashboardId);
7
+ return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { size: "sm", variant: "outline", disabled: !canAddAnyPanel, children: [_jsx(Plus, { className: "mr-1 h-4 w-4" }), "Add"] }) }), _jsx(DropdownMenuContent, { align: "end", children: actions.map((action) => {
8
+ const Icon = action.icon;
9
+ return (_jsxs(DropdownMenuItem, { onClick: () => handleAddPanel(action), disabled: !canAddPanel(action), children: [Icon ? _jsx(Icon, { className: "mr-2 h-4 w-4" }) : null, action.label] }, action.type));
10
+ }) })] }));
11
+ };
12
+ //# sourceMappingURL=MosaicDashboardAddPanelDropdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardAddPanelDropdown.js","sourceRoot":"","sources":["../../../src/dashboard/toolbar/MosaicDashboardAddPanelDropdown.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,MAAM,EACN,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,IAAI,EAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AAMzD,MAAM,CAAC,MAAM,+BAA+B,GAExC,CAAC,EAAC,WAAW,EAAC,EAAE,EAAE;IACpB,MAAM,EAAC,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAC,GAC1D,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAElC,OAAO,CACL,MAAC,YAAY,eACX,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,MAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,QAAQ,EAAE,CAAC,cAAc,aAC3D,KAAC,IAAI,IAAC,SAAS,EAAC,cAAc,GAAG,WAE1B,GACW,EACtB,KAAC,mBAAmB,IAAC,KAAK,EAAC,KAAK,YAC7B,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBACtB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;oBAEzB,OAAO,CACL,MAAC,gBAAgB,IAEf,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,EACrC,QAAQ,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,aAE7B,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,SAAS,EAAC,cAAc,GAAG,CAAC,CAAC,CAAC,IAAI,EAC/C,MAAM,CAAC,KAAK,KALR,MAAM,CAAC,IAAI,CAMC,CACpB,CAAC;gBACJ,CAAC,CAAC,GACkB,IACT,CAChB,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {type FC} from 'react';\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@sqlrooms/ui';\nimport {Plus} from 'lucide-react';\nimport {useAddPanelActions} from '../useAddPanelActions';\n\ninterface MosaicDashboardAddPanelDropdownProps {\n dashboardId: string;\n}\n\nexport const MosaicDashboardAddPanelDropdown: FC<\n MosaicDashboardAddPanelDropdownProps\n> = ({dashboardId}) => {\n const {handleAddPanel, canAddPanel, actions, canAddAnyPanel} =\n useAddPanelActions(dashboardId);\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button size=\"sm\" variant=\"outline\" disabled={!canAddAnyPanel}>\n <Plus className=\"mr-1 h-4 w-4\" />\n Add\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {actions.map((action) => {\n const Icon = action.icon;\n\n return (\n <DropdownMenuItem\n key={action.type}\n onClick={() => handleAddPanel(action)}\n disabled={!canAddPanel(action)}\n >\n {Icon ? <Icon className=\"mr-2 h-4 w-4\" /> : null}\n {action.label}\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n"]}
@@ -0,0 +1,7 @@
1
+ import { type FC } from 'react';
2
+ interface MosaicDashboardResetFiltersButtonProps {
3
+ dashboardId: string;
4
+ }
5
+ export declare const MosaicDashboardResetFiltersButton: FC<MosaicDashboardResetFiltersButtonProps>;
6
+ export {};
7
+ //# sourceMappingURL=MosaicDashboardResetFiltersButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardResetFiltersButton.d.ts","sourceRoot":"","sources":["../../../src/dashboard/toolbar/MosaicDashboardResetFiltersButton.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAA+B,MAAM,OAAO,CAAC;AAO5D,UAAU,sCAAsC;IAC9C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,iCAAiC,EAAE,EAAE,CAChD,sCAAsC,CAuDvC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useState } from 'react';
3
+ import { Button } from '@sqlrooms/ui';
4
+ import { getMosaicDashboardSelectionName, useStoreWithMosaicDashboard, } from '../MosaicDashboardSlice';
5
+ export const MosaicDashboardResetFiltersButton = ({ dashboardId }) => {
6
+ const getSelection = useStoreWithMosaicDashboard((state) => state.mosaic.getSelection);
7
+ const dashboardSelectionName = getMosaicDashboardSelectionName(dashboardId);
8
+ const dashboardSelection = useStoreWithMosaicDashboard((state) => state.mosaic.selections[dashboardSelectionName]);
9
+ const [selectionVersion, setSelectionVersion] = useState(0);
10
+ useEffect(() => {
11
+ if (!dashboardSelection) {
12
+ getSelection(dashboardSelectionName, 'crossfilter');
13
+ }
14
+ }, [dashboardSelection, dashboardSelectionName, getSelection]);
15
+ useEffect(() => {
16
+ if (!dashboardSelection) {
17
+ return;
18
+ }
19
+ const handleSelectionChange = () => {
20
+ setSelectionVersion((value) => value + 1);
21
+ };
22
+ dashboardSelection.addEventListener('value', handleSelectionChange);
23
+ return () => {
24
+ dashboardSelection.removeEventListener('value', handleSelectionChange);
25
+ };
26
+ }, [dashboardSelection]);
27
+ const hasActiveFilters = useMemo(() => Boolean(dashboardSelection?.clauses.length), [dashboardSelection, selectionVersion]);
28
+ const handleResetFilters = () => {
29
+ dashboardSelection?.reset();
30
+ };
31
+ if (!hasActiveFilters) {
32
+ return null;
33
+ }
34
+ return (_jsx(Button, { variant: "link", size: "sm", className: "h-8 px-0", onClick: handleResetFilters, children: "Reset filters" }));
35
+ };
36
+ //# sourceMappingURL=MosaicDashboardResetFiltersButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardResetFiltersButton.js","sourceRoot":"","sources":["../../../src/dashboard/toolbar/MosaicDashboardResetFiltersButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAU,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACpC,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AAMjC,MAAM,CAAC,MAAM,iCAAiC,GAE1C,CAAC,EAAC,WAAW,EAAC,EAAE,EAAE;IACpB,MAAM,YAAY,GAAG,2BAA2B,CAC9C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CACrC,CAAC;IACF,MAAM,sBAAsB,GAAG,+BAA+B,CAAC,WAAW,CAAC,CAAC;IAC5E,MAAM,kBAAkB,GAAG,2BAA2B,CACpD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAC3D,CAAC;IACF,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,YAAY,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,EAAE,CAAC,kBAAkB,EAAE,sBAAsB,EAAE,YAAY,CAAC,CAAC,CAAC;IAE/D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,MAAM,qBAAqB,GAAG,GAAG,EAAE;YACjC,mBAAmB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC;QAEF,kBAAkB,CAAC,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;QACpE,OAAO,GAAG,EAAE;YACV,kBAAkB,CAAC,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;QACzE,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEzB,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,MAAM,CAAC,EACjD,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CACvC,CAAC;IAEF,MAAM,kBAAkB,GAAG,GAAG,EAAE;QAC9B,kBAAkB,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC,CAAC;IAEF,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAC,MAAM,IACL,OAAO,EAAC,MAAM,EACd,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,UAAU,EACpB,OAAO,EAAE,kBAAkB,8BAGpB,CACV,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {type FC, useEffect, useMemo, useState} from 'react';\nimport {Button} from '@sqlrooms/ui';\nimport {\n getMosaicDashboardSelectionName,\n useStoreWithMosaicDashboard,\n} from '../MosaicDashboardSlice';\n\ninterface MosaicDashboardResetFiltersButtonProps {\n dashboardId: string;\n}\n\nexport const MosaicDashboardResetFiltersButton: FC<\n MosaicDashboardResetFiltersButtonProps\n> = ({dashboardId}) => {\n const getSelection = useStoreWithMosaicDashboard(\n (state) => state.mosaic.getSelection,\n );\n const dashboardSelectionName = getMosaicDashboardSelectionName(dashboardId);\n const dashboardSelection = useStoreWithMosaicDashboard(\n (state) => state.mosaic.selections[dashboardSelectionName],\n );\n const [selectionVersion, setSelectionVersion] = useState(0);\n\n useEffect(() => {\n if (!dashboardSelection) {\n getSelection(dashboardSelectionName, 'crossfilter');\n }\n }, [dashboardSelection, dashboardSelectionName, getSelection]);\n\n useEffect(() => {\n if (!dashboardSelection) {\n return;\n }\n\n const handleSelectionChange = () => {\n setSelectionVersion((value) => value + 1);\n };\n\n dashboardSelection.addEventListener('value', handleSelectionChange);\n return () => {\n dashboardSelection.removeEventListener('value', handleSelectionChange);\n };\n }, [dashboardSelection]);\n\n const hasActiveFilters = useMemo(\n () => Boolean(dashboardSelection?.clauses.length),\n [dashboardSelection, selectionVersion],\n );\n\n const handleResetFilters = () => {\n dashboardSelection?.reset();\n };\n\n if (!hasActiveFilters) {\n return null;\n }\n\n return (\n <Button\n variant=\"link\"\n size=\"sm\"\n className=\"h-8 px-0\"\n onClick={handleResetFilters}\n >\n Reset filters\n </Button>\n );\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardToolbar.d.ts","sourceRoot":"","sources":["../../../src/dashboard/toolbar/MosaicDashboardToolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAsB1C,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMosaicDashboardContext } from '../MosaicDashboardContext';
3
+ import { useStoreWithMosaicDashboard } from '../MosaicDashboardSlice';
4
+ import { MosaicDashboardAddPanelDropdown } from './MosaicDashboardAddPanelDropdown';
5
+ import { MosaicDashboardResetFiltersButton } from './MosaicDashboardResetFiltersButton';
6
+ export const MosaicDashboardToolbar = () => {
7
+ const { dashboardId } = useMosaicDashboardContext();
8
+ const hasPanels = useStoreWithMosaicDashboard((state) => (state.mosaicDashboard.config.dashboardsById[dashboardId]?.panels
9
+ ?.length ?? 0) > 0);
10
+ if (!hasPanels) {
11
+ return null;
12
+ }
13
+ return (_jsxs("div", { className: "flex items-center justify-between border-b px-5 py-2", children: [_jsx("div", { className: "flex items-center gap-2", children: _jsx(MosaicDashboardResetFiltersButton, { dashboardId: dashboardId }) }), _jsx("div", { className: "flex items-center gap-2", children: _jsx(MosaicDashboardAddPanelDropdown, { dashboardId: dashboardId }) })] }));
14
+ };
15
+ //# sourceMappingURL=MosaicDashboardToolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardToolbar.js","sourceRoot":"","sources":["../../../src/dashboard/toolbar/MosaicDashboardToolbar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,yBAAyB,EAAC,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAC,2BAA2B,EAAC,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAC,+BAA+B,EAAC,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAC,iCAAiC,EAAC,MAAM,qCAAqC,CAAC;AAEtF,MAAM,CAAC,MAAM,sBAAsB,GAAa,GAAG,EAAE;IACnD,MAAM,EAAC,WAAW,EAAC,GAAG,yBAAyB,EAAE,CAAC;IAClD,MAAM,SAAS,GAAG,2BAA2B,CAC3C,CAAC,KAAK,EAAE,EAAE,CACR,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM;QAC/D,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CACvB,CAAC;IAEF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,sDAAsD,aACnE,cAAK,SAAS,EAAC,yBAAyB,YACtC,KAAC,iCAAiC,IAAC,WAAW,EAAE,WAAW,GAAI,GAC3D,EACN,cAAK,SAAS,EAAC,yBAAyB,YACtC,KAAC,+BAA+B,IAAC,WAAW,EAAE,WAAW,GAAI,GACzD,IACF,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import React from 'react';\nimport {useMosaicDashboardContext} from '../MosaicDashboardContext';\nimport {useStoreWithMosaicDashboard} from '../MosaicDashboardSlice';\nimport {MosaicDashboardAddPanelDropdown} from './MosaicDashboardAddPanelDropdown';\nimport {MosaicDashboardResetFiltersButton} from './MosaicDashboardResetFiltersButton';\n\nexport const MosaicDashboardToolbar: React.FC = () => {\n const {dashboardId} = useMosaicDashboardContext();\n const hasPanels = useStoreWithMosaicDashboard(\n (state) =>\n (state.mosaicDashboard.config.dashboardsById[dashboardId]?.panels\n ?.length ?? 0) > 0,\n );\n\n if (!hasPanels) {\n return null;\n }\n\n return (\n <div className=\"flex items-center justify-between border-b px-5 py-2\">\n <div className=\"flex items-center gap-2\">\n <MosaicDashboardResetFiltersButton dashboardId={dashboardId} />\n </div>\n <div className=\"flex items-center gap-2\">\n <MosaicDashboardAddPanelDropdown dashboardId={dashboardId} />\n </div>\n </div>\n );\n};\n"]}
@@ -0,0 +1,10 @@
1
+ import { type MosaicDashboardAddPanelAction } from './action-types';
2
+ interface UseAddPanelActionsResult {
3
+ actions: MosaicDashboardAddPanelAction[];
4
+ canAddAnyPanel: boolean;
5
+ canAddPanel: (action: MosaicDashboardAddPanelAction) => boolean;
6
+ handleAddPanel: (action: MosaicDashboardAddPanelAction) => void;
7
+ }
8
+ export declare function useAddPanelActions(dashboardId: string): UseAddPanelActionsResult;
9
+ export {};
10
+ //# sourceMappingURL=useAddPanelActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAddPanelActions.d.ts","sourceRoot":"","sources":["../../src/dashboard/useAddPanelActions.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,6BAA6B,EAAC,MAAM,gBAAgB,CAAC;AAIlE,UAAU,wBAAwB;IAChC,OAAO,EAAE,6BAA6B,EAAE,CAAC;IACzC,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,CAAC,MAAM,EAAE,6BAA6B,KAAK,OAAO,CAAC;IAChE,cAAc,EAAE,CAAC,MAAM,EAAE,6BAA6B,KAAK,IAAI,CAAC;CACjE;AAED,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,GAClB,wBAAwB,CAwC1B"}
@@ -0,0 +1,26 @@
1
+ import { useCallback, useMemo } from 'react';
2
+ import { useStoreWithMosaicDashboard } from './MosaicDashboardSlice';
3
+ import { useMosaicDashboardAddPanelActionContext } from './useMosaicDashboardAddPanelActionContext';
4
+ export function useAddPanelActions(dashboardId) {
5
+ const addPanel = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.addPanel);
6
+ const actions = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.addPanelActions);
7
+ const addPanelActionContext = useMosaicDashboardAddPanelActionContext(dashboardId);
8
+ const canAddPanel = useCallback((action) => action.isEnabled ? action.isEnabled(addPanelActionContext) : true, [addPanelActionContext]);
9
+ const canAddAnyPanel = useMemo(() => actions.some((action) => canAddPanel(action)), [actions, canAddPanel]);
10
+ const handleAddPanel = (action) => {
11
+ if (!canAddPanel(action)) {
12
+ return;
13
+ }
14
+ const panel = action.createPanel(addPanelActionContext);
15
+ if (panel) {
16
+ addPanel(dashboardId, panel);
17
+ }
18
+ };
19
+ return {
20
+ actions,
21
+ canAddAnyPanel,
22
+ canAddPanel,
23
+ handleAddPanel,
24
+ };
25
+ }
26
+ //# sourceMappingURL=useAddPanelActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAddPanelActions.js","sourceRoot":"","sources":["../../src/dashboard/useAddPanelActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;AAE3C,OAAO,EAAC,2BAA2B,EAAC,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAC,uCAAuC,EAAC,MAAM,2CAA2C,CAAC;AASlG,MAAM,UAAU,kBAAkB,CAChC,WAAmB;IAEnB,MAAM,QAAQ,GAAG,2BAA2B,CAC1C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,CAC1C,CAAC;IACF,MAAM,OAAO,GAAG,2BAA2B,CACzC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,eAAe,CACjD,CAAC;IAEF,MAAM,qBAAqB,GACzB,uCAAuC,CAAC,WAAW,CAAC,CAAC;IAEvD,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,MAAqC,EAAE,EAAE,CACxC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,IAAI,EACnE,CAAC,qBAAqB,CAAC,CACxB,CAAC;IAEF,MAAM,cAAc,GAAG,OAAO,CAC5B,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EACnD,CAAC,OAAO,EAAE,WAAW,CAAC,CACvB,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,MAAqC,EAAE,EAAE;QAC/D,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAExD,IAAI,KAAK,EAAE,CAAC;YACV,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,OAAO;QACP,cAAc;QACd,WAAW;QACX,cAAc;KACf,CAAC;AACJ,CAAC","sourcesContent":["import {useCallback, useMemo} from 'react';\nimport {type MosaicDashboardAddPanelAction} from './action-types';\nimport {useStoreWithMosaicDashboard} from './MosaicDashboardSlice';\nimport {useMosaicDashboardAddPanelActionContext} from './useMosaicDashboardAddPanelActionContext';\n\ninterface UseAddPanelActionsResult {\n actions: MosaicDashboardAddPanelAction[];\n canAddAnyPanel: boolean;\n canAddPanel: (action: MosaicDashboardAddPanelAction) => boolean;\n handleAddPanel: (action: MosaicDashboardAddPanelAction) => void;\n}\n\nexport function useAddPanelActions(\n dashboardId: string,\n): UseAddPanelActionsResult {\n const addPanel = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.addPanel,\n );\n const actions = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.addPanelActions,\n );\n\n const addPanelActionContext =\n useMosaicDashboardAddPanelActionContext(dashboardId);\n\n const canAddPanel = useCallback(\n (action: MosaicDashboardAddPanelAction) =>\n action.isEnabled ? action.isEnabled(addPanelActionContext) : true,\n [addPanelActionContext],\n );\n\n const canAddAnyPanel = useMemo(\n () => actions.some((action) => canAddPanel(action)),\n [actions, canAddPanel],\n );\n\n const handleAddPanel = (action: MosaicDashboardAddPanelAction) => {\n if (!canAddPanel(action)) {\n return;\n }\n\n const panel = action.createPanel(addPanelActionContext);\n\n if (panel) {\n addPanel(dashboardId, panel);\n }\n };\n\n return {\n actions,\n canAddAnyPanel,\n canAddPanel,\n handleAddPanel,\n };\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { type MosaicDashboardAddPanelActionContext } from './action-types';
2
+ export declare function useMosaicDashboardAddPanelActionContext(dashboardId: string): MosaicDashboardAddPanelActionContext;
3
+ //# sourceMappingURL=useMosaicDashboardAddPanelActionContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMosaicDashboardAddPanelActionContext.d.ts","sourceRoot":"","sources":["../../src/dashboard/useMosaicDashboardAddPanelActionContext.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,oCAAoC,EAAC,MAAM,gBAAgB,CAAC;AAKzE,wBAAgB,uCAAuC,CACrD,WAAW,EAAE,MAAM,GAClB,oCAAoC,CAqBtC"}
@@ -0,0 +1,18 @@
1
+ import { useMemo } from 'react';
2
+ import { useStoreWithMosaicDashboard } from './MosaicDashboardSlice';
3
+ import { useSelectedOrFirstTable } from './useSelectedOrFirstTable';
4
+ import { useTablesWithColumns } from './useTablesWithColumns';
5
+ export function useMosaicDashboardAddPanelActionContext(dashboardId) {
6
+ const dashboard = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.config.dashboardsById[dashboardId]);
7
+ const chartTypes = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.chartTypes);
8
+ const tables = useTablesWithColumns();
9
+ const selectedTable = useSelectedOrFirstTable(dashboardId);
10
+ return useMemo(() => ({
11
+ dashboardId,
12
+ dashboard,
13
+ selectedTable,
14
+ tables,
15
+ chartTypes,
16
+ }), [dashboard, dashboardId, selectedTable, tables, chartTypes]);
17
+ }
18
+ //# sourceMappingURL=useMosaicDashboardAddPanelActionContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMosaicDashboardAddPanelActionContext.js","sourceRoot":"","sources":["../../src/dashboard/useMosaicDashboardAddPanelActionContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAC,2BAA2B,EAAC,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAC,uBAAuB,EAAC,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAE5D,MAAM,UAAU,uCAAuC,CACrD,WAAmB;IAEnB,MAAM,SAAS,GAAG,2BAA2B,CAC3C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CACpE,CAAC;IACF,MAAM,UAAU,GAAG,2BAA2B,CAC5C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAC5C,CAAC;IAEF,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IACtC,MAAM,aAAa,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;IAE3D,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC;QACL,WAAW;QACX,SAAS;QACT,aAAa;QACb,MAAM;QACN,UAAU;KACX,CAAC,EACF,CAAC,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,CAAC,CAC5D,CAAC;AACJ,CAAC","sourcesContent":["import {useMemo} from 'react';\nimport {type MosaicDashboardAddPanelActionContext} from './action-types';\nimport {useStoreWithMosaicDashboard} from './MosaicDashboardSlice';\nimport {useSelectedOrFirstTable} from './useSelectedOrFirstTable';\nimport {useTablesWithColumns} from './useTablesWithColumns';\n\nexport function useMosaicDashboardAddPanelActionContext(\n dashboardId: string,\n): MosaicDashboardAddPanelActionContext {\n const dashboard = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.config.dashboardsById[dashboardId],\n );\n const chartTypes = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.chartTypes,\n );\n\n const tables = useTablesWithColumns();\n const selectedTable = useSelectedOrFirstTable(dashboardId);\n\n return useMemo<MosaicDashboardAddPanelActionContext>(\n () => ({\n dashboardId,\n dashboard,\n selectedTable,\n tables,\n chartTypes,\n }),\n [dashboard, dashboardId, selectedTable, tables, chartTypes],\n );\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import { type DataTable } from '@sqlrooms/db';
2
+ /**
3
+ * Returns the last selected table for a dashboard if it exists,
4
+ * otherwise falls back to the first table with columns.
5
+ *
6
+ * @param dashboardId - The dashboard ID
7
+ * @returns The selected table, or the first table, or undefined if no tables exist
8
+ */
9
+ export declare function useSelectedOrFirstTable(dashboardId: string): DataTable | undefined;
10
+ //# sourceMappingURL=useSelectedOrFirstTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSelectedOrFirstTable.d.ts","sourceRoot":"","sources":["../../src/dashboard/useSelectedOrFirstTable.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,SAAS,EAAC,MAAM,cAAc,CAAC;AAI5C;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,GAClB,SAAS,GAAG,SAAS,CAoBvB"}
@@ -0,0 +1,25 @@
1
+ import { useMemo } from 'react';
2
+ import { useStoreWithMosaicDashboard } from './MosaicDashboardSlice';
3
+ import { useTablesWithColumns } from './useTablesWithColumns';
4
+ /**
5
+ * Returns the last selected table for a dashboard if it exists,
6
+ * otherwise falls back to the first table with columns.
7
+ *
8
+ * @param dashboardId - The dashboard ID
9
+ * @returns The selected table, or the first table, or undefined if no tables exist
10
+ */
11
+ export function useSelectedOrFirstTable(dashboardId) {
12
+ const dashboard = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.config.dashboardsById[dashboardId]);
13
+ const tables = useTablesWithColumns();
14
+ return useMemo(() => {
15
+ const lastSelectedTableName = dashboard?.lastSelectedTable;
16
+ if (!lastSelectedTableName) {
17
+ return tables[0];
18
+ }
19
+ // Try to find the last selected table first
20
+ const lastSelectedTable = tables.find((table) => table.table.table === lastSelectedTableName);
21
+ // Fall back to the first table if the selected one doesn't exist
22
+ return lastSelectedTable ?? tables[0];
23
+ }, [dashboard?.lastSelectedTable, tables]);
24
+ }
25
+ //# sourceMappingURL=useSelectedOrFirstTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSelectedOrFirstTable.js","sourceRoot":"","sources":["../../src/dashboard/useSelectedOrFirstTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAC,2BAA2B,EAAC,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,WAAmB;IAEnB,MAAM,SAAS,GAAG,2BAA2B,CAC3C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CACpE,CAAC;IACF,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IAEtC,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,MAAM,qBAAqB,GAAG,SAAS,EAAE,iBAAiB,CAAC;QAE3D,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3B,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QAED,4CAA4C;QAC5C,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CACnC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,qBAAqB,CACvD,CAAC;QACF,iEAAiE;QACjE,OAAO,iBAAiB,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;AAC7C,CAAC","sourcesContent":["import {useMemo} from 'react';\nimport {type DataTable} from '@sqlrooms/db';\nimport {useStoreWithMosaicDashboard} from './MosaicDashboardSlice';\nimport {useTablesWithColumns} from './useTablesWithColumns';\n\n/**\n * Returns the last selected table for a dashboard if it exists,\n * otherwise falls back to the first table with columns.\n *\n * @param dashboardId - The dashboard ID\n * @returns The selected table, or the first table, or undefined if no tables exist\n */\nexport function useSelectedOrFirstTable(\n dashboardId: string,\n): DataTable | undefined {\n const dashboard = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.config.dashboardsById[dashboardId],\n );\n const tables = useTablesWithColumns();\n\n return useMemo(() => {\n const lastSelectedTableName = dashboard?.lastSelectedTable;\n\n if (!lastSelectedTableName) {\n return tables[0];\n }\n\n // Try to find the last selected table first\n const lastSelectedTable = tables.find(\n (table) => table.table.table === lastSelectedTableName,\n );\n // Fall back to the first table if the selected one doesn't exist\n return lastSelectedTable ?? tables[0];\n }, [dashboard?.lastSelectedTable, tables]);\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import { type DataTable } from '@sqlrooms/db';
2
+ /**
3
+ * Returns all tables that have columns defined.
4
+ * Filters out tables without columns or with empty column arrays.
5
+ *
6
+ * @returns Array of tables with columns
7
+ */
8
+ export declare function useTablesWithColumns(): DataTable[];
9
+ //# sourceMappingURL=useTablesWithColumns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTablesWithColumns.d.ts","sourceRoot":"","sources":["../../src/dashboard/useTablesWithColumns.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,SAAS,EAAC,MAAM,cAAc,CAAC;AAG5C;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,SAAS,EAAE,CAOlD"}
@@ -0,0 +1,13 @@
1
+ import { useMemo } from 'react';
2
+ import { useStoreWithMosaicDashboard } from './MosaicDashboardSlice';
3
+ /**
4
+ * Returns all tables that have columns defined.
5
+ * Filters out tables without columns or with empty column arrays.
6
+ *
7
+ * @returns Array of tables with columns
8
+ */
9
+ export function useTablesWithColumns() {
10
+ const tables = useStoreWithMosaicDashboard((state) => state.db.tables);
11
+ return useMemo(() => tables.filter((table) => table.columns && table.columns.length > 0), [tables]);
12
+ }
13
+ //# sourceMappingURL=useTablesWithColumns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTablesWithColumns.js","sourceRoot":"","sources":["../../src/dashboard/useTablesWithColumns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAC,2BAA2B,EAAC,MAAM,wBAAwB,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,MAAM,GAAG,2BAA2B,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAEvE,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EACzE,CAAC,MAAM,CAAC,CACT,CAAC;AACJ,CAAC","sourcesContent":["import {useMemo} from 'react';\nimport {type DataTable} from '@sqlrooms/db';\nimport {useStoreWithMosaicDashboard} from './MosaicDashboardSlice';\n\n/**\n * Returns all tables that have columns defined.\n * Filters out tables without columns or with empty column arrays.\n *\n * @returns Array of tables with columns\n */\nexport function useTablesWithColumns(): DataTable[] {\n const tables = useStoreWithMosaicDashboard((state) => state.db.tables);\n\n return useMemo(\n () => tables.filter((table) => table.columns && table.columns.length > 0),\n [tables],\n );\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -11,10 +11,24 @@ export { MosaicDashboard, MosaicDashboardRoot, type MosaicDashboardProps, type M
11
11
  export { useMosaicDashboardContext } from './dashboard/MosaicDashboardContext';
12
12
  export { DashboardPanelErrorBoundary } from './dashboard/DashboardPanelErrorBoundary';
13
13
  export { createDefaultMosaicDashboardPanelRenderers } from './dashboard/defaultPanelRenderers';
14
- export { createMosaicDashboardPanelConfig, createMosaicDashboardProfilerPanelConfig, createMosaicDashboardChartPanelConfig, createMosaicDashboardTextPanelConfig, createDefaultMosaicDashboardConfig, createMosaicDashboardSlice, getMosaicDashboardDockId, getMosaicDashboardGridId, getMosaicDashboardPanelId, getMosaicDashboardSelectionName, isChartPanelConfig, panelHasSource, MOSAIC_DASHBOARD_PANEL, MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE, MOSAIC_DASHBOARD_CHART_PANEL_TYPE, MOSAIC_DASHBOARD_CHART_PANEL_TYPE as MOSAIC_DASHBOARD_VGPLOT_PANEL_TYPE, MOSAIC_DASHBOARD_TEXT_PANEL_TYPE, MosaicDashboardEntry, MosaicDashboardLayoutType, MosaicDashboardPanelConfig, MosaicDashboardPanelSource, MosaicDashboardSliceConfig, resolveMosaicDashboardPanelSource, useStoreWithMosaicDashboard, } from './dashboard/MosaicDashboardSlice';
15
- export type { MosaicDashboardAddPanelAction, MosaicDashboardAddPanelActionContext, CreateMosaicDashboardSliceProps, MosaicDashboardEntry as MosaicDashboardEntryType, MosaicDashboardPanelConfig as MosaicDashboardPanelConfigType, MosaicDashboardPanelRenderer, MosaicDashboardPanelRendererProps, MosaicDashboardPanelSource as MosaicDashboardPanelSourceType, MosaicDashboardSliceConfig as MosaicDashboardSliceConfigType, MosaicDashboardSliceState, MosaicDashboardStoreState, ChartPanelConfig, TextPanel, TextPanelConfig, } from './dashboard/MosaicDashboardSlice';
14
+ export { defaultAddPanelActions } from './dashboard/defaultPanelActions';
15
+ export { useSelectedOrFirstTable } from './dashboard/useSelectedOrFirstTable';
16
+ export { useTablesWithColumns } from './dashboard/useTablesWithColumns';
17
+ export { MosaicDashboardPanelLayout } from './dashboard/MosaicDashboardPanelLayout';
18
+ export { MosaicDashboardInitialState, type MosaicDashboardInitialStateProps, } from './dashboard/initial-state/MosaicDashboardInitialState';
19
+ export { addProfilerPanelAction } from './profiler/addProfilerPanelAction';
20
+ export { addTextPanelAction } from './text/addTextPanelAction';
21
+ export { addChartPanelAction } from './chart/addChartPanelAction';
22
+ export { createMosaicDashboardProfilerPanelConfig, createMosaicDashboardChartPanelConfig, createMosaicDashboardTextPanelConfig, createDefaultMosaicDashboardConfig, createMosaicDashboardSlice, getMosaicDashboardDockId, getMosaicDashboardGridId, getMosaicDashboardPanelId, getMosaicDashboardSelectionName, isChartPanelConfig, MOSAIC_DASHBOARD_PANEL, MosaicDashboardSliceConfig, useStoreWithMosaicDashboard, } from './dashboard/MosaicDashboardSlice';
23
+ export { MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE, MOSAIC_DASHBOARD_CHART_PANEL_TYPE, MOSAIC_DASHBOARD_CHART_PANEL_TYPE as MOSAIC_DASHBOARD_VGPLOT_PANEL_TYPE, MOSAIC_DASHBOARD_TEXT_PANEL_TYPE, MosaicDashboardEntry, MosaicDashboardPanelConfig, } from './dashboard/dashboard-types';
24
+ export type { MosaicDashboardAddPanelAction, MosaicDashboardAddPanelActionContext, OnStartDashboard, } from './dashboard/action-types';
25
+ export type { CreateMosaicDashboardSliceProps, MosaicDashboardPanelRenderer, MosaicDashboardPanelRendererProps, MosaicDashboardSliceConfig as MosaicDashboardSliceConfigType, MosaicDashboardSliceState, MosaicDashboardStoreState, } from './dashboard/MosaicDashboardSlice';
26
+ export type { MosaicDashboardEntry as MosaicDashboardEntryType, MosaicDashboardPanelConfig as MosaicDashboardPanelConfigType, ChartPanelConfig, TextPanel, } from './dashboard/dashboard-types';
27
+ export type { MosaicDashboardLayoutType, MosaicDashboardPanelSource, ProfilerPanelConfig, TextPanelConfig, } from './dashboard/core-types';
16
28
  export { createMosaicColorLegendPlot, MosaicColorLegend, type MosaicColorLegendProps, } from './MosaicColorLegend';
17
29
  export { createDefaultMosaicConfig, createMosaicSlice, MosaicSliceConfig, type CreateMosaicSliceProps, type MosaicClientOptions, type MosaicPreAggregateOptions, type MosaicSliceState, type TrackedClient, } from './MosaicSlice';
30
+ export { DataPointLimitError } from './DataPointLimitError';
31
+ export { DEFAULT_CHART_MAX_DATA_POINTS, assertChartDataPolicy, createChartRuntimeIssueFromError, getQueryResultRowCount, resolveChartDataPolicy, type ChartDataPolicy, type ChartDataPolicyOverride, type ChartDataPolicyContext, type ChartRuntimeIssue, type ChartRuntimeIssueContext, type ChartRuntimeIssueReporter, } from './chart-runtime';
18
32
  export { MosaicProfiler, type MosaicProfilerCompoundHeaderProps, type MosaicProfilerCompoundRowsProps, type MosaicProfilerCompoundStatusBarProps, type MosaicProfilerCompoundTableProps, type MosaicProfilerProps, type MosaicProfilerRootProps, } from './profiler/MosaicProfiler';
19
33
  export { MosaicProfilerHeader, type MosaicProfilerHeaderProps, } from './profiler/MosaicProfilerHeader';
20
34
  export { MosaicProfilerRows, type MosaicProfilerRowsProps, } from './profiler/MosaicProfilerRows';
@@ -23,6 +37,8 @@ export { useMosaicProfiler } from './profiler/useMosaicProfiler';
23
37
  export { ResponsivePlot, type PlotSize, type ResponsivePlotProps, } from './ResponsivePlot';
24
38
  export { useMosaicClient, type UseMosaicClientOptions } from './useMosaicClient';
25
39
  export { VgPlotChart } from './VgPlotChart';
40
+ export { DASHBOARD_AI_INSTRUCTIONS, MAP_TOOL_KEY, createDashboardAgentTool, createDashboardAiTools, } from './ai';
41
+ export type { CreateDashboardAgentToolOptions, CreateDashboardAiToolsOptions, DashboardAgentResult, DashboardAgentRunResult, DashboardAgentToolCall, DashboardAiAdapter, DashboardAiStore, DashboardAiTable, CreateDashboardToolDepsOptions, } from './ai';
26
42
  export { MosaicChart } from './MosaicChart';
27
43
  export { MosaicChartBuilder } from './MosaicChartBuilder';
28
44
  export { useMosaicEditorContext } from './editor/MosaicEditorContext';
@@ -48,11 +64,16 @@ export type { ChartBuilderRootProps } from './chart-builders/ChartBuilderRoot';
48
64
  export { ChartBuilderRoot } from './chart-builders/ChartBuilderRoot';
49
65
  export type { ChartBuilderFieldsProps } from './chart-builders/ChartBuilderFields';
50
66
  export { ChartBuilderFields } from './chart-builders/ChartBuilderFields';
67
+ export { Field } from './chart-builders/Field';
68
+ export { TableSelector } from './chart-builders/TableSelector';
69
+ export { ColumnSelector } from './chart-builders/ColumnSelector';
70
+ export { MultiFieldSelector } from './chart-builders/MultiFieldSelector';
71
+ export { ColumnsProvider, useColumnsContext, type ColumnsContextValue, } from './chart-builders/ColumnsContext';
51
72
  export type { ChartBuilderTypeGridProps } from './chart-builders/ChartBuilderTypeGrid';
52
73
  export { ChartBuilderTypeGrid } from './chart-builders/ChartBuilderTypeGrid';
53
74
  export { buildChartTitleForSpec } from './chart-builders/chartSpecTitle';
54
- export { boxPlotChartType, bubbleChartChartType, countPlotChartType, createDefaultChartTypes, customSpecChartType, heatmapChartType, histogramChartType, isSpecChartType, isComponentChartType, lineChartChartType, mosaicChartTypes, ChartConfig, HistogramChartSettings, LineChartSettings, CountPlotChartSettings, BubbleChartSettings, HeatmapChartSettings, BoxPlotChartSettings, BaseChartToolParameters, validateColumnExists, HistogramToolParameters, LineChartToolParameters, CountPlotToolParameters, HeatmapToolParameters, BubbleChartToolParameters, BoxPlotToolParameters, createHistogramAiTool, createLineChartAiTool, createCountPlotAiTool, createHeatmapAiTool, createBubbleChartAiTool, createBoxPlotAiTool, createChartTools, } from './chart-types';
55
- export type { ChartSettings, ChartType, ChartToolDeps, ChartToolExecutionContext, ResolvedChartResources, CreateChartParams, CreateChartResult, HistogramToolParams, LineChartToolParams, CountPlotToolParams, HeatmapToolParams, BubbleChartToolParams, BoxPlotToolParams, } from './chart-types';
75
+ export { boxPlotChartType, bubbleChartChartType, countPlotChartType, createDefaultChartTypes, customSpecChartType, heatmapChartType, histogramChartType, isSpecChartType, isComponentChartType, lineChartChartType, mosaicChartTypes, ChartConfig, HistogramChartSettings, LineChartSettings, CountPlotChartSettings, BubbleChartSettings, HeatmapChartSettings, BoxPlotChartSettings, BaseChartToolParameters, validateColumnExists, HistogramToolParameters, LineChartToolParameters, CountPlotToolParameters, HeatmapToolParameters, BubbleChartToolParameters, BoxPlotToolParameters, createHistogramAiTool, createLineChartAiTool, createCountPlotAiTool, createHeatmapAiTool, createBubbleChartAiTool, createBoxPlotAiTool, createChartTools, createProfilerTool, createTextPanelTool, createListPanelsTool, createRemovePanelTool, ProfilerToolParameters, TextPanelToolParameters, ListPanelsToolParameters, RemovePanelToolParameters, } from './chart-types';
76
+ export type { ChartSettings, ChartType, ChartToolExecutionContext, DashboardToolDeps, ResolvedChartResources, CreateChartParams, CreateChartResult, HistogramToolParams, LineChartToolParams, CountPlotToolParams, HeatmapToolParams, BubbleChartToolParams, BoxPlotToolParams, ProfilerToolParams, TextPanelToolParams, ListPanelsToolParams, RemovePanelToolParams, } from './chart-types';
56
77
  export { buildChartTypeTitle, canCreateChartFromType, NUMERIC_COLUMN_TYPES, QUANTITATIVE_COLUMN_TYPES, TEMPORAL_COLUMN_TYPES, } from './chart-builders/chartTypeUtils';
57
78
  export type { FieldSelectorInputProps } from './chart-builders/FieldSelectorInput';
58
79
  export type { ChartBuilderColumn, ChartBuilderDashboardPanelOutput, ChartBuilderField, ChartSpec, ChartTypeDefinition, } from './chart-types/base-types';