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

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 (572) hide show
  1. package/LICENSE.md +2 -1
  2. package/README.md +179 -35
  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/agentIntent.d.ts +5 -0
  10. package/dist/ai/agentIntent.d.ts.map +1 -0
  11. package/dist/ai/agentIntent.js +8 -0
  12. package/dist/ai/agentIntent.js.map +1 -0
  13. package/dist/ai/block-document/constants.d.ts +9 -0
  14. package/dist/ai/block-document/constants.d.ts.map +1 -0
  15. package/dist/ai/block-document/constants.js +9 -0
  16. package/dist/ai/block-document/constants.js.map +1 -0
  17. package/dist/ai/block-document/createAddMosaicDashboardBlockTool.d.ts +48 -0
  18. package/dist/ai/block-document/createAddMosaicDashboardBlockTool.d.ts.map +1 -0
  19. package/dist/ai/block-document/createAddMosaicDashboardBlockTool.js +59 -0
  20. package/dist/ai/block-document/createAddMosaicDashboardBlockTool.js.map +1 -0
  21. package/dist/ai/block-document/createBlockDocumentChartTools.d.ts +19 -0
  22. package/dist/ai/block-document/createBlockDocumentChartTools.d.ts.map +1 -0
  23. package/dist/ai/block-document/createBlockDocumentChartTools.js +37 -0
  24. package/dist/ai/block-document/createBlockDocumentChartTools.js.map +1 -0
  25. package/dist/ai/block-document/createBlockDocumentDataTableExplorerTool.d.ts +32 -0
  26. package/dist/ai/block-document/createBlockDocumentDataTableExplorerTool.d.ts.map +1 -0
  27. package/dist/ai/block-document/createBlockDocumentDataTableExplorerTool.js +37 -0
  28. package/dist/ai/block-document/createBlockDocumentDataTableExplorerTool.js.map +1 -0
  29. package/dist/ai/constants.d.ts +3 -0
  30. package/dist/ai/constants.d.ts.map +1 -0
  31. package/dist/ai/constants.js +3 -0
  32. package/dist/ai/constants.js.map +1 -0
  33. package/dist/ai/createDataTableExplorerTool.d.ts +69 -0
  34. package/dist/ai/createDataTableExplorerTool.d.ts.map +1 -0
  35. package/dist/ai/createDataTableExplorerTool.js +68 -0
  36. package/dist/ai/createDataTableExplorerTool.js.map +1 -0
  37. package/dist/ai/dashboard/constants.d.ts +6 -0
  38. package/dist/ai/dashboard/constants.d.ts.map +1 -0
  39. package/dist/ai/dashboard/constants.js +6 -0
  40. package/dist/ai/dashboard/constants.js.map +1 -0
  41. package/dist/ai/dashboard/createDashboardAgentTool.d.ts +17 -0
  42. package/dist/ai/dashboard/createDashboardAgentTool.d.ts.map +1 -0
  43. package/dist/ai/dashboard/createDashboardAgentTool.js +205 -0
  44. package/dist/ai/dashboard/createDashboardAgentTool.js.map +1 -0
  45. package/dist/ai/dashboard/createDashboardAiAdapter.d.ts +14 -0
  46. package/dist/ai/dashboard/createDashboardAiAdapter.d.ts.map +1 -0
  47. package/dist/ai/dashboard/createDashboardAiAdapter.js +75 -0
  48. package/dist/ai/dashboard/createDashboardAiAdapter.js.map +1 -0
  49. package/dist/ai/dashboard/createDashboardAiTools.d.ts +26 -0
  50. package/dist/ai/dashboard/createDashboardAiTools.d.ts.map +1 -0
  51. package/dist/ai/dashboard/createDashboardAiTools.js +40 -0
  52. package/dist/ai/dashboard/createDashboardAiTools.js.map +1 -0
  53. package/dist/ai/dashboard/createDashboardChartTools.d.ts +27 -0
  54. package/dist/ai/dashboard/createDashboardChartTools.d.ts.map +1 -0
  55. package/dist/ai/dashboard/createDashboardChartTools.js +55 -0
  56. package/dist/ai/dashboard/createDashboardChartTools.js.map +1 -0
  57. package/dist/ai/dashboard/createDashboardDataTableExplorerTool.d.ts +23 -0
  58. package/dist/ai/dashboard/createDashboardDataTableExplorerTool.d.ts.map +1 -0
  59. package/dist/ai/dashboard/createDashboardDataTableExplorerTool.js +29 -0
  60. package/dist/ai/dashboard/createDashboardDataTableExplorerTool.js.map +1 -0
  61. package/dist/ai/dashboard/createListDashboardPanelsTool.d.ts +28 -0
  62. package/dist/ai/dashboard/createListDashboardPanelsTool.d.ts.map +1 -0
  63. package/dist/ai/dashboard/createListDashboardPanelsTool.js +54 -0
  64. package/dist/ai/dashboard/createListDashboardPanelsTool.js.map +1 -0
  65. package/dist/ai/dashboard/dashboard-types.d.ts +59 -0
  66. package/dist/ai/dashboard/dashboard-types.d.ts.map +1 -0
  67. package/dist/ai/dashboard/dashboard-types.js +2 -0
  68. package/dist/ai/dashboard/dashboard-types.js.map +1 -0
  69. package/dist/ai/database-types.d.ts +12 -0
  70. package/dist/ai/database-types.d.ts.map +1 -0
  71. package/dist/ai/database-types.js +2 -0
  72. package/dist/ai/database-types.js.map +1 -0
  73. package/dist/ai/errors.d.ts +8 -0
  74. package/dist/ai/errors.d.ts.map +1 -0
  75. package/dist/ai/errors.js +11 -0
  76. package/dist/ai/errors.js.map +1 -0
  77. package/dist/ai/tool-helpers.d.ts +28 -29
  78. package/dist/ai/tool-helpers.d.ts.map +1 -1
  79. package/dist/ai/tool-helpers.js +38 -76
  80. package/dist/ai/tool-helpers.js.map +1 -1
  81. package/dist/ai/tool-schemas.d.ts +9 -4
  82. package/dist/ai/tool-schemas.d.ts.map +1 -1
  83. package/dist/ai/tool-schemas.js +12 -12
  84. package/dist/ai/tool-schemas.js.map +1 -1
  85. package/dist/ai/tool-types.d.ts +19 -1
  86. package/dist/ai/tool-types.d.ts.map +1 -1
  87. package/dist/ai/tool-types.js.map +1 -1
  88. package/dist/ai/types.d.ts +64 -0
  89. package/dist/ai/types.d.ts.map +1 -0
  90. package/dist/ai/types.js +2 -0
  91. package/dist/ai/types.js.map +1 -0
  92. package/dist/ai.d.ts +16 -2
  93. package/dist/ai.d.ts.map +1 -1
  94. package/dist/ai.js +14 -5
  95. package/dist/ai.js.map +1 -1
  96. package/dist/charts/MosaicChart.d.ts +3 -1
  97. package/dist/charts/MosaicChart.d.ts.map +1 -1
  98. package/dist/charts/MosaicChart.js +2 -2
  99. package/dist/charts/MosaicChart.js.map +1 -1
  100. package/dist/charts/MosaicChartError.d.ts +8 -2
  101. package/dist/charts/MosaicChartError.d.ts.map +1 -1
  102. package/dist/charts/MosaicChartError.js +29 -3
  103. package/dist/charts/MosaicChartError.js.map +1 -1
  104. package/dist/charts/MosaicChartSettingsButton.d.ts +15 -0
  105. package/dist/charts/MosaicChartSettingsButton.d.ts.map +1 -0
  106. package/dist/charts/MosaicChartSettingsButton.js +7 -0
  107. package/dist/charts/MosaicChartSettingsButton.js.map +1 -0
  108. package/dist/charts/MosaicChartView.d.ts +2 -0
  109. package/dist/charts/MosaicChartView.d.ts.map +1 -1
  110. package/dist/charts/MosaicChartView.js +19 -7
  111. package/dist/charts/MosaicChartView.js.map +1 -1
  112. package/dist/charts/chart-settings/MosaicChartSettings.d.ts.map +1 -1
  113. package/dist/charts/chart-settings/MosaicChartSettings.js +3 -3
  114. package/dist/charts/chart-settings/MosaicChartSettings.js.map +1 -1
  115. package/dist/charts/chart-settings/MosaicChartSettingsPanel.js +1 -1
  116. package/dist/charts/chart-settings/MosaicChartSettingsPanel.js.map +1 -1
  117. package/dist/charts/chart-settings/MosaicChartSpecViewerPanel.d.ts.map +1 -1
  118. package/dist/charts/chart-settings/MosaicChartSpecViewerPanel.js +2 -1
  119. package/dist/charts/chart-settings/MosaicChartSpecViewerPanel.js.map +1 -1
  120. package/dist/charts/chart-settings/MosaicChartTypeSelector.d.ts.map +1 -1
  121. package/dist/charts/chart-settings/MosaicChartTypeSelector.js +3 -3
  122. package/dist/charts/chart-settings/MosaicChartTypeSelector.js.map +1 -1
  123. package/dist/charts/chart-types/base-types.d.ts +40 -25
  124. package/dist/charts/chart-types/base-types.d.ts.map +1 -1
  125. package/dist/charts/chart-types/base-types.js +5 -0
  126. package/dist/charts/chart-types/base-types.js.map +1 -1
  127. package/dist/charts/chart-types/box-plot/definition.d.ts.map +1 -1
  128. package/dist/charts/chart-types/box-plot/definition.js +1 -0
  129. package/dist/charts/chart-types/box-plot/definition.js.map +1 -1
  130. package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.d.ts +37 -3
  131. package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.d.ts.map +1 -1
  132. package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.js +28 -13
  133. package/dist/charts/chart-types/box-plot/renderer/BoxPlotClient.js.map +1 -1
  134. package/dist/charts/chart-types/box-plot/renderer/BoxPlotPanelRenderer.js +2 -2
  135. package/dist/charts/chart-types/box-plot/renderer/BoxPlotPanelRenderer.js.map +1 -1
  136. package/dist/charts/chart-types/box-plot/renderer/useBoxPlotClient.d.ts +12 -1
  137. package/dist/charts/chart-types/box-plot/renderer/useBoxPlotClient.d.ts.map +1 -1
  138. package/dist/charts/chart-types/box-plot/renderer/useBoxPlotClient.js +13 -3
  139. package/dist/charts/chart-types/box-plot/renderer/useBoxPlotClient.js.map +1 -1
  140. package/dist/charts/chart-types/box-plot/tool.d.ts +20 -24
  141. package/dist/charts/chart-types/box-plot/tool.d.ts.map +1 -1
  142. package/dist/charts/chart-types/box-plot/tool.js +25 -33
  143. package/dist/charts/chart-types/box-plot/tool.js.map +1 -1
  144. package/dist/charts/chart-types/box-plot/validation.d.ts +9 -0
  145. package/dist/charts/chart-types/box-plot/validation.d.ts.map +1 -0
  146. package/dist/charts/chart-types/box-plot/validation.js +32 -0
  147. package/dist/charts/chart-types/box-plot/validation.js.map +1 -0
  148. package/dist/charts/chart-types/chart-config.d.ts +3 -1
  149. package/dist/charts/chart-types/chart-config.d.ts.map +1 -1
  150. package/dist/charts/chart-types/chart-config.js +2 -2
  151. package/dist/charts/chart-types/chart-config.js.map +1 -1
  152. package/dist/charts/chart-types/column-types.d.ts +8 -0
  153. package/dist/charts/chart-types/column-types.d.ts.map +1 -0
  154. package/dist/charts/chart-types/column-types.js +2 -0
  155. package/dist/charts/chart-types/column-types.js.map +1 -0
  156. package/dist/charts/chart-types/count-plot/definition.d.ts.map +1 -1
  157. package/dist/charts/chart-types/count-plot/definition.js +1 -0
  158. package/dist/charts/chart-types/count-plot/definition.js.map +1 -1
  159. package/dist/charts/chart-types/count-plot/spec.d.ts +2 -1
  160. package/dist/charts/chart-types/count-plot/spec.d.ts.map +1 -1
  161. package/dist/charts/chart-types/count-plot/spec.js +47 -34
  162. package/dist/charts/chart-types/count-plot/spec.js.map +1 -1
  163. package/dist/charts/chart-types/count-plot/tool.d.ts +19 -24
  164. package/dist/charts/chart-types/count-plot/tool.d.ts.map +1 -1
  165. package/dist/charts/chart-types/count-plot/tool.js +26 -33
  166. package/dist/charts/chart-types/count-plot/tool.js.map +1 -1
  167. package/dist/charts/chart-types/count-plot/validation.d.ts +8 -0
  168. package/dist/charts/chart-types/count-plot/validation.d.ts.map +1 -0
  169. package/dist/charts/chart-types/count-plot/validation.js +20 -0
  170. package/dist/charts/chart-types/count-plot/validation.js.map +1 -0
  171. package/dist/charts/chart-types/createChartInstructions.d.ts +3 -0
  172. package/dist/charts/chart-types/createChartInstructions.d.ts.map +1 -0
  173. package/dist/charts/chart-types/createChartInstructions.js +12 -0
  174. package/dist/charts/chart-types/createChartInstructions.js.map +1 -0
  175. package/dist/charts/chart-types/createChartTools.d.ts +15 -9
  176. package/dist/charts/chart-types/createChartTools.d.ts.map +1 -1
  177. package/dist/charts/chart-types/createChartTools.js +16 -10
  178. package/dist/charts/chart-types/createChartTools.js.map +1 -1
  179. package/dist/charts/chart-types/createDefaultChartTypes.js +2 -2
  180. package/dist/charts/chart-types/createDefaultChartTypes.js.map +1 -1
  181. package/dist/charts/chart-types/custom-spec/definition.d.ts.map +1 -1
  182. package/dist/charts/chart-types/custom-spec/definition.js +1 -0
  183. package/dist/charts/chart-types/custom-spec/definition.js.map +1 -1
  184. package/dist/charts/chart-types/custom-spec/spec.d.ts +2 -1
  185. package/dist/charts/chart-types/custom-spec/spec.d.ts.map +1 -1
  186. package/dist/charts/chart-types/custom-spec/spec.js +16 -12
  187. package/dist/charts/chart-types/custom-spec/spec.js.map +1 -1
  188. package/dist/charts/chart-types/errors.d.ts +35 -0
  189. package/dist/charts/chart-types/errors.d.ts.map +1 -1
  190. package/dist/charts/chart-types/errors.js +56 -0
  191. package/dist/charts/chart-types/errors.js.map +1 -1
  192. package/dist/charts/chart-types/heatmap/definition.d.ts.map +1 -1
  193. package/dist/charts/chart-types/heatmap/definition.js +1 -0
  194. package/dist/charts/chart-types/heatmap/definition.js.map +1 -1
  195. package/dist/charts/chart-types/heatmap/spec.d.ts +2 -1
  196. package/dist/charts/chart-types/heatmap/spec.d.ts.map +1 -1
  197. package/dist/charts/chart-types/heatmap/spec.js +21 -21
  198. package/dist/charts/chart-types/heatmap/spec.js.map +1 -1
  199. package/dist/charts/chart-types/heatmap/tool.d.ts +20 -24
  200. package/dist/charts/chart-types/heatmap/tool.d.ts.map +1 -1
  201. package/dist/charts/chart-types/heatmap/tool.js +27 -37
  202. package/dist/charts/chart-types/heatmap/tool.js.map +1 -1
  203. package/dist/charts/chart-types/heatmap/validation.d.ts +9 -0
  204. package/dist/charts/chart-types/heatmap/validation.d.ts.map +1 -0
  205. package/dist/charts/chart-types/heatmap/validation.js +34 -0
  206. package/dist/charts/chart-types/heatmap/validation.js.map +1 -0
  207. package/dist/charts/chart-types/histogram/HistogramSettings.d.ts.map +1 -1
  208. package/dist/charts/chart-types/histogram/HistogramSettings.js +3 -1
  209. package/dist/charts/chart-types/histogram/HistogramSettings.js.map +1 -1
  210. package/dist/charts/chart-types/histogram/definition.d.ts.map +1 -1
  211. package/dist/charts/chart-types/histogram/definition.js +1 -0
  212. package/dist/charts/chart-types/histogram/definition.js.map +1 -1
  213. package/dist/charts/chart-types/histogram/schema.d.ts +2 -0
  214. package/dist/charts/chart-types/histogram/schema.d.ts.map +1 -1
  215. package/dist/charts/chart-types/histogram/schema.js +1 -0
  216. package/dist/charts/chart-types/histogram/schema.js.map +1 -1
  217. package/dist/charts/chart-types/histogram/spec.d.ts +2 -1
  218. package/dist/charts/chart-types/histogram/spec.d.ts.map +1 -1
  219. package/dist/charts/chart-types/histogram/spec.js +31 -28
  220. package/dist/charts/chart-types/histogram/spec.js.map +1 -1
  221. package/dist/charts/chart-types/histogram/tool.d.ts +39 -24
  222. package/dist/charts/chart-types/histogram/tool.d.ts.map +1 -1
  223. package/dist/charts/chart-types/histogram/tool.js +39 -33
  224. package/dist/charts/chart-types/histogram/tool.js.map +1 -1
  225. package/dist/charts/chart-types/histogram/validation.d.ts +9 -0
  226. package/dist/charts/chart-types/histogram/validation.d.ts.map +1 -0
  227. package/dist/charts/chart-types/histogram/validation.js +22 -0
  228. package/dist/charts/chart-types/histogram/validation.js.map +1 -0
  229. package/dist/charts/chart-types/index.d.ts +5 -11
  230. package/dist/charts/chart-types/index.d.ts.map +1 -1
  231. package/dist/charts/chart-types/index.js +6 -12
  232. package/dist/charts/chart-types/index.js.map +1 -1
  233. package/dist/charts/chart-types/line-chart/LineChartSettings.d.ts.map +1 -1
  234. package/dist/charts/chart-types/line-chart/LineChartSettings.js +4 -13
  235. package/dist/charts/chart-types/line-chart/LineChartSettings.js.map +1 -1
  236. package/dist/charts/chart-types/line-chart/LineChartXFieldSelector.d.ts +7 -0
  237. package/dist/charts/chart-types/line-chart/LineChartXFieldSelector.d.ts.map +1 -0
  238. package/dist/charts/chart-types/line-chart/LineChartXFieldSelector.js +22 -0
  239. package/dist/charts/chart-types/line-chart/LineChartXFieldSelector.js.map +1 -0
  240. package/dist/charts/chart-types/line-chart/LineChartYFieldsSelector.d.ts +7 -0
  241. package/dist/charts/chart-types/line-chart/LineChartYFieldsSelector.d.ts.map +1 -0
  242. package/dist/charts/chart-types/line-chart/LineChartYFieldsSelector.js +42 -0
  243. package/dist/charts/chart-types/line-chart/LineChartYFieldsSelector.js.map +1 -0
  244. package/dist/charts/chart-types/line-chart/definition.d.ts.map +1 -1
  245. package/dist/charts/chart-types/line-chart/definition.js +1 -0
  246. package/dist/charts/chart-types/line-chart/definition.js.map +1 -1
  247. package/dist/charts/chart-types/line-chart/schema.d.ts +2 -0
  248. package/dist/charts/chart-types/line-chart/schema.d.ts.map +1 -1
  249. package/dist/charts/chart-types/line-chart/schema.js +5 -0
  250. package/dist/charts/chart-types/line-chart/schema.js.map +1 -1
  251. package/dist/charts/chart-types/line-chart/spec.d.ts +2 -1
  252. package/dist/charts/chart-types/line-chart/spec.d.ts.map +1 -1
  253. package/dist/charts/chart-types/line-chart/spec.js +56 -65
  254. package/dist/charts/chart-types/line-chart/spec.js.map +1 -1
  255. package/dist/charts/chart-types/line-chart/tool.d.ts +28 -24
  256. package/dist/charts/chart-types/line-chart/tool.d.ts.map +1 -1
  257. package/dist/charts/chart-types/line-chart/tool.js +27 -39
  258. package/dist/charts/chart-types/line-chart/tool.js.map +1 -1
  259. package/dist/charts/chart-types/line-chart/utils.d.ts +7 -0
  260. package/dist/charts/chart-types/line-chart/utils.d.ts.map +1 -0
  261. package/dist/charts/chart-types/line-chart/utils.js +17 -0
  262. package/dist/charts/chart-types/line-chart/utils.js.map +1 -0
  263. package/dist/charts/chart-types/line-chart/validation.d.ts +16 -0
  264. package/dist/charts/chart-types/line-chart/validation.d.ts.map +1 -0
  265. package/dist/charts/chart-types/line-chart/validation.js +43 -0
  266. package/dist/charts/chart-types/line-chart/validation.js.map +1 -0
  267. package/dist/charts/chart-types/mosaicChartTypes.d.ts +4 -2
  268. package/dist/charts/chart-types/mosaicChartTypes.d.ts.map +1 -1
  269. package/dist/charts/chart-types/mosaicChartTypes.js +2 -2
  270. package/dist/charts/chart-types/mosaicChartTypes.js.map +1 -1
  271. package/dist/charts/chart-types/resolveChartTypes.d.ts +3 -0
  272. package/dist/charts/chart-types/resolveChartTypes.d.ts.map +1 -0
  273. package/dist/charts/chart-types/resolveChartTypes.js +8 -0
  274. package/dist/charts/chart-types/resolveChartTypes.js.map +1 -0
  275. package/dist/charts/chart-types/scatter-plot/ScatterPlotSettings.d.ts +3 -0
  276. package/dist/charts/chart-types/scatter-plot/ScatterPlotSettings.d.ts.map +1 -0
  277. package/dist/charts/chart-types/{bubble-chart/BubbleChartSettings.js → scatter-plot/ScatterPlotSettings.js} +4 -4
  278. package/dist/charts/chart-types/scatter-plot/ScatterPlotSettings.js.map +1 -0
  279. package/dist/charts/chart-types/scatter-plot/definition.d.ts +4 -0
  280. package/dist/charts/chart-types/scatter-plot/definition.d.ts.map +1 -0
  281. package/dist/charts/chart-types/scatter-plot/definition.js +25 -0
  282. package/dist/charts/chart-types/scatter-plot/definition.js.map +1 -0
  283. package/dist/charts/chart-types/{bubble-chart → scatter-plot}/schema.d.ts +5 -5
  284. package/dist/charts/chart-types/scatter-plot/schema.d.ts.map +1 -0
  285. package/dist/charts/chart-types/{bubble-chart → scatter-plot}/schema.js +5 -5
  286. package/dist/charts/chart-types/scatter-plot/schema.js.map +1 -0
  287. package/dist/charts/chart-types/scatter-plot/spec.d.ts +5 -0
  288. package/dist/charts/chart-types/scatter-plot/spec.d.ts.map +1 -0
  289. package/dist/charts/chart-types/scatter-plot/spec.js +37 -0
  290. package/dist/charts/chart-types/scatter-plot/spec.js.map +1 -0
  291. package/dist/charts/chart-types/scatter-plot/tool.d.ts +39 -0
  292. package/dist/charts/chart-types/scatter-plot/tool.d.ts.map +1 -0
  293. package/dist/charts/chart-types/scatter-plot/tool.js +57 -0
  294. package/dist/charts/chart-types/scatter-plot/tool.js.map +1 -0
  295. package/dist/charts/chart-types/scatter-plot/validation.d.ts +13 -0
  296. package/dist/charts/chart-types/scatter-plot/validation.d.ts.map +1 -0
  297. package/dist/charts/chart-types/scatter-plot/validation.js +52 -0
  298. package/dist/charts/chart-types/scatter-plot/validation.js.map +1 -0
  299. package/dist/charts/chart-types/tool-types.d.ts +43 -0
  300. package/dist/charts/chart-types/tool-types.d.ts.map +1 -0
  301. package/dist/charts/chart-types/tool-types.js +2 -0
  302. package/dist/charts/chart-types/tool-types.js.map +1 -0
  303. package/dist/charts/chart-types/utils.d.ts +3 -0
  304. package/dist/charts/chart-types/utils.d.ts.map +1 -0
  305. package/dist/charts/chart-types/utils.js +4 -0
  306. package/dist/charts/chart-types/utils.js.map +1 -0
  307. package/dist/charts/dashboard/MosaicDashboardChartHeaderActions.d.ts.map +1 -1
  308. package/dist/charts/dashboard/MosaicDashboardChartHeaderActions.js +12 -5
  309. package/dist/charts/dashboard/MosaicDashboardChartHeaderActions.js.map +1 -1
  310. package/dist/charts/dashboard/MosaicDashboardChartRenderer.d.ts.map +1 -1
  311. package/dist/charts/dashboard/MosaicDashboardChartRenderer.js +6 -4
  312. package/dist/charts/dashboard/MosaicDashboardChartRenderer.js.map +1 -1
  313. package/dist/charts/useChartDataPolicy.d.ts.map +1 -1
  314. package/dist/charts/useChartDataPolicy.js +2 -1
  315. package/dist/charts/useChartDataPolicy.js.map +1 -1
  316. package/dist/charts/useChartPanelClients.d.ts +8 -0
  317. package/dist/charts/useChartPanelClients.d.ts.map +1 -0
  318. package/dist/charts/useChartPanelClients.js +22 -0
  319. package/dist/charts/useChartPanelClients.js.map +1 -0
  320. package/dist/charts/useMosaicChartRenderContext.d.ts +2 -3
  321. package/dist/charts/useMosaicChartRenderContext.d.ts.map +1 -1
  322. package/dist/charts/useMosaicChartRenderContext.js +15 -15
  323. package/dist/charts/useMosaicChartRenderContext.js.map +1 -1
  324. package/dist/charts/worksheet/ChartBlockHeader.d.ts.map +1 -1
  325. package/dist/charts/worksheet/ChartBlockHeader.js +4 -3
  326. package/dist/charts/worksheet/ChartBlockHeader.js.map +1 -1
  327. package/dist/charts/worksheet/ChartBlockRenderer.d.ts.map +1 -1
  328. package/dist/charts/worksheet/ChartBlockRenderer.js +3 -13
  329. package/dist/charts/worksheet/ChartBlockRenderer.js.map +1 -1
  330. package/dist/column-types-utils.d.ts.map +1 -1
  331. package/dist/column-types-utils.js +12 -4
  332. package/dist/column-types-utils.js.map +1 -1
  333. package/dist/components/AggregationSelector.d.ts.map +1 -1
  334. package/dist/components/AggregationSelector.js +9 -2
  335. package/dist/components/AggregationSelector.js.map +1 -1
  336. package/dist/components/BlockCaptionEditor.d.ts +20 -0
  337. package/dist/components/BlockCaptionEditor.d.ts.map +1 -0
  338. package/dist/components/BlockCaptionEditor.js +15 -0
  339. package/dist/components/BlockCaptionEditor.js.map +1 -0
  340. package/dist/components/ColorSelector.d.ts +12 -0
  341. package/dist/components/ColorSelector.d.ts.map +1 -0
  342. package/dist/components/ColorSelector.js +13 -0
  343. package/dist/components/ColorSelector.js.map +1 -0
  344. package/dist/components/ColumnSelector.d.ts +1 -0
  345. package/dist/components/ColumnSelector.d.ts.map +1 -1
  346. package/dist/components/ColumnSelector.js +2 -2
  347. package/dist/components/ColumnSelector.js.map +1 -1
  348. package/dist/components/FieldSelectorInput.d.ts +1 -0
  349. package/dist/components/FieldSelectorInput.d.ts.map +1 -1
  350. package/dist/components/FieldSelectorInput.js +4 -9
  351. package/dist/components/FieldSelectorInput.js.map +1 -1
  352. package/dist/components/MultiFieldSelector.d.ts +4 -1
  353. package/dist/components/MultiFieldSelector.d.ts.map +1 -1
  354. package/dist/components/MultiFieldSelector.js +4 -13
  355. package/dist/components/MultiFieldSelector.js.map +1 -1
  356. package/dist/components/TemporalGranularitySelector.d.ts.map +1 -1
  357. package/dist/components/TemporalGranularitySelector.js +13 -9
  358. package/dist/components/TemporalGranularitySelector.js.map +1 -1
  359. package/dist/constants/chart-colors.d.ts +3 -0
  360. package/dist/constants/chart-colors.d.ts.map +1 -0
  361. package/dist/constants/chart-colors.js +5 -0
  362. package/dist/constants/chart-colors.js.map +1 -0
  363. package/dist/dashboard/DefaultMosaicDashboardBlock.d.ts +2 -1
  364. package/dist/dashboard/DefaultMosaicDashboardBlock.d.ts.map +1 -1
  365. package/dist/dashboard/DefaultMosaicDashboardBlock.js +1 -1
  366. package/dist/dashboard/DefaultMosaicDashboardBlock.js.map +1 -1
  367. package/dist/dashboard/MosaicDashboardCommands.d.ts +19 -0
  368. package/dist/dashboard/MosaicDashboardCommands.d.ts.map +1 -0
  369. package/dist/dashboard/MosaicDashboardCommands.js +226 -0
  370. package/dist/dashboard/MosaicDashboardCommands.js.map +1 -0
  371. package/dist/dashboard/MosaicDashboardSlice.d.ts +22 -4
  372. package/dist/dashboard/MosaicDashboardSlice.d.ts.map +1 -1
  373. package/dist/dashboard/MosaicDashboardSlice.js +55 -0
  374. package/dist/dashboard/MosaicDashboardSlice.js.map +1 -1
  375. package/dist/dashboard/components/ResetFiltersButton.d.ts +14 -0
  376. package/dist/dashboard/components/ResetFiltersButton.d.ts.map +1 -0
  377. package/dist/dashboard/components/ResetFiltersButton.js +15 -0
  378. package/dist/dashboard/components/ResetFiltersButton.js.map +1 -0
  379. package/dist/dashboard/dashboard-types.d.ts +9 -3
  380. package/dist/dashboard/dashboard-types.d.ts.map +1 -1
  381. package/dist/dashboard/dashboard-types.js.map +1 -1
  382. package/dist/dashboard/hooks/useDashboardResetFilters.d.ts +14 -0
  383. package/dist/dashboard/hooks/useDashboardResetFilters.d.ts.map +1 -0
  384. package/dist/dashboard/hooks/useDashboardResetFilters.js +39 -0
  385. package/dist/dashboard/hooks/useDashboardResetFilters.js.map +1 -0
  386. package/dist/dashboard/hooks/usePanelResetFilters.d.ts +16 -0
  387. package/dist/dashboard/hooks/usePanelResetFilters.d.ts.map +1 -0
  388. package/dist/dashboard/hooks/usePanelResetFilters.js +47 -0
  389. package/dist/dashboard/hooks/usePanelResetFilters.js.map +1 -0
  390. package/dist/dashboard/panel/MosaicDashboardPanel.d.ts.map +1 -1
  391. package/dist/dashboard/panel/MosaicDashboardPanel.js +1 -1
  392. package/dist/dashboard/panel/MosaicDashboardPanel.js.map +1 -1
  393. package/dist/dashboard/panel/MosaicDashboardPanelLayout.d.ts.map +1 -1
  394. package/dist/dashboard/panel/MosaicDashboardPanelLayout.js +3 -3
  395. package/dist/dashboard/panel/MosaicDashboardPanelLayout.js.map +1 -1
  396. package/dist/dashboard/panel/MosaicDashboardPanels.d.ts.map +1 -1
  397. package/dist/dashboard/panel/MosaicDashboardPanels.js +4 -2
  398. package/dist/dashboard/panel/MosaicDashboardPanels.js.map +1 -1
  399. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.d.ts.map +1 -1
  400. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.js +3 -3
  401. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.js.map +1 -1
  402. package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.d.ts +7 -0
  403. package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.d.ts.map +1 -0
  404. package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.js +18 -0
  405. package/dist/dashboard/toolbar/MosaicDashboardDataTableSelector.js.map +1 -0
  406. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.d.ts.map +1 -1
  407. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.js +4 -32
  408. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.js.map +1 -1
  409. package/dist/dashboard/toolbar/MosaicDashboardToolbar.d.ts +2 -2
  410. package/dist/dashboard/toolbar/MosaicDashboardToolbar.d.ts.map +1 -1
  411. package/dist/dashboard/toolbar/MosaicDashboardToolbar.js +14 -10
  412. package/dist/dashboard/toolbar/MosaicDashboardToolbar.js.map +1 -1
  413. package/dist/dashboard/usePanelClientRegistration.d.ts +7 -0
  414. package/dist/dashboard/usePanelClientRegistration.d.ts.map +1 -0
  415. package/dist/dashboard/usePanelClientRegistration.js +30 -0
  416. package/dist/dashboard/usePanelClientRegistration.js.map +1 -0
  417. package/dist/dashboard/usePanelClients.d.ts +7 -0
  418. package/dist/dashboard/usePanelClients.d.ts.map +1 -0
  419. package/dist/dashboard/usePanelClients.js +13 -0
  420. package/dist/dashboard/usePanelClients.js.map +1 -0
  421. package/dist/dashboard/useSelectedOrFirstTable.d.ts +1 -1
  422. package/dist/dashboard/useSelectedOrFirstTable.d.ts.map +1 -1
  423. package/dist/dashboard/useSelectedOrFirstTable.js +10 -8
  424. package/dist/dashboard/useSelectedOrFirstTable.js.map +1 -1
  425. package/dist/data-table-explorer/DataTableExplorer.d.ts +4 -2
  426. package/dist/data-table-explorer/DataTableExplorer.d.ts.map +1 -1
  427. package/dist/data-table-explorer/DataTableExplorer.js +4 -4
  428. package/dist/data-table-explorer/DataTableExplorer.js.map +1 -1
  429. package/dist/data-table-explorer/DataTableExplorerCategoryClient.d.ts +3 -2
  430. package/dist/data-table-explorer/DataTableExplorerCategoryClient.d.ts.map +1 -1
  431. package/dist/data-table-explorer/DataTableExplorerCategoryClient.js +4 -3
  432. package/dist/data-table-explorer/DataTableExplorerCategoryClient.js.map +1 -1
  433. package/dist/data-table-explorer/DataTableExplorerCountClient.d.ts +3 -1
  434. package/dist/data-table-explorer/DataTableExplorerCountClient.d.ts.map +1 -1
  435. package/dist/data-table-explorer/DataTableExplorerCountClient.js +3 -3
  436. package/dist/data-table-explorer/DataTableExplorerCountClient.js.map +1 -1
  437. package/dist/data-table-explorer/DataTableExplorerHistogramClient.d.ts +3 -2
  438. package/dist/data-table-explorer/DataTableExplorerHistogramClient.d.ts.map +1 -1
  439. package/dist/data-table-explorer/DataTableExplorerHistogramClient.js +4 -4
  440. package/dist/data-table-explorer/DataTableExplorerHistogramClient.js.map +1 -1
  441. package/dist/data-table-explorer/DataTableExplorerPageClient.d.ts +3 -1
  442. package/dist/data-table-explorer/DataTableExplorerPageClient.d.ts.map +1 -1
  443. package/dist/data-table-explorer/DataTableExplorerPageClient.js +3 -1
  444. package/dist/data-table-explorer/DataTableExplorerPageClient.js.map +1 -1
  445. package/dist/data-table-explorer/DataTableExplorerUnsupportedSummaryClient.d.ts +3 -2
  446. package/dist/data-table-explorer/DataTableExplorerUnsupportedSummaryClient.d.ts.map +1 -1
  447. package/dist/data-table-explorer/DataTableExplorerUnsupportedSummaryClient.js +3 -3
  448. package/dist/data-table-explorer/DataTableExplorerUnsupportedSummaryClient.js.map +1 -1
  449. package/dist/data-table-explorer/createDataTableExplorerStore.d.ts +3 -0
  450. package/dist/data-table-explorer/createDataTableExplorerStore.d.ts.map +1 -1
  451. package/dist/data-table-explorer/createDataTableExplorerStore.js +6 -0
  452. package/dist/data-table-explorer/createDataTableExplorerStore.js.map +1 -1
  453. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerHeaderActions.d.ts +4 -0
  454. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerHeaderActions.d.ts.map +1 -0
  455. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerHeaderActions.js +13 -0
  456. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerHeaderActions.js.map +1 -0
  457. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.d.ts.map +1 -1
  458. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.js +26 -8
  459. package/dist/data-table-explorer/dashboard/MosaicDashboardDataTableExplorerPanelRenderer.js.map +1 -1
  460. package/dist/data-table-explorer/dashboard/useDataTableExplorerPanelClients.d.ts +13 -0
  461. package/dist/data-table-explorer/dashboard/useDataTableExplorerPanelClients.d.ts.map +1 -0
  462. package/dist/data-table-explorer/dashboard/useDataTableExplorerPanelClients.js +32 -0
  463. package/dist/data-table-explorer/dashboard/useDataTableExplorerPanelClients.js.map +1 -0
  464. package/dist/data-table-explorer/dataTableExplorerController.d.ts +63 -3
  465. package/dist/data-table-explorer/dataTableExplorerController.d.ts.map +1 -1
  466. package/dist/data-table-explorer/dataTableExplorerController.js +73 -10
  467. package/dist/data-table-explorer/dataTableExplorerController.js.map +1 -1
  468. package/dist/data-table-explorer/hooks/useDataTableExplorerColumns.d.ts +12 -0
  469. package/dist/data-table-explorer/hooks/useDataTableExplorerColumns.d.ts.map +1 -0
  470. package/dist/data-table-explorer/hooks/useDataTableExplorerColumns.js +19 -0
  471. package/dist/data-table-explorer/hooks/useDataTableExplorerColumns.js.map +1 -0
  472. package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.d.ts +52 -0
  473. package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.d.ts.map +1 -0
  474. package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.js +153 -0
  475. package/dist/data-table-explorer/hooks/useDataTableExplorerLifecycles.js.map +1 -0
  476. package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.d.ts +42 -0
  477. package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.d.ts.map +1 -0
  478. package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.js +43 -0
  479. package/dist/data-table-explorer/hooks/useDataTableExplorerQueryState.js.map +1 -0
  480. package/dist/data-table-explorer/hooks/useDataTableExplorerSelection.d.ts +13 -0
  481. package/dist/data-table-explorer/hooks/useDataTableExplorerSelection.d.ts.map +1 -0
  482. package/dist/data-table-explorer/hooks/useDataTableExplorerSelection.js +40 -0
  483. package/dist/data-table-explorer/hooks/useDataTableExplorerSelection.js.map +1 -0
  484. package/dist/data-table-explorer/hooks/useDataTableExplorerStatus.d.ts +18 -0
  485. package/dist/data-table-explorer/hooks/useDataTableExplorerStatus.d.ts.map +1 -0
  486. package/dist/data-table-explorer/hooks/useDataTableExplorerStatus.js +23 -0
  487. package/dist/data-table-explorer/hooks/useDataTableExplorerStatus.js.map +1 -0
  488. package/dist/data-table-explorer/hooks/useDataTableExplorerStoreState.d.ts +27 -0
  489. package/dist/data-table-explorer/hooks/useDataTableExplorerStoreState.d.ts.map +1 -0
  490. package/dist/data-table-explorer/hooks/useDataTableExplorerStoreState.js +28 -0
  491. package/dist/data-table-explorer/hooks/useDataTableExplorerStoreState.js.map +1 -0
  492. package/dist/data-table-explorer/hooks/useDataTableExplorerVisiblePage.d.ts +15 -0
  493. package/dist/data-table-explorer/hooks/useDataTableExplorerVisiblePage.d.ts.map +1 -0
  494. package/dist/data-table-explorer/hooks/useDataTableExplorerVisiblePage.js +21 -0
  495. package/dist/data-table-explorer/hooks/useDataTableExplorerVisiblePage.js.map +1 -0
  496. package/dist/data-table-explorer/types.d.ts +16 -3
  497. package/dist/data-table-explorer/types.d.ts.map +1 -1
  498. package/dist/data-table-explorer/types.js.map +1 -1
  499. package/dist/data-table-explorer/useDataTableExplorer.d.ts.map +1 -1
  500. package/dist/data-table-explorer/useDataTableExplorer.js +20 -279
  501. package/dist/data-table-explorer/useDataTableExplorer.js.map +1 -1
  502. package/dist/data-table-explorer/utils.d.ts +64 -6
  503. package/dist/data-table-explorer/utils.d.ts.map +1 -1
  504. package/dist/data-table-explorer/utils.js +58 -0
  505. package/dist/data-table-explorer/utils.js.map +1 -1
  506. package/dist/data-table-explorer/worksheet/DataTableBlockHeader.d.ts +1 -0
  507. package/dist/data-table-explorer/worksheet/DataTableBlockHeader.d.ts.map +1 -1
  508. package/dist/data-table-explorer/worksheet/DataTableBlockHeader.js +4 -2
  509. package/dist/data-table-explorer/worksheet/DataTableBlockHeader.js.map +1 -1
  510. package/dist/data-table-explorer/worksheet/DataTableBlockRenderer.d.ts.map +1 -1
  511. package/dist/data-table-explorer/worksheet/DataTableBlockRenderer.js +4 -4
  512. package/dist/data-table-explorer/worksheet/DataTableBlockRenderer.js.map +1 -1
  513. package/dist/index.d.ts +55 -31
  514. package/dist/index.d.ts.map +1 -1
  515. package/dist/index.js +86 -26
  516. package/dist/index.js.map +1 -1
  517. package/dist/mosaicTableReference.d.ts +59 -0
  518. package/dist/mosaicTableReference.d.ts.map +1 -0
  519. package/dist/mosaicTableReference.js +68 -0
  520. package/dist/mosaicTableReference.js.map +1 -0
  521. package/dist/useVgPlotChartRender.d.ts.map +1 -1
  522. package/dist/useVgPlotChartRender.js +151 -25
  523. package/dist/useVgPlotChartRender.js.map +1 -1
  524. package/dist/useVgPlotChartRetention.d.ts +11 -0
  525. package/dist/useVgPlotChartRetention.d.ts.map +1 -1
  526. package/dist/useVgPlotChartRetention.js.map +1 -1
  527. package/dist/utils/table-lookup.d.ts +7 -0
  528. package/dist/utils/table-lookup.d.ts.map +1 -0
  529. package/dist/utils/table-lookup.js +10 -0
  530. package/dist/utils/table-lookup.js.map +1 -0
  531. package/package.json +14 -14
  532. package/dist/ai/ai.d.ts +0 -103
  533. package/dist/ai/ai.d.ts.map +0 -1
  534. package/dist/ai/ai.js +0 -419
  535. package/dist/ai/ai.js.map +0 -1
  536. package/dist/ai/data-table-explorer-tool.d.ts +0 -40
  537. package/dist/ai/data-table-explorer-tool.d.ts.map +0 -1
  538. package/dist/ai/data-table-explorer-tool.js +0 -75
  539. package/dist/ai/data-table-explorer-tool.js.map +0 -1
  540. package/dist/ai/list-panels-tool.d.ts +0 -35
  541. package/dist/ai/list-panels-tool.d.ts.map +0 -1
  542. package/dist/ai/list-panels-tool.js +0 -66
  543. package/dist/ai/list-panels-tool.js.map +0 -1
  544. package/dist/ai/remove-panel-tool.d.ts +0 -31
  545. package/dist/ai/remove-panel-tool.d.ts.map +0 -1
  546. package/dist/ai/remove-panel-tool.js +0 -55
  547. package/dist/ai/remove-panel-tool.js.map +0 -1
  548. package/dist/ai/tool-validation.d.ts +0 -3
  549. package/dist/ai/tool-validation.d.ts.map +0 -1
  550. package/dist/ai/tool-validation.js +0 -11
  551. package/dist/ai/tool-validation.js.map +0 -1
  552. package/dist/charts/chart-types/bubble-chart/BubbleChartSettings.d.ts +0 -3
  553. package/dist/charts/chart-types/bubble-chart/BubbleChartSettings.d.ts.map +0 -1
  554. package/dist/charts/chart-types/bubble-chart/BubbleChartSettings.js.map +0 -1
  555. package/dist/charts/chart-types/bubble-chart/definition.d.ts +0 -4
  556. package/dist/charts/chart-types/bubble-chart/definition.d.ts.map +0 -1
  557. package/dist/charts/chart-types/bubble-chart/definition.js +0 -24
  558. package/dist/charts/chart-types/bubble-chart/definition.js.map +0 -1
  559. package/dist/charts/chart-types/bubble-chart/schema.d.ts.map +0 -1
  560. package/dist/charts/chart-types/bubble-chart/schema.js.map +0 -1
  561. package/dist/charts/chart-types/bubble-chart/spec.d.ts +0 -4
  562. package/dist/charts/chart-types/bubble-chart/spec.d.ts.map +0 -1
  563. package/dist/charts/chart-types/bubble-chart/spec.js +0 -31
  564. package/dist/charts/chart-types/bubble-chart/spec.js.map +0 -1
  565. package/dist/charts/chart-types/bubble-chart/tool.d.ts +0 -42
  566. package/dist/charts/chart-types/bubble-chart/tool.d.ts.map +0 -1
  567. package/dist/charts/chart-types/bubble-chart/tool.js +0 -66
  568. package/dist/charts/chart-types/bubble-chart/tool.js.map +0 -1
  569. package/dist/hooks/useDataTable.d.ts +0 -3
  570. package/dist/hooks/useDataTable.d.ts.map +0 -1
  571. package/dist/hooks/useDataTable.js +0 -28
  572. package/dist/hooks/useDataTable.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePanelResetFilters.js","sourceRoot":"","sources":["../../../src/dashboard/hooks/usePanelResetFilters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAEhE,OAAO,EAAC,2BAA2B,EAAC,MAAM,yBAAyB,CAAC;AAYpE;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,EACnC,YAAY,EACZ,aAAa,GACe;IAC5B,MAAM,YAAY,GAAG,2BAA2B,CAC9C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CACrC,CAAC;IAEF,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,aAAa,CAAC,EAChD,CAAC,YAAY,EAAE,aAAa,CAAC,CAC9B,CAAC;IAEF,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzD,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC9C,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE;QACpC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACvC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAa,CAAC;YAEpC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QACH,uDAAuD;IACzD,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAExD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,MAAM,eAAe,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;YAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAa,CAAC;YACpC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC;IAE9B,OAAO;QACL,gBAAgB;QAChB,KAAK;KACN,CAAC;AACJ,CAAC","sourcesContent":["import {useCallback, useEffect, useMemo, useState} from 'react';\nimport type {MosaicClient} from '@uwdata/mosaic-core';\nimport {useStoreWithMosaicDashboard} from '../MosaicDashboardSlice';\n\nexport type UsePanelResetFiltersOptions = {\n panelClients: MosaicClient[];\n selectionName: string;\n};\n\nexport type UsePanelResetFiltersReturn = {\n hasActiveFilters: boolean;\n reset: () => void;\n};\n\n/**\n * Hook for managing panel-specific filter reset logic.\n * Tracks active filters from the given panel clients and provides a reset function\n * that only clears filters originating from those clients.\n */\nexport function usePanelResetFilters({\n panelClients,\n selectionName,\n}: UsePanelResetFiltersOptions): UsePanelResetFiltersReturn {\n const getSelection = useStoreWithMosaicDashboard(\n (state) => state.mosaic.getSelection,\n );\n\n const selection = useMemo(\n () => getSelection(selectionName, 'crossfilter'),\n [getSelection, selectionName],\n );\n\n const [selectionVersion, setSelectionVersion] = useState(0);\n\n useEffect(() => {\n const listener = () => setSelectionVersion((n) => n + 1);\n selection.addEventListener('value', listener);\n return () => selection.removeEventListener('value', listener);\n }, [selection]);\n\n const hasActiveFilters = useMemo(() => {\n if (panelClients.length === 0) {\n return false;\n }\n\n return selection.clauses.some((clause) => {\n const source = clause.source as any;\n\n if (!source) {\n return false;\n }\n\n return panelClients.includes(source);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [panelClients, selection.clauses, selectionVersion]);\n\n const reset = useCallback(() => {\n const clausesToRemove = selection.clauses.filter((clause) => {\n const source = clause.source as any;\n if (!source) {\n return false;\n }\n\n return panelClients.includes(source);\n });\n\n if (clausesToRemove.length > 0) {\n selection.reset(clausesToRemove);\n }\n }, [panelClients, selection]);\n\n return {\n hasActiveFilters,\n reset,\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardPanel.d.ts","sourceRoot":"","sources":["../../../src/dashboard/panel/MosaicDashboardPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAUzD,eAAO,MAAM,oBAAoB,EAAE,kBA2DlC,CAAC"}
1
+ {"version":3,"file":"MosaicDashboardPanel.d.ts","sourceRoot":"","sources":["../../../src/dashboard/panel/MosaicDashboardPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAUzD,eAAO,MAAM,oBAAoB,EAAE,kBA8DlC,CAAC"}
@@ -18,6 +18,6 @@ export const MosaicDashboardPanel = ({ meta }) => {
18
18
  return (_jsx("div", { className: "text-muted-foreground flex h-full items-center justify-center text-sm", children: "Dashboard panel not found" }));
19
19
  }
20
20
  const RendererComponent = renderer?.component;
21
- return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(MosaicDashboardPanelHeader, { dashboardId: dashboardId, dashboard: dashboard, panel: panel, renderer: renderer, selectionName: selectionName }), _jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: _jsx(MosaicDashboardPanelErrorBoundary, { panelType: panel.type, children: RendererComponent ? (_jsx(RendererComponent, { dashboardId: dashboardId, dashboard: dashboard, panel: panel, selectionName: selectionName })) : (_jsxs("div", { className: "text-muted-foreground flex h-full items-center justify-center p-4 text-sm", children: ["Unsupported dashboard panel type: ", panel.type] })) }) })] }));
21
+ return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(MosaicDashboardPanelHeader, { dashboardId: dashboardId, dashboard: dashboard, panel: panel, renderer: renderer, selectionName: selectionName }), _jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: _jsx(MosaicDashboardPanelErrorBoundary, { panelType: panel.type, children: RendererComponent ? (_jsx(RendererComponent, { dashboardId: dashboardId, dashboard: dashboard, panel: panel, selectionName: selectionName })) : (_jsxs("div", { className: "text-muted-foreground flex h-full items-center justify-center p-4 text-sm", children: ["Unsupported dashboard panel type: ", panel.type] })) }, dashboard?.selectedTable ?? '') })] }));
22
22
  };
