@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,12 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@sqlrooms/ui';
2
+ import { Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, Tooltip, TooltipContent, TooltipTrigger, } from '@sqlrooms/ui';
3
3
  import { Plus } from 'lucide-react';
4
4
  import { useAddPanelActions } from '../useAddPanelActions';
5
5
  export const MosaicDashboardAddPanelDropdown = ({ dashboardId }) => {
6
6
  const { handleAddPanel, canAddPanel, actions, canAddAnyPanel } = useAddPanelActions(dashboardId);
7
- return (_jsxs(DropdownMenu, { modal: false, children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { size: "sm", variant: "outline", disabled: !canAddAnyPanel, children: [_jsx(Plus, { className: "mr-1 h-4 w-4" }), "Add"] }) }), _jsx(DropdownMenuContent, { align: "end", children: actions.map((action) => {
7
+ return (_jsxs(DropdownMenu, { modal: false, children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { variant: "outline", className: "h-8 w-8", disabled: !canAddAnyPanel, "aria-label": "Add panel", children: _jsx(Plus, { className: "h-3.5 w-3.5" }) }) }) }), _jsx(TooltipContent, { children: "Add panel" })] }), _jsx(DropdownMenuContent, { align: "end", children: actions.map((action) => {
8
8
  const Icon = action.icon;
9
- return (_jsxs(DropdownMenuItem, { onClick: () => handleAddPanel(action), disabled: !canAddPanel(action), children: [Icon ? _jsx(Icon, { className: "mr-2 h-4 w-4" }) : null, action.label] }, action.type));
9
+ return (_jsxs(DropdownMenuItem, { onClick: () => handleAddPanel(action), disabled: !canAddPanel(action), children: [Icon ? _jsx(Icon, { className: "mr-2 h-3.5 w-3.5" }) : null, action.label] }, action.type));
10
10
  }) })] }));
11
11
  };
12
12
  //# sourceMappingURL=MosaicDashboardAddPanelDropdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardAddPanelDropdown.js","sourceRoot":"","sources":["../../../src/dashboard/toolbar/MosaicDashboardAddPanelDropdown.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,MAAM,EACN,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,IAAI,EAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AAMzD,MAAM,CAAC,MAAM,+BAA+B,GAExC,CAAC,EAAC,WAAW,EAAC,EAAE,EAAE;IACpB,MAAM,EAAC,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAC,GAC1D,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAElC,OAAO,CACL,MAAC,YAAY,IAAC,KAAK,EAAE,KAAK,aACxB,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,MAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,QAAQ,EAAE,CAAC,cAAc,aAC3D,KAAC,IAAI,IAAC,SAAS,EAAC,cAAc,GAAG,WAE1B,GACW,EACtB,KAAC,mBAAmB,IAAC,KAAK,EAAC,KAAK,YAC7B,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBACtB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;oBAEzB,OAAO,CACL,MAAC,gBAAgB,IAEf,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,EACrC,QAAQ,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,aAE7B,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,SAAS,EAAC,cAAc,GAAG,CAAC,CAAC,CAAC,IAAI,EAC/C,MAAM,CAAC,KAAK,KALR,MAAM,CAAC,IAAI,CAMC,CACpB,CAAC;gBACJ,CAAC,CAAC,GACkB,IACT,CAChB,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {type FC} from 'react';\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@sqlrooms/ui';\nimport {Plus} from 'lucide-react';\nimport {useAddPanelActions} from '../useAddPanelActions';\n\ninterface MosaicDashboardAddPanelDropdownProps {\n dashboardId: string;\n}\n\nexport const MosaicDashboardAddPanelDropdown: FC<\n MosaicDashboardAddPanelDropdownProps\n> = ({dashboardId}) => {\n const {handleAddPanel, canAddPanel, actions, canAddAnyPanel} =\n useAddPanelActions(dashboardId);\n\n return (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <Button size=\"sm\" variant=\"outline\" disabled={!canAddAnyPanel}>\n <Plus className=\"mr-1 h-4 w-4\" />\n Add\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {actions.map((action) => {\n const Icon = action.icon;\n\n return (\n <DropdownMenuItem\n key={action.type}\n onClick={() => handleAddPanel(action)}\n disabled={!canAddPanel(action)}\n >\n {Icon ? <Icon className=\"mr-2 h-4 w-4\" /> : null}\n {action.label}\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n"]}
1
+ {"version":3,"file":"MosaicDashboardAddPanelDropdown.js","sourceRoot":"","sources":["../../../src/dashboard/toolbar/MosaicDashboardAddPanelDropdown.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,MAAM,EACN,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,IAAI,EAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AAMzD,MAAM,CAAC,MAAM,+BAA+B,GAExC,CAAC,EAAC,WAAW,EAAC,EAAE,EAAE;IACpB,MAAM,EAAC,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAC,GAC1D,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAElC,OAAO,CACL,MAAC,YAAY,IAAC,KAAK,EAAE,KAAK,aACxB,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,KAAC,MAAM,IACL,OAAO,EAAC,SAAS,EACjB,SAAS,EAAC,SAAS,EACnB,QAAQ,EAAE,CAAC,cAAc,gBACd,WAAW,YAEtB,KAAC,IAAI,IAAC,SAAS,EAAC,aAAa,GAAG,GACzB,GACW,GACP,EACjB,KAAC,cAAc,4BAA2B,IAClC,EACV,KAAC,mBAAmB,IAAC,KAAK,EAAC,KAAK,YAC7B,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBACtB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;oBAEzB,OAAO,CACL,MAAC,gBAAgB,IAEf,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,EACrC,QAAQ,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,aAE7B,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,SAAS,EAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,IAAI,EACnD,MAAM,CAAC,KAAK,KALR,MAAM,CAAC,IAAI,CAMC,CACpB,CAAC;gBACJ,CAAC,CAAC,GACkB,IACT,CAChB,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {type FC} from 'react';\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '@sqlrooms/ui';\nimport {Plus} from 'lucide-react';\nimport {useAddPanelActions} from '../useAddPanelActions';\n\ninterface MosaicDashboardAddPanelDropdownProps {\n dashboardId: string;\n}\n\nexport const MosaicDashboardAddPanelDropdown: FC<\n MosaicDashboardAddPanelDropdownProps\n> = ({dashboardId}) => {\n const {handleAddPanel, canAddPanel, actions, canAddAnyPanel} =\n useAddPanelActions(dashboardId);\n\n return (\n <DropdownMenu modal={false}>\n <Tooltip>\n <TooltipTrigger asChild>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"outline\"\n className=\"h-8 w-8\"\n disabled={!canAddAnyPanel}\n aria-label=\"Add panel\"\n >\n <Plus className=\"h-3.5 w-3.5\" />\n </Button>\n </DropdownMenuTrigger>\n </TooltipTrigger>\n <TooltipContent>Add panel</TooltipContent>\n </Tooltip>\n <DropdownMenuContent align=\"end\">\n {actions.map((action) => {\n const Icon = action.icon;\n\n return (\n <DropdownMenuItem\n key={action.type}\n onClick={() => handleAddPanel(action)}\n disabled={!canAddPanel(action)}\n >\n {Icon ? <Icon className=\"mr-2 h-3.5 w-3.5\" /> : null}\n {action.label}\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n"]}
@@ -0,0 +1,7 @@
1
+ import { FC } from 'react';
2
+ interface MosaicDashboardDataTableSelectorProps {
3
+ dashboardId: string;
4
+ }
5
+ export declare const MosaicDashboardDataTableSelector: FC<MosaicDashboardDataTableSelectorProps>;
6
+ export {};
7
+ //# sourceMappingURL=MosaicDashboardDataTableSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardDataTableSelector.d.ts","sourceRoot":"","sources":["../../../src/dashboard/toolbar/MosaicDashboardDataTableSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,EAAE,EAAc,MAAM,OAAO,CAAC;AAOtC,UAAU,qCAAqC;IAC7C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,gCAAgC,EAAE,EAAE,CAC/C,qCAAqC,CA4BtC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useCallback } from 'react';
3
+ import { useStoreWithMosaicDashboard } from '../MosaicDashboardSlice';
4
+ import { DataTableSelector } from '../../components/DataTableSelector';
5
+ import { useTablesWithColumns } from '../../hooks/useTablesWithColumns';
6
+ import { useDataTable } from '@sqlrooms/db';
7
+ export const MosaicDashboardDataTableSelector = ({ dashboardId }) => {
8
+ const tables = useTablesWithColumns();
9
+ const dashboard = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.config.dashboardsById[dashboardId]);
10
+ const selectedTableName = dashboard?.selectedTable;
11
+ const selectedTable = useDataTable(selectedTableName);
12
+ const setSelectedTable = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.setSelectedTable);
13
+ const handleTableChange = useCallback((table) => {
14
+ setSelectedTable(dashboardId, table.table.toString());
15
+ }, [dashboardId, setSelectedTable]);
16
+ return (_jsx(DataTableSelector, { onChange: handleTableChange, tables: tables, value: selectedTable }));
17
+ };
18
+ //# sourceMappingURL=MosaicDashboardDataTableSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MosaicDashboardDataTableSelector.js","sourceRoot":"","sources":["../../../src/dashboard/toolbar/MosaicDashboardDataTableSelector.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAK,WAAW,EAAC,MAAM,OAAO,CAAC;AACtC,OAAO,EAAC,2BAA2B,EAAC,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAC,iBAAiB,EAAC,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAC,oBAAoB,EAAC,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAO1C,MAAM,CAAC,MAAM,gCAAgC,GAEzC,CAAC,EAAC,WAAW,EAAC,EAAE,EAAE;IACpB,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,2BAA2B,CAC3C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CACpE,CAAC;IACF,MAAM,iBAAiB,GAAG,SAAS,EAAE,aAAa,CAAC;IAEnD,MAAM,aAAa,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAEtD,MAAM,gBAAgB,GAAG,2BAA2B,CAClD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,gBAAgB,CAClD,CAAC;IAEF,MAAM,iBAAiB,GAAG,WAAW,CACnC,CAAC,KAAgB,EAAE,EAAE;QACnB,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC,EACD,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAChC,CAAC;IAEF,OAAO,CACL,KAAC,iBAAiB,IAChB,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,GACpB,CACH,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {FC, useCallback} from 'react';\nimport {useStoreWithMosaicDashboard} from '../MosaicDashboardSlice';\nimport {DataTableSelector} from '../../components/DataTableSelector';\nimport {useTablesWithColumns} from '../../hooks/useTablesWithColumns';\nimport {useDataTable} from '@sqlrooms/db';\nimport type {DataTable} from '@sqlrooms/db';\n\ninterface MosaicDashboardDataTableSelectorProps {\n dashboardId: string;\n}\n\nexport const MosaicDashboardDataTableSelector: FC<\n MosaicDashboardDataTableSelectorProps\n> = ({dashboardId}) => {\n const tables = useTablesWithColumns();\n const dashboard = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.config.dashboardsById[dashboardId],\n );\n const selectedTableName = dashboard?.selectedTable;\n\n const selectedTable = useDataTable(selectedTableName);\n\n const setSelectedTable = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.setSelectedTable,\n );\n\n const handleTableChange = useCallback(\n (table: DataTable) => {\n setSelectedTable(dashboardId, table.table.toString());\n },\n [dashboardId, setSelectedTable],\n );\n\n return (\n <DataTableSelector\n onChange={handleTableChange}\n tables={tables}\n value={selectedTable}\n />\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardResetFiltersButton.d.ts","sourceRoot":"","sources":["../../../src/dashboard/toolbar/MosaicDashboardResetFiltersButton.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAA+B,MAAM,OAAO,CAAC;AAO5D,UAAU,sCAAsC;IAC9C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,iCAAiC,EAAE,EAAE,CAChD,sCAAsC,CAuDvC,CAAC"}
1
+ {"version":3,"file":"MosaicDashboardResetFiltersButton.d.ts","sourceRoot":"","sources":["../../../src/dashboard/toolbar/MosaicDashboardResetFiltersButton.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAC,MAAM,OAAO,CAAC;AAI9B,UAAU,sCAAsC;IAC9C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,iCAAiC,EAAE,EAAE,CAChD,sCAAsC,CAYvC,CAAC"}
@@ -1,36 +1,8 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useEffect, useMemo, useState } from 'react';
3
- import { Button } from '@sqlrooms/ui';
4
- import { getMosaicDashboardSelectionName, useStoreWithMosaicDashboard, } from '../MosaicDashboardSlice';
2
+ import { useDashboardResetFilters } from '../hooks/useDashboardResetFilters';
3
+ import { ResetFiltersButton } from '../components/ResetFiltersButton';
5
4
  export const MosaicDashboardResetFiltersButton = ({ dashboardId }) => {
6
- const getSelection = useStoreWithMosaicDashboard((state) => state.mosaic.getSelection);
7
- const dashboardSelectionName = getMosaicDashboardSelectionName(dashboardId);
8
- const dashboardSelection = useStoreWithMosaicDashboard((state) => state.mosaic.selections[dashboardSelectionName]);
9
- const [selectionVersion, setSelectionVersion] = useState(0);
10
- useEffect(() => {
11
- if (!dashboardSelection) {
12
- getSelection(dashboardSelectionName, 'crossfilter');
13
- }
14
- }, [dashboardSelection, dashboardSelectionName, getSelection]);
15
- useEffect(() => {
16
- if (!dashboardSelection) {
17
- return;
18
- }
19
- const handleSelectionChange = () => {
20
- setSelectionVersion((value) => value + 1);
21
- };
22
- dashboardSelection.addEventListener('value', handleSelectionChange);
23
- return () => {
24
- dashboardSelection.removeEventListener('value', handleSelectionChange);
25
- };
26
- }, [dashboardSelection]);
27
- const hasActiveFilters = useMemo(() => Boolean(dashboardSelection?.clauses.length), [dashboardSelection, selectionVersion]);
28
- const handleResetFilters = () => {
29
- dashboardSelection?.reset();
30
- };
31
- if (!hasActiveFilters) {
32
- return null;
33
- }
34
- return (_jsx(Button, { variant: "link", size: "sm", className: "h-8 px-0", onClick: handleResetFilters, children: "Reset filters" }));
5
+ const { hasActiveFilters, reset } = useDashboardResetFilters({ dashboardId });
6
+ return (_jsx(ResetFiltersButton, { className: "h-8 w-8", disabled: !hasActiveFilters, onClick: reset, tooltip: "Reset all filters" }));
35
7
  };
