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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. package/README.md +161 -2
  2. package/dist/MosaicChart.d.ts +20 -0
  3. package/dist/MosaicChart.d.ts.map +1 -0
  4. package/dist/MosaicChart.js +25 -0
  5. package/dist/MosaicChart.js.map +1 -0
  6. package/dist/MosaicChartBuilder.d.ts +67 -0
  7. package/dist/MosaicChartBuilder.d.ts.map +1 -0
  8. package/dist/MosaicChartBuilder.js +33 -0
  9. package/dist/MosaicChartBuilder.js.map +1 -0
  10. package/dist/MosaicColorLegend.d.ts +18 -0
  11. package/dist/MosaicColorLegend.d.ts.map +1 -0
  12. package/dist/MosaicColorLegend.js +117 -0
  13. package/dist/MosaicColorLegend.js.map +1 -0
  14. package/dist/MosaicSlice.d.ts +27 -13
  15. package/dist/MosaicSlice.d.ts.map +1 -1
  16. package/dist/MosaicSlice.js +140 -42
  17. package/dist/MosaicSlice.js.map +1 -1
  18. package/dist/ResponsivePlot.d.ts +23 -0
  19. package/dist/ResponsivePlot.d.ts.map +1 -0
  20. package/dist/ResponsivePlot.js +43 -0
  21. package/dist/ResponsivePlot.js.map +1 -0
  22. package/dist/VgPlotChart.d.ts +24 -0
  23. package/dist/VgPlotChart.d.ts.map +1 -1
  24. package/dist/VgPlotChart.js +127 -21
  25. package/dist/VgPlotChart.js.map +1 -1
  26. package/dist/chart-builders/ChartBuilderActions.d.ts +6 -0
  27. package/dist/chart-builders/ChartBuilderActions.d.ts.map +1 -0
  28. package/dist/chart-builders/ChartBuilderActions.js +28 -0
  29. package/dist/chart-builders/ChartBuilderActions.js.map +1 -0
  30. package/dist/chart-builders/ChartBuilderContent.d.ts +28 -0
  31. package/dist/chart-builders/ChartBuilderContent.d.ts.map +1 -0
  32. package/dist/chart-builders/ChartBuilderContent.js +28 -0
  33. package/dist/chart-builders/ChartBuilderContent.js.map +1 -0
  34. package/dist/chart-builders/ChartBuilderContext.d.ts +16 -0
  35. package/dist/chart-builders/ChartBuilderContext.d.ts.map +1 -0
  36. package/dist/chart-builders/ChartBuilderContext.js +15 -0
  37. package/dist/chart-builders/ChartBuilderContext.js.map +1 -0
  38. package/dist/chart-builders/ChartBuilderDialog.d.ts +48 -0
  39. package/dist/chart-builders/ChartBuilderDialog.d.ts.map +1 -0
  40. package/dist/chart-builders/ChartBuilderDialog.js +30 -0
  41. package/dist/chart-builders/ChartBuilderDialog.js.map +1 -0
  42. package/dist/chart-builders/ChartBuilderFields.d.ts +6 -0
  43. package/dist/chart-builders/ChartBuilderFields.d.ts.map +1 -0
  44. package/dist/chart-builders/ChartBuilderFields.js +25 -0
  45. package/dist/chart-builders/ChartBuilderFields.js.map +1 -0
  46. package/dist/chart-builders/ChartBuilderRoot.d.ts +27 -0
  47. package/dist/chart-builders/ChartBuilderRoot.d.ts.map +1 -0
  48. package/dist/chart-builders/ChartBuilderRoot.js +61 -0
  49. package/dist/chart-builders/ChartBuilderRoot.js.map +1 -0
  50. package/dist/chart-builders/ChartBuilderTypeGrid.d.ts +7 -0
  51. package/dist/chart-builders/ChartBuilderTypeGrid.d.ts.map +1 -0
  52. package/dist/chart-builders/ChartBuilderTypeGrid.js +23 -0
  53. package/dist/chart-builders/ChartBuilderTypeGrid.js.map +1 -0
  54. package/dist/chart-builders/FieldSelectorInput.d.ts +13 -0
  55. package/dist/chart-builders/FieldSelectorInput.d.ts.map +1 -0
  56. package/dist/chart-builders/FieldSelectorInput.js +19 -0
  57. package/dist/chart-builders/FieldSelectorInput.js.map +1 -0
  58. package/dist/chart-builders/builders.d.ts +34 -0
  59. package/dist/chart-builders/builders.d.ts.map +1 -0
  60. package/dist/chart-builders/builders.js +51 -0
  61. package/dist/chart-builders/builders.js.map +1 -0
  62. package/dist/chart-builders/chartSpecTitle.d.ts +6 -0
  63. package/dist/chart-builders/chartSpecTitle.d.ts.map +1 -0
  64. package/dist/chart-builders/chartSpecTitle.js +8 -0
  65. package/dist/chart-builders/chartSpecTitle.js.map +1 -0
  66. package/dist/chart-builders/chartTypeUtils.d.ts +17 -0
  67. package/dist/chart-builders/chartTypeUtils.d.ts.map +1 -0
  68. package/dist/chart-builders/chartTypeUtils.js +55 -0
  69. package/dist/chart-builders/chartTypeUtils.js.map +1 -0
  70. package/dist/chart-builders/constants.d.ts +7 -0
  71. package/dist/chart-builders/constants.d.ts.map +1 -0
  72. package/dist/chart-builders/constants.js +34 -0
  73. package/dist/chart-builders/constants.js.map +1 -0
  74. package/dist/chart-builders/createChartBuilderStore.d.ts +11 -0
  75. package/dist/chart-builders/createChartBuilderStore.d.ts.map +1 -0
  76. package/dist/chart-builders/createChartBuilderStore.js +26 -0
  77. package/dist/chart-builders/createChartBuilderStore.js.map +1 -0
  78. package/dist/chart-builders/describeChartSpecs.d.ts +9 -0
  79. package/dist/chart-builders/describeChartSpecs.d.ts.map +1 -0
  80. package/dist/chart-builders/describeChartSpecs.js +41 -0
  81. package/dist/chart-builders/describeChartSpecs.js.map +1 -0
  82. package/dist/chart-builders/hooks/useChartFieldForm.d.ts +13 -0
  83. package/dist/chart-builders/hooks/useChartFieldForm.d.ts.map +1 -0
  84. package/dist/chart-builders/hooks/useChartFieldForm.js +12 -0
  85. package/dist/chart-builders/hooks/useChartFieldForm.js.map +1 -0
  86. package/dist/chart-builders/types.d.ts +23 -0
  87. package/dist/chart-builders/types.d.ts.map +1 -0
  88. package/dist/chart-builders/types.js +17 -0
  89. package/dist/chart-builders/types.js.map +1 -0
  90. package/dist/chart-types/base-types.d.ts +54 -0
  91. package/dist/chart-types/base-types.d.ts.map +1 -0
  92. package/dist/chart-types/base-types.js +6 -0
  93. package/dist/chart-types/base-types.js.map +1 -0
  94. package/dist/chart-types/box-plot/definition.d.ts +4 -0
  95. package/dist/chart-types/box-plot/definition.d.ts.map +1 -0
  96. package/dist/chart-types/box-plot/definition.js +45 -0
  97. package/dist/chart-types/box-plot/definition.js.map +1 -0
  98. package/dist/chart-types/box-plot/index.d.ts +3 -0
  99. package/dist/chart-types/box-plot/index.d.ts.map +1 -0
  100. package/dist/chart-types/box-plot/index.js +3 -0
  101. package/dist/chart-types/box-plot/index.js.map +1 -0
  102. package/dist/chart-types/box-plot/schema.d.ts +17 -0
  103. package/dist/chart-types/box-plot/schema.d.ts.map +1 -0
  104. package/dist/chart-types/box-plot/schema.js +12 -0
  105. package/dist/chart-types/box-plot/schema.js.map +1 -0
  106. package/dist/chart-types/bubble-chart/definition.d.ts +4 -0
  107. package/dist/chart-types/bubble-chart/definition.d.ts.map +1 -0
  108. package/dist/chart-types/bubble-chart/definition.js +48 -0
  109. package/dist/chart-types/bubble-chart/definition.js.map +1 -0
  110. package/dist/chart-types/bubble-chart/index.d.ts +3 -0
  111. package/dist/chart-types/bubble-chart/index.d.ts.map +1 -0
  112. package/dist/chart-types/bubble-chart/index.js +3 -0
  113. package/dist/chart-types/bubble-chart/index.js.map +1 -0
  114. package/dist/chart-types/bubble-chart/schema.d.ts +17 -0
  115. package/dist/chart-types/bubble-chart/schema.d.ts.map +1 -0
  116. package/dist/chart-types/bubble-chart/schema.js +12 -0
  117. package/dist/chart-types/bubble-chart/schema.js.map +1 -0
  118. package/dist/chart-types/count-plot/definition.d.ts +4 -0
  119. package/dist/chart-types/count-plot/definition.d.ts.map +1 -0
  120. package/dist/chart-types/count-plot/definition.js +50 -0
  121. package/dist/chart-types/count-plot/definition.js.map +1 -0
  122. package/dist/chart-types/count-plot/index.d.ts +3 -0
  123. package/dist/chart-types/count-plot/index.d.ts.map +1 -0
  124. package/dist/chart-types/count-plot/index.js +3 -0
  125. package/dist/chart-types/count-plot/index.js.map +1 -0
  126. package/dist/chart-types/count-plot/schema.d.ts +15 -0
  127. package/dist/chart-types/count-plot/schema.d.ts.map +1 -0
  128. package/dist/chart-types/count-plot/schema.js +11 -0
  129. package/dist/chart-types/count-plot/schema.js.map +1 -0
  130. package/dist/chart-types/custom-spec/definition.d.ts +4 -0
  131. package/dist/chart-types/custom-spec/definition.d.ts.map +1 -0
  132. package/dist/chart-types/custom-spec/definition.js +28 -0
  133. package/dist/chart-types/custom-spec/definition.js.map +1 -0
  134. package/dist/chart-types/custom-spec/index.d.ts +3 -0
  135. package/dist/chart-types/custom-spec/index.d.ts.map +1 -0
  136. package/dist/chart-types/custom-spec/index.js +3 -0
  137. package/dist/chart-types/custom-spec/index.js.map +1 -0
  138. package/dist/chart-types/custom-spec/schema.d.ts +11 -0
  139. package/dist/chart-types/custom-spec/schema.d.ts.map +1 -0
  140. package/dist/chart-types/custom-spec/schema.js +9 -0
  141. package/dist/chart-types/custom-spec/schema.js.map +1 -0
  142. package/dist/chart-types/ecdf/definition.d.ts +4 -0
  143. package/dist/chart-types/ecdf/definition.d.ts.map +1 -0
  144. package/dist/chart-types/ecdf/definition.js +47 -0
  145. package/dist/chart-types/ecdf/definition.js.map +1 -0
  146. package/dist/chart-types/ecdf/index.d.ts +3 -0
  147. package/dist/chart-types/ecdf/index.d.ts.map +1 -0
  148. package/dist/chart-types/ecdf/index.js +3 -0
  149. package/dist/chart-types/ecdf/index.js.map +1 -0
  150. package/dist/chart-types/ecdf/schema.d.ts +15 -0
  151. package/dist/chart-types/ecdf/schema.d.ts.map +1 -0
  152. package/dist/chart-types/ecdf/schema.js +11 -0
  153. package/dist/chart-types/ecdf/schema.js.map +1 -0
  154. package/dist/chart-types/heatmap/definition.d.ts +4 -0
  155. package/dist/chart-types/heatmap/definition.d.ts.map +1 -0
  156. package/dist/chart-types/heatmap/definition.js +49 -0
  157. package/dist/chart-types/heatmap/definition.js.map +1 -0
  158. package/dist/chart-types/heatmap/index.d.ts +3 -0
  159. package/dist/chart-types/heatmap/index.d.ts.map +1 -0
  160. package/dist/chart-types/heatmap/index.js +3 -0
  161. package/dist/chart-types/heatmap/index.js.map +1 -0
  162. package/dist/chart-types/heatmap/schema.d.ts +17 -0
  163. package/dist/chart-types/heatmap/schema.d.ts.map +1 -0
  164. package/dist/chart-types/heatmap/schema.js +12 -0
  165. package/dist/chart-types/heatmap/schema.js.map +1 -0
  166. package/dist/chart-types/histogram/definition.d.ts +4 -0
  167. package/dist/chart-types/histogram/definition.d.ts.map +1 -0
  168. package/dist/chart-types/histogram/definition.js +49 -0
  169. package/dist/chart-types/histogram/definition.js.map +1 -0
  170. package/dist/chart-types/histogram/index.d.ts +3 -0
  171. package/dist/chart-types/histogram/index.d.ts.map +1 -0
  172. package/dist/chart-types/histogram/index.js +3 -0
  173. package/dist/chart-types/histogram/index.js.map +1 -0
  174. package/dist/chart-types/histogram/schema.d.ts +15 -0
  175. package/dist/chart-types/histogram/schema.d.ts.map +1 -0
  176. package/dist/chart-types/histogram/schema.js +11 -0
  177. package/dist/chart-types/histogram/schema.js.map +1 -0
  178. package/dist/chart-types/index.d.ts +109 -0
  179. package/dist/chart-types/index.d.ts.map +1 -0
  180. package/dist/chart-types/index.js +70 -0
  181. package/dist/chart-types/index.js.map +1 -0
  182. package/dist/chart-types/line-chart/definition.d.ts +4 -0
  183. package/dist/chart-types/line-chart/definition.d.ts.map +1 -0
  184. package/dist/chart-types/line-chart/definition.js +46 -0
  185. package/dist/chart-types/line-chart/definition.js.map +1 -0
  186. package/dist/chart-types/line-chart/index.d.ts +3 -0
  187. package/dist/chart-types/line-chart/index.d.ts.map +1 -0
  188. package/dist/chart-types/line-chart/index.js +3 -0
  189. package/dist/chart-types/line-chart/index.js.map +1 -0
  190. package/dist/chart-types/line-chart/schema.d.ts +17 -0
  191. package/dist/chart-types/line-chart/schema.d.ts.map +1 -0
  192. package/dist/chart-types/line-chart/schema.js +12 -0
  193. package/dist/chart-types/line-chart/schema.js.map +1 -0
  194. package/dist/chart-types/registry.d.ts +5 -0
  195. package/dist/chart-types/registry.d.ts.map +1 -0
  196. package/dist/chart-types/registry.js +28 -0
  197. package/dist/chart-types/registry.js.map +1 -0
  198. package/dist/dashboard/DashboardPanelErrorBoundary.d.ts +17 -0
  199. package/dist/dashboard/DashboardPanelErrorBoundary.d.ts.map +1 -0
  200. package/dist/dashboard/DashboardPanelErrorBoundary.js +21 -0
  201. package/dist/dashboard/DashboardPanelErrorBoundary.js.map +1 -0
  202. package/dist/dashboard/MosaicDashboard.d.ts +18 -0
  203. package/dist/dashboard/MosaicDashboard.d.ts.map +1 -0
  204. package/dist/dashboard/MosaicDashboard.js +91 -0
  205. package/dist/dashboard/MosaicDashboard.js.map +1 -0
  206. package/dist/dashboard/MosaicDashboardContext.d.ts +12 -0
  207. package/dist/dashboard/MosaicDashboardContext.d.ts.map +1 -0
  208. package/dist/dashboard/MosaicDashboardContext.js +10 -0
  209. package/dist/dashboard/MosaicDashboardContext.js.map +1 -0
  210. package/dist/dashboard/MosaicDashboardPanel.d.ts +3 -0
  211. package/dist/dashboard/MosaicDashboardPanel.d.ts.map +1 -0
  212. package/dist/dashboard/MosaicDashboardPanel.js +26 -0
  213. package/dist/dashboard/MosaicDashboardPanel.js.map +1 -0
  214. package/dist/dashboard/MosaicDashboardPanelDragOverlay.d.ts +8 -0
  215. package/dist/dashboard/MosaicDashboardPanelDragOverlay.d.ts.map +1 -0
  216. package/dist/dashboard/MosaicDashboardPanelDragOverlay.js +17 -0
  217. package/dist/dashboard/MosaicDashboardPanelDragOverlay.js.map +1 -0
  218. package/dist/dashboard/MosaicDashboardPanelHeader.d.ts +13 -0
  219. package/dist/dashboard/MosaicDashboardPanelHeader.d.ts.map +1 -0
  220. package/dist/dashboard/MosaicDashboardPanelHeader.js +30 -0
  221. package/dist/dashboard/MosaicDashboardPanelHeader.js.map +1 -0
  222. package/dist/dashboard/MosaicDashboardPanelLayout.d.ts +10 -0
  223. package/dist/dashboard/MosaicDashboardPanelLayout.d.ts.map +1 -0
  224. package/dist/dashboard/MosaicDashboardPanelLayout.js +25 -0
  225. package/dist/dashboard/MosaicDashboardPanelLayout.js.map +1 -0
  226. package/dist/dashboard/MosaicDashboardPanels.d.ts +2 -0
  227. package/dist/dashboard/MosaicDashboardPanels.d.ts.map +1 -0
  228. package/dist/dashboard/MosaicDashboardPanels.js +52 -0
  229. package/dist/dashboard/MosaicDashboardPanels.js.map +1 -0
  230. package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.d.ts +3 -0
  231. package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.d.ts.map +1 -0
  232. package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.js +32 -0
  233. package/dist/dashboard/MosaicDashboardProfilerPanelRenderer.js.map +1 -0
  234. package/dist/dashboard/MosaicDashboardSlice.d.ts +523 -0
  235. package/dist/dashboard/MosaicDashboardSlice.d.ts.map +1 -0
  236. package/dist/dashboard/MosaicDashboardSlice.js +615 -0
  237. package/dist/dashboard/MosaicDashboardSlice.js.map +1 -0
  238. package/dist/dashboard/MosaicDashboardToolbar.d.ts +3 -0
  239. package/dist/dashboard/MosaicDashboardToolbar.d.ts.map +1 -0
  240. package/dist/dashboard/MosaicDashboardToolbar.js +81 -0
  241. package/dist/dashboard/MosaicDashboardToolbar.js.map +1 -0
  242. package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.d.ts +4 -0
  243. package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.d.ts.map +1 -0
  244. package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.js +29 -0
  245. package/dist/dashboard/MosaicDashboardVgPlotHeaderActions.js.map +1 -0
  246. package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.d.ts +3 -0
  247. package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.d.ts.map +1 -0
  248. package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.js +68 -0
  249. package/dist/dashboard/MosaicDashboardVgPlotPanelRenderer.js.map +1 -0
  250. package/dist/dashboard/VgPlotSpecPopoverEditor.d.ts +8 -0
  251. package/dist/dashboard/VgPlotSpecPopoverEditor.d.ts.map +1 -0
  252. package/dist/dashboard/VgPlotSpecPopoverEditor.js +40 -0
  253. package/dist/dashboard/VgPlotSpecPopoverEditor.js.map +1 -0
  254. package/dist/dashboard/chart-settings/ChartSettings.d.ts +39 -0
  255. package/dist/dashboard/chart-settings/ChartSettings.d.ts.map +1 -0
  256. package/dist/dashboard/chart-settings/ChartSettings.js +90 -0
  257. package/dist/dashboard/chart-settings/ChartSettings.js.map +1 -0
  258. package/dist/dashboard/chart-settings/ChartSettingsContext.d.ts +20 -0
  259. package/dist/dashboard/chart-settings/ChartSettingsContext.d.ts.map +1 -0
  260. package/dist/dashboard/chart-settings/ChartSettingsContext.js +14 -0
  261. package/dist/dashboard/chart-settings/ChartSettingsContext.js.map +1 -0
  262. package/dist/dashboard/chart-settings/ChartSettingsPanel.d.ts +11 -0
  263. package/dist/dashboard/chart-settings/ChartSettingsPanel.d.ts.map +1 -0
  264. package/dist/dashboard/chart-settings/ChartSettingsPanel.js +8 -0
  265. package/dist/dashboard/chart-settings/ChartSettingsPanel.js.map +1 -0
  266. package/dist/dashboard/chart-settings/ChartTypeSelector.d.ts +11 -0
  267. package/dist/dashboard/chart-settings/ChartTypeSelector.d.ts.map +1 -0
  268. package/dist/dashboard/chart-settings/ChartTypeSelector.js +17 -0
  269. package/dist/dashboard/chart-settings/ChartTypeSelector.js.map +1 -0
  270. package/dist/dashboard/chart-settings/DynamicChartSettings.d.ts +11 -0
  271. package/dist/dashboard/chart-settings/DynamicChartSettings.d.ts.map +1 -0
  272. package/dist/dashboard/chart-settings/DynamicChartSettings.js +19 -0
  273. package/dist/dashboard/chart-settings/DynamicChartSettings.js.map +1 -0
  274. package/dist/dashboard/chart-settings/index.d.ts +6 -0
  275. package/dist/dashboard/chart-settings/index.d.ts.map +1 -0
  276. package/dist/dashboard/chart-settings/index.js +6 -0
  277. package/dist/dashboard/chart-settings/index.js.map +1 -0
  278. package/dist/dashboard/chart-settings/useTableColumns.d.ts +3 -0
  279. package/dist/dashboard/chart-settings/useTableColumns.d.ts.map +1 -0
  280. package/dist/dashboard/chart-settings/useTableColumns.js +12 -0
  281. package/dist/dashboard/chart-settings/useTableColumns.js.map +1 -0
  282. package/dist/dashboard/defaultPanelRenderers.d.ts +3 -0
  283. package/dist/dashboard/defaultPanelRenderers.d.ts.map +1 -0
  284. package/dist/dashboard/defaultPanelRenderers.js +11 -0
  285. package/dist/dashboard/defaultPanelRenderers.js.map +1 -0
  286. package/dist/dashboard/generateMosaicChartSpec.d.ts +15 -0
  287. package/dist/dashboard/generateMosaicChartSpec.d.ts.map +1 -0
  288. package/dist/dashboard/generateMosaicChartSpec.js +30 -0
  289. package/dist/dashboard/generateMosaicChartSpec.js.map +1 -0
  290. package/dist/editor/MosaicChartContainer.d.ts +51 -0
  291. package/dist/editor/MosaicChartContainer.d.ts.map +1 -0
  292. package/dist/editor/MosaicChartContainer.js +39 -0
  293. package/dist/editor/MosaicChartContainer.js.map +1 -0
  294. package/dist/editor/MosaicChartDisplay.d.ts +18 -0
  295. package/dist/editor/MosaicChartDisplay.d.ts.map +1 -0
  296. package/dist/editor/MosaicChartDisplay.js +26 -0
  297. package/dist/editor/MosaicChartDisplay.js.map +1 -0
  298. package/dist/editor/MosaicChartEditorActions.d.ts +20 -0
  299. package/dist/editor/MosaicChartEditorActions.d.ts.map +1 -0
  300. package/dist/editor/MosaicChartEditorActions.js +18 -0
  301. package/dist/editor/MosaicChartEditorActions.js.map +1 -0
  302. package/dist/editor/MosaicCodeMirrorEditor.d.ts +15 -0
  303. package/dist/editor/MosaicCodeMirrorEditor.d.ts.map +1 -0
  304. package/dist/editor/MosaicCodeMirrorEditor.js +26 -0
  305. package/dist/editor/MosaicCodeMirrorEditor.js.map +1 -0
  306. package/dist/editor/MosaicEditorContext.d.ts +8 -0
  307. package/dist/editor/MosaicEditorContext.d.ts.map +1 -0
  308. package/dist/editor/MosaicEditorContext.js +14 -0
  309. package/dist/editor/MosaicEditorContext.js.map +1 -0
  310. package/dist/editor/MosaicSpecEditorPanel.d.ts +20 -0
  311. package/dist/editor/MosaicSpecEditorPanel.d.ts.map +1 -0
  312. package/dist/editor/MosaicSpecEditorPanel.js +25 -0
  313. package/dist/editor/MosaicSpecEditorPanel.js.map +1 -0
  314. package/dist/editor/mosaicSchema.d.ts +20 -0
  315. package/dist/editor/mosaicSchema.d.ts.map +1 -0
  316. package/dist/editor/mosaicSchema.js +57 -0
  317. package/dist/editor/mosaicSchema.js.map +1 -0
  318. package/dist/editor/types.d.ts +72 -0
  319. package/dist/editor/types.d.ts.map +1 -0
  320. package/dist/editor/types.js +2 -0
  321. package/dist/editor/types.js.map +1 -0
  322. package/dist/editor/useMosaicChartEditor.d.ts +9 -0
  323. package/dist/editor/useMosaicChartEditor.d.ts.map +1 -0
  324. package/dist/editor/useMosaicChartEditor.js +199 -0
  325. package/dist/editor/useMosaicChartEditor.js.map +1 -0
  326. package/dist/index.d.ts +53 -2
  327. package/dist/index.d.ts.map +1 -1
  328. package/dist/index.js +37 -1
  329. package/dist/index.js.map +1 -1
  330. package/dist/profiler/MosaicProfiler.d.ts +32 -0
  331. package/dist/profiler/MosaicProfiler.d.ts.map +1 -0
  332. package/dist/profiler/MosaicProfiler.js +57 -0
  333. package/dist/profiler/MosaicProfiler.js.map +1 -0
  334. package/dist/profiler/MosaicProfilerHeader.d.ts +7 -0
  335. package/dist/profiler/MosaicProfilerHeader.d.ts.map +1 -0
  336. package/dist/profiler/MosaicProfilerHeader.js +196 -0
  337. package/dist/profiler/MosaicProfilerHeader.js.map +1 -0
  338. package/dist/profiler/MosaicProfilerRows.d.ts +9 -0
  339. package/dist/profiler/MosaicProfilerRows.d.ts.map +1 -0
  340. package/dist/profiler/MosaicProfilerRows.js +65 -0
  341. package/dist/profiler/MosaicProfilerRows.js.map +1 -0
  342. package/dist/profiler/MosaicProfilerStatusBar.d.ts +9 -0
  343. package/dist/profiler/MosaicProfilerStatusBar.d.ts.map +1 -0
  344. package/dist/profiler/MosaicProfilerStatusBar.js +28 -0
  345. package/dist/profiler/MosaicProfilerStatusBar.js.map +1 -0
  346. package/dist/profiler/ProfilerCategoryClient.d.ts +50 -0
  347. package/dist/profiler/ProfilerCategoryClient.d.ts.map +1 -0
  348. package/dist/profiler/ProfilerCategoryClient.js +121 -0
  349. package/dist/profiler/ProfilerCategoryClient.js.map +1 -0
  350. package/dist/profiler/ProfilerCountClient.d.ts +28 -0
  351. package/dist/profiler/ProfilerCountClient.d.ts.map +1 -0
  352. package/dist/profiler/ProfilerCountClient.js +51 -0
  353. package/dist/profiler/ProfilerCountClient.js.map +1 -0
  354. package/dist/profiler/ProfilerHistogramClient.d.ts +69 -0
  355. package/dist/profiler/ProfilerHistogramClient.d.ts.map +1 -0
  356. package/dist/profiler/ProfilerHistogramClient.js +179 -0
  357. package/dist/profiler/ProfilerHistogramClient.js.map +1 -0
  358. package/dist/profiler/ProfilerPageClient.d.ts +37 -0
  359. package/dist/profiler/ProfilerPageClient.d.ts.map +1 -0
  360. package/dist/profiler/ProfilerPageClient.js +65 -0
  361. package/dist/profiler/ProfilerPageClient.js.map +1 -0
  362. package/dist/profiler/ProfilerUnsupportedSummaryClient.d.ts +24 -0
  363. package/dist/profiler/ProfilerUnsupportedSummaryClient.d.ts.map +1 -0
  364. package/dist/profiler/ProfilerUnsupportedSummaryClient.js +51 -0
  365. package/dist/profiler/ProfilerUnsupportedSummaryClient.js.map +1 -0
  366. package/dist/profiler/createProfilerStore.d.ts +45 -0
  367. package/dist/profiler/createProfilerStore.d.ts.map +1 -0
  368. package/dist/profiler/createProfilerStore.js +120 -0
  369. package/dist/profiler/createProfilerStore.js.map +1 -0
  370. package/dist/profiler/layout.d.ts +7 -0
  371. package/dist/profiler/layout.d.ts.map +1 -0
  372. package/dist/profiler/layout.js +13 -0
  373. package/dist/profiler/layout.js.map +1 -0
  374. package/dist/profiler/profilerController.d.ts +64 -0
  375. package/dist/profiler/profilerController.d.ts.map +1 -0
  376. package/dist/profiler/profilerController.js +123 -0
  377. package/dist/profiler/profilerController.js.map +1 -0
  378. package/dist/profiler/types.d.ts +86 -0
  379. package/dist/profiler/types.d.ts.map +1 -0
  380. package/dist/profiler/types.js +2 -0
  381. package/dist/profiler/types.js.map +1 -0
  382. package/dist/profiler/useMosaicProfiler.d.ts +7 -0
  383. package/dist/profiler/useMosaicProfiler.d.ts.map +1 -0
  384. package/dist/profiler/useMosaicProfiler.js +339 -0
  385. package/dist/profiler/useMosaicProfiler.js.map +1 -0
  386. package/dist/profiler/utils.d.ts +61 -0
  387. package/dist/profiler/utils.d.ts.map +1 -0
  388. package/dist/profiler/utils.js +347 -0
  389. package/dist/profiler/utils.js.map +1 -0
  390. package/dist/tableInterop.d.ts +30 -0
  391. package/dist/tableInterop.d.ts.map +1 -0
  392. package/dist/tableInterop.js +85 -0
  393. package/dist/tableInterop.js.map +1 -0
  394. package/dist/useMosaicClient.d.ts +5 -15
  395. package/dist/useMosaicClient.d.ts.map +1 -1
  396. package/dist/useMosaicClient.js +22 -6
  397. package/dist/useMosaicClient.js.map +1 -1
  398. package/package.json +30 -6
