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

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 (312) hide show
  1. package/README.md +120 -0
  2. package/dist/MosaicChartBuilder.d.ts +48 -13
  3. package/dist/MosaicChartBuilder.d.ts.map +1 -1
  4. package/dist/MosaicChartBuilder.js +28 -30
  5. package/dist/MosaicChartBuilder.js.map +1 -1
  6. package/dist/MosaicSlice.d.ts +11 -0
  7. package/dist/MosaicSlice.d.ts.map +1 -1
  8. package/dist/MosaicSlice.js +73 -10
  9. package/dist/MosaicSlice.js.map +1 -1
  10. package/dist/ResponsivePlot.d.ts +23 -0
  11. package/dist/ResponsivePlot.d.ts.map +1 -0
  12. package/dist/ResponsivePlot.js +43 -0
  13. package/dist/ResponsivePlot.js.map +1 -0
  14. package/dist/VgPlotChart.d.ts +18 -2
  15. package/dist/VgPlotChart.d.ts.map +1 -1
  16. package/dist/VgPlotChart.js +112 -26
  17. package/dist/VgPlotChart.js.map +1 -1
  18. package/dist/chart-builders/ChartBuilderActions.d.ts +6 -0
  19. package/dist/chart-builders/ChartBuilderActions.d.ts.map +1 -0
  20. package/dist/chart-builders/ChartBuilderActions.js +28 -0
  21. package/dist/chart-builders/ChartBuilderActions.js.map +1 -0
  22. package/dist/chart-builders/ChartBuilderContent.d.ts +13 -11
  23. package/dist/chart-builders/ChartBuilderContent.d.ts.map +1 -1
  24. package/dist/chart-builders/ChartBuilderContent.js +21 -52
  25. package/dist/chart-builders/ChartBuilderContent.js.map +1 -1
  26. package/dist/chart-builders/ChartBuilderContext.d.ts +9 -4
  27. package/dist/chart-builders/ChartBuilderContext.d.ts.map +1 -1
  28. package/dist/chart-builders/ChartBuilderContext.js +5 -0
  29. package/dist/chart-builders/ChartBuilderContext.js.map +1 -1
  30. package/dist/chart-builders/ChartBuilderDialog.d.ts +31 -6
  31. package/dist/chart-builders/ChartBuilderDialog.d.ts.map +1 -1
  32. package/dist/chart-builders/ChartBuilderDialog.js +25 -10
  33. package/dist/chart-builders/ChartBuilderDialog.js.map +1 -1
  34. package/dist/chart-builders/ChartBuilderFields.d.ts +6 -0
  35. package/dist/chart-builders/ChartBuilderFields.d.ts.map +1 -0
  36. package/dist/chart-builders/ChartBuilderFields.js +25 -0
  37. package/dist/chart-builders/ChartBuilderFields.js.map +1 -0
  38. package/dist/chart-builders/ChartBuilderRoot.d.ts +27 -0
  39. package/dist/chart-builders/ChartBuilderRoot.d.ts.map +1 -0
  40. package/dist/chart-builders/ChartBuilderRoot.js +61 -0
  41. package/dist/chart-builders/ChartBuilderRoot.js.map +1 -0
  42. package/dist/chart-builders/ChartBuilderTypeGrid.d.ts +7 -0
  43. package/dist/chart-builders/ChartBuilderTypeGrid.d.ts.map +1 -0
  44. package/dist/chart-builders/ChartBuilderTypeGrid.js +23 -0
  45. package/dist/chart-builders/ChartBuilderTypeGrid.js.map +1 -0
  46. package/dist/chart-builders/FieldSelectorInput.d.ts.map +1 -1
  47. package/dist/chart-builders/FieldSelectorInput.js +2 -2
  48. package/dist/chart-builders/FieldSelectorInput.js.map +1 -1
  49. package/dist/chart-builders/builders.d.ts +28 -1
  50. package/dist/chart-builders/builders.d.ts.map +1 -1
  51. package/dist/chart-builders/builders.js +44 -273
  52. package/dist/chart-builders/builders.js.map +1 -1
  53. package/dist/chart-builders/chartSpecTitle.d.ts +3 -4
  54. package/dist/chart-builders/chartSpecTitle.d.ts.map +1 -1
  55. package/dist/chart-builders/chartSpecTitle.js +3 -5
  56. package/dist/chart-builders/chartSpecTitle.js.map +1 -1
  57. package/dist/chart-builders/chartTypeUtils.d.ts +17 -0
  58. package/dist/chart-builders/chartTypeUtils.d.ts.map +1 -0
  59. package/dist/chart-builders/chartTypeUtils.js +55 -0
  60. package/dist/chart-builders/chartTypeUtils.js.map +1 -0
  61. package/dist/chart-builders/constants.d.ts +7 -0
  62. package/dist/chart-builders/constants.d.ts.map +1 -0
  63. package/dist/chart-builders/constants.js +34 -0
  64. package/dist/chart-builders/constants.js.map +1 -0
  65. package/dist/chart-builders/createChartBuilderStore.d.ts +11 -0
  66. package/dist/chart-builders/createChartBuilderStore.d.ts.map +1 -0
  67. package/dist/chart-builders/createChartBuilderStore.js +26 -0
  68. package/dist/chart-builders/createChartBuilderStore.js.map +1 -0
  69. package/dist/chart-builders/describeChartSpecs.d.ts +5 -3
  70. package/dist/chart-builders/describeChartSpecs.d.ts.map +1 -1
  71. package/dist/chart-builders/describeChartSpecs.js +11 -8
  72. package/dist/chart-builders/describeChartSpecs.js.map +1 -1
  73. package/dist/chart-builders/hooks/useChartFieldForm.d.ts +13 -0
  74. package/dist/chart-builders/hooks/useChartFieldForm.d.ts.map +1 -0
  75. package/dist/chart-builders/hooks/useChartFieldForm.js +12 -0
  76. package/dist/chart-builders/hooks/useChartFieldForm.js.map +1 -0
  77. package/dist/chart-builders/types.d.ts +12 -29
  78. package/dist/chart-builders/types.d.ts.map +1 -1
  79. package/dist/chart-builders/types.js +16 -1
  80. package/dist/chart-builders/types.js.map +1 -1
  81. package/dist/chart-types/base-types.d.ts +54 -0
  82. package/dist/chart-types/base-types.d.ts.map +1 -0
  83. package/dist/chart-types/base-types.js +6 -0
  84. package/dist/chart-types/base-types.js.map +1 -0
  85. package/dist/chart-types/box-plot/definition.d.ts +4 -0
  86. package/dist/chart-types/box-plot/definition.d.ts.map +1 -0
  87. package/dist/chart-types/box-plot/definition.js +45 -0
  88. package/dist/chart-types/box-plot/definition.js.map +1 -0
  89. package/dist/chart-types/box-plot/index.d.ts +3 -0
  90. package/dist/chart-types/box-plot/index.d.ts.map +1 -0
  91. package/dist/chart-types/box-plot/index.js +3 -0
  92. package/dist/chart-types/box-plot/index.js.map +1 -0
  93. package/dist/chart-types/box-plot/schema.d.ts +17 -0
  94. package/dist/chart-types/box-plot/schema.d.ts.map +1 -0
  95. package/dist/chart-types/box-plot/schema.js +12 -0
  96. package/dist/chart-types/box-plot/schema.js.map +1 -0
  97. package/dist/chart-types/bubble-chart/definition.d.ts +4 -0
  98. package/dist/chart-types/bubble-chart/definition.d.ts.map +1 -0
  99. package/dist/chart-types/bubble-chart/definition.js +48 -0
  100. package/dist/chart-types/bubble-chart/definition.js.map +1 -0
  101. package/dist/chart-types/bubble-chart/index.d.ts +3 -0
  102. package/dist/chart-types/bubble-chart/index.d.ts.map +1 -0
  103. package/dist/chart-types/bubble-chart/index.js +3 -0
  104. package/dist/chart-types/bubble-chart/index.js.map +1 -0
  105. package/dist/chart-types/bubble-chart/schema.d.ts +17 -0
  106. package/dist/chart-types/bubble-chart/schema.d.ts.map +1 -0
  107. package/dist/chart-types/bubble-chart/schema.js +12 -0
  108. package/dist/chart-types/bubble-chart/schema.js.map +1 -0
  109. package/dist/chart-types/count-plot/definition.d.ts +4 -0
  110. package/dist/chart-types/count-plot/definition.d.ts.map +1 -0
  111. package/dist/chart-types/count-plot/definition.js +50 -0
  112. package/dist/chart-types/count-plot/definition.js.map +1 -0
  113. package/dist/chart-types/count-plot/index.d.ts +3 -0
  114. package/dist/chart-types/count-plot/index.d.ts.map +1 -0
  115. package/dist/chart-types/count-plot/index.js +3 -0
  116. package/dist/chart-types/count-plot/index.js.map +1 -0
  117. package/dist/chart-types/count-plot/schema.d.ts +15 -0
  118. package/dist/chart-types/count-plot/schema.d.ts.map +1 -0
  119. package/dist/chart-types/count-plot/schema.js +11 -0
  120. package/dist/chart-types/count-plot/schema.js.map +1 -0
  121. package/dist/chart-types/custom-spec/definition.d.ts +4 -0
  122. package/dist/chart-types/custom-spec/definition.d.ts.map +1 -0
  123. package/dist/chart-types/custom-spec/definition.js +28 -0
  124. package/dist/chart-types/custom-spec/definition.js.map +1 -0
  125. package/dist/chart-types/custom-spec/index.d.ts +3 -0
  126. package/dist/chart-types/custom-spec/index.d.ts.map +1 -0
  127. package/dist/chart-types/custom-spec/index.js +3 -0
  128. package/dist/chart-types/custom-spec/index.js.map +1 -0
  129. package/dist/chart-types/custom-spec/schema.d.ts +11 -0
  130. package/dist/chart-types/custom-spec/schema.d.ts.map +1 -0
  131. package/dist/chart-types/custom-spec/schema.js +9 -0
  132. package/dist/chart-types/custom-spec/schema.js.map +1 -0
  133. package/dist/chart-types/ecdf/definition.d.ts +4 -0
  134. package/dist/chart-types/ecdf/definition.d.ts.map +1 -0
  135. package/dist/chart-types/ecdf/definition.js +47 -0
  136. package/dist/chart-types/ecdf/definition.js.map +1 -0
  137. package/dist/chart-types/ecdf/index.d.ts +3 -0
  138. package/dist/chart-types/ecdf/index.d.ts.map +1 -0
  139. package/dist/chart-types/ecdf/index.js +3 -0
  140. package/dist/chart-types/ecdf/index.js.map +1 -0
  141. package/dist/chart-types/ecdf/schema.d.ts +15 -0
  142. package/dist/chart-types/ecdf/schema.d.ts.map +1 -0
  143. package/dist/chart-types/ecdf/schema.js +11 -0
  144. package/dist/chart-types/ecdf/schema.js.map +1 -0
  145. package/dist/chart-types/heatmap/definition.d.ts +4 -0
  146. package/dist/chart-types/heatmap/definition.d.ts.map +1 -0
  147. package/dist/chart-types/heatmap/definition.js +49 -0
  148. package/dist/chart-types/heatmap/definition.js.map +1 -0
  149. package/dist/chart-types/heatmap/index.d.ts +3 -0
  150. package/dist/chart-types/heatmap/index.d.ts.map +1 -0
  151. package/dist/chart-types/heatmap/index.js +3 -0
  152. package/dist/chart-types/heatmap/index.js.map +1 -0
  153. package/dist/chart-types/heatmap/schema.d.ts +17 -0
  154. package/dist/chart-types/heatmap/schema.d.ts.map +1 -0
  155. package/dist/chart-types/heatmap/schema.js +12 -0
  156. package/dist/chart-types/heatmap/schema.js.map +1 -0
  157. package/dist/chart-types/histogram/definition.d.ts +4 -0
  158. package/dist/chart-types/histogram/definition.d.ts.map +1 -0
  159. package/dist/chart-types/histogram/definition.js +49 -0
  160. package/dist/chart-types/histogram/definition.js.map +1 -0
  161. package/dist/chart-types/histogram/index.d.ts +3 -0
  162. package/dist/chart-types/histogram/index.d.ts.map +1 -0
  163. package/dist/chart-types/histogram/index.js +3 -0
  164. package/dist/chart-types/histogram/index.js.map +1 -0
  165. package/dist/chart-types/histogram/schema.d.ts +15 -0
  166. package/dist/chart-types/histogram/schema.d.ts.map +1 -0
  167. package/dist/chart-types/histogram/schema.js +11 -0
  168. package/dist/chart-types/histogram/schema.js.map +1 -0
  169. package/dist/chart-types/index.d.ts +109 -0
  170. package/dist/chart-types/index.d.ts.map +1 -0
  171. package/dist/chart-types/index.js +70 -0
  172. package/dist/chart-types/index.js.map +1 -0
  173. package/dist/chart-types/line-chart/definition.d.ts +4 -0
  174. package/dist/chart-types/line-chart/definition.d.ts.map +1 -0
  175. package/dist/chart-types/line-chart/definition.js +46 -0
  176. package/dist/chart-types/line-chart/definition.js.map +1 -0
  177. package/dist/chart-types/line-chart/index.d.ts +3 -0
  178. package/dist/chart-types/line-chart/index.d.ts.map +1 -0
  179. package/dist/chart-types/line-chart/index.js +3 -0
  180. package/dist/chart-types/line-chart/index.js.map +1 -0
  181. package/dist/chart-types/line-chart/schema.d.ts +17 -0
  182. package/dist/chart-types/line-chart/schema.d.ts.map +1 -0
  183. package/dist/chart-types/line-chart/schema.js +12 -0
  184. package/dist/chart-types/line-chart/schema.js.map +1 -0
  185. package/dist/chart-types/registry.d.ts +5 -0
  186. package/dist/chart-types/registry.d.ts.map +1 -0
  187. package/dist/chart-types/registry.js +28 -0
  188. package/dist/chart-types/registry.js.map +1 -0
  189. package/dist/dashboard/DashboardPanelErrorBoundary.d.ts +17 -0
  190. package/dist/dashboard/DashboardPanelErrorBoundary.d.ts.map +1 -0
  191. package/dist/dashboard/DashboardPanelErrorBoundary.js +21 -0
  192. package/dist/dashboard/DashboardPanelErrorBoundary.js.map +1 -0
  193. package/dist/dashboard/MosaicDashboard.d.ts +2 -4
  194. package/dist/dashboard/MosaicDashboard.d.ts.map +1 -1
  195. package/dist/dashboard/MosaicDashboard.js +42 -19
  196. package/dist/dashboard/MosaicDashboard.js.map +1 -1
  197. package/dist/dashboard/MosaicDashboardContext.d.ts +1 -0
  198. package/dist/dashboard/MosaicDashboardContext.d.ts.map +1 -1
  199. package/dist/dashboard/MosaicDashboardContext.js.map +1 -1
  200. package/dist/dashboard/MosaicDashboardPanel.d.ts +3 -0
  201. package/dist/dashboard/MosaicDashboardPanel.d.ts.map +1 -0
  202. package/dist/dashboard/MosaicDashboardPanel.js +26 -0
  203. package/dist/dashboard/MosaicDashboardPanel.js.map +1 -0
  204. package/dist/dashboard/MosaicDashboardPanelDragOverlay.d.ts +8 -0
  205. package/dist/dashboard/MosaicDashboardPanelDragOverlay.d.ts.map +1 -0
  206. package/dist/dashboard/MosaicDashboardPanelDragOverlay.js +17 -0
  207. package/dist/dashboard/MosaicDashboardPanelDragOverlay.js.map +1 -0
  208. package/dist/dashboard/MosaicDashboardPanelHeader.d.ts +13 -0
  209. package/dist/dashboard/MosaicDashboardPanelHeader.d.ts.map +1 -0
  210. package/dist/dashboard/MosaicDashboardPanelHeader.js +30 -0
  211. package/dist/dashboard/MosaicDashboardPanelHeader.js.map +1 -0
  212. package/dist/dashboard/MosaicDashboardPanelLayout.d.ts +10 -0
  213. package/dist/dashboard/MosaicDashboardPanelLayout.d.ts.map +1 -0
  214. package/dist/dashboard/MosaicDashboardPanelLayout.js +25 -0
  215. package/dist/dashboard/MosaicDashboardPanelLayout.js.map +1 -0
  216. package/dist/dashboard/MosaicDashboardPanels.d.ts +2 -0
  217. package/dist/dashboard/MosaicDashboardPanels.d.ts.map +1 -0
  218. package/dist/dashboard/MosaicDashboardPanels.js +52 -0
  219. package/dist/dashboard/MosaicDashboardPanels.js.map +1 -0
  220. package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.d.ts +3 -0
  221. package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.d.ts.map +1 -0
  222. package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.js +32 -0
  223. package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.js.map +1 -0
  224. package/dist/dashboard/MosaicDashboardSlice.d.ts +482 -27
  225. package/dist/dashboard/MosaicDashboardSlice.d.ts.map +1 -1
  226. package/dist/dashboard/MosaicDashboardSlice.js +478 -93
  227. package/dist/dashboard/MosaicDashboardSlice.js.map +1 -1
  228. package/dist/dashboard/MosaicDashboardToolbar.d.ts.map +1 -1
  229. package/dist/dashboard/MosaicDashboardToolbar.js +69 -7
  230. package/dist/dashboard/MosaicDashboardToolbar.js.map +1 -1
  231. package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.d.ts +4 -0
  232. package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.d.ts.map +1 -0
  233. package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.js +29 -0
  234. package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.js.map +1 -0
  235. package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.d.ts +3 -0
  236. package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.d.ts.map +1 -0
  237. package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.js +68 -0
  238. package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.js.map +1 -0
  239. package/dist/dashboard/VgPlotSpecPopoverEditor.d.ts.map +1 -1
  240. package/dist/dashboard/VgPlotSpecPopoverEditor.js +2 -2
  241. package/dist/dashboard/VgPlotSpecPopoverEditor.js.map +1 -1
  242. package/dist/dashboard/chart-settings/ChartSettings.d.ts +39 -0
  243. package/dist/dashboard/chart-settings/ChartSettings.d.ts.map +1 -0
  244. package/dist/dashboard/chart-settings/ChartSettings.js +90 -0
  245. package/dist/dashboard/chart-settings/ChartSettings.js.map +1 -0
  246. package/dist/dashboard/chart-settings/ChartSettingsContext.d.ts +20 -0
  247. package/dist/dashboard/chart-settings/ChartSettingsContext.d.ts.map +1 -0
  248. package/dist/dashboard/chart-settings/ChartSettingsContext.js +14 -0
  249. package/dist/dashboard/chart-settings/ChartSettingsContext.js.map +1 -0
  250. package/dist/dashboard/chart-settings/ChartSettingsPanel.d.ts +11 -0
  251. package/dist/dashboard/chart-settings/ChartSettingsPanel.d.ts.map +1 -0
  252. package/dist/dashboard/chart-settings/ChartSettingsPanel.js +8 -0
  253. package/dist/dashboard/chart-settings/ChartSettingsPanel.js.map +1 -0
  254. package/dist/dashboard/chart-settings/ChartTypeSelector.d.ts +11 -0
  255. package/dist/dashboard/chart-settings/ChartTypeSelector.d.ts.map +1 -0
  256. package/dist/dashboard/chart-settings/ChartTypeSelector.js +17 -0
  257. package/dist/dashboard/chart-settings/ChartTypeSelector.js.map +1 -0
  258. package/dist/dashboard/chart-settings/DynamicChartSettings.d.ts +11 -0
  259. package/dist/dashboard/chart-settings/DynamicChartSettings.d.ts.map +1 -0
  260. package/dist/dashboard/chart-settings/DynamicChartSettings.js +19 -0
  261. package/dist/dashboard/chart-settings/DynamicChartSettings.js.map +1 -0
  262. package/dist/dashboard/chart-settings/index.d.ts +6 -0
  263. package/dist/dashboard/chart-settings/index.d.ts.map +1 -0
  264. package/dist/dashboard/chart-settings/index.js +6 -0
  265. package/dist/dashboard/chart-settings/index.js.map +1 -0
  266. package/dist/dashboard/chart-settings/useTableColumns.d.ts +3 -0
  267. package/dist/dashboard/chart-settings/useTableColumns.d.ts.map +1 -0
  268. package/dist/dashboard/chart-settings/useTableColumns.js +12 -0
  269. package/dist/dashboard/chart-settings/useTableColumns.js.map +1 -0
  270. package/dist/dashboard/defaultPanelRenderers.d.ts +3 -0
  271. package/dist/dashboard/defaultPanelRenderers.d.ts.map +1 -0
  272. package/dist/dashboard/defaultPanelRenderers.js +11 -0
  273. package/dist/dashboard/defaultPanelRenderers.js.map +1 -0
  274. package/dist/dashboard/generateMosaicChartSpec.d.ts +15 -0
  275. package/dist/dashboard/generateMosaicChartSpec.d.ts.map +1 -0
  276. package/dist/dashboard/generateMosaicChartSpec.js +30 -0
  277. package/dist/dashboard/generateMosaicChartSpec.js.map +1 -0
  278. package/dist/editor/MosaicChartDisplay.d.ts.map +1 -1
  279. package/dist/editor/MosaicChartDisplay.js +6 -1
  280. package/dist/editor/MosaicChartDisplay.js.map +1 -1
  281. package/dist/index.d.ts +31 -5
  282. package/dist/index.d.ts.map +1 -1
  283. package/dist/index.js +21 -2
  284. package/dist/index.js.map +1 -1
  285. package/dist/profiler/useMosaicProfiler.d.ts.map +1 -1
  286. package/dist/profiler/useMosaicProfiler.js.map +1 -1
  287. package/dist/tableInterop.js.map +1 -1
  288. package/dist/useMosaicClient.d.ts +4 -15
  289. package/dist/useMosaicClient.d.ts.map +1 -1
  290. package/dist/useMosaicClient.js +10 -4
  291. package/dist/useMosaicClient.js.map +1 -1
  292. package/package.json +15 -9
  293. package/dist/chart-builders/createMosaicChartTool.d.ts +0 -45
  294. package/dist/chart-builders/createMosaicChartTool.d.ts.map +0 -1
  295. package/dist/chart-builders/createMosaicChartTool.js +0 -109
  296. package/dist/chart-builders/createMosaicChartTool.js.map +0 -1
  297. package/dist/dashboard/MosaicDashboardChartPanel.d.ts +0 -3
  298. package/dist/dashboard/MosaicDashboardChartPanel.d.ts.map +0 -1
  299. package/dist/dashboard/MosaicDashboardChartPanel.js +0 -49
  300. package/dist/dashboard/MosaicDashboardChartPanel.js.map +0 -1
  301. package/dist/dashboard/MosaicDashboardCharts.d.ts +0 -3
  302. package/dist/dashboard/MosaicDashboardCharts.d.ts.map +0 -1
  303. package/dist/dashboard/MosaicDashboardCharts.js +0 -45
  304. package/dist/dashboard/MosaicDashboardCharts.js.map +0 -1
  305. package/dist/dashboard/MosaicDashboardProfiler.d.ts +0 -3
  306. package/dist/dashboard/MosaicDashboardProfiler.d.ts.map +0 -1
  307. package/dist/dashboard/MosaicDashboardProfiler.js +0 -21
  308. package/dist/dashboard/MosaicDashboardProfiler.js.map +0 -1
  309. package/dist/use-mosaic.d.ts +0 -11
  310. package/dist/use-mosaic.d.ts.map +0 -1
  311. package/dist/use-mosaic.js +0 -42
  312. package/dist/use-mosaic.js.map +0 -1