36
8
  //# sourceMappingURL=MosaicDashboardResetFiltersButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardResetFiltersButton.js","sourceRoot":"","sources":["../../../src/dashboard/toolbar/MosaicDashboardResetFiltersButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAU,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACpC,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AAMjC,MAAM,CAAC,MAAM,iCAAiC,GAE1C,CAAC,EAAC,WAAW,EAAC,EAAE,EAAE;IACpB,MAAM,YAAY,GAAG,2BAA2B,CAC9C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CACrC,CAAC;IACF,MAAM,sBAAsB,GAAG,+BAA+B,CAAC,WAAW,CAAC,CAAC;IAC5E,MAAM,kBAAkB,GAAG,2BAA2B,CACpD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAC3D,CAAC;IACF,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,YAAY,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,EAAE,CAAC,kBAAkB,EAAE,sBAAsB,EAAE,YAAY,CAAC,CAAC,CAAC;IAE/D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,MAAM,qBAAqB,GAAG,GAAG,EAAE;YACjC,mBAAmB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC;QAEF,kBAAkB,CAAC,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;QACpE,OAAO,GAAG,EAAE;YACV,kBAAkB,CAAC,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;QACzE,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEzB,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,MAAM,CAAC,EACjD,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CACvC,CAAC;IAEF,MAAM,kBAAkB,GAAG,GAAG,EAAE;QAC9B,kBAAkB,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC,CAAC;IAEF,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAC,MAAM,IACL,OAAO,EAAC,MAAM,EACd,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,UAAU,EACpB,OAAO,EAAE,kBAAkB,8BAGpB,CACV,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {type FC, useEffect, useMemo, useState} from 'react';\nimport {Button} from '@sqlrooms/ui';\nimport {\n getMosaicDashboardSelectionName,\n useStoreWithMosaicDashboard,\n} from '../MosaicDashboardSlice';\n\ninterface MosaicDashboardResetFiltersButtonProps {\n dashboardId: string;\n}\n\nexport const MosaicDashboardResetFiltersButton: FC<\n MosaicDashboardResetFiltersButtonProps\n> = ({dashboardId}) => {\n const getSelection = useStoreWithMosaicDashboard(\n (state) => state.mosaic.getSelection,\n );\n const dashboardSelectionName = getMosaicDashboardSelectionName(dashboardId);\n const dashboardSelection = useStoreWithMosaicDashboard(\n (state) => state.mosaic.selections[dashboardSelectionName],\n );\n const [selectionVersion, setSelectionVersion] = useState(0);\n\n useEffect(() => {\n if (!dashboardSelection) {\n getSelection(dashboardSelectionName, 'crossfilter');\n }\n }, [dashboardSelection, dashboardSelectionName, getSelection]);\n\n useEffect(() => {\n if (!dashboardSelection) {\n return;\n }\n\n const handleSelectionChange = () => {\n setSelectionVersion((value) => value + 1);\n };\n\n dashboardSelection.addEventListener('value', handleSelectionChange);\n return () => {\n dashboardSelection.removeEventListener('value', handleSelectionChange);\n };\n }, [dashboardSelection]);\n\n const hasActiveFilters = useMemo(\n () => Boolean(dashboardSelection?.clauses.length),\n [dashboardSelection, selectionVersion],\n );\n\n const handleResetFilters = () => {\n dashboardSelection?.reset();\n };\n\n if (!hasActiveFilters) {\n return null;\n }\n\n return (\n <Button\n variant=\"link\"\n size=\"sm\"\n className=\"h-8 px-0\"\n onClick={handleResetFilters}\n >\n Reset filters\n </Button>\n );\n};\n"]}
1
+ {"version":3,"file":"MosaicDashboardResetFiltersButton.js","sourceRoot":"","sources":["../../../src/dashboard/toolbar/MosaicDashboardResetFiltersButton.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,wBAAwB,EAAC,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAC,kBAAkB,EAAC,MAAM,kCAAkC,CAAC;AAMpE,MAAM,CAAC,MAAM,iCAAiC,GAE1C,CAAC,EAAC,WAAW,EAAC,EAAE,EAAE;IACpB,MAAM,EAAC,gBAAgB,EAAE,KAAK,EAAC,GAAG,wBAAwB,CAAC,EAAC,WAAW,EAAC,CAAC,CAAC;IAE1E,OAAO,CACL,KAAC,kBAAkB,IACjB,SAAS,EAAC,SAAS,EACnB,QAAQ,EAAE,CAAC,gBAAgB,EAC3B,OAAO,EAAE,KAAK,EACd,OAAO,EAAC,mBAAmB,GAC3B,CACH,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {type FC} from 'react';\nimport {useDashboardResetFilters} from '../hooks/useDashboardResetFilters';\nimport {ResetFiltersButton} from '../components/ResetFiltersButton';\n\ninterface MosaicDashboardResetFiltersButtonProps {\n dashboardId: string;\n}\n\nexport const MosaicDashboardResetFiltersButton: FC<\n MosaicDashboardResetFiltersButtonProps\n> = ({dashboardId}) => {\n const {hasActiveFilters, reset} = useDashboardResetFilters({dashboardId});\n\n return (\n <ResetFiltersButton\n className=\"h-8 w-8\"\n disabled={!hasActiveFilters}\n onClick={reset}\n tooltip=\"Reset all filters\"\n />\n );\n};\n"]}
@@ -1,3 +1,3 @@
1
- import React from 'react';
2
- export declare const MosaicDashboardToolbar: React.FC;
1
+ import { FC } from 'react';
2
+ export declare const MosaicDashboardToolbar: FC;
3
3
  //# sourceMappingURL=MosaicDashboardToolbar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardToolbar.d.ts","sourceRoot":"","sources":["../../../src/dashboard/toolbar/MosaicDashboardToolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAUzC,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EA0C1C,CAAC"}