23
23
  //# sourceMappingURL=MosaicDashboardPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardPanel.js","sourceRoot":"","sources":["../../../src/dashboard/panel/MosaicDashboardPanel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAC,iCAAiC,EAAC,MAAM,qCAAqC,CAAC;AACtF,OAAO,EAAC,0BAA0B,EAAC,MAAM,8BAA8B,CAAC;AACxE,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAC,yBAAyB,EAAC,MAAM,2BAA2B,CAAC;AAEpE,MAAM,CAAC,MAAM,oBAAoB,GAAuB,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE;IACjE,MAAM,EAAC,WAAW,EAAC,GAAG,yBAAyB,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,EAAE,OAA6B,CAAC;IAEpD,MAAM,SAAS,GAAG,2BAA2B,CAC3C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CACpE,CAAC;IACF,MAAM,cAAc,GAAG,2BAA2B,CAChD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,cAAc,CAChD,CAAC;IACF,MAAM,aAAa,GAAG,+BAA+B,CAAC,WAAW,CAAC,CAAC;IAEnE,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CACH,OAAO;QACL,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,OAAO,CAAC;QACjE,CAAC,CAAC,SAAS,EACf,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAC7B,CAAC;IACF,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhE,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CACL,cAAK,SAAS,EAAC,uEAAuE,0CAEhF,CACP,CAAC;IACJ,CAAC;IAED,MAAM,iBAAiB,GAAG,QAAQ,EAAE,SAAS,CAAC;IAE9C,OAAO,CACL,eAAK,SAAS,EAAC,sBAAsB,aACnC,KAAC,0BAA0B,IACzB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,GAC5B,EAEF,cAAK,SAAS,EAAC,gCAAgC,YAC7C,KAAC,iCAAiC,IAAC,SAAS,EAAE,KAAK,CAAC,IAAI,YACrD,iBAAiB,CAAC,CAAC,CAAC,CACnB,KAAC,iBAAiB,IAChB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,aAAa,GAC5B,CACH,CAAC,CAAC,CAAC,CACF,eAAK,SAAS,EAAC,2EAA2E,mDACrD,KAAK,CAAC,IAAI,IACzC,CACP,GACiC,GAChC,IACF,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type {RoomPanelComponent} from '@sqlrooms/layout';\nimport {useMemo} from 'react';\nimport {MosaicDashboardPanelErrorBoundary} from './MosaicDashboardPanelErrorBoundary';\nimport {MosaicDashboardPanelHeader} from './MosaicDashboardPanelHeader';\nimport {\n getMosaicDashboardSelectionName,\n useStoreWithMosaicDashboard,\n} from '../MosaicDashboardSlice';\nimport {useMosaicDashboardContext} from '../MosaicDashboardContext';\n\nexport const MosaicDashboardPanel: RoomPanelComponent = ({meta}) => {\n const {dashboardId} = useMosaicDashboardContext();\n const panelId = meta?.panelId as string | undefined;\n\n const dashboard = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.config.dashboardsById[dashboardId],\n );\n const panelRenderers = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.panelRenderers,\n );\n const selectionName = getMosaicDashboardSelectionName(dashboardId);\n\n const panel = useMemo(\n () =>\n panelId\n ? dashboard?.panels.find((candidate) => candidate.id === panelId)\n : undefined,\n [dashboard?.panels, panelId],\n );\n const renderer = panel ? panelRenderers[panel.type] : undefined;\n\n if (!dashboard || !panel) {\n return (\n <div className=\"text-muted-foreground flex h-full items-center justify-center text-sm\">\n Dashboard panel not found\n </div>\n );\n }\n\n const RendererComponent = renderer?.component;\n\n return (\n <div className=\"flex h-full flex-col\">\n <MosaicDashboardPanelHeader\n dashboardId={dashboardId}\n dashboard={dashboard}\n panel={panel}\n renderer={renderer}\n selectionName={selectionName}\n />\n\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n <MosaicDashboardPanelErrorBoundary panelType={panel.type}>\n {RendererComponent ? (\n <RendererComponent\n dashboardId={dashboardId}\n dashboard={dashboard}\n panel={panel}\n selectionName={selectionName}\n />\n ) : (\n <div className=\"text-muted-foreground flex h-full items-center justify-center p-4 text-sm\">\n Unsupported dashboard panel type: {panel.type}\n </div>\n )}\n </MosaicDashboardPanelErrorBoundary>\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"MosaicDashboardPanel.js","sourceRoot":"","sources":["../../../src/dashboard/panel/MosaicDashboardPanel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAC,iCAAiC,EAAC,MAAM,qCAAqC,CAAC;AACtF,OAAO,EAAC,0BAA0B,EAAC,MAAM,8BAA8B,CAAC;AACxE,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAC,yBAAyB,EAAC,MAAM,2BAA2B,CAAC;AAEpE,MAAM,CAAC,MAAM,oBAAoB,GAAuB,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE;IACjE,MAAM,EAAC,WAAW,EAAC,GAAG,yBAAyB,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,EAAE,OAA6B,CAAC;IAEpD,MAAM,SAAS,GAAG,2BAA2B,CAC3C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CACpE,CAAC;IACF,MAAM,cAAc,GAAG,2BAA2B,CAChD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,cAAc,CAChD,CAAC;IACF,MAAM,aAAa,GAAG,+BAA+B,CAAC,WAAW,CAAC,CAAC;IAEnE,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CACH,OAAO;QACL,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,OAAO,CAAC;QACjE,CAAC,CAAC,SAAS,EACf,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAC7B,CAAC;IACF,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhE,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CACL,cAAK,SAAS,EAAC,uEAAuE,0CAEhF,CACP,CAAC;IACJ,CAAC;IAED,MAAM,iBAAiB,GAAG,QAAQ,EAAE,SAAS,CAAC;IAE9C,OAAO,CACL,eAAK,SAAS,EAAC,sBAAsB,aACnC,KAAC,0BAA0B,IACzB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,GAC5B,EAEF,cAAK,SAAS,EAAC,gCAAgC,YAC7C,KAAC,iCAAiC,IAEhC,SAAS,EAAE,KAAK,CAAC,IAAI,YAEpB,iBAAiB,CAAC,CAAC,CAAC,CACnB,KAAC,iBAAiB,IAChB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,aAAa,GAC5B,CACH,CAAC,CAAC,CAAC,CACF,eAAK,SAAS,EAAC,2EAA2E,mDACrD,KAAK,CAAC,IAAI,IACzC,CACP,IAdI,SAAS,EAAE,aAAa,IAAI,EAAE,CAeD,GAChC,IACF,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type {RoomPanelComponent} from '@sqlrooms/layout';\nimport {useMemo} from 'react';\nimport {MosaicDashboardPanelErrorBoundary} from './MosaicDashboardPanelErrorBoundary';\nimport {MosaicDashboardPanelHeader} from './MosaicDashboardPanelHeader';\nimport {\n getMosaicDashboardSelectionName,\n useStoreWithMosaicDashboard,\n} from '../MosaicDashboardSlice';\nimport {useMosaicDashboardContext} from '../MosaicDashboardContext';\n\nexport const MosaicDashboardPanel: RoomPanelComponent = ({meta}) => {\n const {dashboardId} = useMosaicDashboardContext();\n const panelId = meta?.panelId as string | undefined;\n\n const dashboard = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.config.dashboardsById[dashboardId],\n );\n const panelRenderers = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.panelRenderers,\n );\n const selectionName = getMosaicDashboardSelectionName(dashboardId);\n\n const panel = useMemo(\n () =>\n panelId\n ? dashboard?.panels.find((candidate) => candidate.id === panelId)\n : undefined,\n [dashboard?.panels, panelId],\n );\n const renderer = panel ? panelRenderers[panel.type] : undefined;\n\n if (!dashboard || !panel) {\n return (\n <div className=\"text-muted-foreground flex h-full items-center justify-center text-sm\">\n Dashboard panel not found\n </div>\n );\n }\n\n const RendererComponent = renderer?.component;\n\n return (\n <div className=\"flex h-full flex-col\">\n <MosaicDashboardPanelHeader\n dashboardId={dashboardId}\n dashboard={dashboard}\n panel={panel}\n renderer={renderer}\n selectionName={selectionName}\n />\n\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n <MosaicDashboardPanelErrorBoundary\n key={dashboard?.selectedTable ?? ''}\n panelType={panel.type}\n >\n {RendererComponent ? (\n <RendererComponent\n dashboardId={dashboardId}\n dashboard={dashboard}\n panel={panel}\n selectionName={selectionName}\n />\n ) : (\n <div className=\"text-muted-foreground flex h-full items-center justify-center p-4 text-sm\">\n Unsupported dashboard panel type: {panel.type}\n </div>\n )}\n </MosaicDashboardPanelErrorBoundary>\n </div>\n </div>\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardPanelLayout.d.ts","sourceRoot":"","sources":["../../../src/dashboard/panel/MosaicDashboardPanelLayout.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,EAAC,EAAE,EAA8B,MAAM,OAAO,CAAC;AAE7D,KAAK,+BAA+B,GAAG;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAIF,eAAO,MAAM,0BAA0B,EAAE,EAAE,CACzC,+BAA+B,CA0EhC,CAAC"}
