@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/dist/index.js CHANGED
@@ -6,14 +6,20 @@ export { isParam, isSelection, makeClient, Param, Selection, } from '@uwdata/mos
6
6
  export { astToDOM, astToESM, parseSpec } from '@uwdata/mosaic-spec';
7
7
  export { asc, column, desc, Query, sql } from '@uwdata/mosaic-sql';
8
8
  export * as vg from '@uwdata/vgplot';
9
+ export { MosaicDashboard, MosaicDashboardRoot, } from './dashboard/MosaicDashboard';
10
+ export { useMosaicDashboardContext } from './dashboard/MosaicDashboardContext';
11
+ export { DashboardPanelErrorBoundary } from './dashboard/DashboardPanelErrorBoundary';
12
+ export { createDefaultMosaicDashboardPanelRenderers } from './dashboard/defaultPanelRenderers';
13
+ export { createMosaicDashboardProfilerPanelConfig, createMosaicDashboardVgPlotPanelConfig, createDefaultMosaicDashboardConfig, createMosaicDashboardSlice, getMosaicDashboardDockId, getMosaicDashboardGridId, getMosaicDashboardPanelId, getMosaicDashboardSelectionName, isVgPlotPanelConfig, MOSAIC_DASHBOARD_PANEL, MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE, MOSAIC_DASHBOARD_VGPLOT_PANEL_TYPE, MosaicDashboardEntry, MosaicDashboardLayoutType, MosaicDashboardPanelConfig, MosaicDashboardPanelSource, MosaicDashboardSliceConfig, resolveMosaicDashboardPanelSource, useStoreWithMosaicDashboard, } from './dashboard/MosaicDashboardSlice';
14
+ export { createMosaicColorLegendPlot, MosaicColorLegend, } from './MosaicColorLegend';
9
15
  export { createDefaultMosaicConfig, createMosaicSlice, MosaicSliceConfig, } from './MosaicSlice';
10
16
  export { MosaicProfiler, } from './profiler/MosaicProfiler';
11
17
  export { MosaicProfilerHeader, } from './profiler/MosaicProfilerHeader';
12
18
  export { MosaicProfilerRows, } from './profiler/MosaicProfilerRows';
13
19
  export { MosaicProfilerStatusBar, } from './profiler/MosaicProfilerStatusBar';
14
20
  export { useMosaicProfiler } from './profiler/useMosaicProfiler';
21
+ export { ResponsivePlot, } from './ResponsivePlot';
15
22
  export { useMosaicClient } from './useMosaicClient';
16
- export { createMosaicColorLegendPlot, MosaicColorLegend, } from './MosaicColorLegend';
17
23
  export { VgPlotChart } from './VgPlotChart';
18
24
  // Compound components
19
25
  export { MosaicChart } from './MosaicChart';
@@ -24,5 +30,18 @@ export { getCachedMosaicSchema, loadMosaicSchema, preloadMosaicSchema, } from '.
24
30
  export { useMosaicChartEditor } from './editor/useMosaicChartEditor';
25
31
  export { getProfilerTableWidth, PROFILER_DEFAULT_COLUMN_WIDTH_PX, PROFILER_ROW_NUMBER_COLUMN_WIDTH_PX, PROFILER_UNSUPPORTED_COLUMN_WIDTH_PX, } from './profiler/layout';
26
32
  // Chart builder types and utilities