package/README.md CHANGED
@@ -41,6 +41,36 @@ export const {roomStore, useRoomStore} = createRoomStore<RoomState>(
41
41
  );
42
42
  ```
43
43
 
44
+ Mosaic's pre-aggregation optimization creates `preagg_*` cache tables lazily
45
+ when users interact with cross-filtered selections. By default Mosaic writes
46
+ those tables to the persistent `mosaic` schema. If the DuckDB database is a user
47
+ project file, point pre-aggregates at an attached cache database or disable them:
48
+
49
+ ```tsx
50
+ const mosaicCacheDatabase = '__sqlrooms_mosaic_cache';
51
+
52
+ const connector = createWebSocketDuckDbConnector({
53
+ initializationQuery: [
54
+ `ATTACH IF NOT EXISTS ':memory:' AS ${mosaicCacheDatabase}`,
55
+ `CREATE SCHEMA IF NOT EXISTS ${mosaicCacheDatabase}.mosaic`,
56
+ ].join('; '),
57
+ });
58
+
59
+ export const {roomStore, useRoomStore} = createRoomStore<RoomState>(
60
+ (set, get, store) => ({
61
+ // ... db slice using connector
62
+ ...createMosaicSlice({
63
+ preagg: {
64
+ schema: `${mosaicCacheDatabase}.mosaic`,
65
+ },
66
+ })(set, get, store),
67
+ }),
68
+ );
69
+ ```
70
+
71
+ Set `preagg.enabled` to `false` when you prefer to avoid pre-aggregate tables
72
+ entirely.
73
+
44
74
  The Mosaic connection is automatically initialized when the DuckDB connector is ready. You can check the connection status:
45
75
 
46
76
  ```tsx