1
+ {"version":3,"file":"MosaicDashboardPanelLayout.d.ts","sourceRoot":"","sources":["../../../src/dashboard/panel/MosaicDashboardPanelLayout.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,EAAC,EAAE,EAA8B,MAAM,OAAO,CAAC;AAE7D,KAAK,+BAA+B,GAAG;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAIF,eAAO,MAAM,0BAA0B,EAAE,EAAE,CACzC,+BAA+B,CA0EhC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { ResizableHandle, ResizablePanel, ResizablePanelGroup, } from '@sqlrooms/ui';
2
+ import { ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, } from '@sqlrooms/ui';
3
3
  import { useEffect, useRef, useState } from 'react';
4
4
  const MIN_WIDTH_FOR_SPLIT_VIEW = 200; // pixels
5
5
  export const MosaicDashboardPanelLayout = ({ isOpen, onIsOpenChange, settings, content }) => {
@@ -39,8 +39,8 @@ export const MosaicDashboardPanelLayout = ({ isOpen, onIsOpenChange, settings, c
39
39
  };
40
40
  // If container is too small and settings are open, show only settings
41
41
  if (containerWidth < MIN_WIDTH_FOR_SPLIT_VIEW && isOpen) {
42
- return (_jsx("div", { ref: containerRef, className: "h-full overflow-auto", children: settings }));
42
+ return (_jsx("div", { ref: containerRef, className: "h-full overflow-hidden", children: _jsx(ScrollArea, { className: "h-full", children: settings }) }));
43
43
  }
44
- return (_jsx("div", { ref: containerRef, className: "h-full", children: _jsxs(ResizablePanelGroup, { orientation: "horizontal", className: "h-full", children: [_jsx(ResizablePanel, { ref: panelRef, defaultSize: "35%", minSize: "30%", maxSize: "70%", collapsible: true, collapsedSize: 0, className: "overflow-auto", onResize: onResize, children: settings }), _jsx(ResizableHandle, { className: "w-px" }), _jsx(ResizablePanel, { children: content })] }) }));
44
+ return (_jsx("div", { ref: containerRef, className: "h-full", children: _jsxs(ResizablePanelGroup, { orientation: "horizontal", className: "h-full", children: [_jsx(ResizablePanel, { ref: panelRef, defaultSize: "35%", minSize: "30%", maxSize: "70%", collapsible: true, collapsedSize: 0, className: "overflow-hidden", onResize: onResize, children: _jsx(ScrollArea, { className: "h-full", children: settings }) }), _jsx(ResizableHandle, { className: "w-px" }), _jsx(ResizablePanel, { children: content })] }) }));
45
45
  };
46
46
  //# sourceMappingURL=MosaicDashboardPanelLayout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardPanelLayout.js","sourceRoot":"","sources":["../../../src/dashboard/panel/MosaicDashboardPanelLayout.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,eAAe,EACf,cAAc,EACd,mBAAmB,GAEpB,MAAM,cAAc,CAAC;AACtB,OAAc,EAAK,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAS7D,MAAM,wBAAwB,GAAG,GAAG,CAAC,CAAC,SAAS;AAE/C,MAAM,CAAC,MAAM,0BAA0B,GAEnC,CAAC,EAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAC,EAAE,EAAE;IAClD,MAAM,QAAQ,GAAG,MAAM,CAAuB,IAAI,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAClD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAClD,MAAM,CAAC,UAAU,CAClB,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;YACpD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,iBAAiB,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAElC,OAAO,GAAG,EAAE;YACV,cAAc,CAAC,UAAU,EAAE,CAAC;QAC9B,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC;QAEpD,IAAI,WAAW,IAAI,MAAM,EAAE,CAAC;YAC1B,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,CAAC;IAEF,sEAAsE;IACtE,IAAI,cAAc,GAAG,wBAAwB,IAAI,MAAM,EAAE,CAAC;QACxD,OAAO,CACL,cAAK,GAAG,EAAE,YAAY,EAAE,SAAS,EAAC,sBAAsB,YACrD,QAAQ,GACL,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,cAAK,GAAG,EAAE,YAAY,EAAE,SAAS,EAAC,QAAQ,YACxC,MAAC,mBAAmB,IAAC,WAAW,EAAC,YAAY,EAAC,SAAS,EAAC,QAAQ,aAC9D,KAAC,cAAc,IACb,GAAG,EAAE,QAAQ,EACb,WAAW,EAAC,KAAK,EACjB,OAAO,EAAC,KAAK,EACb,OAAO,EAAC,KAAK,EACb,WAAW,EAAE,IAAI,EACjB,aAAa,EAAE,CAAC,EAChB,SAAS,EAAC,eAAe,EACzB,QAAQ,EAAE,QAAQ,YAEjB,QAAQ,GACM,EACjB,KAAC,eAAe,IAAC,SAAS,EAAC,MAAM,GAAG,EACpC,KAAC,cAAc,cAAE,OAAO,GAAkB,IACtB,GAClB,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {\n ResizableHandle,\n ResizablePanel,\n ResizablePanelGroup,\n type ResizablePanelHandle,\n} from '@sqlrooms/ui';\nimport React, {FC, useEffect, useRef, useState} from 'react';\n\ntype MosaicDashboardPanelLayoutProps = {\n isOpen?: boolean;\n onIsOpenChange?: (isOpen: boolean) => void;\n settings?: React.ReactNode;\n content?: React.ReactNode;\n};\n\nconst MIN_WIDTH_FOR_SPLIT_VIEW = 200; // pixels\n\nexport const MosaicDashboardPanelLayout: FC<\n MosaicDashboardPanelLayoutProps\n> = ({isOpen, onIsOpenChange, settings, content}) => {\n const panelRef = useRef<ResizablePanelHandle>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const [containerWidth, setContainerWidth] = useState<number>(\n window.innerWidth,\n );\n\n useEffect(() => {\n if (isOpen) {\n panelRef.current?.expand();\n } else {\n panelRef.current?.collapse();\n }\n }, [isOpen]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n setContainerWidth(entry.contentRect.width);\n }\n });\n\n resizeObserver.observe(container);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n const onResize = () => {\n const isCollapsed = panelRef.current?.isCollapsed();\n\n if (isCollapsed && isOpen) {\n onIsOpenChange?.(false);\n }\n\n if (!isCollapsed && !isOpen) {\n onIsOpenChange?.(true);\n }\n };\n\n // If container is too small and settings are open, show only settings\n if (containerWidth < MIN_WIDTH_FOR_SPLIT_VIEW && isOpen) {\n return (\n <div ref={containerRef} className=\"h-full overflow-auto\">\n {settings}\n </div>\n );\n }\n\n return (\n <div ref={containerRef} className=\"h-full\">\n <ResizablePanelGroup orientation=\"horizontal\" className=\"h-full\">\n <ResizablePanel\n ref={panelRef}\n defaultSize=\"35%\"\n minSize=\"30%\"\n maxSize=\"70%\"\n collapsible={true}\n collapsedSize={0}\n className=\"overflow-auto\"\n onResize={onResize}\n >\n {settings}\n </ResizablePanel>\n <ResizableHandle className=\"w-px\" />\n <ResizablePanel>{content}</ResizablePanel>\n </ResizablePanelGroup>\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"MosaicDashboardPanelLayout.js","sourceRoot":"","sources":["../../../src/dashboard/panel/MosaicDashboardPanelLayout.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,UAAU,GAEX,MAAM,cAAc,CAAC;AACtB,OAAc,EAAK,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAS7D,MAAM,wBAAwB,GAAG,GAAG,CAAC,CAAC,SAAS;AAE/C,MAAM,CAAC,MAAM,0BAA0B,GAEnC,CAAC,EAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAC,EAAE,EAAE;IAClD,MAAM,QAAQ,GAAG,MAAM,CAAuB,IAAI,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAClD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAClD,MAAM,CAAC,UAAU,CAClB,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;YACpD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,iBAAiB,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAElC,OAAO,GAAG,EAAE;YACV,cAAc,CAAC,UAAU,EAAE,CAAC;QAC9B,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC;QAEpD,IAAI,WAAW,IAAI,MAAM,EAAE,CAAC;YAC1B,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,CAAC;IAEF,sEAAsE;IACtE,IAAI,cAAc,GAAG,wBAAwB,IAAI,MAAM,EAAE,CAAC;QACxD,OAAO,CACL,cAAK,GAAG,EAAE,YAAY,EAAE,SAAS,EAAC,wBAAwB,YACxD,KAAC,UAAU,IAAC,SAAS,EAAC,QAAQ,YAAE,QAAQ,GAAc,GAClD,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,cAAK,GAAG,EAAE,YAAY,EAAE,SAAS,EAAC,QAAQ,YACxC,MAAC,mBAAmB,IAAC,WAAW,EAAC,YAAY,EAAC,SAAS,EAAC,QAAQ,aAC9D,KAAC,cAAc,IACb,GAAG,EAAE,QAAQ,EACb,WAAW,EAAC,KAAK,EACjB,OAAO,EAAC,KAAK,EACb,OAAO,EAAC,KAAK,EACb,WAAW,EAAE,IAAI,EACjB,aAAa,EAAE,CAAC,EAChB,SAAS,EAAC,iBAAiB,EAC3B,QAAQ,EAAE,QAAQ,YAElB,KAAC,UAAU,IAAC,SAAS,EAAC,QAAQ,YAAE,QAAQ,GAAc,GACvC,EACjB,KAAC,eAAe,IAAC,SAAS,EAAC,MAAM,GAAG,EACpC,KAAC,cAAc,cAAE,OAAO,GAAkB,IACtB,GAClB,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {\n ResizableHandle,\n ResizablePanel,\n ResizablePanelGroup,\n ScrollArea,\n type ResizablePanelHandle,\n} from '@sqlrooms/ui';\nimport React, {FC, useEffect, useRef, useState} from 'react';\n\ntype MosaicDashboardPanelLayoutProps = {\n isOpen?: boolean;\n onIsOpenChange?: (isOpen: boolean) => void;\n settings?: React.ReactNode;\n content?: React.ReactNode;\n};\n\nconst MIN_WIDTH_FOR_SPLIT_VIEW = 200; // pixels\n\nexport const MosaicDashboardPanelLayout: FC<\n MosaicDashboardPanelLayoutProps\n> = ({isOpen, onIsOpenChange, settings, content}) => {\n const panelRef = useRef<ResizablePanelHandle>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const [containerWidth, setContainerWidth] = useState<number>(\n window.innerWidth,\n );\n\n useEffect(() => {\n if (isOpen) {\n panelRef.current?.expand();\n } else {\n panelRef.current?.collapse();\n }\n }, [isOpen]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n setContainerWidth(entry.contentRect.width);\n }\n });\n\n resizeObserver.observe(container);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n const onResize = () => {\n const isCollapsed = panelRef.current?.isCollapsed();\n\n if (isCollapsed && isOpen) {\n onIsOpenChange?.(false);\n }\n\n if (!isCollapsed && !isOpen) {\n onIsOpenChange?.(true);\n }\n };\n\n // If container is too small and settings are open, show only settings\n if (containerWidth < MIN_WIDTH_FOR_SPLIT_VIEW && isOpen) {\n return (\n <div ref={containerRef} className=\"h-full overflow-hidden\">\n <ScrollArea className=\"h-full\">{settings}</ScrollArea>\n </div>\n );\n }\n\n return (\n <div ref={containerRef} className=\"h-full\">\n <ResizablePanelGroup orientation=\"horizontal\" className=\"h-full\">\n <ResizablePanel\n ref={panelRef}\n defaultSize=\"35%\"\n minSize=\"30%\"\n maxSize=\"70%\"\n collapsible={true}\n collapsedSize={0}\n className=\"overflow-hidden\"\n onResize={onResize}\n >\n <ScrollArea className=\"h-full\">{settings}</ScrollArea>\n </ResizablePanel>\n <ResizableHandle className=\"w-px\" />\n <ResizablePanel>{content}</ResizablePanel>\n </ResizablePanelGroup>\n </div>\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardPanels.d.ts","sourceRoot":"","sources":["../../../src/dashboard/panel/MosaicDashboardPanels.tsx"],"names":[],"mappings":"AAsBA,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAqGzC,CAAC"}
1
+ {"version":3,"file":"MosaicDashboardPanels.d.ts","sourceRoot":"","sources":["../../../src/dashboard/panel/MosaicDashboardPanels.tsx"],"names":[],"mappings":"AA0BA,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAyGzC,CAAC"}
@@ -7,6 +7,7 @@ import { MosaicDashboardPanel } from './MosaicDashboardPanel';
7
7
  import { getMosaicDashboardDockId, MOSAIC_DASHBOARD_PANEL, useStoreWithMosaicDashboard, } from '../MosaicDashboardSlice';
8
8
  import { DataTableSelectorEmptyState } from '../../components/DataTableSelector';
9
9
  import { useTablesWithColumns } from '../../hooks/useTablesWithColumns';
10
+ import { getMosaicTableIdentity, resolveMosaicTableReference, } from '../../mosaicTableReference';
10
11
  const EMPTY_DASHBOARD_PANELS = [];
11
12
  export const MosaicDashboardPanels = () => {
12
13
  const { dashboardId } = useMosaicDashboardContext();
@@ -20,8 +21,9 @@ export const MosaicDashboardPanels = () => {
20
21
  const tables = useTablesWithColumns();
21
22
  const selectedTable = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.config.dashboardsById[dashboardId]?.selectedTable);
22
23
  const setSelectedTable = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.setSelectedTable);
24
+ const selectedDataTable = useMemo(() => resolveMosaicTableReference(tables, selectedTable).table, [selectedTable, tables]);
23
25
  const handleTableChange = useCallback((table) => {
24
- setSelectedTable(dashboardId, table.table.toString());
26
+ setSelectedTable(dashboardId, getMosaicTableIdentity(table.table));
25
27
  }, [dashboardId, setSelectedTable]);
26
28
  useEffect(() => {
27
29
  // This renderer is shared by every Mosaic dashboard panel in the room.
@@ -52,7 +54,7 @@ export const MosaicDashboardPanels = () => {
52
54
  : nextLayout;
53
55
  setLayout(dashboardId, innerLayout);
54
56
  }, [dashboardId, setLayout]);
55
- if (!selectedTable) {
57
+ if (!selectedDataTable) {
56
58
  return (_jsx(DataTableSelectorEmptyState, { onChange: handleTableChange, tables: tables }));
57
59
  }
58
60
  if (!panels.length || !rootLayout) {
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardPanels.js","sourceRoot":"","sources":["../../../src/dashboard/panel/MosaicDashboardPanels.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n isLayoutDockNode,\n isLayoutGridNode,\n LayoutNode,\n LayoutRenderer,\n} from '@sqlrooms/layout';\nimport {useCallback, useEffect, useMemo} from 'react';\nimport {useMosaicDashboardContext} from '../MosaicDashboardContext';\nimport {MosaicDashboardPanelDragOverlay} from './MosaicDashboardPanelDragOverlay';\nimport {MosaicDashboardPanel} from './MosaicDashboardPanel';\nimport type {MosaicDashboardPanelConfig} from '../dashboard-types';\nimport {\n getMosaicDashboardDockId,\n MOSAIC_DASHBOARD_PANEL,\n useStoreWithMosaicDashboard,\n} from '../MosaicDashboardSlice';\nimport {DataTableSelectorEmptyState} from '../../components/DataTableSelector';\nimport {useTablesWithColumns} from '../../hooks/useTablesWithColumns';\nimport type {DataTable} from '@sqlrooms/db';\n\nconst EMPTY_DASHBOARD_PANELS: MosaicDashboardPanelConfig[] = [];\n\nexport const MosaicDashboardPanels: React.FC = () => {\n const {dashboardId} = useMosaicDashboardContext();\n const registerPanel = useStoreWithMosaicDashboard(\n (state) => state.layout.registerPanel,\n );\n const setLayout = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.setLayout,\n );\n const panels = useStoreWithMosaicDashboard(\n (state) =>\n state.mosaicDashboard.config.dashboardsById[dashboardId]?.panels ??\n EMPTY_DASHBOARD_PANELS,\n );\n const dashboardLayout = useStoreWithMosaicDashboard(\n (state) =>\n state.mosaicDashboard.config.dashboardsById[dashboardId]?.layout ?? null,\n );\n const dashboardLayoutType = useStoreWithMosaicDashboard(\n (state) =>\n state.mosaicDashboard.config.dashboardsById[dashboardId]?.layoutType ??\n 'dock',\n );\n\n const tables = useTablesWithColumns();\n const selectedTable = useStoreWithMosaicDashboard(\n (state) =>\n state.mosaicDashboard.config.dashboardsById[dashboardId]?.selectedTable,\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 useEffect(() => {\n // This renderer is shared by every Mosaic dashboard panel in the room.\n // Dashboard blocks can be transiently unmounted by the surrounding editor,\n // so unregistering on instance cleanup can leave still-mounted dashboards\n // with layout panel shells but no chart renderer.\n registerPanel(MOSAIC_DASHBOARD_PANEL, () => ({\n title: 'Dashboard panel',\n component: MosaicDashboardPanel,\n dragOverlay: MosaicDashboardPanelDragOverlay,\n }));\n }, [registerPanel]);\n\n const rootLayout: LayoutNode | null = useMemo(() => {\n if (!dashboardLayout) return null;\n if (dashboardLayoutType === 'grid') {\n return isLayoutGridNode(dashboardLayout) ? dashboardLayout : null;\n }\n return {\n type: 'dock',\n id: getMosaicDashboardDockId(dashboardId),\n root: dashboardLayout,\n };\n }, [dashboardId, dashboardLayout, dashboardLayoutType]);\n\n const handleLayoutChange = useCallback(\n (nextLayout: LayoutNode | null) => {\n const innerLayout =\n nextLayout && isLayoutDockNode(nextLayout)\n ? nextLayout.root\n : nextLayout;\n setLayout(dashboardId, innerLayout);\n },\n [dashboardId, setLayout],\n );\n\n if (!selectedTable) {\n return (\n <DataTableSelectorEmptyState\n onChange={handleTableChange}\n tables={tables}\n />\n );\n }\n\n if (!panels.length || !rootLayout) {\n return (\n <div className=\"flex h-full items-center justify-center p-4\">\n <div className=\"text-muted-foreground text-sm\">\n Dashboard is empty. Add a panel to get started.\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"h-full min-h-[360px]\">\n <LayoutRenderer\n rootLayout={rootLayout}\n onLayoutChange={handleLayoutChange}\n />\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"MosaicDashboardPanels.js","sourceRoot":"","sources":["../../../src/dashboard/panel/MosaicDashboardPanels.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n isLayoutDockNode,\n isLayoutGridNode,\n LayoutNode,\n LayoutRenderer,\n} from '@sqlrooms/layout';\nimport {useCallback, useEffect, useMemo} from 'react';\nimport {useMosaicDashboardContext} from '../MosaicDashboardContext';\nimport {MosaicDashboardPanelDragOverlay} from './MosaicDashboardPanelDragOverlay';\nimport {MosaicDashboardPanel} from './MosaicDashboardPanel';\nimport type {MosaicDashboardPanelConfig} from '../dashboard-types';\nimport {\n getMosaicDashboardDockId,\n MOSAIC_DASHBOARD_PANEL,\n useStoreWithMosaicDashboard,\n} from '../MosaicDashboardSlice';\nimport {DataTableSelectorEmptyState} from '../../components/DataTableSelector';\nimport {useTablesWithColumns} from '../../hooks/useTablesWithColumns';\nimport type {DataTable} from '@sqlrooms/db';\nimport {\n getMosaicTableIdentity,\n resolveMosaicTableReference,\n} from '../../mosaicTableReference';\n\nconst EMPTY_DASHBOARD_PANELS: MosaicDashboardPanelConfig[] = [];\n\nexport const MosaicDashboardPanels: React.FC = () => {\n const {dashboardId} = useMosaicDashboardContext();\n const registerPanel = useStoreWithMosaicDashboard(\n (state) => state.layout.registerPanel,\n );\n const setLayout = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.setLayout,\n );\n const panels = useStoreWithMosaicDashboard(\n (state) =>\n state.mosaicDashboard.config.dashboardsById[dashboardId]?.panels ??\n EMPTY_DASHBOARD_PANELS,\n );\n const dashboardLayout = useStoreWithMosaicDashboard(\n (state) =>\n state.mosaicDashboard.config.dashboardsById[dashboardId]?.layout ?? null,\n );\n const dashboardLayoutType = useStoreWithMosaicDashboard(\n (state) =>\n state.mosaicDashboard.config.dashboardsById[dashboardId]?.layoutType ??\n 'dock',\n );\n\n const tables = useTablesWithColumns();\n const selectedTable = useStoreWithMosaicDashboard(\n (state) =>\n state.mosaicDashboard.config.dashboardsById[dashboardId]?.selectedTable,\n );\n const setSelectedTable = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.setSelectedTable,\n );\n const selectedDataTable = useMemo(\n () => resolveMosaicTableReference(tables, selectedTable).table,\n [selectedTable, tables],\n );\n\n const handleTableChange = useCallback(\n (table: DataTable) => {\n setSelectedTable(dashboardId, getMosaicTableIdentity(table.table));\n },\n [dashboardId, setSelectedTable],\n );\n\n useEffect(() => {\n // This renderer is shared by every Mosaic dashboard panel in the room.\n // Dashboard blocks can be transiently unmounted by the surrounding editor,\n // so unregistering on instance cleanup can leave still-mounted dashboards\n // with layout panel shells but no chart renderer.\n registerPanel(MOSAIC_DASHBOARD_PANEL, () => ({\n title: 'Dashboard panel',\n component: MosaicDashboardPanel,\n dragOverlay: MosaicDashboardPanelDragOverlay,\n }));\n }, [registerPanel]);\n\n const rootLayout: LayoutNode | null = useMemo(() => {\n if (!dashboardLayout) return null;\n if (dashboardLayoutType === 'grid') {\n return isLayoutGridNode(dashboardLayout) ? dashboardLayout : null;\n }\n return {\n type: 'dock',\n id: getMosaicDashboardDockId(dashboardId),\n root: dashboardLayout,\n };\n }, [dashboardId, dashboardLayout, dashboardLayoutType]);\n\n const handleLayoutChange = useCallback(\n (nextLayout: LayoutNode | null) => {\n const innerLayout =\n nextLayout && isLayoutDockNode(nextLayout)\n ? nextLayout.root\n : nextLayout;\n setLayout(dashboardId, innerLayout);\n },\n [dashboardId, setLayout],\n );\n\n if (!selectedDataTable) {\n return (\n <DataTableSelectorEmptyState\n onChange={handleTableChange}\n tables={tables}\n />\n );\n }\n\n if (!panels.length || !rootLayout) {\n return (\n <div className=\"flex h-full items-center justify-center p-4\">\n <div className=\"text-muted-foreground text-sm\">\n Dashboard is empty. Add a panel to get started.\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"h-full min-h-[360px]\">\n <LayoutRenderer\n rootLayout={rootLayout}\n onLayoutChange={handleLayoutChange}\n />\n </div>\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardAddPanelDropdown.d.ts","sourceRoot":"","sources":["../../../src/dashboard/toolbar/MosaicDashboardAddPanelDropdown.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAC,MAAM,OAAO,CAAC;AAW9B,UAAU,oCAAoC;IAC5C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,+BAA+B,EAAE,EAAE,CAC9C,oCAAoC,CA+BrC,CAAC"}
1
+ {"version":3,"file":"MosaicDashboardAddPanelDropdown.d.ts","sourceRoot":"","sources":["../../../src/dashboard/toolbar/MosaicDashboardAddPanelDropdown.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,EAAC,MAAM,OAAO,CAAC;AAc9B,UAAU,oCAAoC;IAC5C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,+BAA+B,EAAE,EAAE,CAC9C,oCAAoC,CAwCrC,CAAC"}
@@ -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,EAAuB,MAAM,OAAO,CAAC;AAU/C,UAAU,qCAAqC;IAC7C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,gCAAgC,EAAE,EAAE,CAC/C,qCAAqC,CA+BtC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useCallback, useMemo } from 'react';
3
+ import { useStoreWithMosaicDashboard } from '../MosaicDashboardSlice';
4
+ import { DataTableSelector } from '../../components/DataTableSelector';
5
+ import { useTablesWithColumns } from '../../hooks/useTablesWithColumns';
6
+ import { getMosaicTableIdentity, resolveMosaicTableReference, } from '../../mosaicTableReference';
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 = useMemo(() => resolveMosaicTableReference(tables, selectedTableName).table, [selectedTableName, tables]);
12
+ const setSelectedTable = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.setSelectedTable);
13
+ const handleTableChange = useCallback((table) => {
14
+ setSelectedTable(dashboardId, getMosaicTableIdentity(table.table));
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,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAC,2BAA2B,EAAC,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAC,iBAAiB,EAAC,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAC,oBAAoB,EAAC,MAAM,kCAAkC,CAAC;AAEtE,OAAO,EACL,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,4BAA4B,CAAC;AAMpC,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,OAAO,CAC3B,GAAG,EAAE,CAAC,2BAA2B,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,KAAK,EAClE,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAC5B,CAAC;IAEF,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,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACrE,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, useMemo} from 'react';\nimport {useStoreWithMosaicDashboard} from '../MosaicDashboardSlice';\nimport {DataTableSelector} from '../../components/DataTableSelector';\nimport {useTablesWithColumns} from '../../hooks/useTablesWithColumns';\nimport type {DataTable} from '@sqlrooms/db';\nimport {\n getMosaicTableIdentity,\n resolveMosaicTableReference,\n} from '../../mosaicTableReference';\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 = useMemo(\n () => resolveMosaicTableReference(tables, selectedTableName).table,\n [selectedTableName, tables],\n );\n\n const setSelectedTable = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.setSelectedTable,\n );\n\n const handleTableChange = useCallback(\n (table: DataTable) => {\n setSelectedTable(dashboardId, getMosaicTableIdentity(table.table));\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,EAAuB,MAAM,OAAO,CAAC;AAU/C,eAAO,MAAM,sBAAsB,EAAE,EA8CpC,CAAC"}
@@ -1,24 +1,28 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useCallback } from 'react';
2
+ import { useCallback, useMemo } from 'react';
3
3
  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';
7
+ import { MosaicDashboardDataTableSelector } from './MosaicDashboardDataTableSelector';
8
+ import { BlockCaptionEditor } from '../../components/BlockCaptionEditor';
8
9
  import { useTablesWithColumns } from '../../hooks/useTablesWithColumns';
9
- import { useDataTable } from '../../hooks/useDataTable';
10
+ import { resolveMosaicTableReference } from '../../mosaicTableReference';
10
11
  export const MosaicDashboardToolbar = () => {
11
12
  const { dashboardId } = useMosaicDashboardContext();
13
+ const dashboard = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.config.dashboardsById[dashboardId]);
14
+ const selectedTableName = dashboard?.selectedTable;
15
+ const dashboardTitle = dashboard?.title ?? '';
12
16
  const tables = useTablesWithColumns();
13
- const selectedTableName = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.config.dashboardsById[dashboardId]?.selectedTable);
14
- 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]);
17
+ const selectedTable = useMemo(() => resolveMosaicTableReference(tables, selectedTableName).table, [selectedTableName, tables]);
18
+ const tableName = selectedTable?.table.table;
19
+ const setDashboardTitle = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.setDashboardTitle);
20
+ const handleTitleChange = useCallback((title) => {
21
+ setDashboardTitle(dashboardId, title || '');
22
+ }, [dashboardId, setDashboardTitle]);
19
23
  if (!selectedTableName) {
20
24
  return null;
21
25
  }
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 })] })] }));
26
+ 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
27
  };