1
+ {"version":3,"file":"MosaicDashboardToolbar.d.ts","sourceRoot":"","sources":["../../../src/dashboard/toolbar/MosaicDashboardToolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,EAAE,EAAc,MAAM,OAAO,CAAC;AAStC,eAAO,MAAM,sBAAsB,EAAE,EA0CpC,CAAC"}
@@ -4,21 +4,23 @@ import { useMosaicDashboardContext } from '../MosaicDashboardContext';
4
4
  import { useStoreWithMosaicDashboard } from '../MosaicDashboardSlice';
5
5
  import { MosaicDashboardAddPanelDropdown } from './MosaicDashboardAddPanelDropdown';
6
6
  import { MosaicDashboardResetFiltersButton } from './MosaicDashboardResetFiltersButton';
7
- import { DataTableSelector } from '../../components/DataTableSelector';
8
- import { useTablesWithColumns } from '../../hooks/useTablesWithColumns';
9
- import { useDataTable } from '../../hooks/useDataTable';
7
+ import { MosaicDashboardDataTableSelector } from './MosaicDashboardDataTableSelector';
8
+ import { useDataTable } from '@sqlrooms/db';
9
+ import { BlockCaptionEditor } from '../../components/BlockCaptionEditor';
10
10
  export const MosaicDashboardToolbar = () => {
11
11
  const { dashboardId } = useMosaicDashboardContext();
12
- const tables = useTablesWithColumns();
13
- const selectedTableName = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.config.dashboardsById[dashboardId]?.selectedTable);
12
+ const dashboard = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.config.dashboardsById[dashboardId]);
13
+ const selectedTableName = dashboard?.selectedTable;
14
+ const dashboardTitle = dashboard?.title ?? '';
14
15
  const selectedTable = useDataTable(selectedTableName);
15
- const setSelectedTable = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.setSelectedTable);
16
- const handleTableChange = useCallback((table) => {
17
- setSelectedTable(dashboardId, table.table.toString());
18
- }, [dashboardId, setSelectedTable]);
16
+ const tableName = selectedTable?.table.table;
17
+ const setDashboardTitle = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.setDashboardTitle);
18
+ const handleTitleChange = useCallback((title) => {
19
+ setDashboardTitle(dashboardId, title || '');
20
+ }, [dashboardId, setDashboardTitle]);
19
21
  if (!selectedTableName) {
20
22
  return null;
21
23
  }
22
- return (_jsxs("div", { className: "flex items-center justify-between border-b px-5 py-2", children: [_jsx("div", { className: "flex items-center gap-2", children: _jsx(MosaicDashboardResetFiltersButton, { dashboardId: dashboardId }) }), _jsxs("div", { className: "flex items-center gap-2", children: [selectedTable && (_jsx(DataTableSelector, { className: "w-48", onChange: handleTableChange, tables: tables, value: selectedTable })), _jsx(MosaicDashboardAddPanelDropdown, { dashboardId: dashboardId })] })] }));
24
+ return (_jsxs("div", { className: "flex items-center justify-between gap-2 border-b px-5 py-2", children: [_jsx(BlockCaptionEditor, { value: dashboardTitle, placeholder: tableName || 'Dashboard title', onChange: handleTitleChange }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(MosaicDashboardAddPanelDropdown, { dashboardId: dashboardId }), _jsx(MosaicDashboardDataTableSelector, { dashboardId: dashboardId }), _jsx(MosaicDashboardResetFiltersButton, { dashboardId: dashboardId })] })] }));
23
25
  };
24
26
  //# sourceMappingURL=MosaicDashboardToolbar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardToolbar.js","sourceRoot":"","sources":["../../../src/dashboard/toolbar/MosaicDashboardToolbar.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAC,WAAW,EAAC,MAAM,OAAO,CAAC;AACzC,OAAO,EAAC,yBAAyB,EAAC,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAC,2BAA2B,EAAC,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAC,+BAA+B,EAAC,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAC,iCAAiC,EAAC,MAAM,qCAAqC,CAAC;AACtF,OAAO,EAAC,iBAAiB,EAAC,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAC,oBAAoB,EAAC,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAC,YAAY,EAAC,MAAM,0BAA0B,CAAC;AAGtD,MAAM,CAAC,MAAM,sBAAsB,GAAa,GAAG,EAAE;IACnD,MAAM,EAAC,WAAW,EAAC,GAAG,yBAAyB,EAAE,CAAC;IAElD,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IACtC,MAAM,iBAAiB,GAAG,2BAA2B,CACnD,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,aAAa,CAC1E,CAAC;IACF,MAAM,aAAa,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;IACtD,MAAM,gBAAgB,GAAG,2BAA2B,CAClD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,gBAAgB,CAClD,CAAC;IAEF,MAAM,iBAAiB,GAAG,WAAW,CACnC,CAAC,KAAgB,EAAE,EAAE;QACnB,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC,EACD,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAChC,CAAC;IAEF,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,sDAAsD,aACnE,cAAK,SAAS,EAAC,yBAAyB,YACtC,KAAC,iCAAiC,IAAC,WAAW,EAAE,WAAW,GAAI,GAC3D,EACN,eAAK,SAAS,EAAC,yBAAyB,aACrC,aAAa,IAAI,CAChB,KAAC,iBAAiB,IAChB,SAAS,EAAC,MAAM,EAChB,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,GACpB,CACH,EACD,KAAC,+BAA+B,IAAC,WAAW,EAAE,WAAW,GAAI,IACzD,IACF,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import React, {useCallback} from 'react';\nimport {useMosaicDashboardContext} from '../MosaicDashboardContext';\nimport {useStoreWithMosaicDashboard} from '../MosaicDashboardSlice';\nimport {MosaicDashboardAddPanelDropdown} from './MosaicDashboardAddPanelDropdown';\nimport {MosaicDashboardResetFiltersButton} from './MosaicDashboardResetFiltersButton';\nimport {DataTableSelector} from '../../components/DataTableSelector';\nimport {useTablesWithColumns} from '../../hooks/useTablesWithColumns';\nimport {useDataTable} from '../../hooks/useDataTable';\nimport type {DataTable} from '@sqlrooms/db';\n\nexport const MosaicDashboardToolbar: React.FC = () => {\n const {dashboardId} = useMosaicDashboardContext();\n\n const tables = useTablesWithColumns();\n const selectedTableName = useStoreWithMosaicDashboard(\n (state) =>\n state.mosaicDashboard.config.dashboardsById[dashboardId]?.selectedTable,\n );\n const selectedTable = useDataTable(selectedTableName);\n const setSelectedTable = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.setSelectedTable,\n );\n\n const handleTableChange = useCallback(\n (table: DataTable) => {\n setSelectedTable(dashboardId, table.table.toString());\n },\n [dashboardId, setSelectedTable],\n );\n\n if (!selectedTableName) {\n return null;\n }\n\n return (\n <div className=\"flex items-center justify-between border-b px-5 py-2\">\n <div className=\"flex items-center gap-2\">\n <MosaicDashboardResetFiltersButton dashboardId={dashboardId} />\n </div>\n <div className=\"flex items-center gap-2\">\n {selectedTable && (\n <DataTableSelector\n className=\"w-48\"\n onChange={handleTableChange}\n tables={tables}\n value={selectedTable}\n />\n )}\n <MosaicDashboardAddPanelDropdown dashboardId={dashboardId} />\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"MosaicDashboardToolbar.js","sourceRoot":"","sources":["../../../src/dashboard/toolbar/MosaicDashboardToolbar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAK,WAAW,EAAC,MAAM,OAAO,CAAC;AACtC,OAAO,EAAC,yBAAyB,EAAC,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAC,2BAA2B,EAAC,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAC,+BAA+B,EAAC,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAC,iCAAiC,EAAC,MAAM,qCAAqC,CAAC;AACtF,OAAO,EAAC,gCAAgC,EAAC,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAC,kBAAkB,EAAC,MAAM,qCAAqC,CAAC;AAEvE,MAAM,CAAC,MAAM,sBAAsB,GAAO,GAAG,EAAE;IAC7C,MAAM,EAAC,WAAW,EAAC,GAAG,yBAAyB,EAAE,CAAC;IAElD,MAAM,SAAS,GAAG,2BAA2B,CAC3C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CACpE,CAAC;IACF,MAAM,iBAAiB,GAAG,SAAS,EAAE,aAAa,CAAC;IACnD,MAAM,cAAc,GAAG,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC;IAE9C,MAAM,aAAa,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC;IAE7C,MAAM,iBAAiB,GAAG,2BAA2B,CACnD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,iBAAiB,CACnD,CAAC;IAEF,MAAM,iBAAiB,GAAG,WAAW,CACnC,CAAC,KAAyB,EAAE,EAAE;QAC5B,iBAAiB,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC,EACD,CAAC,WAAW,EAAE,iBAAiB,CAAC,CACjC,CAAC;IAEF,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,4DAA4D,aACzE,KAAC,kBAAkB,IACjB,KAAK,EAAE,cAAc,EACrB,WAAW,EAAE,SAAS,IAAI,iBAAiB,EAC3C,QAAQ,EAAE,iBAAiB,GAC3B,EAEF,eAAK,SAAS,EAAC,yBAAyB,aACtC,KAAC,+BAA+B,IAAC,WAAW,EAAE,WAAW,GAAI,EAC7D,KAAC,gCAAgC,IAAC,WAAW,EAAE,WAAW,GAAI,EAC9D,KAAC,iCAAiC,IAAC,WAAW,EAAE,WAAW,GAAI,IAC3D,IACF,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {FC, useCallback} from 'react';\nimport {useMosaicDashboardContext} from '../MosaicDashboardContext';\nimport {useStoreWithMosaicDashboard} from '../MosaicDashboardSlice';\nimport {MosaicDashboardAddPanelDropdown} from './MosaicDashboardAddPanelDropdown';\nimport {MosaicDashboardResetFiltersButton} from './MosaicDashboardResetFiltersButton';\nimport {MosaicDashboardDataTableSelector} from './MosaicDashboardDataTableSelector';\nimport {useDataTable} from '@sqlrooms/db';\nimport {BlockCaptionEditor} from '../../components/BlockCaptionEditor';\n\nexport const MosaicDashboardToolbar: FC = () => {\n const {dashboardId} = useMosaicDashboardContext();\n\n const dashboard = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.config.dashboardsById[dashboardId],\n );\n const selectedTableName = dashboard?.selectedTable;\n const dashboardTitle = dashboard?.title ?? '';\n\n const selectedTable = useDataTable(selectedTableName);\n const tableName = selectedTable?.table.table;\n\n const setDashboardTitle = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.setDashboardTitle,\n );\n\n const handleTitleChange = useCallback(\n (title: string | undefined) => {\n setDashboardTitle(dashboardId, title || '');\n },\n [dashboardId, setDashboardTitle],\n );\n\n if (!selectedTableName) {\n return null;\n }\n\n return (\n <div className=\"flex items-center justify-between gap-2 border-b px-5 py-2\">\n <BlockCaptionEditor\n value={dashboardTitle}\n placeholder={tableName || 'Dashboard title'}\n onChange={handleTitleChange}\n />\n\n <div className=\"flex items-center gap-2\">\n <MosaicDashboardAddPanelDropdown dashboardId={dashboardId} />\n <MosaicDashboardDataTableSelector dashboardId={dashboardId} />\n <MosaicDashboardResetFiltersButton dashboardId={dashboardId} />\n </div>\n </div>\n );\n};\n"]}
