@sqlrooms/mosaic 0.29.0-rc.7 → 0.29.0-rc.8

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 (344) hide show
  1. package/LICENSE.md +2 -1
  2. package/README.md +134 -0
  3. package/dist/MosaicSlice.d.ts +1 -0
  4. package/dist/MosaicSlice.d.ts.map +1 -1
  5. package/dist/MosaicSlice.js.map +1 -1
  6. package/dist/VgPlotChart.d.ts.map +1 -1
  7. package/dist/VgPlotChart.js +9 -3
  8. package/dist/VgPlotChart.js.map +1 -1
  9. package/dist/ai/ai.d.ts +9 -4
  10. package/dist/ai/ai.d.ts.map +1 -1
  11. package/dist/ai/ai.js +91 -49
  12. package/dist/ai/ai.js.map +1 -1
  13. package/dist/ai.d.ts.map +1 -1
  14. package/dist/ai.js.map +1 -1
  15. package/dist/charts/MosaicChart.d.ts +3 -1
  16. package/dist/charts/MosaicChart.d.ts.map +1 -1
  17. package/dist/charts/MosaicChart.js +2 -2
  18. package/dist/charts/MosaicChart.js.map +1 -1
  19. package/dist/charts/MosaicChartError.d.ts +8 -2
  20. package/dist/charts/MosaicChartError.d.ts.map +1 -1
  21. package/dist/charts/MosaicChartError.js +29 -3
  22. package/dist/charts/MosaicChartError.js.map +1 -1
  23. package/dist/charts/MosaicChartSettingsButton.d.ts +15 -0
  24. package/dist/charts/MosaicChartSettingsButton.d.ts.map +1 -0
  25. package/dist/charts/MosaicChartSettingsButton.js +7 -0
  26. package/dist/charts/MosaicChartSettingsButton.js.map +1 -0
  27. package/dist/charts/MosaicChartView.d.ts +2 -0
  28. package/dist/charts/MosaicChartView.d.ts.map +1 -1
  29. package/dist/charts/MosaicChartView.js +20 -7
  30. package/dist/charts/MosaicChartView.js.map +1 -1
  31. package/dist/charts/chart-settings/MosaicChartSettings.d.ts.map +1 -1
  32. package/dist/charts/chart-settings/MosaicChartSettings.js +3 -3
  33. package/dist/charts/chart-settings/MosaicChartSettings.js.map +1 -1
  34. package/dist/charts/chart-settings/MosaicChartSettingsPanel.js +1 -1
  35. package/dist/charts/chart-settings/MosaicChartSettingsPanel.js.map +1 -1
  36. package/dist/charts/chart-settings/MosaicChartTypeSelector.d.ts.map +1 -1
  37. package/dist/charts/chart-settings/MosaicChartTypeSelector.js +11 -4
  38. package/dist/charts/chart-settings/MosaicChartTypeSelector.js.map +1 -1
  39. package/dist/charts/chart-types/base-types.d.ts +17 -6
  40. package/dist/charts/chart-types/base-types.d.ts.map +1 -1
  41. package/dist/charts/chart-types/base-types.js +3 -0
  42. package/dist/charts/chart-types/base-types.js.map +1 -1
  43. package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.d.ts.map +1 -1
  44. package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.js +3 -8
  45. package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.js.map +1 -1
  46. package/dist/charts/chart-types/chart-config.d.ts +3 -1
  47. package/dist/charts/chart-types/chart-config.d.ts.map +1 -1
  48. package/dist/charts/chart-types/chart-config.js +2 -2
  49. package/dist/charts/chart-types/chart-config.js.map +1 -1
  50. package/dist/charts/chart-types/count-plot/spec.d.ts +2 -1
  51. package/dist/charts/chart-types/count-plot/spec.d.ts.map +1 -1
  52. package/dist/charts/chart-types/count-plot/spec.js +65 -34
  53. package/dist/charts/chart-types/count-plot/spec.js.map +1 -1
  54. package/dist/charts/chart-types/count-plot/tool.js +1 -1
  55. package/dist/charts/chart-types/count-plot/tool.js.map +1 -1
  56. package/dist/charts/chart-types/createDefaultChartTypes.js +2 -2
  57. package/dist/charts/chart-types/createDefaultChartTypes.js.map +1 -1
  58. package/dist/charts/chart-types/custom-spec/spec.d.ts +2 -1
  59. package/dist/charts/chart-types/custom-spec/spec.d.ts.map +1 -1
  60. package/dist/charts/chart-types/custom-spec/spec.js +16 -12
  61. package/dist/charts/chart-types/custom-spec/spec.js.map +1 -1
  62. package/dist/charts/chart-types/errors.d.ts +25 -0
  63. package/dist/charts/chart-types/errors.d.ts.map +1 -1
  64. package/dist/charts/chart-types/errors.js +38 -0
  65. package/dist/charts/chart-types/errors.js.map +1 -1
  66. package/dist/charts/chart-types/heatmap/spec.d.ts +2 -1
  67. package/dist/charts/chart-types/heatmap/spec.d.ts.map +1 -1
  68. package/dist/charts/chart-types/heatmap/spec.js +53 -21
  69. package/dist/charts/chart-types/heatmap/spec.js.map +1 -1
  70. package/dist/charts/chart-types/heatmap/tool.js +2 -2
  71. package/dist/charts/chart-types/heatmap/tool.js.map +1 -1
  72. package/dist/charts/chart-types/histogram/HistogramSettings.d.ts.map +1 -1
  73. package/dist/charts/chart-types/histogram/HistogramSettings.js +3 -1
  74. package/dist/charts/chart-types/histogram/HistogramSettings.js.map +1 -1
  75. package/dist/charts/chart-types/histogram/schema.d.ts +2 -0
  76. package/dist/charts/chart-types/histogram/schema.d.ts.map +1 -1
  77. package/dist/charts/chart-types/histogram/schema.js +1 -0
  78. package/dist/charts/chart-types/histogram/schema.js.map +1 -1
  79. package/dist/charts/chart-types/histogram/spec.d.ts +2 -1
  80. package/dist/charts/chart-types/histogram/spec.d.ts.map +1 -1
  81. package/dist/charts/chart-types/histogram/spec.js +50 -27
  82. package/dist/charts/chart-types/histogram/spec.js.map +1 -1
  83. package/dist/charts/chart-types/histogram/tool.d.ts +2 -0
  84. package/dist/charts/chart-types/histogram/tool.d.ts.map +1 -1
  85. package/dist/charts/chart-types/histogram/tool.js +1 -1
  86. package/dist/charts/chart-types/histogram/tool.js.map +1 -1
  87. package/dist/charts/chart-types/index.d.ts +4 -4
  88. package/dist/charts/chart-types/index.js +4 -4
  89. package/dist/charts/chart-types/index.js.map +1 -1
  90. package/dist/charts/chart-types/line-chart/LineChartSettings.d.ts.map +1 -1
  91. package/dist/charts/chart-types/line-chart/LineChartSettings.js +4 -13
  92. package/dist/charts/chart-types/line-chart/LineChartSettings.js.map +1 -1
  93. package/dist/charts/chart-types/line-chart/LineChartXFieldSelector.d.ts +7 -0
  94. package/dist/charts/chart-types/line-chart/LineChartXFieldSelector.d.ts.map +1 -0
  95. package/dist/charts/chart-types/line-chart/LineChartXFieldSelector.js +22 -0
  96. package/dist/charts/chart-types/line-chart/LineChartXFieldSelector.js.map +1 -0
  97. package/dist/charts/chart-types/line-chart/LineChartYFieldsSelector.d.ts +7 -0
  98. package/dist/charts/chart-types/line-chart/LineChartYFieldsSelector.d.ts.map +1 -0
  99. package/dist/charts/chart-types/line-chart/LineChartYFieldsSelector.js +42 -0
  100. package/dist/charts/chart-types/line-chart/LineChartYFieldsSelector.js.map +1 -0
  101. package/dist/charts/chart-types/line-chart/schema.d.ts +2 -0
  102. package/dist/charts/chart-types/line-chart/schema.d.ts.map +1 -1
  103. package/dist/charts/chart-types/line-chart/schema.js +5 -0
  104. package/dist/charts/chart-types/line-chart/schema.js.map +1 -1
  105. package/dist/charts/chart-types/line-chart/spec.d.ts +2 -1
  106. package/dist/charts/chart-types/line-chart/spec.d.ts.map +1 -1
  107. package/dist/charts/chart-types/line-chart/spec.js +97 -65
  108. package/dist/charts/chart-types/line-chart/spec.js.map +1 -1
  109. package/dist/charts/chart-types/line-chart/tool.d.ts +2 -0
  110. package/dist/charts/chart-types/line-chart/tool.d.ts.map +1 -1
  111. package/dist/charts/chart-types/line-chart/tool.js +1 -1
  112. package/dist/charts/chart-types/line-chart/tool.js.map +1 -1
  113. package/dist/charts/chart-types/line-chart/utils.d.ts +7 -0
  114. package/dist/charts/chart-types/line-chart/utils.d.ts.map +1 -0
  115. package/dist/charts/chart-types/line-chart/utils.js +17 -0
  116. package/dist/charts/chart-types/line-chart/utils.js.map +1 -0
  117. package/dist/charts/chart-types/mosaicChartTypes.d.ts +4 -2
  118. package/dist/charts/chart-types/mosaicChartTypes.d.ts.map +1 -1
  119. package/dist/charts/chart-types/mosaicChartTypes.js +2 -2
  120. package/dist/charts/chart-types/mosaicChartTypes.js.map +1 -1
  121. package/dist/charts/chart-types/scatter-plot/ScatterPlotSettings.d.ts +3 -0
  122. package/dist/charts/chart-types/scatter-plot/ScatterPlotSettings.d.ts.map +1 -0
  123. package/dist/charts/chart-types/{bubble-chart/BubbleChartSettings.js → scatter-plot/ScatterPlotSettings.js} +4 -4
  124. package/dist/charts/chart-types/scatter-plot/ScatterPlotSettings.js.map +1 -0
  125. package/dist/charts/chart-types/scatter-plot/definition.d.ts +4 -0
  126. package/dist/charts/chart-types/scatter-plot/definition.d.ts.map +1 -0
  127. package/dist/charts/chart-types/scatter-plot/definition.js +24 -0
  128. package/dist/charts/chart-types/scatter-plot/definition.js.map +1 -0
  129. package/dist/charts/chart-types/{bubble-chart → scatter-plot}/schema.d.ts +5 -5
  130. package/dist/charts/chart-types/scatter-plot/schema.d.ts.map +1 -0
  131. package/dist/charts/chart-types/{bubble-chart → scatter-plot}/schema.js +5 -5
  132. package/dist/charts/chart-types/scatter-plot/schema.js.map +1 -0
  133. package/dist/charts/chart-types/scatter-plot/spec.d.ts +5 -0
  134. package/dist/charts/chart-types/scatter-plot/spec.d.ts.map +1 -0
  135. package/dist/charts/chart-types/scatter-plot/spec.js +81 -0
  136. package/dist/charts/chart-types/scatter-plot/spec.js.map +1 -0
  137. package/dist/charts/chart-types/{bubble-chart → scatter-plot}/tool.d.ts +3 -3
  138. package/dist/charts/chart-types/{bubble-chart → scatter-plot}/tool.d.ts.map +1 -1
  139. package/dist/charts/chart-types/{bubble-chart → scatter-plot}/tool.js +17 -13
  140. package/dist/charts/chart-types/scatter-plot/tool.js.map +1 -0
  141. package/dist/charts/dashboard/MosaicDashboardChartHeaderActions.d.ts.map +1 -1
  142. package/dist/charts/dashboard/MosaicDashboardChartHeaderActions.js +12 -5
  143. package/dist/charts/dashboard/MosaicDashboardChartHeaderActions.js.map +1 -1
  144. package/dist/charts/dashboard/MosaicDashboardChartRenderer.d.ts.map +1 -1
  145. package/dist/charts/dashboard/MosaicDashboardChartRenderer.js +2 -2
  146. package/dist/charts/dashboard/MosaicDashboardChartRenderer.js.map +1 -1
  147. package/dist/charts/useChartDataPolicy.d.ts.map +1 -1
  148. package/dist/charts/useChartDataPolicy.js +2 -1
  149. package/dist/charts/useChartDataPolicy.js.map +1 -1
  150. package/dist/charts/useChartPanelClients.d.ts +8 -0
  151. package/dist/charts/useChartPanelClients.d.ts.map +1 -0
  152. package/dist/charts/useChartPanelClients.js +22 -0
  153. package/dist/charts/useChartPanelClients.js.map +1 -0
  154. package/dist/charts/useMosaicChartRenderContext.d.ts +2 -3
  155. package/dist/charts/useMosaicChartRenderContext.d.ts.map +1 -1
  156. package/dist/charts/useMosaicChartRenderContext.js +15 -15
  157. package/dist/charts/useMosaicChartRenderContext.js.map +1 -1
  158. package/dist/charts/worksheet/ChartBlockHeader.d.ts.map +1 -1
  159. package/dist/charts/worksheet/ChartBlockHeader.js +4 -3
  160. package/dist/charts/worksheet/ChartBlockHeader.js.map +1 -1
  161. package/dist/charts/worksheet/ChartBlockRenderer.d.ts.map +1 -1
  162. package/dist/charts/worksheet/ChartBlockRenderer.js +3 -13
  163. package/dist/charts/worksheet/ChartBlockRenderer.js.map +1 -1
  164. package/dist/column-types-utils.d.ts.map +1 -1
  165. package/dist/column-types-utils.js +12 -4
  166. package/dist/column-types-utils.js.map +1 -1
  167. package/dist/components/AggregationSelector.d.ts.map +1 -1
  168. package/dist/components/AggregationSelector.js +9 -2
  169. package/dist/components/AggregationSelector.js.map +1 -1
  170. package/dist/components/BlockCaptionEditor.d.ts +20 -0
  171. package/dist/components/BlockCaptionEditor.d.ts.map +1 -0
  172. package/dist/components/BlockCaptionEditor.js +15 -0
  173. package/dist/components/BlockCaptionEditor.js.map +1 -0
  174. package/dist/components/ColorSelector.d.ts +12 -0
  175. package/dist/components/ColorSelector.d.ts.map +1 -0
  176. package/dist/components/ColorSelector.js +14 -0
  177. package/dist/components/ColorSelector.js.map +1 -0
  178. package/dist/components/ColumnSelector.d.ts +1 -0
  179. package/dist/components/ColumnSelector.d.ts.map +1 -1
  180. package/dist/components/ColumnSelector.js +2 -2
  181. package/dist/components/ColumnSelector.js.map +1 -1
  182. package/dist/components/Combobox.d.ts +45 -0
  183. package/dist/components/Combobox.d.ts.map +1 -0
  184. package/dist/components/Combobox.js +58 -0
  185. package/dist/components/Combobox.js.map +1 -0
  186. package/dist/components/FieldSelectorInput.d.ts +1 -0
  187. package/dist/components/FieldSelectorInput.d.ts.map +1 -1
  188. package/dist/components/FieldSelectorInput.js +4 -9
  189. package/dist/components/FieldSelectorInput.js.map +1 -1
  190. package/dist/components/MultiFieldSelector.d.ts +4 -1
  191. package/dist/components/MultiFieldSelector.d.ts.map +1 -1
  192. package/dist/components/MultiFieldSelector.js +4 -13
  193. package/dist/components/MultiFieldSelector.js.map +1 -1
  194. package/dist/components/TemporalGranularitySelector.d.ts.map +1 -1
  195. package/dist/components/TemporalGranularitySelector.js +13 -9
  196. package/dist/components/TemporalGranularitySelector.js.map +1 -1
  197. package/dist/components/useCombobox.d.ts +23 -0
  198. package/dist/components/useCombobox.d.ts.map +1 -0
  199. package/dist/components/useCombobox.js +26 -0
  200. package/dist/components/useCombobox.js.map +1 -0
  201. package/dist/constants/chart-colors.d.ts +3 -0
  202. package/dist/constants/chart-colors.d.ts.map +1 -0
  203. package/dist/constants/chart-colors.js +5 -0
  204. package/dist/constants/chart-colors.js.map +1 -0
  205. package/dist/dashboard/DefaultMosaicDashboardBlock.d.ts +2 -1
  206. package/dist/dashboard/DefaultMosaicDashboardBlock.d.ts.map +1 -1
  207. package/dist/dashboard/DefaultMosaicDashboardBlock.js +1 -1
  208. package/dist/dashboard/DefaultMosaicDashboardBlock.js.map +1 -1
  209. package/dist/dashboard/MosaicDashboardSlice.d.ts +22 -4
  210. package/dist/dashboard/MosaicDashboardSlice.d.ts.map +1 -1
  211. package/dist/dashboard/MosaicDashboardSlice.js +55 -0
  212. package/dist/dashboard/MosaicDashboardSlice.js.map +1 -1
  213. package/dist/dashboard/components/ResetFiltersButton.d.ts +14 -0
  214. package/dist/dashboard/components/ResetFiltersButton.d.ts.map +1 -0
  215. package/dist/dashboard/components/ResetFiltersButton.js +15 -0
  216. package/dist/dashboard/components/ResetFiltersButton.js.map +1 -0
  217. package/dist/dashboard/dashboard-types.d.ts +9 -3
  218. package/dist/dashboard/dashboard-types.d.ts.map +1 -1
  219. package/dist/dashboard/hooks/useDashboardResetFilters.d.ts +14 -0
  220. package/dist/dashboard/hooks/useDashboardResetFilters.d.ts.map +1 -0
  221. package/dist/dashboard/hooks/useDashboardResetFilters.js +39 -0
  222. package/dist/dashboard/hooks/useDashboardResetFilters.js.map +1 -0
  223. package/dist/dashboard/hooks/usePanelResetFilters.d.ts +16 -0
  224. package/dist/dashboard/hooks/usePanelResetFilters.d.ts.map +1 -0
  225. package/dist/dashboard/hooks/usePanelResetFilters.js +47 -0
  226. package/dist/dashboard/hooks/usePanelResetFilters.js.map +1 -0
  227. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.d.ts.map +1 -1
  228. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.js +3 -3
  229. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.js.map +1 -1
  230. package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.d.ts +7 -0
  231. package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.d.ts.map +1 -0
  232. package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.js +18 -0
  233. package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.js.map +1 -0
  234. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.d.ts.map +1 -1
  235. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.js +4 -32
  236. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.js.map +1 -1
  237. package/dist/dashboard/toolbar/MosaicDashboardToolbar.d.ts +2 -2
  238. package/dist/dashboard/toolbar/MosaicDashboardToolbar.d.ts.map +1 -1
  239. package/dist/dashboard/toolbar/MosaicDashboardToolbar.js +12 -10
  240. package/dist/dashboard/toolbar/MosaicDashboardToolbar.js.map +1 -1
  241. package/dist/dashboard/usePanelClientRegistration.d.ts +7 -0
  242. package/dist/dashboard/usePanelClientRegistration.d.ts.map +1 -0
  243. package/dist/dashboard/usePanelClientRegistration.js +30 -0
  244. package/dist/dashboard/usePanelClientRegistration.js.map +1 -0
  245. package/dist/dashboard/usePanelClients.d.ts +7 -0
  246. package/dist/dashboard/usePanelClients.d.ts.map +1 -0
  247. package/dist/dashboard/usePanelClients.js +13 -0
  248. package/dist/dashboard/usePanelClients.js.map +1 -0
  249. package/dist/data-table-explorer/DataTableExplorer.d.ts +4 -2
  250. package/dist/data-table-explorer/DataTableExplorer.d.ts.map +1 -1
  251. package/dist/data-table-explorer/DataTableExplorer.js +4 -4
  252. package/dist/data-table-explorer/DataTableExplorer.js.map +1 -1
  253. package/dist/data-table-explorer/DataTableExplorerCategoryClient.d.ts.map +1 -1
  254. package/dist/data-table-explorer/DataTableExplorerCategoryClient.js +1 -0
  255. package/dist/data-table-explorer/DataTableExplorerCategoryClient.js.map +1 -1
  256. package/dist/data-table-explorer/createDataTableExplorerStore.d.ts +3 -0
  257. package/dist/data-table-explorer/createDataTableExplorerStore.d.ts.map +1 -1
  258. package/dist/data-table-explorer/createDataTableExplorerStore.js +6 -0
  259. package/dist/data-table-explorer/createDataTableExplorerStore.js.map +1 -1
  260. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerHeaderActions.d.ts +4 -0
  261. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerHeaderActions.d.ts.map +1 -0
  262. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerHeaderActions.js +13 -0
  263. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerHeaderActions.js.map +1 -0
  264. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.d.ts.map +1 -1
  265. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.js +22 -7
  266. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.js.map +1 -1
  267. package/dist/data-table-explorer/dashboard/useDataTableExplorerPanelClients.d.ts +13 -0
  268. package/dist/data-table-explorer/dashboard/useDataTableExplorerPanelClients.d.ts.map +1 -0
  269. package/dist/data-table-explorer/dashboard/useDataTableExplorerPanelClients.js +32 -0
  270. package/dist/data-table-explorer/dashboard/useDataTableExplorerPanelClients.js.map +1 -0
  271. package/dist/data-table-explorer/dataTableExplorerController.d.ts +5 -1
  272. package/dist/data-table-explorer/dataTableExplorerController.d.ts.map +1 -1
  273. package/dist/data-table-explorer/dataTableExplorerController.js +5 -2
  274. package/dist/data-table-explorer/dataTableExplorerController.js.map +1 -1
  275. package/dist/data-table-explorer/hooks/useDataTableExplorerColumns.d.ts +12 -0
  276. package/dist/data-table-explorer/hooks/useDataTableExplorerColumns.d.ts.map +1 -0
  277. package/dist/data-table-explorer/hooks/useDataTableExplorerColumns.js +19 -0
  278. package/dist/data-table-explorer/hooks/useDataTableExplorerColumns.js.map +1 -0
  279. package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.d.ts +30 -0
  280. package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.d.ts.map +1 -0
  281. package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.js +120 -0
  282. package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.js.map +1 -0
  283. package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.d.ts +28 -0
  284. package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.d.ts.map +1 -0
  285. package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.js +40 -0
  286. package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.js.map +1 -0
  287. package/dist/data-table-explorer/hooks/useDataTableExplorerSelection.d.ts +13 -0
  288. package/dist/data-table-explorer/hooks/useDataTableExplorerSelection.d.ts.map +1 -0
  289. package/dist/data-table-explorer/hooks/useDataTableExplorerSelection.js +40 -0
  290. package/dist/data-table-explorer/hooks/useDataTableExplorerSelection.js.map +1 -0
  291. package/dist/data-table-explorer/hooks/useDataTableExplorerStatus.d.ts +18 -0
  292. package/dist/data-table-explorer/hooks/useDataTableExplorerStatus.d.ts.map +1 -0
  293. package/dist/data-table-explorer/hooks/useDataTableExplorerStatus.js +23 -0
  294. package/dist/data-table-explorer/hooks/useDataTableExplorerStatus.js.map +1 -0
  295. package/dist/data-table-explorer/hooks/useDataTableExplorerStoreState.d.ts +27 -0
  296. package/dist/data-table-explorer/hooks/useDataTableExplorerStoreState.d.ts.map +1 -0
  297. package/dist/data-table-explorer/hooks/useDataTableExplorerStoreState.js +28 -0
  298. package/dist/data-table-explorer/hooks/useDataTableExplorerStoreState.js.map +1 -0
  299. package/dist/data-table-explorer/hooks/useDataTableExplorerVisiblePage.d.ts +15 -0
  300. package/dist/data-table-explorer/hooks/useDataTableExplorerVisiblePage.d.ts.map +1 -0
  301. package/dist/data-table-explorer/hooks/useDataTableExplorerVisiblePage.js +21 -0
  302. package/dist/data-table-explorer/hooks/useDataTableExplorerVisiblePage.js.map +1 -0
  303. package/dist/data-table-explorer/types.d.ts +6 -3
  304. package/dist/data-table-explorer/types.d.ts.map +1 -1
  305. package/dist/data-table-explorer/types.js.map +1 -1
  306. package/dist/data-table-explorer/useDataTableExplorer.d.ts.map +1 -1
  307. package/dist/data-table-explorer/useDataTableExplorer.js +12 -275
  308. package/dist/data-table-explorer/useDataTableExplorer.js.map +1 -1
  309. package/dist/data-table-explorer/worksheet/DataTableBlockHeader.d.ts +1 -0
  310. package/dist/data-table-explorer/worksheet/DataTableBlockHeader.d.ts.map +1 -1
  311. package/dist/data-table-explorer/worksheet/DataTableBlockHeader.js +4 -2
  312. package/dist/data-table-explorer/worksheet/DataTableBlockHeader.js.map +1 -1
  313. package/dist/data-table-explorer/worksheet/DataTableBlockRenderer.d.ts.map +1 -1
  314. package/dist/data-table-explorer/worksheet/DataTableBlockRenderer.js +3 -3
  315. package/dist/data-table-explorer/worksheet/DataTableBlockRenderer.js.map +1 -1
  316. package/dist/index.d.ts +8 -4
  317. package/dist/index.d.ts.map +1 -1
  318. package/dist/index.js +7 -3
  319. package/dist/index.js.map +1 -1
  320. package/dist/useVgPlotChartRender.d.ts.map +1 -1
  321. package/dist/useVgPlotChartRender.js +125 -24
  322. package/dist/useVgPlotChartRender.js.map +1 -1
  323. package/dist/useVgPlotChartRetention.d.ts +11 -0
  324. package/dist/useVgPlotChartRetention.d.ts.map +1 -1
  325. package/dist/useVgPlotChartRetention.js.map +1 -1
  326. package/package.json +14 -14
  327. package/dist/charts/chart-types/bubble-chart/BubbleChartSettings.d.ts +0 -3
  328. package/dist/charts/chart-types/bubble-chart/BubbleChartSettings.d.ts.map +0 -1
  329. package/dist/charts/chart-types/bubble-chart/BubbleChartSettings.js.map +0 -1
  330. package/dist/charts/chart-types/bubble-chart/definition.d.ts +0 -4
  331. package/dist/charts/chart-types/bubble-chart/definition.d.ts.map +0 -1
  332. package/dist/charts/chart-types/bubble-chart/definition.js +0 -24
  333. package/dist/charts/chart-types/bubble-chart/definition.js.map +0 -1
  334. package/dist/charts/chart-types/bubble-chart/schema.d.ts.map +0 -1
  335. package/dist/charts/chart-types/bubble-chart/schema.js.map +0 -1
  336. package/dist/charts/chart-types/bubble-chart/spec.d.ts +0 -4
  337. package/dist/charts/chart-types/bubble-chart/spec.d.ts.map +0 -1
  338. package/dist/charts/chart-types/bubble-chart/spec.js +0 -31
  339. package/dist/charts/chart-types/bubble-chart/spec.js.map +0 -1
  340. package/dist/charts/chart-types/bubble-chart/tool.js.map +0 -1
  341. package/dist/hooks/useDataTable.d.ts +0 -3
  342. package/dist/hooks/useDataTable.d.ts.map +0 -1
  343. package/dist/hooks/useDataTable.js +0 -28
  344. package/dist/hooks/useDataTable.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"createDataTableExplorerStore.js","sourceRoot":"","sources":["../../src/data-table-explorer/createDataTableExplorerStore.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 {DataTableExplorerCountState} from './DataTableExplorerCountClient';\nimport type {DataTableExplorerPageState} from './DataTableExplorerPageClient';\nimport type {\n DataTableExplorerPaginationState,\n DataTableExplorerSorting,\n DataTableExplorerSummaryState,\n} from './types';\nimport {\n createEmptySummaryState,\n normalizeDataTableExplorerPagination,\n} 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 dataTableExplorer store.\n return typeof next === 'function'\n ? (next as (value: T) => T)(previous)\n : next;\n}\n\nexport type DataTableExplorerStoreState = {\n filteredCount: DataTableExplorerCountState;\n lastNonEmptyPageTable?: {\n datasetId: string;\n pageTable: arrow.Table;\n };\n page: DataTableExplorerPageState;\n pagination: DataTableExplorerPaginationState;\n schema: {\n error?: Error;\n fields: arrow.Field[];\n isLoading: boolean;\n tableName?: string;\n };\n setFilteredCount: (state: DataTableExplorerCountState) => void;\n setPage: (state: DataTableExplorerPageState) => void;\n setPagination: Dispatch<SetStateAction<DataTableExplorerPaginationState>>;\n setSchemaError: (error?: Error, tableName?: string) => void;\n setSchemaLoading: (isLoading: boolean, tableName?: string) => void;\n setSchemaSuccess: (fields: arrow.Field[], tableName?: string) => void;\n setSorting: Dispatch<SetStateAction<DataTableExplorerSorting>>;\n setSummary: (\n fieldName: string,\n summary: DataTableExplorerSummaryState,\n ) => void;\n setTotalCount: (state: DataTableExplorerCountState) => void;\n sorting: DataTableExplorerSorting;\n summaries: Record<string, DataTableExplorerSummaryState>;\n syncPageSize: (pageSize: number) => void;\n totalCount: DataTableExplorerCountState;\n clearSummaries: () => void;\n initializeSummaries: (fields: arrow.Field[]) => void;\n resetPageIndex: () => void;\n};\n\nexport type DataTableExplorerStore = ReturnType<\n typeof createDataTableExplorerStore\n>;\n\n/**\n * Creates a dataTableExplorer-local vanilla Zustand store that aggregates schema, row,\n * count, and summary state for a single `useDataTableExplorer()` instance.\n */\nexport function createDataTableExplorerStore(options: {\n initialSorting?: DataTableExplorerSorting;\n pageSize: number;\n}) {\n const {initialSorting = [], pageSize} = options;\n\n return createStore<DataTableExplorerStoreState>((set) => ({\n filteredCount: {isLoading: false},\n lastNonEmptyPageTable: undefined,\n page: {isLoading: false},\n pagination: normalizeDataTableExplorerPagination({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 = normalizeDataTableExplorerPagination(\n resolveSetStateAction(next, state.pagination),\n );\n }),\n );\n },\n setSchemaError: (error, tableName) => {\n set((state) =>\n produce(state, (draft) => {\n draft.schema.error = error;\n draft.schema.isLoading = false;\n draft.schema.tableName = tableName;\n }),\n );\n },\n setSchemaLoading: (isLoading, tableName) => {\n set((state) =>\n produce(state, (draft) => {\n if (tableName !== undefined && draft.schema.tableName !== tableName) {\n draft.schema.fields = [];\n }\n draft.schema.isLoading = isLoading;\n draft.schema.tableName = tableName;\n if (isLoading) {\n draft.schema.error = undefined;\n }\n }),\n );\n },\n setSchemaSuccess: (fields, tableName) => {\n set((state) =>\n produce(state, (draft) => {\n draft.schema.error = undefined;\n draft.schema.fields = fields;\n draft.schema.isLoading = false;\n draft.schema.tableName = tableName;\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 = normalizeDataTableExplorerPagination({\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 = normalizeDataTableExplorerPagination({\n ...draft.pagination,\n pageIndex: 0,\n });\n }),\n );\n },\n }));\n}\n"]}