@@ -137,6 +167,96 @@ For the common case, prefer the compound `MosaicProfiler` API. `useMosaicProfile
137
167
  is still available when you need direct access to the profiler state for custom
138
168
  layout, sizing, or advanced composition.
139
169
 
170
+ ### Mosaic Dashboard Panels
171
+
172
+ `MosaicDashboard` is a compound dashboard surface backed by generic dashboard
173
+ panels instead of a chart-only list. Configure supported panel renderers and
174
+ runtime add-panel actions when creating the dashboard slice.
175
+
176
+ ```tsx
177
+ import {
178
+ createDefaultMosaicDashboardPanelRenderers,
179
+ createMosaicDashboardProfilerPanelConfig,
180
+ createMosaicDashboardSlice,
181
+ createMosaicDashboardVgPlotPanelConfig,
182
+ MosaicDashboard,
183
+ } from '@sqlrooms/mosaic';
184
+
185
+ const dashboardSlice = createMosaicDashboardSlice({
186
+ panelRenderers: createDefaultMosaicDashboardPanelRenderers(),
187
+ // Optional: pass chartTypes/chartBuilders to customize Add Chart.
188
+ // Optional: pass addPanelActions to add app-specific menu entries.
189
+ });
190
+
191
+ function Dashboard() {
192
+ return <MosaicDashboard dashboardId="main" />;
193
+ }
194
+
195
+ function addProfiler(store: RoomStore) {
196
+ store.getState().mosaicDashboard.addPanel(
197
+ 'main',
198
+ createMosaicDashboardProfilerPanelConfig({
199
+ source: {tableName: 'earthquakes'},
200
+ }),
201
+ );
202
+ }
203
+ ```
204
+
205
+ Dashboards have a creation-time `layoutType` of either `dock` or `grid`.
206
+ Existing persisted dashboards default to `dock`; pass `'grid'` to
207
+ `createDashboard(title, 'grid')` or `ensureDashboard(id, title, 'grid')` when
208
+ creating a dashboard that should use the scrollable grid renderer. Re-ensuring
209
+ an existing dashboard does not convert between layout types.
210
+
211
+ Dashboard panel sources may specify a `tableName` or trusted `sqlQuery`; when a
212
+ panel omits a source it falls back to the dashboard selected table. Panel renderer
213
+ definitions and chart builder definitions are runtime-only and intentionally
214
+ live outside persisted dashboard config.
215
+
216
+ ### Chart Builder Compound Components
217
+
218
+ The chart builder UI can be used as a compound component API for flexible composition:
219
+
220
+ ```tsx
221
+ import {
222
+ ChartBuilderRoot,
223
+ ChartBuilderTrigger,
224
+ ChartBuilderDialogContent,
225
+ ChartBuilderContent,
226
+ } from '@sqlrooms/mosaic';
227
+
228
+ function MyDashboard() {
229
+ const columns = [...]; // Your table columns
230
+
231
+ return (
232
+ <ChartBuilderRoot
233
+ tableName="earthquakes"
234
+ columns={columns}
235
+ onCreateChart={(spec, title) => {
236
+ // Handle chart creation
237
+ }}
238
+ >
239
+ <ChartBuilderTrigger />
240
+ <ChartBuilderDialogContent>
241
+ <ChartBuilderContent />
242
+ </ChartBuilderDialogContent>
243
+ </ChartBuilderRoot>
244
+ );
245
+ }
246
+ ```
247
+
248
+ Available compound components:
249
+
250
+ - `ChartBuilderRoot` - Context provider and dialog wrapper
251
+ - `ChartBuilderTrigger` - Button to open the dialog
252
+ - `ChartBuilderDialogContent` - Dialog content wrapper
253
+ - `ChartBuilderContent` - Main chart builder UI (type grid + fields + actions)
254
+ - `ChartBuilderTypeGrid` - Chart type selector grid
255
+ - `ChartBuilderFields` - Field selector inputs
256
+ - `ChartBuilderActions` - Back/Create buttons
257
+
258
+ For simpler use cases, the legacy `ChartBuilderDialog` component is still available but deprecated.
259
+
140
260
  ### Working with Selections
141
261
 
142
262
  Selections enable cross-filtering between multiple visualizations. You can get or create a named selection from the store:
@@ -1,32 +1,67 @@
1
+ import type { ReactElement } from 'react';
2
+ import { mosaicChartBuilders } from './chart-builders/builders';
3
+ import { mosaicChartTypes } from './chart-types';
4
+ import { ChartBuilderActions } from './chart-builders/ChartBuilderActions';
5
+ import { ChartBuilderContent } from './chart-builders/ChartBuilderContent';
6
+ import { ChartBuilderDialog, ChartBuilderDialogContent, ChartBuilderTrigger } from './chart-builders/ChartBuilderDialog';
7
+ import { ChartBuilderRoot, type ChartBuilderRootProps } from './chart-builders/ChartBuilderRoot';
8
+ import { ChartBuilderFields } from './chart-builders/ChartBuilderFields';
9
+ import { ChartBuilderTypeGrid } from './chart-builders/ChartBuilderTypeGrid';
10
+ import { FieldSelectorInput } from './chart-builders/FieldSelectorInput';
1
11
  /**
2
12
  * Compound component for building Mosaic charts from templates.
3
13
  *
4
- * Use `MosaicChartBuilder.Content` for an inline builder, or
5
- * `MosaicChartBuilder.Dialog` for a dialog-wrapped version.
14
+ * Use `<MosaicChartBuilder>` as the root; it provides context and wraps a
15
+ * Radix Dialog.
6
16
  *
7
- * @example Inline usage
17
+ * @example Compound usage (recommended)
8
18
  * ```tsx