24
28
  //# 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,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;AAC/C,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,kBAAkB,EAAC,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAC,oBAAoB,EAAC,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAC,2BAA2B,EAAC,MAAM,4BAA4B,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,MAAM,GAAG,oBAAoB,EAAE,CAAC;IACtC,MAAM,aAAa,GAAG,OAAO,CAC3B,GAAG,EAAE,CAAC,2BAA2B,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,KAAK,EAClE,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAC5B,CAAC;IACF,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, useMemo} from 'react';\nimport {useMosaicDashboardContext} from '../MosaicDashboardContext';\nimport {useStoreWithMosaicDashboard} from '../MosaicDashboardSlice';\nimport {MosaicDashboardAddPanelDropdown} from './MosaicDashboardAddPanelDropdown';\nimport {MosaicDashboardResetFiltersButton} from './MosaicDashboardResetFiltersButton';\nimport {MosaicDashboardDataTableSelector} from './MosaicDashboardDataTableSelector';\nimport {BlockCaptionEditor} from '../../components/BlockCaptionEditor';\nimport {useTablesWithColumns} from '../../hooks/useTablesWithColumns';\nimport {resolveMosaicTableReference} from '../../mosaicTableReference';\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 tables = useTablesWithColumns();\n const selectedTable = useMemo(\n () => resolveMosaicTableReference(tables, selectedTableName).table,\n [selectedTableName, tables],\n );\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,6 +1,6 @@