@@ -0,0 +1,64 @@
1
+ import type { MosaicClient, Selection } from '@uwdata/mosaic-core';
2
+ import { queryFieldInfo } from '@uwdata/mosaic-core';
3
+ import type * as arrow from 'apache-arrow';
4
+ import type { MosaicProfilerSorting } from './types';
5
+ import type { ProfilerStore } from './createProfilerStore';
6
+ /**
7
+ * Loads field metadata for the profiler table and writes the normalized field
8
+ * definitions into the profiler store.
9
+ */
10
+ export declare function loadProfilerSchema(options: {
11
+ columns?: string[];
12
+ coordinator: Parameters<typeof queryFieldInfo>[0];
13
+ store: ProfilerStore;
14
+ tableName: string;
15
+ }): Promise<void>;
16
+ type ReadyConnection = {
17
+ coordinator: {
18
+ connect: (client: MosaicClient) => void;
19
+ disconnect: (client: MosaicClient) => void;
20
+ };
21
+ };
22
+ /**
23
+ * Connects the paged row client for the current profiler page and disconnects
24
+ * it when the caller tears down the lifecycle.
25
+ */
26
+ export declare function connectProfilerPageClient(options: {
27
+ connection: ReadyConnection;
28
+ fieldNames: string[];
29
+ filter?: ReturnType<Selection['predicate']>;
30
+ pagination: {
31
+ pageIndex: number;
32
+ pageSize: number;
33
+ };
34
+ sorting: MosaicProfilerSorting;
35
+ store: ProfilerStore;
36
+ tableName: string;
37
+ }): () => void;
38
+ /**
39
+ * Connects either the filtered or total count client and routes updates into
40
+ * the corresponding store slice.
41
+ */
42
+ export declare function connectProfilerCountClient(options: {
43
+ connection: ReadyConnection;
44
+ filterStable?: boolean;
45
+ selection?: Selection;
46
+ store: ProfilerStore;
47
+ tableName: string;
48
+ target: 'filtered' | 'total';
49
+ }): () => void;
50
+ /**
51
+ * Connects all per-column summary clients for the active schema and initializes
52
+ * matching empty summary state in the profiler store.
53
+ */
54
+ export declare function connectProfilerSummaryClients(options: {
55
+ categoryLimit: number;
56
+ connection: ReadyConnection;
57
+ fields: arrow.Field[];
58
+ selection: Selection;
59
+ store: ProfilerStore;
60
+ summaryBins: number;
61
+ tableName: string;
62
+ }): () => void;
63
+ export {};
64
+ //# sourceMappingURL=profilerController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profilerController.d.ts","sourceRoot":"","sources":["../../src/profiler/profilerController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAE,SAAS,EAAC,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAC,cAAc,EAAC,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAY3C,OAAO,KAAK,EAA6B,qBAAqB,EAAC,MAAM,SAAS,CAAC;AAC/E,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,uBAAuB,CAAC;AAYzD;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB,iBAgBA;AAED,KAAK,eAAe,GAAG;IACrB,WAAW,EAAE;QACX,OAAO,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;QACxC,UAAU,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;KAC5C,CAAC;CACH,CAAC;AAEF;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IACjD,UAAU,EAAE,eAAe,CAAC;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5C,UAAU,EAAE;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,CAAC;IAClD,OAAO,EAAE,qBAAqB,CAAC;IAC/B,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB,cAeA;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAClD,UAAU,EAAE,eAAe,CAAC;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;CAC9B,cAkBA;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE;IACrD,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,eAAe,CAAC;IAC5B,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,aAAa,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,cAsEA"}
@@ -0,0 +1,123 @@
1
+ import { queryFieldInfo } from '@uwdata/mosaic-core';
2
+ import { ProfilerCategoryClient, ProfilerCategoryTotalClient, } from './ProfilerCategoryClient';
3
+ import { ProfilerCountClient } from './ProfilerCountClient';
4
+ import { ProfilerHistogramClient, ProfilerHistogramTotalClient, } from './ProfilerHistogramClient';
5
+ import { ProfilerPageClient } from './ProfilerPageClient';
6
+ import { ProfilerUnsupportedSummaryClient } from './ProfilerUnsupportedSummaryClient';
7
+ import { fieldInfoToProfilerField, getProfilerValueType, isProfilerHistogramType, isProfilerUnsupportedSummaryType, } from './utils';
8
+ function toError(error) {
9
+ return error instanceof Error ? error : new Error(String(error));
10
+ }
11
+ /**
12
+ * Loads field metadata for the profiler table and writes the normalized field
13
+ * definitions into the profiler store.
14
+ */
15
+ export async function loadProfilerSchema(options) {
16
+ const { columns, coordinator, store, tableName } = options;
17
+ store.getState().setSchemaLoading(true);
18
+ try {
19
+ const fieldInfo = await queryFieldInfo(coordinator, columns?.length
20
+ ? columns.map((column) => ({ column, table: tableName }))
21
+ : [{ column: '*', table: tableName }]);
22
+ store.getState().setSchemaSuccess(fieldInfo.map(fieldInfoToProfilerField));
23
+ }
24
+ catch (error) {
25
+ store.getState().setSchemaSuccess([]);
26
+ store.getState().setSchemaError(toError(error));
27
+ }
28
+ }
29
+ /**
30
+ * Connects the paged row client for the current profiler page and disconnects
31
+ * it when the caller tears down the lifecycle.
32
+ */
33
+ export function connectProfilerPageClient(options) {
34
+ const client = new ProfilerPageClient({
35
+ columns: options.fieldNames,
36
+ filter: options.filter,
37
+ onStateChange: (state) => options.store.getState().setPage(state),
38
+ pagination: options.pagination,
39
+ sorting: options.sorting,
40
+ tableName: options.tableName,
41
+ });
42
+ options.connection.coordinator.connect(client);
43
+ return () => {
44
+ options.connection.coordinator.disconnect(client);
45
+ };
46
+ }
47
+ /**
48
+ * Connects either the filtered or total count client and routes updates into
49
+ * the corresponding store slice.
50
+ */
51
+ export function connectProfilerCountClient(options) {
52
+ const setCountState = options.target === 'filtered'
53
+ ? options.store.getState().setFilteredCount
54
+ : options.store.getState().setTotalCount;
55
+ const client = new ProfilerCountClient({
56
+ filterStable: options.filterStable,
57
+ onStateChange: setCountState,
58
+ selection: options.selection,
59
+ tableName: options.tableName,
60
+ });
61
+ options.connection.coordinator.connect(client);
62
+ return () => {
63
+ options.connection.coordinator.disconnect(client);
64
+ };
65
+ }
66
+ /**
67
+ * Connects all per-column summary clients for the active schema and initializes
68
+ * matching empty summary state in the profiler store.
69
+ */
70
+ export function connectProfilerSummaryClients(options) {
71
+ const { categoryLimit, connection, fields, selection, store, summaryBins, tableName, } = options;
72
+ store.getState().initializeSummaries(fields);
73
+ const clients = fields.flatMap((field) => {
74
+ const update = (summary) => {
75
+ store.getState().setSummary(field.name, summary);
76
+ };
77
+ if (isProfilerUnsupportedSummaryType(field.type)) {
78
+ return [
79
+ new ProfilerUnsupportedSummaryClient({
80
+ field,
81
+ onStateChange: update,
82
+ selection,
83
+ tableName,
84
+ }),
85
+ ];
86
+ }
87
+ if (isProfilerHistogramType(field.type)) {
88
+ const summaryClient = new ProfilerHistogramClient({
89
+ field,
90
+ onStateChange: update,
91
+ selection,
92
+ steps: summaryBins,
93
+ tableName,
94
+ valueType: getProfilerValueType(field.type) === 'date' ? 'date' : 'number',
95
+ });
96
+ return [
97
+ summaryClient,
98
+ new ProfilerHistogramTotalClient({
99
+ summaryClient,
100
+ }),
101
+ ];
102
+ }
103
+ const summaryClient = new ProfilerCategoryClient({
104
+ categoryLimit,
105
+ field,
106
+ onStateChange: update,
107
+ selection,
108
+ tableName,
109
+ });
110
+ return [
111
+ summaryClient,
112
+ new ProfilerCategoryTotalClient({
113
+ summaryClient,
114
+ }),
115
+ ];
116
+ });
117
+ clients.forEach((client) => connection.coordinator.connect(client));
118
+ return () => {
119
+ clients.forEach((client) => connection.coordinator.disconnect(client));
120
+ store.getState().clearSummaries();
121
+ };
122
+ }
123
+ //# sourceMappingURL=profilerController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profilerController.js","sourceRoot":"","sources":["../../src/profiler/profilerController.ts"],"names":[],"mappings":"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","sourcesContent":["import type {MosaicClient, Selection} from '@uwdata/mosaic-core';\nimport {queryFieldInfo} from '@uwdata/mosaic-core';\nimport type * as arrow from 'apache-arrow';\nimport {\n ProfilerCategoryClient,\n ProfilerCategoryTotalClient,\n} from './ProfilerCategoryClient';\nimport {ProfilerCountClient} from './ProfilerCountClient';\nimport {\n ProfilerHistogramClient,\n ProfilerHistogramTotalClient,\n} from './ProfilerHistogramClient';\nimport {ProfilerPageClient} from './ProfilerPageClient';\nimport {ProfilerUnsupportedSummaryClient} from './ProfilerUnsupportedSummaryClient';\nimport type {MosaicProfilerSummaryState, MosaicProfilerSorting} from './types';\nimport type {ProfilerStore} from './createProfilerStore';\nimport {\n fieldInfoToProfilerField,\n getProfilerValueType,\n isProfilerHistogramType,\n isProfilerUnsupportedSummaryType,\n} from './utils';\n\nfunction toError(error: unknown): Error {\n return error instanceof Error ? error : new Error(String(error));\n}\n\n/**\n * Loads field metadata for the profiler table and writes the normalized field\n * definitions into the profiler store.\n */\nexport async function loadProfilerSchema(options: {\n columns?: string[];\n coordinator: Parameters<typeof queryFieldInfo>[0];\n store: ProfilerStore;\n tableName: string;\n}) {\n const {columns, coordinator, store, tableName} = options;\n store.getState().setSchemaLoading(true);\n\n try {\n const fieldInfo = await queryFieldInfo(\n coordinator,\n columns?.length\n ? columns.map((column) => ({column, table: tableName}))\n : [{column: '*', table: tableName}],\n );\n store.getState().setSchemaSuccess(fieldInfo.map(fieldInfoToProfilerField));\n } catch (error: unknown) {\n store.getState().setSchemaSuccess([]);\n store.getState().setSchemaError(toError(error));\n }\n}\n\ntype ReadyConnection = {\n coordinator: {\n connect: (client: MosaicClient) => void;\n disconnect: (client: MosaicClient) => void;\n };\n};\n\n/**\n * Connects the paged row client for the current profiler page and disconnects\n * it when the caller tears down the lifecycle.\n */\nexport function connectProfilerPageClient(options: {\n connection: ReadyConnection;\n fieldNames: string[];\n filter?: ReturnType<Selection['predicate']>;\n pagination: {pageIndex: number; pageSize: number};\n sorting: MosaicProfilerSorting;\n store: ProfilerStore;\n tableName: string;\n}) {\n const client = new ProfilerPageClient({\n columns: options.fieldNames,\n filter: options.filter,\n onStateChange: (state) => options.store.getState().setPage(state),\n pagination: options.pagination,\n sorting: options.sorting,\n tableName: options.tableName,\n });\n\n options.connection.coordinator.connect(client);\n\n return () => {\n options.connection.coordinator.disconnect(client);\n };\n}\n\n/**\n * Connects either the filtered or total count client and routes updates into\n * the corresponding store slice.\n */\nexport function connectProfilerCountClient(options: {\n connection: ReadyConnection;\n filterStable?: boolean;\n selection?: Selection;\n store: ProfilerStore;\n tableName: string;\n target: 'filtered' | 'total';\n}) {\n const setCountState =\n options.target === 'filtered'\n ? options.store.getState().setFilteredCount\n : options.store.getState().setTotalCount;\n\n const client = new ProfilerCountClient({\n filterStable: options.filterStable,\n onStateChange: setCountState,\n selection: options.selection,\n tableName: options.tableName,\n });\n\n options.connection.coordinator.connect(client);\n\n return () => {\n options.connection.coordinator.disconnect(client);\n };\n}\n\n/**\n * Connects all per-column summary clients for the active schema and initializes\n * matching empty summary state in the profiler store.\n */\nexport function connectProfilerSummaryClients(options: {\n categoryLimit: number;\n connection: ReadyConnection;\n fields: arrow.Field[];\n selection: Selection;\n store: ProfilerStore;\n summaryBins: number;\n tableName: string;\n}) {\n const {\n categoryLimit,\n connection,\n fields,\n selection,\n store,\n summaryBins,\n tableName,\n } = options;\n\n store.getState().initializeSummaries(fields);\n\n const clients: MosaicClient[] = fields.flatMap((field): MosaicClient[] => {\n const update = (summary: MosaicProfilerSummaryState) => {\n store.getState().setSummary(field.name, summary);\n };\n\n if (isProfilerUnsupportedSummaryType(field.type)) {\n return [\n new ProfilerUnsupportedSummaryClient({\n field,\n onStateChange: update,\n selection,\n tableName,\n }),\n ];\n }\n\n if (isProfilerHistogramType(field.type)) {\n const summaryClient = new ProfilerHistogramClient({\n field,\n onStateChange: update,\n selection,\n steps: summaryBins,\n tableName,\n valueType:\n getProfilerValueType(field.type) === 'date' ? 'date' : 'number',\n });\n\n return [\n summaryClient,\n new ProfilerHistogramTotalClient({\n summaryClient,\n }),\n ];\n }\n\n const summaryClient = new ProfilerCategoryClient({\n categoryLimit,\n field,\n onStateChange: update,\n selection,\n tableName,\n });\n\n return [\n summaryClient,\n new ProfilerCategoryTotalClient({\n summaryClient,\n }),\n ];\n });\n\n clients.forEach((client) => connection.coordinator.connect(client));\n\n return () => {\n clients.forEach((client) => connection.coordinator.disconnect(client));\n store.getState().clearSummaries();\n };\n}\n"]}
@@ -0,0 +1,86 @@
1
+ import type { Selection } from '@uwdata/mosaic-core';
2
+ import type { Interval1D } from '@uwdata/mosaic-plot';
3
+ import type { Field, Table } from 'apache-arrow';
4
+ import type { Dispatch, SetStateAction } from 'react';
5
+ export type MosaicProfilerSorting = Array<{
6
+ id: string;
7
+ desc: boolean;
8
+ }>;
9
+ export type MosaicProfilerPaginationState = {
10
+ pageIndex: number;
11
+ pageSize: number;
12
+ };
13
+ export type MosaicProfilerBinValue = number | Date;
14
+ export type MosaicProfilerBin = {
15
+ x0: MosaicProfilerBinValue;
16
+ x1: MosaicProfilerBinValue;
17
+ length: number;
18
+ };
19
+ export type MosaicProfilerSummaryStatus = {
20
+ error?: Error;
21
+ isLoading: boolean;
22
+ };
23
+ export type MosaicProfilerHistogramSummary = MosaicProfilerSummaryStatus & {
24
+ filteredBins: MosaicProfilerBin[];
25
+ filteredNullCount: number;
26
+ interactor: Interval1D | null;
27
+ kind: 'histogram';
28
+ totalBins: MosaicProfilerBin[];
29
+ totalNullCount: number;
30
+ valueType: 'date' | 'number';
31
+ };
32
+ export type MosaicProfilerCategoryBucket = {
33
+ filteredCount: number;
34
+ key: string;
35
+ kind: 'null' | 'overflow' | 'unique' | 'value';
36
+ label: string;
37
+ selectable: boolean;
38
+ totalCount: number;
39
+ };
40
+ export type MosaicProfilerCategorySummary = MosaicProfilerSummaryStatus & {
41
+ bucketCount: number;
42
+ buckets: MosaicProfilerCategoryBucket[];
43
+ kind: 'category';
44
+ selectedKey?: string;
45
+ toggleValue: (key: string) => void;
46
+ };
47
+ export type MosaicProfilerUnsupportedSummary = MosaicProfilerSummaryStatus & {
48
+ kind: 'unsupported';
49
+ label: string;
50
+ };
51
+ export type MosaicProfilerSummaryState = MosaicProfilerCategorySummary | MosaicProfilerHistogramSummary | MosaicProfilerUnsupportedSummary;
52
+ export type MosaicProfilerColumnKind = 'category' | 'histogram' | 'unsupported';
53
+ export type MosaicProfilerColumnState = {
54
+ field: Field;
55
+ kind: MosaicProfilerColumnKind;
56
+ name: string;
57
+ summary: MosaicProfilerSummaryState;
58
+ };
59
+ export type MosaicProfilerOptions = {
60
+ categoryLimit?: number;
61
+ columns?: string[];
62
+ initialSorting?: MosaicProfilerSorting;
63
+ pageSize?: number;
64
+ selection?: Selection;
65
+ selectionName?: string;
66
+ summaryBins?: number;
67
+ tableName: string;
68
+ };
69
+ export type UseMosaicProfilerReturn = {
70
+ columns: MosaicProfilerColumnState[];
71
+ filteredRowCount?: number;
72
+ hasFilters: boolean;
73
+ isLoading: boolean;
74
+ pageQuery: string;
75
+ pageTable?: Table;
76
+ pagination: MosaicProfilerPaginationState;
77
+ reset: () => void;
78
+ selection: Selection;
79
+ setPagination: Dispatch<SetStateAction<MosaicProfilerPaginationState>>;
80
+ setSorting: Dispatch<SetStateAction<MosaicProfilerSorting>>;
81
+ sorting: MosaicProfilerSorting;
82
+ sql: string;
83
+ tableError?: Error;
84
+ totalRowCount?: number;
85
+ };
86
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/profiler/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/profiler/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {Selection} from '@uwdata/mosaic-core';\nimport type {Interval1D} from '@uwdata/mosaic-plot';\nimport type {Field, Table} from 'apache-arrow';\nimport type {Dispatch, SetStateAction} from 'react';\n\nexport type MosaicProfilerSorting = Array<{id: string; desc: boolean}>;\n\nexport type MosaicProfilerPaginationState = {\n pageIndex: number;\n pageSize: number;\n};\n\nexport type MosaicProfilerBinValue = number | Date;\n\nexport type MosaicProfilerBin = {\n x0: MosaicProfilerBinValue;\n x1: MosaicProfilerBinValue;\n length: number;\n};\n\nexport type MosaicProfilerSummaryStatus = {\n error?: Error;\n isLoading: boolean;\n};\n\nexport type MosaicProfilerHistogramSummary = MosaicProfilerSummaryStatus & {\n filteredBins: MosaicProfilerBin[];\n filteredNullCount: number;\n interactor: Interval1D | null;\n kind: 'histogram';\n totalBins: MosaicProfilerBin[];\n totalNullCount: number;\n valueType: 'date' | 'number';\n};\n\nexport type MosaicProfilerCategoryBucket = {\n filteredCount: number;\n key: string;\n kind: 'null' | 'overflow' | 'unique' | 'value';\n label: string;\n selectable: boolean;\n totalCount: number;\n};\n\nexport type MosaicProfilerCategorySummary = MosaicProfilerSummaryStatus & {\n bucketCount: number;\n buckets: MosaicProfilerCategoryBucket[];\n kind: 'category';\n selectedKey?: string;\n toggleValue: (key: string) => void;\n};\n\nexport type MosaicProfilerUnsupportedSummary = MosaicProfilerSummaryStatus & {\n kind: 'unsupported';\n label: string;\n};\n\nexport type MosaicProfilerSummaryState =\n | MosaicProfilerCategorySummary\n | MosaicProfilerHistogramSummary\n | MosaicProfilerUnsupportedSummary;\n\nexport type MosaicProfilerColumnKind = 'category' | 'histogram' | 'unsupported';\n\nexport type MosaicProfilerColumnState = {\n field: Field;\n kind: MosaicProfilerColumnKind;\n name: string;\n summary: MosaicProfilerSummaryState;\n};\n\nexport type MosaicProfilerOptions = {\n categoryLimit?: number;\n columns?: string[];\n initialSorting?: MosaicProfilerSorting;\n pageSize?: number;\n selection?: Selection;\n selectionName?: string;\n summaryBins?: number;\n tableName: string;\n};\n\nexport type UseMosaicProfilerReturn = {\n columns: MosaicProfilerColumnState[];\n filteredRowCount?: number;\n hasFilters: boolean;\n isLoading: boolean;\n pageQuery: string;\n pageTable?: Table;\n pagination: MosaicProfilerPaginationState;\n reset: () => void;\n selection: Selection;\n setPagination: Dispatch<SetStateAction<MosaicProfilerPaginationState>>;\n setSorting: Dispatch<SetStateAction<MosaicProfilerSorting>>;\n sorting: MosaicProfilerSorting;\n sql: string;\n tableError?: Error;\n totalRowCount?: number;\n};\n"]}
@@ -0,0 +1,7 @@
1
+ import type { MosaicProfilerOptions, UseMosaicProfilerReturn } from './types';
2
+ /**
3
+ * Aggregates Mosaic-backed schema, rows, counts, and summaries into the stable
4
+ * public profiler API consumed by the React table UI.
5
+ */
6
+ export declare function useMosaicProfiler(options: MosaicProfilerOptions): UseMosaicProfilerReturn;
7
+ //# sourceMappingURL=useMosaicProfiler.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,339 @@
1
+ import { createId } from '@paralleldrive/cuid2';
2
+ import { useDebounce } from '@sqlrooms/ui';
3
+ import { Selection as MosaicSelection, } from '@uwdata/mosaic-core';
4
+ import { useEffect, useMemo, useState, } from 'react';
5
+ import { useStore } from 'zustand';
6
+ import { useStoreWithMosaic } from '../MosaicSlice';
7
+ import { createProfilerStore, } from './createProfilerStore';
8
+ import { connectProfilerCountClient, connectProfilerPageClient, connectProfilerSummaryClients, loadProfilerSchema, } from './profilerController';
9
+ import { buildProfilerBaseQuery, buildProfilerPageQuery, createEmptySummaryState, isProfilerHistogramType, isProfilerUnsupportedSummaryType, } from './utils';
10
+ /**
11
+ * Tracks Mosaic selection updates as a monotonically increasing version so
12
+ * memoized queries and lifecycle effects can respond to crossfilter changes.
13
+ */
14
+ function useSelectionVersion(selection) {
15
+ const [version, setVersion] = useState(0);
16
+ useEffect(() => {
17
+ const handleChange = () => setVersion((value) => value + 1);
18
+ selection.addEventListener('value', handleChange);
19
+ return () => selection.removeEventListener('value', handleChange);
20
+ }, [selection]);
21
+ return version;
22
+ }
23
+ /**
24
+ * Resolves the profiler selection, creating a crossfilter selection when the
25
+ * caller does not supply one, and exposes a version that changes with it.
26
+ */
27
+ function useProfilerSelection(options) {
28
+ const { selection: providedSelection, selectionName } = options;
29
+ const generatedSelectionName = useMemo(() => `mosaic-profiler-${createId()}`, []);
30
+ const selectionKey = selectionName ?? generatedSelectionName;
31
+ const existingSelection = useStoreWithMosaic((state) => state.mosaic.selections[selectionKey]);
32
+ const getSelection = useStoreWithMosaic((state) => state.mosaic.getSelection);
33
+ const [fallbackSelection] = useState(() => MosaicSelection.crossfilter());
34
+ useEffect(() => {
35
+ if (!providedSelection && !existingSelection) {
36
+ getSelection(selectionKey, 'crossfilter');
37
+ }
38
+ }, [existingSelection, getSelection, providedSelection, selectionKey]);
39
+ const selection = providedSelection ?? existingSelection ?? fallbackSelection;
40
+ return {
41
+ selection,
42
+ selectionVersion: useSelectionVersion(selection),
43
+ };
44
+ }
45
+ /**
46
+ * Creates the per-profiler local store and subscribes to the raw state slices
47
+ * that the public profiler hook exposes.
48
+ */
49
+ function useProfilerStoreState(options) {
50
+ const [profilerStore] = useState(() => createProfilerStore({
51
+ initialSorting: options.initialSorting,
52
+ pageSize: options.pageSize,
53
+ }));
54
+ return {
55
+ filteredCount: useStore(profilerStore, (state) => state.filteredCount),
56
+ lastNonEmptyPageTable: useStore(profilerStore, (state) => state.lastNonEmptyPageTable),
57
+ page: useStore(profilerStore, (state) => state.page),
58
+ pagination: useStore(profilerStore, (state) => state.pagination),
59
+ profilerStore,
60
+ schema: useStore(profilerStore, (state) => state.schema),
61
+ setPagination: useStore(profilerStore, (state) => state.setPagination),
62
+ setSorting: useStore(profilerStore, (state) => state.setSorting),
63
+ sorting: useStore(profilerStore, (state) => state.sorting),
64
+ summaries: useStore(profilerStore, (state) => state.summaries),
65
+ totalCount: useStore(profilerStore, (state) => state.totalCount),
66
+ };
67
+ }
68
+ /**
69
+ * Derives the profiler's field and SQL state from the current schema,
70
+ * selection, sorting, and pagination state.
71
+ */
72
+ function useProfilerQueryState(options) {
73
+ const { pagination, rowSelectionVersion, schema, selection, selectionVersion, sorting, tableName, } = options;
74
+ const fields = schema.fields;
75
+ const fieldNames = useMemo(() => fields.map((field) => field.name), [fields]);
76
+ const filter = useMemo(() => {
77
+ void selectionVersion;
78
+ return selection.predicate();
79
+ }, [selection, selectionVersion]);
80
+ const rowFilter = useMemo(() => {
81
+ void rowSelectionVersion;
82
+ return selection.predicate();
83
+ }, [rowSelectionVersion, selection]);
84
+ const baseQuery = useMemo(() => buildProfilerBaseQuery({
85
+ columns: fieldNames,
86
+ filter,
87
+ sorting,
88
+ tableName,
89
+ }), [fieldNames, filter, sorting, tableName]);
90
+ const pageBaseQuery = useMemo(() => buildProfilerBaseQuery({
91
+ columns: fieldNames,
92
+ filter: rowFilter,
93
+ sorting,
94
+ tableName,
95
+ }), [fieldNames, rowFilter, sorting, tableName]);
96
+ return {
97
+ baseQuery,
98
+ datasetId: [tableName, ...fieldNames].join('\u0001'),
99
+ fieldNames,
100
+ fields,
101
+ hasFilters: Array.isArray(filter) ? filter.length > 0 : Boolean(filter),
102
+ pageQuery: buildProfilerPageQuery(pageBaseQuery, pagination).toString(),
103
+ rowFilter,
104
+ };
105
+ }
106
+ /**
107
+ * Owns the coordinator-backed schema, row, count, and summary client
108
+ * lifecycles for a profiler instance.
109
+ */
110
+ function useProfilerLifecycles(options) {
111
+ const { categoryLimit, columns, connection, fieldNames, fields, pageSize, pagination, profilerStore, rowFilter, selection, selectionVersion, sorting, summaryBins, tableName, } = options;
112
+ useEffect(() => {
113
+ profilerStore.getState().syncPageSize(pageSize);
114
+ }, [pageSize, profilerStore]);
115
+ useEffect(() => {
116
+ profilerStore.getState().resetPageIndex();
117
+ }, [profilerStore, selectionVersion, tableName]);
118
+ useEffect(() => {
119
+ if (connection.status !== 'ready' || !tableName) {
120
+ profilerStore.getState().setSchemaSuccess([]);
121
+ profilerStore.getState().setSchemaError(undefined);
122
+ profilerStore
123
+ .getState()
124
+ .setSchemaLoading(connection.status === 'loading');
125
+ return;
126
+ }
127
+ void loadProfilerSchema({
128
+ columns,
129
+ coordinator: connection.coordinator,
130
+ store: profilerStore,
131
+ tableName,
132
+ });
133
+ }, [columns, connection, profilerStore, tableName]);
134
+ useEffect(() => {
135
+ if (connection.status !== 'ready' || !tableName || !fieldNames.length) {
136
+ profilerStore.getState().setPage({ isLoading: false });
137
+ return;
138
+ }
139
+ return connectProfilerPageClient({
140
+ connection,
141
+ fieldNames,
142
+ filter: rowFilter,
143
+ pagination,
144
+ sorting,
145
+ store: profilerStore,
146
+ tableName,
147
+ });
148
+ }, [
149
+ connection,
150
+ fieldNames,
151
+ pagination,
152
+ profilerStore,
153
+ rowFilter,
154
+ sorting,
155
+ tableName,
156
+ ]);
157
+ useEffect(() => {
158
+ if (connection.status !== 'ready' || !tableName) {
159
+ profilerStore.getState().setFilteredCount({ isLoading: false });
160
+ return;
161
+ }
162
+ return connectProfilerCountClient({
163
+ connection,
164
+ filterStable: true,
165
+ selection,
166
+ store: profilerStore,
167
+ tableName,
168
+ target: 'filtered',
169
+ });
170
+ }, [connection, profilerStore, selection, tableName]);
171
+ useEffect(() => {
172
+ if (connection.status !== 'ready' || !tableName) {
173
+ profilerStore.getState().setTotalCount({ isLoading: false });
174
+ return;
175
+ }
176
+ return connectProfilerCountClient({
177
+ connection,
178
+ store: profilerStore,
179
+ tableName,
180
+ target: 'total',
181
+ });
182
+ }, [connection, profilerStore, tableName]);
183
+ useEffect(() => {
184
+ if (connection.status !== 'ready' || !fields.length) {
185
+ profilerStore.getState().clearSummaries();
186
+ return;
187
+ }
188
+ return connectProfilerSummaryClients({
189
+ categoryLimit,
190
+ connection,
191
+ fields,
192
+ selection,
193
+ store: profilerStore,
194
+ summaryBins,
195
+ tableName,
196
+ });
197
+ }, [
198
+ categoryLimit,
199
+ connection,
200
+ fields,
201
+ profilerStore,
202
+ selection,
203
+ summaryBins,
204
+ tableName,
205
+ ]);
206
+ }
207
+ /**
208
+ * Maps the schema fields and summary state into the column model consumed by
209
+ * the profiler header and summary cells.
210
+ */
211
+ function useProfilerColumns(options) {
212
+ const { fields, summaries } = options;
213
+ return useMemo(() => fields.map((field) => ({
214
+ field,
215
+ kind: isProfilerUnsupportedSummaryType(field.type)
216
+ ? 'unsupported'
217
+ : isProfilerHistogramType(field.type)
218
+ ? 'histogram'
219
+ : 'category',
220
+ name: field.name,
221
+ summary: summaries[field.name] ?? createEmptySummaryState(field),
222
+ })), [fields, summaries]);
223
+ }
224
+ /**
225
+ * Collapses the aggregated profiler client state into the loading and error
226
+ * signals exposed from the public hook.
227
+ */
228
+ function useProfilerStatus(options) {
229
+ const { fields, filteredCount, page, schema, summaries, totalCount } = options;
230
+ const hasPendingSummaryInitialization = fields.length > 0 && Object.keys(summaries).length < fields.length;
231
+ return {
232
+ isLoading: schema.isLoading ||
233
+ page.isLoading ||
234
+ filteredCount.isLoading ||
235
+ totalCount.isLoading ||
236
+ hasPendingSummaryInitialization ||
237
+ Object.values(summaries).some((summary) => summary.isLoading),
238
+ tableError: schema.error ??
239
+ page.error ??
240
+ filteredCount.error ??
241
+ totalCount.error ??
242
+ Object.values(summaries).find((summary) => summary.error)?.error,
243
+ };
244
+ }
245
+ /**
246
+ * Keeps the last non-empty page result visible while live brushing has moved
247
+ * ahead of the deferred row query, avoiding transient "No rows" flashes.
248
+ */
249
+ function useProfilerVisiblePageState(options) {
250
+ const { lastNonEmptyPageTable, page, pageDatasetId, rowSelectionVersion, selectionVersion, } = options;
251
+ const isRowDisplayStale = selectionVersion !== rowSelectionVersion;
252
+ const hasCurrentRows = !!page.pageTable && page.pageTable.numRows > 0;
253
+ const canReuseLastNonEmptyPage = !!lastNonEmptyPageTable &&
254
+ lastNonEmptyPageTable.datasetId === pageDatasetId;
255
+ const canShowStableEmpty = !page.isLoading &&
256
+ !isRowDisplayStale &&
257
+ (!page.pageTable || page.pageTable.numRows === 0);
258
+ const showStableEmpty = useDebounce(canShowStableEmpty, 120);
259
+ if (hasCurrentRows || !canReuseLastNonEmptyPage) {
260
+ return page.pageTable;
261
+ }
262
+ return showStableEmpty ? page.pageTable : lastNonEmptyPageTable.pageTable;
263
+ }
264
+ /**
265
+ * Aggregates Mosaic-backed schema, rows, counts, and summaries into the stable
266
+ * public profiler API consumed by the React table UI.
267
+ */
268
+ export function useMosaicProfiler(options) {
269
+ const { categoryLimit = 20, columns, initialSorting = [], pageSize = 100, selection: providedSelection, selectionName, summaryBins = 18, tableName, } = options;
270
+ const connection = useStoreWithMosaic((state) => state.mosaic.connection);
271
+ const { selection, selectionVersion } = useProfilerSelection({
272
+ selection: providedSelection,
273
+ selectionName,
274
+ });
275
+ const rowSelectionVersion = useDebounce(selectionVersion, 100);
276
+ const { filteredCount, lastNonEmptyPageTable, page, pagination, profilerStore, schema, setPagination, setSorting, sorting, summaries, totalCount, } = useProfilerStoreState({
277
+ initialSorting,
278
+ pageSize,
279
+ });
280
+ const { baseQuery, datasetId, fieldNames, fields, hasFilters, pageQuery, rowFilter, } = useProfilerQueryState({
281
+ pagination,
282
+ rowSelectionVersion,
283
+ schema,
284
+ selection,
285
+ selectionVersion,
286
+ sorting,
287
+ tableName,
288
+ });
289
+ useProfilerLifecycles({
290
+ categoryLimit,
291
+ columns,
292
+ connection,
293
+ fieldNames,
294
+ fields,
295
+ pageSize,
296
+ pagination,
297
+ profilerStore,
298
+ rowFilter,
299
+ selection,
300
+ selectionVersion,
301
+ sorting,
302
+ summaryBins,
303
+ tableName,
304
+ });
305
+ const profilerColumns = useProfilerColumns({ fields, summaries });
306
+ const { isLoading, tableError } = useProfilerStatus({
307
+ fields,
308
+ filteredCount,
309
+ page,
310
+ schema,
311
+ summaries,
312
+ totalCount,
313
+ });
314
+ const visiblePage = useProfilerVisiblePageState({
315
+ lastNonEmptyPageTable,
316
+ page,
317
+ pageDatasetId: datasetId,
318
+ rowSelectionVersion,
319
+ selectionVersion,
320
+ });
321
+ return {
322
+ columns: profilerColumns,
323
+ filteredRowCount: filteredCount.count,
324
+ hasFilters,
325
+ isLoading,
326
+ pageQuery,
327
+ pageTable: visiblePage,
328
+ pagination,
329
+ reset: () => selection.reset(),
330
+ selection,
331
+ setPagination,
332
+ setSorting,
333
+ sorting,
334
+ sql: baseQuery.toString(),
335
+ tableError,
336
+ totalRowCount: totalCount.count,
337
+ };
338
+ }
339
+ //# sourceMappingURL=useMosaicProfiler.js.map