9
- * <MosaicChartBuilder.Content
19
+ * <MosaicChartBuilder
10
20
  * tableName="my_table"
11
21
  * columns={columns}
12
22
  * onCreateChart={handleCreate}
13
- * />
23
+ * >
24
+ * <MosaicChartBuilder.Trigger />
25
+ * <MosaicChartBuilder.Dialog />
26
+ * </MosaicChartBuilder>
14
27
  * ```
15
28
  *
16
- * @example Dialog usage
29
+ * @example Custom trigger button
17
30
  * ```tsx
18
- * <MosaicChartBuilder.Dialog
19
- * open={isOpen}
20
- * onOpenChange={setOpen}
31
+ * <MosaicChartBuilder
32
+ * tableName="my_table"
33
+ * columns={columns}
34
+ * onCreateChart={handleCreate}
35
+ * >
36
+ * <MosaicChartBuilder.Trigger variant="ghost" size="icon">
37
+ * <PlusIcon />
38
+ * </MosaicChartBuilder.Trigger>
39
+ * <MosaicChartBuilder.Dialog />
40
+ * </MosaicChartBuilder>
41
+ * ```
42
+ *
43
+ * @example Inline builder (no dialog)
44
+ * ```tsx
45
+ * <MosaicChartBuilder.Content
21
46
  * tableName="my_table"