1
+ {"version":3,"file":"createDataTableExplorerStore.js","sourceRoot":"","sources":["../../src/data-table-explorer/createDataTableExplorerStore.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 {DataTableExplorerCountState} from './DataTableExplorerCountClient';\nimport type {DataTableExplorerPageState} from './DataTableExplorerPageClient';\nimport type {\n DataTableExplorerPaginationState,\n DataTableExplorerSorting,\n DataTableExplorerSummaryState,\n} from './types';\nimport {\n createEmptySummaryState,\n normalizeDataTableExplorerPagination,\n} 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 dataTableExplorer store.\n return typeof next === 'function'\n ? (next as (value: T) => T)(previous)\n : next;\n}\n\nimport type {MosaicClient} from '@uwdata/mosaic-core';\n\nexport type DataTableExplorerStoreState = {\n client: MosaicClient | null;\n filteredCount: DataTableExplorerCountState;\n lastNonEmptyPageTable?: {\n datasetId: string;\n pageTable: arrow.Table;\n };\n page: DataTableExplorerPageState;\n pagination: DataTableExplorerPaginationState;\n schema: {\n error?: Error;\n fields: arrow.Field[];\n isLoading: boolean;\n tableName?: string;\n };\n setClient: (client: MosaicClient | null) => void;\n setFilteredCount: (state: DataTableExplorerCountState) => void;\n setPage: (state: DataTableExplorerPageState) => void;\n setPagination: Dispatch<SetStateAction<DataTableExplorerPaginationState>>;\n setSchemaError: (error?: Error, tableName?: string) => void;\n setSchemaLoading: (isLoading: boolean, tableName?: string) => void;\n setSchemaSuccess: (fields: arrow.Field[], tableName?: string) => void;\n setSorting: Dispatch<SetStateAction<DataTableExplorerSorting>>;\n setSummary: (\n fieldName: string,\n summary: DataTableExplorerSummaryState,\n ) => void;\n setTotalCount: (state: DataTableExplorerCountState) => void;\n sorting: DataTableExplorerSorting;\n summaries: Record<string, DataTableExplorerSummaryState>;\n syncPageSize: (pageSize: number) => void;\n totalCount: DataTableExplorerCountState;\n clearSummaries: () => void;\n initializeSummaries: (fields: arrow.Field[]) => void;\n resetPageIndex: () => void;\n};\n\nexport type DataTableExplorerStore = ReturnType<\n typeof createDataTableExplorerStore\n>;\n\n/**\n * Creates a dataTableExplorer-local vanilla Zustand store that aggregates schema, row,\n * count, and summary state for a single `useDataTableExplorer()` instance.\n */\nexport function createDataTableExplorerStore(options: {\n initialSorting?: DataTableExplorerSorting;\n pageSize: number;\n}) {\n const {initialSorting = [], pageSize} = options;\n\n return createStore<DataTableExplorerStoreState>((set) => ({\n client: null,\n filteredCount: {isLoading: false},\n lastNonEmptyPageTable: undefined,\n page: {isLoading: false},\n pagination: normalizeDataTableExplorerPagination({pageIndex: 0, pageSize}),\n schema: {\n fields: [],\n isLoading: false,\n },\n setClient: (client) => {\n set((state) =>\n produce(state, (draft) => {\n draft.client = client as any;\n }),\n );\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 = normalizeDataTableExplorerPagination(\n resolveSetStateAction(next, state.pagination),\n );\n }),\n );\n },\n setSchemaError: (error, tableName) => {\n set((state) =>\n produce(state, (draft) => {\n draft.schema.error = error;\n draft.schema.isLoading = false;\n draft.schema.tableName = tableName;\n }),\n );\n },\n setSchemaLoading: (isLoading, tableName) => {\n set((state) =>\n produce(state, (draft) => {\n if (tableName !== undefined && draft.schema.tableName !== tableName) {\n draft.schema.fields = [];\n }\n draft.schema.isLoading = isLoading;\n draft.schema.tableName = tableName;\n if (isLoading) {\n draft.schema.error = undefined;\n }\n }),\n );\n },\n setSchemaSuccess: (fields, tableName) => {\n set((state) =>\n produce(state, (draft) => {\n draft.schema.error = undefined;\n draft.schema.fields = fields;\n draft.schema.isLoading = false;\n draft.schema.tableName = tableName;\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 = normalizeDataTableExplorerPagination({\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 = normalizeDataTableExplorerPagination({\n ...draft.pagination,\n pageIndex: 0,\n });\n }),\n );\n },\n }));\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import { type FC } from 'react';
2
+ import type { DataTableExplorerPanelRendererProps } from '../../dashboard/MosaicDashboardSlice';
3
+ export declare const MosaicDashboardDataTableExplorerHeaderActions: FC<DataTableExplorerPanelRendererProps>;
4
+ //# sourceMappingURL=MosaicDashboardDataTableExplorerHeaderActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardDataTableExplorerHeaderActions.d.ts","sourceRoot":"","sources":["../../../src/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerHeaderActions.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAC,MAAM,OAAO,CAAC;AAI9B,OAAO,KAAK,EAAC,mCAAmC,EAAC,MAAM,sCAAsC,CAAC;AAE9F,eAAO,MAAM,6CAA6C,EAAE,EAAE,CAC5D,mCAAmC,CAepC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { usePanelClients } from '../../dashboard/usePanelClients';
3
+ import { usePanelResetFilters } from '../../dashboard/hooks/usePanelResetFilters';
4
+ import { ResetFiltersButton } from '../../dashboard/components/ResetFiltersButton';
5
+ export const MosaicDashboardDataTableExplorerHeaderActions = ({ dashboardId, panel, selectionName }) => {
6
+ const panelClients = usePanelClients(dashboardId, panel.id);
7
+ const { hasActiveFilters, reset } = usePanelResetFilters({
8
+ panelClients,
9
+ selectionName,
10
+ });
11
+ return (_jsx(ResetFiltersButton, { disabled: !hasActiveFilters, onClick: reset, tooltip: "Reset panel filters" }));
12
+ };
13
+ //# sourceMappingURL=MosaicDashboardDataTableExplorerHeaderActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardDataTableExplorerHeaderActions.js","sourceRoot":"","sources":["../../../src/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerHeaderActions.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,eAAe,EAAC,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAC,oBAAoB,EAAC,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAC,kBAAkB,EAAC,MAAM,+CAA+C,CAAC;AAGjF,MAAM,CAAC,MAAM,6CAA6C,GAEtD,CAAC,EAAC,WAAW,EAAE,KAAK,EAAE,aAAa,EAAC,EAAE,EAAE;IAC1C,MAAM,YAAY,GAAG,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5D,MAAM,EAAC,gBAAgB,EAAE,KAAK,EAAC,GAAG,oBAAoB,CAAC;QACrD,YAAY;QACZ,aAAa;KACd,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,kBAAkB,IACjB,QAAQ,EAAE,CAAC,gBAAgB,EAC3B,OAAO,EAAE,KAAK,EACd,OAAO,EAAC,qBAAqB,GAC7B,CACH,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {type FC} from 'react';\nimport {usePanelClients} from '../../dashboard/usePanelClients';\nimport {usePanelResetFilters} from '../../dashboard/hooks/usePanelResetFilters';\nimport {ResetFiltersButton} from '../../dashboard/components/ResetFiltersButton';\nimport type {DataTableExplorerPanelRendererProps} from '../../dashboard/MosaicDashboardSlice';\n\nexport const MosaicDashboardDataTableExplorerHeaderActions: FC<\n DataTableExplorerPanelRendererProps\n> = ({dashboardId, panel, selectionName}) => {\n const panelClients = usePanelClients(dashboardId, panel.id);\n const {hasActiveFilters, reset} = usePanelResetFilters({\n panelClients,\n selectionName,\n });\n\n return (\n <ResetFiltersButton\n disabled={!hasActiveFilters}\n onClick={reset}\n tooltip=\"Reset panel filters\"\n />\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardDataTableExplorerPanelRenderer.d.ts","sourceRoot":"","sources":["../../../src/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EACL,KAAK,4BAA4B,EAGlC,MAAM,sCAAsC,CAAC;AAyD9C,eAAO,MAAM,6CAA6C,EAAE,4BAA4B,CAAC,sBAAsB,CAI5G,CAAC"}
1
+ {"version":3,"file":"MosaicDashboardDataTableExplorerPanelRenderer.d.ts","sourceRoot":"","sources":["../../../src/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EACL,KAAK,4BAA4B,EAGlC,MAAM,sCAAsC,CAAC;AA0F9C,eAAO,MAAM,6CAA6C,EAAE,4BAA4B,CAAC,sBAAsB,CAK5G,CAAC"}
@@ -3,26 +3,41 @@ import { SpinnerPane } from '@sqlrooms/ui';
3
3
  import { TablePropertiesIcon } from 'lucide-react';
4
4
  import { DataTableExplorer } from '../DataTableExplorer';
5
5
  import { useStoreWithMosaicDashboard, } from '../../dashboard/MosaicDashboardSlice';
6
- import { useDataTable } from '../../hooks/useDataTable';
7
- const MosaicDashboardDataTableExplorerRenderer = ({ panel, dashboard, selectionName }) => {
6
+ import { usePanelClientRegistration } from '../../dashboard/usePanelClientRegistration';
7
+ import { useDataTableExplorerPanelClients } from './useDataTableExplorerPanelClients';
8
+ import { useDataTable } from '@sqlrooms/db';
9
+ import { useDataTableExplorer } from '../useDataTableExplorer';
10
+ import { MosaicDashboardDataTableExplorerHeaderActions } from './MosaicDashboardDataTableExplorerHeaderActions';
11
+ const MosaicDashboardDataTableExplorerRendererInner = ({ panel, dashboard, selectionName, selectedTable }) => {
8
12
  const connection = useStoreWithMosaicDashboard((state) => state.mosaic.connection);
9
- const selectedTable = useDataTable(dashboard.selectedTable);
10
13
  const pageSize = typeof panel.config.pageSize === 'number'
11
14
  ? panel.config.pageSize
12
15
  : undefined;
13
- if (!selectedTable) {
14
- return (_jsx("div", { className: "text-muted-foreground flex h-full items-center justify-center p-4 text-sm", children: "Data Table Explorer panels require a table source." }));
15
- }
16
+ const explorer = useDataTableExplorer({
17
+ tableName: selectedTable.table,
18
+ pageSize: pageSize ?? 10,
19
+ selectionName,
20
+ });
21
+ const explorerClients = useDataTableExplorerPanelClients(explorer, selectedTable, connection.status);
22
+ usePanelClientRegistration(dashboard.id, panel.id, explorerClients);
16
23
  if (connection.status === 'loading') {
17
24
  return _jsx(SpinnerPane, { className: "h-full w-full" });
18
25
  }
19
26
  if (connection.status !== 'ready') {
20
27
  return (_jsx("div", { className: "text-muted-foreground flex h-full items-center justify-center p-4 text-sm", children: "Mosaic connection is not ready." }));
21
28
  }
22
- return (_jsx(DataTableExplorer, { tableName: selectedTable, pageSize: pageSize ?? 10, selectionName: selectionName, children: _jsxs("div", { className: "flex h-full min-h-0 flex-col", children: [_jsx("div", { className: "min-h-0 flex-1 overflow-auto", children: _jsxs(DataTableExplorer.Table, { children: [_jsx(DataTableExplorer.Header, {}), _jsx(DataTableExplorer.Rows, {})] }) }), _jsx(DataTableExplorer.StatusBar, {})] }) }));
29
+ return (_jsx(DataTableExplorer.Root, { explorer: explorer, children: _jsxs("div", { className: "flex h-full min-h-0 flex-col", children: [_jsx("div", { className: "min-h-0 flex-1 overflow-auto", children: _jsxs(DataTableExplorer.Table, { children: [_jsx(DataTableExplorer.Header, {}), _jsx(DataTableExplorer.Rows, {})] }) }), _jsx(DataTableExplorer.StatusBar, {})] }) }));
30
+ };
31
+ const MosaicDashboardDataTableExplorerRenderer = ({ panel, dashboard, selectionName }) => {
32
+ const selectedTable = useDataTable(dashboard.selectedTable);
33
+ if (!selectedTable) {
34
+ return (_jsx("div", { className: "text-muted-foreground flex h-full items-center justify-center p-4 text-sm", children: "Data Table Explorer panels require a table source." }));
35
+ }
36
+ return (_jsx(MosaicDashboardDataTableExplorerRendererInner, { panel: panel, dashboard: dashboard, selectionName: selectionName, selectedTable: selectedTable }));
23
37
  };
24
38
  export const mosaicDashboardDataTableExplorerPanelRenderer = {
25
39
  component: MosaicDashboardDataTableExplorerRenderer,
40
+ headerActions: MosaicDashboardDataTableExplorerHeaderActions,
26
41
  icon: TablePropertiesIcon,
27
42
  };
28
43
  //# sourceMappingURL=MosaicDashboardDataTableExplorerPanelRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardDataTableExplorerPanelRenderer.js","sourceRoot":"","sources":["../../../src/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,EAAC,mBAAmB,EAAC,MAAM,cAAc,CAAC;AACjD,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAGL,2BAA2B,GAC5B,MAAM,sCAAsC,CAAC;AAE9C,OAAO,EAAC,YAAY,EAAC,MAAM,0BAA0B,CAAC;AAEtD,MAAM,wCAAwC,GAE1C,CAAC,EAAC,KAAK,EAAE,SAAS,EAAE,aAAa,EAAC,EAAE,EAAE;IACxC,MAAM,UAAU,GAAG,2BAA2B,CAC5C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CACnC,CAAC;IAEF,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAE5D,MAAM,QAAQ,GACZ,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ;QACvC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ;QACvB,CAAC,CAAC,SAAS,CAAC;IAEhB,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CACL,cAAK,SAAS,EAAC,2EAA2E,mEAEpF,CACP,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,KAAC,WAAW,IAAC,SAAS,EAAC,eAAe,GAAG,CAAC;IACnD,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAClC,OAAO,CACL,cAAK,SAAS,EAAC,2EAA2E,gDAEpF,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,iBAAiB,IAChB,SAAS,EAAE,aAAa,EACxB,QAAQ,EAAE,QAAQ,IAAI,EAAE,EACxB,aAAa,EAAE,aAAa,YAE5B,eAAK,SAAS,EAAC,8BAA8B,aAC3C,cAAK,SAAS,EAAC,8BAA8B,YAC3C,MAAC,iBAAiB,CAAC,KAAK,eACtB,KAAC,iBAAiB,CAAC,MAAM,KAAG,EAC5B,KAAC,iBAAiB,CAAC,IAAI,KAAG,IACF,GACtB,EACN,KAAC,iBAAiB,CAAC,SAAS,KAAG,IAC3B,GACY,CACrB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,6CAA6C,GACxD;IACE,SAAS,EAAE,wCAAwC;IACnD,IAAI,EAAE,mBAAmB;CAC1B,CAAC","sourcesContent":["import {SpinnerPane} from '@sqlrooms/ui';\nimport {TablePropertiesIcon} from 'lucide-react';\nimport {DataTableExplorer} from '../DataTableExplorer';\nimport type {DataTableExplorerPanel} from '../../dashboard/dashboard-types';\nimport {\n type MosaicDashboardPanelRenderer,\n type DataTableExplorerPanelRendererProps,\n useStoreWithMosaicDashboard,\n} from '../../dashboard/MosaicDashboardSlice';\nimport {FC} from 'react';\nimport {useDataTable} from '../../hooks/useDataTable';\n\nconst MosaicDashboardDataTableExplorerRenderer: FC<\n DataTableExplorerPanelRendererProps\n> = ({panel, dashboard, selectionName}) => {\n const connection = useStoreWithMosaicDashboard(\n (state) => state.mosaic.connection,\n );\n\n const selectedTable = useDataTable(dashboard.selectedTable);\n\n const pageSize =\n typeof panel.config.pageSize === 'number'\n ? panel.config.pageSize\n : undefined;\n\n if (!selectedTable) {\n return (\n <div className=\"text-muted-foreground flex h-full items-center justify-center p-4 text-sm\">\n Data Table Explorer panels require a table source.\n </div>\n );\n }\n\n if (connection.status === 'loading') {\n return <SpinnerPane className=\"h-full w-full\" />;\n }\n\n if (connection.status !== 'ready') {\n return (\n <div className=\"text-muted-foreground flex h-full items-center justify-center p-4 text-sm\">\n Mosaic connection is not ready.\n </div>\n );\n }\n\n return (\n <DataTableExplorer\n tableName={selectedTable}\n pageSize={pageSize ?? 10}\n selectionName={selectionName}\n >\n <div className=\"flex h-full min-h-0 flex-col\">\n <div className=\"min-h-0 flex-1 overflow-auto\">\n <DataTableExplorer.Table>\n <DataTableExplorer.Header />\n <DataTableExplorer.Rows />\n </DataTableExplorer.Table>\n </div>\n <DataTableExplorer.StatusBar />\n </div>\n </DataTableExplorer>\n );\n};\n\nexport const mosaicDashboardDataTableExplorerPanelRenderer: MosaicDashboardPanelRenderer<DataTableExplorerPanel> =\n {\n component: MosaicDashboardDataTableExplorerRenderer,\n icon: TablePropertiesIcon,\n };\n"]}
1
+ {"version":3,"file":"MosaicDashboardDataTableExplorerPanelRenderer.js","sourceRoot":"","sources":["../../../src/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AACzC,OAAO,EAAC,mBAAmB,EAAC,MAAM,cAAc,CAAC;AACjD,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAGL,2BAA2B,GAC5B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAC,0BAA0B,EAAC,MAAM,4CAA4C,CAAC;AACtF,OAAO,EAAC,gCAAgC,EAAC,MAAM,oCAAoC,CAAC;AAEpF,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAC,oBAAoB,EAAC,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAC,6CAA6C,EAAC,MAAM,iDAAiD,CAAC;AAQ9G,MAAM,6CAA6C,GAE/C,CAAC,EAAC,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAC,EAAE,EAAE;IACvD,MAAM,UAAU,GAAG,2BAA2B,CAC5C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CACnC,CAAC;IAEF,MAAM,QAAQ,GACZ,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ;QACvC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ;QACvB,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,QAAQ,GAAG,oBAAoB,CAAC;QACpC,SAAS,EAAE,aAAa,CAAC,KAAK;QAC9B,QAAQ,EAAE,QAAQ,IAAI,EAAE;QACxB,aAAa;KACd,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,gCAAgC,CACtD,QAAQ,EACR,aAAa,EACb,UAAU,CAAC,MAAM,CAClB,CAAC;IAEF,0BAA0B,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;IAEpE,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,KAAC,WAAW,IAAC,SAAS,EAAC,eAAe,GAAG,CAAC;IACnD,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAClC,OAAO,CACL,cAAK,SAAS,EAAC,2EAA2E,gDAEpF,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,iBAAiB,CAAC,IAAI,IAAC,QAAQ,EAAE,QAAQ,YACxC,eAAK,SAAS,EAAC,8BAA8B,aAC3C,cAAK,SAAS,EAAC,8BAA8B,YAC3C,MAAC,iBAAiB,CAAC,KAAK,eACtB,KAAC,iBAAiB,CAAC,MAAM,KAAG,EAC5B,KAAC,iBAAiB,CAAC,IAAI,KAAG,IACF,GACtB,EACN,KAAC,iBAAiB,CAAC,SAAS,KAAG,IAC3B,GACiB,CAC1B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,wCAAwC,GAE1C,CAAC,EAAC,KAAK,EAAE,SAAS,EAAE,aAAa,EAAC,EAAE,EAAE;IACxC,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAE5D,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CACL,cAAK,SAAS,EAAC,2EAA2E,mEAEpF,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,6CAA6C,IAC5C,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,GAC5B,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,6CAA6C,GACxD;IACE,SAAS,EAAE,wCAAwC;IACnD,aAAa,EAAE,6CAA6C;IAC5D,IAAI,EAAE,mBAAmB;CAC1B,CAAC","sourcesContent":["import {SpinnerPane} from '@sqlrooms/ui';\nimport {TablePropertiesIcon} from 'lucide-react';\nimport {DataTableExplorer} from '../DataTableExplorer';\nimport type {DataTableExplorerPanel} from '../../dashboard/dashboard-types';\nimport {\n type MosaicDashboardPanelRenderer,\n type DataTableExplorerPanelRendererProps,\n useStoreWithMosaicDashboard,\n} from '../../dashboard/MosaicDashboardSlice';\nimport {usePanelClientRegistration} from '../../dashboard/usePanelClientRegistration';\nimport {useDataTableExplorerPanelClients} from './useDataTableExplorerPanelClients';\nimport {FC} from 'react';\nimport {useDataTable} from '@sqlrooms/db';\nimport {useDataTableExplorer} from '../useDataTableExplorer';\nimport {MosaicDashboardDataTableExplorerHeaderActions} from './MosaicDashboardDataTableExplorerHeaderActions';\nimport type {DataTable} from '@sqlrooms/db';\n\ntype MosaicDashboardDataTableExplorerRendererInnerProps = Omit<\n DataTableExplorerPanelRendererProps,\n 'dashboardId'\n> & {selectedTable: DataTable};\n\nconst MosaicDashboardDataTableExplorerRendererInner: FC<\n MosaicDashboardDataTableExplorerRendererInnerProps\n> = ({panel, dashboard, selectionName, selectedTable}) => {\n const connection = useStoreWithMosaicDashboard(\n (state) => state.mosaic.connection,\n );\n\n const pageSize =\n typeof panel.config.pageSize === 'number'\n ? panel.config.pageSize\n : undefined;\n\n const explorer = useDataTableExplorer({\n tableName: selectedTable.table,\n pageSize: pageSize ?? 10,\n selectionName,\n });\n\n const explorerClients = useDataTableExplorerPanelClients(\n explorer,\n selectedTable,\n connection.status,\n );\n\n usePanelClientRegistration(dashboard.id, panel.id, explorerClients);\n\n if (connection.status === 'loading') {\n return <SpinnerPane className=\"h-full w-full\" />;\n }\n\n if (connection.status !== 'ready') {\n return (\n <div className=\"text-muted-foreground flex h-full items-center justify-center p-4 text-sm\">\n Mosaic connection is not ready.\n </div>\n );\n }\n\n return (\n <DataTableExplorer.Root explorer={explorer}>\n <div className=\"flex h-full min-h-0 flex-col\">\n <div className=\"min-h-0 flex-1 overflow-auto\">\n <DataTableExplorer.Table>\n <DataTableExplorer.Header />\n <DataTableExplorer.Rows />\n </DataTableExplorer.Table>\n </div>\n <DataTableExplorer.StatusBar />\n </div>\n </DataTableExplorer.Root>\n );\n};\n\nconst MosaicDashboardDataTableExplorerRenderer: FC<\n DataTableExplorerPanelRendererProps\n> = ({panel, dashboard, selectionName}) => {\n const selectedTable = useDataTable(dashboard.selectedTable);\n\n if (!selectedTable) {\n return (\n <div className=\"text-muted-foreground flex h-full items-center justify-center p-4 text-sm\">\n Data Table Explorer panels require a table source.\n </div>\n );\n }\n\n return (\n <MosaicDashboardDataTableExplorerRendererInner\n panel={panel}\n dashboard={dashboard}\n selectionName={selectionName}\n selectedTable={selectedTable}\n />\n );\n};\n\nexport const mosaicDashboardDataTableExplorerPanelRenderer: MosaicDashboardPanelRenderer<DataTableExplorerPanel> =\n {\n component: MosaicDashboardDataTableExplorerRenderer,\n headerActions: MosaicDashboardDataTableExplorerHeaderActions,\n icon: TablePropertiesIcon,\n };\n"]}
@@ -0,0 +1,13 @@
1
+ import { type MosaicClient } from '@uwdata/mosaic-core';
2
+ import type { UseDataTableExplorerReturn } from '../types';
3
+ import type { ConnectionStatus } from '../../MosaicSlice';
4
+ import { DataTable } from '@sqlrooms/db';
5
+ /**
6
+ * Extracts all Mosaic clients from a DataTableExplorer instance for panel client registration.
7
+ * This includes:
8
+ * - The main count client (tracks filtered row count)
9
+ * - Histogram interactors (for histogram column interactions)
10
+ * - Category clients (for category column interactions)
11
+ */
12
+ export declare function useDataTableExplorerPanelClients(explorer: UseDataTableExplorerReturn, selectedTable: DataTable | undefined, connectionStatus: ConnectionStatus): MosaicClient[];
13
+ //# sourceMappingURL=useDataTableExplorerPanelClients.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataTableExplorerPanelClients.d.ts","sourceRoot":"","sources":["../../../src/data-table-explorer/dashboard/useDataTableExplorerPanelClients.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAEtD,OAAO,KAAK,EAAC,0BAA0B,EAAC,MAAM,UAAU,CAAC;AACzD,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAEvC;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,0BAA0B,EACpC,aAAa,EAAE,SAAS,GAAG,SAAS,EACpC,gBAAgB,EAAE,gBAAgB,GACjC,YAAY,EAAE,CAyBhB"}
@@ -0,0 +1,32 @@
1
+ import { useMemo } from 'react';
2
+ /**
3
+ * Extracts all Mosaic clients from a DataTableExplorer instance for panel client registration.
4
+ * This includes:
5
+ * - The main count client (tracks filtered row count)
6
+ * - Histogram interactors (for histogram column interactions)
7
+ * - Category clients (for category column interactions)
8
+ */
9
+ export function useDataTableExplorerPanelClients(explorer, selectedTable, connectionStatus) {
10
+ return useMemo(() => {
11
+ if (!selectedTable || connectionStatus !== 'ready') {
12
+ return [];
13
+ }
14
+ const clients = [];
15
+ // Add main count client
16
+ if (explorer.client) {
17
+ clients.push(explorer.client);
18
+ }
19
+ // Add summary clients (histogram interactors and category clients)
20
+ explorer.columns.forEach((col) => {
21
+ const summary = col.summary;
22
+ if (summary.kind === 'histogram' && summary.interactor) {
23
+ clients.push(summary.interactor);
24
+ }
25
+ else if (summary.kind === 'category' && summary.client) {
26
+ clients.push(summary.client);
27
+ }
28
+ });
29
+ return clients;
30
+ }, [connectionStatus, explorer.client, explorer.columns, selectedTable]);
31
+ }
32
+ //# sourceMappingURL=useDataTableExplorerPanelClients.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataTableExplorerPanelClients.js","sourceRoot":"","sources":["../../../src/data-table-explorer/dashboard/useDataTableExplorerPanelClients.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAK9B;;;;;;GAMG;AACH,MAAM,UAAU,gCAAgC,CAC9C,QAAoC,EACpC,aAAoC,EACpC,gBAAkC;IAElC,OAAO,OAAO,CAAiB,GAAG,EAAE;QAClC,IAAI,CAAC,aAAa,IAAI,gBAAgB,KAAK,OAAO,EAAE,CAAC;YACnD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,OAAO,GAAmB,EAAE,CAAC;QAEnC,wBAAwB;QACxB,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAED,mEAAmE;QACnE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;YAC5B,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAqC,CAAC,CAAC;YAC9D,CAAC;iBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACzD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC,EAAE,CAAC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;AAC3E,CAAC","sourcesContent":["import {type MosaicClient} from '@uwdata/mosaic-core';\nimport {useMemo} from 'react';\nimport type {UseDataTableExplorerReturn} from '../types';\nimport type {ConnectionStatus} from '../../MosaicSlice';\nimport {DataTable} from '@sqlrooms/db';\n\n/**\n * Extracts all Mosaic clients from a DataTableExplorer instance for panel client registration.\n * This includes:\n * - The main count client (tracks filtered row count)\n * - Histogram interactors (for histogram column interactions)\n * - Category clients (for category column interactions)\n */\nexport function useDataTableExplorerPanelClients(\n explorer: UseDataTableExplorerReturn,\n selectedTable: DataTable | undefined,\n connectionStatus: ConnectionStatus,\n): MosaicClient[] {\n return useMemo<MosaicClient[]>(() => {\n if (!selectedTable || connectionStatus !== 'ready') {\n return [];\n }\n\n const clients: MosaicClient[] = [];\n\n // Add main count client\n if (explorer.client) {\n clients.push(explorer.client);\n }\n\n // Add summary clients (histogram interactors and category clients)\n explorer.columns.forEach((col) => {\n const summary = col.summary;\n if (summary.kind === 'histogram' && summary.interactor) {\n clients.push(summary.interactor as unknown as MosaicClient);\n } else if (summary.kind === 'category' && summary.client) {\n clients.push(summary.client);\n }\n });\n\n return clients;\n }, [connectionStatus, explorer.client, explorer.columns, selectedTable]);\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  import type { MosaicClient, Selection } from '@uwdata/mosaic-core';
2
2
  import { queryFieldInfo } from '@uwdata/mosaic-core';
3
3
  import type * as arrow from 'apache-arrow';
4
+ import { DataTableExplorerCountClient } from './DataTableExplorerCountClient';
4
5
  import type { DataTableExplorerSorting } from './types';
5
6
  import type { DataTableExplorerStore } from './createDataTableExplorerStore';
6
7
  /**
@@ -46,7 +47,10 @@ export declare function connectDataTableExplorerCountClient(options: {
46
47
  store: DataTableExplorerStore;
47
48
  tableName: string;
48
49
  target: 'filtered' | 'total';
49
- }): () => void;
50
+ }): {
51
+ client: DataTableExplorerCountClient;
52
+ cleanup: () => void;
53
+ };
50
54
  /**
51
55
  * Connects all per-column summary clients for the active schema and initializes
52
56
  * matching empty summary state in the dataTableExplorer store.
@@ -1 +1 @@
1
- {"version":3,"file":"dataTableExplorerController.d.ts","sourceRoot":"","sources":["../../src/data-table-explorer/dataTableExplorerController.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,EAEV,wBAAwB,EACzB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,gCAAgC,CAAC;AAY3E;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,OAAO,EAAE;IACzD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,KAAK,EAAE,sBAAsB,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB,iBAqBA;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,kCAAkC,CAAC,OAAO,EAAE;IAC1D,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,wBAAwB,CAAC;IAClC,KAAK,EAAE,sBAAsB,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB,cAeA;AAED;;;GAGG;AACH,wBAAgB,mCAAmC,CAAC,OAAO,EAAE;IAC3D,UAAU,EAAE,eAAe,CAAC;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,EAAE,sBAAsB,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;CAC9B,cAkBA;AAED;;;GAGG;AACH,wBAAgB,sCAAsC,CAAC,OAAO,EAAE;IAC9D,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,sBAAsB,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,cAwEA"}
1
+ {"version":3,"file":"dataTableExplorerController.d.ts","sourceRoot":"","sources":["../../src/data-table-explorer/dataTableExplorerController.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;AAK3C,OAAO,EAAC,4BAA4B,EAAC,MAAM,gCAAgC,CAAC;AAO5E,OAAO,KAAK,EAEV,wBAAwB,EACzB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,gCAAgC,CAAC;AAY3E;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,OAAO,EAAE;IACzD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,KAAK,EAAE,sBAAsB,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB,iBAqBA;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,kCAAkC,CAAC,OAAO,EAAE;IAC1D,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,wBAAwB,CAAC;IAClC,KAAK,EAAE,sBAAsB,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB,cAeA;AAED;;;GAGG;AACH,wBAAgB,mCAAmC,CAAC,OAAO,EAAE;IAC3D,UAAU,EAAE,eAAe,CAAC;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,EAAE,sBAAsB,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;CAC9B;;;EAqBA;AAED;;;GAGG;AACH,wBAAgB,sCAAsC,CAAC,OAAO,EAAE;IAC9D,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,sBAAsB,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,cAwEA"}
@@ -61,8 +61,11 @@ export function connectDataTableExplorerCountClient(options) {
61
61
  tableName: options.tableName,
62
62
  });
63
63
  options.connection.coordinator.connect(client);
64
- return () => {
65
- client.destroy();
64
+ return {
65
+ client,
66
+ cleanup: () => {
67
+ client.destroy();
68
+ },
66
69
  };
67
70
  }
68
71
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"dataTableExplorerController.js","sourceRoot":"","sources":["../../src/data-table-explorer/dataTableExplorerController.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 DataTableExplorerCategoryClient,\n DataTableExplorerCategoryTotalClient,\n} from './DataTableExplorerCategoryClient';\nimport {DataTableExplorerCountClient} from './DataTableExplorerCountClient';\nimport {\n DataTableExplorerHistogramClient,\n DataTableExplorerHistogramTotalClient,\n} from './DataTableExplorerHistogramClient';\nimport {DataTableExplorerPageClient} from './DataTableExplorerPageClient';\nimport {DataTableExplorerUnsupportedSummaryClient} from './DataTableExplorerUnsupportedSummaryClient';\nimport type {\n DataTableExplorerSummaryState,\n DataTableExplorerSorting,\n} from './types';\nimport type {DataTableExplorerStore} from './createDataTableExplorerStore';\nimport {\n fieldInfoToDataTableExplorerField,\n getDataTableExplorerValueType,\n isDataTableExplorerHistogramType,\n isDataTableExplorerUnsupportedSummaryType,\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 dataTableExplorer table and writes the normalized field\n * definitions into the dataTableExplorer store.\n */\nexport async function loadDataTableExplorerSchema(options: {\n columns?: string[];\n coordinator: Parameters<typeof queryFieldInfo>[0];\n store: DataTableExplorerStore;\n tableName: string;\n}) {\n const {columns, coordinator, store, tableName} = options;\n store.getState().setSchemaLoading(true, tableName);\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\n .getState()\n .setSchemaSuccess(\n fieldInfo.map(fieldInfoToDataTableExplorerField),\n tableName,\n );\n } catch (error: unknown) {\n store.getState().setSchemaSuccess([], tableName);\n store.getState().setSchemaError(toError(error), tableName);\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 dataTableExplorer page and disconnects\n * it when the caller tears down the lifecycle.\n */\nexport function connectDataTableExplorerPageClient(options: {\n connection: ReadyConnection;\n fieldNames: string[];\n filter?: ReturnType<Selection['predicate']>;\n pagination: {pageIndex: number; pageSize: number};\n sorting: DataTableExplorerSorting;\n store: DataTableExplorerStore;\n tableName: string;\n}) {\n const client = new DataTableExplorerPageClient({\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 client.destroy();\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 connectDataTableExplorerCountClient(options: {\n connection: ReadyConnection;\n filterStable?: boolean;\n selection?: Selection;\n store: DataTableExplorerStore;\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 DataTableExplorerCountClient({\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 client.destroy();\n };\n}\n\n/**\n * Connects all per-column summary clients for the active schema and initializes\n * matching empty summary state in the dataTableExplorer store.\n */\nexport function connectDataTableExplorerSummaryClients(options: {\n categoryLimit: number;\n connection: ReadyConnection;\n fields: arrow.Field[];\n selection: Selection;\n store: DataTableExplorerStore;\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: DataTableExplorerSummaryState) => {\n store.getState().setSummary(field.name, summary);\n };\n\n if (isDataTableExplorerUnsupportedSummaryType(field.type)) {\n return [\n new DataTableExplorerUnsupportedSummaryClient({\n field,\n onStateChange: update,\n selection,\n tableName,\n }),\n ];\n }\n\n if (isDataTableExplorerHistogramType(field.type)) {\n const summaryClient = new DataTableExplorerHistogramClient({\n field,\n onStateChange: update,\n selection,\n steps: summaryBins,\n tableName,\n valueType:\n getDataTableExplorerValueType(field.type) === 'date'\n ? 'date'\n : 'number',\n });\n\n return [\n summaryClient,\n new DataTableExplorerHistogramTotalClient({\n summaryClient,\n }),\n ];\n }\n\n const summaryClient = new DataTableExplorerCategoryClient({\n categoryLimit,\n field,\n onStateChange: update,\n selection,\n tableName,\n });\n\n return [\n summaryClient,\n new DataTableExplorerCategoryTotalClient({\n summaryClient,\n }),\n ];\n });\n\n clients.forEach((client) => connection.coordinator.connect(client));\n\n return () => {\n clients.forEach((client) => client.destroy());\n store.getState().clearSummaries();\n };\n}\n"]}
1
+ {"version":3,"file":"dataTableExplorerController.js","sourceRoot":"","sources":["../../src/data-table-explorer/dataTableExplorerController.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 DataTableExplorerCategoryClient,\n DataTableExplorerCategoryTotalClient,\n} from './DataTableExplorerCategoryClient';\nimport {DataTableExplorerCountClient} from './DataTableExplorerCountClient';\nimport {\n DataTableExplorerHistogramClient,\n DataTableExplorerHistogramTotalClient,\n} from './DataTableExplorerHistogramClient';\nimport {DataTableExplorerPageClient} from './DataTableExplorerPageClient';\nimport {DataTableExplorerUnsupportedSummaryClient} from './DataTableExplorerUnsupportedSummaryClient';\nimport type {\n DataTableExplorerSummaryState,\n DataTableExplorerSorting,\n} from './types';\nimport type {DataTableExplorerStore} from './createDataTableExplorerStore';\nimport {\n fieldInfoToDataTableExplorerField,\n getDataTableExplorerValueType,\n isDataTableExplorerHistogramType,\n isDataTableExplorerUnsupportedSummaryType,\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 dataTableExplorer table and writes the normalized field\n * definitions into the dataTableExplorer store.\n */\nexport async function loadDataTableExplorerSchema(options: {\n columns?: string[];\n coordinator: Parameters<typeof queryFieldInfo>[0];\n store: DataTableExplorerStore;\n tableName: string;\n}) {\n const {columns, coordinator, store, tableName} = options;\n store.getState().setSchemaLoading(true, tableName);\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\n .getState()\n .setSchemaSuccess(\n fieldInfo.map(fieldInfoToDataTableExplorerField),\n tableName,\n );\n } catch (error: unknown) {\n store.getState().setSchemaSuccess([], tableName);\n store.getState().setSchemaError(toError(error), tableName);\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 dataTableExplorer page and disconnects\n * it when the caller tears down the lifecycle.\n */\nexport function connectDataTableExplorerPageClient(options: {\n connection: ReadyConnection;\n fieldNames: string[];\n filter?: ReturnType<Selection['predicate']>;\n pagination: {pageIndex: number; pageSize: number};\n sorting: DataTableExplorerSorting;\n store: DataTableExplorerStore;\n tableName: string;\n}) {\n const client = new DataTableExplorerPageClient({\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 client.destroy();\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 connectDataTableExplorerCountClient(options: {\n connection: ReadyConnection;\n filterStable?: boolean;\n selection?: Selection;\n store: DataTableExplorerStore;\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 DataTableExplorerCountClient({\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 client,\n cleanup: () => {\n client.destroy();\n },\n };\n}\n\n/**\n * Connects all per-column summary clients for the active schema and initializes\n * matching empty summary state in the dataTableExplorer store.\n */\nexport function connectDataTableExplorerSummaryClients(options: {\n categoryLimit: number;\n connection: ReadyConnection;\n fields: arrow.Field[];\n selection: Selection;\n store: DataTableExplorerStore;\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: DataTableExplorerSummaryState) => {\n store.getState().setSummary(field.name, summary);\n };\n\n if (isDataTableExplorerUnsupportedSummaryType(field.type)) {\n return [\n new DataTableExplorerUnsupportedSummaryClient({\n field,\n onStateChange: update,\n selection,\n tableName,\n }),\n ];\n }\n\n if (isDataTableExplorerHistogramType(field.type)) {\n const summaryClient = new DataTableExplorerHistogramClient({\n field,\n onStateChange: update,\n selection,\n steps: summaryBins,\n tableName,\n valueType:\n getDataTableExplorerValueType(field.type) === 'date'\n ? 'date'\n : 'number',\n });\n\n return [\n summaryClient,\n new DataTableExplorerHistogramTotalClient({\n summaryClient,\n }),\n ];\n }\n\n const summaryClient = new DataTableExplorerCategoryClient({\n categoryLimit,\n field,\n onStateChange: update,\n selection,\n tableName,\n });\n\n return [\n summaryClient,\n new DataTableExplorerCategoryTotalClient({\n summaryClient,\n }),\n ];\n });\n\n clients.forEach((client) => connection.coordinator.connect(client));\n\n return () => {\n clients.forEach((client) => client.destroy());\n store.getState().clearSummaries();\n };\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import type { DataTableExplorerStoreState } from '../createDataTableExplorerStore';
2
+ import type { DataTableExplorerColumnState } from '../types';
3
+ export type UseDataTableExplorerColumnsOptions = {
4
+ fields: DataTableExplorerStoreState['schema']['fields'];
5
+ summaries: DataTableExplorerStoreState['summaries'];
6
+ };
7
+ /**
8
+ * Maps the schema fields and summary state into the column model consumed by
9
+ * the dataTableExplorer header and summary cells.
10
+ */
11
+ export declare function useDataTableExplorerColumns({ fields, summaries, }: UseDataTableExplorerColumnsOptions): DataTableExplorerColumnState[];
12
+ //# sourceMappingURL=useDataTableExplorerColumns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataTableExplorerColumns.d.ts","sourceRoot":"","sources":["../../../src/data-table-explorer/hooks/useDataTableExplorerColumns.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,2BAA2B,EAAC,MAAM,iCAAiC,CAAC;AACjF,OAAO,KAAK,EAAC,4BAA4B,EAAC,MAAM,UAAU,CAAC;AAO3D,MAAM,MAAM,kCAAkC,GAAG;IAC/C,MAAM,EAAE,2BAA2B,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;IACxD,SAAS,EAAE,2BAA2B,CAAC,WAAW,CAAC,CAAC;CACrD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,EAC1C,MAAM,EACN,SAAS,GACV,EAAE,kCAAkC,GAAG,4BAA4B,EAAE,CAerE"}
@@ -0,0 +1,19 @@
1
+ import { useMemo } from 'react';
2
+ import { createEmptySummaryState, isDataTableExplorerHistogramType, isDataTableExplorerUnsupportedSummaryType, } from '../utils';
3
+ /**
4
+ * Maps the schema fields and summary state into the column model consumed by
5
+ * the dataTableExplorer header and summary cells.
6
+ */
7
+ export function useDataTableExplorerColumns({ fields, summaries, }) {
8
+ return useMemo(() => fields.map((field) => ({
9
+ field,
10
+ kind: isDataTableExplorerUnsupportedSummaryType(field.type)
11
+ ? 'unsupported'
12
+ : isDataTableExplorerHistogramType(field.type)
13
+ ? 'histogram'
14
+ : 'category',
15
+ name: field.name,
16
+ summary: summaries[field.name] ?? createEmptySummaryState(field),
17
+ })), [fields, summaries]);
18
+ }
19
+ //# sourceMappingURL=useDataTableExplorerColumns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataTableExplorerColumns.js","sourceRoot":"","sources":["../../../src/data-table-explorer/hooks/useDataTableExplorerColumns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAG9B,OAAO,EACL,uBAAuB,EACvB,gCAAgC,EAChC,yCAAyC,GAC1C,MAAM,UAAU,CAAC;AAOlB;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,EAC1C,MAAM,EACN,SAAS,GAC0B;IACnC,OAAO,OAAO,CACZ,GAAG,EAAE,CACH,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrB,KAAK;QACL,IAAI,EAAE,yCAAyC,CAAC,KAAK,CAAC,IAAI,CAAC;YACzD,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,gCAAgC,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5C,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,UAAU;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,KAAK,CAAC;KACjE,CAAC,CAAC,EACL,CAAC,MAAM,EAAE,SAAS,CAAC,CACpB,CAAC;AACJ,CAAC","sourcesContent":["import {useMemo} from 'react';\nimport type {DataTableExplorerStoreState} from '../createDataTableExplorerStore';\nimport type {DataTableExplorerColumnState} from '../types';\nimport {\n createEmptySummaryState,\n isDataTableExplorerHistogramType,\n isDataTableExplorerUnsupportedSummaryType,\n} from '../utils';\n\nexport type UseDataTableExplorerColumnsOptions = {\n fields: DataTableExplorerStoreState['schema']['fields'];\n summaries: DataTableExplorerStoreState['summaries'];\n};\n\n/**\n * Maps the schema fields and summary state into the column model consumed by\n * the dataTableExplorer header and summary cells.\n */\nexport function useDataTableExplorerColumns({\n fields,\n summaries,\n}: UseDataTableExplorerColumnsOptions): DataTableExplorerColumnState[] {\n return useMemo<DataTableExplorerColumnState[]>(\n () =>\n fields.map((field) => ({\n field,\n kind: isDataTableExplorerUnsupportedSummaryType(field.type)\n ? 'unsupported'\n : isDataTableExplorerHistogramType(field.type)\n ? 'histogram'\n : 'category',\n name: field.name,\n summary: summaries[field.name] ?? createEmptySummaryState(field),\n })),\n [fields, summaries],\n );\n}\n"]}
@@ -0,0 +1,30 @@
1
+ import type { MosaicClient, Selection } from '@uwdata/mosaic-core';
2
+ import type { MosaicSliceState } from '../../MosaicSlice';
3
+ import type { DataTableExplorerStore } from '../createDataTableExplorerStore';
4
+ import type { DataTableExplorerPaginationState, DataTableExplorerSorting } from '../types';
5
+ import type { DataTableExplorerStoreState } from '../createDataTableExplorerStore';
6
+ export type UseDataTableExplorerLifecyclesOptions = {
7
+ categoryLimit: number;
8
+ columns?: string[];
9
+ connection: MosaicSliceState['mosaic']['connection'];
10
+ fieldNames: string[];
11
+ fields: DataTableExplorerStoreState['schema']['fields'];
12
+ pageSize: number;
13
+ pagination: DataTableExplorerPaginationState;
14
+ dataTableExplorerStore: DataTableExplorerStore;
15
+ rowFilter: ReturnType<Selection['predicate']>;
16
+ selection: Selection;
17
+ selectionVersion: number;
18
+ sorting: DataTableExplorerSorting;
19
+ summaryBins: number;
20
+ tableName: string;
21
+ };
22
+ export type UseDataTableExplorerLifecyclesReturn = {
23
+ client: MosaicClient | null;
24
+ };
25
+ /**
26
+ * Owns the coordinator-backed schema, row, count, and summary client
27
+ * lifecycles for a dataTableExplorer instance.
28
+ */
29
+ export declare function useDataTableExplorerLifecycles(options: UseDataTableExplorerLifecyclesOptions): UseDataTableExplorerLifecyclesReturn;
30
+ //# sourceMappingURL=useDataTableExplorerLifecycles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataTableExplorerLifecycles.d.ts","sourceRoot":"","sources":["../../../src/data-table-explorer/hooks/useDataTableExplorerLifecycles.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,YAAY,EAAE,SAAS,EAAC,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,iCAAiC,CAAC;AAC5E,OAAO,KAAK,EACV,gCAAgC,EAChC,wBAAwB,EACzB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAC,2BAA2B,EAAC,MAAM,iCAAiC,CAAC;AAQjF,MAAM,MAAM,qCAAqC,GAAG;IAClD,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC;IACrD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,2BAA2B,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,gCAAgC,CAAC;IAC7C,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9C,SAAS,EAAE,SAAS,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,wBAAwB,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAAG;IACjD,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,qCAAqC,GAC7C,oCAAoC,CA8ItC"}
@@ -0,0 +1,120 @@
1
+ import { useEffect, useRef } from 'react';
2
+ import { connectDataTableExplorerCountClient, connectDataTableExplorerPageClient, connectDataTableExplorerSummaryClients, loadDataTableExplorerSchema, } from '../dataTableExplorerController';
3
+ /**
4
+ * Owns the coordinator-backed schema, row, count, and summary client
5
+ * lifecycles for a dataTableExplorer instance.
6
+ */
7
+ export function useDataTableExplorerLifecycles(options) {
8
+ const { categoryLimit, columns, connection, fieldNames, fields, pageSize, pagination, dataTableExplorerStore, rowFilter, selection, selectionVersion, sorting, summaryBins, tableName, } = options;
9
+ const previousTableNameRef = useRef(tableName);
10
+ useEffect(() => {
11
+ dataTableExplorerStore.getState().syncPageSize(pageSize);
12
+ }, [pageSize, dataTableExplorerStore]);
13
+ useEffect(() => {
14
+ if (previousTableNameRef.current === tableName)
15
+ return;
16
+ selection.reset();
17
+ previousTableNameRef.current = tableName;
18
+ }, [selection, tableName]);
19
+ useEffect(() => {
20
+ dataTableExplorerStore.getState().resetPageIndex();
21
+ }, [dataTableExplorerStore, selectionVersion, tableName]);
22
+ useEffect(() => {
23
+ if (connection.status !== 'ready' || !tableName) {
24
+ dataTableExplorerStore.getState().setSchemaSuccess([]);
25
+ dataTableExplorerStore.getState().setSchemaError(undefined);
26
+ dataTableExplorerStore
27
+ .getState()
28
+ .setSchemaLoading(connection.status === 'loading');
29
+ return;
30
+ }
31
+ void loadDataTableExplorerSchema({
32
+ columns,
33
+ coordinator: connection.coordinator,
34
+ store: dataTableExplorerStore,
35
+ tableName,
36
+ });
37
+ }, [columns, connection, dataTableExplorerStore, tableName]);
38
+ useEffect(() => {
39
+ if (connection.status !== 'ready' || !tableName || !fieldNames.length) {
40
+ dataTableExplorerStore.getState().setPage({ isLoading: false });
41
+ return;
42
+ }
43
+ return connectDataTableExplorerPageClient({
44
+ connection,
45
+ fieldNames,
46
+ filter: rowFilter,
47
+ pagination,
48
+ sorting,
49
+ store: dataTableExplorerStore,
50
+ tableName,
51
+ });
52
+ }, [
53
+ connection,
54
+ fieldNames,
55
+ pagination,
56
+ dataTableExplorerStore,
57
+ rowFilter,
58
+ sorting,
59
+ tableName,
60
+ ]);
61
+ useEffect(() => {
62
+ if (connection.status !== 'ready' || !tableName) {
63
+ dataTableExplorerStore.getState().setFilteredCount({ isLoading: false });
64
+ dataTableExplorerStore.getState().setClient(null);
65
+ return;
66
+ }
67
+ const { client: newClient, cleanup } = connectDataTableExplorerCountClient({
68
+ connection,
69
+ filterStable: true,
70
+ selection,
71
+ store: dataTableExplorerStore,
72
+ tableName,
73
+ target: 'filtered',
74
+ });
75
+ dataTableExplorerStore.getState().setClient(newClient);
76
+ return () => {
77
+ cleanup();
78
+ dataTableExplorerStore.getState().setClient(null);
79
+ };
80
+ }, [connection, dataTableExplorerStore, selection, tableName]);
81
+ useEffect(() => {
82
+ if (connection.status !== 'ready' || !tableName) {
83
+ dataTableExplorerStore.getState().setTotalCount({ isLoading: false });
84
+ return;
85
+ }
86
+ const { cleanup } = connectDataTableExplorerCountClient({
87
+ connection,
88
+ store: dataTableExplorerStore,
89
+ tableName,
90
+ target: 'total',
91
+ });
92
+ return cleanup;
93
+ }, [connection, dataTableExplorerStore, tableName]);
94
+ useEffect(() => {
95
+ if (connection.status !== 'ready' || !fields.length) {
96
+ dataTableExplorerStore.getState().clearSummaries();
97
+ return;
98
+ }
99
+ return connectDataTableExplorerSummaryClients({
100
+ categoryLimit,
101
+ connection,
102
+ fields,
103
+ selection,
104
+ store: dataTableExplorerStore,
105
+ summaryBins,
106
+ tableName,
107
+ });
108
+ }, [
109
+ categoryLimit,
110
+ connection,
111
+ fields,
112
+ dataTableExplorerStore,
113
+ selection,
114
+ summaryBins,
115
+ tableName,
116
+ ]);
117
+ // Client is not returned - it's stored in the dataTableExplorerStore
118
+ return { client: null };
119
+ }
120
+ //# sourceMappingURL=useDataTableExplorerLifecycles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataTableExplorerLifecycles.js","sourceRoot":"","sources":["../../../src/data-table-explorer/hooks/useDataTableExplorerLifecycles.ts"],"names":[],"mappings":"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","sourcesContent":["import {useEffect, useRef} from 'react';\nimport type {MosaicClient, Selection} from '@uwdata/mosaic-core';\nimport type {MosaicSliceState} from '../../MosaicSlice';\nimport type {DataTableExplorerStore} from '../createDataTableExplorerStore';\nimport type {\n DataTableExplorerPaginationState,\n DataTableExplorerSorting,\n} from '../types';\nimport type {DataTableExplorerStoreState} from '../createDataTableExplorerStore';\nimport {\n connectDataTableExplorerCountClient,\n connectDataTableExplorerPageClient,\n connectDataTableExplorerSummaryClients,\n loadDataTableExplorerSchema,\n} from '../dataTableExplorerController';\n\nexport type UseDataTableExplorerLifecyclesOptions = {\n categoryLimit: number;\n columns?: string[];\n connection: MosaicSliceState['mosaic']['connection'];\n fieldNames: string[];\n fields: DataTableExplorerStoreState['schema']['fields'];\n pageSize: number;\n pagination: DataTableExplorerPaginationState;\n dataTableExplorerStore: DataTableExplorerStore;\n rowFilter: ReturnType<Selection['predicate']>;\n selection: Selection;\n selectionVersion: number;\n sorting: DataTableExplorerSorting;\n summaryBins: number;\n tableName: string;\n};\n\nexport type UseDataTableExplorerLifecyclesReturn = {\n client: MosaicClient | null;\n};\n\n/**\n * Owns the coordinator-backed schema, row, count, and summary client\n * lifecycles for a dataTableExplorer instance.\n */\nexport function useDataTableExplorerLifecycles(\n options: UseDataTableExplorerLifecyclesOptions,\n): UseDataTableExplorerLifecyclesReturn {\n const {\n categoryLimit,\n columns,\n connection,\n fieldNames,\n fields,\n pageSize,\n pagination,\n dataTableExplorerStore,\n rowFilter,\n selection,\n selectionVersion,\n sorting,\n summaryBins,\n tableName,\n } = options;\n const previousTableNameRef = useRef(tableName);\n\n useEffect(() => {\n dataTableExplorerStore.getState().syncPageSize(pageSize);\n }, [pageSize, dataTableExplorerStore]);\n\n useEffect(() => {\n if (previousTableNameRef.current === tableName) return;\n selection.reset();\n previousTableNameRef.current = tableName;\n }, [selection, tableName]);\n\n useEffect(() => {\n dataTableExplorerStore.getState().resetPageIndex();\n }, [dataTableExplorerStore, selectionVersion, tableName]);\n\n useEffect(() => {\n if (connection.status !== 'ready' || !tableName) {\n dataTableExplorerStore.getState().setSchemaSuccess([]);\n dataTableExplorerStore.getState().setSchemaError(undefined);\n dataTableExplorerStore\n .getState()\n .setSchemaLoading(connection.status === 'loading');\n return;\n }\n\n void loadDataTableExplorerSchema({\n columns,\n coordinator: connection.coordinator,\n store: dataTableExplorerStore,\n tableName,\n });\n }, [columns, connection, dataTableExplorerStore, tableName]);\n\n useEffect(() => {\n if (connection.status !== 'ready' || !tableName || !fieldNames.length) {\n dataTableExplorerStore.getState().setPage({isLoading: false});\n return;\n }\n\n return connectDataTableExplorerPageClient({\n connection,\n fieldNames,\n filter: rowFilter,\n pagination,\n sorting,\n store: dataTableExplorerStore,\n tableName,\n });\n }, [\n connection,\n fieldNames,\n pagination,\n dataTableExplorerStore,\n rowFilter,\n sorting,\n tableName,\n ]);\n\n useEffect(() => {\n if (connection.status !== 'ready' || !tableName) {\n dataTableExplorerStore.getState().setFilteredCount({isLoading: false});\n dataTableExplorerStore.getState().setClient(null);\n return;\n }\n\n const {client: newClient, cleanup} = connectDataTableExplorerCountClient({\n connection,\n filterStable: true,\n selection,\n store: dataTableExplorerStore,\n tableName,\n target: 'filtered',\n });\n dataTableExplorerStore.getState().setClient(newClient);\n\n return () => {\n cleanup();\n dataTableExplorerStore.getState().setClient(null);\n };\n }, [connection, dataTableExplorerStore, selection, tableName]);\n\n useEffect(() => {\n if (connection.status !== 'ready' || !tableName) {\n dataTableExplorerStore.getState().setTotalCount({isLoading: false});\n return;\n }\n\n const {cleanup} = connectDataTableExplorerCountClient({\n connection,\n store: dataTableExplorerStore,\n tableName,\n target: 'total',\n });\n\n return cleanup;\n }, [connection, dataTableExplorerStore, tableName]);\n\n useEffect(() => {\n if (connection.status !== 'ready' || !fields.length) {\n dataTableExplorerStore.getState().clearSummaries();\n return;\n }\n\n return connectDataTableExplorerSummaryClients({\n categoryLimit,\n connection,\n fields,\n selection,\n store: dataTableExplorerStore,\n summaryBins,\n tableName,\n });\n }, [\n categoryLimit,\n connection,\n fields,\n dataTableExplorerStore,\n selection,\n summaryBins,\n tableName,\n ]);\n\n // Client is not returned - it's stored in the dataTableExplorerStore\n return {client: null};\n}\n"]}
@@ -0,0 +1,28 @@
1
+ import type { Selection } from '@uwdata/mosaic-core';
2
+ import type { DataTableExplorerStoreState } from '../createDataTableExplorerStore';
3
+ import type { DataTableExplorerPaginationState, DataTableExplorerSorting } from '../types';
4
+ import { buildDataTableExplorerBaseQuery } from '../utils';
5
+ export type UseDataTableExplorerQueryStateOptions = {
6
+ pagination: DataTableExplorerPaginationState;
7
+ rowSelectionVersion: number;
8
+ schema: DataTableExplorerStoreState['schema'];
9
+ selection: Selection;
10
+ selectionVersion: number;
11
+ sorting: DataTableExplorerSorting;
12
+ tableName: string;
13
+ };
14
+ export type UseDataTableExplorerQueryStateReturn = {
15
+ baseQuery: ReturnType<typeof buildDataTableExplorerBaseQuery>;
16
+ datasetId: string;
17
+ fieldNames: string[];
18
+ fields: DataTableExplorerStoreState['schema']['fields'];
19
+ hasFilters: boolean;
20
+ pageQuery: string;
21
+ rowFilter: ReturnType<Selection['predicate']>;
22
+ };
23
+ /**
24
+ * Derives the dataTableExplorer's field and SQL state from the current schema,
25
+ * selection, sorting, and pagination state.
26
+ */
27
+ export declare function useDataTableExplorerQueryState({ pagination, rowSelectionVersion, schema, selection, selectionVersion, sorting, tableName, }: UseDataTableExplorerQueryStateOptions): UseDataTableExplorerQueryStateReturn;
28
+ //# sourceMappingURL=useDataTableExplorerQueryState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataTableExplorerQueryState.d.ts","sourceRoot":"","sources":["../../../src/data-table-explorer/hooks/useDataTableExplorerQueryState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAC,2BAA2B,EAAC,MAAM,iCAAiC,CAAC;AACjF,OAAO,KAAK,EACV,gCAAgC,EAChC,wBAAwB,EACzB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,+BAA+B,EAEhC,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,qCAAqC,GAAG;IAClD,UAAU,EAAE,gCAAgC,CAAC;IAC7C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IAC9C,SAAS,EAAE,SAAS,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,wBAAwB,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAAG;IACjD,SAAS,EAAE,UAAU,CAAC,OAAO,+BAA+B,CAAC,CAAC;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,2BAA2B,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;IACxD,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;CAC/C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,EAC7C,UAAU,EACV,mBAAmB,EACnB,MAAM,EACN,SAAS,EACT,gBAAgB,EAChB,OAAO,EACP,SAAS,GACV,EAAE,qCAAqC,GAAG,oCAAoC,CA4C9E"}