@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,179 @@
1
+ import { MosaicClient, queryFieldInfo, } from '@uwdata/mosaic-core';
2
+ import { Interval1D, bin } from '@uwdata/mosaic-plot';
3
+ import { count, Query } from '@uwdata/mosaic-sql';
4
+ import { rowsFromQueryResult, splitHistogramBins } from './utils';
5
+ export class ProfilerHistogramClient extends MosaicClient {
6
+ type = 'rectY';
7
+ filteredError;
8
+ filteredLoading = true;
9
+ field;
10
+ fieldInfo;
11
+ fieldInfoPromise;
12
+ filteredBins;
13
+ filteredNullCount;
14
+ interactor;
15
+ onStateChange;
16
+ select;
17
+ tableName;
18
+ totalBins;
19
+ totalError;
20
+ totalLoading = true;
21
+ totalNullCount;
22
+ valueType;
23
+ constructor(options) {
24
+ super(options.selection);
25
+ this.field = options.field;
26
+ this.onStateChange = options.onStateChange;
27
+ this.tableName = options.tableName;
28
+ this.valueType = options.valueType;
29
+ const binned = bin(options.field.name, { steps: options.steps })(this, 'x');
30
+ this.select = { x1: binned.x1, x2: binned.x2, y: count() };
31
+ this.interactor = new Interval1D(this, {
32
+ brush: undefined,
33
+ channel: 'x',
34
+ field: options.field.name,
35
+ peers: false,
36
+ selection: options.selection,
37
+ });
38
+ }
39
+ get filterStable() {
40
+ return true;
41
+ }
42
+ emitSummary() {
43
+ const totalRows = this.totalBins ?? (this.totalLoading ? (this.filteredBins ?? []) : []);
44
+ const total = splitHistogramBins(totalRows);
45
+ const filteredRows = this.filteredBins ?? (this.filteredLoading ? (this.totalBins ?? []) : []);
46
+ const filtered = splitHistogramBins(filteredRows);
47
+ this.onStateChange({
48
+ error: this.filteredError ?? this.totalError,
49
+ filteredBins: filtered.bins,
50
+ filteredNullCount: this.filteredNullCount ??
51
+ (this.filteredLoading ? total.nullCount : filtered.nullCount),
52
+ interactor: this.interactor,
53
+ isLoading: this.filteredLoading || this.totalLoading,
54
+ kind: 'histogram',
55
+ totalBins: total.bins,
56
+ totalNullCount: this.totalNullCount ??
57
+ (this.totalLoading ? filtered.nullCount : total.nullCount),
58
+ valueType: this.valueType,
59
+ });
60
+ }
61
+ async ensureFieldInfo() {
62
+ if (this.fieldInfo) {
63
+ return;
64
+ }
65
+ if (!this.fieldInfoPromise) {
66
+ this.fieldInfoPromise = queryFieldInfo(this.coordinator, [
67
+ {
68
+ table: this.tableName,
69
+ column: this.field.name,
70
+ stats: ['min', 'max'],
71
+ },
72
+ ])
73
+ .then(([info]) => {
74
+ this.fieldInfo = info;
75
+ })
76
+ .catch((error) => {
77
+ this.fieldInfo = undefined;
78
+ this.fieldInfoPromise = undefined;
79
+ throw error;
80
+ });
81
+ }
82
+ await this.fieldInfoPromise;
83
+ }
84
+ setTotalError(error) {
85
+ this.totalError = error;
86
+ this.totalLoading = false;
87
+ this.emitSummary();
88
+ }
89
+ setTotalLoading(isLoading) {
90
+ this.totalLoading = isLoading;
91
+ if (isLoading) {
92
+ this.totalError = undefined;
93
+ }
94
+ this.emitSummary();
95
+ }
96
+ setTotalRows(rows) {
97
+ const { nullCount } = splitHistogramBins(rows);
98
+ this.totalBins = rows;
99
+ this.totalNullCount = nullCount;
100
+ this.totalError = undefined;
101
+ this.totalLoading = false;
102
+ this.emitSummary();
103
+ }
104
+ queryPending() {
105
+ this.filteredLoading = true;
106
+ this.filteredError = undefined;
107
+ this.emitSummary();
108
+ return this;
109
+ }
110
+ async prepare() {
111
+ await this.ensureFieldInfo();
112
+ }
113
+ query(filter = []) {
114
+ return Query.from({ source: this.tableName })
115
+ .select(this.select)
116
+ .groupby([this.select.x1, this.select.x2])
117
+ .where(filter);
118
+ }
119
+ queryResult(data) {
120
+ const rows = rowsFromQueryResult(data);
121
+ const { nullCount } = splitHistogramBins(rows);
122
+ this.filteredBins = rows;
123
+ this.filteredNullCount = nullCount;
124
+ this.filteredError = undefined;
125
+ this.filteredLoading = false;
126
+ this.emitSummary();
127
+ return this;
128
+ }
129
+ queryError(error) {
130
+ this.filteredError = error;
131
+ this.filteredLoading = false;
132
+ this.emitSummary();
133
+ return this;
134
+ }
135
+ channelField(channel) {
136
+ if (channel !== 'x') {
137
+ throw new Error('ProfilerHistogramClient only supports x bins');
138
+ }
139
+ if (!this.fieldInfo) {
140
+ throw new Error('Field info is required before histogram binning');
141
+ }
142
+ return this.fieldInfo;
143
+ }
144
+ get plot() {
145
+ const markSet = new Set([this]);
146
+ return {
147
+ getAttribute(_name) {
148
+ return undefined;
149
+ },
150
+ markSet,
151
+ };
152
+ }
153
+ }
154
+ export class ProfilerHistogramTotalClient extends MosaicClient {
155
+ summaryClient;
156
+ constructor(options) {
157
+ super();
158
+ this.summaryClient = options.summaryClient;
159
+ }
160
+ async prepare() {
161
+ await this.summaryClient.ensureFieldInfo();
162
+ }
163
+ queryPending() {
164
+ this.summaryClient.setTotalLoading(true);
165
+ return this;
166
+ }
167
+ query(filter = []) {
168
+ return this.summaryClient.query(filter);
169
+ }
170
+ queryResult(data) {
171
+ this.summaryClient.setTotalRows(rowsFromQueryResult(data));
172
+ return this;
173
+ }
174
+ queryError(error) {
175
+ this.summaryClient.setTotalError(error);
176
+ return this;
177
+ }
178
+ }
179
+ //# sourceMappingURL=ProfilerHistogramClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfilerHistogramClient.js","sourceRoot":"","sources":["../../src/profiler/ProfilerHistogramClient.ts"],"names":[],"mappings":"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","sourcesContent":["import type {FieldInfo} from '@uwdata/mosaic-core';\nimport {\n MosaicClient,\n queryFieldInfo,\n type Selection,\n} from '@uwdata/mosaic-core';\nimport {Interval1D, bin} from '@uwdata/mosaic-plot';\nimport {count, type ExprNode, Query} from '@uwdata/mosaic-sql';\nimport type * as arrow from 'apache-arrow';\nimport type {MosaicProfilerHistogramSummary} from './types';\nimport {rowsFromQueryResult, splitHistogramBins} from './utils';\n\ntype HistogramStateChange = (summary: MosaicProfilerHistogramSummary) => void;\n\ntype HistogramClientOptions = {\n field: arrow.Field;\n onStateChange: HistogramStateChange;\n selection: Selection;\n steps: number;\n tableName: string;\n valueType: 'date' | 'number';\n};\n\ntype HistogramRow = {\n x1: number | Date | null;\n x2: number | Date | null;\n y: number;\n};\n\nexport class ProfilerHistogramClient extends MosaicClient {\n readonly type = 'rectY';\n private filteredError?: Error;\n private filteredLoading = true;\n private readonly field: arrow.Field;\n private fieldInfo?: FieldInfo;\n private fieldInfoPromise?: Promise<void>;\n private filteredBins?: HistogramRow[];\n private filteredNullCount?: number;\n private readonly interactor: Interval1D;\n private readonly onStateChange: HistogramStateChange;\n private readonly select: {\n x1: ExprNode;\n x2: ExprNode;\n y: ExprNode;\n };\n private readonly tableName: string;\n private totalBins?: HistogramRow[];\n private totalError?: Error;\n private totalLoading = true;\n private totalNullCount?: number;\n private readonly valueType: 'date' | 'number';\n\n constructor(options: HistogramClientOptions) {\n super(options.selection);\n this.field = options.field;\n this.onStateChange = options.onStateChange;\n this.tableName = options.tableName;\n this.valueType = options.valueType;\n\n const binned = bin(options.field.name, {steps: options.steps})(\n this,\n 'x',\n ) as unknown as {\n x1: ExprNode;\n x2: ExprNode;\n };\n this.select = {x1: binned.x1, x2: binned.x2, y: count()};\n this.interactor = new Interval1D(this, {\n brush: undefined,\n channel: 'x',\n field: options.field.name,\n peers: false,\n selection: options.selection,\n });\n }\n\n override get filterStable(): boolean {\n return true;\n }\n\n private emitSummary() {\n const totalRows =\n this.totalBins ?? (this.totalLoading ? (this.filteredBins ?? []) : []);\n const total = splitHistogramBins(totalRows);\n const filteredRows =\n this.filteredBins ?? (this.filteredLoading ? (this.totalBins ?? []) : []);\n const filtered = splitHistogramBins(filteredRows);\n\n this.onStateChange({\n error: this.filteredError ?? this.totalError,\n filteredBins: filtered.bins,\n filteredNullCount:\n this.filteredNullCount ??\n (this.filteredLoading ? total.nullCount : filtered.nullCount),\n interactor: this.interactor,\n isLoading: this.filteredLoading || this.totalLoading,\n kind: 'histogram',\n totalBins: total.bins,\n totalNullCount:\n this.totalNullCount ??\n (this.totalLoading ? filtered.nullCount : total.nullCount),\n valueType: this.valueType,\n });\n }\n\n async ensureFieldInfo(): Promise<void> {\n if (this.fieldInfo) {\n return;\n }\n\n if (!this.fieldInfoPromise) {\n this.fieldInfoPromise = queryFieldInfo(this.coordinator!, [\n {\n table: this.tableName,\n column: this.field.name,\n stats: ['min', 'max'],\n },\n ])\n .then(([info]) => {\n this.fieldInfo = info;\n })\n .catch((error) => {\n this.fieldInfo = undefined;\n this.fieldInfoPromise = undefined;\n throw error;\n });\n }\n\n await this.fieldInfoPromise;\n }\n\n setTotalError(error?: Error) {\n this.totalError = error;\n this.totalLoading = false;\n this.emitSummary();\n }\n\n setTotalLoading(isLoading: boolean) {\n this.totalLoading = isLoading;\n if (isLoading) {\n this.totalError = undefined;\n }\n this.emitSummary();\n }\n\n setTotalRows(rows: HistogramRow[]) {\n const {nullCount} = splitHistogramBins(rows);\n this.totalBins = rows;\n this.totalNullCount = nullCount;\n this.totalError = undefined;\n this.totalLoading = false;\n this.emitSummary();\n }\n\n override queryPending(): this {\n this.filteredLoading = true;\n this.filteredError = undefined;\n this.emitSummary();\n return this;\n }\n\n override async prepare(): Promise<void> {\n await this.ensureFieldInfo();\n }\n\n override query(filter: Array<ExprNode> = []): Query {\n return Query.from({source: this.tableName})\n .select(this.select)\n .groupby([this.select.x1, this.select.x2])\n .where(filter);\n }\n\n override queryResult(data: unknown): this {\n const rows = rowsFromQueryResult<HistogramRow>(data);\n const {nullCount} = splitHistogramBins(rows);\n this.filteredBins = rows;\n this.filteredNullCount = nullCount;\n this.filteredError = undefined;\n this.filteredLoading = false;\n this.emitSummary();\n return this;\n }\n\n override queryError(error: Error): this {\n this.filteredError = error;\n this.filteredLoading = false;\n this.emitSummary();\n return this;\n }\n\n channelField(channel: string) {\n if (channel !== 'x') {\n throw new Error('ProfilerHistogramClient only supports x bins');\n }\n if (!this.fieldInfo) {\n throw new Error('Field info is required before histogram binning');\n }\n return this.fieldInfo;\n }\n\n get plot(): {\n getAttribute(name: string): undefined;\n markSet: Set<ProfilerHistogramClient>;\n } {\n const markSet = new Set([this]);\n return {\n getAttribute(_name: string) {\n return undefined;\n },\n markSet,\n };\n }\n}\n\ntype ProfilerHistogramTotalClientOptions = {\n summaryClient: ProfilerHistogramClient;\n};\n\nexport class ProfilerHistogramTotalClient extends MosaicClient {\n private readonly summaryClient: ProfilerHistogramClient;\n\n constructor(options: ProfilerHistogramTotalClientOptions) {\n super();\n this.summaryClient = options.summaryClient;\n }\n\n override async prepare(): Promise<void> {\n await this.summaryClient.ensureFieldInfo();\n }\n\n override queryPending(): this {\n this.summaryClient.setTotalLoading(true);\n return this;\n }\n\n override query(filter: Array<ExprNode> = []): Query {\n return this.summaryClient.query(filter);\n }\n\n override queryResult(data: unknown): this {\n this.summaryClient.setTotalRows(rowsFromQueryResult<HistogramRow>(data));\n return this;\n }\n\n override queryError(error: Error): this {\n this.summaryClient.setTotalError(error);\n return this;\n }\n}\n"]}
@@ -0,0 +1,37 @@
1
+ import { MosaicClient, type Selection } from '@uwdata/mosaic-core';
2
+ import { type ExprNode, type Query } from '@uwdata/mosaic-sql';
3
+ import type { Table } from 'apache-arrow';
4
+ import type { MosaicProfilerPaginationState, MosaicProfilerSorting } from './types';
5
+ export type ProfilerPageState = {
6
+ datasetId?: string;
7
+ error?: Error;
8
+ isLoading: boolean;
9
+ pageTable?: Table;
10
+ };
11
+ type ProfilerPageClientOptions = {
12
+ columns: string[];
13
+ filter?: ReturnType<Selection['predicate']>;
14
+ onStateChange: (state: ProfilerPageState) => void;
15
+ pagination: MosaicProfilerPaginationState;
16
+ sorting: MosaicProfilerSorting;
17
+ tableName: string;
18
+ };
19
+ export declare class ProfilerPageClient extends MosaicClient {
20
+ private readonly columns;
21
+ private readonly datasetId;
22
+ private error?;
23
+ private readonly filter?;
24
+ private readonly onStateChange;
25
+ private readonly pagination;
26
+ private pageTable?;
27
+ private readonly sorting;
28
+ private readonly tableName;
29
+ constructor(options: ProfilerPageClientOptions);
30
+ get filterStable(): boolean;
31
+ queryPending(): this;
32
+ query(filter?: Array<ExprNode>): Query;
33
+ queryResult(data: unknown): this;
34
+ queryError(error: Error): this;
35
+ }
36
+ export {};
37
+ //# sourceMappingURL=ProfilerPageClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfilerPageClient.d.ts","sourceRoot":"","sources":["../../src/profiler/ProfilerPageClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,KAAK,SAAS,EAAC,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAC,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAC,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EACV,6BAA6B,EAC7B,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAGjB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,KAAK,CAAC;CACnB,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5C,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,UAAU,EAAE,6BAA6B,CAAC;IAC1C,OAAO,EAAE,qBAAqB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,KAAK,CAAC,CAAQ;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqC;IACnE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgC;IAC3D,OAAO,CAAC,SAAS,CAAC,CAAQ;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,OAAO,EAAE,yBAAyB;IAW9C,IAAa,YAAY,IAAI,OAAO,CAEnC;IAEQ,YAAY,IAAI,IAAI;IAUpB,KAAK,CAAC,MAAM,GAAE,KAAK,CAAC,QAAQ,CAAM,GAAG,KAAK;IAa1C,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAWhC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CAUxC"}
@@ -0,0 +1,65 @@
1
+ import { MosaicClient } from '@uwdata/mosaic-core';
2
+ import { buildProfilerBaseQuery, buildProfilerPageQuery } from './utils';
3
+ export class ProfilerPageClient extends MosaicClient {
4
+ columns;
5
+ datasetId;
6
+ error;
7
+ filter;
8
+ onStateChange;
9
+ pagination;
10
+ pageTable;
11
+ sorting;
12
+ tableName;
13
+ constructor(options) {
14
+ super();
15
+ this.columns = options.columns;
16
+ this.datasetId = [options.tableName, ...options.columns].join('\u0001');
17
+ this.filter = options.filter ?? [];
18
+ this.onStateChange = options.onStateChange;
19
+ this.pagination = options.pagination;
20
+ this.sorting = options.sorting;
21
+ this.tableName = options.tableName;
22
+ }
23
+ get filterStable() {
24
+ return false;
25
+ }
26
+ queryPending() {
27
+ this.onStateChange({
28
+ datasetId: this.datasetId,
29
+ error: this.error,
30
+ isLoading: true,
31
+ pageTable: this.pageTable,
32
+ });
33
+ return this;
34
+ }
35
+ query(filter = []) {
36
+ const resolvedFilter = this.filter ?? filter;
37
+ return buildProfilerPageQuery(buildProfilerBaseQuery({
38
+ columns: this.columns,
39
+ filter: resolvedFilter,
40
+ sorting: this.sorting,
41
+ tableName: this.tableName,
42
+ }), this.pagination);
43
+ }
44
+ queryResult(data) {
45
+ this.error = undefined;
46
+ this.pageTable = data;
47
+ this.onStateChange({
48
+ datasetId: this.datasetId,
49
+ isLoading: false,
50
+ pageTable: this.pageTable,
51
+ });
52
+ return this;
53
+ }
54
+ queryError(error) {
55
+ this.error = error;
56
+ this.onStateChange({
57
+ datasetId: this.datasetId,
58
+ error,
59
+ isLoading: false,
60
+ pageTable: this.pageTable,
61
+ });
62
+ return this;
63
+ }
64
+ }
65
+ //# sourceMappingURL=ProfilerPageClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfilerPageClient.js","sourceRoot":"","sources":["../../src/profiler/ProfilerPageClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAiB,MAAM,qBAAqB,CAAC;AAOjE,OAAO,EAAC,sBAAsB,EAAE,sBAAsB,EAAC,MAAM,SAAS,CAAC;AAkBvE,MAAM,OAAO,kBAAmB,SAAQ,YAAY;IACjC,OAAO,CAAW;IAClB,SAAS,CAAS;IAC3B,KAAK,CAAS;IACL,MAAM,CAAsC;IAC5C,aAAa,CAAqC;IAClD,UAAU,CAAgC;IACnD,SAAS,CAAS;IACT,OAAO,CAAwB;IAC/B,SAAS,CAAS;IAEnC,YAAY,OAAkC;QAC5C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACrC,CAAC;IAED,IAAa,YAAY;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IAEQ,YAAY;QACnB,IAAI,CAAC,aAAa,CAAC;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,KAAK,CAAC,SAA0B,EAAE;QACzC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC;QAC7C,OAAO,sBAAsB,CAC3B,sBAAsB,CAAC;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,cAAc;YACtB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,EACF,IAAI,CAAC,UAAU,CAChB,CAAC;IACJ,CAAC;IAEQ,WAAW,CAAC,IAAa;QAChC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,IAAa,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,UAAU,CAAC,KAAY;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,aAAa,CAAC;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK;YACL,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["import {MosaicClient, type Selection} from '@uwdata/mosaic-core';\nimport {type ExprNode, type Query} from '@uwdata/mosaic-sql';\nimport type {Table} from 'apache-arrow';\nimport type {\n MosaicProfilerPaginationState,\n MosaicProfilerSorting,\n} from './types';\nimport {buildProfilerBaseQuery, buildProfilerPageQuery} from './utils';\n\nexport type ProfilerPageState = {\n datasetId?: string;\n error?: Error;\n isLoading: boolean;\n pageTable?: Table;\n};\n\ntype ProfilerPageClientOptions = {\n columns: string[];\n filter?: ReturnType<Selection['predicate']>;\n onStateChange: (state: ProfilerPageState) => void;\n pagination: MosaicProfilerPaginationState;\n sorting: MosaicProfilerSorting;\n tableName: string;\n};\n\nexport class ProfilerPageClient extends MosaicClient {\n private readonly columns: string[];\n private readonly datasetId: string;\n private error?: Error;\n private readonly filter?: ReturnType<Selection['predicate']>;\n private readonly onStateChange: (state: ProfilerPageState) => void;\n private readonly pagination: MosaicProfilerPaginationState;\n private pageTable?: Table;\n private readonly sorting: MosaicProfilerSorting;\n private readonly tableName: string;\n\n constructor(options: ProfilerPageClientOptions) {\n super();\n this.columns = options.columns;\n this.datasetId = [options.tableName, ...options.columns].join('\\u0001');\n this.filter = options.filter ?? [];\n this.onStateChange = options.onStateChange;\n this.pagination = options.pagination;\n this.sorting = options.sorting;\n this.tableName = options.tableName;\n }\n\n override get filterStable(): boolean {\n return false;\n }\n\n override queryPending(): this {\n this.onStateChange({\n datasetId: this.datasetId,\n error: this.error,\n isLoading: true,\n pageTable: this.pageTable,\n });\n return this;\n }\n\n override query(filter: Array<ExprNode> = []): Query {\n const resolvedFilter = this.filter ?? filter;\n return buildProfilerPageQuery(\n buildProfilerBaseQuery({\n columns: this.columns,\n filter: resolvedFilter,\n sorting: this.sorting,\n tableName: this.tableName,\n }),\n this.pagination,\n );\n }\n\n override queryResult(data: unknown): this {\n this.error = undefined;\n this.pageTable = data as Table;\n this.onStateChange({\n datasetId: this.datasetId,\n isLoading: false,\n pageTable: this.pageTable,\n });\n return this;\n }\n\n override queryError(error: Error): this {\n this.error = error;\n this.onStateChange({\n datasetId: this.datasetId,\n error,\n isLoading: false,\n pageTable: this.pageTable,\n });\n return this;\n }\n}\n"]}
@@ -0,0 +1,24 @@
1
+ import { MosaicClient, type Selection } from '@uwdata/mosaic-core';
2
+ import { type ExprNode, type Query } from '@uwdata/mosaic-sql';
3
+ import type * as arrow from 'apache-arrow';
4
+ import type { MosaicProfilerUnsupportedSummary } from './types';
5
+ type UnsupportedSummaryClientOptions = {
6
+ field: arrow.Field;
7
+ onStateChange: (summary: MosaicProfilerUnsupportedSummary) => void;
8
+ selection: Selection;
9
+ tableName: string;
10
+ };
11
+ export declare class ProfilerUnsupportedSummaryClient extends MosaicClient {
12
+ private count;
13
+ private readonly field;
14
+ private readonly onStateChange;
15
+ private readonly tableName;
16
+ constructor(options: UnsupportedSummaryClientOptions);
17
+ get filterStable(): boolean;
18
+ queryPending(): this;
19
+ query(filter?: Array<ExprNode>): Query;
20
+ queryResult(data: unknown): this;
21
+ queryError(error: Error): this;
22
+ }
23
+ export {};
24
+ //# sourceMappingURL=ProfilerUnsupportedSummaryClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfilerUnsupportedSummaryClient.d.ts","sourceRoot":"","sources":["../../src/profiler/ProfilerUnsupportedSummaryClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,KAAK,SAAS,EAAC,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAC,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAC,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAC,gCAAgC,EAAC,MAAM,SAAS,CAAC;AAG9D,KAAK,+BAA+B,GAAG;IACrC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;IACnB,aAAa,EAAE,CAAC,OAAO,EAAE,gCAAgC,KAAK,IAAI,CAAC;IACnE,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,qBAAa,gCAAiC,SAAQ,YAAY;IAChE,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAEpB;IACV,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,OAAO,EAAE,+BAA+B;IAOpD,IAAa,YAAY,IAAI,OAAO,CAEnC;IAEQ,YAAY,IAAI,IAAI;IASpB,KAAK,CAAC,MAAM,GAAE,KAAK,CAAC,QAAQ,CAAM,GAAG,KAAK;IAQ1C,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAUhC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CASxC"}
@@ -0,0 +1,51 @@
1
+ import { MosaicClient } from '@uwdata/mosaic-core';
2
+ import { buildDistinctCountQuery, readCountData } from './utils';
3
+ export class ProfilerUnsupportedSummaryClient extends MosaicClient {
4
+ count = 0;
5
+ field;
6
+ onStateChange;
7
+ tableName;
8
+ constructor(options) {
9
+ super(options.selection);
10
+ this.field = options.field;
11
+ this.onStateChange = options.onStateChange;
12
+ this.tableName = options.tableName;
13
+ }
14
+ get filterStable() {
15
+ return false;
16
+ }
17
+ queryPending() {
18
+ this.onStateChange({
19
+ isLoading: true,
20
+ kind: 'unsupported',
21
+ label: `${this.count.toLocaleString()} distinct values`,
22
+ });
23
+ return this;
24
+ }
25
+ query(filter = []) {
26
+ return buildDistinctCountQuery({
27
+ fieldName: this.field.name,
28
+ filter,
29
+ tableName: this.tableName,
30
+ });
31
+ }
32
+ queryResult(data) {
33
+ this.count = readCountData(data) ?? 0;
34
+ this.onStateChange({
35
+ isLoading: false,
36
+ kind: 'unsupported',
37
+ label: `${this.count.toLocaleString()} distinct values`,
38
+ });
39
+ return this;
40
+ }
41
+ queryError(error) {
42
+ this.onStateChange({
43
+ error,
44
+ isLoading: false,
45
+ kind: 'unsupported',
46
+ label: `${this.count.toLocaleString()} distinct values`,
47
+ });
48
+ return this;
49
+ }
50
+ }
51
+ //# sourceMappingURL=ProfilerUnsupportedSummaryClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfilerUnsupportedSummaryClient.js","sourceRoot":"","sources":["../../src/profiler/ProfilerUnsupportedSummaryClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAiB,MAAM,qBAAqB,CAAC;AAIjE,OAAO,EAAC,uBAAuB,EAAE,aAAa,EAAC,MAAM,SAAS,CAAC;AAS/D,MAAM,OAAO,gCAAiC,SAAQ,YAAY;IACxD,KAAK,GAAG,CAAC,CAAC;IACD,KAAK,CAAc;IACnB,aAAa,CAEpB;IACO,SAAS,CAAS;IAEnC,YAAY,OAAwC;QAClD,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACrC,CAAC;IAED,IAAa,YAAY;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IAEQ,YAAY;QACnB,IAAI,CAAC,aAAa,CAAC;YACjB,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,kBAAkB;SACxD,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,KAAK,CAAC,SAA0B,EAAE;QACzC,OAAO,uBAAuB,CAAC;YAC7B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YAC1B,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;IACL,CAAC;IAEQ,WAAW,CAAC,IAAa;QAChC,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,aAAa,CAAC;YACjB,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,kBAAkB;SACxD,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,UAAU,CAAC,KAAY;QAC9B,IAAI,CAAC,aAAa,CAAC;YACjB,KAAK;YACL,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,kBAAkB;SACxD,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;CACF","sourcesContent":["import {MosaicClient, type Selection} from '@uwdata/mosaic-core';\nimport {type ExprNode, type Query} from '@uwdata/mosaic-sql';\nimport type * as arrow from 'apache-arrow';\nimport type {MosaicProfilerUnsupportedSummary} from './types';\nimport {buildDistinctCountQuery, readCountData} from './utils';\n\ntype UnsupportedSummaryClientOptions = {\n field: arrow.Field;\n onStateChange: (summary: MosaicProfilerUnsupportedSummary) => void;\n selection: Selection;\n tableName: string;\n};\n\nexport class ProfilerUnsupportedSummaryClient extends MosaicClient {\n private count = 0;\n private readonly field: arrow.Field;\n private readonly onStateChange: (\n summary: MosaicProfilerUnsupportedSummary,\n ) => void;\n private readonly tableName: string;\n\n constructor(options: UnsupportedSummaryClientOptions) {\n super(options.selection);\n this.field = options.field;\n this.onStateChange = options.onStateChange;\n this.tableName = options.tableName;\n }\n\n override get filterStable(): boolean {\n return false;\n }\n\n override queryPending(): this {\n this.onStateChange({\n isLoading: true,\n kind: 'unsupported',\n label: `${this.count.toLocaleString()} distinct values`,\n });\n return this;\n }\n\n override query(filter: Array<ExprNode> = []): Query {\n return buildDistinctCountQuery({\n fieldName: this.field.name,\n filter,\n tableName: this.tableName,\n });\n }\n\n override queryResult(data: unknown): this {\n this.count = readCountData(data) ?? 0;\n this.onStateChange({\n isLoading: false,\n kind: 'unsupported',\n label: `${this.count.toLocaleString()} distinct values`,\n });\n return this;\n }\n\n override queryError(error: Error): this {\n this.onStateChange({\n error,\n isLoading: false,\n kind: 'unsupported',\n label: `${this.count.toLocaleString()} distinct values`,\n });\n return this;\n }\n}\n"]}
@@ -0,0 +1,45 @@
1
+ import type * as arrow from 'apache-arrow';
2
+ import type { Dispatch, SetStateAction } from 'react';
3
+ import type { ProfilerCountState } from './ProfilerCountClient';
4
+ import type { ProfilerPageState } from './ProfilerPageClient';
5
+ import type { MosaicProfilerPaginationState, MosaicProfilerSorting, MosaicProfilerSummaryState } from './types';
6
+ export type ProfilerStoreState = {
7
+ filteredCount: ProfilerCountState;
8
+ lastNonEmptyPageTable?: {
9
+ datasetId: string;
10
+ pageTable: arrow.Table;
11
+ };
12
+ page: ProfilerPageState;
13
+ pagination: MosaicProfilerPaginationState;
14
+ schema: {
15
+ error?: Error;
16
+ fields: arrow.Field[];
17
+ isLoading: boolean;
18
+ };
19
+ setFilteredCount: (state: ProfilerCountState) => void;
20
+ setPage: (state: ProfilerPageState) => void;
21
+ setPagination: Dispatch<SetStateAction<MosaicProfilerPaginationState>>;
22
+ setSchemaError: (error?: Error) => void;
23
+ setSchemaLoading: (isLoading: boolean) => void;
24
+ setSchemaSuccess: (fields: arrow.Field[]) => void;
25
+ setSorting: Dispatch<SetStateAction<MosaicProfilerSorting>>;
26
+ setSummary: (fieldName: string, summary: MosaicProfilerSummaryState) => void;
27
+ setTotalCount: (state: ProfilerCountState) => void;
28
+ sorting: MosaicProfilerSorting;
29
+ summaries: Record<string, MosaicProfilerSummaryState>;
30
+ syncPageSize: (pageSize: number) => void;
31
+ totalCount: ProfilerCountState;
32
+ clearSummaries: () => void;
33
+ initializeSummaries: (fields: arrow.Field[]) => void;
34
+ resetPageIndex: () => void;
35
+ };
36
+ export type ProfilerStore = ReturnType<typeof createProfilerStore>;
37
+ /**
38
+ * Creates a profiler-local vanilla Zustand store that aggregates schema, row,
39
+ * count, and summary state for a single `useMosaicProfiler()` instance.
40
+ */
41
+ export declare function createProfilerStore(options: {
42
+ initialSorting?: MosaicProfilerSorting;
43
+ pageSize: number;
44
+ }): import("zustand").StoreApi<ProfilerStoreState>;
45
+ //# sourceMappingURL=createProfilerStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createProfilerStore.d.ts","sourceRoot":"","sources":["../../src/profiler/createProfilerStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAC,QAAQ,EAAE,cAAc,EAAC,MAAM,OAAO,CAAC;AAEpD,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EACV,6BAA6B,EAC7B,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,SAAS,CAAC;AAWjB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,kBAAkB,CAAC;IAClC,qBAAqB,CAAC,EAAE;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;KACxB,CAAC;IACF,IAAI,EAAE,iBAAiB,CAAC;IACxB,UAAU,EAAE,6BAA6B,CAAC;IAC1C,MAAM,EAAE;QACN,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,gBAAgB,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACtD,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,QAAQ,CAAC,cAAc,CAAC,6BAA6B,CAAC,CAAC,CAAC;IACvE,cAAc,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IACxC,gBAAgB,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,gBAAgB,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC;IAClD,UAAU,EAAE,QAAQ,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC5D,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,KAAK,IAAI,CAAC;IAC7E,aAAa,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACnD,OAAO,EAAE,qBAAqB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IACtD,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,mBAAmB,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC;IACrD,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEnE;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC3C,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,QAAQ,EAAE,MAAM,CAAC;CAClB,kDAyIA"}
@@ -0,0 +1,120 @@
1
+ import { castDraft, produce } from 'immer';
2
+ import { createStore } from 'zustand/vanilla';
3
+ import { createEmptySummaryState, normalizeProfilerPagination } from './utils';
4
+ function resolveSetStateAction(next, previous) {
5
+ // Preserve React-style setter semantics so hook callers can pass either
6
+ // a concrete value or an updater function to the local profiler store.
7
+ return typeof next === 'function'
8
+ ? next(previous)
9
+ : next;
10
+ }
11
+ /**
12
+ * Creates a profiler-local vanilla Zustand store that aggregates schema, row,
13
+ * count, and summary state for a single `useMosaicProfiler()` instance.
14
+ */
15
+ export function createProfilerStore(options) {
16
+ const { initialSorting = [], pageSize } = options;
17
+ return createStore((set) => ({
18
+ filteredCount: { isLoading: false },
19
+ lastNonEmptyPageTable: undefined,
20
+ page: { isLoading: false },
21
+ pagination: normalizeProfilerPagination({ pageIndex: 0, pageSize }),
22
+ schema: {
23
+ fields: [],
24
+ isLoading: false,
25
+ },
26
+ setFilteredCount: (nextState) => {
27
+ set((state) => produce(state, (draft) => {
28
+ draft.filteredCount = nextState;
29
+ }));
30
+ },
31
+ setPage: (nextState) => {
32
+ set((state) => produce(state, (draft) => {
33
+ draft.page = castDraft(nextState);
34
+ if (nextState.datasetId &&
35
+ nextState.pageTable &&
36
+ nextState.pageTable.numRows > 0) {
37
+ draft.lastNonEmptyPageTable = {
38
+ datasetId: nextState.datasetId,
39
+ pageTable: castDraft(nextState.pageTable),
40
+ };
41
+ }
42
+ }));
43
+ },
44
+ setPagination: (next) => {
45
+ set((state) => produce(state, (draft) => {
46
+ draft.pagination = normalizeProfilerPagination(resolveSetStateAction(next, state.pagination));
47
+ }));
48
+ },
49
+ setSchemaError: (error) => {
50
+ set((state) => produce(state, (draft) => {
51
+ draft.schema.error = error;
52
+ draft.schema.isLoading = false;
53
+ }));
54
+ },
55
+ setSchemaLoading: (isLoading) => {
56
+ set((state) => produce(state, (draft) => {
57
+ draft.schema.isLoading = isLoading;
58
+ if (isLoading) {
59
+ draft.schema.error = undefined;
60
+ }
61
+ }));
62
+ },
63
+ setSchemaSuccess: (fields) => {
64
+ set((state) => produce(state, (draft) => {
65
+ draft.schema.error = undefined;
66
+ draft.schema.fields = fields;
67
+ draft.schema.isLoading = false;
68
+ }));
69
+ },
70
+ setSorting: (next) => {
71
+ set((state) => produce(state, (draft) => {
72
+ draft.sorting = resolveSetStateAction(next, state.sorting);
73
+ draft.pagination.pageIndex = 0;
74
+ }));
75
+ },
76
+ setSummary: (fieldName, summary) => {
77
+ set((state) => produce(state, (draft) => {
78
+ draft.summaries[fieldName] = summary;
79
+ }));
80
+ },
81
+ setTotalCount: (nextState) => {
82
+ set((state) => produce(state, (draft) => {
83
+ draft.totalCount = nextState;
84
+ }));
85
+ },
86
+ sorting: initialSorting,
87
+ summaries: {},
88
+ syncPageSize: (nextPageSize) => {
89
+ set((state) => produce(state, (draft) => {
90
+ if (draft.pagination.pageSize === nextPageSize) {
91
+ return;
92
+ }
93
+ draft.pagination = normalizeProfilerPagination({
94
+ pageIndex: 0,
95
+ pageSize: nextPageSize,
96
+ });
97
+ }));
98
+ },
99
+ totalCount: { isLoading: false },
100
+ clearSummaries: () => {
101
+ set((state) => produce(state, (draft) => {
102
+ draft.summaries = {};
103
+ }));
104
+ },
105
+ initializeSummaries: (fields) => {
106
+ set((state) => produce(state, (draft) => {
107
+ draft.summaries = Object.fromEntries(fields.map((field) => [field.name, createEmptySummaryState(field)]));
108
+ }));
109
+ },
110
+ resetPageIndex: () => {
111
+ set((state) => produce(state, (draft) => {
112
+ draft.pagination = normalizeProfilerPagination({
113
+ ...draft.pagination,
114
+ pageIndex: 0,
115
+ });
116
+ }));
117
+ },
118
+ }));
119
+ }
120
+ //# sourceMappingURL=createProfilerStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createProfilerStore.js","sourceRoot":"","sources":["../../src/profiler/createProfilerStore.ts"],"names":[],"mappings":"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","sourcesContent":["import {castDraft, produce} from 'immer';\nimport type * as arrow from 'apache-arrow';\nimport type {Dispatch, SetStateAction} from 'react';\nimport {createStore} from 'zustand/vanilla';\nimport type {ProfilerCountState} from './ProfilerCountClient';\nimport type {ProfilerPageState} from './ProfilerPageClient';\nimport type {\n MosaicProfilerPaginationState,\n MosaicProfilerSorting,\n MosaicProfilerSummaryState,\n} from './types';\nimport {createEmptySummaryState, normalizeProfilerPagination} from './utils';\n\nfunction resolveSetStateAction<T>(next: SetStateAction<T>, previous: T): T {\n // Preserve React-style setter semantics so hook callers can pass either\n // a concrete value or an updater function to the local profiler store.\n return typeof next === 'function'\n ? (next as (value: T) => T)(previous)\n : next;\n}\n\nexport type ProfilerStoreState = {\n filteredCount: ProfilerCountState;\n lastNonEmptyPageTable?: {\n datasetId: string;\n pageTable: arrow.Table;\n };\n page: ProfilerPageState;\n pagination: MosaicProfilerPaginationState;\n schema: {\n error?: Error;\n fields: arrow.Field[];\n isLoading: boolean;\n };\n setFilteredCount: (state: ProfilerCountState) => void;\n setPage: (state: ProfilerPageState) => void;\n setPagination: Dispatch<SetStateAction<MosaicProfilerPaginationState>>;\n setSchemaError: (error?: Error) => void;\n setSchemaLoading: (isLoading: boolean) => void;\n setSchemaSuccess: (fields: arrow.Field[]) => void;\n setSorting: Dispatch<SetStateAction<MosaicProfilerSorting>>;\n setSummary: (fieldName: string, summary: MosaicProfilerSummaryState) => void;\n setTotalCount: (state: ProfilerCountState) => void;\n sorting: MosaicProfilerSorting;\n summaries: Record<string, MosaicProfilerSummaryState>;\n syncPageSize: (pageSize: number) => void;\n totalCount: ProfilerCountState;\n clearSummaries: () => void;\n initializeSummaries: (fields: arrow.Field[]) => void;\n resetPageIndex: () => void;\n};\n\nexport type ProfilerStore = ReturnType<typeof createProfilerStore>;\n\n/**\n * Creates a profiler-local vanilla Zustand store that aggregates schema, row,\n * count, and summary state for a single `useMosaicProfiler()` instance.\n */\nexport function createProfilerStore(options: {\n initialSorting?: MosaicProfilerSorting;\n pageSize: number;\n}) {\n const {initialSorting = [], pageSize} = options;\n\n return createStore<ProfilerStoreState>((set) => ({\n filteredCount: {isLoading: false},\n lastNonEmptyPageTable: undefined,\n page: {isLoading: false},\n pagination: normalizeProfilerPagination({pageIndex: 0, pageSize}),\n schema: {\n fields: [],\n isLoading: false,\n },\n setFilteredCount: (nextState) => {\n set((state) =>\n produce(state, (draft) => {\n draft.filteredCount = nextState;\n }),\n );\n },\n setPage: (nextState) => {\n set((state) =>\n produce(state, (draft) => {\n draft.page = castDraft(nextState);\n if (\n nextState.datasetId &&\n nextState.pageTable &&\n nextState.pageTable.numRows > 0\n ) {\n draft.lastNonEmptyPageTable = {\n datasetId: nextState.datasetId,\n pageTable: castDraft(nextState.pageTable),\n };\n }\n }),\n );\n },\n setPagination: (next) => {\n set((state) =>\n produce(state, (draft) => {\n draft.pagination = normalizeProfilerPagination(\n resolveSetStateAction(next, state.pagination),\n );\n }),\n );\n },\n setSchemaError: (error) => {\n set((state) =>\n produce(state, (draft) => {\n draft.schema.error = error;\n draft.schema.isLoading = false;\n }),\n );\n },\n setSchemaLoading: (isLoading) => {\n set((state) =>\n produce(state, (draft) => {\n draft.schema.isLoading = isLoading;\n if (isLoading) {\n draft.schema.error = undefined;\n }\n }),\n );\n },\n setSchemaSuccess: (fields) => {\n set((state) =>\n produce(state, (draft) => {\n draft.schema.error = undefined;\n draft.schema.fields = fields;\n draft.schema.isLoading = false;\n }),\n );\n },\n setSorting: (next) => {\n set((state) =>\n produce(state, (draft) => {\n draft.sorting = resolveSetStateAction(next, state.sorting);\n draft.pagination.pageIndex = 0;\n }),\n );\n },\n setSummary: (fieldName, summary) => {\n set((state) =>\n produce(state, (draft) => {\n draft.summaries[fieldName] = summary;\n }),\n );\n },\n setTotalCount: (nextState) => {\n set((state) =>\n produce(state, (draft) => {\n draft.totalCount = nextState;\n }),\n );\n },\n sorting: initialSorting,\n summaries: {},\n syncPageSize: (nextPageSize) => {\n set((state) =>\n produce(state, (draft) => {\n if (draft.pagination.pageSize === nextPageSize) {\n return;\n }\n draft.pagination = normalizeProfilerPagination({\n pageIndex: 0,\n pageSize: nextPageSize,\n });\n }),\n );\n },\n totalCount: {isLoading: false},\n clearSummaries: () => {\n set((state) =>\n produce(state, (draft) => {\n draft.summaries = {};\n }),\n );\n },\n initializeSummaries: (fields) => {\n set((state) =>\n produce(state, (draft) => {\n draft.summaries = Object.fromEntries(\n fields.map((field) => [field.name, createEmptySummaryState(field)]),\n );\n }),\n );\n },\n resetPageIndex: () => {\n set((state) =>\n produce(state, (draft) => {\n draft.pagination = normalizeProfilerPagination({\n ...draft.pagination,\n pageIndex: 0,\n });\n }),\n );\n },\n }));\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import type { MosaicProfilerColumnState } from './types';
2
+ export declare const PROFILER_ROW_NUMBER_COLUMN_WIDTH_PX = 40;
3
+ export declare const PROFILER_DEFAULT_COLUMN_WIDTH_PX = 140;
4
+ export declare const PROFILER_UNSUPPORTED_COLUMN_WIDTH_PX = 104;
5
+ export declare function getProfilerColumnWidthPx(column: MosaicProfilerColumnState): 140 | 104;
6
+ export declare function getProfilerTableWidth(columns: MosaicProfilerColumnState[]): number;
7
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/profiler/layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,yBAAyB,EAAC,MAAM,SAAS,CAAC;AAEvD,eAAO,MAAM,mCAAmC,KAAK,CAAC;AACtD,eAAO,MAAM,gCAAgC,MAAM,CAAC;AACpD,eAAO,MAAM,oCAAoC,MAAM,CAAC;AAExD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,yBAAyB,aAIzE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,yBAAyB,EAAE,UAQzE"}
@@ -0,0 +1,13 @@
1
+ export const PROFILER_ROW_NUMBER_COLUMN_WIDTH_PX = 40;
2
+ export const PROFILER_DEFAULT_COLUMN_WIDTH_PX = 140;
3
+ export const PROFILER_UNSUPPORTED_COLUMN_WIDTH_PX = 104;
4
+ export function getProfilerColumnWidthPx(column) {
5
+ return column.kind === 'unsupported'
6
+ ? PROFILER_UNSUPPORTED_COLUMN_WIDTH_PX
7
+ : PROFILER_DEFAULT_COLUMN_WIDTH_PX;
8
+ }
9
+ export function getProfilerTableWidth(columns) {
10
+ return (PROFILER_ROW_NUMBER_COLUMN_WIDTH_PX +
11
+ columns.reduce((total, column) => total + getProfilerColumnWidthPx(column), 0));
12
+ }
13
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/profiler/layout.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mCAAmC,GAAG,EAAE,CAAC;AACtD,MAAM,CAAC,MAAM,gCAAgC,GAAG,GAAG,CAAC;AACpD,MAAM,CAAC,MAAM,oCAAoC,GAAG,GAAG,CAAC;AAExD,MAAM,UAAU,wBAAwB,CAAC,MAAiC;IACxE,OAAO,MAAM,CAAC,IAAI,KAAK,aAAa;QAClC,CAAC,CAAC,oCAAoC;QACtC,CAAC,CAAC,gCAAgC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAoC;IACxE,OAAO,CACL,mCAAmC;QACnC,OAAO,CAAC,MAAM,CACZ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,GAAG,wBAAwB,CAAC,MAAM,CAAC,EAC3D,CAAC,CACF,CACF,CAAC;AACJ,CAAC","sourcesContent":["import type {MosaicProfilerColumnState} from './types';\n\nexport const PROFILER_ROW_NUMBER_COLUMN_WIDTH_PX = 40;\nexport const PROFILER_DEFAULT_COLUMN_WIDTH_PX = 140;\nexport const PROFILER_UNSUPPORTED_COLUMN_WIDTH_PX = 104;\n\nexport function getProfilerColumnWidthPx(column: MosaicProfilerColumnState) {\n return column.kind === 'unsupported'\n ? PROFILER_UNSUPPORTED_COLUMN_WIDTH_PX\n : PROFILER_DEFAULT_COLUMN_WIDTH_PX;\n}\n\nexport function getProfilerTableWidth(columns: MosaicProfilerColumnState[]) {\n return (\n PROFILER_ROW_NUMBER_COLUMN_WIDTH_PX +\n columns.reduce(\n (total, column) => total + getProfilerColumnWidthPx(column),\n 0,\n )\n );\n}\n"]}