27
- export { createDefaultChartBuilders } from './chart-builders/builders';
33
+ export { boxPlotBuilder, bubbleChartBuilder, countPlotBuilder, createChartBuilderTemplate, createChartBuilderTemplates, createDefaultChartBuilders, customSpecBuilder, ecdfBuilder, heatmapBuilder, histogramBuilder, lineChartBuilder, mosaicChartBuilders, } from './chart-builders/builders';
34
+ export { ChartBuilderActions } from './chart-builders/ChartBuilderActions';
35
+ export { ChartBuilderContent } from './chart-builders/ChartBuilderContent';
36
+ export { useChartBuilderContext, useChartBuilderStore, } from './chart-builders/ChartBuilderContext';
37
+ export { ChartBuilderDialogContent, ChartBuilderTrigger, } from './chart-builders/ChartBuilderDialog';
38
+ export { ChartBuilderRoot } from './chart-builders/ChartBuilderRoot';
39
+ export { ChartBuilderFields } from './chart-builders/ChartBuilderFields';
40
+ export { ChartBuilderTypeGrid } from './chart-builders/ChartBuilderTypeGrid';
41
+ export { buildChartTitleForSpec } from './chart-builders/chartSpecTitle';
42
+ export { boxPlotChartType, bubbleChartChartType, countPlotChartType, createDefaultChartTypes, customSpecChartType, ecdfChartType, heatmapChartType, histogramChartType, lineChartChartType, mosaicChartTypes, } from './chart-types';
43
+ export { buildChartTypeTitle, canCreateChartFromType, columnMatchesFieldTypes, getAvailableChartTypes, getCompatibleColumns, isChartTypeAvailable, NUMERIC_COLUMN_TYPES, QUANTITATIVE_COLUMN_TYPES, TEMPORAL_COLUMN_TYPES, } from './chart-builders/chartTypeUtils';
44
+ export { describeChartSpecs, describeChartTypes, } from './chart-builders/describeChartSpecs';
45
+ export { toChartSpec, toChartTypeDefinition } from './chart-builders/types';
46
+ export { MosaicCodeMirrorEditor } from './editor/MosaicCodeMirrorEditor';
28
47
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,OAAO,EACP,WAAW,EACX,UAAU,EACV,KAAK,EACL,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAC,MAAM,qBAAqB,CAAC;AAElE,OAAO,EAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAC,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,iBAAiB,GAKlB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,cAAc,GAOf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,oBAAoB,GAErB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,kBAAkB,GAEnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,uBAAuB,GAExB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAC,iBAAiB,EAAC,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAC,eAAe,EAA8B,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,2BAA2B,EAC3B,iBAAiB,GAElB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAE1C,sBAAsB;AACtB,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAExD,2BAA2B;AAC3B,OAAO,EAAC,sBAAsB,EAAC,MAAM,8BAA8B,CAAC;AACpE,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAC,oBAAoB,EAAC,MAAM,+BAA+B,CAAC;AAgBnE,OAAO,EACL,qBAAqB,EACrB,gCAAgC,EAChC,mCAAmC,EACnC,oCAAoC,GACrC,MAAM,mBAAmB,CAAC;AAc3B,oCAAoC;AACpC,OAAO,EAAC,0BAA0B,EAAC,MAAM,2BAA2B,CAAC","sourcesContent":["/**\n * {@include ../README.md}\n * @packageDocumentation\n */\nexport {\n isParam,\n isSelection,\n makeClient,\n Param,\n Selection,\n} from '@uwdata/mosaic-core';\nexport {astToDOM, astToESM, parseSpec} from '@uwdata/mosaic-spec';\nexport type {Spec} from '@uwdata/mosaic-spec';\nexport {asc, column, desc, Query, sql} from '@uwdata/mosaic-sql';\nexport * as vg from '@uwdata/vgplot';\nexport {\n createDefaultMosaicConfig,\n createMosaicSlice,\n MosaicSliceConfig,\n type CreateMosaicSliceProps,\n type MosaicClientOptions,\n type MosaicSliceState,\n type TrackedClient,\n} from './MosaicSlice';\nexport {\n MosaicProfiler,\n type MosaicProfilerCompoundHeaderProps,\n type MosaicProfilerCompoundRowsProps,\n type MosaicProfilerCompoundStatusBarProps,\n type MosaicProfilerCompoundTableProps,\n type MosaicProfilerProps,\n type MosaicProfilerRootProps,\n} from './profiler/MosaicProfiler';\nexport {\n MosaicProfilerHeader,\n type MosaicProfilerHeaderProps,\n} from './profiler/MosaicProfilerHeader';\nexport {\n MosaicProfilerRows,\n type MosaicProfilerRowsProps,\n} from './profiler/MosaicProfilerRows';\nexport {\n MosaicProfilerStatusBar,\n type MosaicProfilerStatusBarProps,\n} from './profiler/MosaicProfilerStatusBar';\nexport {useMosaicProfiler} from './profiler/useMosaicProfiler';\nexport {useMosaicClient, type UseMosaicClientOptions} from './useMosaicClient';\nexport {\n createMosaicColorLegendPlot,\n MosaicColorLegend,\n type MosaicColorLegendProps,\n} from './MosaicColorLegend';\nexport {VgPlotChart} from './VgPlotChart';\n\n// Compound components\nexport {MosaicChart} from './MosaicChart';\nexport {MosaicChartBuilder} from './MosaicChartBuilder';\n\n// Editor hooks and context\nexport {useMosaicEditorContext} from './editor/MosaicEditorContext';\nexport {\n getCachedMosaicSchema,\n loadMosaicSchema,\n preloadMosaicSchema,\n} from './editor/mosaicSchema';\nexport {useMosaicChartEditor} from './editor/useMosaicChartEditor';\n\n// Editor types\nexport type {MosaicChartContainerProps} from './editor/MosaicChartContainer';\nexport type {MosaicChartDisplayProps} from './editor/MosaicChartDisplay';\nexport type {MosaicChartEditorActionsProps} from './editor/MosaicChartEditorActions';\nexport type {MosaicCodeMirrorEditorProps} from './editor/MosaicCodeMirrorEditor';\nexport type {MosaicSpecEditorPanelProps} from './editor/MosaicSpecEditorPanel';\nexport type {\n MosaicEditorActions,\n MosaicEditorContextValue,\n MosaicEditorState,\n OnMosaicSpecChange,\n UseMosaicChartEditorOptions,\n UseMosaicChartEditorReturn,\n} from './editor/types';\nexport {\n getProfilerTableWidth,\n PROFILER_DEFAULT_COLUMN_WIDTH_PX,\n PROFILER_ROW_NUMBER_COLUMN_WIDTH_PX,\n PROFILER_UNSUPPORTED_COLUMN_WIDTH_PX,\n} from './profiler/layout';\nexport type {\n MosaicProfilerCategoryBucket,\n MosaicProfilerCategorySummary,\n MosaicProfilerColumnKind,\n MosaicProfilerColumnState,\n MosaicProfilerHistogramSummary,\n MosaicProfilerOptions,\n MosaicProfilerPaginationState,\n MosaicProfilerSorting,\n MosaicProfilerSummaryState,\n UseMosaicProfilerReturn,\n} from './profiler/types';\n\n// Chart builder types and utilities\nexport {createDefaultChartBuilders} from './chart-builders/builders';\nexport type {ChartBuilderContentProps} from './chart-builders/ChartBuilderContent';\nexport type {ChartBuilderDialogProps} from './chart-builders/ChartBuilderDialog';\nexport type {FieldSelectorInputProps} from './chart-builders/FieldSelectorInput';\nexport type {\n ChartBuilderColumn,\n ChartBuilderField,\n ChartBuilderTemplate,\n} from './chart-builders/types';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * {@include ../README.md}\n * @packageDocumentation\n */\nexport {\n isParam,\n isSelection,\n makeClient,\n Param,\n Selection,\n} from '@uwdata/mosaic-core';\nexport {astToDOM, astToESM, parseSpec} from '@uwdata/mosaic-spec';\nexport type {Spec} from '@uwdata/mosaic-spec';\nexport {asc, column, desc, Query, sql} from '@uwdata/mosaic-sql';\nexport * as vg from '@uwdata/vgplot';\nexport {\n MosaicDashboard,\n MosaicDashboardRoot,\n type MosaicDashboardProps,\n type MosaicDashboardRootProps,\n} from './dashboard/MosaicDashboard';\nexport {useMosaicDashboardContext} from './dashboard/MosaicDashboardContext';\nexport {DashboardPanelErrorBoundary} from './dashboard/DashboardPanelErrorBoundary';\nexport {createDefaultMosaicDashboardPanelRenderers} from './dashboard/defaultPanelRenderers';\nexport {\n createMosaicDashboardProfilerPanelConfig,\n createMosaicDashboardVgPlotPanelConfig,\n createDefaultMosaicDashboardConfig,\n createMosaicDashboardSlice,\n getMosaicDashboardDockId,\n getMosaicDashboardGridId,\n getMosaicDashboardPanelId,\n getMosaicDashboardSelectionName,\n isVgPlotPanelConfig,\n MOSAIC_DASHBOARD_PANEL,\n MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE,\n MOSAIC_DASHBOARD_VGPLOT_PANEL_TYPE,\n MosaicDashboardEntry,\n MosaicDashboardLayoutType,\n MosaicDashboardPanelConfig,\n MosaicDashboardPanelSource,\n MosaicDashboardSliceConfig,\n resolveMosaicDashboardPanelSource,\n useStoreWithMosaicDashboard,\n} from './dashboard/MosaicDashboardSlice';\nexport type {\n MosaicDashboardAddPanelAction,\n MosaicDashboardAddPanelActionContext,\n CreateMosaicDashboardSliceProps,\n MosaicDashboardEntry as MosaicDashboardEntryType,\n MosaicDashboardPanelConfig as MosaicDashboardPanelConfigType,\n MosaicDashboardPanelRenderer,\n MosaicDashboardPanelRendererProps,\n MosaicDashboardPanelSource as MosaicDashboardPanelSourceType,\n MosaicDashboardSliceConfig as MosaicDashboardSliceConfigType,\n MosaicDashboardSliceState,\n MosaicDashboardStoreState,\n VgPlotPanelConfig,\n} from './dashboard/MosaicDashboardSlice';\nexport {\n createMosaicColorLegendPlot,\n MosaicColorLegend,\n type MosaicColorLegendProps,\n} from './MosaicColorLegend';\nexport {\n createDefaultMosaicConfig,\n createMosaicSlice,\n MosaicSliceConfig,\n type CreateMosaicSliceProps,\n type MosaicClientOptions,\n type MosaicPreAggregateOptions,\n type MosaicSliceState,\n type TrackedClient,\n} from './MosaicSlice';\nexport {\n MosaicProfiler,\n type MosaicProfilerCompoundHeaderProps,\n type MosaicProfilerCompoundRowsProps,\n type MosaicProfilerCompoundStatusBarProps,\n type MosaicProfilerCompoundTableProps,\n type MosaicProfilerProps,\n type MosaicProfilerRootProps,\n} from './profiler/MosaicProfiler';\nexport {\n MosaicProfilerHeader,\n type MosaicProfilerHeaderProps,\n} from './profiler/MosaicProfilerHeader';\nexport {\n MosaicProfilerRows,\n type MosaicProfilerRowsProps,\n} from './profiler/MosaicProfilerRows';\nexport {\n MosaicProfilerStatusBar,\n type MosaicProfilerStatusBarProps,\n} from './profiler/MosaicProfilerStatusBar';\nexport {useMosaicProfiler} from './profiler/useMosaicProfiler';\nexport {\n ResponsivePlot,\n type PlotSize,\n type ResponsivePlotProps,\n} from './ResponsivePlot';\nexport {useMosaicClient, type UseMosaicClientOptions} from './useMosaicClient';\nexport {VgPlotChart} from './VgPlotChart';\n\n// Compound components\nexport {MosaicChart} from './MosaicChart';\nexport {MosaicChartBuilder} from './MosaicChartBuilder';\n\n// Editor hooks and context\nexport {useMosaicEditorContext} from './editor/MosaicEditorContext';\nexport {\n getCachedMosaicSchema,\n loadMosaicSchema,\n preloadMosaicSchema,\n} from './editor/mosaicSchema';\nexport {useMosaicChartEditor} from './editor/useMosaicChartEditor';\n\n// Editor types\nexport type {MosaicChartContainerProps} from './editor/MosaicChartContainer';\nexport type {MosaicChartDisplayProps} from './editor/MosaicChartDisplay';\nexport type {MosaicChartEditorActionsProps} from './editor/MosaicChartEditorActions';\nexport type {MosaicCodeMirrorEditorProps} from './editor/MosaicCodeMirrorEditor';\nexport type {MosaicSpecEditorPanelProps} from './editor/MosaicSpecEditorPanel';\nexport type {\n MosaicEditorActions,\n MosaicEditorContextValue,\n MosaicEditorState,\n OnMosaicSpecChange,\n UseMosaicChartEditorOptions,\n UseMosaicChartEditorReturn,\n} from './editor/types';\nexport {\n getProfilerTableWidth,\n PROFILER_DEFAULT_COLUMN_WIDTH_PX,\n PROFILER_ROW_NUMBER_COLUMN_WIDTH_PX,\n PROFILER_UNSUPPORTED_COLUMN_WIDTH_PX,\n} from './profiler/layout';\nexport type {\n MosaicProfilerCategoryBucket,\n MosaicProfilerCategorySummary,\n MosaicProfilerColumnKind,\n MosaicProfilerColumnState,\n MosaicProfilerHistogramSummary,\n MosaicProfilerOptions,\n MosaicProfilerPaginationState,\n MosaicProfilerSorting,\n MosaicProfilerSummaryState,\n UseMosaicProfilerReturn,\n} from './profiler/types';\n\n// Chart builder types and utilities\nexport {\n boxPlotBuilder,\n bubbleChartBuilder,\n countPlotBuilder,\n createChartBuilderTemplate,\n createChartBuilderTemplates,\n createDefaultChartBuilders,\n customSpecBuilder,\n ecdfBuilder,\n heatmapBuilder,\n histogramBuilder,\n lineChartBuilder,\n mosaicChartBuilders,\n} from './chart-builders/builders';\nexport type {ChartBuilderActionsProps} from './chart-builders/ChartBuilderActions';\nexport {ChartBuilderActions} from './chart-builders/ChartBuilderActions';\nexport type {ChartBuilderContentProps} from './chart-builders/ChartBuilderContent';\nexport {ChartBuilderContent} from './chart-builders/ChartBuilderContent';\nexport {\n useChartBuilderContext,\n useChartBuilderStore,\n} from './chart-builders/ChartBuilderContext';\nexport type {ChartBuilderContextValue} from './chart-builders/ChartBuilderContext';\nexport type {\n ChartBuilderDialogContentProps,\n ChartBuilderDialogProps,\n ChartBuilderTriggerProps,\n} from './chart-builders/ChartBuilderDialog';\nexport {\n ChartBuilderDialogContent,\n ChartBuilderTrigger,\n} from './chart-builders/ChartBuilderDialog';\nexport type {ChartBuilderRootProps} from './chart-builders/ChartBuilderRoot';\nexport {ChartBuilderRoot} from './chart-builders/ChartBuilderRoot';\nexport type {ChartBuilderFieldsProps} from './chart-builders/ChartBuilderFields';\nexport {ChartBuilderFields} from './chart-builders/ChartBuilderFields';\nexport type {ChartBuilderTypeGridProps} from './chart-builders/ChartBuilderTypeGrid';\nexport {ChartBuilderTypeGrid} from './chart-builders/ChartBuilderTypeGrid';\nexport {buildChartTitleForSpec} from './chart-builders/chartSpecTitle';\nexport {\n boxPlotChartType,\n bubbleChartChartType,\n countPlotChartType,\n createDefaultChartTypes,\n customSpecChartType,\n ecdfChartType,\n heatmapChartType,\n histogramChartType,\n lineChartChartType,\n mosaicChartTypes,\n} from './chart-types';\nexport type {\n VgPlotChartConfig,\n VgPlotChartSettings,\n VgPlotChartType,\n} from './chart-types';\nexport {\n buildChartTypeTitle,\n canCreateChartFromType,\n columnMatchesFieldTypes,\n getAvailableChartTypes,\n getCompatibleColumns,\n isChartTypeAvailable,\n NUMERIC_COLUMN_TYPES,\n QUANTITATIVE_COLUMN_TYPES,\n TEMPORAL_COLUMN_TYPES,\n} from './chart-builders/chartTypeUtils';\nexport {\n describeChartSpecs,\n describeChartTypes,\n} from './chart-builders/describeChartSpecs';\nexport type {FieldSelectorInputProps} from './chart-builders/FieldSelectorInput';\nexport {toChartSpec, toChartTypeDefinition} from './chart-builders/types';\nexport type {\n ChartBuilderColumn,\n ChartBuilderField,\n ChartBuilderTemplate,\n ChartSpec,\n ChartTypeDefinition,\n} from './chart-builders/types';\nexport {MosaicCodeMirrorEditor} from './editor/MosaicCodeMirrorEditor';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useMosaicProfiler.d.ts","sourceRoot":"","sources":["../../src/profiler/useMosaicProfiler.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAEV,qBAAqB,EAGrB,uBAAuB,EACxB,MAAM,SAAS,CAAC;AAmbjB;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,qBAAqB,GAC7B,uBAAuB,CAqGzB"}
1
+ {"version":3,"file":"useMosaicProfiler.d.ts","sourceRoot":"","sources":["../../src/profiler/useMosaicProfiler.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAEV,qBAAqB,EAGrB,uBAAuB,EACxB,MAAM,SAAS,CAAC;AAuajB;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,qBAAqB,GAC7B,uBAAuB,CAqGzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useMosaicProfiler.js","sourceRoot":"","sources":["../../src/profiler/useMosaicProfiler.ts"],"names":[],"mappings":"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","sourcesContent":["import {createId} from '@paralleldrive/cuid2';\nimport {useDebounce} from '@sqlrooms/ui';\nimport {\n Selection as MosaicSelection,\n type Selection,\n} from '@uwdata/mosaic-core';\nimport {\n useEffect,\n useMemo,\n useState,\n type Dispatch,\n type SetStateAction,\n} from 'react';\nimport {useStore} from 'zustand';\nimport {type MosaicSliceState, useStoreWithMosaic} from '../MosaicSlice';\nimport type {\n MosaicProfilerColumnState,\n MosaicProfilerOptions,\n MosaicProfilerPaginationState,\n MosaicProfilerSorting,\n UseMosaicProfilerReturn,\n} from './types';\nimport {\n createProfilerStore,\n type ProfilerStore,\n type ProfilerStoreState,\n} from './createProfilerStore';\nimport {\n connectProfilerCountClient,\n connectProfilerPageClient,\n connectProfilerSummaryClients,\n loadProfilerSchema,\n} from './profilerController';\nimport {\n buildProfilerBaseQuery,\n buildProfilerPageQuery,\n createEmptySummaryState,\n isProfilerHistogramType,\n isProfilerUnsupportedSummaryType,\n} from './utils';\n\ntype ProfilerSelectionState = {\n selection: Selection;\n selectionVersion: number;\n};\n\ntype ProfilerStoreSlice = {\n filteredCount: ProfilerStoreState['filteredCount'];\n lastNonEmptyPageTable: ProfilerStoreState['lastNonEmptyPageTable'];\n page: ProfilerStoreState['page'];\n pagination: MosaicProfilerPaginationState;\n profilerStore: ProfilerStore;\n schema: ProfilerStoreState['schema'];\n setPagination: Dispatch<SetStateAction<MosaicProfilerPaginationState>>;\n setSorting: Dispatch<SetStateAction<MosaicProfilerSorting>>;\n sorting: MosaicProfilerSorting;\n summaries: ProfilerStoreState['summaries'];\n totalCount: ProfilerStoreState['totalCount'];\n};\n\ntype ProfilerQueryState = {\n baseQuery: ReturnType<typeof buildProfilerBaseQuery>;\n datasetId: string;\n fieldNames: string[];\n fields: ProfilerStoreState['schema']['fields'];\n hasFilters: boolean;\n pageQuery: string;\n rowFilter: ReturnType<Selection['predicate']>;\n};\n\n/**\n * Tracks Mosaic selection updates as a monotonically increasing version so\n * memoized queries and lifecycle effects can respond to crossfilter changes.\n */\nfunction useSelectionVersion(selection: Selection) {\n const [version, setVersion] = useState(0);\n\n useEffect(() => {\n const handleChange = () => setVersion((value) => value + 1);\n selection.addEventListener('value', handleChange);\n return () => selection.removeEventListener('value', handleChange);\n }, [selection]);\n\n return version;\n}\n\n/**\n * Resolves the profiler selection, creating a crossfilter selection when the\n * caller does not supply one, and exposes a version that changes with it.\n */\nfunction useProfilerSelection(\n options: Pick<MosaicProfilerOptions, 'selection' | 'selectionName'>,\n): ProfilerSelectionState {\n const {selection: providedSelection, selectionName} = options;\n const generatedSelectionName = useMemo(\n () => `mosaic-profiler-${createId()}`,\n [],\n );\n const selectionKey = selectionName ?? generatedSelectionName;\n const existingSelection = useStoreWithMosaic(\n (state) => state.mosaic.selections[selectionKey],\n );\n const getSelection = useStoreWithMosaic((state) => state.mosaic.getSelection);\n const [fallbackSelection] = useState(() => MosaicSelection.crossfilter());\n\n useEffect(() => {\n if (!providedSelection && !existingSelection) {\n getSelection(selectionKey, 'crossfilter');\n }\n }, [existingSelection, getSelection, providedSelection, selectionKey]);\n\n const selection =\n providedSelection ?? existingSelection ?? fallbackSelection;\n\n return {\n selection,\n selectionVersion: useSelectionVersion(selection),\n };\n}\n\n/**\n * Creates the per-profiler local store and subscribes to the raw state slices\n * that the public profiler hook exposes.\n */\nfunction useProfilerStoreState(options: {\n initialSorting: MosaicProfilerSorting;\n pageSize: number;\n}): ProfilerStoreSlice {\n const [profilerStore] = useState(() =>\n createProfilerStore({\n initialSorting: options.initialSorting,\n pageSize: options.pageSize,\n }),\n );\n\n return {\n filteredCount: useStore(profilerStore, (state) => state.filteredCount),\n lastNonEmptyPageTable: useStore(\n profilerStore,\n (state) => state.lastNonEmptyPageTable,\n ),\n page: useStore(profilerStore, (state) => state.page),\n pagination: useStore(profilerStore, (state) => state.pagination),\n profilerStore,\n schema: useStore(profilerStore, (state) => state.schema),\n setPagination: useStore(profilerStore, (state) => state.setPagination),\n setSorting: useStore(profilerStore, (state) => state.setSorting),\n sorting: useStore(profilerStore, (state) => state.sorting),\n summaries: useStore(profilerStore, (state) => state.summaries),\n totalCount: useStore(profilerStore, (state) => state.totalCount),\n };\n}\n\n/**\n * Derives the profiler's field and SQL state from the current schema,\n * selection, sorting, and pagination state.\n */\nfunction useProfilerQueryState(options: {\n pagination: MosaicProfilerPaginationState;\n rowSelectionVersion: number;\n schema: ProfilerStoreState['schema'];\n selection: Selection;\n selectionVersion: number;\n sorting: MosaicProfilerSorting;\n tableName: string;\n}): ProfilerQueryState {\n const {\n pagination,\n rowSelectionVersion,\n schema,\n selection,\n selectionVersion,\n sorting,\n tableName,\n } = options;\n const fields = schema.fields;\n const fieldNames = useMemo(() => fields.map((field) => field.name), [fields]);\n const filter = useMemo(() => {\n void selectionVersion;\n return selection.predicate();\n }, [selection, selectionVersion]);\n const rowFilter = useMemo(() => {\n void rowSelectionVersion;\n return selection.predicate();\n }, [rowSelectionVersion, selection]);\n const baseQuery = useMemo(\n () =>\n buildProfilerBaseQuery({\n columns: fieldNames,\n filter,\n sorting,\n tableName,\n }),\n [fieldNames, filter, sorting, tableName],\n );\n const pageBaseQuery = useMemo(\n () =>\n buildProfilerBaseQuery({\n columns: fieldNames,\n filter: rowFilter,\n sorting,\n tableName,\n }),\n [fieldNames, rowFilter, sorting, tableName],\n );\n\n return {\n baseQuery,\n datasetId: [tableName, ...fieldNames].join('\\u0001'),\n fieldNames,\n fields,\n hasFilters: Array.isArray(filter) ? filter.length > 0 : Boolean(filter),\n pageQuery: buildProfilerPageQuery(pageBaseQuery, pagination).toString(),\n rowFilter,\n };\n}\n\n/**\n * Owns the coordinator-backed schema, row, count, and summary client\n * lifecycles for a profiler instance.\n */\nfunction useProfilerLifecycles(options: {\n categoryLimit: number;\n columns?: string[];\n connection: MosaicSliceState['mosaic']['connection'];\n fieldNames: string[];\n fields: ProfilerStoreState['schema']['fields'];\n pageSize: number;\n pagination: MosaicProfilerPaginationState;\n profilerStore: ProfilerStore;\n rowFilter: ReturnType<Selection['predicate']>;\n selection: Selection;\n selectionVersion: number;\n sorting: MosaicProfilerSorting;\n summaryBins: number;\n tableName: string;\n}) {\n const {\n categoryLimit,\n columns,\n connection,\n fieldNames,\n fields,\n pageSize,\n pagination,\n profilerStore,\n rowFilter,\n selection,\n selectionVersion,\n sorting,\n summaryBins,\n tableName,\n } = options;\n\n useEffect(() => {\n profilerStore.getState().syncPageSize(pageSize);\n }, [pageSize, profilerStore]);\n\n useEffect(() => {\n profilerStore.getState().resetPageIndex();\n }, [profilerStore, selectionVersion, tableName]);\n\n useEffect(() => {\n if (connection.status !== 'ready' || !tableName) {\n profilerStore.getState().setSchemaSuccess([]);\n profilerStore.getState().setSchemaError(undefined);\n profilerStore\n .getState()\n .setSchemaLoading(connection.status === 'loading');\n return;\n }\n\n void loadProfilerSchema({\n columns,\n coordinator: connection.coordinator,\n store: profilerStore,\n tableName,\n });\n }, [columns, connection, profilerStore, tableName]);\n\n useEffect(() => {\n if (connection.status !== 'ready' || !tableName || !fieldNames.length) {\n profilerStore.getState().setPage({isLoading: false});\n return;\n }\n\n return connectProfilerPageClient({\n connection,\n fieldNames,\n filter: rowFilter,\n pagination,\n sorting,\n store: profilerStore,\n tableName,\n });\n }, [\n connection,\n fieldNames,\n pagination,\n profilerStore,\n rowFilter,\n sorting,\n tableName,\n ]);\n\n useEffect(() => {\n if (connection.status !== 'ready' || !tableName) {\n profilerStore.getState().setFilteredCount({isLoading: false});\n return;\n }\n\n return connectProfilerCountClient({\n connection,\n filterStable: true,\n selection,\n store: profilerStore,\n tableName,\n target: 'filtered',\n });\n }, [connection, profilerStore, selection, tableName]);\n\n useEffect(() => {\n if (connection.status !== 'ready' || !tableName) {\n profilerStore.getState().setTotalCount({isLoading: false});\n return;\n }\n\n return connectProfilerCountClient({\n connection,\n store: profilerStore,\n tableName,\n target: 'total',\n });\n }, [connection, profilerStore, tableName]);\n\n useEffect(() => {\n if (connection.status !== 'ready' || !fields.length) {\n profilerStore.getState().clearSummaries();\n return;\n }\n\n return connectProfilerSummaryClients({\n categoryLimit,\n connection,\n fields,\n selection,\n store: profilerStore,\n summaryBins,\n tableName,\n });\n }, [\n categoryLimit,\n connection,\n fields,\n profilerStore,\n selection,\n summaryBins,\n tableName,\n ]);\n}\n\n/**\n * Maps the schema fields and summary state into the column model consumed by\n * the profiler header and summary cells.\n */\nfunction useProfilerColumns(options: {\n fields: ProfilerStoreState['schema']['fields'];\n summaries: ProfilerStoreState['summaries'];\n}) {\n const {fields, summaries} = options;\n\n return useMemo<MosaicProfilerColumnState[]>(\n () =>\n fields.map((field) => ({\n field,\n kind: isProfilerUnsupportedSummaryType(field.type)\n ? 'unsupported'\n : isProfilerHistogramType(field.type)\n ? 'histogram'\n : 'category',\n name: field.name,\n summary: summaries[field.name] ?? createEmptySummaryState(field),\n })),\n [fields, summaries],\n );\n}\n\n/**\n * Collapses the aggregated profiler client state into the loading and error\n * signals exposed from the public hook.\n */\nfunction useProfilerStatus(options: {\n filteredCount: ProfilerStoreState['filteredCount'];\n fields: ProfilerStoreState['schema']['fields'];\n page: ProfilerStoreState['page'];\n schema: ProfilerStoreState['schema'];\n summaries: ProfilerStoreState['summaries'];\n totalCount: ProfilerStoreState['totalCount'];\n}) {\n const {fields, filteredCount, page, schema, summaries, totalCount} = options;\n const hasPendingSummaryInitialization =\n fields.length > 0 && Object.keys(summaries).length < fields.length;\n\n return {\n isLoading:\n schema.isLoading ||\n page.isLoading ||\n filteredCount.isLoading ||\n totalCount.isLoading ||\n hasPendingSummaryInitialization ||\n Object.values(summaries).some((summary) => summary.isLoading),\n tableError:\n schema.error ??\n page.error ??\n filteredCount.error ??\n totalCount.error ??\n Object.values(summaries).find((summary) => summary.error)?.error,\n };\n}\n\n/**\n * Keeps the last non-empty page result visible while live brushing has moved\n * ahead of the deferred row query, avoiding transient \"No rows\" flashes.\n */\nfunction useProfilerVisiblePageState(options: {\n lastNonEmptyPageTable: ProfilerStoreState['lastNonEmptyPageTable'];\n pageDatasetId: string;\n page: ProfilerStoreState['page'];\n rowSelectionVersion: number;\n selectionVersion: number;\n}) {\n const {\n lastNonEmptyPageTable,\n page,\n pageDatasetId,\n rowSelectionVersion,\n selectionVersion,\n } = options;\n const isRowDisplayStale = selectionVersion !== rowSelectionVersion;\n const hasCurrentRows = !!page.pageTable && page.pageTable.numRows > 0;\n const canReuseLastNonEmptyPage =\n !!lastNonEmptyPageTable &&\n lastNonEmptyPageTable.datasetId === pageDatasetId;\n const canShowStableEmpty =\n !page.isLoading &&\n !isRowDisplayStale &&\n (!page.pageTable || page.pageTable.numRows === 0);\n const showStableEmpty = useDebounce(canShowStableEmpty, 120);\n\n if (hasCurrentRows || !canReuseLastNonEmptyPage) {\n return page.pageTable;\n }\n\n return showStableEmpty ? page.pageTable : lastNonEmptyPageTable.pageTable;\n}\n\n/**\n * Aggregates Mosaic-backed schema, rows, counts, and summaries into the stable\n * public profiler API consumed by the React table UI.\n */\nexport function useMosaicProfiler(\n options: MosaicProfilerOptions,\n): UseMosaicProfilerReturn {\n const {\n categoryLimit = 20,\n columns,\n initialSorting = [],\n pageSize = 100,\n selection: providedSelection,\n selectionName,\n summaryBins = 18,\n tableName,\n } = options;\n\n const connection = useStoreWithMosaic((state) => state.mosaic.connection);\n const {selection, selectionVersion} = useProfilerSelection({\n selection: providedSelection,\n selectionName,\n });\n const rowSelectionVersion = useDebounce(selectionVersion, 100);\n const {\n filteredCount,\n lastNonEmptyPageTable,\n page,\n pagination,\n profilerStore,\n schema,\n setPagination,\n setSorting,\n sorting,\n summaries,\n totalCount,\n } = useProfilerStoreState({\n initialSorting,\n pageSize,\n });\n const {\n baseQuery,\n datasetId,\n fieldNames,\n fields,\n hasFilters,\n pageQuery,\n rowFilter,\n } = useProfilerQueryState({\n pagination,\n rowSelectionVersion,\n schema,\n selection,\n selectionVersion,\n sorting,\n tableName,\n });\n useProfilerLifecycles({\n categoryLimit,\n columns,\n connection,\n fieldNames,\n fields,\n pageSize,\n pagination,\n profilerStore,\n rowFilter,\n selection,\n selectionVersion,\n sorting,\n summaryBins,\n tableName,\n });\n const profilerColumns = useProfilerColumns({fields, summaries});\n const {isLoading, tableError} = useProfilerStatus({\n fields,\n filteredCount,\n page,\n schema,\n summaries,\n totalCount,\n });\n const visiblePage = useProfilerVisiblePageState({\n lastNonEmptyPageTable,\n page,\n pageDatasetId: datasetId,\n rowSelectionVersion,\n selectionVersion,\n });\n\n return {\n columns: profilerColumns,\n filteredRowCount: filteredCount.count,\n hasFilters,\n isLoading,\n pageQuery,\n pageTable: visiblePage,\n pagination,\n reset: () => selection.reset(),\n selection,\n setPagination,\n setSorting,\n sorting,\n sql: baseQuery.toString(),\n tableError,\n totalRowCount: totalCount.count,\n };\n}\n"]}
1
+ {"version":3,"file":"useMosaicProfiler.js","sourceRoot":"","sources":["../../src/profiler/useMosaicProfiler.ts"],"names":[],"mappings":"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","sourcesContent":["import {createId} from '@paralleldrive/cuid2';\nimport {useDebounce} from '@sqlrooms/ui';\nimport {\n Selection as MosaicSelection,\n type Selection,\n} from '@uwdata/mosaic-core';\nimport {\n useEffect,\n useMemo,\n useState,\n type Dispatch,\n type SetStateAction,\n} from 'react';\nimport {useStore} from 'zustand';\nimport {useStoreWithMosaic, type MosaicSliceState} from '../MosaicSlice';\nimport {\n createProfilerStore,\n type ProfilerStore,\n type ProfilerStoreState,\n} from './createProfilerStore';\nimport {\n connectProfilerCountClient,\n connectProfilerPageClient,\n connectProfilerSummaryClients,\n loadProfilerSchema,\n} from './profilerController';\nimport type {\n MosaicProfilerColumnState,\n MosaicProfilerOptions,\n MosaicProfilerPaginationState,\n MosaicProfilerSorting,\n UseMosaicProfilerReturn,\n} from './types';\nimport {\n buildProfilerBaseQuery,\n buildProfilerPageQuery,\n createEmptySummaryState,\n isProfilerHistogramType,\n isProfilerUnsupportedSummaryType,\n} from './utils';\n\ntype ProfilerSelectionState = {\n selection: Selection;\n selectionVersion: number;\n};\n\ntype ProfilerStoreSlice = {\n filteredCount: ProfilerStoreState['filteredCount'];\n lastNonEmptyPageTable: ProfilerStoreState['lastNonEmptyPageTable'];\n page: ProfilerStoreState['page'];\n pagination: MosaicProfilerPaginationState;\n profilerStore: ProfilerStore;\n schema: ProfilerStoreState['schema'];\n setPagination: Dispatch<SetStateAction<MosaicProfilerPaginationState>>;\n setSorting: Dispatch<SetStateAction<MosaicProfilerSorting>>;\n sorting: MosaicProfilerSorting;\n summaries: ProfilerStoreState['summaries'];\n totalCount: ProfilerStoreState['totalCount'];\n};\n\ntype ProfilerQueryState = {\n baseQuery: ReturnType<typeof buildProfilerBaseQuery>;\n datasetId: string;\n fieldNames: string[];\n fields: ProfilerStoreState['schema']['fields'];\n hasFilters: boolean;\n pageQuery: string;\n rowFilter: ReturnType<Selection['predicate']>;\n};\n\n/**\n * Tracks Mosaic selection updates as a monotonically increasing version so\n * memoized queries and lifecycle effects can respond to crossfilter changes.\n */\nfunction useSelectionVersion(selection: Selection) {\n const [version, setVersion] = useState(0);\n\n useEffect(() => {\n const handleChange = () => setVersion((value) => value + 1);\n selection.addEventListener('value', handleChange);\n return () => selection.removeEventListener('value', handleChange);\n }, [selection]);\n\n return version;\n}\n\n/**\n * Resolves the profiler selection, creating a crossfilter selection when the\n * caller does not supply one, and exposes a version that changes with it.\n */\nfunction useProfilerSelection(\n options: Pick<MosaicProfilerOptions, 'selection' | 'selectionName'>,\n): ProfilerSelectionState {\n const {selection: providedSelection, selectionName} = options;\n const generatedSelectionName = useMemo(\n () => `mosaic-profiler-${createId()}`,\n [],\n );\n const selectionKey = selectionName ?? generatedSelectionName;\n const existingSelection = useStoreWithMosaic(\n (state) => state.mosaic.selections[selectionKey],\n );\n const getSelection = useStoreWithMosaic((state) => state.mosaic.getSelection);\n const [fallbackSelection] = useState(() => MosaicSelection.crossfilter());\n\n useEffect(() => {\n if (!providedSelection && !existingSelection) {\n getSelection(selectionKey, 'crossfilter');\n }\n }, [existingSelection, getSelection, providedSelection, selectionKey]);\n\n const selection = providedSelection ?? existingSelection ?? fallbackSelection;\n\n return {\n selection,\n selectionVersion: useSelectionVersion(selection),\n };\n}\n\n/**\n * Creates the per-profiler local store and subscribes to the raw state slices\n * that the public profiler hook exposes.\n */\nfunction useProfilerStoreState(options: {\n initialSorting: MosaicProfilerSorting;\n pageSize: number;\n}): ProfilerStoreSlice {\n const [profilerStore] = useState(() =>\n createProfilerStore({\n initialSorting: options.initialSorting,\n pageSize: options.pageSize,\n }),\n );\n\n return {\n filteredCount: useStore(profilerStore, (state) => state.filteredCount),\n lastNonEmptyPageTable: useStore(\n profilerStore,\n (state) => state.lastNonEmptyPageTable,\n ),\n page: useStore(profilerStore, (state) => state.page),\n pagination: useStore(profilerStore, (state) => state.pagination),\n profilerStore,\n schema: useStore(profilerStore, (state) => state.schema),\n setPagination: useStore(profilerStore, (state) => state.setPagination),\n setSorting: useStore(profilerStore, (state) => state.setSorting),\n sorting: useStore(profilerStore, (state) => state.sorting),\n summaries: useStore(profilerStore, (state) => state.summaries),\n totalCount: useStore(profilerStore, (state) => state.totalCount),\n };\n}\n\n/**\n * Derives the profiler's field and SQL state from the current schema,\n * selection, sorting, and pagination state.\n */\nfunction useProfilerQueryState(options: {\n pagination: MosaicProfilerPaginationState;\n rowSelectionVersion: number;\n schema: ProfilerStoreState['schema'];\n selection: Selection;\n selectionVersion: number;\n sorting: MosaicProfilerSorting;\n tableName: string;\n}): ProfilerQueryState {\n const {\n pagination,\n rowSelectionVersion,\n schema,\n selection,\n selectionVersion,\n sorting,\n tableName,\n } = options;\n const fields = schema.fields;\n const fieldNames = useMemo(() => fields.map((field) => field.name), [fields]);\n const filter = useMemo(() => {\n void selectionVersion;\n return selection.predicate();\n }, [selection, selectionVersion]);\n const rowFilter = useMemo(() => {\n void rowSelectionVersion;\n return selection.predicate();\n }, [rowSelectionVersion, selection]);\n const baseQuery = useMemo(\n () =>\n buildProfilerBaseQuery({\n columns: fieldNames,\n filter,\n sorting,\n tableName,\n }),\n [fieldNames, filter, sorting, tableName],\n );\n const pageBaseQuery = useMemo(\n () =>\n buildProfilerBaseQuery({\n columns: fieldNames,\n filter: rowFilter,\n sorting,\n tableName,\n }),\n [fieldNames, rowFilter, sorting, tableName],\n );\n\n return {\n baseQuery,\n datasetId: [tableName, ...fieldNames].join('\\u0001'),\n fieldNames,\n fields,\n hasFilters: Array.isArray(filter) ? filter.length > 0 : Boolean(filter),\n pageQuery: buildProfilerPageQuery(pageBaseQuery, pagination).toString(),\n rowFilter,\n };\n}\n\n/**\n * Owns the coordinator-backed schema, row, count, and summary client\n * lifecycles for a profiler instance.\n */\nfunction useProfilerLifecycles(options: {\n categoryLimit: number;\n columns?: string[];\n connection: MosaicSliceState['mosaic']['connection'];\n fieldNames: string[];\n fields: ProfilerStoreState['schema']['fields'];\n pageSize: number;\n pagination: MosaicProfilerPaginationState;\n profilerStore: ProfilerStore;\n rowFilter: ReturnType<Selection['predicate']>;\n selection: Selection;\n selectionVersion: number;\n sorting: MosaicProfilerSorting;\n summaryBins: number;\n tableName: string;\n}) {\n const {\n categoryLimit,\n columns,\n connection,\n fieldNames,\n fields,\n pageSize,\n pagination,\n profilerStore,\n rowFilter,\n selection,\n selectionVersion,\n sorting,\n summaryBins,\n tableName,\n } = options;\n\n useEffect(() => {\n profilerStore.getState().syncPageSize(pageSize);\n }, [pageSize, profilerStore]);\n\n useEffect(() => {\n profilerStore.getState().resetPageIndex();\n }, [profilerStore, selectionVersion, tableName]);\n\n useEffect(() => {\n if (connection.status !== 'ready' || !tableName) {\n profilerStore.getState().setSchemaSuccess([]);\n profilerStore.getState().setSchemaError(undefined);\n profilerStore\n .getState()\n .setSchemaLoading(connection.status === 'loading');\n return;\n }\n\n void loadProfilerSchema({\n columns,\n coordinator: connection.coordinator,\n store: profilerStore,\n tableName,\n });\n }, [columns, connection, profilerStore, tableName]);\n\n useEffect(() => {\n if (connection.status !== 'ready' || !tableName || !fieldNames.length) {\n profilerStore.getState().setPage({isLoading: false});\n return;\n }\n\n return connectProfilerPageClient({\n connection,\n fieldNames,\n filter: rowFilter,\n pagination,\n sorting,\n store: profilerStore,\n tableName,\n });\n }, [\n connection,\n fieldNames,\n pagination,\n profilerStore,\n rowFilter,\n sorting,\n tableName,\n ]);\n\n useEffect(() => {\n if (connection.status !== 'ready' || !tableName) {\n profilerStore.getState().setFilteredCount({isLoading: false});\n return;\n }\n\n return connectProfilerCountClient({\n connection,\n filterStable: true,\n selection,\n store: profilerStore,\n tableName,\n target: 'filtered',\n });\n }, [connection, profilerStore, selection, tableName]);\n\n useEffect(() => {\n if (connection.status !== 'ready' || !tableName) {\n profilerStore.getState().setTotalCount({isLoading: false});\n return;\n }\n\n return connectProfilerCountClient({\n connection,\n store: profilerStore,\n tableName,\n target: 'total',\n });\n }, [connection, profilerStore, tableName]);\n\n useEffect(() => {\n if (connection.status !== 'ready' || !fields.length) {\n profilerStore.getState().clearSummaries();\n return;\n }\n\n return connectProfilerSummaryClients({\n categoryLimit,\n connection,\n fields,\n selection,\n store: profilerStore,\n summaryBins,\n tableName,\n });\n }, [\n categoryLimit,\n connection,\n fields,\n profilerStore,\n selection,\n summaryBins,\n tableName,\n ]);\n}\n\n/**\n * Maps the schema fields and summary state into the column model consumed by\n * the profiler header and summary cells.\n */\nfunction useProfilerColumns(options: {\n fields: ProfilerStoreState['schema']['fields'];\n summaries: ProfilerStoreState['summaries'];\n}) {\n const {fields, summaries} = options;\n\n return useMemo<MosaicProfilerColumnState[]>(\n () =>\n fields.map((field) => ({\n field,\n kind: isProfilerUnsupportedSummaryType(field.type)\n ? 'unsupported'\n : isProfilerHistogramType(field.type)\n ? 'histogram'\n : 'category',\n name: field.name,\n summary: summaries[field.name] ?? createEmptySummaryState(field),\n })),\n [fields, summaries],\n );\n}\n\n/**\n * Collapses the aggregated profiler client state into the loading and error\n * signals exposed from the public hook.\n */\nfunction useProfilerStatus(options: {\n filteredCount: ProfilerStoreState['filteredCount'];\n fields: ProfilerStoreState['schema']['fields'];\n page: ProfilerStoreState['page'];\n schema: ProfilerStoreState['schema'];\n summaries: ProfilerStoreState['summaries'];\n totalCount: ProfilerStoreState['totalCount'];\n}) {\n const {fields, filteredCount, page, schema, summaries, totalCount} = options;\n const hasPendingSummaryInitialization =\n fields.length > 0 && Object.keys(summaries).length < fields.length;\n\n return {\n isLoading:\n schema.isLoading ||\n page.isLoading ||\n filteredCount.isLoading ||\n totalCount.isLoading ||\n hasPendingSummaryInitialization ||\n Object.values(summaries).some((summary) => summary.isLoading),\n tableError:\n schema.error ??\n page.error ??\n filteredCount.error ??\n totalCount.error ??\n Object.values(summaries).find((summary) => summary.error)?.error,\n };\n}\n\n/**\n * Keeps the last non-empty page result visible while live brushing has moved\n * ahead of the deferred row query, avoiding transient \"No rows\" flashes.\n */\nfunction useProfilerVisiblePageState(options: {\n lastNonEmptyPageTable: ProfilerStoreState['lastNonEmptyPageTable'];\n pageDatasetId: string;\n page: ProfilerStoreState['page'];\n rowSelectionVersion: number;\n selectionVersion: number;\n}) {\n const {\n lastNonEmptyPageTable,\n page,\n pageDatasetId,\n rowSelectionVersion,\n selectionVersion,\n } = options;\n const isRowDisplayStale = selectionVersion !== rowSelectionVersion;\n const hasCurrentRows = !!page.pageTable && page.pageTable.numRows > 0;\n const canReuseLastNonEmptyPage =\n !!lastNonEmptyPageTable &&\n lastNonEmptyPageTable.datasetId === pageDatasetId;\n const canShowStableEmpty =\n !page.isLoading &&\n !isRowDisplayStale &&\n (!page.pageTable || page.pageTable.numRows === 0);\n const showStableEmpty = useDebounce(canShowStableEmpty, 120);\n\n if (hasCurrentRows || !canReuseLastNonEmptyPage) {\n return page.pageTable;\n }\n\n return showStableEmpty ? page.pageTable : lastNonEmptyPageTable.pageTable;\n}\n\n/**\n * Aggregates Mosaic-backed schema, rows, counts, and summaries into the stable\n * public profiler API consumed by the React table UI.\n */\nexport function useMosaicProfiler(\n options: MosaicProfilerOptions,\n): UseMosaicProfilerReturn {\n const {\n categoryLimit = 20,\n columns,\n initialSorting = [],\n pageSize = 100,\n selection: providedSelection,\n selectionName,\n summaryBins = 18,\n tableName,\n } = options;\n\n const connection = useStoreWithMosaic((state) => state.mosaic.connection);\n const {selection, selectionVersion} = useProfilerSelection({\n selection: providedSelection,\n selectionName,\n });\n const rowSelectionVersion = useDebounce(selectionVersion, 100);\n const {\n filteredCount,\n lastNonEmptyPageTable,\n page,\n pagination,\n profilerStore,\n schema,\n setPagination,\n setSorting,\n sorting,\n summaries,\n totalCount,\n } = useProfilerStoreState({\n initialSorting,\n pageSize,\n });\n const {\n baseQuery,\n datasetId,\n fieldNames,\n fields,\n hasFilters,\n pageQuery,\n rowFilter,\n } = useProfilerQueryState({\n pagination,\n rowSelectionVersion,\n schema,\n selection,\n selectionVersion,\n sorting,\n tableName,\n });\n useProfilerLifecycles({\n categoryLimit,\n columns,\n connection,\n fieldNames,\n fields,\n pageSize,\n pagination,\n profilerStore,\n rowFilter,\n selection,\n selectionVersion,\n sorting,\n summaryBins,\n tableName,\n });\n const profilerColumns = useProfilerColumns({fields, summaries});\n const {isLoading, tableError} = useProfilerStatus({\n fields,\n filteredCount,\n page,\n schema,\n summaries,\n totalCount,\n });\n const visiblePage = useProfilerVisiblePageState({\n lastNonEmptyPageTable,\n page,\n pageDatasetId: datasetId,\n rowSelectionVersion,\n selectionVersion,\n });\n\n return {\n columns: profilerColumns,\n filteredRowCount: filteredCount.count,\n hasFilters,\n isLoading,\n pageQuery,\n pageTable: visiblePage,\n pagination,\n reset: () => selection.reset(),\n selection,\n setPagination,\n setSorting,\n sorting,\n sql: baseQuery.toString(),\n tableError,\n totalRowCount: totalCount.count,\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tableInterop.js","sourceRoot":"","sources":["../src/tableInterop.ts"],"names":[],"mappings":"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","sourcesContent":["import {decodeIPC} from '@uwdata/mosaic-core';\nimport {\n tableToIPC as mosaicTableToIPC,\n type Table as MosaicTable,\n} from '@uwdata/flechette';\nimport {tableFromIPC, tableToIPC, type Table as ArrowTable} from 'apache-arrow';\n\nconst TABLE_INTEROP = Symbol.for('@sqlrooms/mosaic-table-interop');\n\ntype TableInterop = {\n ipcBytes: Uint8Array;\n getArrowTable: () => ArrowTable;\n getMosaicTable: () => object;\n};\n\nfunction attachTableInterop<T extends object>(\n table: T,\n options: {\n ipcBytes: Uint8Array;\n decodeArrowTable?: (ipcBytes: Uint8Array) => ArrowTable;\n },\n): T {\n if (getTableInterop(table)) {\n return table;\n }\n\n const {ipcBytes, decodeArrowTable = (bytes) => tableFromIPC(bytes)} = options;\n let arrowTable: ArrowTable | undefined;\n\n const interop: TableInterop = {\n ipcBytes,\n getArrowTable: () => {\n arrowTable ??= decodeArrowTable(ipcBytes);\n return arrowTable;\n },\n getMosaicTable: () => table,\n };\n\n Object.defineProperty(table, TABLE_INTEROP, {\n value: interop,\n enumerable: false,\n configurable: false,\n writable: false,\n });\n\n return table;\n}\n\nexport function getTableInterop(value: unknown): TableInterop | undefined {\n if (!value || typeof value !== 'object') {\n return undefined;\n }\n\n return (value as {[TABLE_INTEROP]?: TableInterop})[TABLE_INTEROP];\n}\n\nexport function getArrowTableFromInterop(\n value: unknown,\n): ArrowTable | undefined {\n return getTableInterop(value)?.getArrowTable();\n}\n\nfunction isArrowTable(value: unknown): value is ArrowTable {\n return Boolean(\n value &&\n typeof value === 'object' &&\n Array.isArray((value as {batches?: unknown}).batches),\n );\n}\n\nfunction isMosaicTable(value: unknown): value is MosaicTable {\n return Boolean(\n value &&\n typeof value === 'object' &&\n typeof (value as {toColumns?: unknown}).toColumns === 'function' &&\n typeof (value as {getChild?: unknown}).getChild === 'function',\n );\n}\n\n/**\n * Convert an Apache Arrow table into the Mosaic-native table shape while\n * attaching Mosaic-internal IPC-backed interop metadata.\n *\n * Mosaic core expects Flechette tables, while SQLRooms public client APIs\n * expose Apache Arrow. IPC remains the durable bridge. The original Arrow\n * table is referenced weakly so Arrow-native callers can often reuse it\n * without forcing Mosaic-only consumers to retain both table runtimes.\n */\nexport function createMosaicTableFromArrowTable(\n arrowTable: ArrowTable,\n): MosaicTable {\n const ipcBytes = tableToIPC(arrowTable, 'stream');\n const arrowTableRef =\n typeof WeakRef === 'undefined' ? undefined : new WeakRef(arrowTable);\n\n return attachTableInterop(decodeIPC(ipcBytes), {\n ipcBytes,\n decodeArrowTable: (bytes) => arrowTableRef?.deref() ?? tableFromIPC(bytes),\n }) as MosaicTable;\n}\n\n/**\n * Convert a raw Mosaic client result to the Apache Arrow shape exposed by\n * SQLRooms public hooks.\n *\n * Results produced by {@link createMosaicTableFromArrowTable} use the\n * interop fast path. Plain third-party Flechette tables are still accepted as\n * a compatibility fallback, but that path has to re-encode through IPC.\n */\nexport function toArrowClientResult(value: unknown): ArrowTable {\n if (isArrowTable(value)) {\n return value;\n }\n\n const interopArrowTable = getArrowTableFromInterop(value);\n if (interopArrowTable) {\n return interopArrowTable;\n }\n\n if (isMosaicTable(value)) {\n return tableFromIPC(mosaicTableToIPC(value, {format: 'stream'}));\n }\n\n throw new Error(\n 'useMosaicClient expected a Mosaic table result that can be converted to Apache Arrow.',\n );\n}\n"]}
1
+ {"version":3,"file":"tableInterop.js","sourceRoot":"","sources":["../src/tableInterop.ts"],"names":[],"mappings":"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","sourcesContent":["import {decodeIPC} from '@uwdata/mosaic-core';\nimport {\n tableToIPC as mosaicTableToIPC,\n type Table as MosaicTable,\n} from '@uwdata/flechette';\nimport {tableFromIPC, tableToIPC, type Table as ArrowTable} from 'apache-arrow';\n\nconst TABLE_INTEROP = Symbol.for('@sqlrooms/mosaic-table-interop');\n\ntype TableInterop = {\n ipcBytes: Uint8Array;\n getArrowTable: () => ArrowTable;\n getMosaicTable: () => object;\n};\n\nfunction attachTableInterop<T extends object>(\n table: T,\n options: {\n ipcBytes: Uint8Array;\n decodeArrowTable?: (ipcBytes: Uint8Array) => ArrowTable;\n },\n): T {\n if (getTableInterop(table)) {\n return table;\n }\n\n const {ipcBytes, decodeArrowTable = (bytes) => tableFromIPC(bytes)} = options;\n let arrowTable: ArrowTable | undefined;\n\n const interop: TableInterop = {\n ipcBytes,\n getArrowTable: () => {\n arrowTable ??= decodeArrowTable(ipcBytes);\n return arrowTable;\n },\n getMosaicTable: () => table,\n };\n\n Object.defineProperty(table, TABLE_INTEROP, {\n value: interop,\n enumerable: false,\n configurable: false,\n writable: false,\n });\n\n return table;\n}\n\nexport function getTableInterop(value: unknown): TableInterop | undefined {\n if (!value || typeof value !== 'object') {\n return undefined;\n }\n\n return (value as {[TABLE_INTEROP]?: TableInterop})[TABLE_INTEROP];\n}\n\nexport function getArrowTableFromInterop(\n value: unknown,\n): ArrowTable | undefined {\n return getTableInterop(value)?.getArrowTable();\n}\n\nfunction isArrowTable(value: unknown): value is ArrowTable {\n return Boolean(\n value &&\n typeof value === 'object' &&\n Array.isArray((value as {batches?: unknown}).batches),\n );\n}\n\nfunction isMosaicTable(value: unknown): value is MosaicTable {\n return Boolean(\n value &&\n typeof value === 'object' &&\n typeof (value as {toColumns?: unknown}).toColumns === 'function' &&\n typeof (value as {getChild?: unknown}).getChild === 'function',\n );\n}\n\n/**\n * Convert an Apache Arrow table into the Mosaic-native table shape while\n * attaching Mosaic-internal IPC-backed interop metadata.\n *\n * Mosaic core expects Flechette tables, while SQLRooms public client APIs\n * expose Apache Arrow. IPC remains the durable bridge. The original Arrow\n * table is referenced weakly so Arrow-native callers can often reuse it\n * without forcing Mosaic-only consumers to retain both table runtimes.\n */\nexport function createMosaicTableFromArrowTable(\n arrowTable: ArrowTable,\n): MosaicTable {\n const ipcBytes = tableToIPC(arrowTable, 'stream');\n const arrowTableRef =\n typeof WeakRef === 'undefined' ? undefined : new WeakRef(arrowTable);\n\n return attachTableInterop(decodeIPC(ipcBytes), {\n ipcBytes,\n decodeArrowTable: (bytes) => arrowTableRef?.deref() ?? tableFromIPC(bytes),\n }) as unknown as MosaicTable;\n}\n\n/**\n * Convert a raw Mosaic client result to the Apache Arrow shape exposed by\n * SQLRooms public hooks.\n *\n * Results produced by {@link createMosaicTableFromArrowTable} use the\n * interop fast path. Plain third-party Flechette tables are still accepted as\n * a compatibility fallback, but that path has to re-encode through IPC.\n */\nexport function toArrowClientResult(value: unknown): ArrowTable {\n if (isArrowTable(value)) {\n return value;\n }\n\n const interopArrowTable = getArrowTableFromInterop(value);\n if (interopArrowTable) {\n return interopArrowTable;\n }\n\n if (isMosaicTable(value)) {\n return tableFromIPC(mosaicTableToIPC(value, {format: 'stream'}));\n }\n\n throw new Error(\n 'useMosaicClient expected a Mosaic table result that can be converted to Apache Arrow.',\n );\n}\n"]}
@@ -1,23 +1,12 @@
1
- import { Selection } from '@uwdata/mosaic-core';
2
- import { Query } from '@uwdata/mosaic-sql';
3
- import type { Table as ArrowTable } from 'apache-arrow';
4
- export type UseMosaicClientOptions = {
5
- /** Unique id for this client (auto-generated if not provided) */
6
- id?: string;
7
- /** Selection name for cross-filtering (will create if doesn't exist) */
8
- selectionName?: string;
9
- /** Or pass a Selection directly */
10
- selection?: Selection;
11
- /** Query builder - receives current filter predicate */
12
- query: (filter: unknown) => ReturnType<typeof Query.from>;
13
- /** Callback when query results are received */
14
- queryResult?: (result: ArrowTable) => void;
1
+ import { type MosaicClientOptions } from './MosaicSlice';
2
+ export type UseMosaicClientOptions = MosaicClientOptions & {
15
3
  /** Whether to automatically connect when mosaic is ready */
16
4
  enabled?: boolean;
17
5
  };
18
6
  export declare function useMosaicClient(options: UseMosaicClientOptions): {
19
- data: ArrowTable<any> | null;
7
+ data: import("apache-arrow").Table<any> | null;
20
8
  isLoading: boolean;
9
+ error: Error | undefined;
21
10
  client: import("@uwdata/mosaic-core").MosaicClient | null;
22
11
  };
23
12
  //# sourceMappingURL=useMosaicClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMosaicClient.d.ts","sourceRoot":"","sources":["../src/useMosaicClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAC,KAAK,EAAC,MAAM,oBAAoB,CAAC;AACzC,OAAO,KAAK,EAAC,KAAK,IAAI,UAAU,EAAC,MAAM,cAAc,CAAC;AAMtD,MAAM,MAAM,sBAAsB,GAAG;IACnC,iEAAiE;IACjE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,wDAAwD;IACxD,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,UAAU,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1D,+CAA+C;IAC/C,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC3C,4DAA4D;IAC5D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB;;;;EAwE9D"}
1
+ {"version":3,"file":"useMosaicClient.d.ts","sourceRoot":"","sources":["../src/useMosaicClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,KAAK,mBAAmB,EAAqB,MAAM,eAAe,CAAC;AAG3E,MAAM,MAAM,sBAAsB,GAAG,mBAAmB,GAAG;IACzD,4DAA4D;IAC5D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB;;;;;EA+E9D"}
@@ -1,9 +1,9 @@
1
- import { useEffect, useMemo, useRef } from 'react';
2
1
  import { createId } from '@paralleldrive/cuid2';
2
+ import { useEffect, useMemo, useRef } from 'react';
3
3
  import { useStoreWithMosaic } from './MosaicSlice';
4
4
  import { toArrowClientResult } from './tableInterop';
5
5
  export function useMosaicClient(options) {
6
- const { id: providedId, selectionName, selection: directSelection, query, queryResult, enabled = true, } = options;
6
+ const { id: providedId, selectionName, selection: directSelection, query, queryResult, queryError, enabled = true, } = options;
7
7
  // Use stable id - generate once if not provided
8
8
  const stableId = useMemo(() => providedId ?? createId(), [providedId]);
9
9
  const connectionStatus = useStoreWithMosaic((s) => s.mosaic.connection.status);
@@ -14,10 +14,12 @@ export function useMosaicClient(options) {
14
14
  // Keep query and queryResult in refs so they can be accessed in effect
15
15
  const queryRef = useRef(query);
16
16
  const queryResultRef = useRef(queryResult);
17
+ const queryErrorRef = useRef(queryError);
17
18
  useEffect(() => {
18
19
  queryRef.current = query;
19
20
  queryResultRef.current = queryResult;
20
- }, [query, queryResult]);
21
+ queryErrorRef.current = queryError;
22
+ }, [query, queryError, queryResult]);
21
23
  const clientData = clientState?.data;
22
24
  const arrowData = useMemo(() => {
23
25
  if (!clientData) {
@@ -35,7 +37,10 @@ export function useMosaicClient(options) {
35
37
  selection: directSelection,
36
38
  query: queryRef.current,
37
39
  onQueryResult: (result) => {
38
- queryResultRef.current?.(result);
40
+ queryResultRef.current?.(toArrowClientResult(result));
41
+ },
42
+ onQueryError: (error) => {
43
+ queryErrorRef.current?.(error);
39
44
  },
40
45
  });
41
46
  return () => {
@@ -53,6 +58,7 @@ export function useMosaicClient(options) {
53
58
  return {
54
59
  data: arrowData,
55
60
  isLoading: clientState?.isLoading ?? connectionStatus !== 'ready',
61
+ error: clientState?.error,
56
62
  client: clientState?.client ?? null,
57
63
  };
58
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useMosaicClient.js","sourceRoot":"","sources":["../src/useMosaicClient.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAC,MAAM,OAAO,CAAC;AACjD,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AACjD,OAAO,EAAC,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AAiBnD,MAAM,UAAU,eAAe,CAAC,OAA+B;IAC7D,MAAM,EACJ,EAAE,EAAE,UAAU,EACd,aAAa,EACb,SAAS,EAAE,eAAe,EAC1B,KAAK,EACL,WAAW,EACX,OAAO,GAAG,IAAI,GACf,GAAG,OAAO,CAAC;IAEZ,gDAAgD;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,IAAI,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEvE,MAAM,gBAAgB,GAAG,kBAAkB,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAClC,CAAC;IACF,MAAM,YAAY,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAExE,4EAA4E;IAC5E,MAAM,WAAW,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE1E,uEAAuE;IACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAE3C,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;QACzB,cAAc,CAAC,OAAO,GAAG,WAAW,CAAC;IACvC,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;IAEzB,MAAM,UAAU,GAAG,WAAW,EAAE,IAAI,CAAC;IACrC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE;QAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,IAAI,gBAAgB,KAAK,OAAO,EAAE,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,YAAY,CAAC;YACX,EAAE,EAAE,QAAQ;YACZ,aAAa;YACb,SAAS,EAAE,eAAe;YAC1B,KAAK,EAAE,QAAQ,CAAC,OAAO;YACvB,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE;gBACxB,cAAc,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACV,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC,EAAE;QACD,OAAO;QACP,gBAAgB;QAChB,QAAQ;QACR,aAAa;QACb,eAAe;QACf,YAAY;QACZ,aAAa;KACd,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,WAAW,EAAE,SAAS,IAAI,gBAAgB,KAAK,OAAO;QACjE,MAAM,EAAE,WAAW,EAAE,MAAM,IAAI,IAAI;KACpC,CAAC;AACJ,CAAC","sourcesContent":["import {Selection} from '@uwdata/mosaic-core';\nimport {Query} from '@uwdata/mosaic-sql';\nimport type {Table as ArrowTable} from 'apache-arrow';\nimport {useEffect, useMemo, useRef} from 'react';\nimport {createId} from '@paralleldrive/cuid2';\nimport {useStoreWithMosaic} from './MosaicSlice';\nimport {toArrowClientResult} from './tableInterop';\n\nexport type UseMosaicClientOptions = {\n /** Unique id for this client (auto-generated if not provided) */\n id?: string;\n /** Selection name for cross-filtering (will create if doesn't exist) */\n selectionName?: string;\n /** Or pass a Selection directly */\n selection?: Selection;\n /** Query builder - receives current filter predicate */\n query: (filter: unknown) => ReturnType<typeof Query.from>;\n /** Callback when query results are received */\n queryResult?: (result: ArrowTable) => void;\n /** Whether to automatically connect when mosaic is ready */\n enabled?: boolean;\n};\n\nexport function useMosaicClient(options: UseMosaicClientOptions) {\n const {\n id: providedId,\n selectionName,\n selection: directSelection,\n query,\n queryResult,\n enabled = true,\n } = options;\n\n // Use stable id - generate once if not provided\n const stableId = useMemo(() => providedId ?? createId(), [providedId]);\n\n const connectionStatus = useStoreWithMosaic(\n (s) => s.mosaic.connection.status,\n );\n const ensureClient = useStoreWithMosaic((s) => s.mosaic.ensureClient);\n const destroyClient = useStoreWithMosaic((s) => s.mosaic.destroyClient);\n\n // Select the raw Mosaic client state; public hook data is normalized below.\n const clientState = useStoreWithMosaic((s) => s.mosaic.clients[stableId]);\n\n // Keep query and queryResult in refs so they can be accessed in effect\n const queryRef = useRef(query);\n const queryResultRef = useRef(queryResult);\n\n useEffect(() => {\n queryRef.current = query;\n queryResultRef.current = queryResult;\n }, [query, queryResult]);\n\n const clientData = clientState?.data;\n const arrowData = useMemo(() => {\n if (!clientData) {\n return null;\n }\n return toArrowClientResult(clientData);\n }, [clientData]);\n\n useEffect(() => {\n if (!enabled || connectionStatus !== 'ready') {\n return;\n }\n\n ensureClient({\n id: stableId,\n selectionName,\n selection: directSelection,\n query: queryRef.current,\n onQueryResult: (result) => {\n queryResultRef.current?.(result);\n },\n });\n\n return () => {\n destroyClient(stableId);\n };\n }, [\n enabled,\n connectionStatus,\n stableId,\n selectionName,\n directSelection,\n ensureClient,\n destroyClient,\n ]);\n\n return {\n data: arrowData,\n isLoading: clientState?.isLoading ?? connectionStatus !== 'ready',\n client: clientState?.client ?? null,\n };\n}\n"]}
1
+ {"version":3,"file":"useMosaicClient.js","sourceRoot":"","sources":["../src/useMosaicClient.ts"],"names":[],"mappings":"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","sourcesContent":["import {createId} from '@paralleldrive/cuid2';\nimport {useEffect, useMemo, useRef} from 'react';\nimport {type MosaicClientOptions, useStoreWithMosaic} from './MosaicSlice';\nimport {toArrowClientResult} from './tableInterop';\n\nexport type UseMosaicClientOptions = MosaicClientOptions & {\n /** Whether to automatically connect when mosaic is ready */\n enabled?: boolean;\n};\n\nexport function useMosaicClient(options: UseMosaicClientOptions) {\n const {\n id: providedId,\n selectionName,\n selection: directSelection,\n query,\n queryResult,\n queryError,\n enabled = true,\n } = options;\n\n // Use stable id - generate once if not provided\n const stableId = useMemo(() => providedId ?? createId(), [providedId]);\n\n const connectionStatus = useStoreWithMosaic(\n (s) => s.mosaic.connection.status,\n );\n const ensureClient = useStoreWithMosaic((s) => s.mosaic.ensureClient);\n const destroyClient = useStoreWithMosaic((s) => s.mosaic.destroyClient);\n\n // Select the raw Mosaic client state; public hook data is normalized below.\n const clientState = useStoreWithMosaic((s) => s.mosaic.clients[stableId]);\n\n // Keep query and queryResult in refs so they can be accessed in effect\n const queryRef = useRef(query);\n const queryResultRef = useRef(queryResult);\n const queryErrorRef = useRef(queryError);\n\n useEffect(() => {\n queryRef.current = query;\n queryResultRef.current = queryResult;\n queryErrorRef.current = queryError;\n }, [query, queryError, queryResult]);\n\n const clientData = clientState?.data;\n const arrowData = useMemo(() => {\n if (!clientData) {\n return null;\n }\n return toArrowClientResult(clientData);\n }, [clientData]);\n\n useEffect(() => {\n if (!enabled || connectionStatus !== 'ready') {\n return;\n }\n\n ensureClient({\n id: stableId,\n selectionName,\n selection: directSelection,\n query: queryRef.current,\n onQueryResult: (result) => {\n queryResultRef.current?.(toArrowClientResult(result));\n },\n onQueryError: (error) => {\n queryErrorRef.current?.(error);\n },\n });\n\n return () => {\n destroyClient(stableId);\n };\n }, [\n enabled,\n connectionStatus,\n stableId,\n selectionName,\n directSelection,\n ensureClient,\n destroyClient,\n ]);\n\n return {\n data: arrowData,\n isLoading: clientState?.isLoading ?? connectionStatus !== 'ready',\n error: clientState?.error,\n client: clientState?.client ?? null,\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sqlrooms/mosaic",
3
- "version": "0.29.0-rc.2",
3
+ "version": "0.29.0-rc.3",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "module": "dist/index.js",
@@ -23,13 +23,16 @@
23
23
  },
24
24
  "dependencies": {
25
25
  "@paralleldrive/cuid2": "^3.0.0",
26
- "@sqlrooms/codemirror": "0.29.0-rc.2",
27
- "@sqlrooms/color-scales": "0.29.0-rc.2",
28
- "@sqlrooms/data-table": "0.29.0-rc.2",
29
- "@sqlrooms/duckdb": "0.29.0-rc.2",
30
- "@sqlrooms/room-store": "0.29.0-rc.2",
31
- "@sqlrooms/ui": "0.29.0-rc.2",
32
- "@sqlrooms/utils": "0.29.0-rc.2",
26
+ "@sqlrooms/codemirror": "0.29.0-rc.3",
27
+ "@sqlrooms/color-scales": "0.29.0-rc.3",
28
+ "@sqlrooms/data-table": "0.29.0-rc.3",
29
+ "@sqlrooms/db": "0.29.0-rc.3",
30
+ "@sqlrooms/duckdb": "0.29.0-rc.3",
31
+ "@sqlrooms/layout": "0.29.0-rc.3",
32
+ "@sqlrooms/layout-config": "0.29.0-rc.3",
33
+ "@sqlrooms/room-store": "0.29.0-rc.3",
34
+ "@sqlrooms/ui": "0.29.0-rc.3",
35
+ "@sqlrooms/utils": "0.29.0-rc.3",
33
36
  "@uwdata/flechette": "^2.2.6",
34
37
  "@uwdata/mosaic-core": "^0.21.0",
35
38
  "@uwdata/mosaic-plot": "^0.21.0",
@@ -48,6 +51,9 @@
48
51
  },
49
52
  "devDependencies": {
50
53
  "@jest/globals": "^30.3.0",
54
+ "@testing-library/jest-dom": "^6.9.1",
55
+ "@testing-library/react": "^16.3.2",
56
+ "jsdom": "^29.1.1",
51
57
  "ts-jest": "^29.4.4"
52
58
  },
53
59
  "scripts": {
@@ -58,5 +64,5 @@
58
64
  "typecheck": "tsc --noEmit",
59
65
  "typedoc": "typedoc"
60
66
  },
61
- "gitHead": "5d511631992c1af8852ea79ced488867aad4a555"
67
+ "gitHead": "cfe98c975d09c59aa8b2f2b01e7ef9fd96bc90b0"
62
68
  }
@@ -1,45 +0,0 @@
1
- import type { Spec } from '@uwdata/mosaic-spec';
2
- import type { ChartBuilderColumn, ChartSpec } from './types';
3
- export declare const DEFAULT_MOSAIC_CHART_TOOL_DESCRIPTION = "Create a Mosaic vgplot chart from a built-in template. Prefer this tool for common chart types (histogram, line chart, etc.) instead of writing raw vgplot JSON. Use set_dashboard_vgplot or equivalent only when no template fits.\n\nPass chartType as one of the template ids and fieldValues with keys matching each template's field keys (column names as values).";
4
- export type MosaicChartToolParameters = {
5
- chartType: string;
6
- fieldValues: Record<string, string>;
7
- reasoning: string;
8
- };
9
- export type MosaicChartToolOutput = {
10
- success: boolean;
11
- details: string;
12
- chartType?: string;
13
- title?: string;
14
- spec?: Spec;
15
- errorMessage?: string;
16
- };
17
- export type CreateMosaicChartToolOptions = {
18
- /** Templates to expose (defaults to all built-in templates, icons stripped). */
19
- specs?: ChartSpec[];
20
- tableName: string;
21
- columns: ChartBuilderColumn[];
22
- onCreateChart: (spec: Spec, title: string) => void;
23
- /** Tool description shown to the model */
24
- description?: string;
25
- };
26
- /**
27
- * AI SDK tool that creates a Mosaic spec from {@link ChartSpec} templates.
28
- *
29
- * @example
30
- * ```ts
31
- * tools: {
32
- * create_mosaic_chart: createMosaicChartTool({
33
- * tableName: 'sales',
34
- * columns: [{name: 'amount', type: 'DOUBLE'}],
35
- * onCreateChart: (spec, title) => store.addChart(spec, title),
36
- * }),
37
- * },
38
- * ```
39
- */
40
- export declare function createMosaicChartTool({ specs: specsOption, tableName, columns, onCreateChart, description, }: CreateMosaicChartToolOptions): import("ai").Tool<{
41
- chartType: string;
42
- fieldValues: Record<string, string>;
43
- reasoning: string;
44
- }, MosaicChartToolOutput>;
45
- //# sourceMappingURL=createMosaicChartTool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createMosaicChartTool.d.ts","sourceRoot":"","sources":["../../src/chart-builders/createMosaicChartTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,qBAAqB,CAAC;AAK9C,OAAO,KAAK,EAAC,kBAAkB,EAAE,SAAS,EAAC,MAAM,SAAS,CAAC;AAG3D,eAAO,MAAM,qCAAqC,6WAEgF,CAAC;AAEnI,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAmCF,MAAM,MAAM,4BAA4B,GAAG;IACzC,gFAAgF;IAChF,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,aAAa,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EAAE,WAAW,EAClB,SAAS,EACT,OAAO,EACP,aAAa,EACb,WAAmD,GACpD,EAAE,4BAA4B;;;;0BA2E9B"}
@@ -1,109 +0,0 @@
1
- import { tool } from 'ai';
2
- import { z } from 'zod';
3
- import { createDefaultChartBuilders } from './builders';
4
- import { buildChartTitleForSpec } from './chartSpecTitle';
5
- import { toChartSpec } from './types';
6
- export const DEFAULT_MOSAIC_CHART_TOOL_DESCRIPTION = `Create a Mosaic vgplot chart from a built-in template. Prefer this tool for common chart types (histogram, line chart, etc.) instead of writing raw vgplot JSON. Use set_dashboard_vgplot or equivalent only when no template fits.
7
-
8
- Pass chartType as one of the template ids and fieldValues with keys matching each template's field keys (column names as values).`;
9
- function columnMatchesFieldTypes(column, field) {
10
- if (!field.types?.length)
11
- return true;
12
- return field.types.some((t) => column.type.toUpperCase() === t.toUpperCase());
13
- }
14
- function validateFieldValues(spec, fieldValues, columns) {
15
- for (const field of spec.fields) {
16
- const required = field.required !== false;
17
- const raw = fieldValues[field.key];
18
- if (required && (!raw || raw.trim() === '')) {
19
- return `Missing required field "${field.key}" (${field.label}).`;
20
- }
21
- if (!raw)
22
- continue;
23
- const col = columns.find((c) => c.name === raw);
24
- if (!col) {
25
- return `Unknown column "${raw}" for field "${field.key}". Use one of: ${columns.map((c) => c.name).join(', ') || '(none)'}.`;
26
- }
27
- if (!columnMatchesFieldTypes(col, field)) {
28
- return `Column "${raw}" has type ${col.type} but field "${field.key}" expects: ${field.types?.join(', ') ?? 'any'}.`;
29
- }
30
- }
31
- return null;
32
- }
33
- /**
34
- * AI SDK tool that creates a Mosaic spec from {@link ChartSpec} templates.
35
- *
36
- * @example
37
- * ```ts
38
- * tools: {
39
- * create_mosaic_chart: createMosaicChartTool({
40
- * tableName: 'sales',
41
- * columns: [{name: 'amount', type: 'DOUBLE'}],
42
- * onCreateChart: (spec, title) => store.addChart(spec, title),
43
- * }),
44
- * },
45
- * ```
46
- */
47
- export function createMosaicChartTool({ specs: specsOption, tableName, columns, onCreateChart, description = DEFAULT_MOSAIC_CHART_TOOL_DESCRIPTION, }) {
48
- const specs = specsOption && specsOption.length > 0
49
- ? specsOption
50
- : createDefaultChartBuilders().map(toChartSpec);
51
- if (specs.length === 0) {
52
- throw new Error('createMosaicChartTool: specs must be a non-empty array.');
53
- }
54
- const ids = specs.map((s) => s.id);
55
- const chartTypeEnum = z.enum(ids);
56
- const MosaicChartToolParametersSchema = z.object({
57
- chartType: chartTypeEnum.describe(`One of: ${ids.join(', ')}. See describeChartSpecs / system prompt for details.`),
58
- fieldValues: z
59
- .record(z.string(), z.string())
60
- .describe('Map of template field key -> selected column name.'),
61
- reasoning: z.string().describe('Brief rationale for this chart choice.'),
62
- });
63
- return tool({
64
- description,
65
- inputSchema: MosaicChartToolParametersSchema,
66
- execute: async (params) => {
67
- const { chartType, fieldValues } = params;
68
- const specDef = specs.find((s) => s.id === chartType);
69
- if (!specDef) {
70
- return {
71
- success: false,
72
- details: 'Unknown chartType.',
73
- errorMessage: `No template with id "${chartType}".`,
74
- };
75
- }
76
- const validationError = validateFieldValues(specDef, fieldValues, columns);
77
- if (validationError) {
78
- return {
79
- success: false,
80
- details: validationError,
81
- errorMessage: validationError,
82
- chartType,
83
- };
84
- }
85
- try {
86
- const spec = specDef.createSpec(tableName, fieldValues);
87
- const title = buildChartTitleForSpec(specDef, fieldValues);
88
- onCreateChart(spec, title);
89
- return {
90
- success: true,
91
- details: `Created chart "${title}" from template "${chartType}".`,
92
- chartType,
93
- title,
94
- spec,
95
- };
96
- }
97
- catch (e) {
98
- const message = e instanceof Error ? e.message : String(e);
99
- return {
100
- success: false,
101
- details: message,
102
- errorMessage: message,
103
- chartType,
104
- };
105
- }
106
- },
107
- });
108
- }
109
- //# sourceMappingURL=createMosaicChartTool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createMosaicChartTool.js","sourceRoot":"","sources":["../../src/chart-builders/createMosaicChartTool.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Spec} from '@uwdata/mosaic-spec';\nimport {tool} from 'ai';\nimport {z} from 'zod';\nimport {createDefaultChartBuilders} from './builders';\nimport {buildChartTitleForSpec} from './chartSpecTitle';\nimport type {ChartBuilderColumn, ChartSpec} from './types';\nimport {toChartSpec} from './types';\n\nexport const DEFAULT_MOSAIC_CHART_TOOL_DESCRIPTION = `Create a Mosaic vgplot chart from a built-in template. Prefer this tool for common chart types (histogram, line chart, etc.) instead of writing raw vgplot JSON. Use set_dashboard_vgplot or equivalent only when no template fits.\n\nPass chartType as one of the template ids and fieldValues with keys matching each template's field keys (column names as values).`;\n\nexport type MosaicChartToolParameters = {\n chartType: string;\n fieldValues: Record<string, string>;\n reasoning: string;\n};\n\nexport type MosaicChartToolOutput = {\n success: boolean;\n details: string;\n chartType?: string;\n title?: string;\n spec?: Spec;\n errorMessage?: string;\n};\n\nfunction columnMatchesFieldTypes(\n column: ChartBuilderColumn,\n field: {types?: string[]},\n): boolean {\n if (!field.types?.length) return true;\n return field.types.some(\n (t) => column.type.toUpperCase() === t.toUpperCase(),\n );\n}\n\nfunction validateFieldValues(\n spec: ChartSpec,\n fieldValues: Record<string, string>,\n columns: ChartBuilderColumn[],\n): string | null {\n for (const field of spec.fields) {\n const required = field.required !== false;\n const raw = fieldValues[field.key];\n if (required && (!raw || raw.trim() === '')) {\n return `Missing required field \"${field.key}\" (${field.label}).`;\n }\n if (!raw) continue;\n const col = columns.find((c) => c.name === raw);\n if (!col) {\n return `Unknown column \"${raw}\" for field \"${field.key}\". Use one of: ${columns.map((c) => c.name).join(', ') || '(none)'}.`;\n }\n if (!columnMatchesFieldTypes(col, field)) {\n return `Column \"${raw}\" has type ${col.type} but field \"${field.key}\" expects: ${field.types?.join(', ') ?? 'any'}.`;\n }\n }\n return null;\n}\n\nexport type CreateMosaicChartToolOptions = {\n /** Templates to expose (defaults to all built-in templates, icons stripped). */\n specs?: ChartSpec[];\n tableName: string;\n columns: ChartBuilderColumn[];\n onCreateChart: (spec: Spec, title: string) => void;\n /** Tool description shown to the model */\n description?: string;\n};\n\n/**\n * AI SDK tool that creates a Mosaic spec from {@link ChartSpec} templates.\n *\n * @example\n * ```ts\n * tools: {\n * create_mosaic_chart: createMosaicChartTool({\n * tableName: 'sales',\n * columns: [{name: 'amount', type: 'DOUBLE'}],\n * onCreateChart: (spec, title) => store.addChart(spec, title),\n * }),\n * },\n * ```\n */\nexport function createMosaicChartTool({\n specs: specsOption,\n tableName,\n columns,\n onCreateChart,\n description = DEFAULT_MOSAIC_CHART_TOOL_DESCRIPTION,\n}: CreateMosaicChartToolOptions) {\n const specs: ChartSpec[] =\n specsOption && specsOption.length > 0\n ? specsOption\n : createDefaultChartBuilders().map(toChartSpec);\n\n if (specs.length === 0) {\n throw new Error('createMosaicChartTool: specs must be a non-empty array.');\n }\n\n const ids = specs.map((s) => s.id);\n const chartTypeEnum = z.enum(ids as [string, ...string[]]);\n\n const MosaicChartToolParametersSchema = z.object({\n chartType: chartTypeEnum.describe(\n `One of: ${ids.join(', ')}. See describeChartSpecs / system prompt for details.`,\n ),\n fieldValues: z\n .record(z.string(), z.string())\n .describe('Map of template field key -> selected column name.'),\n reasoning: z.string().describe('Brief rationale for this chart choice.'),\n });\n\n type In = z.infer<typeof MosaicChartToolParametersSchema>;\n\n return tool<In, MosaicChartToolOutput>({\n description,\n inputSchema: MosaicChartToolParametersSchema,\n execute: async (params) => {\n const {chartType, fieldValues} = params;\n const specDef = specs.find((s) => s.id === chartType);\n if (!specDef) {\n return {\n success: false,\n details: 'Unknown chartType.',\n errorMessage: `No template with id \"${chartType}\".`,\n };\n }\n\n const validationError = validateFieldValues(\n specDef,\n fieldValues,\n columns,\n );\n if (validationError) {\n return {\n success: false,\n details: validationError,\n errorMessage: validationError,\n chartType,\n };\n }\n\n try {\n const spec = specDef.createSpec(tableName, fieldValues);\n const title = buildChartTitleForSpec(specDef, fieldValues);\n onCreateChart(spec, title);\n return {\n success: true,\n details: `Created chart \"${title}\" from template \"${chartType}\".`,\n chartType,\n title,\n spec,\n };\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n return {\n success: false,\n details: message,\n errorMessage: message,\n chartType,\n };\n }\n },\n });\n}\n"]}
@@ -1,3 +0,0 @@
1
- import type { RoomPanelComponent } from '@sqlrooms/layout';
2
- export declare const MosaicDashboardChartPanel: RoomPanelComponent;
3
- //# sourceMappingURL=MosaicDashboardChartPanel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MosaicDashboardChartPanel.d.ts","sourceRoot":"","sources":["../../src/dashboard/MosaicDashboardChartPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAyBzD,eAAO,MAAM,yBAAyB,EAAE,kBAmGvC,CAAC"}