@@ -0,0 +1,7 @@
1
+ import { type MosaicClient } from '@uwdata/mosaic-core';
2
+ /**
3
+ * Registers Mosaic clients for a dashboard panel so the panel's reset button
4
+ * can track which filters originate from this panel.
5
+ */
6
+ export declare function usePanelClientRegistration(dashboardId: string | undefined, panelId: string | undefined, clients: MosaicClient[]): void;
7
+ //# sourceMappingURL=usePanelClientRegistration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePanelClientRegistration.d.ts","sourceRoot":"","sources":["../../src/dashboard/usePanelClientRegistration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAItD;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE,YAAY,EAAE,GACtB,IAAI,CA6BN"}
@@ -0,0 +1,30 @@
1
+ import { useEffect } from 'react';
2
+ import { useStoreWithMosaicDashboard } from './MosaicDashboardSlice';
3
+ /**
4
+ * Registers Mosaic clients for a dashboard panel so the panel's reset button
5
+ * can track which filters originate from this panel.
6
+ */
7
+ export function usePanelClientRegistration(dashboardId, panelId, clients) {
8
+ const registerPanelClient = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.registerPanelClient);
9
+ const unregisterPanelClient = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.unregisterPanelClient);
10
+ useEffect(() => {
11
+ if (!dashboardId || !panelId || clients.length === 0) {
12
+ return;
13
+ }
14
+ clients.forEach((client) => {
15
+ registerPanelClient(dashboardId, panelId, client);
16
+ });
17
+ return () => {
18
+ clients.forEach((client) => {
19
+ unregisterPanelClient(dashboardId, panelId, client);
20
+ });
21
+ };
22
+ }, [
23
+ dashboardId,
24
+ panelId,
25
+ clients,
26
+ registerPanelClient,
27
+ unregisterPanelClient,
28
+ ]);
29
+ }
30
+ //# sourceMappingURL=usePanelClientRegistration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePanelClientRegistration.js","sourceRoot":"","sources":["../../src/dashboard/usePanelClientRegistration.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAChC,OAAO,EAAC,2BAA2B,EAAC,MAAM,wBAAwB,CAAC;AAEnE;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CACxC,WAA+B,EAC/B,OAA2B,EAC3B,OAAuB;IAEvB,MAAM,mBAAmB,GAAG,2BAA2B,CACrD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,mBAAmB,CACrD,CAAC;IACF,MAAM,qBAAqB,GAAG,2BAA2B,CACvD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,qBAAqB,CACvD,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACzB,mBAAmB,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACzB,qBAAqB,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC,EAAE;QACD,WAAW;QACX,OAAO;QACP,OAAO;QACP,mBAAmB;QACnB,qBAAqB;KACtB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import {type MosaicClient} from '@uwdata/mosaic-core';\nimport {useEffect} from 'react';\nimport {useStoreWithMosaicDashboard} from './MosaicDashboardSlice';\n\n/**\n * Registers Mosaic clients for a dashboard panel so the panel's reset button\n * can track which filters originate from this panel.\n */\nexport function usePanelClientRegistration(\n dashboardId: string | undefined,\n panelId: string | undefined,\n clients: MosaicClient[],\n): void {\n const registerPanelClient = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.registerPanelClient,\n );\n const unregisterPanelClient = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.unregisterPanelClient,\n );\n\n useEffect(() => {\n if (!dashboardId || !panelId || clients.length === 0) {\n return;\n }\n\n clients.forEach((client) => {\n registerPanelClient(dashboardId, panelId, client);\n });\n\n return () => {\n clients.forEach((client) => {\n unregisterPanelClient(dashboardId, panelId, client);\n });\n };\n }, [\n dashboardId,\n panelId,\n clients,\n registerPanelClient,\n unregisterPanelClient,\n ]);\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import { type MosaicClient } from '@uwdata/mosaic-core';
2
+ /**
3
+ * Returns the list of registered Mosaic clients for a specific dashboard panel.
4
+ * These clients are used to determine which filters originate from this panel.
5
+ */
6
+ export declare function usePanelClients(dashboardId: string, panelId: string): MosaicClient[];
7
+ //# sourceMappingURL=usePanelClients.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePanelClients.d.ts","sourceRoot":"","sources":["../../src/dashboard/usePanelClients.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAMtD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,YAAY,EAAE,CAOhB"}
@@ -0,0 +1,13 @@
1
+ import { useStoreWithMosaicDashboard, getMosaicDashboardPanelId, } from './MosaicDashboardSlice';
2
+ /**
3
+ * Returns the list of registered Mosaic clients for a specific dashboard panel.
4
+ * These clients are used to determine which filters originate from this panel.
5
+ */
6
+ export function usePanelClients(dashboardId, panelId) {
7
+ const panelClientsFromStore = useStoreWithMosaicDashboard((state) => {
8
+ const key = getMosaicDashboardPanelId(dashboardId, panelId);
9
+ return state.mosaicDashboard.runtime.panelClients[key];
10
+ });
11
+ return panelClientsFromStore ?? [];
12
+ }
13
+ //# sourceMappingURL=usePanelClients.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePanelClients.js","sourceRoot":"","sources":["../../src/dashboard/usePanelClients.ts"],"names":[],"mappings":"AACA,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAEhC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,WAAmB,EACnB,OAAe;IAEf,MAAM,qBAAqB,GAAG,2BAA2B,CAAC,CAAC,KAAK,EAAE,EAAE;QAClE,MAAM,GAAG,GAAG,yBAAyB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC5D,OAAO,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,OAAO,qBAAqB,IAAI,EAAE,CAAC;AACrC,CAAC","sourcesContent":["import {type MosaicClient} from '@uwdata/mosaic-core';\nimport {\n useStoreWithMosaicDashboard,\n getMosaicDashboardPanelId,\n} from './MosaicDashboardSlice';\n\n/**\n * Returns the list of registered Mosaic clients for a specific dashboard panel.\n * These clients are used to determine which filters originate from this panel.\n */\nexport function usePanelClients(\n dashboardId: string,\n panelId: string,\n): MosaicClient[] {\n const panelClientsFromStore = useStoreWithMosaicDashboard((state) => {\n const key = getMosaicDashboardPanelId(dashboardId, panelId);\n return state.mosaicDashboard.runtime.panelClients[key];\n });\n\n return panelClientsFromStore ?? [];\n}\n"]}
@@ -1,9 +1,10 @@
1
1
  import { type ComponentProps, type PropsWithChildren, type ReactElement } from 'react';
2
- import { Button, Table } from '@sqlrooms/ui';
2
+ import { Table } from '@sqlrooms/ui';
3
3
  import { type DataTableExplorerHeaderProps } from './DataTableExplorerHeader';
4
4
  import { type DataTableExplorerRowsProps } from './DataTableExplorerRows';
5
5
  import { type DataTableExplorerStatusBarProps } from './DataTableExplorerStatusBar';
6
6
  import type { DataTableExplorerOptions, UseDataTableExplorerReturn } from './types';
7
+ import { ResetFiltersButton } from '../dashboard/components/ResetFiltersButton';
7
8
  export type DataTableExplorerRootProps = PropsWithChildren<{
8
9
  explorer: UseDataTableExplorerReturn;
9
10
  }>;
@@ -20,7 +21,8 @@ export type DataTableExplorerCompoundStatusBarProps = Omit<DataTableExplorerStat
20
21
  declare function DataTableExplorerCompoundStatusBar(props: DataTableExplorerCompoundStatusBarProps): import("react/jsx-runtime").JSX.Element;
21
22
  export type DataTableExplorerCompoundTableProps = ComponentProps<typeof Table>;
22
23
  declare function DataTableExplorerCompoundTable({ className, disableWrapper, style, ...props }: DataTableExplorerCompoundTableProps): import("react/jsx-runtime").JSX.Element;