22
47
  * columns={columns}
23
48
  * onCreateChart={handleCreate}
24
49
  * />
25
50
  * ```
26
51
  */
27
- export declare const MosaicChartBuilder: {
28
- readonly Content: import("react").FC<import(".").ChartBuilderContentProps>;
29
- readonly Dialog: import("react").FC<import(".").ChartBuilderDialogProps>;
30
- readonly FieldSelector: import("react").FC<import(".").FieldSelectorInputProps>;
52
+ type MosaicChartBuilderCompoundComponent = ((props: ChartBuilderRootProps) => ReactElement) & {
53
+ Root: typeof ChartBuilderRoot;
54
+ chartTypes: typeof mosaicChartTypes;
55
+ chartBuilders: typeof mosaicChartBuilders;
56
+ Trigger: typeof ChartBuilderTrigger;
57
+ Dialog: typeof ChartBuilderDialogContent;
58
+ Content: typeof ChartBuilderContent;
59
+ TypeGrid: typeof ChartBuilderTypeGrid;
60
+ Fields: typeof ChartBuilderFields;
61
+ Actions: typeof ChartBuilderActions;
62
+ FieldSelector: typeof FieldSelectorInput;
63
+ LegacyDialog: typeof ChartBuilderDialog;
31
64
  };
65
+ export declare const MosaicChartBuilder: MosaicChartBuilderCompoundComponent;
66
+ export {};
32
67
  //# sourceMappingURL=MosaicChartBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicChartBuilder.d.ts","sourceRoot":"","sources":["../src/MosaicChartBuilder.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,kBAAkB;;;;CAIrB,CAAC"}
1
+ {"version":3,"file":"MosaicChartBuilder.d.ts","sourceRoot":"","sources":["../src/MosaicChartBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,OAAO,CAAC;AACxC,OAAO,EAAC,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAC,mBAAmB,EAAC,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAC,mBAAmB,EAAC,MAAM,sCAAsC,CAAC;AACzE,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,EAC3B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAC,kBAAkB,EAAC,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAC,oBAAoB,EAAC,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAC,kBAAkB,EAAC,MAAM,qCAAqC,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,KAAK,mCAAmC,GAAG,CAAC,CAC1C,KAAK,EAAE,qBAAqB,KACzB,YAAY,CAAC,GAAG;IACnB,IAAI,EAAE,OAAO,gBAAgB,CAAC;IAC9B,UAAU,EAAE,OAAO,gBAAgB,CAAC;IACpC,aAAa,EAAE,OAAO,mBAAmB,CAAC;IAC1C,OAAO,EAAE,OAAO,mBAAmB,CAAC;IACpC,MAAM,EAAE,OAAO,yBAAyB,CAAC;IACzC,OAAO,EAAE,OAAO,mBAAmB,CAAC;IACpC,QAAQ,EAAE,OAAO,oBAAoB,CAAC;IACtC,MAAM,EAAE,OAAO,kBAAkB,CAAC;IAClC,OAAO,EAAE,OAAO,mBAAmB,CAAC;IACpC,aAAa,EAAE,OAAO,kBAAkB,CAAC;IACzC,YAAY,EAAE,OAAO,kBAAkB,CAAC;CACzC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,mCA0B9B,CAAC"}
@@ -1,35 +1,33 @@
1
+ import { mosaicChartBuilders } from './chart-builders/builders';
2
+ import { mosaicChartTypes } from './chart-types';
3
+ import { ChartBuilderActions } from './chart-builders/ChartBuilderActions';
1
4
  import { ChartBuilderContent } from './chart-builders/ChartBuilderContent';
2
- import { ChartBuilderDialog } from './chart-builders/ChartBuilderDialog';
5
+ import { ChartBuilderDialog, ChartBuilderDialogContent, ChartBuilderTrigger, } from './chart-builders/ChartBuilderDialog';
6
+ import { ChartBuilderRoot, } from './chart-builders/ChartBuilderRoot';
7
+ import { ChartBuilderFields } from './chart-builders/ChartBuilderFields';
8
+ import { ChartBuilderTypeGrid } from './chart-builders/ChartBuilderTypeGrid';
3
9
  import { FieldSelectorInput } from './chart-builders/FieldSelectorInput';
4
- /**
5
- * Compound component for building Mosaic charts from templates.
6
- *
7
- * Use `MosaicChartBuilder.Content` for an inline builder, or
8
- * `MosaicChartBuilder.Dialog` for a dialog-wrapped version.
9
- *
10
- * @example Inline usage
11
- * ```tsx
12
- * <MosaicChartBuilder.Content
13
- * tableName="my_table"
14
- * columns={columns}
15
- * onCreateChart={handleCreate}
16
- * />
17
- * ```
18
- *
19
- * @example Dialog usage
20
- * ```tsx
21
- * <MosaicChartBuilder.Dialog
22
- * open={isOpen}
23
- * onOpenChange={setOpen}
24
- * tableName="my_table"
25
- * columns={columns}
26
- * onCreateChart={handleCreate}
27
- * />
28
- * ```
29
- */
30
- export const MosaicChartBuilder = {
10
+ export const MosaicChartBuilder = Object.assign(ChartBuilderRoot, {
11
+ Root: ChartBuilderRoot,
12
+ /** Named built-in chart-type definitions. */
13
+ chartTypes: mosaicChartTypes,
14
+ /** Named built-in chart templates (same objects as default set). */
15
+ chartBuilders: mosaicChartBuilders,
16
+ /** Default trigger button; customize via ButtonProps or children. */
17
+ Trigger: ChartBuilderTrigger,
18
+ /** Dialog content pane with chart-builder steps. */
19
+ Dialog: ChartBuilderDialogContent,
20
+ /** Standalone builder UI (no dialog wrapper). */
31
21
  Content: ChartBuilderContent,
32
- Dialog: ChartBuilderDialog,
22
+ /** Built-in chart-type picker grid. */
23
+ TypeGrid: ChartBuilderTypeGrid,
24
+ /** Field selectors for the currently selected chart type. */
25
+ Fields: ChartBuilderFields,
26
+ /** Back/Create actions for the current chart type selection. */
27
+ Actions: ChartBuilderActions,
28
+ /** Field selector primitive. */
33
29
  FieldSelector: FieldSelectorInput,
34
- };
30
+ /** Legacy one-shot dialog (backward-compatible). */
31
+ LegacyDialog: ChartBuilderDialog,
32
+ });
35
33
  //# sourceMappingURL=MosaicChartBuilder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicChartBuilder.js","sourceRoot":"","sources":["../src/MosaicChartBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAC,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAC,kBAAkB,EAAC,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAC,kBAAkB,EAAC,MAAM,qCAAqC,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,OAAO,EAAE,mBAAmB;IAC5B,MAAM,EAAE,kBAAkB;IAC1B,aAAa,EAAE,kBAAkB;CACzB,CAAC","sourcesContent":["import {ChartBuilderContent} from './chart-builders/ChartBuilderContent';\nimport {ChartBuilderDialog} from './chart-builders/ChartBuilderDialog';\nimport {FieldSelectorInput} from './chart-builders/FieldSelectorInput';\n\n/**\n * Compound component for building Mosaic charts from templates.\n *\n * Use `MosaicChartBuilder.Content` for an inline builder, or\n * `MosaicChartBuilder.Dialog` for a dialog-wrapped version.\n *\n * @example Inline usage\n * ```tsx\n * <MosaicChartBuilder.Content\n * tableName=\"my_table\"\n * columns={columns}\n * onCreateChart={handleCreate}\n * />\n * ```\n *\n * @example Dialog usage\n * ```tsx\n * <MosaicChartBuilder.Dialog\n * open={isOpen}\n * onOpenChange={setOpen}\n * tableName=\"my_table\"\n * columns={columns}\n * onCreateChart={handleCreate}\n * />\n * ```\n */\nexport const MosaicChartBuilder = {\n Content: ChartBuilderContent,\n Dialog: ChartBuilderDialog,\n FieldSelector: FieldSelectorInput,\n} as const;\n"]}
