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

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 (454) hide show
  1. package/README.md +209 -0
  2. package/dist/MosaicChartBuilder.d.ts +44 -13
  3. package/dist/MosaicChartBuilder.d.ts.map +1 -1
  4. package/dist/MosaicChartBuilder.js +22 -30
  5. package/dist/MosaicChartBuilder.js.map +1 -1
  6. package/dist/MosaicSlice.d.ts +28 -10
  7. package/dist/MosaicSlice.d.ts.map +1 -1
  8. package/dist/MosaicSlice.js +77 -11
  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/boxplot/BoxPlotClient.d.ts +58 -0
  19. package/dist/boxplot/BoxPlotClient.d.ts.map +1 -0
  20. package/dist/boxplot/BoxPlotClient.js +264 -0
  21. package/dist/boxplot/BoxPlotClient.js.map +1 -0
  22. package/dist/chart/MosaicDashboardChart.d.ts +14 -0
  23. package/dist/chart/MosaicDashboardChart.d.ts.map +1 -0
  24. package/dist/chart/MosaicDashboardChart.js +21 -0
  25. package/dist/chart/MosaicDashboardChart.js.map +1 -0
  26. package/dist/chart/MosaicDashboardChartContent.d.ts +16 -0
  27. package/dist/chart/MosaicDashboardChartContent.d.ts.map +1 -0
  28. package/dist/chart/MosaicDashboardChartContent.js +18 -0
  29. package/dist/chart/MosaicDashboardChartContent.js.map +1 -0
  30. package/dist/chart/MosaicDashboardChartHeaderActions.d.ts +4 -0
  31. package/dist/chart/MosaicDashboardChartHeaderActions.d.ts.map +1 -0
  32. package/dist/chart/MosaicDashboardChartHeaderActions.js +16 -0
  33. package/dist/chart/MosaicDashboardChartHeaderActions.js.map +1 -0
  34. package/dist/chart/MosaicDashboardChartRenderer.d.ts +3 -0
  35. package/dist/chart/MosaicDashboardChartRenderer.d.ts.map +1 -0
  36. package/dist/chart/MosaicDashboardChartRenderer.js +31 -0
  37. package/dist/chart/MosaicDashboardChartRenderer.js.map +1 -0
  38. package/dist/chart/MosaicDashboardComponentChart.d.ts +14 -0
  39. package/dist/chart/MosaicDashboardComponentChart.d.ts.map +1 -0
  40. package/dist/chart/MosaicDashboardComponentChart.js +11 -0
  41. package/dist/chart/MosaicDashboardComponentChart.js.map +1 -0
  42. package/dist/chart/MosaicDashboardVgPlotChart.d.ts +10 -0
  43. package/dist/chart/MosaicDashboardVgPlotChart.d.ts.map +1 -0
  44. package/dist/chart/MosaicDashboardVgPlotChart.js +10 -0
  45. package/dist/chart/MosaicDashboardVgPlotChart.js.map +1 -0
  46. package/dist/chart/MosaicDashboardVgPlotError.d.ts +8 -0
  47. package/dist/chart/MosaicDashboardVgPlotError.d.ts.map +1 -0
  48. package/dist/chart/MosaicDashboardVgPlotError.js +11 -0
  49. package/dist/chart/MosaicDashboardVgPlotError.js.map +1 -0
  50. package/dist/chart/chart-settings/ChartSettings.d.ts +44 -0
  51. package/dist/chart/chart-settings/ChartSettings.d.ts.map +1 -0
  52. package/dist/chart/chart-settings/ChartSettings.js +71 -0
  53. package/dist/chart/chart-settings/ChartSettings.js.map +1 -0
  54. package/dist/chart/chart-settings/ChartSettingsContent.d.ts +13 -0
  55. package/dist/chart/chart-settings/ChartSettingsContent.d.ts.map +1 -0
  56. package/dist/chart/chart-settings/ChartSettingsContent.js +18 -0
  57. package/dist/chart/chart-settings/ChartSettingsContent.js.map +1 -0
  58. package/dist/chart/chart-settings/ChartSettingsContext.d.ts +27 -0
  59. package/dist/chart/chart-settings/ChartSettingsContext.d.ts.map +1 -0
  60. package/dist/chart/chart-settings/ChartSettingsContext.js +35 -0
  61. package/dist/chart/chart-settings/ChartSettingsContext.js.map +1 -0
  62. package/dist/chart/chart-settings/ChartSettingsPanel.d.ts +14 -0
  63. package/dist/chart/chart-settings/ChartSettingsPanel.d.ts.map +1 -0
  64. package/dist/chart/chart-settings/ChartSettingsPanel.js +17 -0
  65. package/dist/chart/chart-settings/ChartSettingsPanel.js.map +1 -0
  66. package/dist/chart/chart-settings/ChartSpecViewerPanel.d.ts +9 -0
  67. package/dist/chart/chart-settings/ChartSpecViewerPanel.d.ts.map +1 -0
  68. package/dist/chart/chart-settings/ChartSpecViewerPanel.js +11 -0
  69. package/dist/chart/chart-settings/ChartSpecViewerPanel.js.map +1 -0
  70. package/dist/chart/chart-settings/ChartTypeSelector.d.ts +9 -0
  71. package/dist/chart/chart-settings/ChartTypeSelector.d.ts.map +1 -0
  72. package/dist/chart/chart-settings/ChartTypeSelector.js +16 -0
  73. package/dist/chart/chart-settings/ChartTypeSelector.js.map +1 -0
  74. package/dist/chart/chart-settings/useTableColumns.d.ts +3 -0
  75. package/dist/chart/chart-settings/useTableColumns.d.ts.map +1 -0
  76. package/dist/chart/chart-settings/useTableColumns.js +12 -0
  77. package/dist/chart/chart-settings/useTableColumns.js.map +1 -0
  78. package/dist/chart/useBrushSelectionParams.d.ts +3 -0
  79. package/dist/chart/useBrushSelectionParams.d.ts.map +1 -0
  80. package/dist/chart/useBrushSelectionParams.js +16 -0
  81. package/dist/chart/useBrushSelectionParams.js.map +1 -0
  82. package/dist/chart/useChartRetainer.d.ts +3 -0
  83. package/dist/chart/useChartRetainer.d.ts.map +1 -0
  84. package/dist/chart/useChartRetainer.js +11 -0
  85. package/dist/chart/useChartRetainer.js.map +1 -0
  86. package/dist/chart/useGenerateSpec.d.ts +13 -0
  87. package/dist/chart/useGenerateSpec.d.ts.map +1 -0
  88. package/dist/chart/useGenerateSpec.js +32 -0
  89. package/dist/chart/useGenerateSpec.js.map +1 -0
  90. package/dist/chart-builders/AggregationSelector.d.ts +11 -0
  91. package/dist/chart-builders/AggregationSelector.d.ts.map +1 -0
  92. package/dist/chart-builders/AggregationSelector.js +9 -0
  93. package/dist/chart-builders/AggregationSelector.js.map +1 -0
  94. package/dist/chart-builders/ChartBuilderActions.d.ts +6 -0
  95. package/dist/chart-builders/ChartBuilderActions.d.ts.map +1 -0
  96. package/dist/chart-builders/ChartBuilderActions.js +36 -0
  97. package/dist/chart-builders/ChartBuilderActions.js.map +1 -0
  98. package/dist/chart-builders/ChartBuilderContent.d.ts +12 -12
  99. package/dist/chart-builders/ChartBuilderContent.d.ts.map +1 -1
  100. package/dist/chart-builders/ChartBuilderContent.js +21 -52
  101. package/dist/chart-builders/ChartBuilderContent.js.map +1 -1
  102. package/dist/chart-builders/ChartBuilderContext.d.ts +8 -4
  103. package/dist/chart-builders/ChartBuilderContext.d.ts.map +1 -1
  104. package/dist/chart-builders/ChartBuilderContext.js +5 -0
  105. package/dist/chart-builders/ChartBuilderContext.js.map +1 -1
  106. package/dist/chart-builders/ChartBuilderDialog.d.ts +30 -8
  107. package/dist/chart-builders/ChartBuilderDialog.d.ts.map +1 -1
  108. package/dist/chart-builders/ChartBuilderDialog.js +25 -10
  109. package/dist/chart-builders/ChartBuilderDialog.js.map +1 -1
  110. package/dist/chart-builders/ChartBuilderFields.d.ts +6 -0
  111. package/dist/chart-builders/ChartBuilderFields.d.ts.map +1 -0
  112. package/dist/chart-builders/ChartBuilderFields.js +39 -0
  113. package/dist/chart-builders/ChartBuilderFields.js.map +1 -0
  114. package/dist/chart-builders/ChartBuilderRoot.d.ts +25 -0
  115. package/dist/chart-builders/ChartBuilderRoot.d.ts.map +1 -0
  116. package/dist/chart-builders/ChartBuilderRoot.js +42 -0
  117. package/dist/chart-builders/ChartBuilderRoot.js.map +1 -0
  118. package/dist/chart-builders/ChartBuilderTypeGrid.d.ts +7 -0
  119. package/dist/chart-builders/ChartBuilderTypeGrid.d.ts.map +1 -0
  120. package/dist/chart-builders/ChartBuilderTypeGrid.js +23 -0
  121. package/dist/chart-builders/ChartBuilderTypeGrid.js.map +1 -0
  122. package/dist/chart-builders/ColumnSelector.d.ts +15 -0
  123. package/dist/chart-builders/ColumnSelector.d.ts.map +1 -0
  124. package/dist/chart-builders/ColumnSelector.js +31 -0
  125. package/dist/chart-builders/ColumnSelector.js.map +1 -0
  126. package/dist/chart-builders/Field.d.ts +11 -0
  127. package/dist/chart-builders/Field.d.ts.map +1 -0
  128. package/dist/chart-builders/Field.js +9 -0
  129. package/dist/chart-builders/Field.js.map +1 -0
  130. package/dist/chart-builders/FieldSelectorInput.d.ts +2 -1
  131. package/dist/chart-builders/FieldSelectorInput.d.ts.map +1 -1
  132. package/dist/chart-builders/FieldSelectorInput.js +5 -5
  133. package/dist/chart-builders/FieldSelectorInput.js.map +1 -1
  134. package/dist/chart-builders/MultiFieldSelector.d.ts +14 -0
  135. package/dist/chart-builders/MultiFieldSelector.d.ts.map +1 -0
  136. package/dist/chart-builders/MultiFieldSelector.js +53 -0
  137. package/dist/chart-builders/MultiFieldSelector.js.map +1 -0
  138. package/dist/chart-builders/TemporalGranularitySelector.d.ts +10 -0
  139. package/dist/chart-builders/TemporalGranularitySelector.d.ts.map +1 -0
  140. package/dist/chart-builders/TemporalGranularitySelector.js +37 -0
  141. package/dist/chart-builders/TemporalGranularitySelector.js.map +1 -0
  142. package/dist/chart-builders/chartSpecTitle.d.ts +3 -4
  143. package/dist/chart-builders/chartSpecTitle.d.ts.map +1 -1
  144. package/dist/chart-builders/chartSpecTitle.js +3 -5
  145. package/dist/chart-builders/chartSpecTitle.js.map +1 -1
  146. package/dist/chart-builders/chartTypeUtils.d.ts +13 -0
  147. package/dist/chart-builders/chartTypeUtils.d.ts.map +1 -0
  148. package/dist/chart-builders/chartTypeUtils.js +47 -0
  149. package/dist/chart-builders/chartTypeUtils.js.map +1 -0
  150. package/dist/chart-builders/constants.d.ts +12 -0
  151. package/dist/chart-builders/constants.d.ts.map +1 -0
  152. package/dist/chart-builders/constants.js +47 -0
  153. package/dist/chart-builders/constants.js.map +1 -0
  154. package/dist/chart-builders/createChartBuilderStore.d.ts +11 -0
  155. package/dist/chart-builders/createChartBuilderStore.d.ts.map +1 -0
  156. package/dist/chart-builders/createChartBuilderStore.js +26 -0
  157. package/dist/chart-builders/createChartBuilderStore.js.map +1 -0
  158. package/dist/chart-types/base-types.d.ts +148 -0
  159. package/dist/chart-types/base-types.d.ts.map +1 -0
  160. package/dist/chart-types/base-types.js +11 -0
  161. package/dist/chart-types/base-types.js.map +1 -0
  162. package/dist/chart-types/box-plot/BoxPlotSettings.d.ts +3 -0
  163. package/dist/chart-types/box-plot/BoxPlotSettings.d.ts.map +1 -0
  164. package/dist/chart-types/box-plot/BoxPlotSettings.js +9 -0
  165. package/dist/chart-types/box-plot/BoxPlotSettings.js.map +1 -0
  166. package/dist/chart-types/box-plot/definition.d.ts +4 -0
  167. package/dist/chart-types/box-plot/definition.d.ts.map +1 -0
  168. package/dist/chart-types/box-plot/definition.js +19 -0
  169. package/dist/chart-types/box-plot/definition.js.map +1 -0
  170. package/dist/chart-types/box-plot/renderer/BoxPlotErrorBoundary.d.ts +18 -0
  171. package/dist/chart-types/box-plot/renderer/BoxPlotErrorBoundary.d.ts.map +1 -0
  172. package/dist/chart-types/box-plot/renderer/BoxPlotErrorBoundary.js +28 -0
  173. package/dist/chart-types/box-plot/renderer/BoxPlotErrorBoundary.js.map +1 -0
  174. package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.d.ts +9 -0
  175. package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.d.ts.map +1 -0
  176. package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.js +115 -0
  177. package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.js.map +1 -0
  178. package/dist/chart-types/box-plot/renderer/constants.d.ts +24 -0
  179. package/dist/chart-types/box-plot/renderer/constants.d.ts.map +1 -0
  180. package/dist/chart-types/box-plot/renderer/constants.js +17 -0
  181. package/dist/chart-types/box-plot/renderer/constants.js.map +1 -0
  182. package/dist/chart-types/box-plot/renderer/plot.d.ts +14 -0
  183. package/dist/chart-types/box-plot/renderer/plot.d.ts.map +1 -0
  184. package/dist/chart-types/box-plot/renderer/plot.js +91 -0
  185. package/dist/chart-types/box-plot/renderer/plot.js.map +1 -0
  186. package/dist/chart-types/box-plot/renderer/useBoxPlotClient.d.ts +14 -0
  187. package/dist/chart-types/box-plot/renderer/useBoxPlotClient.d.ts.map +1 -0
  188. package/dist/chart-types/box-plot/renderer/useBoxPlotClient.js +45 -0
  189. package/dist/chart-types/box-plot/renderer/useBoxPlotClient.js.map +1 -0
  190. package/dist/chart-types/box-plot/renderer/utils.d.ts +6 -0
  191. package/dist/chart-types/box-plot/renderer/utils.d.ts.map +1 -0
  192. package/dist/chart-types/box-plot/renderer/utils.js +34 -0
  193. package/dist/chart-types/box-plot/renderer/utils.js.map +1 -0
  194. package/dist/chart-types/box-plot/schema.d.ts +16 -0
  195. package/dist/chart-types/box-plot/schema.d.ts.map +1 -0
  196. package/dist/chart-types/box-plot/schema.js +11 -0
  197. package/dist/chart-types/box-plot/schema.js.map +1 -0
  198. package/dist/chart-types/box-plot/tool.d.ts +44 -0
  199. package/dist/chart-types/box-plot/tool.d.ts.map +1 -0
  200. package/dist/chart-types/box-plot/tool.js +59 -0
  201. package/dist/chart-types/box-plot/tool.js.map +1 -0
  202. package/dist/chart-types/bubble-chart/BubbleChartSettings.d.ts +3 -0
  203. package/dist/chart-types/bubble-chart/BubbleChartSettings.d.ts.map +1 -0
  204. package/dist/chart-types/bubble-chart/BubbleChartSettings.js +9 -0
  205. package/dist/chart-types/bubble-chart/BubbleChartSettings.js.map +1 -0
  206. package/dist/chart-types/bubble-chart/definition.d.ts +4 -0
  207. package/dist/chart-types/bubble-chart/definition.d.ts.map +1 -0
  208. package/dist/chart-types/bubble-chart/definition.js +19 -0
  209. package/dist/chart-types/bubble-chart/definition.js.map +1 -0
  210. package/dist/chart-types/bubble-chart/schema.d.ts +18 -0
  211. package/dist/chart-types/bubble-chart/schema.d.ts.map +1 -0
  212. package/dist/chart-types/bubble-chart/schema.js +15 -0
  213. package/dist/chart-types/bubble-chart/schema.js.map +1 -0
  214. package/dist/chart-types/bubble-chart/spec.d.ts +4 -0
  215. package/dist/chart-types/bubble-chart/spec.d.ts.map +1 -0
  216. package/dist/chart-types/bubble-chart/spec.js +31 -0
  217. package/dist/chart-types/bubble-chart/spec.js.map +1 -0
  218. package/dist/chart-types/bubble-chart/tool.d.ts +46 -0
  219. package/dist/chart-types/bubble-chart/tool.d.ts.map +1 -0
  220. package/dist/chart-types/bubble-chart/tool.js +58 -0
  221. package/dist/chart-types/bubble-chart/tool.js.map +1 -0
  222. package/dist/chart-types/chart-config.d.ts +92 -0
  223. package/dist/chart-types/chart-config.d.ts.map +1 -0
  224. package/dist/chart-types/chart-config.js +47 -0
  225. package/dist/chart-types/chart-config.js.map +1 -0
  226. package/dist/chart-types/count-plot/CountPlotSettings.d.ts +3 -0
  227. package/dist/chart-types/count-plot/CountPlotSettings.d.ts.map +1 -0
  228. package/dist/chart-types/count-plot/CountPlotSettings.js +9 -0
  229. package/dist/chart-types/count-plot/CountPlotSettings.js.map +1 -0
  230. package/dist/chart-types/count-plot/definition.d.ts +4 -0
  231. package/dist/chart-types/count-plot/definition.d.ts.map +1 -0
  232. package/dist/chart-types/count-plot/definition.js +19 -0
  233. package/dist/chart-types/count-plot/definition.js.map +1 -0
  234. package/dist/chart-types/count-plot/schema.d.ts +14 -0
  235. package/dist/chart-types/count-plot/schema.d.ts.map +1 -0
  236. package/dist/chart-types/count-plot/schema.js +13 -0
  237. package/dist/chart-types/count-plot/schema.js.map +1 -0
  238. package/dist/chart-types/count-plot/spec.d.ts +4 -0
  239. package/dist/chart-types/count-plot/spec.d.ts.map +1 -0
  240. package/dist/chart-types/count-plot/spec.js +49 -0
  241. package/dist/chart-types/count-plot/spec.js.map +1 -0
  242. package/dist/chart-types/count-plot/tool.d.ts +42 -0
  243. package/dist/chart-types/count-plot/tool.d.ts.map +1 -0
  244. package/dist/chart-types/count-plot/tool.js +55 -0
  245. package/dist/chart-types/count-plot/tool.js.map +1 -0
  246. package/dist/chart-types/custom-spec/CustomSpecSettings.d.ts +7 -0
  247. package/dist/chart-types/custom-spec/CustomSpecSettings.d.ts.map +1 -0
  248. package/dist/chart-types/custom-spec/CustomSpecSettings.js +30 -0
  249. package/dist/chart-types/custom-spec/CustomSpecSettings.js.map +1 -0
  250. package/dist/chart-types/custom-spec/definition.d.ts +4 -0
  251. package/dist/chart-types/custom-spec/definition.d.ts.map +1 -0
  252. package/dist/chart-types/custom-spec/definition.js +17 -0
  253. package/dist/chart-types/custom-spec/definition.js.map +1 -0
  254. package/dist/chart-types/custom-spec/schema.d.ts +14 -0
  255. package/dist/chart-types/custom-spec/schema.d.ts.map +1 -0
  256. package/dist/chart-types/custom-spec/schema.js +10 -0
  257. package/dist/chart-types/custom-spec/schema.js.map +1 -0
  258. package/dist/chart-types/custom-spec/spec.d.ts +4 -0
  259. package/dist/chart-types/custom-spec/spec.d.ts.map +1 -0
  260. package/dist/chart-types/custom-spec/spec.js +24 -0
  261. package/dist/chart-types/custom-spec/spec.js.map +1 -0
  262. package/dist/chart-types/errors.d.ts +23 -0
  263. package/dist/chart-types/errors.d.ts.map +1 -0
  264. package/dist/chart-types/errors.js +26 -0
  265. package/dist/chart-types/errors.js.map +1 -0
  266. package/dist/chart-types/heatmap/HeatmapSettings.d.ts +3 -0
  267. package/dist/chart-types/heatmap/HeatmapSettings.d.ts.map +1 -0
  268. package/dist/chart-types/heatmap/HeatmapSettings.js +9 -0
  269. package/dist/chart-types/heatmap/HeatmapSettings.js.map +1 -0
  270. package/dist/chart-types/heatmap/definition.d.ts +4 -0
  271. package/dist/chart-types/heatmap/definition.d.ts.map +1 -0
  272. package/dist/chart-types/heatmap/definition.js +19 -0
  273. package/dist/chart-types/heatmap/definition.js.map +1 -0
  274. package/dist/chart-types/heatmap/schema.d.ts +16 -0
  275. package/dist/chart-types/heatmap/schema.d.ts.map +1 -0
  276. package/dist/chart-types/heatmap/schema.js +11 -0
  277. package/dist/chart-types/heatmap/schema.js.map +1 -0
  278. package/dist/chart-types/heatmap/spec.d.ts +4 -0
  279. package/dist/chart-types/heatmap/spec.d.ts.map +1 -0
  280. package/dist/chart-types/heatmap/spec.js +32 -0
  281. package/dist/chart-types/heatmap/spec.js.map +1 -0
  282. package/dist/chart-types/heatmap/tool.d.ts +44 -0
  283. package/dist/chart-types/heatmap/tool.d.ts.map +1 -0
  284. package/dist/chart-types/heatmap/tool.js +59 -0
  285. package/dist/chart-types/heatmap/tool.js.map +1 -0
  286. package/dist/chart-types/histogram/HistogramSettings.d.ts +3 -0
  287. package/dist/chart-types/histogram/HistogramSettings.d.ts.map +1 -0
  288. package/dist/chart-types/histogram/HistogramSettings.js +9 -0
  289. package/dist/chart-types/histogram/HistogramSettings.js.map +1 -0
  290. package/dist/chart-types/histogram/definition.d.ts +4 -0
  291. package/dist/chart-types/histogram/definition.d.ts.map +1 -0
  292. package/dist/chart-types/histogram/definition.js +19 -0
  293. package/dist/chart-types/histogram/definition.js.map +1 -0
  294. package/dist/chart-types/histogram/schema.d.ts +14 -0
  295. package/dist/chart-types/histogram/schema.d.ts.map +1 -0
  296. package/dist/chart-types/histogram/schema.js +13 -0
  297. package/dist/chart-types/histogram/schema.js.map +1 -0
  298. package/dist/chart-types/histogram/spec.d.ts +4 -0
  299. package/dist/chart-types/histogram/spec.d.ts.map +1 -0
  300. package/dist/chart-types/histogram/spec.js +36 -0
  301. package/dist/chart-types/histogram/spec.js.map +1 -0
  302. package/dist/chart-types/histogram/tool.d.ts +42 -0
  303. package/dist/chart-types/histogram/tool.d.ts.map +1 -0
  304. package/dist/chart-types/histogram/tool.js +55 -0
  305. package/dist/chart-types/histogram/tool.js.map +1 -0
  306. package/dist/chart-types/index.d.ts +115 -0
  307. package/dist/chart-types/index.d.ts.map +1 -0
  308. package/dist/chart-types/index.js +100 -0
  309. package/dist/chart-types/index.js.map +1 -0
  310. package/dist/chart-types/line-chart/LineChartSettings.d.ts +7 -0
  311. package/dist/chart-types/line-chart/LineChartSettings.d.ts.map +1 -0
  312. package/dist/chart-types/line-chart/LineChartSettings.js +22 -0
  313. package/dist/chart-types/line-chart/LineChartSettings.js.map +1 -0
  314. package/dist/chart-types/line-chart/definition.d.ts +4 -0
  315. package/dist/chart-types/line-chart/definition.d.ts.map +1 -0
  316. package/dist/chart-types/line-chart/definition.js +19 -0
  317. package/dist/chart-types/line-chart/definition.js.map +1 -0
  318. package/dist/chart-types/line-chart/schema.d.ts +83 -0
  319. package/dist/chart-types/line-chart/schema.d.ts.map +1 -0
  320. package/dist/chart-types/line-chart/schema.js +39 -0
  321. package/dist/chart-types/line-chart/schema.js.map +1 -0
  322. package/dist/chart-types/line-chart/spec.d.ts +4 -0
  323. package/dist/chart-types/line-chart/spec.d.ts.map +1 -0
  324. package/dist/chart-types/line-chart/spec.js +91 -0
  325. package/dist/chart-types/line-chart/spec.js.map +1 -0
  326. package/dist/chart-types/line-chart/tool.d.ts +68 -0
  327. package/dist/chart-types/line-chart/tool.d.ts.map +1 -0
  328. package/dist/chart-types/line-chart/tool.js +66 -0
  329. package/dist/chart-types/line-chart/tool.js.map +1 -0
  330. package/dist/chart-types/tool-schemas.d.ts +8 -0
  331. package/dist/chart-types/tool-schemas.d.ts.map +1 -0
  332. package/dist/chart-types/tool-schemas.js +18 -0
  333. package/dist/chart-types/tool-schemas.js.map +1 -0
  334. package/dist/chart-types/tool-types.d.ts +26 -0
  335. package/dist/chart-types/tool-types.d.ts.map +1 -0
  336. package/dist/chart-types/tool-types.js +2 -0
  337. package/dist/chart-types/tool-types.js.map +1 -0
  338. package/dist/chart-types/tool-validation.d.ts +3 -0
  339. package/dist/chart-types/tool-validation.d.ts.map +1 -0
  340. package/dist/chart-types/tool-validation.js +11 -0
  341. package/dist/chart-types/tool-validation.js.map +1 -0
  342. package/dist/chart-types/useChartTypeDefinition.d.ts +3 -0
  343. package/dist/chart-types/useChartTypeDefinition.d.ts.map +1 -0
  344. package/dist/chart-types/useChartTypeDefinition.js +8 -0
  345. package/dist/chart-types/useChartTypeDefinition.js.map +1 -0
  346. package/dist/dashboard/DashboardPanelErrorBoundary.d.ts +17 -0
  347. package/dist/dashboard/DashboardPanelErrorBoundary.d.ts.map +1 -0
  348. package/dist/dashboard/DashboardPanelErrorBoundary.js +21 -0
  349. package/dist/dashboard/DashboardPanelErrorBoundary.js.map +1 -0
  350. package/dist/dashboard/MosaicDashboard.d.ts +2 -4
  351. package/dist/dashboard/MosaicDashboard.d.ts.map +1 -1
  352. package/dist/dashboard/MosaicDashboard.js +38 -19
  353. package/dist/dashboard/MosaicDashboard.js.map +1 -1
  354. package/dist/dashboard/MosaicDashboardContext.d.ts +1 -0
  355. package/dist/dashboard/MosaicDashboardContext.d.ts.map +1 -1
  356. package/dist/dashboard/MosaicDashboardContext.js.map +1 -1
  357. package/dist/dashboard/MosaicDashboardEmptyState.d.ts +2 -0
  358. package/dist/dashboard/MosaicDashboardEmptyState.d.ts.map +1 -0
  359. package/dist/dashboard/MosaicDashboardEmptyState.js +50 -0
  360. package/dist/dashboard/MosaicDashboardEmptyState.js.map +1 -0
  361. package/dist/dashboard/MosaicDashboardPanel.d.ts +3 -0
  362. package/dist/dashboard/MosaicDashboardPanel.d.ts.map +1 -0
  363. package/dist/dashboard/MosaicDashboardPanel.js +26 -0
  364. package/dist/dashboard/MosaicDashboardPanel.js.map +1 -0
  365. package/dist/dashboard/MosaicDashboardPanelDragOverlay.d.ts +8 -0
  366. package/dist/dashboard/MosaicDashboardPanelDragOverlay.d.ts.map +1 -0
  367. package/dist/dashboard/MosaicDashboardPanelDragOverlay.js +17 -0
  368. package/dist/dashboard/MosaicDashboardPanelDragOverlay.js.map +1 -0
  369. package/dist/dashboard/MosaicDashboardPanelHeader.d.ts +13 -0
  370. package/dist/dashboard/MosaicDashboardPanelHeader.d.ts.map +1 -0
  371. package/dist/dashboard/MosaicDashboardPanelHeader.js +30 -0
  372. package/dist/dashboard/MosaicDashboardPanelHeader.js.map +1 -0
  373. package/dist/dashboard/MosaicDashboardPanelLayout.d.ts +10 -0
  374. package/dist/dashboard/MosaicDashboardPanelLayout.d.ts.map +1 -0
  375. package/dist/dashboard/MosaicDashboardPanelLayout.js +46 -0
  376. package/dist/dashboard/MosaicDashboardPanelLayout.js.map +1 -0
  377. package/dist/dashboard/MosaicDashboardPanels.d.ts +2 -0
  378. package/dist/dashboard/MosaicDashboardPanels.d.ts.map +1 -0
  379. package/dist/dashboard/MosaicDashboardPanels.js +53 -0
  380. package/dist/dashboard/MosaicDashboardPanels.js.map +1 -0
  381. package/dist/dashboard/MosaicDashboardSlice.d.ts +607 -27
  382. package/dist/dashboard/MosaicDashboardSlice.d.ts.map +1 -1
  383. package/dist/dashboard/MosaicDashboardSlice.js +525 -93
  384. package/dist/dashboard/MosaicDashboardSlice.js.map +1 -1
  385. package/dist/dashboard/MosaicDashboardToolbar.d.ts.map +1 -1
  386. package/dist/dashboard/MosaicDashboardToolbar.js +74 -7
  387. package/dist/dashboard/MosaicDashboardToolbar.js.map +1 -1
  388. package/dist/dashboard/defaultPanelRenderers.d.ts +3 -0
  389. package/dist/dashboard/defaultPanelRenderers.d.ts.map +1 -0
  390. package/dist/dashboard/defaultPanelRenderers.js +13 -0
  391. package/dist/dashboard/defaultPanelRenderers.js.map +1 -0
  392. package/dist/dashboard/utils.d.ts +3 -0
  393. package/dist/dashboard/utils.d.ts.map +1 -0
  394. package/dist/dashboard/utils.js +16 -0
  395. package/dist/dashboard/utils.js.map +1 -0
  396. package/dist/editor/MosaicChartDisplay.d.ts.map +1 -1
  397. package/dist/editor/MosaicChartDisplay.js +6 -1
  398. package/dist/editor/MosaicChartDisplay.js.map +1 -1
  399. package/dist/index.d.ts +28 -5
  400. package/dist/index.d.ts.map +1 -1
  401. package/dist/index.js +20 -3
  402. package/dist/index.js.map +1 -1
  403. package/dist/profiler/MosaicDashboardProfilerPanelRenderer.d.ts +3 -0
  404. package/dist/profiler/MosaicDashboardProfilerPanelRenderer.d.ts.map +1 -0
  405. package/dist/profiler/MosaicDashboardProfilerPanelRenderer.js +32 -0
  406. package/dist/profiler/MosaicDashboardProfilerPanelRenderer.js.map +1 -0
  407. package/dist/profiler/useMosaicProfiler.d.ts.map +1 -1
  408. package/dist/profiler/useMosaicProfiler.js.map +1 -1
  409. package/dist/tableInterop.js.map +1 -1
  410. package/dist/text/MosaicDashboardTextRenderer.d.ts +3 -0
  411. package/dist/text/MosaicDashboardTextRenderer.d.ts.map +1 -0
  412. package/dist/text/MosaicDashboardTextRenderer.js +46 -0
  413. package/dist/text/MosaicDashboardTextRenderer.js.map +1 -0
  414. package/dist/useMosaicClient.d.ts +4 -15
  415. package/dist/useMosaicClient.d.ts.map +1 -1
  416. package/dist/useMosaicClient.js +10 -4
  417. package/dist/useMosaicClient.js.map +1 -1
  418. package/package.json +40 -31
  419. package/dist/chart-builders/builders.d.ts +0 -7
  420. package/dist/chart-builders/builders.d.ts.map +0 -1
  421. package/dist/chart-builders/builders.js +0 -280
  422. package/dist/chart-builders/builders.js.map +0 -1
  423. package/dist/chart-builders/createMosaicChartTool.d.ts +0 -45
  424. package/dist/chart-builders/createMosaicChartTool.d.ts.map +0 -1
  425. package/dist/chart-builders/createMosaicChartTool.js +0 -109
  426. package/dist/chart-builders/createMosaicChartTool.js.map +0 -1
  427. package/dist/chart-builders/describeChartSpecs.d.ts +0 -7
  428. package/dist/chart-builders/describeChartSpecs.d.ts.map +0 -1
  429. package/dist/chart-builders/describeChartSpecs.js +0 -38
  430. package/dist/chart-builders/describeChartSpecs.js.map +0 -1
  431. package/dist/chart-builders/types.d.ts +0 -40
  432. package/dist/chart-builders/types.d.ts.map +0 -1
  433. package/dist/chart-builders/types.js +0 -2
  434. package/dist/chart-builders/types.js.map +0 -1
  435. package/dist/dashboard/MosaicDashboardChartPanel.d.ts +0 -3
  436. package/dist/dashboard/MosaicDashboardChartPanel.d.ts.map +0 -1
  437. package/dist/dashboard/MosaicDashboardChartPanel.js +0 -49
  438. package/dist/dashboard/MosaicDashboardChartPanel.js.map +0 -1
  439. package/dist/dashboard/MosaicDashboardCharts.d.ts +0 -3
  440. package/dist/dashboard/MosaicDashboardCharts.d.ts.map +0 -1
  441. package/dist/dashboard/MosaicDashboardCharts.js +0 -45
  442. package/dist/dashboard/MosaicDashboardCharts.js.map +0 -1
  443. package/dist/dashboard/MosaicDashboardProfiler.d.ts +0 -3
  444. package/dist/dashboard/MosaicDashboardProfiler.d.ts.map +0 -1
  445. package/dist/dashboard/MosaicDashboardProfiler.js +0 -21
  446. package/dist/dashboard/MosaicDashboardProfiler.js.map +0 -1
  447. package/dist/dashboard/VgPlotSpecPopoverEditor.d.ts +0 -8
  448. package/dist/dashboard/VgPlotSpecPopoverEditor.d.ts.map +0 -1
  449. package/dist/dashboard/VgPlotSpecPopoverEditor.js +0 -40
  450. package/dist/dashboard/VgPlotSpecPopoverEditor.js.map +0 -1
  451. package/dist/use-mosaic.d.ts +0 -11
  452. package/dist/use-mosaic.d.ts.map +0 -1
  453. package/dist/use-mosaic.js +0 -42
  454. package/dist/use-mosaic.js.map +0 -1
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 createMosaicDashboardPanelConfig,\n createMosaicDashboardProfilerPanelConfig,\n createMosaicDashboardChartPanelConfig,\n createMosaicDashboardTextPanelConfig,\n createDefaultMosaicDashboardConfig,\n createMosaicDashboardSlice,\n getMosaicDashboardDockId,\n getMosaicDashboardGridId,\n getMosaicDashboardPanelId,\n getMosaicDashboardSelectionName,\n isChartPanelConfig,\n panelHasSource,\n MOSAIC_DASHBOARD_PANEL,\n MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE,\n MOSAIC_DASHBOARD_CHART_PANEL_TYPE,\n MOSAIC_DASHBOARD_CHART_PANEL_TYPE as MOSAIC_DASHBOARD_VGPLOT_PANEL_TYPE,\n MOSAIC_DASHBOARD_TEXT_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 ChartPanelConfig,\n TextPanel,\n TextPanelConfig,\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 components\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 heatmapChartType,\n histogramChartType,\n isSpecChartType,\n isComponentChartType,\n lineChartChartType,\n mosaicChartTypes,\n ChartConfig,\n HistogramChartSettings,\n LineChartSettings,\n CountPlotChartSettings,\n BubbleChartSettings,\n HeatmapChartSettings,\n BoxPlotChartSettings,\n // Tool helpers, parameters, and AI tool creators\n BaseChartToolParameters,\n validateColumnExists,\n HistogramToolParameters,\n LineChartToolParameters,\n CountPlotToolParameters,\n HeatmapToolParameters,\n BubbleChartToolParameters,\n BoxPlotToolParameters,\n createHistogramAiTool,\n createLineChartAiTool,\n createCountPlotAiTool,\n createHeatmapAiTool,\n createBubbleChartAiTool,\n createBoxPlotAiTool,\n createChartTools,\n} from './chart-types';\nexport type {\n ChartSettings,\n ChartType,\n ChartToolDeps,\n ChartToolExecutionContext,\n ResolvedChartResources,\n CreateChartParams,\n CreateChartResult,\n HistogramToolParams,\n LineChartToolParams,\n CountPlotToolParams,\n HeatmapToolParams,\n BubbleChartToolParams,\n BoxPlotToolParams,\n} from './chart-types';\nexport {\n buildChartTypeTitle,\n canCreateChartFromType,\n NUMERIC_COLUMN_TYPES,\n QUANTITATIVE_COLUMN_TYPES,\n TEMPORAL_COLUMN_TYPES,\n} from './chart-builders/chartTypeUtils';\nexport type {FieldSelectorInputProps} from './chart-builders/FieldSelectorInput';\nexport type {\n ChartBuilderColumn,\n ChartBuilderDashboardPanelOutput,\n ChartBuilderField,\n ChartSpec,\n ChartTypeDefinition,\n} from './chart-types/base-types';\nexport {MosaicCodeMirrorEditor} from './editor/MosaicCodeMirrorEditor';\n"]}
@@ -0,0 +1,3 @@
1
+ import { type MosaicDashboardPanelRenderer, ProfilerPanel } from '../dashboard/MosaicDashboardSlice';
2
+ export declare const mosaicDashboardProfilerPanelRenderer: MosaicDashboardPanelRenderer<ProfilerPanel>;
3
+ //# sourceMappingURL=MosaicDashboardProfilerPanelRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardProfilerPanelRenderer.d.ts","sourceRoot":"","sources":["../../src/profiler/MosaicDashboardProfilerPanelRenderer.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,4BAA4B,EACjC,aAAa,EAGd,MAAM,mCAAmC,CAAC;AAyD3C,eAAO,MAAM,oCAAoC,EAAE,4BAA4B,CAAC,aAAa,CAI1F,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { SpinnerPane } from '@sqlrooms/ui';
3
+ import { TablePropertiesIcon } from 'lucide-react';
4
+ import { MosaicProfiler } from './MosaicProfiler';
5
+ import { useStoreWithMosaicDashboard, } from '../dashboard/MosaicDashboardSlice';
6
+ function MosaicDashboardProfilerRenderer({ panel, resolvedSource, selectionName, }) {
7
+ const connection = useStoreWithMosaicDashboard((state) => state.mosaic.connection);
8
+ const tableName = resolvedSource?.tableName;
9
+ const pageSize = typeof panel.config.pageSize === 'number'
10
+ ? panel.config.pageSize
11
+ : undefined;
12
+ if (!tableName) {
13
+ return (_jsx("div", { className: "text-muted-foreground flex h-full items-center justify-center p-4 text-sm", children: "Profiler panels require a table source." }));
14
+ }
15
+ if (connection.status === 'loading') {
16
+ return _jsx(SpinnerPane, { className: "h-full w-full" });
17
+ }
18
+ if (connection.status !== 'ready') {
19
+ return (_jsx("div", { className: "text-muted-foreground flex h-full items-center justify-center p-4 text-sm", children: "Mosaic connection is not ready." }));
20
+ }
21
+ const profilerProps = {
22
+ tableName,
23
+ pageSize: pageSize ?? 10,
24
+ selectionName,
25
+ };
26
+ return (_jsx(MosaicProfiler, { ...profilerProps, children: _jsxs("div", { className: "flex h-full min-h-0 flex-col", children: [_jsx("div", { className: "min-h-0 flex-1 overflow-auto", children: _jsxs(MosaicProfiler.Table, { children: [_jsx(MosaicProfiler.Header, {}), _jsx(MosaicProfiler.Rows, {})] }) }), _jsx(MosaicProfiler.StatusBar, {})] }) }));
27
+ }
28
+ export const mosaicDashboardProfilerPanelRenderer = {
29
+ component: MosaicDashboardProfilerRenderer,
30
+ icon: TablePropertiesIcon,
31
+ };
32
+ //# sourceMappingURL=MosaicDashboardProfilerPanelRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardProfilerPanelRenderer.js","sourceRoot":"","sources":["../../src/profiler/MosaicDashboardProfilerPanelRenderer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,EAAC,mBAAmB,EAAC,MAAM,cAAc,CAAC;AACjD,OAAO,EAAC,cAAc,EAA2B,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAIL,2BAA2B,GAC5B,MAAM,mCAAmC,CAAC;AAE3C,SAAS,+BAA+B,CAAC,EACvC,KAAK,EACL,cAAc,EACd,aAAa,GACc;IAC3B,MAAM,UAAU,GAAG,2BAA2B,CAC5C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CACnC,CAAC;IACF,MAAM,SAAS,GAAG,cAAc,EAAE,SAAS,CAAC;IAC5C,MAAM,QAAQ,GACZ,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ;QACvC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ;QACvB,CAAC,CAAC,SAAS,CAAC;IAEhB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CACL,cAAK,SAAS,EAAC,2EAA2E,wDAEpF,CACP,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,KAAC,WAAW,IAAC,SAAS,EAAC,eAAe,GAAG,CAAC;IACnD,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAClC,OAAO,CACL,cAAK,SAAS,EAAC,2EAA2E,gDAEpF,CACP,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG;QACpB,SAAS;QACT,QAAQ,EAAE,QAAQ,IAAI,EAAE;QACxB,aAAa;KACgB,CAAC;IAEhC,OAAO,CACL,KAAC,cAAc,OAAK,aAAa,YAC/B,eAAK,SAAS,EAAC,8BAA8B,aAC3C,cAAK,SAAS,EAAC,8BAA8B,YAC3C,MAAC,cAAc,CAAC,KAAK,eACnB,KAAC,cAAc,CAAC,MAAM,KAAG,EACzB,KAAC,cAAc,CAAC,IAAI,KAAG,IACF,GACnB,EACN,KAAC,cAAc,CAAC,SAAS,KAAG,IACxB,GACS,CAClB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,oCAAoC,GAC/C;IACE,SAAS,EAAE,+BAA+B;IAC1C,IAAI,EAAE,mBAAmB;CAC1B,CAAC","sourcesContent":["import {SpinnerPane} from '@sqlrooms/ui';\nimport {TablePropertiesIcon} from 'lucide-react';\nimport {MosaicProfiler, type MosaicProfilerProps} from './MosaicProfiler';\nimport {\n type MosaicDashboardPanelRenderer,\n ProfilerPanel,\n type ProfilerPanelRendererProps,\n useStoreWithMosaicDashboard,\n} from '../dashboard/MosaicDashboardSlice';\n\nfunction MosaicDashboardProfilerRenderer({\n panel,\n resolvedSource,\n selectionName,\n}: ProfilerPanelRendererProps) {\n const connection = useStoreWithMosaicDashboard(\n (state) => state.mosaic.connection,\n );\n const tableName = resolvedSource?.tableName;\n const pageSize =\n typeof panel.config.pageSize === 'number'\n ? panel.config.pageSize\n : undefined;\n\n if (!tableName) {\n return (\n <div className=\"text-muted-foreground flex h-full items-center justify-center p-4 text-sm\">\n Profiler panels require a table source.\n </div>\n );\n }\n\n if (connection.status === 'loading') {\n return <SpinnerPane className=\"h-full w-full\" />;\n }\n\n if (connection.status !== 'ready') {\n return (\n <div className=\"text-muted-foreground flex h-full items-center justify-center p-4 text-sm\">\n Mosaic connection is not ready.\n </div>\n );\n }\n\n const profilerProps = {\n tableName,\n pageSize: pageSize ?? 10,\n selectionName,\n } satisfies MosaicProfilerProps;\n\n return (\n <MosaicProfiler {...profilerProps}>\n <div className=\"flex h-full min-h-0 flex-col\">\n <div className=\"min-h-0 flex-1 overflow-auto\">\n <MosaicProfiler.Table>\n <MosaicProfiler.Header />\n <MosaicProfiler.Rows />\n </MosaicProfiler.Table>\n </div>\n <MosaicProfiler.StatusBar />\n </div>\n </MosaicProfiler>\n );\n}\n\nexport const mosaicDashboardProfilerPanelRenderer: MosaicDashboardPanelRenderer<ProfilerPanel> =\n {\n component: MosaicDashboardProfilerRenderer,\n icon: TablePropertiesIcon,\n };\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":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,EACL,SAAS,IAAI,eAAe,GAE7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,SAAS,EACT,OAAO,EACP,QAAQ,GAGT,MAAM,OAAO,CAAC;AACf,OAAO,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAC;AACjC,OAAO,EAAC,kBAAkB,EAAwB,MAAM,gBAAgB,CAAC;AACzE,OAAO,EACL,mBAAmB,GAGpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,6BAA6B,EAC7B,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,gCAAgC,GACjC,MAAM,SAAS,CAAC;AA+BjB;;;GAGG;AACH,SAAS,mBAAmB,CAAC,SAAoB;IAC/C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE1C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC5D,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAClD,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACpE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAC3B,OAAmE;IAEnE,MAAM,EAAC,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAC,GAAG,OAAO,CAAC;IAC9D,MAAM,sBAAsB,GAAG,OAAO,CACpC,GAAG,EAAE,CAAC,mBAAmB,QAAQ,EAAE,EAAE,EACrC,EAAE,CACH,CAAC;IACF,MAAM,YAAY,GAAG,aAAa,IAAI,sBAAsB,CAAC;IAC7D,MAAM,iBAAiB,GAAG,kBAAkB,CAC1C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CACjD,CAAC;IACF,MAAM,YAAY,GAAG,kBAAkB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC9E,MAAM,CAAC,iBAAiB,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC;IAE1E,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,iBAAiB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC7C,YAAY,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,EAAE,CAAC,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,CAAC,CAAC,CAAC;IAEvE,MAAM,SAAS,GAAG,iBAAiB,IAAI,iBAAiB,IAAI,iBAAiB,CAAC;IAE9E,OAAO;QACL,SAAS;QACT,gBAAgB,EAAE,mBAAmB,CAAC,SAAS,CAAC;KACjD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAAC,OAG9B;IACC,MAAM,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CACpC,mBAAmB,CAAC;QAClB,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,CACH,CAAC;IAEF,OAAO;QACL,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC;QACtE,qBAAqB,EAAE,QAAQ,CAC7B,aAAa,EACb,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,qBAAqB,CACvC;QACD,IAAI,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;QACpD,UAAU,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC;QAChE,aAAa;QACb,MAAM,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;QACxD,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC;QACtE,UAAU,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC;QAChE,OAAO,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;QAC1D,SAAS,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;QAC9D,UAAU,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC;KACjE,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAAC,OAQ9B;IACC,MAAM,EACJ,UAAU,EACV,mBAAmB,EACnB,MAAM,EACN,SAAS,EACT,gBAAgB,EAChB,OAAO,EACP,SAAS,GACV,GAAG,OAAO,CAAC;IACZ,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1B,KAAK,gBAAgB,CAAC;QACtB,OAAO,SAAS,CAAC,SAAS,EAAE,CAAC;IAC/B,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE;QAC7B,KAAK,mBAAmB,CAAC;QACzB,OAAO,SAAS,CAAC,SAAS,EAAE,CAAC;IAC/B,CAAC,EAAE,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CACH,sBAAsB,CAAC;QACrB,OAAO,EAAE,UAAU;QACnB,MAAM;QACN,OAAO;QACP,SAAS;KACV,CAAC,EACJ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CACzC,CAAC;IACF,MAAM,aAAa,GAAG,OAAO,CAC3B,GAAG,EAAE,CACH,sBAAsB,CAAC;QACrB,OAAO,EAAE,UAAU;QACnB,MAAM,EAAE,SAAS;QACjB,OAAO;QACP,SAAS;KACV,CAAC,EACJ,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAC5C,CAAC;IAEF,OAAO;QACL,SAAS;QACT,SAAS,EAAE,CAAC,SAAS,EAAE,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QACpD,UAAU;QACV,MAAM;QACN,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACvE,SAAS,EAAE,sBAAsB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,QAAQ,EAAE;QACvE,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAAC,OAe9B;IACC,MAAM,EACJ,aAAa,EACb,OAAO,EACP,UAAU,EACV,UAAU,EACV,MAAM,EACN,QAAQ,EACR,UAAU,EACV,aAAa,EACb,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,OAAO,EACP,WAAW,EACX,SAAS,GACV,GAAG,OAAO,CAAC;IAEZ,SAAS,CAAC,GAAG,EAAE;QACb,aAAa,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IAE9B,SAAS,CAAC,GAAG,EAAE;QACb,aAAa,CAAC,QAAQ,EAAE,CAAC,cAAc,EAAE,CAAC;IAC5C,CAAC,EAAE,CAAC,aAAa,EAAE,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC;IAEjD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAChD,aAAa,CAAC,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YAC9C,aAAa,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YACnD,aAAa;iBACV,QAAQ,EAAE;iBACV,gBAAgB,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,KAAK,kBAAkB,CAAC;YACtB,OAAO;YACP,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,KAAK,EAAE,aAAa;YACpB,SAAS;SACV,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;IAEpD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACtE,aAAa,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,OAAO,yBAAyB,CAAC;YAC/B,UAAU;YACV,UAAU;YACV,MAAM,EAAE,SAAS;YACjB,UAAU;YACV,OAAO;YACP,KAAK,EAAE,aAAa;YACpB,SAAS;SACV,CAAC,CAAC;IACL,CAAC,EAAE;QACD,UAAU;QACV,UAAU;QACV,UAAU;QACV,aAAa;QACb,SAAS;QACT,OAAO;QACP,SAAS;KACV,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAChD,aAAa,CAAC,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,OAAO,0BAA0B,CAAC;YAChC,UAAU;YACV,YAAY,EAAE,IAAI;YAClB,SAAS;YACT,KAAK,EAAE,aAAa;YACpB,SAAS;YACT,MAAM,EAAE,UAAU;SACnB,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAEtD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAChD,aAAa,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QAED,OAAO,0BAA0B,CAAC;YAChC,UAAU;YACV,KAAK,EAAE,aAAa;YACpB,SAAS;YACT,MAAM,EAAE,OAAO;SAChB,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;IAE3C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACpD,aAAa,CAAC,QAAQ,EAAE,CAAC,cAAc,EAAE,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,OAAO,6BAA6B,CAAC;YACnC,aAAa;YACb,UAAU;YACV,MAAM;YACN,SAAS;YACT,KAAK,EAAE,aAAa;YACpB,WAAW;YACX,SAAS;SACV,CAAC,CAAC;IACL,CAAC,EAAE;QACD,aAAa;QACb,UAAU;QACV,MAAM;QACN,aAAa;QACb,SAAS;QACT,WAAW;QACX,SAAS;KACV,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CAAC,OAG3B;IACC,MAAM,EAAC,MAAM,EAAE,SAAS,EAAC,GAAG,OAAO,CAAC;IAEpC,OAAO,OAAO,CACZ,GAAG,EAAE,CACH,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrB,KAAK;QACL,IAAI,EAAE,gCAAgC,CAAC,KAAK,CAAC,IAAI,CAAC;YAChD,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnC,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,UAAU;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,KAAK,CAAC;KACjE,CAAC,CAAC,EACL,CAAC,MAAM,EAAE,SAAS,CAAC,CACpB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,OAO1B;IACC,MAAM,EAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAC,GAAG,OAAO,CAAC;IAC7E,MAAM,+BAA+B,GACnC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAErE,OAAO;QACL,SAAS,EACP,MAAM,CAAC,SAAS;YAChB,IAAI,CAAC,SAAS;YACd,aAAa,CAAC,SAAS;YACvB,UAAU,CAAC,SAAS;YACpB,+BAA+B;YAC/B,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;QAC/D,UAAU,EACR,MAAM,CAAC,KAAK;YACZ,IAAI,CAAC,KAAK;YACV,aAAa,CAAC,KAAK;YACnB,UAAU,CAAC,KAAK;YAChB,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK;KACnE,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,2BAA2B,CAAC,OAMpC;IACC,MAAM,EACJ,qBAAqB,EACrB,IAAI,EACJ,aAAa,EACb,mBAAmB,EACnB,gBAAgB,GACjB,GAAG,OAAO,CAAC;IACZ,MAAM,iBAAiB,GAAG,gBAAgB,KAAK,mBAAmB,CAAC;IACnE,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC;IACtE,MAAM,wBAAwB,GAC5B,CAAC,CAAC,qBAAqB;QACvB,qBAAqB,CAAC,SAAS,KAAK,aAAa,CAAC;IACpD,MAAM,kBAAkB,GACtB,CAAC,IAAI,CAAC,SAAS;QACf,CAAC,iBAAiB;QAClB,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC;IACpD,MAAM,eAAe,GAAG,WAAW,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IAE7D,IAAI,cAAc,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,OAAO,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC;AAC5E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAA8B;IAE9B,MAAM,EACJ,aAAa,GAAG,EAAE,EAClB,OAAO,EACP,cAAc,GAAG,EAAE,EACnB,QAAQ,GAAG,GAAG,EACd,SAAS,EAAE,iBAAiB,EAC5B,aAAa,EACb,WAAW,GAAG,EAAE,EAChB,SAAS,GACV,GAAG,OAAO,CAAC;IAEZ,MAAM,UAAU,GAAG,kBAAkB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1E,MAAM,EAAC,SAAS,EAAE,gBAAgB,EAAC,GAAG,oBAAoB,CAAC;QACzD,SAAS,EAAE,iBAAiB;QAC5B,aAAa;KACd,CAAC,CAAC;IACH,MAAM,mBAAmB,GAAG,WAAW,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAC/D,MAAM,EACJ,aAAa,EACb,qBAAqB,EACrB,IAAI,EACJ,UAAU,EACV,aAAa,EACb,MAAM,EACN,aAAa,EACb,UAAU,EACV,OAAO,EACP,SAAS,EACT,UAAU,GACX,GAAG,qBAAqB,CAAC;QACxB,cAAc;QACd,QAAQ;KACT,CAAC,CAAC;IACH,MAAM,EACJ,SAAS,EACT,SAAS,EACT,UAAU,EACV,MAAM,EACN,UAAU,EACV,SAAS,EACT,SAAS,GACV,GAAG,qBAAqB,CAAC;QACxB,UAAU;QACV,mBAAmB;QACnB,MAAM;QACN,SAAS;QACT,gBAAgB;QAChB,OAAO;QACP,SAAS;KACV,CAAC,CAAC;IACH,qBAAqB,CAAC;QACpB,aAAa;QACb,OAAO;QACP,UAAU;QACV,UAAU;QACV,MAAM;QACN,QAAQ;QACR,UAAU;QACV,aAAa;QACb,SAAS;QACT,SAAS;QACT,gBAAgB;QAChB,OAAO;QACP,WAAW;QACX,SAAS;KACV,CAAC,CAAC;IACH,MAAM,eAAe,GAAG,kBAAkB,CAAC,EAAC,MAAM,EAAE,SAAS,EAAC,CAAC,CAAC;IAChE,MAAM,EAAC,SAAS,EAAE,UAAU,EAAC,GAAG,iBAAiB,CAAC;QAChD,MAAM;QACN,aAAa;QACb,IAAI;QACJ,MAAM;QACN,SAAS;QACT,UAAU;KACX,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,2BAA2B,CAAC;QAC9C,qBAAqB;QACrB,IAAI;QACJ,aAAa,EAAE,SAAS;QACxB,mBAAmB;QACnB,gBAAgB;KACjB,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,eAAe;QACxB,gBAAgB,EAAE,aAAa,CAAC,KAAK;QACrC,UAAU;QACV,SAAS;QACT,SAAS;QACT,SAAS,EAAE,WAAW;QACtB,UAAU;QACV,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE;QAC9B,SAAS;QACT,aAAa;QACb,UAAU;QACV,OAAO;QACP,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE;QACzB,UAAU;QACV,aAAa,EAAE,UAAU,CAAC,KAAK;KAChC,CAAC;AACJ,CAAC","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"]}
@@ -0,0 +1,3 @@
1
+ import { type MosaicDashboardPanelRenderer, type TextPanel } from '../dashboard/MosaicDashboardSlice';
2
+ export declare const mosaicDashboardTextRenderer: MosaicDashboardPanelRenderer<TextPanel>;
3
+ //# sourceMappingURL=MosaicDashboardTextRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardTextRenderer.d.ts","sourceRoot":"","sources":["../../src/text/MosaicDashboardTextRenderer.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,SAAS,EAGf,MAAM,mCAAmC,CAAC;AAmF3C,eAAO,MAAM,2BAA2B,EAAE,4BAA4B,CAAC,SAAS,CAK7E,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { MarkdownDocumentEditor } from '@sqlrooms/documents';
3
+ import { Button } from '@sqlrooms/ui';
4
+ import { ALargeSmallIcon, FileTextIcon } from 'lucide-react';
5
+ import { useCallback } from 'react';
6
+ import { useStoreWithMosaicDashboard, } from '../dashboard/MosaicDashboardSlice';
7
+ const MosaicDashboardTextRenderer = ({ dashboardId, panel, }) => {
8
+ const updatePanel = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.updatePanel);
9
+ const toolbarOpen = panel.config.toolbarOpen ?? true;
10
+ const handleChange = useCallback((value) => {
11
+ updatePanel(dashboardId, panel.id, {
12
+ config: {
13
+ ...panel.config,
14
+ content: value,
15
+ },
16
+ });
17
+ }, [dashboardId, panel.id, panel.config, updatePanel]);
18
+ const handleSourcePanelOpenChange = useCallback((open) => {
19
+ updatePanel(dashboardId, panel.id, {
20
+ config: {
21
+ ...panel.config,
22
+ sourcePanelOpen: open,
23
+ },
24
+ });
25
+ }, [dashboardId, panel.id, panel.config, updatePanel]);
26
+ return (_jsx("div", { className: "flex h-full min-h-0 flex-col", children: _jsxs(MarkdownDocumentEditor, { value: panel.config.content, onChange: handleChange, sourcePanelOpen: panel.config.sourcePanelOpen, onSourcePanelOpenChange: handleSourcePanelOpenChange, children: [toolbarOpen ? _jsx(MarkdownDocumentEditor.Toolbar, {}) : null, _jsx(MarkdownDocumentEditor.Content, {})] }) }));
27
+ };
28
+ const TextPanelHeaderActions = ({ dashboardId, panel, }) => {
29
+ const updatePanel = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.updatePanel);
30
+ const toolbarOpen = panel.config.toolbarOpen ?? true;
31
+ const handleToggleToolbar = useCallback(() => {
32
+ updatePanel(dashboardId, panel.id, {
33
+ config: {
34
+ ...panel.config,
35
+ toolbarOpen: !toolbarOpen,
36
+ },
37
+ });
38
+ }, [dashboardId, panel.id, panel.config, toolbarOpen, updatePanel]);
39
+ return (_jsx(Button, { variant: toolbarOpen ? 'secondary' : 'ghost', size: "icon", className: "h-6 w-6", "aria-label": "Toggle formatting toolbar", onClick: handleToggleToolbar, children: _jsx(ALargeSmallIcon, { className: "h-3.5 w-3.5" }) }));
40
+ };
41
+ export const mosaicDashboardTextRenderer = {
42
+ component: MosaicDashboardTextRenderer,
43
+ icon: FileTextIcon,
44
+ headerActions: TextPanelHeaderActions,
45
+ };
46
+ //# sourceMappingURL=MosaicDashboardTextRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardTextRenderer.js","sourceRoot":"","sources":["../../src/text/MosaicDashboardTextRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {MarkdownDocumentEditor} from '@sqlrooms/documents';\nimport {Button} from '@sqlrooms/ui';\nimport {ALargeSmallIcon, FileTextIcon} from 'lucide-react';\nimport {type FC, useCallback} from 'react';\nimport {\n type MosaicDashboardPanelRenderer,\n type TextPanel,\n type TextPanelRendererProps,\n useStoreWithMosaicDashboard,\n} from '../dashboard/MosaicDashboardSlice';\n\nconst MosaicDashboardTextRenderer: FC<TextPanelRendererProps> = ({\n dashboardId,\n panel,\n}) => {\n const updatePanel = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.updatePanel,\n );\n\n const toolbarOpen = panel.config.toolbarOpen ?? true;\n\n const handleChange = useCallback(\n (value: string) => {\n updatePanel(dashboardId, panel.id, {\n config: {\n ...panel.config,\n content: value,\n },\n });\n },\n [dashboardId, panel.id, panel.config, updatePanel],\n );\n\n const handleSourcePanelOpenChange = useCallback(\n (open: boolean) => {\n updatePanel(dashboardId, panel.id, {\n config: {\n ...panel.config,\n sourcePanelOpen: open,\n },\n });\n },\n [dashboardId, panel.id, panel.config, updatePanel],\n );\n\n return (\n <div className=\"flex h-full min-h-0 flex-col\">\n <MarkdownDocumentEditor\n value={panel.config.content}\n onChange={handleChange}\n sourcePanelOpen={panel.config.sourcePanelOpen}\n onSourcePanelOpenChange={handleSourcePanelOpenChange}\n >\n {toolbarOpen ? <MarkdownDocumentEditor.Toolbar /> : null}\n <MarkdownDocumentEditor.Content />\n </MarkdownDocumentEditor>\n </div>\n );\n};\n\nconst TextPanelHeaderActions: FC<TextPanelRendererProps> = ({\n dashboardId,\n panel,\n}) => {\n const updatePanel = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.updatePanel,\n );\n\n const toolbarOpen = panel.config.toolbarOpen ?? true;\n\n const handleToggleToolbar = useCallback(() => {\n updatePanel(dashboardId, panel.id, {\n config: {\n ...panel.config,\n toolbarOpen: !toolbarOpen,\n },\n });\n }, [dashboardId, panel.id, panel.config, toolbarOpen, updatePanel]);\n\n return (\n <Button\n variant={toolbarOpen ? 'secondary' : 'ghost'}\n size=\"icon\"\n className=\"h-6 w-6\"\n aria-label=\"Toggle formatting toolbar\"\n onClick={handleToggleToolbar}\n >\n <ALargeSmallIcon className=\"h-3.5 w-3.5\" />\n </Button>\n );\n};\n\nexport const mosaicDashboardTextRenderer: MosaicDashboardPanelRenderer<TextPanel> =\n {\n component: MosaicDashboardTextRenderer,\n icon: FileTextIcon,\n headerActions: TextPanelHeaderActions,\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,62 +1,71 @@
1
1
  {
2
2
  "name": "@sqlrooms/mosaic",
3
- "version": "0.29.0-rc.2",
4
- "main": "dist/index.js",
5
- "types": "dist/index.d.ts",
6
- "module": "dist/index.js",
7
- "type": "module",
8
- "sideEffects": false,
9
- "engines": {
10
- "node": ">=22"
11
- },
12
- "author": "SQLRooms Contributors",
13
- "license": "MIT",
3
+ "version": "0.29.0-rc.4",
14
4
  "repository": {
15
5
  "type": "git",
16
6
  "url": "git+https://github.com/sqlrooms/sqlrooms.git"
17
7
  },
8
+ "license": "MIT",
9
+ "author": "SQLRooms Contributors",
10
+ "sideEffects": false,
11
+ "type": "module",
12
+ "main": "dist/index.js",
13
+ "module": "dist/index.js",
14
+ "types": "dist/index.d.ts",
18
15
  "files": [
19
16
  "dist"
20
17
  ],
21
- "publishConfig": {
22
- "access": "public"
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "dev": "tsc -w",
21
+ "lint": "eslint .",
22
+ "test": "NODE_OPTIONS='--experimental-vm-modules --no-warnings' jest",
23
+ "typecheck": "tsc --noEmit",
24
+ "typedoc": "typedoc"
23
25
  },
24
26
  "dependencies": {
27
+ "@observablehq/plot": "^0.6.17",
25
28
  "@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",
29
+ "@sqlrooms/codemirror": "0.29.0-rc.4",
30
+ "@sqlrooms/color-scales": "0.29.0-rc.4",
31
+ "@sqlrooms/data-table": "0.29.0-rc.4",
32
+ "@sqlrooms/db": "0.29.0-rc.4",
33
+ "@sqlrooms/documents": "0.29.0-rc.4",
34
+ "@sqlrooms/duckdb": "0.29.0-rc.4",
35
+ "@sqlrooms/layout": "0.29.0-rc.4",
36
+ "@sqlrooms/layout-config": "0.29.0-rc.4",
37
+ "@sqlrooms/room-store": "0.29.0-rc.4",
38
+ "@sqlrooms/ui": "0.29.0-rc.4",
39
+ "@sqlrooms/utils": "0.29.0-rc.4",
33
40
  "@uwdata/flechette": "^2.2.6",
34
41
  "@uwdata/mosaic-core": "^0.21.0",
35
42
  "@uwdata/mosaic-plot": "^0.21.0",
36
43
  "@uwdata/mosaic-spec": "^0.21.0",
37
44
  "@uwdata/mosaic-sql": "^0.21.0",
38
45
  "@uwdata/vgplot": "^0.21.0",
46
+ "ai": "^6.0.159",
39
47
  "apache-arrow": "17.0.0",
40
48
  "immer": "^11.0.1",
41
49
  "lucide-react": "^0.556.0",
42
50
  "zod": "^4.1.8",
43
51
  "zustand": "^5.0.8"
44
52
  },
53
+ "devDependencies": {
54
+ "@jest/globals": "^30.3.0",
55
+ "@testing-library/jest-dom": "^6.9.1",
56
+ "@testing-library/react": "^16.3.2",
57
+ "jsdom": "^29.1.1",
58
+ "ts-jest": "^29.4.4"
59
+ },
45
60
  "peerDependencies": {
46
61
  "react": ">=18",
47
62
  "react-dom": ">=18"
48
63
  },
49
- "devDependencies": {
50
- "@jest/globals": "^30.3.0",
51
- "ts-jest": "^29.4.4"
64
+ "engines": {
65
+ "node": ">=22"
52
66
  },
53
- "scripts": {
54
- "dev": "tsc -w",
55
- "build": "tsc",
56
- "test": "NODE_OPTIONS='--experimental-vm-modules --no-warnings' jest",
57
- "lint": "eslint .",
58
- "typecheck": "tsc --noEmit",
59
- "typedoc": "typedoc"
67
+ "publishConfig": {
68
+ "access": "public"
60
69
  },
61
- "gitHead": "5d511631992c1af8852ea79ced488867aad4a555"
70
+ "gitHead": "8694bab9d3d915a06d28675ad801b21444bcc55f"
62
71
  }
@@ -1,7 +0,0 @@
1
- import { ChartBuilderTemplate } from './types';
2
- /**
3
- * Creates the default set of chart builders.
4
- * Call this to get a fresh array that you can extend or filter.
5
- */
6
- export declare function createDefaultChartBuilders(): ChartBuilderTemplate[];
7
- //# sourceMappingURL=builders.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../../src/chart-builders/builders.ts"],"names":[],"mappings":"AAWA,OAAO,EAAC,oBAAoB,EAAC,MAAM,SAAS,CAAC;AAyR7C;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,oBAAoB,EAAE,CAWnE"}