23
- export type DataTableExplorerCompoundResetButtonProps = Omit<ComponentProps<typeof Button>, 'onClick'> & {
24
+ export type DataTableExplorerCompoundResetButtonProps = Omit<ComponentProps<typeof ResetFiltersButton>, 'disabled' | 'onClick'> & {
25
+ disabled?: boolean;
24
26
  onClick?: () => void;
25
27
  };
26
28
  declare function DataTableExplorerCompoundResetButton({ className, disabled: disabledProp, onClick, ...props }: DataTableExplorerCompoundResetButtonProps): import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"DataTableExplorer.d.ts","sourceRoot":"","sources":["../../src/data-table-explorer/DataTableExplorer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAClB,MAAM,OAAO,CAAC;AACf,OAAO,EAAC,MAAM,EAAM,KAAK,EAAC,MAAM,cAAc,CAAC;AAG/C,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC3B,MAAM,SAAS,CAAC;AAiBjB,MAAM,MAAM,0BAA0B,GAAG,iBAAiB,CAAC;IACzD,QAAQ,EAAE,0BAA0B,CAAC;CACtC,CAAC,CAAC;AAEH;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,QAAQ,GACT,EAAE,0BAA0B,2CAM5B;AAED,MAAM,MAAM,sBAAsB,GAChC,iBAAiB,CAAC,wBAAwB,CAAC,CAAC;AAkB9C,MAAM,MAAM,oCAAoC,GAAG,IAAI,CACrD,4BAA4B,EAC5B,UAAU,CACX,CAAC;AAEF,iBAAS,+BAA+B,CACtC,KAAK,EAAE,oCAAoC,2CAI5C;AAED,MAAM,MAAM,kCAAkC,GAAG,IAAI,CACnD,0BAA0B,EAC1B,UAAU,CACX,CAAC;AAEF,iBAAS,6BAA6B,CACpC,KAAK,EAAE,kCAAkC,2CAI1C;AAED,MAAM,MAAM,uCAAuC,GAAG,IAAI,CACxD,+BAA+B,EAC/B,UAAU,CACX,CAAC;AAEF,iBAAS,kCAAkC,CACzC,KAAK,EAAE,uCAAuC,2CAI/C;AAED,MAAM,MAAM,mCAAmC,GAAG,cAAc,CAAC,OAAO,KAAK,CAAC,CAAC;AAE/E,iBAAS,8BAA8B,CAAC,EACtC,SAAS,EACT,cAAqB,EACrB,KAAK,EACL,GAAG,KAAK,EACT,EAAE,mCAAmC,2CAcrC;AAED,MAAM,MAAM,yCAAyC,GAAG,IAAI,CAC1D,cAAc,CAAC,OAAO,MAAM,CAAC,EAC7B,SAAS,CACV,GAAG;IACF,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,iBAAS,oCAAoC,CAAC,EAC5C,SAAS,EACT,QAAQ,EAAE,YAAY,EACtB,OAAO,EACP,GAAG,KAAK,EACT,EAAE,yCAAyC,2CAsB3C;AAED,KAAK,kCAAkC,GAAG,CAAC,CACzC,KAAK,EAAE,sBAAsB,KAC1B,YAAY,CAAC,GAAG;IACnB,MAAM,EAAE,OAAO,+BAA+B,CAAC;IAC/C,WAAW,EAAE,OAAO,oCAAoC,CAAC;IACzD,IAAI,EAAE,OAAO,qBAAqB,CAAC;IACnC,IAAI,EAAE,OAAO,6BAA6B,CAAC;IAC3C,SAAS,EAAE,OAAO,kCAAkC,CAAC;IACrD,KAAK,EAAE,OAAO,8BAA8B,CAAC;CAC9C,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,kCAQ5B,CAAC"}
1
+ {"version":3,"file":"DataTableExplorer.d.ts","sourceRoot":"","sources":["../../src/data-table-explorer/DataTableExplorer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAClB,MAAM,OAAO,CAAC;AACf,OAAO,EAAK,KAAK,EAAC,MAAM,cAAc,CAAC;AAEvC,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC3B,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAC,kBAAkB,EAAC,MAAM,4CAA4C,CAAC;AAgB9E,MAAM,MAAM,0BAA0B,GAAG,iBAAiB,CAAC;IACzD,QAAQ,EAAE,0BAA0B,CAAC;CACtC,CAAC,CAAC;AAEH;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,QAAQ,GACT,EAAE,0BAA0B,2CAM5B;AAED,MAAM,MAAM,sBAAsB,GAChC,iBAAiB,CAAC,wBAAwB,CAAC,CAAC;AAkB9C,MAAM,MAAM,oCAAoC,GAAG,IAAI,CACrD,4BAA4B,EAC5B,UAAU,CACX,CAAC;AAEF,iBAAS,+BAA+B,CACtC,KAAK,EAAE,oCAAoC,2CAI5C;AAED,MAAM,MAAM,kCAAkC,GAAG,IAAI,CACnD,0BAA0B,EAC1B,UAAU,CACX,CAAC;AAEF,iBAAS,6BAA6B,CACpC,KAAK,EAAE,kCAAkC,2CAI1C;AAED,MAAM,MAAM,uCAAuC,GAAG,IAAI,CACxD,+BAA+B,EAC/B,UAAU,CACX,CAAC;AAEF,iBAAS,kCAAkC,CACzC,KAAK,EAAE,uCAAuC,2CAI/C;AAED,MAAM,MAAM,mCAAmC,GAAG,cAAc,CAAC,OAAO,KAAK,CAAC,CAAC;AAE/E,iBAAS,8BAA8B,CAAC,EACtC,SAAS,EACT,cAAqB,EACrB,KAAK,EACL,GAAG,KAAK,EACT,EAAE,mCAAmC,2CAcrC;AAED,MAAM,MAAM,yCAAyC,GAAG,IAAI,CAC1D,cAAc,CAAC,OAAO,kBAAkB,CAAC,EACzC,UAAU,GAAG,SAAS,CACvB,GAAG;IACF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,iBAAS,oCAAoC,CAAC,EAC5C,SAAS,EACT,QAAQ,EAAE,YAAY,EACtB,OAAO,EACP,GAAG,KAAK,EACT,EAAE,yCAAyC,2CAiB3C;AAED,KAAK,kCAAkC,GAAG,CAAC,CACzC,KAAK,EAAE,sBAAsB,KAC1B,YAAY,CAAC,GAAG;IACnB,MAAM,EAAE,OAAO,+BAA+B,CAAC;IAC/C,WAAW,EAAE,OAAO,oCAAoC,CAAC;IACzD,IAAI,EAAE,OAAO,qBAAqB,CAAC;IACnC,IAAI,EAAE,OAAO,6BAA6B,CAAC;IAC3C,SAAS,EAAE,OAAO,kCAAkC,CAAC;IACrD,KAAK,EAAE,OAAO,8BAA8B,CAAC;CAC9C,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,kCAQ5B,CAAC"}
@@ -1,12 +1,12 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { createContext, useContext, } from 'react';
3
- import { Button, cn, Table } from '@sqlrooms/ui';
4
- import { FilterX } from 'lucide-react';
3
+ import { cn, Table } from '@sqlrooms/ui';
5
4
  import { getDataTableExplorerTableWidth } from './layout';
6
5
  import { DataTableExplorerHeader, } from './DataTableExplorerHeader';
7
6
  import { DataTableExplorerRows, } from './DataTableExplorerRows';
8
7
  import { DataTableExplorerStatusBar, } from './DataTableExplorerStatusBar';
9
8
  import { useDataTableExplorer } from './useDataTableExplorer';
9
+ import { ResetFiltersButton } from '../dashboard/components/ResetFiltersButton';
10
10
  const explorerContext = createContext(null);
11
11
  function useDataTableExplorerCompoundContext() {
12
12
  const explorer = useContext(explorerContext);
@@ -51,10 +51,10 @@ function DataTableExplorerCompoundTable({ className, disableWrapper = true, styl
51
51
  function DataTableExplorerCompoundResetButton({ className, disabled: disabledProp, onClick, ...props }) {
52
52
  const explorer = useDataTableExplorerCompoundContext();
53
53
  const disabled = disabledProp ?? !explorer.hasFilters;
54
- return (_jsx(Button, { type: "button", size: "icon", variant: "ghost", className: cn('h-7 w-7', className), "aria-label": "Reset filters", title: "Reset filters", disabled: disabled, onClick: () => {
54
+ return (_jsx(ResetFiltersButton, { className: cn('h-7 w-7', className), iconClassName: "h-3.5 w-3.5", disabled: disabled, onClick: () => {
55
55
  explorer.reset();
56
56
  onClick?.();
57
- }, ...props, children: _jsx(FilterX, { className: "h-4 w-4" }) }));
57
+ }, tooltip: "Reset filters", ...props }));
58
58
  }
59
59
  export const DataTableExplorer = Object.assign(DataTableExplorerComponent, {
60
60
  Header: DataTableExplorerCompoundHeader,
@@ -1 +1 @@
1
- {"version":3,"file":"DataTableExplorer.js","sourceRoot":"","sources":["../../src/data-table-explorer/DataTableExplorer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n createContext,\n useContext,\n type ComponentProps,\n type PropsWithChildren,\n type ReactElement,\n} from 'react';\nimport {Button, cn, Table} from '@sqlrooms/ui';\nimport {FilterX} from 'lucide-react';\nimport {getDataTableExplorerTableWidth} from './layout';\nimport {\n DataTableExplorerHeader,\n type DataTableExplorerHeaderProps,\n} from './DataTableExplorerHeader';\nimport {\n DataTableExplorerRows,\n type DataTableExplorerRowsProps,\n} from './DataTableExplorerRows';\nimport {\n DataTableExplorerStatusBar,\n type DataTableExplorerStatusBarProps,\n} from './DataTableExplorerStatusBar';\nimport type {\n DataTableExplorerOptions,\n UseDataTableExplorerReturn,\n} from './types';\nimport {useDataTableExplorer} from './useDataTableExplorer';\n\nconst explorerContext = createContext<UseDataTableExplorerReturn | null>(null);\n\nfunction useDataTableExplorerCompoundContext() {\n const explorer = useContext(explorerContext);\n\n if (!explorer) {\n throw new Error(\n 'DataTableExplorer compound components must be rendered inside <DataTableExplorer> or <DataTableExplorer.Root>.',\n );\n }\n\n return explorer;\n}\n\nexport type DataTableExplorerRootProps = PropsWithChildren<{\n explorer: UseDataTableExplorerReturn;\n}>;\n\n/**\n * Provides an existing explorer instance to compound explorer subcomponents.\n */\nexport function DataTableExplorerRoot({\n children,\n explorer,\n}: DataTableExplorerRootProps) {\n return (\n <explorerContext.Provider value={explorer}>\n {children}\n </explorerContext.Provider>\n );\n}\n\nexport type DataTableExplorerProps =\n PropsWithChildren<DataTableExplorerOptions>;\n\n/**\n * Creates an explorer instance and exposes it to compound explorer\n * subcomponents through context.\n */\nfunction DataTableExplorerComponent({\n children,\n ...options\n}: DataTableExplorerProps): ReactElement {\n const explorer = useDataTableExplorer(options);\n return (\n <DataTableExplorerRoot explorer={explorer}>\n {children}\n </DataTableExplorerRoot>\n );\n}\n\nexport type DataTableExplorerCompoundHeaderProps = Omit<\n DataTableExplorerHeaderProps,\n 'explorer'\n>;\n\nfunction DataTableExplorerCompoundHeader(\n props: DataTableExplorerCompoundHeaderProps,\n) {\n const explorer = useDataTableExplorerCompoundContext();\n return <DataTableExplorerHeader {...props} explorer={explorer} />;\n}\n\nexport type DataTableExplorerCompoundRowsProps = Omit<\n DataTableExplorerRowsProps,\n 'explorer'\n>;\n\nfunction DataTableExplorerCompoundRows(\n props: DataTableExplorerCompoundRowsProps,\n) {\n const explorer = useDataTableExplorerCompoundContext();\n return <DataTableExplorerRows {...props} explorer={explorer} />;\n}\n\nexport type DataTableExplorerCompoundStatusBarProps = Omit<\n DataTableExplorerStatusBarProps,\n 'explorer'\n>;\n\nfunction DataTableExplorerCompoundStatusBar(\n props: DataTableExplorerCompoundStatusBarProps,\n) {\n const explorer = useDataTableExplorerCompoundContext();\n return <DataTableExplorerStatusBar {...props} explorer={explorer} />;\n}\n\nexport type DataTableExplorerCompoundTableProps = ComponentProps<typeof Table>;\n\nfunction DataTableExplorerCompoundTable({\n className,\n disableWrapper = true,\n style,\n ...props\n}: DataTableExplorerCompoundTableProps) {\n const explorer = useDataTableExplorerCompoundContext();\n const tableWidth = getDataTableExplorerTableWidth(explorer.columns);\n\n return (\n <Table\n disableWrapper={disableWrapper}\n className={['min-w-full table-fixed', className]\n .filter(Boolean)\n .join(' ')}\n style={{width: `${tableWidth}px`, ...style}}\n {...props}\n />\n );\n}\n\nexport type DataTableExplorerCompoundResetButtonProps = Omit<\n ComponentProps<typeof Button>,\n 'onClick'\n> & {\n onClick?: () => void;\n};\n\nfunction DataTableExplorerCompoundResetButton({\n className,\n disabled: disabledProp,\n onClick,\n ...props\n}: DataTableExplorerCompoundResetButtonProps) {\n const explorer = useDataTableExplorerCompoundContext();\n const disabled = disabledProp ?? !explorer.hasFilters;\n\n return (\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className={cn('h-7 w-7', className)}\n aria-label=\"Reset filters\"\n title=\"Reset filters\"\n disabled={disabled}\n onClick={() => {\n explorer.reset();\n onClick?.();\n }}\n {...props}\n >\n <FilterX className=\"h-4 w-4\" />\n </Button>\n );\n}\n\ntype DataTableExplorerCompoundComponent = ((\n props: DataTableExplorerProps,\n) => ReactElement) & {\n Header: typeof DataTableExplorerCompoundHeader;\n ResetButton: typeof DataTableExplorerCompoundResetButton;\n Root: typeof DataTableExplorerRoot;\n Rows: typeof DataTableExplorerCompoundRows;\n StatusBar: typeof DataTableExplorerCompoundStatusBar;\n Table: typeof DataTableExplorerCompoundTable;\n};\n\nexport const DataTableExplorer: DataTableExplorerCompoundComponent =\n Object.assign(DataTableExplorerComponent, {\n Header: DataTableExplorerCompoundHeader,\n ResetButton: DataTableExplorerCompoundResetButton,\n Root: DataTableExplorerRoot,\n Rows: DataTableExplorerCompoundRows,\n StatusBar: DataTableExplorerCompoundStatusBar,\n Table: DataTableExplorerCompoundTable,\n });\n"]}
1
+ {"version":3,"file":"DataTableExplorer.js","sourceRoot":"","sources":["../../src/data-table-explorer/DataTableExplorer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n createContext,\n useContext,\n type ComponentProps,\n type PropsWithChildren,\n type ReactElement,\n} from 'react';\nimport {cn, Table} from '@sqlrooms/ui';\nimport {getDataTableExplorerTableWidth} from './layout';\nimport {\n DataTableExplorerHeader,\n type DataTableExplorerHeaderProps,\n} from './DataTableExplorerHeader';\nimport {\n DataTableExplorerRows,\n type DataTableExplorerRowsProps,\n} from './DataTableExplorerRows';\nimport {\n DataTableExplorerStatusBar,\n type DataTableExplorerStatusBarProps,\n} from './DataTableExplorerStatusBar';\nimport type {\n DataTableExplorerOptions,\n UseDataTableExplorerReturn,\n} from './types';\nimport {useDataTableExplorer} from './useDataTableExplorer';\nimport {ResetFiltersButton} from '../dashboard/components/ResetFiltersButton';\n\nconst explorerContext = createContext<UseDataTableExplorerReturn | null>(null);\n\nfunction useDataTableExplorerCompoundContext() {\n const explorer = useContext(explorerContext);\n\n if (!explorer) {\n throw new Error(\n 'DataTableExplorer compound components must be rendered inside <DataTableExplorer> or <DataTableExplorer.Root>.',\n );\n }\n\n return explorer;\n}\n\nexport type DataTableExplorerRootProps = PropsWithChildren<{\n explorer: UseDataTableExplorerReturn;\n}>;\n\n/**\n * Provides an existing explorer instance to compound explorer subcomponents.\n */\nexport function DataTableExplorerRoot({\n children,\n explorer,\n}: DataTableExplorerRootProps) {\n return (\n <explorerContext.Provider value={explorer}>\n {children}\n </explorerContext.Provider>\n );\n}\n\nexport type DataTableExplorerProps =\n PropsWithChildren<DataTableExplorerOptions>;\n\n/**\n * Creates an explorer instance and exposes it to compound explorer\n * subcomponents through context.\n */\nfunction DataTableExplorerComponent({\n children,\n ...options\n}: DataTableExplorerProps): ReactElement {\n const explorer = useDataTableExplorer(options);\n return (\n <DataTableExplorerRoot explorer={explorer}>\n {children}\n </DataTableExplorerRoot>\n );\n}\n\nexport type DataTableExplorerCompoundHeaderProps = Omit<\n DataTableExplorerHeaderProps,\n 'explorer'\n>;\n\nfunction DataTableExplorerCompoundHeader(\n props: DataTableExplorerCompoundHeaderProps,\n) {\n const explorer = useDataTableExplorerCompoundContext();\n return <DataTableExplorerHeader {...props} explorer={explorer} />;\n}\n\nexport type DataTableExplorerCompoundRowsProps = Omit<\n DataTableExplorerRowsProps,\n 'explorer'\n>;\n\nfunction DataTableExplorerCompoundRows(\n props: DataTableExplorerCompoundRowsProps,\n) {\n const explorer = useDataTableExplorerCompoundContext();\n return <DataTableExplorerRows {...props} explorer={explorer} />;\n}\n\nexport type DataTableExplorerCompoundStatusBarProps = Omit<\n DataTableExplorerStatusBarProps,\n 'explorer'\n>;\n\nfunction DataTableExplorerCompoundStatusBar(\n props: DataTableExplorerCompoundStatusBarProps,\n) {\n const explorer = useDataTableExplorerCompoundContext();\n return <DataTableExplorerStatusBar {...props} explorer={explorer} />;\n}\n\nexport type DataTableExplorerCompoundTableProps = ComponentProps<typeof Table>;\n\nfunction DataTableExplorerCompoundTable({\n className,\n disableWrapper = true,\n style,\n ...props\n}: DataTableExplorerCompoundTableProps) {\n const explorer = useDataTableExplorerCompoundContext();\n const tableWidth = getDataTableExplorerTableWidth(explorer.columns);\n\n return (\n <Table\n disableWrapper={disableWrapper}\n className={['min-w-full table-fixed', className]\n .filter(Boolean)\n .join(' ')}\n style={{width: `${tableWidth}px`, ...style}}\n {...props}\n />\n );\n}\n\nexport type DataTableExplorerCompoundResetButtonProps = Omit<\n ComponentProps<typeof ResetFiltersButton>,\n 'disabled' | 'onClick'\n> & {\n disabled?: boolean;\n onClick?: () => void;\n};\n\nfunction DataTableExplorerCompoundResetButton({\n className,\n disabled: disabledProp,\n onClick,\n ...props\n}: DataTableExplorerCompoundResetButtonProps) {\n const explorer = useDataTableExplorerCompoundContext();\n const disabled = disabledProp ?? !explorer.hasFilters;\n\n return (\n <ResetFiltersButton\n className={cn('h-7 w-7', className)}\n iconClassName=\"h-3.5 w-3.5\"\n disabled={disabled}\n onClick={() => {\n explorer.reset();\n onClick?.();\n }}\n tooltip=\"Reset filters\"\n {...props}\n />\n );\n}\n\ntype DataTableExplorerCompoundComponent = ((\n props: DataTableExplorerProps,\n) => ReactElement) & {\n Header: typeof DataTableExplorerCompoundHeader;\n ResetButton: typeof DataTableExplorerCompoundResetButton;\n Root: typeof DataTableExplorerRoot;\n Rows: typeof DataTableExplorerCompoundRows;\n StatusBar: typeof DataTableExplorerCompoundStatusBar;\n Table: typeof DataTableExplorerCompoundTable;\n};\n\nexport const DataTableExplorer: DataTableExplorerCompoundComponent =\n Object.assign(DataTableExplorerComponent, {\n Header: DataTableExplorerCompoundHeader,\n ResetButton: DataTableExplorerCompoundResetButton,\n Root: DataTableExplorerRoot,\n Rows: DataTableExplorerCompoundRows,\n StatusBar: DataTableExplorerCompoundStatusBar,\n Table: DataTableExplorerCompoundTable,\n });\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DataTableExplorerCategoryClient.d.ts","sourceRoot":"","sources":["../../src/data-table-explorer/DataTableExplorerCategoryClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAe,KAAK,SAAS,EAAC,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAC,KAAK,QAAQ,EAAE,KAAK,EAAC,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAC,gCAAgC,EAAC,MAAM,SAAS,CAAC;AAC9D,OAAO,EAIL,KAAK,gBAAgB,EAGtB,MAAM,SAAS,CAAC;AAEjB,KAAK,qBAAqB,GAAG;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;IACnB,aAAa,EAAE,CAAC,OAAO,EAAE,gCAAgC,KAAK,IAAI,CAAC;IACnE,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,qBAAa,+BAAgC,SAAQ,YAAY;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,aAAa,CAAC,CAAQ;IAC9B,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAEpB;IACV,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAC,CAAqB;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,SAAS,CAAC,CAAqB;gBAE3B,OAAO,EAAE,qBAAqB;IAQ1C,IAAa,YAAY,IAAI,OAAO,CAEnC;IAED,OAAO,CAAC,WAAW;IAuBnB,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK;IAM3B,eAAe,CAAC,SAAS,EAAE,OAAO;IAQlC,YAAY,CAAC,IAAI,EAAE,gBAAgB,EAAE;IAY5B,YAAY,IAAI,IAAI;IAOpB,KAAK,CAAC,MAAM,GAAE,KAAK,CAAC,QAAQ,CAAM,GAAG,KAAK;IAI1C,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAchC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAOvC,KAAK;IAKL,WAAW,CAAC,GAAG,EAAE,MAAM;CAiBxB;AAED,KAAK,2CAA2C,GAAG;IACjD,aAAa,EAAE,+BAA+B,CAAC;CAChD,CAAC;AAEF,qBAAa,oCAAqC,SAAQ,YAAY;IACpE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;gBAEpD,OAAO,EAAE,2CAA2C;IAKvD,YAAY,IAAI,IAAI;IAKpB,KAAK,CAAC,MAAM,GAAE,KAAK,CAAC,QAAQ,CAAM,GAAG,KAAK;IAI1C,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAOhC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CAIxC"}
1
+ {"version":3,"file":"DataTableExplorerCategoryClient.d.ts","sourceRoot":"","sources":["../../src/data-table-explorer/DataTableExplorerCategoryClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAe,KAAK,SAAS,EAAC,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAC,KAAK,QAAQ,EAAE,KAAK,EAAC,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAC,gCAAgC,EAAC,MAAM,SAAS,CAAC;AAC9D,OAAO,EAIL,KAAK,gBAAgB,EAGtB,MAAM,SAAS,CAAC;AAEjB,KAAK,qBAAqB,GAAG;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;IACnB,aAAa,EAAE,CAAC,OAAO,EAAE,gCAAgC,KAAK,IAAI,CAAC;IACnE,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,qBAAa,+BAAgC,SAAQ,YAAY;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,aAAa,CAAC,CAAQ;IAC9B,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAEpB;IACV,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAC,CAAqB;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,SAAS,CAAC,CAAqB;gBAE3B,OAAO,EAAE,qBAAqB;IAQ1C,IAAa,YAAY,IAAI,OAAO,CAEnC;IAED,OAAO,CAAC,WAAW;IAwBnB,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK;IAM3B,eAAe,CAAC,SAAS,EAAE,OAAO;IAQlC,YAAY,CAAC,IAAI,EAAE,gBAAgB,EAAE;IAY5B,YAAY,IAAI,IAAI;IAOpB,KAAK,CAAC,MAAM,GAAE,KAAK,CAAC,QAAQ,CAAM,GAAG,KAAK;IAI1C,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAchC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAOvC,KAAK;IAKL,WAAW,CAAC,GAAG,EAAE,MAAM;CAiBxB;AAED,KAAK,2CAA2C,GAAG;IACjD,aAAa,EAAE,+BAA+B,CAAC;CAChD,CAAC;AAEF,qBAAa,oCAAqC,SAAQ,YAAY;IACpE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;gBAEpD,OAAO,EAAE,2CAA2C;IAKvD,YAAY,IAAI,IAAI;IAKpB,KAAK,CAAC,MAAM,GAAE,KAAK,CAAC,QAAQ,CAAM,GAAG,KAAK;IAI1C,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAOhC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CAIxC"}
@@ -29,6 +29,7 @@ export class DataTableExplorerCategoryClient extends MosaicClient {
29
29
  this.onStateChange({
30
30
  bucketCount,
31
31
  buckets,
32
+ client: this,
32
33
  error: this.filteredError ?? this.totalError,
33
34
  isLoading: this.filteredLoading || this.totalLoading,
34
35
  kind: 'category',
@@ -1 +1 @@
1
- {"version":3,"file":"DataTableExplorerCategoryClient.js","sourceRoot":"","sources":["../../src/data-table-explorer/DataTableExplorerCategoryClient.ts"],"names":[],"mappings":"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","sourcesContent":["import {MosaicClient, clausePoint, type Selection} from '@uwdata/mosaic-core';\nimport {type ExprNode, Query} from '@uwdata/mosaic-sql';\nimport type * as arrow from 'apache-arrow';\nimport type {DataTableExplorerCategorySummary} from './types';\nimport {\n buildCategoryBuckets,\n buildCategorySummaryQuery,\n categoryKeyToSelectionValue,\n type CategoryCountRow,\n isSelectableCategoryKey,\n rowsFromQueryResult,\n} from './utils';\n\ntype CategoryClientOptions = {\n categoryLimit: number;\n field: arrow.Field;\n onStateChange: (summary: DataTableExplorerCategorySummary) => void;\n selection: Selection;\n tableName: string;\n};\n\nexport class DataTableExplorerCategoryClient extends MosaicClient {\n private readonly categoryLimit: number;\n private filteredError?: Error;\n private filteredLoading = true;\n private readonly field: arrow.Field;\n private readonly onStateChange: (\n summary: DataTableExplorerCategorySummary,\n ) => void;\n private selectedKey?: string;\n private filteredRows?: CategoryCountRow[];\n private readonly tableName: string;\n private totalError?: Error;\n private totalLoading = true;\n private totalRows?: CategoryCountRow[];\n\n constructor(options: CategoryClientOptions) {\n super(options.selection);\n this.categoryLimit = options.categoryLimit;\n this.field = options.field;\n this.onStateChange = options.onStateChange;\n this.tableName = options.tableName;\n }\n\n override get filterStable(): boolean {\n return false;\n }\n\n private emitSummary() {\n const filteredRows =\n this.filteredRows ?? (this.filteredLoading ? (this.totalRows ?? []) : []);\n const totalRows =\n this.totalRows ?? (this.totalLoading ? (this.filteredRows ?? []) : []);\n const {bucketCount, buckets} = buildCategoryBuckets(\n filteredRows,\n totalRows,\n this.categoryLimit,\n this.selectedKey,\n );\n\n this.onStateChange({\n bucketCount,\n buckets,\n error: this.filteredError ?? this.totalError,\n isLoading: this.filteredLoading || this.totalLoading,\n kind: 'category',\n selectedKey: this.selectedKey,\n toggleValue: (key) => this.toggleValue(key),\n });\n }\n\n setTotalError(error?: Error) {\n this.totalError = error;\n this.totalLoading = false;\n this.emitSummary();\n }\n\n setTotalLoading(isLoading: boolean) {\n this.totalLoading = isLoading;\n if (isLoading) {\n this.totalError = undefined;\n }\n this.emitSummary();\n }\n\n setTotalRows(rows: CategoryCountRow[]) {\n this.totalRows = rows\n .slice()\n .sort(\n (left: CategoryCountRow, right: CategoryCountRow) =>\n right.total - left.total,\n );\n this.totalError = undefined;\n this.totalLoading = false;\n this.emitSummary();\n }\n\n override queryPending(): this {\n this.filteredLoading = true;\n this.filteredError = undefined;\n this.emitSummary();\n return this;\n }\n\n override query(filter: Array<ExprNode> = []): Query {\n return buildCategorySummaryQuery(this.tableName, this.field.name, filter);\n }\n\n override queryResult(data: unknown): this {\n const rows = rowsFromQueryResult<CategoryCountRow>(data)\n .slice()\n .sort(\n (left: CategoryCountRow, right: CategoryCountRow) =>\n right.total - left.total,\n );\n this.filteredRows = rows;\n this.filteredError = undefined;\n this.filteredLoading = false;\n this.emitSummary();\n return this;\n }\n\n override queryError(error: Error): this {\n this.filteredError = error;\n this.filteredLoading = false;\n this.emitSummary();\n return this;\n }\n\n reset() {\n this.selectedKey = undefined;\n this.emitSummary();\n }\n\n toggleValue(key: string) {\n if (!isSelectableCategoryKey(key)) {\n return;\n }\n\n this.selectedKey = this.selectedKey === key ? undefined : key;\n this.filterBy?.update(\n clausePoint(\n this.field.name,\n categoryKeyToSelectionValue(this.selectedKey),\n {\n source: this,\n },\n ),\n );\n this.emitSummary();\n }\n}\n\ntype DataTableExplorerCategoryTotalClientOptions = {\n summaryClient: DataTableExplorerCategoryClient;\n};\n\nexport class DataTableExplorerCategoryTotalClient extends MosaicClient {\n private readonly summaryClient: DataTableExplorerCategoryClient;\n\n constructor(options: DataTableExplorerCategoryTotalClientOptions) {\n super();\n this.summaryClient = options.summaryClient;\n }\n\n override queryPending(): this {\n this.summaryClient.setTotalLoading(true);\n return this;\n }\n\n override query(filter: Array<ExprNode> = []): Query {\n return this.summaryClient.query(filter);\n }\n\n override queryResult(data: unknown): this {\n this.summaryClient.setTotalRows(\n rowsFromQueryResult<CategoryCountRow>(data),\n );\n return this;\n }\n\n override queryError(error: Error): this {\n this.summaryClient.setTotalError(error);\n return this;\n }\n}\n"]}
1
+ {"version":3,"file":"DataTableExplorerCategoryClient.js","sourceRoot":"","sources":["../../src/data-table-explorer/DataTableExplorerCategoryClient.ts"],"names":[],"mappings":"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","sourcesContent":["import {MosaicClient, clausePoint, type Selection} from '@uwdata/mosaic-core';\nimport {type ExprNode, Query} from '@uwdata/mosaic-sql';\nimport type * as arrow from 'apache-arrow';\nimport type {DataTableExplorerCategorySummary} from './types';\nimport {\n buildCategoryBuckets,\n buildCategorySummaryQuery,\n categoryKeyToSelectionValue,\n type CategoryCountRow,\n isSelectableCategoryKey,\n rowsFromQueryResult,\n} from './utils';\n\ntype CategoryClientOptions = {\n categoryLimit: number;\n field: arrow.Field;\n onStateChange: (summary: DataTableExplorerCategorySummary) => void;\n selection: Selection;\n tableName: string;\n};\n\nexport class DataTableExplorerCategoryClient extends MosaicClient {\n private readonly categoryLimit: number;\n private filteredError?: Error;\n private filteredLoading = true;\n private readonly field: arrow.Field;\n private readonly onStateChange: (\n summary: DataTableExplorerCategorySummary,\n ) => void;\n private selectedKey?: string;\n private filteredRows?: CategoryCountRow[];\n private readonly tableName: string;\n private totalError?: Error;\n private totalLoading = true;\n private totalRows?: CategoryCountRow[];\n\n constructor(options: CategoryClientOptions) {\n super(options.selection);\n this.categoryLimit = options.categoryLimit;\n this.field = options.field;\n this.onStateChange = options.onStateChange;\n this.tableName = options.tableName;\n }\n\n override get filterStable(): boolean {\n return false;\n }\n\n private emitSummary() {\n const filteredRows =\n this.filteredRows ?? (this.filteredLoading ? (this.totalRows ?? []) : []);\n const totalRows =\n this.totalRows ?? (this.totalLoading ? (this.filteredRows ?? []) : []);\n const {bucketCount, buckets} = buildCategoryBuckets(\n filteredRows,\n totalRows,\n this.categoryLimit,\n this.selectedKey,\n );\n\n this.onStateChange({\n bucketCount,\n buckets,\n client: this,\n error: this.filteredError ?? this.totalError,\n isLoading: this.filteredLoading || this.totalLoading,\n kind: 'category',\n selectedKey: this.selectedKey,\n toggleValue: (key) => this.toggleValue(key),\n });\n }\n\n setTotalError(error?: Error) {\n this.totalError = error;\n this.totalLoading = false;\n this.emitSummary();\n }\n\n setTotalLoading(isLoading: boolean) {\n this.totalLoading = isLoading;\n if (isLoading) {\n this.totalError = undefined;\n }\n this.emitSummary();\n }\n\n setTotalRows(rows: CategoryCountRow[]) {\n this.totalRows = rows\n .slice()\n .sort(\n (left: CategoryCountRow, right: CategoryCountRow) =>\n right.total - left.total,\n );\n this.totalError = undefined;\n this.totalLoading = false;\n this.emitSummary();\n }\n\n override queryPending(): this {\n this.filteredLoading = true;\n this.filteredError = undefined;\n this.emitSummary();\n return this;\n }\n\n override query(filter: Array<ExprNode> = []): Query {\n return buildCategorySummaryQuery(this.tableName, this.field.name, filter);\n }\n\n override queryResult(data: unknown): this {\n const rows = rowsFromQueryResult<CategoryCountRow>(data)\n .slice()\n .sort(\n (left: CategoryCountRow, right: CategoryCountRow) =>\n right.total - left.total,\n );\n this.filteredRows = rows;\n this.filteredError = undefined;\n this.filteredLoading = false;\n this.emitSummary();\n return this;\n }\n\n override queryError(error: Error): this {\n this.filteredError = error;\n this.filteredLoading = false;\n this.emitSummary();\n return this;\n }\n\n reset() {\n this.selectedKey = undefined;\n this.emitSummary();\n }\n\n toggleValue(key: string) {\n if (!isSelectableCategoryKey(key)) {\n return;\n }\n\n this.selectedKey = this.selectedKey === key ? undefined : key;\n this.filterBy?.update(\n clausePoint(\n this.field.name,\n categoryKeyToSelectionValue(this.selectedKey),\n {\n source: this,\n },\n ),\n );\n this.emitSummary();\n }\n}\n\ntype DataTableExplorerCategoryTotalClientOptions = {\n summaryClient: DataTableExplorerCategoryClient;\n};\n\nexport class DataTableExplorerCategoryTotalClient extends MosaicClient {\n private readonly summaryClient: DataTableExplorerCategoryClient;\n\n constructor(options: DataTableExplorerCategoryTotalClientOptions) {\n super();\n this.summaryClient = options.summaryClient;\n }\n\n override queryPending(): this {\n this.summaryClient.setTotalLoading(true);\n return this;\n }\n\n override query(filter: Array<ExprNode> = []): Query {\n return this.summaryClient.query(filter);\n }\n\n override queryResult(data: unknown): this {\n this.summaryClient.setTotalRows(\n rowsFromQueryResult<CategoryCountRow>(data),\n );\n return this;\n }\n\n override queryError(error: Error): this {\n this.summaryClient.setTotalError(error);\n return this;\n }\n}\n"]}
@@ -3,7 +3,9 @@ import type { Dispatch, SetStateAction } from 'react';
3
3
  import type { DataTableExplorerCountState } from './DataTableExplorerCountClient';
4
4
  import type { DataTableExplorerPageState } from './DataTableExplorerPageClient';
5
5
  import type { DataTableExplorerPaginationState, DataTableExplorerSorting, DataTableExplorerSummaryState } from './types';
6
+ import type { MosaicClient } from '@uwdata/mosaic-core';
6
7
  export type DataTableExplorerStoreState = {
8
+ client: MosaicClient | null;
7
9
  filteredCount: DataTableExplorerCountState;
8
10
  lastNonEmptyPageTable?: {
9
11
  datasetId: string;
@@ -17,6 +19,7 @@ export type DataTableExplorerStoreState = {
17
19
  isLoading: boolean;
18
20
  tableName?: string;
19
21
  };
22
+ setClient: (client: MosaicClient | null) => void;
20
23
  setFilteredCount: (state: DataTableExplorerCountState) => void;
21
24
  setPage: (state: DataTableExplorerPageState) => void;
22
25
  setPagination: Dispatch<SetStateAction<DataTableExplorerPaginationState>>;
@@ -1 +1 @@
1
- {"version":3,"file":"createDataTableExplorerStore.d.ts","sourceRoot":"","sources":["../../src/data-table-explorer/createDataTableExplorerStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAC,QAAQ,EAAE,cAAc,EAAC,MAAM,OAAO,CAAC;AAEpD,OAAO,KAAK,EAAC,2BAA2B,EAAC,MAAM,gCAAgC,CAAC;AAChF,OAAO,KAAK,EAAC,0BAA0B,EAAC,MAAM,+BAA+B,CAAC;AAC9E,OAAO,KAAK,EACV,gCAAgC,EAChC,wBAAwB,EACxB,6BAA6B,EAC9B,MAAM,SAAS,CAAC;AAcjB,MAAM,MAAM,2BAA2B,GAAG;IACxC,aAAa,EAAE,2BAA2B,CAAC;IAC3C,qBAAqB,CAAC,EAAE;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;KACxB,CAAC;IACF,IAAI,EAAE,0BAA0B,CAAC;IACjC,UAAU,EAAE,gCAAgC,CAAC;IAC7C,MAAM,EAAE;QACN,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,SAAS,EAAE,OAAO,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,gBAAgB,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,IAAI,CAAC;IAC/D,OAAO,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,CAAC;IACrD,aAAa,EAAE,QAAQ,CAAC,cAAc,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAC1E,cAAc,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,gBAAgB,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE,gBAAgB,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACtE,UAAU,EAAE,QAAQ,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAC/D,UAAU,EAAE,CACV,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,6BAA6B,KACnC,IAAI,CAAC;IACV,aAAa,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,IAAI,CAAC;IAC5D,OAAO,EAAE,wBAAwB,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;IACzD,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,UAAU,EAAE,2BAA2B,CAAC;IACxC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,mBAAmB,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC;IACrD,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,UAAU,CAC7C,OAAO,4BAA4B,CACpC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB,2DA+IA"}
1
+ {"version":3,"file":"createDataTableExplorerStore.d.ts","sourceRoot":"","sources":["../../src/data-table-explorer/createDataTableExplorerStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAC,QAAQ,EAAE,cAAc,EAAC,MAAM,OAAO,CAAC;AAEpD,OAAO,KAAK,EAAC,2BAA2B,EAAC,MAAM,gCAAgC,CAAC;AAChF,OAAO,KAAK,EAAC,0BAA0B,EAAC,MAAM,+BAA+B,CAAC;AAC9E,OAAO,KAAK,EACV,gCAAgC,EAChC,wBAAwB,EACxB,6BAA6B,EAC9B,MAAM,SAAS,CAAC;AAcjB,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAEtD,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,2BAA2B,CAAC;IAC3C,qBAAqB,CAAC,EAAE;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC;KACxB,CAAC;IACF,IAAI,EAAE,0BAA0B,CAAC;IACjC,UAAU,EAAE,gCAAgC,CAAC;IAC7C,MAAM,EAAE;QACN,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,SAAS,EAAE,OAAO,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,SAAS,EAAE,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC;IACjD,gBAAgB,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,IAAI,CAAC;IAC/D,OAAO,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,CAAC;IACrD,aAAa,EAAE,QAAQ,CAAC,cAAc,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAC1E,cAAc,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,gBAAgB,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE,gBAAgB,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACtE,UAAU,EAAE,QAAQ,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAC/D,UAAU,EAAE,CACV,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,6BAA6B,KACnC,IAAI,CAAC;IACV,aAAa,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,IAAI,CAAC;IAC5D,OAAO,EAAE,wBAAwB,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;IACzD,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,UAAU,EAAE,2BAA2B,CAAC;IACxC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,mBAAmB,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC;IACrD,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,UAAU,CAC7C,OAAO,4BAA4B,CACpC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB,2DAuJA"}
@@ -15,6 +15,7 @@ function resolveSetStateAction(next, previous) {
15
15
  export function createDataTableExplorerStore(options) {
16
16
  const { initialSorting = [], pageSize } = options;
17
17
  return createStore((set) => ({
18
+ client: null,
18
19
  filteredCount: { isLoading: false },
19
20
  lastNonEmptyPageTable: undefined,
20
21
  page: { isLoading: false },
@@ -23,6 +24,11 @@ export function createDataTableExplorerStore(options) {
23
24
  fields: [],
24
25
  isLoading: false,
25
26
  },
27
+ setClient: (client) => {
28
+ set((state) => produce(state, (draft) => {
29
+ draft.client = client;
30
+ }));
31
+ },
26
32
  setFilteredCount: (nextState) => {
27
33
  set((state) => produce(state, (draft) => {
28
34
  draft.filteredCount = nextState;