1
1
  import { type DataTable } from '@sqlrooms/db';
2
2
  /**
3
- * Returns the last selected table for a dashboard if it exists,
3
+ * Returns the selected table for a dashboard if it exists,
4
4
  * otherwise falls back to the first table with columns.
5
5
  *
6
6
  * @param dashboardId - The dashboard ID
@@ -1 +1 @@
1
- {"version":3,"file":"useSelectedOrFirstTable.d.ts","sourceRoot":"","sources":["../../src/dashboard/useSelectedOrFirstTable.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,SAAS,EAAC,MAAM,cAAc,CAAC;AAI5C;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,GAClB,SAAS,GAAG,SAAS,CAoBvB"}
1
+ {"version":3,"file":"useSelectedOrFirstTable.d.ts","sourceRoot":"","sources":["../../src/dashboard/useSelectedOrFirstTable.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,SAAS,EAAC,MAAM,cAAc,CAAC;AAK5C;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,GAClB,SAAS,GAAG,SAAS,CAwBvB"}
@@ -1,8 +1,9 @@
1
1
  import { useMemo } from 'react';
2
2
  import { useStoreWithMosaicDashboard } from './MosaicDashboardSlice';
3
3
  import { useTablesWithColumns } from '../hooks/useTablesWithColumns';
4
+ import { resolveMosaicTableReference } from '../mosaicTableReference';
4
5
  /**
5
- * Returns the last selected table for a dashboard if it exists,
6
+ * Returns the selected table for a dashboard if it exists,
6
7
  * otherwise falls back to the first table with columns.
7
8
  *
8
9
  * @param dashboardId - The dashboard ID
@@ -12,14 +13,15 @@ export function useSelectedOrFirstTable(dashboardId) {
12
13
  const dashboard = useStoreWithMosaicDashboard((state) => state.mosaicDashboard.config.dashboardsById[dashboardId]);
13
14
  const tables = useTablesWithColumns();
14
15
  return useMemo(() => {
15
- const lastSelectedTableName = dashboard?.lastSelectedTable;
16
- if (!lastSelectedTableName) {
16
+ const selectedTableName = dashboard?.selectedTable ?? dashboard?.lastSelectedTable;
17
+ if (!selectedTableName) {
17
18
  return tables[0];
18
19
  }
19
- // Try to find the last selected table first
20
- const lastSelectedTable = tables.find((table) => table.table.table === lastSelectedTableName);
21
- // Fall back to the first table if the selected one doesn't exist
22
- return lastSelectedTable ?? tables[0];
23
- }, [dashboard?.lastSelectedTable, tables]);
20
+ const { table, ambiguousMatches } = resolveMosaicTableReference(tables, selectedTableName);
21
+ if (ambiguousMatches?.length) {
22
+ return undefined;
23
+ }
24
+ return table ?? tables[0];
25
+ }, [dashboard?.lastSelectedTable, dashboard?.selectedTable, tables]);
24
26
  }
25
27
  //# sourceMappingURL=useSelectedOrFirstTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSelectedOrFirstTable.js","sourceRoot":"","sources":["../../src/dashboard/useSelectedOrFirstTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAC,2BAA2B,EAAC,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAC,oBAAoB,EAAC,MAAM,+BAA+B,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,WAAmB;IAEnB,MAAM,SAAS,GAAG,2BAA2B,CAC3C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CACpE,CAAC;IACF,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IAEtC,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,MAAM,qBAAqB,GAAG,SAAS,EAAE,iBAAiB,CAAC;QAE3D,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3B,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QAED,4CAA4C;QAC5C,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CACnC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,qBAAqB,CACvD,CAAC;QACF,iEAAiE;QACjE,OAAO,iBAAiB,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;AAC7C,CAAC","sourcesContent":["import {useMemo} from 'react';\nimport {type DataTable} from '@sqlrooms/db';\nimport {useStoreWithMosaicDashboard} from './MosaicDashboardSlice';\nimport {useTablesWithColumns} from '../hooks/useTablesWithColumns';\n\n/**\n * Returns the last selected table for a dashboard if it exists,\n * otherwise falls back to the first table with columns.\n *\n * @param dashboardId - The dashboard ID\n * @returns The selected table, or the first table, or undefined if no tables exist\n */\nexport function useSelectedOrFirstTable(\n dashboardId: string,\n): DataTable | undefined {\n const dashboard = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.config.dashboardsById[dashboardId],\n );\n const tables = useTablesWithColumns();\n\n return useMemo(() => {\n const lastSelectedTableName = dashboard?.lastSelectedTable;\n\n if (!lastSelectedTableName) {\n return tables[0];\n }\n\n // Try to find the last selected table first\n const lastSelectedTable = tables.find(\n (table) => table.table.table === lastSelectedTableName,\n );\n // Fall back to the first table if the selected one doesn't exist\n return lastSelectedTable ?? tables[0];\n }, [dashboard?.lastSelectedTable, tables]);\n}\n"]}
1
+ {"version":3,"file":"useSelectedOrFirstTable.js","sourceRoot":"","sources":["../../src/dashboard/useSelectedOrFirstTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAC,2BAA2B,EAAC,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAC,oBAAoB,EAAC,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAC,2BAA2B,EAAC,MAAM,yBAAyB,CAAC;AAEpE;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,WAAmB;IAEnB,MAAM,SAAS,GAAG,2BAA2B,CAC3C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CACpE,CAAC;IACF,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IAEtC,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,MAAM,iBAAiB,GACrB,SAAS,EAAE,aAAa,IAAI,SAAS,EAAE,iBAAiB,CAAC;QAE3D,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QAED,MAAM,EAAC,KAAK,EAAE,gBAAgB,EAAC,GAAG,2BAA2B,CAC3D,MAAM,EACN,iBAAiB,CAClB,CAAC;QACF,IAAI,gBAAgB,EAAE,MAAM,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;AACvE,CAAC","sourcesContent":["import {useMemo} from 'react';\nimport {type DataTable} from '@sqlrooms/db';\nimport {useStoreWithMosaicDashboard} from './MosaicDashboardSlice';\nimport {useTablesWithColumns} from '../hooks/useTablesWithColumns';\nimport {resolveMosaicTableReference} from '../mosaicTableReference';\n\n/**\n * Returns the selected table for a dashboard if it exists,\n * otherwise falls back to the first table with columns.\n *\n * @param dashboardId - The dashboard ID\n * @returns The selected table, or the first table, or undefined if no tables exist\n */\nexport function useSelectedOrFirstTable(\n dashboardId: string,\n): DataTable | undefined {\n const dashboard = useStoreWithMosaicDashboard(\n (state) => state.mosaicDashboard.config.dashboardsById[dashboardId],\n );\n const tables = useTablesWithColumns();\n\n return useMemo(() => {\n const selectedTableName =\n dashboard?.selectedTable ?? dashboard?.lastSelectedTable;\n\n if (!selectedTableName) {\n return tables[0];\n }\n\n const {table, ambiguousMatches} = resolveMosaicTableReference(\n tables,\n selectedTableName,\n );\n if (ambiguousMatches?.length) {\n return undefined;\n }\n\n return table ?? tables[0];\n }, [dashboard?.lastSelectedTable, dashboard?.selectedTable, tables]);\n}\n"]}