1
+ {"version":3,"file":"MosaicChartBuilder.js","sourceRoot":"","sources":["../src/MosaicChartBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAC,mBAAmB,EAAC,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAC,mBAAmB,EAAC,MAAM,sCAAsC,CAAC;AACzE,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,gBAAgB,GAEjB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAC,kBAAkB,EAAC,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAC,oBAAoB,EAAC,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAC,kBAAkB,EAAC,MAAM,qCAAqC,CAAC;AA4DvE,MAAM,CAAC,MAAM,kBAAkB,GAC7B,MAAM,CAAC,MAAM,CACX,gBAAkE,EAClE;IACE,IAAI,EAAE,gBAAgB;IACtB,6CAA6C;IAC7C,UAAU,EAAE,gBAAgB;IAC5B,oEAAoE;IACpE,aAAa,EAAE,mBAAmB;IAClC,qEAAqE;IACrE,OAAO,EAAE,mBAAmB;IAC5B,oDAAoD;IACpD,MAAM,EAAE,yBAAyB;IACjC,iDAAiD;IACjD,OAAO,EAAE,mBAAmB;IAC5B,uCAAuC;IACvC,QAAQ,EAAE,oBAAoB;IAC9B,6DAA6D;IAC7D,MAAM,EAAE,kBAAkB;IAC1B,gEAAgE;IAChE,OAAO,EAAE,mBAAmB;IAC5B,gCAAgC;IAChC,aAAa,EAAE,kBAAkB;IACjC,oDAAoD;IACpD,YAAY,EAAE,kBAAkB;CACjC,CACF,CAAC","sourcesContent":["import type {ReactElement} from 'react';\nimport {mosaicChartBuilders} from './chart-builders/builders';\nimport {mosaicChartTypes} from './chart-types';\nimport {ChartBuilderActions} from './chart-builders/ChartBuilderActions';\nimport {ChartBuilderContent} from './chart-builders/ChartBuilderContent';\nimport {\n ChartBuilderDialog,\n ChartBuilderDialogContent,\n ChartBuilderTrigger,\n} from './chart-builders/ChartBuilderDialog';\nimport {\n ChartBuilderRoot,\n type ChartBuilderRootProps,\n} from './chart-builders/ChartBuilderRoot';\nimport {ChartBuilderFields} from './chart-builders/ChartBuilderFields';\nimport {ChartBuilderTypeGrid} from './chart-builders/ChartBuilderTypeGrid';\nimport {FieldSelectorInput} from './chart-builders/FieldSelectorInput';\n\n/**\n * Compound component for building Mosaic charts from templates.\n *\n * Use `<MosaicChartBuilder>` as the root; it provides context and wraps a\n * Radix Dialog.\n *\n * @example Compound usage (recommended)\n * ```tsx\n * <MosaicChartBuilder\n * tableName=\"my_table\"\n * columns={columns}\n * onCreateChart={handleCreate}\n * >\n * <MosaicChartBuilder.Trigger />\n * <MosaicChartBuilder.Dialog />\n * </MosaicChartBuilder>\n * ```\n *\n * @example Custom trigger button\n * ```tsx\n * <MosaicChartBuilder\n * tableName=\"my_table\"\n * columns={columns}\n * onCreateChart={handleCreate}\n * >\n * <MosaicChartBuilder.Trigger variant=\"ghost\" size=\"icon\">\n * <PlusIcon />\n * </MosaicChartBuilder.Trigger>\n * <MosaicChartBuilder.Dialog />\n * </MosaicChartBuilder>\n * ```\n *\n * @example Inline builder (no dialog)\n * ```tsx\n * <MosaicChartBuilder.Content\n * tableName=\"my_table\"\n * columns={columns}\n * onCreateChart={handleCreate}\n * />\n * ```\n */\n\ntype MosaicChartBuilderCompoundComponent = ((\n props: ChartBuilderRootProps,\n) => ReactElement) & {\n Root: typeof ChartBuilderRoot;\n chartTypes: typeof mosaicChartTypes;\n chartBuilders: typeof mosaicChartBuilders;\n Trigger: typeof ChartBuilderTrigger;\n Dialog: typeof ChartBuilderDialogContent;\n Content: typeof ChartBuilderContent;\n TypeGrid: typeof ChartBuilderTypeGrid;\n Fields: typeof ChartBuilderFields;\n Actions: typeof ChartBuilderActions;\n FieldSelector: typeof FieldSelectorInput;\n LegacyDialog: typeof ChartBuilderDialog;\n};\n\nexport const MosaicChartBuilder: MosaicChartBuilderCompoundComponent =\n Object.assign(\n ChartBuilderRoot as (props: ChartBuilderRootProps) => ReactElement,\n {\n Root: ChartBuilderRoot,\n /** Named built-in chart-type definitions. */\n chartTypes: mosaicChartTypes,\n /** Named built-in chart templates (same objects as default set). */\n chartBuilders: mosaicChartBuilders,\n /** Default trigger button; customize via ButtonProps or children. */\n Trigger: ChartBuilderTrigger,\n /** Dialog content pane with chart-builder steps. */\n Dialog: ChartBuilderDialogContent,\n /** Standalone builder UI (no dialog wrapper). */\n Content: ChartBuilderContent,\n /** Built-in chart-type picker grid. */\n TypeGrid: ChartBuilderTypeGrid,\n /** Field selectors for the currently selected chart type. */\n Fields: ChartBuilderFields,\n /** Back/Create actions for the current chart type selection. */\n Actions: ChartBuilderActions,\n /** Field selector primitive. */\n FieldSelector: FieldSelectorInput,\n /** Legacy one-shot dialog (backward-compatible). */\n LegacyDialog: ChartBuilderDialog,\n },\n );\n"]}
@@ -6,6 +6,12 @@ import type { Table as ArrowTable } from 'apache-arrow';
6
6
  import { z } from 'zod';
7
7
  export declare const MosaicSliceConfig: z.ZodObject<{}, z.core.$strip>;
8
8
  export type MosaicSliceConfig = z.infer<typeof MosaicSliceConfig>;
9
+ export type MosaicPreAggregateOptions = {
10
+ /** Database schema/namespace for Mosaic pre-aggregate tables. */
11
+ schema?: string;
12
+ /** Enable or disable Mosaic's pre-aggregation optimization. */
13
+ enabled?: boolean;
14
+ };
9
15
  export type MosaicClientOptions = {
10
16
  /** Unique identifier for this client */
11
17
  id?: string;
@@ -17,6 +23,8 @@ export type MosaicClientOptions = {
17
23
  query: (filter: unknown) => ReturnType<typeof Query.from>;
18
24
  /** Callback when query results are received */
19
25
  queryResult?: (result: ArrowTable) => void;
26
+ /** Callback when query execution fails */
27
+ queryError?: (error: Error) => void;
20
28
  };
21
29
  export type TrackedClient = {
22
30
  id: string;
@@ -24,6 +32,7 @@ export type TrackedClient = {
24
32
  createdAt: number;
25
33
  isLoading: boolean;
26
34
  data: unknown | null;
35
+ error?: Error;
27
36
  selection?: Selection;
28
37
  queryResultCallback?: (result: ArrowTable) => void;
29
38
  };
@@ -53,6 +62,7 @@ export type MosaicSliceState = {
53
62
  ensureClient: (options: MosaicClientOptions & {
54
63
  id: string;
55
64
  onQueryResult?: (result: ArrowTable) => void;
65
+ onQueryError?: (error: Error) => void;
56
66
  }) => void;
57
67
  /** Disconnect and remove a client by id */
58
68
  destroyClient: (id: string) => void;
@@ -64,6 +74,7 @@ export declare function createDefaultMosaicConfig(props?: Partial<MosaicSliceCon
64
74
  export type CreateMosaicSliceProps = {
65
75
  config?: Partial<MosaicSliceConfig>;
66
76
  coordinator?: Coordinator;
77
+ preagg?: MosaicPreAggregateOptions;
67
78
  };
68
79
  export declare function createMosaicSlice(props?: CreateMosaicSliceProps): import("zustand").StateCreator<MosaicSliceState>;
69
80
  export type DuckDbSliceStateWithMosaic = DuckDbSliceState & MosaicSliceState;
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicSlice.d.ts","sourceRoot":"","sources":["../src/MosaicSlice.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MosaicSlice.d.ts","sourceRoot":"","sources":["../src/MosaicSlice.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,7 @@ export function createMosaicSlice(props = {}) {
27
27
  try {
28
28
  if (props.coordinator) {
29
29
  resolvedCoordinator = props.coordinator;
30
+ applyMosaicPreAggregateOptions(resolvedCoordinator, props.preagg);
30
31
  }
31
32
  else {
32
33
  const dbConnector = await get().db.getConnector();
@@ -38,6 +39,7 @@ export function createMosaicSlice(props = {}) {
38
39
  connection: dbConnector.getConnection(),
39
40
  })
40
41
  : createDuckDbMosaicConnector(dbConnector);
42
+ applyMosaicPreAggregateOptions(resolvedCoordinator, props.preagg);
41
43
  resolvedCoordinator.databaseConnector(mosaicConnector);
42
44
  }
43
45
  }
@@ -58,6 +60,11 @@ export function createMosaicSlice(props = {}) {
58
60
  async destroy() {
59
61
  get().mosaic.destroyAllClients();
60
62
  },
63
+ setConfig(config) {
64
+ set((state) => produce(state, (draft) => {
65
+ draft.mosaic.config = config;
66
+ }));
67
+ },
61
68
  getSelection(name, type = 'crossfilter') {
62
69
  const existing = get().mosaic.selections[name];
63
70
  if (existing)
@@ -90,16 +97,39 @@ export function createMosaicSlice(props = {}) {
90
97
  if (tracked) {
91
98
  tracked.data = data;
92
99
  tracked.isLoading = false;
100
+ tracked.error = undefined;
93
101
  }
94
102
  }));
95
103
  // Call external callback if provided
96
104
  options.queryResult?.(toArrowClientResult(data));
97
105
  };
106
+ const wrappedQueryPending = () => {
107
+ set((state) => produce(state, (draft) => {
108
+ const tracked = draft.mosaic.clients[id];
109
+ if (tracked) {
110
+ tracked.isLoading = true;
111
+ tracked.error = undefined;
112
+ }
113
+ }));
114
+ };
115
+ const wrappedQueryError = (error) => {
116
+ set((state) => produce(state, (draft) => {
117
+ const tracked = draft.mosaic.clients[id];
118
+ if (tracked) {
119
+ tracked.isLoading = false;
120
+ tracked.error = error;
121
+ }
122
+ }));
123
+ client.enabled = false;
124
+ options.queryError?.(error);
125
+ };
98
126
  const client = makeClient({
99
127
  coordinator: connection.coordinator,
100
128
  selection,
101
129
  query: options.query,
102
130
  queryResult: wrappedQueryResult,
131
+ queryPending: wrappedQueryPending,
132
+ queryError: wrappedQueryError,
103
133
  });
104
134
  set((state) => produce(state, (draft) => {
105
135
  draft.mosaic.clients[id] = {
@@ -108,6 +138,7 @@ export function createMosaicSlice(props = {}) {
108
138
  createdAt: Date.now(),
109
139
  isLoading: true,
110
140
  data: null,
141
+ error: undefined,
111
142
  selection,
112
143
  queryResultCallback: options.queryResult
113
144
  ? (result) => options.queryResult(toArrowClientResult(result))
@@ -145,6 +176,7 @@ export function createMosaicSlice(props = {}) {
145
176
  if (tracked) {
146
177
  tracked.data = data;
147
178
  tracked.isLoading = false;
179
+ tracked.error = undefined;
148
180
  }
149
181
  }));
150
182
  const arrowData = toArrowClientResult(data);
@@ -153,11 +185,34 @@ export function createMosaicSlice(props = {}) {
153
185
  // Also call original queryResult if provided
154
186
  options.queryResult?.(arrowData);
155
187
  };
188
+ const wrappedQueryPending = () => {
189
+ set((state) => produce(state, (draft) => {
190
+ const tracked = draft.mosaic.clients[options.id];
191
+ if (tracked) {
192
+ tracked.isLoading = true;
193
+ tracked.error = undefined;
194
+ }
195
+ }));
196
+ };
197
+ const wrappedQueryError = (error) => {
198
+ set((state) => produce(state, (draft) => {
199
+ const tracked = draft.mosaic.clients[options.id];
200
+ if (tracked) {
201
+ tracked.isLoading = false;
202
+ tracked.error = error;
203
+ }
204
+ }));
205
+ client.enabled = false;
206
+ options.onQueryError?.(error);
207
+ options.queryError?.(error);
208
+ };
156
209
  const client = makeClient({
157
210
  coordinator: connection.coordinator,
158
211
  selection,
159
212
  query: options.query,
160
213
  queryResult: wrappedQueryResult,
214
+ queryPending: wrappedQueryPending,
215
+ queryError: wrappedQueryError,
161
216
  });
162
217
  set((state) => produce(state, (draft) => {
163
218
  draft.mosaic.clients[options.id] = {
@@ -166,6 +221,7 @@ export function createMosaicSlice(props = {}) {
166
221
  createdAt: Date.now(),
167
222
  isLoading: true,
168
223
  data: null,
224
+ error: undefined,
169
225
  selection,
170
226
  queryResultCallback: options.onQueryResult
171
227
  ? (result) => options.onQueryResult(toArrowClientResult(result))
@@ -174,24 +230,20 @@ export function createMosaicSlice(props = {}) {
174
230
  }));
175
231
  },
176
232
  destroyClient(id) {
177
- const { connection, clients } = get().mosaic;
233
+ const { clients } = get().mosaic;
178
234
  const tracked = clients[id];
179
235
  if (!tracked)
180
236
  return;
181
- if (connection.status === 'ready') {
182
- connection.coordinator.disconnect(tracked.client);
183
- }
237
+ tracked.client.destroy();
184
238
  set((state) => produce(state, (draft) => {
185
239
  delete draft.mosaic.clients[id];
186
240
  }));
187
241
  },
188
242
  destroyAllClients() {
189
- const { connection, clients } = get().mosaic;
190
- if (connection.status === 'ready') {
191
- Object.values(clients).forEach((tracked) => {
192
- connection.coordinator.disconnect(tracked.client);
193
- });
194
- }
243
+ const { clients } = get().mosaic;
244
+ Object.values(clients).forEach((tracked) => {
245
+ tracked.client.destroy();
246
+ });
195
247
  set((state) => produce(state, (draft) => {
196
248
  draft.mosaic.clients = {};
197
249
  }));
@@ -199,6 +251,17 @@ export function createMosaicSlice(props = {}) {
199
251
  },
200
252
  }));
201
253
  }
254
+ function applyMosaicPreAggregateOptions(mosaicCoordinator, options) {
255
+ if (!options) {
256
+ return;
257
+ }
258
+ if (options.schema !== undefined) {
259
+ mosaicCoordinator.preaggregator.schema = options.schema;
260
+ }
261
+ if (options.enabled !== undefined) {
262
+ mosaicCoordinator.preaggregator.enabled = options.enabled;
263
+ }
264
+ }
202
265
  export function useStoreWithMosaic(selector) {
203
266
  return useBaseRoomStore((state) => selector(state));
204
267
  }