@sqlrooms/mosaic 0.29.0-rc.5 → 0.29.0-rc.6

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 (334) hide show
  1. package/README.md +43 -39
  2. package/dist/DataPointLimitError.d.ts +9 -0
  3. package/dist/DataPointLimitError.d.ts.map +1 -0
  4. package/dist/DataPointLimitError.js +14 -0
  5. package/dist/DataPointLimitError.js.map +1 -0
  6. package/dist/MosaicSlice.d.ts.map +1 -1
  7. package/dist/MosaicSlice.js +3 -3
  8. package/dist/MosaicSlice.js.map +1 -1
  9. package/dist/VgPlotChart.d.ts +8 -11
  10. package/dist/VgPlotChart.d.ts.map +1 -1
  11. package/dist/VgPlotChart.js +74 -90
  12. package/dist/VgPlotChart.js.map +1 -1
  13. package/dist/VgPlotChartError.d.ts +7 -0
  14. package/dist/VgPlotChartError.d.ts.map +1 -0
  15. package/dist/VgPlotChartError.js +9 -0
  16. package/dist/VgPlotChartError.js.map +1 -0
  17. package/dist/ai.d.ts +103 -0
  18. package/dist/ai.d.ts.map +1 -0
  19. package/dist/ai.js +445 -0
  20. package/dist/ai.js.map +1 -0
  21. package/dist/boxplot/BoxPlotClient.d.ts +7 -0
  22. package/dist/boxplot/BoxPlotClient.d.ts.map +1 -1
  23. package/dist/boxplot/BoxPlotClient.js +22 -0
  24. package/dist/boxplot/BoxPlotClient.js.map +1 -1
  25. package/dist/chart/ChartRuntimeIssuePanel.d.ts +7 -0
  26. package/dist/chart/ChartRuntimeIssuePanel.d.ts.map +1 -0
  27. package/dist/chart/ChartRuntimeIssuePanel.js +10 -0
  28. package/dist/chart/ChartRuntimeIssuePanel.js.map +1 -0
  29. package/dist/chart/MosaicDashboardChart.d.ts +1 -1
  30. package/dist/chart/MosaicDashboardChart.d.ts.map +1 -1
  31. package/dist/chart/MosaicDashboardChart.js +1 -1
  32. package/dist/chart/MosaicDashboardChart.js.map +1 -1
  33. package/dist/chart/MosaicDashboardChartContent.d.ts +1 -1
  34. package/dist/chart/MosaicDashboardChartContent.d.ts.map +1 -1
  35. package/dist/chart/MosaicDashboardChartContent.js +29 -2
  36. package/dist/chart/MosaicDashboardChartContent.js.map +1 -1
  37. package/dist/chart/MosaicDashboardChartRenderer.d.ts +2 -1
  38. package/dist/chart/MosaicDashboardChartRenderer.d.ts.map +1 -1
  39. package/dist/chart/MosaicDashboardChartRenderer.js +2 -2
  40. package/dist/chart/MosaicDashboardChartRenderer.js.map +1 -1
  41. package/dist/chart/MosaicDashboardComponentChart.d.ts +5 -1
  42. package/dist/chart/MosaicDashboardComponentChart.d.ts.map +1 -1
  43. package/dist/chart/MosaicDashboardComponentChart.js +4 -1
  44. package/dist/chart/MosaicDashboardComponentChart.js.map +1 -1
  45. package/dist/chart/MosaicDashboardVgPlotChart.d.ts +4 -0
  46. package/dist/chart/MosaicDashboardVgPlotChart.d.ts.map +1 -1
  47. package/dist/chart/MosaicDashboardVgPlotChart.js +2 -2
  48. package/dist/chart/MosaicDashboardVgPlotChart.js.map +1 -1
  49. package/dist/chart/addChartPanelAction.d.ts +3 -0
  50. package/dist/chart/addChartPanelAction.d.ts.map +1 -0
  51. package/dist/chart/addChartPanelAction.js +14 -0
  52. package/dist/chart/addChartPanelAction.js.map +1 -0
  53. package/dist/chart/chart-settings/ChartSettings.d.ts.map +1 -1
  54. package/dist/chart/chart-settings/ChartSettings.js +7 -4
  55. package/dist/chart/chart-settings/ChartSettings.js.map +1 -1
  56. package/dist/chart/chart-settings/ChartSettingsContent.d.ts +1 -1
  57. package/dist/chart/chart-settings/ChartSettingsContent.d.ts.map +1 -1
  58. package/dist/chart/chart-settings/ChartSettingsContent.js.map +1 -1
  59. package/dist/chart/chart-settings/ChartSettingsContext.d.ts +0 -2
  60. package/dist/chart/chart-settings/ChartSettingsContext.d.ts.map +1 -1
  61. package/dist/chart/chart-settings/ChartSettingsContext.js +6 -7
  62. package/dist/chart/chart-settings/ChartSettingsContext.js.map +1 -1
  63. package/dist/chart/chart-settings/ChartSettingsPanel.d.ts +1 -1
  64. package/dist/chart/chart-settings/ChartSettingsPanel.d.ts.map +1 -1
  65. package/dist/chart/chart-settings/ChartSettingsPanel.js +1 -1
  66. package/dist/chart/chart-settings/ChartSettingsPanel.js.map +1 -1
  67. package/dist/chart/chart-settings/ChartTypeSelector.d.ts.map +1 -1
  68. package/dist/chart/chart-settings/ChartTypeSelector.js +5 -5
  69. package/dist/chart/chart-settings/ChartTypeSelector.js.map +1 -1
  70. package/dist/chart-builders/ColumnSelector.d.ts +0 -2
  71. package/dist/chart-builders/ColumnSelector.d.ts.map +1 -1
  72. package/dist/chart-builders/ColumnSelector.js +4 -5
  73. package/dist/chart-builders/ColumnSelector.js.map +1 -1
  74. package/dist/chart-builders/ColumnsContext.d.ts +13 -0
  75. package/dist/chart-builders/ColumnsContext.d.ts.map +1 -0
  76. package/dist/chart-builders/ColumnsContext.js +15 -0
  77. package/dist/chart-builders/ColumnsContext.js.map +1 -0
  78. package/dist/chart-builders/MultiFieldSelector.js +4 -4
  79. package/dist/chart-builders/MultiFieldSelector.js.map +1 -1
  80. package/dist/chart-builders/TableSelector.d.ts +14 -0
  81. package/dist/chart-builders/TableSelector.d.ts.map +1 -0
  82. package/dist/chart-builders/TableSelector.js +23 -0
  83. package/dist/chart-builders/TableSelector.js.map +1 -0
  84. package/dist/chart-runtime.d.ts +50 -0
  85. package/dist/chart-runtime.d.ts.map +1 -0
  86. package/dist/chart-runtime.js +76 -0
  87. package/dist/chart-runtime.js.map +1 -0
  88. package/dist/chart-types/base-types.d.ts +45 -25
  89. package/dist/chart-types/base-types.d.ts.map +1 -1
  90. package/dist/chart-types/base-types.js.map +1 -1
  91. package/dist/chart-types/box-plot/definition.d.ts.map +1 -1
  92. package/dist/chart-types/box-plot/definition.js +5 -0
  93. package/dist/chart-types/box-plot/definition.js.map +1 -1
  94. package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.d.ts.map +1 -1
  95. package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.js +4 -1
  96. package/dist/chart-types/box-plot/renderer/BoxPlotPanelRenderer.js.map +1 -1
  97. package/dist/chart-types/box-plot/renderer/useBoxPlotClient.d.ts +4 -0
  98. package/dist/chart-types/box-plot/renderer/useBoxPlotClient.d.ts.map +1 -1
  99. package/dist/chart-types/box-plot/renderer/useBoxPlotClient.js +13 -2
  100. package/dist/chart-types/box-plot/renderer/useBoxPlotClient.js.map +1 -1
  101. package/dist/chart-types/box-plot/schema.d.ts +5 -0
  102. package/dist/chart-types/box-plot/schema.d.ts.map +1 -1
  103. package/dist/chart-types/box-plot/schema.js +2 -0
  104. package/dist/chart-types/box-plot/schema.js.map +1 -1
  105. package/dist/chart-types/box-plot/tool.d.ts +5 -9
  106. package/dist/chart-types/box-plot/tool.d.ts.map +1 -1
  107. package/dist/chart-types/box-plot/tool.js +14 -6
  108. package/dist/chart-types/box-plot/tool.js.map +1 -1
  109. package/dist/chart-types/bubble-chart/definition.d.ts.map +1 -1
  110. package/dist/chart-types/bubble-chart/definition.js +5 -0
  111. package/dist/chart-types/bubble-chart/definition.js.map +1 -1
  112. package/dist/chart-types/bubble-chart/schema.d.ts +5 -0
  113. package/dist/chart-types/bubble-chart/schema.d.ts.map +1 -1
  114. package/dist/chart-types/bubble-chart/schema.js +2 -0
  115. package/dist/chart-types/bubble-chart/schema.js.map +1 -1
  116. package/dist/chart-types/bubble-chart/tool.d.ts +5 -9
  117. package/dist/chart-types/bubble-chart/tool.d.ts.map +1 -1
  118. package/dist/chart-types/bubble-chart/tool.js +17 -9
  119. package/dist/chart-types/bubble-chart/tool.js.map +1 -1
  120. package/dist/chart-types/chart-config.d.ts +46 -0
  121. package/dist/chart-types/chart-config.d.ts.map +1 -1
  122. package/dist/chart-types/chart-config.js +2 -0
  123. package/dist/chart-types/chart-config.js.map +1 -1
  124. package/dist/chart-types/count-plot/schema.d.ts +5 -0
  125. package/dist/chart-types/count-plot/schema.d.ts.map +1 -1
  126. package/dist/chart-types/count-plot/schema.js +2 -0
  127. package/dist/chart-types/count-plot/schema.js.map +1 -1
  128. package/dist/chart-types/count-plot/tool.d.ts +5 -9
  129. package/dist/chart-types/count-plot/tool.d.ts.map +1 -1
  130. package/dist/chart-types/count-plot/tool.js +14 -6
  131. package/dist/chart-types/count-plot/tool.js.map +1 -1
  132. package/dist/chart-types/custom-spec/definition.d.ts.map +1 -1
  133. package/dist/chart-types/custom-spec/definition.js +5 -0
  134. package/dist/chart-types/custom-spec/definition.js.map +1 -1
  135. package/dist/chart-types/custom-spec/schema.d.ts +5 -0
  136. package/dist/chart-types/custom-spec/schema.d.ts.map +1 -1
  137. package/dist/chart-types/custom-spec/schema.js +2 -0
  138. package/dist/chart-types/custom-spec/schema.js.map +1 -1
  139. package/dist/chart-types/data-policy-schema.d.ts +8 -0
  140. package/dist/chart-types/data-policy-schema.d.ts.map +1 -0
  141. package/dist/chart-types/data-policy-schema.js +7 -0
  142. package/dist/chart-types/data-policy-schema.js.map +1 -0
  143. package/dist/chart-types/heatmap/schema.d.ts +5 -0
  144. package/dist/chart-types/heatmap/schema.d.ts.map +1 -1
  145. package/dist/chart-types/heatmap/schema.js +2 -0
  146. package/dist/chart-types/heatmap/schema.js.map +1 -1
  147. package/dist/chart-types/heatmap/tool.d.ts +5 -9
  148. package/dist/chart-types/heatmap/tool.d.ts.map +1 -1
  149. package/dist/chart-types/heatmap/tool.js +16 -8
  150. package/dist/chart-types/heatmap/tool.js.map +1 -1
  151. package/dist/chart-types/histogram/HistogramSettings.d.ts.map +1 -1
  152. package/dist/chart-types/histogram/HistogramSettings.js +4 -2
  153. package/dist/chart-types/histogram/HistogramSettings.js.map +1 -1
  154. package/dist/chart-types/histogram/schema.d.ts +10 -0
  155. package/dist/chart-types/histogram/schema.d.ts.map +1 -1
  156. package/dist/chart-types/histogram/schema.js +13 -0
  157. package/dist/chart-types/histogram/schema.js.map +1 -1
  158. package/dist/chart-types/histogram/spec.d.ts +1 -1
  159. package/dist/chart-types/histogram/spec.d.ts.map +1 -1
  160. package/dist/chart-types/histogram/spec.js +4 -3
  161. package/dist/chart-types/histogram/spec.js.map +1 -1
  162. package/dist/chart-types/histogram/tool.d.ts +7 -9
  163. package/dist/chart-types/histogram/tool.d.ts.map +1 -1
  164. package/dist/chart-types/histogram/tool.js +17 -7
  165. package/dist/chart-types/histogram/tool.js.map +1 -1
  166. package/dist/chart-types/index.d.ts +45 -3
  167. package/dist/chart-types/index.d.ts.map +1 -1
  168. package/dist/chart-types/index.js +8 -2
  169. package/dist/chart-types/index.js.map +1 -1
  170. package/dist/chart-types/line-chart/LineChartSettings.d.ts.map +1 -1
  171. package/dist/chart-types/line-chart/LineChartSettings.js +3 -1
  172. package/dist/chart-types/line-chart/LineChartSettings.js.map +1 -1
  173. package/dist/chart-types/line-chart/definition.d.ts.map +1 -1
  174. package/dist/chart-types/line-chart/definition.js +7 -0
  175. package/dist/chart-types/line-chart/definition.js.map +1 -1
  176. package/dist/chart-types/line-chart/schema.d.ts +5 -0
  177. package/dist/chart-types/line-chart/schema.d.ts.map +1 -1
  178. package/dist/chart-types/line-chart/schema.js +2 -0
  179. package/dist/chart-types/line-chart/schema.js.map +1 -1
  180. package/dist/chart-types/line-chart/tool.d.ts +5 -9
  181. package/dist/chart-types/line-chart/tool.d.ts.map +1 -1
  182. package/dist/chart-types/line-chart/tool.js +16 -8
  183. package/dist/chart-types/line-chart/tool.js.map +1 -1
  184. package/dist/chart-types/list-panels-tool.d.ts +35 -0
  185. package/dist/chart-types/list-panels-tool.d.ts.map +1 -0
  186. package/dist/chart-types/list-panels-tool.js +66 -0
  187. package/dist/chart-types/list-panels-tool.js.map +1 -0
  188. package/dist/chart-types/profiler-tool.d.ts +40 -0
  189. package/dist/chart-types/profiler-tool.d.ts.map +1 -0
  190. package/dist/chart-types/profiler-tool.js +73 -0
  191. package/dist/chart-types/profiler-tool.js.map +1 -0
  192. package/dist/chart-types/remove-panel-tool.d.ts +31 -0
  193. package/dist/chart-types/remove-panel-tool.d.ts.map +1 -0
  194. package/dist/chart-types/remove-panel-tool.js +55 -0
  195. package/dist/chart-types/remove-panel-tool.js.map +1 -0
  196. package/dist/chart-types/text-panel-tool.d.ts +42 -0
  197. package/dist/chart-types/text-panel-tool.d.ts.map +1 -0
  198. package/dist/chart-types/text-panel-tool.js +71 -0
  199. package/dist/chart-types/text-panel-tool.js.map +1 -0
  200. package/dist/chart-types/tool-helpers.d.ts +44 -0
  201. package/dist/chart-types/tool-helpers.d.ts.map +1 -0
  202. package/dist/chart-types/tool-helpers.js +129 -0
  203. package/dist/chart-types/tool-helpers.js.map +1 -0
  204. package/dist/chart-types/tool-schemas.d.ts +1 -0
  205. package/dist/chart-types/tool-schemas.d.ts.map +1 -1
  206. package/dist/chart-types/tool-schemas.js +5 -1
  207. package/dist/chart-types/tool-schemas.js.map +1 -1
  208. package/dist/dashboard/MosaicDashboard.d.ts +5 -2
  209. package/dist/dashboard/MosaicDashboard.d.ts.map +1 -1
  210. package/dist/dashboard/MosaicDashboard.js +20 -39
  211. package/dist/dashboard/MosaicDashboard.js.map +1 -1
  212. package/dist/dashboard/MosaicDashboardContext.d.ts +2 -0
  213. package/dist/dashboard/MosaicDashboardContext.d.ts.map +1 -1
  214. package/dist/dashboard/MosaicDashboardContext.js.map +1 -1
  215. package/dist/dashboard/MosaicDashboardEmptyState.d.ts.map +1 -1
  216. package/dist/dashboard/MosaicDashboardEmptyState.js +8 -44
  217. package/dist/dashboard/MosaicDashboardEmptyState.js.map +1 -1
  218. package/dist/dashboard/MosaicDashboardPanel.d.ts.map +1 -1
  219. package/dist/dashboard/MosaicDashboardPanel.js +2 -5
  220. package/dist/dashboard/MosaicDashboardPanel.js.map +1 -1
  221. package/dist/dashboard/MosaicDashboardPanelHeader.d.ts +2 -2
  222. package/dist/dashboard/MosaicDashboardPanelHeader.d.ts.map +1 -1
  223. package/dist/dashboard/MosaicDashboardPanelHeader.js +2 -2
  224. package/dist/dashboard/MosaicDashboardPanelHeader.js.map +1 -1
  225. package/dist/dashboard/MosaicDashboardPanels.d.ts.map +1 -1
  226. package/dist/dashboard/MosaicDashboardPanels.js +3 -2
  227. package/dist/dashboard/MosaicDashboardPanels.js.map +1 -1
  228. package/dist/dashboard/MosaicDashboardSlice.d.ts +185 -107
  229. package/dist/dashboard/MosaicDashboardSlice.d.ts.map +1 -1
  230. package/dist/dashboard/MosaicDashboardSlice.js +80 -57
  231. package/dist/dashboard/MosaicDashboardSlice.js.map +1 -1
  232. package/dist/dashboard/action-types.d.ts +25 -0
  233. package/dist/dashboard/action-types.d.ts.map +1 -0
  234. package/dist/dashboard/action-types.js +5 -0
  235. package/dist/dashboard/action-types.js.map +1 -0
  236. package/dist/dashboard/core-types.d.ts +26 -0
  237. package/dist/dashboard/core-types.d.ts.map +1 -0
  238. package/dist/dashboard/core-types.js +21 -0
  239. package/dist/dashboard/core-types.js.map +1 -0
  240. package/dist/dashboard/dashboard-types.d.ts +491 -0
  241. package/dist/dashboard/dashboard-types.d.ts.map +1 -0
  242. package/dist/dashboard/dashboard-types.js +54 -0
  243. package/dist/dashboard/dashboard-types.js.map +1 -0
  244. package/dist/dashboard/defaultPanelActions.d.ts +3 -0
  245. package/dist/dashboard/defaultPanelActions.d.ts.map +1 -0
  246. package/dist/dashboard/defaultPanelActions.js +9 -0
  247. package/dist/dashboard/defaultPanelActions.js.map +1 -0
  248. package/dist/dashboard/defaultPanelRenderers.d.ts.map +1 -1
  249. package/dist/dashboard/defaultPanelRenderers.js +1 -1
  250. package/dist/dashboard/defaultPanelRenderers.js.map +1 -1
  251. package/dist/dashboard/initial-state/BuildDashboardManuallyPanel.d.ts +6 -0
  252. package/dist/dashboard/initial-state/BuildDashboardManuallyPanel.d.ts.map +1 -0
  253. package/dist/dashboard/initial-state/BuildDashboardManuallyPanel.js +46 -0
  254. package/dist/dashboard/initial-state/BuildDashboardManuallyPanel.js.map +1 -0
  255. package/dist/dashboard/initial-state/BuildDashboardWithAIPanel.d.ts +7 -0
  256. package/dist/dashboard/initial-state/BuildDashboardWithAIPanel.d.ts.map +1 -0
  257. package/dist/dashboard/initial-state/BuildDashboardWithAIPanel.js +29 -0
  258. package/dist/dashboard/initial-state/BuildDashboardWithAIPanel.js.map +1 -0
  259. package/dist/dashboard/initial-state/MosaicDashboardInitialState.d.ts +6 -0
  260. package/dist/dashboard/initial-state/MosaicDashboardInitialState.d.ts.map +1 -0
  261. package/dist/dashboard/initial-state/MosaicDashboardInitialState.js +9 -0
  262. package/dist/dashboard/initial-state/MosaicDashboardInitialState.js.map +1 -0
  263. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.d.ts +7 -0
  264. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.d.ts.map +1 -0
  265. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.js +12 -0
  266. package/dist/dashboard/toolbar/MosaicDashboardAddPanelDropdown.js.map +1 -0
  267. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.d.ts +7 -0
  268. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.d.ts.map +1 -0
  269. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.js +36 -0
  270. package/dist/dashboard/toolbar/MosaicDashboardResetFiltersButton.js.map +1 -0
  271. package/dist/dashboard/toolbar/MosaicDashboardToolbar.d.ts.map +1 -0
  272. package/dist/dashboard/toolbar/MosaicDashboardToolbar.js +15 -0
  273. package/dist/dashboard/toolbar/MosaicDashboardToolbar.js.map +1 -0
  274. package/dist/dashboard/useAddPanelActions.d.ts +10 -0
  275. package/dist/dashboard/useAddPanelActions.d.ts.map +1 -0
  276. package/dist/dashboard/useAddPanelActions.js +26 -0
  277. package/dist/dashboard/useAddPanelActions.js.map +1 -0
  278. package/dist/dashboard/useMosaicDashboardAddPanelActionContext.d.ts +3 -0
  279. package/dist/dashboard/useMosaicDashboardAddPanelActionContext.d.ts.map +1 -0
  280. package/dist/dashboard/useMosaicDashboardAddPanelActionContext.js +18 -0
  281. package/dist/dashboard/useMosaicDashboardAddPanelActionContext.js.map +1 -0
  282. package/dist/dashboard/useSelectedOrFirstTable.d.ts +10 -0
  283. package/dist/dashboard/useSelectedOrFirstTable.d.ts.map +1 -0
  284. package/dist/dashboard/useSelectedOrFirstTable.js +25 -0
  285. package/dist/dashboard/useSelectedOrFirstTable.js.map +1 -0
  286. package/dist/dashboard/useTablesWithColumns.d.ts +9 -0
  287. package/dist/dashboard/useTablesWithColumns.d.ts.map +1 -0
  288. package/dist/dashboard/useTablesWithColumns.js +13 -0
  289. package/dist/dashboard/useTablesWithColumns.js.map +1 -0
  290. package/dist/index.d.ts +25 -4
  291. package/dist/index.d.ts.map +1 -1
  292. package/dist/index.js +22 -2
  293. package/dist/index.js.map +1 -1
  294. package/dist/profiler/MosaicDashboardProfilerPanelRenderer.d.ts +2 -1
  295. package/dist/profiler/MosaicDashboardProfilerPanelRenderer.d.ts.map +1 -1
  296. package/dist/profiler/MosaicDashboardProfilerPanelRenderer.js +3 -3
  297. package/dist/profiler/MosaicDashboardProfilerPanelRenderer.js.map +1 -1
  298. package/dist/profiler/addProfilerPanelAction.d.ts +3 -0
  299. package/dist/profiler/addProfilerPanelAction.d.ts.map +1 -0
  300. package/dist/profiler/addProfilerPanelAction.js +9 -0
  301. package/dist/profiler/addProfilerPanelAction.js.map +1 -0
  302. package/dist/text/MosaicDashboardTextRenderer.d.ts +2 -1
  303. package/dist/text/MosaicDashboardTextRenderer.d.ts.map +1 -1
  304. package/dist/text/MosaicDashboardTextRenderer.js +4 -4
  305. package/dist/text/MosaicDashboardTextRenderer.js.map +1 -1
  306. package/dist/text/addTextPanelAction.d.ts +3 -0
  307. package/dist/text/addTextPanelAction.d.ts.map +1 -0
  308. package/dist/text/addTextPanelAction.js +9 -0
  309. package/dist/text/addTextPanelAction.js.map +1 -0
  310. package/dist/useMosaicClient.d.ts +4 -0
  311. package/dist/useMosaicClient.d.ts.map +1 -1
  312. package/dist/useMosaicClient.js +33 -3
  313. package/dist/useMosaicClient.js.map +1 -1
  314. package/dist/useVgPlotChartError.d.ts +13 -0
  315. package/dist/useVgPlotChartError.d.ts.map +1 -0
  316. package/dist/useVgPlotChartError.js +18 -0
  317. package/dist/useVgPlotChartError.js.map +1 -0
  318. package/dist/useVgPlotChartRender.d.ts +24 -0
  319. package/dist/useVgPlotChartRender.d.ts.map +1 -0
  320. package/dist/useVgPlotChartRender.js +152 -0
  321. package/dist/useVgPlotChartRender.js.map +1 -0
  322. package/dist/useVgPlotChartRetention.d.ts +21 -0
  323. package/dist/useVgPlotChartRetention.d.ts.map +1 -0
  324. package/dist/useVgPlotChartRetention.js +63 -0
  325. package/dist/useVgPlotChartRetention.js.map +1 -0
  326. package/dist/wrapCoordinatorWithValidation.d.ts +11 -0
  327. package/dist/wrapCoordinatorWithValidation.d.ts.map +1 -0
  328. package/dist/wrapCoordinatorWithValidation.js +23 -0
  329. package/dist/wrapCoordinatorWithValidation.js.map +1 -0
  330. package/package.json +31 -13
  331. package/dist/dashboard/MosaicDashboardToolbar.d.ts.map +0 -1
  332. package/dist/dashboard/MosaicDashboardToolbar.js +0 -86
  333. package/dist/dashboard/MosaicDashboardToolbar.js.map +0 -1
  334. /package/dist/dashboard/{MosaicDashboardToolbar.d.ts → toolbar/MosaicDashboardToolbar.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardSlice.d.ts","sourceRoot":"","sources":["../../src/dashboard/MosaicDashboardSlice.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MosaicDashboardSlice.d.ts","sourceRoot":"","sources":["../../src/dashboard/MosaicDashboardSlice.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import { createId } from '@paralleldrive/cuid2';
2
2
  import { DEFAULT_GRID_COLS, getGridColsForBreakpoint, } from '@sqlrooms/layout';
3
- import { isLayoutGridNode, isLayoutNodeKey, isLayoutPanelNode, isLayoutSplitNode, LayoutNode as LayoutNodeSchema, } from '@sqlrooms/layout-config';
3
+ import { LayoutNode, isLayoutGridNode, isLayoutNodeKey, isLayoutPanelNode, isLayoutSplitNode, } from '@sqlrooms/layout-config';
4
4
  import { createSlice, useBaseRoomStore, } from '@sqlrooms/room-store';
5
5
  import { produce } from 'immer';
6
6
  import { z } from 'zod';
7
- import { destroyRetainedVgPlotChart, } from '../VgPlotChart';
8
7
  import { ChartConfig } from '../chart-types/chart-config';
8
+ import { destroyRetainedVgPlotChart, } from '../VgPlotChart';
9
9
  /**
10
10
  * Panel key used for function-form panel definitions registered by
11
11
  * `MosaicDashboardPanels`. Individual dashboard panels are represented as
@@ -17,10 +17,6 @@ export const MOSAIC_DASHBOARD_CHART_PANEL_TYPE = 'vgplot';
17
17
  export const MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE = 'profiler';
18
18
  export const MOSAIC_DASHBOARD_TEXT_PANEL_TYPE = 'text';
19
19
  export const MosaicDashboardLayoutType = z.enum(['dock', 'grid']);
20
- export const MosaicDashboardPanelSource = z.object({
21
- tableName: z.string().optional(),
22
- sqlQuery: z.string().optional(),
23
- });
24
20
  // Profiler panel config
25
21
  export const ProfilerPanelConfig = z.object({
26
22
  pageSize: z.number().optional(),
@@ -28,7 +24,7 @@ export const ProfilerPanelConfig = z.object({
28
24
  // Text panel config
29
25
  export const TextPanelConfig = z.object({
30
26
  content: z.string().default(''),
31
- toolbarOpen: z.boolean().default(true),
27
+ toolbarOpen: z.boolean().default(false),
32
28
  sourcePanelOpen: z.boolean().default(false),
33
29
  });
34
30
  // Panel configs discriminated by type
@@ -36,21 +32,18 @@ export const ChartPanelConfig = z.object({
36
32
  id: z.string(),
37
33
  type: z.literal(MOSAIC_DASHBOARD_CHART_PANEL_TYPE),
38
34
  title: z.string().default('Panel'),
39
- source: MosaicDashboardPanelSource.optional(),
40
35
  config: ChartConfig,
41
36
  });
42
37
  export const ProfilerPanel = z.object({
43
38
  id: z.string(),
44
39
  type: z.literal(MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE),
45
40
  title: z.string().default('Panel'),
46
- source: MosaicDashboardPanelSource.optional(),
47
41
  config: ProfilerPanelConfig,
48
42
  });
49
43
  export const TextPanel = z.object({
50
44
  id: z.string(),
51
45
  type: z.literal(MOSAIC_DASHBOARD_TEXT_PANEL_TYPE),
52
46
  title: z.string().default('Text'),
53
- source: MosaicDashboardPanelSource.optional(),
54
47
  config: TextPanelConfig,
55
48
  });
56
49
  // Legacy panel for backward compatibility
@@ -58,49 +51,37 @@ export const LegacyPanelConfig = z.object({
58
51
  id: z.string(),
59
52
  type: z.string(),
60
53
  title: z.string().default('Panel'),
61
- source: MosaicDashboardPanelSource.optional(),
62
54
  config: z.record(z.string(), z.unknown()).default({}),
63
55
  });
64
56
  // Discriminated union of all panel types
65
57
  export const MosaicDashboardPanelConfig = z
66
58
  .discriminatedUnion('type', [ChartPanelConfig, ProfilerPanel, TextPanel])
67
59
  .or(LegacyPanelConfig);
68
- export function createMosaicDashboardPanelConfig(options) {
69
- return {
70
- id: createId(),
71
- type: options.type,
72
- title: options.title,
73
- source: options.source,
74
- config: options.config ?? {},
75
- };
76
- }
77
- export function createMosaicDashboardChartPanelConfig(title, config, source) {
60
+ export function createMosaicDashboardChartPanelConfig(title, config) {
78
61
  return {
79
62
  id: createId(),
80
63
  type: MOSAIC_DASHBOARD_CHART_PANEL_TYPE,
81
64
  title,
82
- source,
83
65
  config,
84
66
  };
85
67
  }
86
68
  export function createMosaicDashboardProfilerPanelConfig(options = {}) {
87
- return createMosaicDashboardPanelConfig({
69
+ return {
70
+ id: createId(),
88
71
  type: MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE,
89
72
  title: options.title ?? 'Profiler',
90
- source: options.source,
91
- config: {
92
- pageSize: options.pageSize ?? 10,
93
- },
94
- });
73
+ config: options.config ?? {},
74
+ };
95
75
  }
96
76
  export function createMosaicDashboardTextPanelConfig(options = {}) {
97
77
  return {
98
78
  id: createId(),
99
79
  type: MOSAIC_DASHBOARD_TEXT_PANEL_TYPE,
100
80
  title: options.title ?? 'Text',
101
- source: options.source,
102
- config: {
103
- content: options.content ?? '',
81
+ config: options.config ?? {
82
+ toolbarOpen: false,
83
+ sourcePanelOpen: false,
84
+ content: '',
104
85
  },
105
86
  };
106
87
  }
@@ -109,8 +90,9 @@ export const MosaicDashboardEntry = z.object({
109
90
  title: z.string().default('Dashboard'),
110
91
  layoutType: MosaicDashboardLayoutType.default('dock'),
111
92
  selectedTable: z.string().optional(),
93
+ lastSelectedTable: z.string().optional(),
112
94
  panels: z.array(MosaicDashboardPanelConfig).default([]),
113
- layout: LayoutNodeSchema.nullable().default(null),
95
+ layout: LayoutNode.nullable().default(null),
114
96
  updatedAt: z.number().default(0),
115
97
  });
116
98
  export const MosaicDashboardSliceConfig = z.object({
@@ -168,7 +150,8 @@ function getLayoutChildId(node) {
168
150
  }
169
151
  function createDashboardGridItem(panelId, layout, cols = 12, panelType) {
170
152
  const effectiveCols = Math.max(1, cols);
171
- const w = panelType === MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE
153
+ const w = panelType === MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE ||
154
+ panelType === MOSAIC_DASHBOARD_TEXT_PANEL_TYPE
172
155
  ? effectiveCols
173
156
  : Math.max(1, Math.ceil(effectiveCols / 2));
174
157
  const h = 2;
@@ -407,30 +390,6 @@ function shouldEvictPanelRuntimeForPatch(panel, patch) {
407
390
  }
408
391
  return false;
409
392
  }
410
- /**
411
- * Type guard to check if a panel config has a source property.
412
- * All standard panel types (Chart, Profiler, Text) have optional sources.
413
- */
414
- export function panelHasSource(panel) {
415
- return (panel.type === MOSAIC_DASHBOARD_CHART_PANEL_TYPE ||
416
- panel.type === MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE ||
417
- panel.type === MOSAIC_DASHBOARD_TEXT_PANEL_TYPE);
418
- }
419
- export function resolveMosaicDashboardPanelSource(dashboard, panel) {
420
- if (!panelHasSource(panel)) {
421
- return undefined;
422
- }
423
- if (panel.source?.sqlQuery || panel.source?.tableName) {
424
- return panel.source;
425
- }
426
- // Text panels typically don't need a table source
427
- if (panel.type === MOSAIC_DASHBOARD_TEXT_PANEL_TYPE) {
428
- return undefined;
429
- }
430
- return dashboard.selectedTable
431
- ? { tableName: dashboard.selectedTable }
432
- : undefined;
433
- }
434
393
  export function createDefaultMosaicDashboardConfig(props) {
435
394
  return MosaicDashboardSliceConfig.parse({
436
395
  dashboardsById: {},
@@ -443,6 +402,7 @@ export function createMosaicDashboardSlice(props = {}) {
443
402
  config: createDefaultMosaicDashboardConfig(props.config),
444
403
  runtime: {
445
404
  retainedChartsByPanelId: {},
405
+ panelIssuesByPanelId: {},
446
406
  },
447
407
  chartTypes: props.chartTypes,
448
408
  addPanelActions: props.addPanelActions ?? [],
@@ -501,6 +461,16 @@ export function createMosaicDashboardSlice(props = {}) {
501
461
  dashboard.updatedAt = Date.now();
502
462
  }));
503
463
  },
464
+ setLastSelectedTable(dashboardId, tableName) {
465
+ get().mosaicDashboard.ensureDashboard(dashboardId);
466
+ set((state) => produce(state, (draft) => {
467
+ const dashboard = draft.mosaicDashboard.config.dashboardsById[dashboardId];
468
+ if (!dashboard)
469
+ return;
470
+ dashboard.lastSelectedTable = tableName;
471
+ dashboard.updatedAt = Date.now();
472
+ }));
473
+ },
504
474
  registerPanelRenderer(type, renderer) {
505
475
  set((state) => produce(state, (draft) => {
506
476
  draft.mosaicDashboard.panelRenderers[type] = renderer;
@@ -580,6 +550,45 @@ export function createMosaicDashboardSlice(props = {}) {
580
550
  },
581
551
  }));
582
552
  },
553
+ getPanelIssue(dashboardId, panelId) {
554
+ return get().mosaicDashboard.runtime.panelIssuesByPanelId[getMosaicDashboardPanelId(dashboardId, panelId)];
555
+ },
556
+ reportPanelIssue(dashboardId, panelId, issue) {
557
+ const runtimePanelId = getMosaicDashboardPanelId(dashboardId, panelId);
558
+ set((state) => ({
559
+ mosaicDashboard: {
560
+ ...state.mosaicDashboard,
561
+ runtime: {
562
+ ...state.mosaicDashboard.runtime,
563
+ panelIssuesByPanelId: {
564
+ ...state.mosaicDashboard.runtime.panelIssuesByPanelId,
565
+ [runtimePanelId]: issue,
566
+ },
567
+ },
568
+ },
569
+ }));
570
+ },
571
+ clearPanelIssue(dashboardId, panelId) {
572
+ const runtimePanelId = getMosaicDashboardPanelId(dashboardId, panelId);
573
+ if (!get().mosaicDashboard.runtime.panelIssuesByPanelId[runtimePanelId]) {
574
+ return;
575
+ }
576
+ set((state) => {
577
+ const nextPanelIssuesByPanelId = {
578
+ ...state.mosaicDashboard.runtime.panelIssuesByPanelId,
579
+ };
580
+ delete nextPanelIssuesByPanelId[runtimePanelId];
581
+ return {
582
+ mosaicDashboard: {
583
+ ...state.mosaicDashboard,
584
+ runtime: {
585
+ ...state.mosaicDashboard.runtime,
586
+ panelIssuesByPanelId: nextPanelIssuesByPanelId,
587
+ },
588
+ },
589
+ };
590
+ });
591
+ },
583
592
  evictPanelRuntime(dashboardId, panelId) {
584
593
  const runtimePanelId = getMosaicDashboardPanelId(dashboardId, panelId);
585
594
  const existing = get().mosaicDashboard.runtime.retainedChartsByPanelId[runtimePanelId];
@@ -588,13 +597,18 @@ export function createMosaicDashboardSlice(props = {}) {
588
597
  const nextRetainedChartsByPanelId = {
589
598
  ...state.mosaicDashboard.runtime.retainedChartsByPanelId,
590
599
  };
600
+ const nextPanelIssuesByPanelId = {
601
+ ...state.mosaicDashboard.runtime.panelIssuesByPanelId,
602
+ };
591
603
  delete nextRetainedChartsByPanelId[runtimePanelId];
604
+ delete nextPanelIssuesByPanelId[runtimePanelId];
592
605
  return {
593
606
  mosaicDashboard: {
594
607
  ...state.mosaicDashboard,
595
608
  runtime: {
596
609
  ...state.mosaicDashboard.runtime,
597
610
  retainedChartsByPanelId: nextRetainedChartsByPanelId,
611
+ panelIssuesByPanelId: nextPanelIssuesByPanelId,
598
612
  },
599
613
  },
600
614
  };
@@ -603,6 +617,7 @@ export function createMosaicDashboardSlice(props = {}) {
603
617
  evictDashboardRuntime(dashboardId, options) {
604
618
  const runtimePrefix = `dashboard:${dashboardId}:panel:`;
605
619
  const existingEntries = Object.entries(get().mosaicDashboard.runtime.retainedChartsByPanelId).filter(([runtimePanelId]) => runtimePanelId.startsWith(runtimePrefix));
620
+ const existingIssueEntries = Object.keys(get().mosaicDashboard.runtime.panelIssuesByPanelId).filter((runtimePanelId) => runtimePanelId.startsWith(runtimePrefix));
606
621
  existingEntries.forEach(([, chart]) => {
607
622
  destroyDashboardRuntimeChart(chart);
608
623
  });
@@ -613,15 +628,22 @@ export function createMosaicDashboardSlice(props = {}) {
613
628
  const nextRetainedChartsByPanelId = {
614
629
  ...state.mosaicDashboard.runtime.retainedChartsByPanelId,
615
630
  };
631
+ const nextPanelIssuesByPanelId = {
632
+ ...state.mosaicDashboard.runtime.panelIssuesByPanelId,
633
+ };
616
634
  for (const [runtimePanelId] of existingEntries) {
617
635
  delete nextRetainedChartsByPanelId[runtimePanelId];
618
636
  }
637
+ for (const runtimePanelId of existingIssueEntries) {
638
+ delete nextPanelIssuesByPanelId[runtimePanelId];
639
+ }
619
640
  return {
620
641
  mosaicDashboard: {
621
642
  ...state.mosaicDashboard,
622
643
  runtime: {
623
644
  ...state.mosaicDashboard.runtime,
624
645
  retainedChartsByPanelId: nextRetainedChartsByPanelId,
646
+ panelIssuesByPanelId: nextPanelIssuesByPanelId,
625
647
  },
626
648
  },
627
649
  };
@@ -637,6 +659,7 @@ export function createMosaicDashboardSlice(props = {}) {
637
659
  runtime: {
638
660
  ...state.mosaicDashboard.runtime,
639
661
  retainedChartsByPanelId: {},
662
+ panelIssuesByPanelId: {},
640
663
  },
641
664
  },
642
665
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"MosaicDashboardSlice.js","sourceRoot":"","sources":["../../src/dashboard/MosaicDashboardSlice.ts"],"names":[],"mappings":"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","sourcesContent":["import {createId} from '@paralleldrive/cuid2';\nimport {DbSliceState} from '@sqlrooms/db';\nimport {type DataTable, type DuckDbSliceState} from '@sqlrooms/duckdb';\nimport {\n DEFAULT_GRID_COLS,\n getGridColsForBreakpoint,\n type LayoutSliceState,\n} from '@sqlrooms/layout';\nimport {\n type LayoutGridItem,\n type LayoutGridNode,\n type LayoutNode,\n type LayoutPanelNode,\n isLayoutGridNode,\n isLayoutNodeKey,\n isLayoutPanelNode,\n isLayoutSplitNode,\n LayoutNode as LayoutNodeSchema,\n} from '@sqlrooms/layout-config';\nimport {\n BaseRoomStoreState,\n createSlice,\n SliceFunctions,\n useBaseRoomStore,\n} from '@sqlrooms/room-store';\nimport {produce} from 'immer';\nimport type {ComponentType} from 'react';\nimport {z} from 'zod';\nimport type {ChartTypeDefinition} from '../chart-types/base-types';\nimport {type MosaicSliceState} from '../MosaicSlice';\nimport {\n destroyRetainedVgPlotChart,\n type RetainedVgPlotChart,\n} from '../VgPlotChart';\nimport {ChartConfig} from '../chart-types/chart-config';\n\n/**\n * Panel key used for function-form panel definitions registered by\n * `MosaicDashboardPanels`. Individual dashboard panels are represented as\n * `LayoutPanelNode` entries whose `panel` property carries\n * `{ key: MOSAIC_DASHBOARD_PANEL, meta: { dashboardId, panelId } }`.\n */\nexport const MOSAIC_DASHBOARD_PANEL = 'mosaic-dashboard-panel';\nexport const MOSAIC_DASHBOARD_CHART_PANEL_TYPE = 'vgplot';\nexport const MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE = 'profiler';\nexport const MOSAIC_DASHBOARD_TEXT_PANEL_TYPE = 'text';\n\nexport const MosaicDashboardLayoutType = z.enum(['dock', 'grid']);\nexport type MosaicDashboardLayoutType = z.infer<\n typeof MosaicDashboardLayoutType\n>;\n\nexport const MosaicDashboardPanelSource = z.object({\n tableName: z.string().optional(),\n sqlQuery: z.string().optional(),\n});\nexport type MosaicDashboardPanelSource = z.infer<\n typeof MosaicDashboardPanelSource\n>;\n\n// Profiler panel config\nexport const ProfilerPanelConfig = z.object({\n pageSize: z.number().optional(),\n});\nexport type ProfilerPanelConfig = z.infer<typeof ProfilerPanelConfig>;\n\n// Text panel config\nexport const TextPanelConfig = z.object({\n content: z.string().default(''),\n toolbarOpen: z.boolean().default(true),\n sourcePanelOpen: z.boolean().default(false),\n});\nexport type TextPanelConfig = z.infer<typeof TextPanelConfig>;\n\n// Panel configs discriminated by type\nexport const ChartPanelConfig = z.object({\n id: z.string(),\n type: z.literal(MOSAIC_DASHBOARD_CHART_PANEL_TYPE),\n title: z.string().default('Panel'),\n source: MosaicDashboardPanelSource.optional(),\n config: ChartConfig,\n});\nexport type ChartPanelConfig = z.infer<typeof ChartPanelConfig>;\n\nexport const ProfilerPanel = z.object({\n id: z.string(),\n type: z.literal(MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE),\n title: z.string().default('Panel'),\n source: MosaicDashboardPanelSource.optional(),\n config: ProfilerPanelConfig,\n});\nexport type ProfilerPanel = z.infer<typeof ProfilerPanel>;\n\nexport const TextPanel = z.object({\n id: z.string(),\n type: z.literal(MOSAIC_DASHBOARD_TEXT_PANEL_TYPE),\n title: z.string().default('Text'),\n source: MosaicDashboardPanelSource.optional(),\n config: TextPanelConfig,\n});\nexport type TextPanel = z.infer<typeof TextPanel>;\n\n// Legacy panel for backward compatibility\nexport const LegacyPanelConfig = z.object({\n id: z.string(),\n type: z.string(),\n title: z.string().default('Panel'),\n source: MosaicDashboardPanelSource.optional(),\n config: z.record(z.string(), z.unknown()).default({}),\n});\nexport type LegacyPanelConfig = z.infer<typeof LegacyPanelConfig>;\n\n// Discriminated union of all panel types\nexport const MosaicDashboardPanelConfig = z\n .discriminatedUnion('type', [ChartPanelConfig, ProfilerPanel, TextPanel])\n .or(LegacyPanelConfig);\nexport type MosaicDashboardPanelConfig = z.infer<\n typeof MosaicDashboardPanelConfig\n>;\n\nexport type MosaicDashboardPanelRendererProps<\n TPanel extends MosaicDashboardPanelConfig = MosaicDashboardPanelConfig,\n> = {\n dashboardId: string;\n dashboard: MosaicDashboardEntry;\n panel: TPanel;\n selectionName: string;\n resolvedSource?: MosaicDashboardPanelSource;\n};\n\nexport type ChartPanelRendererProps =\n MosaicDashboardPanelRendererProps<ChartPanelConfig>;\nexport type ProfilerPanelRendererProps =\n MosaicDashboardPanelRendererProps<ProfilerPanel>;\nexport type TextPanelRendererProps =\n MosaicDashboardPanelRendererProps<TextPanel>;\n\nexport type MosaicDashboardPanelRenderer<\n TPanel extends MosaicDashboardPanelConfig = MosaicDashboardPanelConfig,\n> = {\n component: ComponentType<MosaicDashboardPanelRendererProps<TPanel>>;\n headerActions?: ComponentType<MosaicDashboardPanelRendererProps<TPanel>>;\n icon?: ComponentType<{className?: string}>;\n};\n\n// Type-erased renderer for storage (avoids circular dependency issues)\nexport type AnyPanelRenderer = {\n component: ComponentType<any>;\n headerActions?: ComponentType<any>;\n icon?: ComponentType<{className?: string}>;\n};\n\n// Map of panel type string to panel config type\nexport type PanelTypeMap = {\n [MOSAIC_DASHBOARD_CHART_PANEL_TYPE]: ChartPanelConfig;\n [MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE]: ProfilerPanel;\n [MOSAIC_DASHBOARD_TEXT_PANEL_TYPE]: TextPanel;\n};\n\n// Panel renderers record - use type-erased renderers for runtime compatibility\nexport type PanelRenderersRecord = Record<string, AnyPanelRenderer>;\n\nexport type MosaicDashboardAddPanelActionContext = {\n dashboardId: string;\n dashboard: MosaicDashboardEntry | undefined;\n selectedTable: DataTable | undefined;\n tables: DataTable[];\n};\n\nexport type MosaicDashboardAddPanelAction = {\n type: string;\n label: string;\n icon?: ComponentType<{className?: string}>;\n isEnabled?: (context: MosaicDashboardAddPanelActionContext) => boolean;\n createPanel: (\n context: MosaicDashboardAddPanelActionContext,\n ) => MosaicDashboardPanelConfig | undefined;\n};\n\nexport function createMosaicDashboardPanelConfig(options: {\n type: string;\n title: string;\n source?: MosaicDashboardPanelSource;\n config?: Record<string, unknown>;\n}): MosaicDashboardPanelConfig {\n return {\n id: createId(),\n type: options.type,\n title: options.title,\n source: options.source,\n config: options.config ?? {},\n };\n}\n\nexport function createMosaicDashboardChartPanelConfig(\n title: string,\n config: ChartConfig,\n source?: MosaicDashboardPanelSource,\n): ChartPanelConfig {\n return {\n id: createId(),\n type: MOSAIC_DASHBOARD_CHART_PANEL_TYPE,\n title,\n source,\n config,\n };\n}\n\nexport function createMosaicDashboardProfilerPanelConfig(\n options: {\n title?: string;\n source?: MosaicDashboardPanelSource;\n pageSize?: number;\n } = {},\n): MosaicDashboardPanelConfig {\n return createMosaicDashboardPanelConfig({\n type: MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE,\n title: options.title ?? 'Profiler',\n source: options.source,\n config: {\n pageSize: options.pageSize ?? 10,\n },\n });\n}\n\nexport function createMosaicDashboardTextPanelConfig(\n options: {\n title?: string;\n content?: string;\n source?: MosaicDashboardPanelSource;\n } = {},\n): MosaicDashboardPanelConfig {\n return {\n id: createId(),\n type: MOSAIC_DASHBOARD_TEXT_PANEL_TYPE,\n title: options.title ?? 'Text',\n source: options.source,\n config: {\n content: options.content ?? '',\n },\n };\n}\n\nexport const MosaicDashboardEntry = z.object({\n id: z.string(),\n title: z.string().default('Dashboard'),\n layoutType: MosaicDashboardLayoutType.default('dock'),\n selectedTable: z.string().optional(),\n panels: z.array(MosaicDashboardPanelConfig).default([]),\n layout: LayoutNodeSchema.nullable().default(null),\n updatedAt: z.number().default(0),\n});\nexport type MosaicDashboardEntry = z.infer<typeof MosaicDashboardEntry>;\n\nexport const MosaicDashboardSliceConfig = z.object({\n dashboardsById: z.record(z.string(), MosaicDashboardEntry).default({}),\n});\nexport type MosaicDashboardSliceConfig = z.infer<\n typeof MosaicDashboardSliceConfig\n>;\n\nexport type MosaicDashboardSliceState = {\n mosaicDashboard: SliceFunctions & {\n config: MosaicDashboardSliceConfig;\n runtime: {\n /**\n * Live vgplot chart instances retained across transient dashboard panel\n * remounts, keyed by `getMosaicDashboardPanelId(dashboardId, panelId)`.\n *\n * This is runtime-only state: entries are never serialized with dashboard\n * config and must be evicted when their panel/dashboard lifecycle ends.\n */\n retainedChartsByPanelId: Record<string, RetainedVgPlotChart>;\n };\n chartTypes?: ChartTypeDefinition[];\n addPanelActions: MosaicDashboardAddPanelAction[];\n createDashboard: (\n title?: string,\n layoutType?: MosaicDashboardLayoutType,\n ) => string;\n ensureDashboard: (\n dashboardId: string,\n title?: string,\n layoutType?: MosaicDashboardLayoutType,\n ) => void;\n removeDashboard: (dashboardId: string) => void;\n getDashboard: (dashboardId: string) => MosaicDashboardEntry | undefined;\n setSelectedTable: (dashboardId: string, tableName: string) => void;\n panelRenderers: PanelRenderersRecord;\n registerPanelRenderer: (type: string, renderer: AnyPanelRenderer) => void;\n unregisterPanelRenderer: (type: string) => void;\n addPanel: (\n dashboardId: string,\n panel: MosaicDashboardPanelConfig,\n ) => MosaicDashboardPanelConfig['id'];\n updatePanel: (\n dashboardId: string,\n panelId: string,\n patch: Partial<Omit<MosaicDashboardPanelConfig, 'id'>>,\n ) => void;\n removePanel: (dashboardId: string, panelId: string) => void;\n getRetainedChart: (\n dashboardId: string,\n panelId: string,\n ) => RetainedVgPlotChart | undefined;\n setRetainedChart: (\n dashboardId: string,\n panelId: string,\n chart: RetainedVgPlotChart,\n ) => void;\n evictPanelRuntime: (dashboardId: string, panelId: string) => void;\n evictDashboardRuntime: (\n dashboardId: string,\n options?: {resetSelection?: boolean},\n ) => void;\n clearAllDashboardRuntime: () => void;\n setLayout: (dashboardId: string, layout: LayoutNode | null) => void;\n };\n};\n\nexport type MosaicDashboardStoreState = BaseRoomStoreState &\n DbSliceState &\n DuckDbSliceState &\n LayoutSliceState &\n MosaicSliceState &\n MosaicDashboardSliceState;\n\ntype DashboardPanelTypesByLayoutId = Record<string, string | undefined>;\n\n// ---------------------------------------------------------------------------\n// Layout tree helpers (operate on the new LayoutNode types)\n// ---------------------------------------------------------------------------\n\nfunction createDashboardPanelNode(\n dashboardId: string,\n panelId: string,\n): LayoutPanelNode {\n return {\n type: 'panel',\n id: getMosaicDashboardPanelId(dashboardId, panelId),\n minSize: 200,\n panel: {\n key: MOSAIC_DASHBOARD_PANEL,\n meta: {dashboardId, panelId},\n },\n };\n}\n\nfunction getDashboardPanelTypesByLayoutId(\n dashboardId: string,\n panels: MosaicDashboardPanelConfig[],\n): DashboardPanelTypesByLayoutId {\n return Object.fromEntries(\n panels.map((panel) => [\n getMosaicDashboardPanelId(dashboardId, panel.id),\n panel.type,\n ]),\n );\n}\n\nfunction appendPanelToLayout(\n layout: LayoutNode | null,\n panelNode: LayoutPanelNode,\n): LayoutNode {\n if (!layout) {\n return panelNode;\n }\n return {\n type: 'split',\n id: `split-${createId()}`,\n direction: 'row',\n children: [layout, panelNode],\n };\n}\n\nfunction createDashboardGridLayout(\n dashboardId: string,\n panelNode?: LayoutPanelNode,\n): LayoutGridNode {\n const children = panelNode ? [panelNode] : [];\n const layouts = createDashboardGridLayoutsForChildren(children);\n return {\n type: 'grid',\n id: getMosaicDashboardGridId(dashboardId),\n children,\n rowHeight: 150,\n margin: [12, 12],\n containerPadding: [0, 0],\n compactType: 'vertical',\n preventCollision: false,\n resizeHandles: ['e', 's', 'w', 'se', 'sw'],\n layouts,\n };\n}\n\nfunction getLayoutChildId(node: LayoutNode): string {\n return isLayoutNodeKey(node) ? node : node.id;\n}\n\nfunction createDashboardGridItem(\n panelId: string,\n layout: LayoutGridItem[],\n cols = 12,\n panelType?: string,\n): LayoutGridItem {\n const effectiveCols = Math.max(1, cols);\n const w =\n panelType === MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE\n ? effectiveCols\n : Math.max(1, Math.ceil(effectiveCols / 2));\n const h = 2;\n const bottom = layout.reduce(\n (max, item) => Math.max(max, item.y + item.h),\n 0,\n );\n\n for (let y = 0; y <= bottom; y += 1) {\n for (let x = 0; x <= effectiveCols - w; x += 1) {\n const overlaps = layout.some(\n (item) =>\n x < item.x + item.w &&\n x + w > item.x &&\n y < item.y + item.h &&\n y + h > item.y,\n );\n if (!overlaps) {\n return {\n i: panelId,\n x,\n y,\n w,\n h,\n };\n }\n }\n }\n\n return {\n i: panelId,\n x: 0,\n y: bottom,\n w,\n h,\n };\n}\n\nfunction createDashboardGridLayoutsForChildren(\n children: LayoutNode[],\n sourceLayouts?: LayoutGridNode['layouts'],\n cols?: LayoutGridNode['cols'],\n panelTypesByLayoutId: Record<string, string | undefined> = {},\n): LayoutGridNode['layouts'] {\n const childIds = new Set(children.map((child) => getLayoutChildId(child)));\n const sourceEntries = new Map<string, LayoutGridItem[]>(\n Object.keys(DEFAULT_GRID_COLS).map((breakpoint) => [breakpoint, []]),\n );\n for (const [breakpoint, breakpointLayout] of Object.entries(\n sourceLayouts ?? {},\n )) {\n sourceEntries.set(breakpoint, breakpointLayout);\n }\n\n return Object.fromEntries(\n [...sourceEntries.entries()].map(([breakpoint, breakpointLayout]) => {\n const nextLayout = breakpointLayout.filter((item) =>\n childIds.has(item.i),\n );\n const layoutItemIds = new Set(nextLayout.map((item) => item.i));\n\n for (const child of children) {\n const childId = getLayoutChildId(child);\n if (!layoutItemIds.has(childId)) {\n const item = createDashboardGridItem(\n childId,\n nextLayout,\n getGridColsForBreakpoint(cols, breakpoint),\n panelTypesByLayoutId[childId],\n );\n nextLayout.push(item);\n layoutItemIds.add(childId);\n }\n }\n\n return [breakpoint, nextLayout];\n }),\n );\n}\n\nfunction isExpectedDashboardPanelNode(\n node: LayoutNode,\n expectedPanelIds: Set<string>,\n): boolean {\n return expectedPanelIds.has(getLayoutChildId(node));\n}\n\nfunction collectDashboardPanelNodes(\n layout: LayoutNode | null,\n expectedPanelIds: Set<string>,\n nodes: LayoutNode[] = [],\n seen = new Set<string>(),\n): LayoutNode[] {\n if (!layout) return nodes;\n\n if (isLayoutNodeKey(layout) || isLayoutPanelNode(layout)) {\n if (isExpectedDashboardPanelNode(layout, expectedPanelIds)) {\n const id = getLayoutChildId(layout);\n if (!seen.has(id)) {\n nodes.push(layout);\n seen.add(id);\n }\n }\n return nodes;\n }\n\n if (isLayoutSplitNode(layout) || isLayoutGridNode(layout)) {\n for (const child of layout.children) {\n collectDashboardPanelNodes(child, expectedPanelIds, nodes, seen);\n }\n }\n\n return nodes;\n}\n\nfunction normalizeDashboardGridLayout(\n layout: LayoutNode | null,\n dashboardId: string,\n expectedPanelIds: Set<string>,\n panelTypesByLayoutId: DashboardPanelTypesByLayoutId = {},\n): LayoutGridNode {\n const collectedPanelIds = collectPanelIds(layout);\n const existingExpectedPanelIds = new Set(\n [...expectedPanelIds].filter((panelId) => collectedPanelIds.has(panelId)),\n );\n const children = collectDashboardPanelNodes(layout, existingExpectedPanelIds);\n const layouts = createDashboardGridLayoutsForChildren(\n children,\n isLayoutGridNode(layout) ? layout.layouts : undefined,\n isLayoutGridNode(layout) ? layout.cols : undefined,\n panelTypesByLayoutId,\n );\n\n if (isLayoutGridNode(layout)) {\n return {\n ...layout,\n children,\n layouts,\n };\n }\n\n return {\n ...createDashboardGridLayout(dashboardId),\n children,\n layouts,\n };\n}\n\nfunction appendPanelToGridLayout(\n layout: LayoutNode | null,\n dashboardId: string,\n panelNode: LayoutPanelNode,\n panelType?: string,\n panelTypesByLayoutId: DashboardPanelTypesByLayoutId = {},\n): LayoutGridNode {\n const nextPanelTypesByLayoutId = {\n ...panelTypesByLayoutId,\n [panelNode.id]: panelType ?? panelTypesByLayoutId[panelNode.id],\n };\n\n if (!isLayoutGridNode(layout)) {\n const dashboardPanelPrefix = `dashboard:${dashboardId}:panel:`;\n const expectedPanelIds = new Set(\n [...collectPanelIds(layout)].filter((panelId) =>\n panelId.startsWith(dashboardPanelPrefix),\n ),\n );\n expectedPanelIds.add(panelNode.id);\n const normalizedLayout = normalizeDashboardGridLayout(\n layout,\n dashboardId,\n expectedPanelIds,\n nextPanelTypesByLayoutId,\n );\n return appendPanelToGridLayout(\n normalizedLayout,\n dashboardId,\n panelNode,\n panelType,\n nextPanelTypesByLayoutId,\n );\n }\n\n const hasChild = layout.children.some((child) => {\n if (isLayoutNodeKey(child)) return child === panelNode.id;\n return child.id === panelNode.id;\n });\n const children = hasChild ? layout.children : [...layout.children, panelNode];\n const layouts = Object.fromEntries(\n Object.entries(\n createDashboardGridLayoutsForChildren(\n children,\n layout.layouts,\n layout.cols,\n nextPanelTypesByLayoutId,\n ) ?? {},\n ).map(([breakpoint, breakpointLayout]) => {\n if (breakpointLayout.some((item) => item.i === panelNode.id)) {\n return [breakpoint, breakpointLayout];\n }\n return [\n breakpoint,\n [\n ...breakpointLayout,\n createDashboardGridItem(\n panelNode.id,\n breakpointLayout,\n getGridColsForBreakpoint(layout.cols, breakpoint),\n nextPanelTypesByLayoutId[panelNode.id],\n ),\n ],\n ];\n }),\n );\n\n return {\n ...layout,\n children,\n layouts,\n };\n}\n\nfunction removePanelFromLayout(\n layout: LayoutNode | null,\n panelId: string,\n): LayoutNode | null {\n if (!layout) return null;\n\n if (isLayoutNodeKey(layout)) {\n return layout === panelId ? null : layout;\n }\n\n if (isLayoutPanelNode(layout)) {\n return layout.id === panelId ? null : layout;\n }\n\n if (isLayoutSplitNode(layout)) {\n const nextChildren = layout.children\n .map((child) => removePanelFromLayout(child, panelId))\n .filter((child): child is LayoutNode => child !== null);\n\n if (nextChildren.length === 0) return null;\n if (nextChildren.length === 1) return nextChildren[0] ?? null;\n\n return {...layout, children: nextChildren};\n }\n\n if (isLayoutGridNode(layout)) {\n const nextChildren = layout.children.filter((child) => {\n if (isLayoutNodeKey(child)) return child !== panelId;\n return child.id !== panelId;\n });\n const nextLayouts = layout.layouts\n ? Object.fromEntries(\n Object.entries(layout.layouts).map(\n ([breakpoint, breakpointLayout]) => [\n breakpoint,\n breakpointLayout.filter((item) => item.i !== panelId),\n ],\n ),\n )\n : layout.layouts;\n\n if (nextChildren.length === 0) return null;\n return {...layout, children: nextChildren, layouts: nextLayouts};\n }\n\n return layout;\n}\n\nfunction collectPanelIds(\n layout: LayoutNode | null,\n panelIds = new Set<string>(),\n): Set<string> {\n if (!layout) return panelIds;\n if (isLayoutNodeKey(layout)) {\n panelIds.add(layout);\n return panelIds;\n }\n if (isLayoutPanelNode(layout)) {\n panelIds.add(layout.id);\n return panelIds;\n }\n if (isLayoutSplitNode(layout)) {\n for (const child of layout.children) {\n collectPanelIds(child, panelIds);\n }\n }\n if (isLayoutGridNode(layout)) {\n for (const child of layout.children) {\n collectPanelIds(child, panelIds);\n }\n }\n return panelIds;\n}\n\nfunction ensureLayoutContainsDashboardPanels(\n layout: LayoutNode | null,\n dashboardId: string,\n panelIds: string[],\n layoutType: MosaicDashboardLayoutType = 'dock',\n panelTypesByLayoutId: DashboardPanelTypesByLayoutId = {},\n): LayoutNode | null {\n let nextLayout = layout;\n\n if (layoutType === 'grid') {\n const expectedPanelIds = new Set(\n panelIds.map((panelId) =>\n getMosaicDashboardPanelId(dashboardId, panelId),\n ),\n );\n nextLayout = normalizeDashboardGridLayout(\n nextLayout,\n dashboardId,\n expectedPanelIds,\n panelTypesByLayoutId,\n );\n }\n\n const existing = collectPanelIds(nextLayout);\n for (const panelId of panelIds) {\n const layoutPanelId = getMosaicDashboardPanelId(dashboardId, panelId);\n if (!existing.has(layoutPanelId)) {\n const panelNode = createDashboardPanelNode(dashboardId, panelId);\n nextLayout =\n layoutType === 'grid'\n ? appendPanelToGridLayout(\n nextLayout,\n dashboardId,\n panelNode,\n panelTypesByLayoutId[layoutPanelId],\n panelTypesByLayoutId,\n )\n : appendPanelToLayout(nextLayout, panelNode);\n existing.add(layoutPanelId);\n }\n }\n\n return nextLayout;\n}\n\nexport function isChartPanelConfig(\n panel: MosaicDashboardPanelConfig,\n): panel is ChartPanelConfig {\n return panel.type === MOSAIC_DASHBOARD_CHART_PANEL_TYPE;\n}\n\nexport function getMosaicDashboardPanelId(\n dashboardId: string,\n panelId: string,\n): string {\n return `dashboard:${dashboardId}:panel:${panelId}`;\n}\n\nexport function getMosaicDashboardDockId(dashboardId: string): string {\n return `dashboard:${dashboardId}:dock`;\n}\n\nexport function getMosaicDashboardGridId(dashboardId: string): string {\n return `dashboard:${dashboardId}:grid`;\n}\n\nexport function getMosaicDashboardSelectionName(dashboardId: string): string {\n return `dashboard:${dashboardId}:brush`;\n}\n\nfunction destroyDashboardRuntimeChart(\n chart: RetainedVgPlotChart | undefined,\n): void {\n if (!chart) return;\n destroyRetainedVgPlotChart(chart);\n}\n\nfunction evictDashboardSelection(\n state: MosaicDashboardStoreState,\n dashboardId: string,\n): void {\n state.mosaic.selections[\n getMosaicDashboardSelectionName(dashboardId)\n ]?.reset();\n}\n\nfunction shouldEvictPanelRuntimeForPatch(\n panel: MosaicDashboardPanelConfig,\n patch: Partial<Omit<MosaicDashboardPanelConfig, 'id'>>,\n): boolean {\n if (patch.type && patch.type !== panel.type) {\n return true;\n }\n\n if (panel.type === MOSAIC_DASHBOARD_CHART_PANEL_TYPE) {\n return Boolean('config' in patch && patch.config);\n }\n\n return false;\n}\n\n/**\n * Type guard to check if a panel config has a source property.\n * All standard panel types (Chart, Profiler, Text) have optional sources.\n */\nexport function panelHasSource(\n panel: MosaicDashboardPanelConfig,\n): panel is ChartPanelConfig | ProfilerPanel | TextPanel {\n return (\n panel.type === MOSAIC_DASHBOARD_CHART_PANEL_TYPE ||\n panel.type === MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE ||\n panel.type === MOSAIC_DASHBOARD_TEXT_PANEL_TYPE\n );\n}\n\nexport function resolveMosaicDashboardPanelSource(\n dashboard: MosaicDashboardEntry,\n panel: MosaicDashboardPanelConfig,\n): MosaicDashboardPanelSource | undefined {\n if (!panelHasSource(panel)) {\n return undefined;\n }\n if (panel.source?.sqlQuery || panel.source?.tableName) {\n return panel.source;\n }\n // Text panels typically don't need a table source\n if (panel.type === MOSAIC_DASHBOARD_TEXT_PANEL_TYPE) {\n return undefined;\n }\n return dashboard.selectedTable\n ? {tableName: dashboard.selectedTable}\n : undefined;\n}\n\nexport function createDefaultMosaicDashboardConfig(\n props?: Partial<MosaicDashboardSliceConfig>,\n): MosaicDashboardSliceConfig {\n return MosaicDashboardSliceConfig.parse({\n dashboardsById: {},\n ...props,\n });\n}\n\ntype CreateMosaicDashboardSliceProps = {\n config?: Partial<MosaicDashboardSliceConfig>;\n panelRenderers?: Record<string, MosaicDashboardPanelRenderer>;\n addPanelActions?: MosaicDashboardAddPanelAction[];\n chartTypes?: ChartTypeDefinition[];\n};\nexport type {CreateMosaicDashboardSliceProps};\n\nexport function createMosaicDashboardSlice(\n props: CreateMosaicDashboardSliceProps = {},\n) {\n return createSlice<MosaicDashboardSliceState, MosaicDashboardStoreState>(\n (set, get) => ({\n mosaicDashboard: {\n config: createDefaultMosaicDashboardConfig(props.config),\n runtime: {\n retainedChartsByPanelId: {},\n },\n chartTypes: props.chartTypes,\n addPanelActions: props.addPanelActions ?? [],\n panelRenderers: props.panelRenderers ?? {},\n\n createDashboard(title, layoutType) {\n const dashboardId = createId();\n get().mosaicDashboard.ensureDashboard(dashboardId, title, layoutType);\n return dashboardId;\n },\n\n ensureDashboard(dashboardId, title, layoutType) {\n set((state) =>\n produce(state, (draft) => {\n const existing =\n draft.mosaicDashboard.config.dashboardsById[dashboardId];\n if (existing) {\n if (title && existing.title !== title) {\n existing.title = title;\n existing.updatedAt = Date.now();\n }\n return;\n }\n draft.mosaicDashboard.config.dashboardsById[dashboardId] = {\n id: dashboardId,\n title: title ?? 'Dashboard',\n layoutType: layoutType ?? 'dock',\n selectedTable: undefined,\n panels: [],\n layout:\n layoutType === 'grid'\n ? createDashboardGridLayout(dashboardId)\n : null,\n updatedAt: Date.now(),\n };\n }),\n );\n },\n\n removeDashboard(dashboardId) {\n get().mosaicDashboard.evictDashboardRuntime(dashboardId, {\n resetSelection: true,\n });\n set((state) =>\n produce(state, (draft) => {\n delete draft.mosaicDashboard.config.dashboardsById[dashboardId];\n }),\n );\n },\n\n getDashboard(dashboardId) {\n return get().mosaicDashboard.config.dashboardsById[dashboardId];\n },\n\n setConfig(config: MosaicDashboardSliceConfig) {\n set((state) =>\n produce(state, (draft) => {\n draft.mosaicDashboard.config = config;\n }),\n );\n },\n\n setSelectedTable(dashboardId, tableName) {\n get().mosaicDashboard.ensureDashboard(dashboardId);\n set((state) =>\n produce(state, (draft) => {\n const dashboard =\n draft.mosaicDashboard.config.dashboardsById[dashboardId];\n if (!dashboard) return;\n dashboard.selectedTable = tableName;\n dashboard.updatedAt = Date.now();\n }),\n );\n },\n\n registerPanelRenderer(type, renderer) {\n set((state) =>\n produce(state, (draft) => {\n draft.mosaicDashboard.panelRenderers[type] = renderer;\n }),\n );\n },\n\n unregisterPanelRenderer(type) {\n set((state) =>\n produce(state, (draft) => {\n delete draft.mosaicDashboard.panelRenderers[type];\n }),\n );\n },\n\n addPanel(dashboardId, panel) {\n get().mosaicDashboard.ensureDashboard(dashboardId);\n set((state) =>\n produce(state, (draft) => {\n const dashboard =\n draft.mosaicDashboard.config.dashboardsById[dashboardId];\n if (!dashboard) return;\n\n dashboard.panels.push(panel);\n const panelNode = createDashboardPanelNode(dashboardId, panel.id);\n const panelTypesByLayoutId = getDashboardPanelTypesByLayoutId(\n dashboardId,\n dashboard.panels,\n );\n dashboard.layout =\n dashboard.layoutType === 'grid'\n ? appendPanelToGridLayout(\n dashboard.layout,\n dashboardId,\n panelNode,\n panel.type,\n panelTypesByLayoutId,\n )\n : appendPanelToLayout(dashboard.layout, panelNode);\n dashboard.updatedAt = Date.now();\n }),\n );\n return panel.id;\n },\n\n updatePanel(dashboardId, panelId, patch) {\n const existing = get().mosaicDashboard.config.dashboardsById[\n dashboardId\n ]?.panels.find((candidate) => candidate.id === panelId);\n const shouldEvict = existing\n ? shouldEvictPanelRuntimeForPatch(existing, patch)\n : false;\n set((state) =>\n produce(state, (draft) => {\n const dashboard =\n draft.mosaicDashboard.config.dashboardsById[dashboardId];\n if (!dashboard) return;\n\n const panel = dashboard.panels.find(\n (candidate) => candidate.id === panelId,\n );\n if (!panel) return;\n\n Object.assign(panel, patch);\n dashboard.updatedAt = Date.now();\n }),\n );\n if (shouldEvict) {\n get().mosaicDashboard.evictPanelRuntime(dashboardId, panelId);\n }\n },\n\n removePanel(dashboardId, panelId) {\n get().mosaicDashboard.evictPanelRuntime(dashboardId, panelId);\n set((state) =>\n produce(state, (draft) => {\n const dashboard =\n draft.mosaicDashboard.config.dashboardsById[dashboardId];\n if (!dashboard) return;\n\n dashboard.panels = dashboard.panels.filter(\n (panel) => panel.id !== panelId,\n );\n dashboard.layout = removePanelFromLayout(\n dashboard.layout,\n getMosaicDashboardPanelId(dashboardId, panelId),\n );\n dashboard.updatedAt = Date.now();\n }),\n );\n },\n\n getRetainedChart(dashboardId, panelId) {\n return get().mosaicDashboard.runtime.retainedChartsByPanelId[\n getMosaicDashboardPanelId(dashboardId, panelId)\n ];\n },\n\n setRetainedChart(dashboardId, panelId, chart) {\n const runtimePanelId = getMosaicDashboardPanelId(\n dashboardId,\n panelId,\n );\n const previous =\n get().mosaicDashboard.runtime.retainedChartsByPanelId[\n runtimePanelId\n ];\n if (previous && previous !== chart) {\n destroyDashboardRuntimeChart(previous);\n }\n set((state) => ({\n mosaicDashboard: {\n ...state.mosaicDashboard,\n runtime: {\n ...state.mosaicDashboard.runtime,\n retainedChartsByPanelId: {\n ...state.mosaicDashboard.runtime.retainedChartsByPanelId,\n [runtimePanelId]: chart,\n },\n },\n },\n }));\n },\n\n evictPanelRuntime(dashboardId, panelId) {\n const runtimePanelId = getMosaicDashboardPanelId(\n dashboardId,\n panelId,\n );\n const existing =\n get().mosaicDashboard.runtime.retainedChartsByPanelId[\n runtimePanelId\n ];\n destroyDashboardRuntimeChart(existing);\n set((state) => {\n const nextRetainedChartsByPanelId = {\n ...state.mosaicDashboard.runtime.retainedChartsByPanelId,\n };\n delete nextRetainedChartsByPanelId[runtimePanelId];\n return {\n mosaicDashboard: {\n ...state.mosaicDashboard,\n runtime: {\n ...state.mosaicDashboard.runtime,\n retainedChartsByPanelId: nextRetainedChartsByPanelId,\n },\n },\n };\n });\n },\n\n evictDashboardRuntime(dashboardId, options) {\n const runtimePrefix = `dashboard:${dashboardId}:panel:`;\n const existingEntries = Object.entries(\n get().mosaicDashboard.runtime.retainedChartsByPanelId,\n ).filter(([runtimePanelId]) =>\n runtimePanelId.startsWith(runtimePrefix),\n );\n\n existingEntries.forEach(([, chart]) => {\n destroyDashboardRuntimeChart(chart);\n });\n\n if (options?.resetSelection) {\n evictDashboardSelection(get(), dashboardId);\n }\n\n set((state) => {\n const nextRetainedChartsByPanelId = {\n ...state.mosaicDashboard.runtime.retainedChartsByPanelId,\n };\n for (const [runtimePanelId] of existingEntries) {\n delete nextRetainedChartsByPanelId[runtimePanelId];\n }\n return {\n mosaicDashboard: {\n ...state.mosaicDashboard,\n runtime: {\n ...state.mosaicDashboard.runtime,\n retainedChartsByPanelId: nextRetainedChartsByPanelId,\n },\n },\n };\n });\n },\n\n clearAllDashboardRuntime() {\n Object.values(\n get().mosaicDashboard.runtime.retainedChartsByPanelId,\n ).forEach((chart) => {\n destroyDashboardRuntimeChart(chart);\n });\n set((state) => ({\n mosaicDashboard: {\n ...state.mosaicDashboard,\n runtime: {\n ...state.mosaicDashboard.runtime,\n retainedChartsByPanelId: {},\n },\n },\n }));\n },\n\n setLayout(dashboardId, layout) {\n get().mosaicDashboard.ensureDashboard(dashboardId);\n set((state) =>\n produce(state, (draft) => {\n const dashboard =\n draft.mosaicDashboard.config.dashboardsById[dashboardId];\n if (!dashboard) return;\n\n const panelIds = dashboard.panels.map((panel) => panel.id);\n const panelTypesByLayoutId = getDashboardPanelTypesByLayoutId(\n dashboardId,\n dashboard.panels,\n );\n dashboard.layout = ensureLayoutContainsDashboardPanels(\n layout,\n dashboardId,\n panelIds,\n dashboard.layoutType,\n panelTypesByLayoutId,\n );\n dashboard.updatedAt = Date.now();\n }),\n );\n },\n },\n }),\n );\n}\n\nexport function useStoreWithMosaicDashboard<T>(\n selector: (state: MosaicDashboardStoreState) => T,\n): T {\n return useBaseRoomStore<BaseRoomStoreState, T>((state) =>\n selector(state as unknown as MosaicDashboardStoreState),\n );\n}\n"]}
1
+ {"version":3,"file":"MosaicDashboardSlice.js","sourceRoot":"","sources":["../../src/dashboard/MosaicDashboardSlice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAG9C,OAAO,EACL,iBAAiB,EACjB,wBAAwB,GAEzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAGL,UAAU,EAEV,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEL,WAAW,EAEX,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAC,OAAO,EAAC,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,WAAW,EAAC,MAAM,6BAA6B,CAAC;AAExD,OAAO,EACL,0BAA0B,GAE3B,MAAM,gBAAgB,CAAC;AAIxB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AAC/D,MAAM,CAAC,MAAM,iCAAiC,GAAG,QAAQ,CAAC;AAC1D,MAAM,CAAC,MAAM,oCAAoC,GAAG,UAAU,CAAC;AAC/D,MAAM,CAAC,MAAM,gCAAgC,GAAG,MAAM,CAAC;AAEvD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAKlE,wBAAwB;AACxB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC;AAGH,oBAAoB;AACpB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/B,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACvC,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CAC5C,CAAC,CAAC;AAGH,sCAAsC;AACtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,iCAAiC,CAAC;IAClD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IAClC,MAAM,EAAE,WAAW;CACpB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,oCAAoC,CAAC;IACrD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IAClC,MAAM,EAAE,mBAAmB;CAC5B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,gCAAgC,CAAC;IACjD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IACjC,MAAM,EAAE,eAAe;CACxB,CAAC,CAAC;AAGH,0CAA0C;AAC1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IAClC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACtD,CAAC,CAAC;AAGH,yCAAyC;AACzC,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC;KACxC,kBAAkB,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;KACxE,EAAE,CAAC,iBAAiB,CAAC,CAAC;AA8CzB,MAAM,UAAU,qCAAqC,CACnD,KAAa,EACb,MAAmB;IAEnB,OAAO;QACL,EAAE,EAAE,QAAQ,EAAE;QACd,IAAI,EAAE,iCAAiC;QACvC,KAAK;QACL,MAAM;KACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wCAAwC,CACtD,UAGI,EAAE;IAEN,OAAO;QACL,EAAE,EAAE,QAAQ,EAAE;QACd,IAAI,EAAE,oCAAoC;QAC1C,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,UAAU;QAClC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;KAC7B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oCAAoC,CAClD,UAGI,EAAE;IAEN,OAAO;QACL,EAAE,EAAE,QAAQ,EAAE;QACd,IAAI,EAAE,gCAAgC;QACtC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM;QAC9B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI;YACxB,WAAW,EAAE,KAAK;YAClB,eAAe,EAAE,KAAK;YACtB,OAAO,EAAE,EAAE;SACZ;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC;IACtC,UAAU,EAAE,yBAAyB,CAAC,OAAO,CAAC,MAAM,CAAC;IACrD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACxC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACvD,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;CACjC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACvE,CAAC,CAAC;AAyFH,8EAA8E;AAC9E,4DAA4D;AAC5D,8EAA8E;AAE9E,SAAS,wBAAwB,CAC/B,WAAmB,EACnB,OAAe;IAEf,OAAO;QACL,IAAI,EAAE,OAAO;QACb,EAAE,EAAE,yBAAyB,CAAC,WAAW,EAAE,OAAO,CAAC;QACnD,OAAO,EAAE,GAAG;QACZ,KAAK,EAAE;YACL,GAAG,EAAE,sBAAsB;YAC3B,IAAI,EAAE,EAAC,WAAW,EAAE,OAAO,EAAC;SAC7B;KACF,CAAC;AACJ,CAAC;AAED,SAAS,gCAAgC,CACvC,WAAmB,EACnB,MAAoC;IAEpC,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QACpB,yBAAyB,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI;KACX,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAAyB,EACzB,SAA0B;IAE1B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,EAAE,EAAE,SAAS,QAAQ,EAAE,EAAE;QACzB,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAChC,WAAmB,EACnB,SAA2B;IAE3B,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAG,qCAAqC,CAAC,QAAQ,CAAC,CAAC;IAChE,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,EAAE,EAAE,wBAAwB,CAAC,WAAW,CAAC;QACzC,QAAQ;QACR,SAAS,EAAE,GAAG;QACd,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;QAChB,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACxB,WAAW,EAAE,UAAU;QACvB,gBAAgB,EAAE,KAAK;QACvB,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;QAC1C,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAgB;IACxC,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,uBAAuB,CAC9B,OAAe,EACf,MAAwB,EACxB,IAAI,GAAG,EAAE,EACT,SAAkB;IAElB,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACxC,MAAM,CAAC,GACL,SAAS,KAAK,oCAAoC;QAClD,SAAS,KAAK,gCAAgC;QAC5C,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,CAAC,CAAC;IACZ,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAC1B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAC7C,CAAC,CACF,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAC1B,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACnB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;gBACd,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACnB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CACjB,CAAC;YACF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO;oBACL,CAAC,EAAE,OAAO;oBACV,CAAC;oBACD,CAAC;oBACD,CAAC;oBACD,CAAC;iBACF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,CAAC,EAAE,OAAO;QACV,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,MAAM;QACT,CAAC;QACD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,qCAAqC,CAC5C,QAAsB,EACtB,aAAyC,EACzC,IAA6B,EAC7B,uBAA2D,EAAE;IAE7D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,aAAa,GAAG,IAAI,GAAG,CAC3B,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CACrE,CAAC;IACF,KAAK,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,IAAI,MAAM,CAAC,OAAO,CACzD,aAAa,IAAI,EAAE,CACpB,EAAE,CAAC;QACF,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,MAAM,CAAC,WAAW,CACvB,CAAC,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,EAAE;QAClE,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAClD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CACrB,CAAC;QACF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhE,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAG,uBAAuB,CAClC,OAAO,EACP,UAAU,EACV,wBAAwB,CAAC,IAAI,EAAE,UAAU,CAAC,EAC1C,oBAAoB,CAAC,OAAO,CAAC,CAC9B,CAAC;gBACF,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAClC,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B,CACnC,IAAgB,EAChB,gBAA6B;IAE7B,OAAO,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,0BAA0B,CACjC,MAAyB,EACzB,gBAA6B,EAC7B,QAAsB,EAAE,EACxB,OAAO,IAAI,GAAG,EAAU;IAExB,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE1B,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,IAAI,4BAA4B,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,CAAC;YAC3D,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,iBAAiB,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpC,0BAA0B,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,4BAA4B,CACnC,MAAyB,EACzB,WAAmB,EACnB,gBAA6B,EAC7B,uBAAsD,EAAE;IAExD,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,wBAAwB,GAAG,IAAI,GAAG,CACtC,CAAC,GAAG,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAC1E,CAAC;IACF,MAAM,QAAQ,GAAG,0BAA0B,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,qCAAqC,CACnD,QAAQ,EACR,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EACrD,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAClD,oBAAoB,CACrB,CAAC;IAEF,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,GAAG,MAAM;YACT,QAAQ;YACR,OAAO;SACR,CAAC;IACJ,CAAC;IAED,OAAO;QACL,GAAG,yBAAyB,CAAC,WAAW,CAAC;QACzC,QAAQ;QACR,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,MAAyB,EACzB,WAAmB,EACnB,SAA0B,EAC1B,SAAkB,EAClB,uBAAsD,EAAE;IAExD,MAAM,wBAAwB,GAAG;QAC/B,GAAG,oBAAoB;QACvB,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS,IAAI,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC;KAChE,CAAC;IAEF,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,MAAM,oBAAoB,GAAG,aAAa,WAAW,SAAS,CAAC;QAC/D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAC9C,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,CACzC,CACF,CAAC;QACF,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,gBAAgB,GAAG,4BAA4B,CACnD,MAAM,EACN,WAAW,EACX,gBAAgB,EAChB,wBAAwB,CACzB,CAAC;QACF,OAAO,uBAAuB,CAC5B,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,SAAS,EACT,wBAAwB,CACzB,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9C,IAAI,eAAe,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAChC,MAAM,CAAC,OAAO,CACZ,qCAAqC,CACnC,QAAQ,EACR,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,IAAI,EACX,wBAAwB,CACzB,IAAI,EAAE,CACR,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,EAAE;QACvC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7D,OAAO,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QACxC,CAAC;QACD,OAAO;YACL,UAAU;YACV;gBACE,GAAG,gBAAgB;gBACnB,uBAAuB,CACrB,SAAS,CAAC,EAAE,EACZ,gBAAgB,EAChB,wBAAwB,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,EACjD,wBAAwB,CAAC,SAAS,CAAC,EAAE,CAAC,CACvC;aACF;SACF,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IAEF,OAAO;QACL,GAAG,MAAM;QACT,QAAQ;QACR,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAAyB,EACzB,OAAe;IAEf,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5C,CAAC;IAED,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/C,CAAC;IAED,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ;aACjC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;aACrD,MAAM,CAAC,CAAC,KAAK,EAAuB,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;QAE1D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3C,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAE9D,OAAO,EAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAC,CAAC;IAC7C,CAAC;IAED,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YACpD,IAAI,eAAe,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,KAAK,OAAO,CAAC;YACrD,OAAO,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO;YAChC,CAAC,CAAC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAChC,CAAC,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,EAAE,CAAC;gBAClC,UAAU;gBACV,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,OAAO,CAAC;aACtD,CACF,CACF;YACH,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QAEnB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3C,OAAO,EAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAC,CAAC;IACnE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CACtB,MAAyB,EACzB,WAAW,IAAI,GAAG,EAAU;IAE5B,IAAI,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IAC7B,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IACD,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,mCAAmC,CAC1C,MAAyB,EACzB,WAAmB,EACnB,QAAkB,EAClB,aAAwC,MAAM,EAC9C,uBAAsD,EAAE;IAExD,IAAI,UAAU,GAAG,MAAM,CAAC;IAExB,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAC1B,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACvB,yBAAyB,CAAC,WAAW,EAAE,OAAO,CAAC,CAChD,CACF,CAAC;QACF,UAAU,GAAG,4BAA4B,CACvC,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,oBAAoB,CACrB,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAC7C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,aAAa,GAAG,yBAAyB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACtE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,wBAAwB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACjE,UAAU;gBACR,UAAU,KAAK,MAAM;oBACnB,CAAC,CAAC,uBAAuB,CACrB,UAAU,EACV,WAAW,EACX,SAAS,EACT,oBAAoB,CAAC,aAAa,CAAC,EACnC,oBAAoB,CACrB;oBACH,CAAC,CAAC,mBAAmB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACjD,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAAiC;IAEjC,OAAO,KAAK,CAAC,IAAI,KAAK,iCAAiC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,WAAmB,EACnB,OAAe;IAEf,OAAO,aAAa,WAAW,UAAU,OAAO,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,WAAmB;IAC1D,OAAO,aAAa,WAAW,OAAO,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,WAAmB;IAC1D,OAAO,aAAa,WAAW,OAAO,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,WAAmB;IACjE,OAAO,aAAa,WAAW,QAAQ,CAAC;AAC1C,CAAC;AAED,SAAS,4BAA4B,CACnC,KAAsC;IAEtC,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,0BAA0B,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAAgC,EAChC,WAAmB;IAEnB,KAAK,CAAC,MAAM,CAAC,UAAU,CACrB,+BAA+B,CAAC,WAAW,CAAC,CAC7C,EAAE,KAAK,EAAE,CAAC;AACb,CAAC;AAED,SAAS,+BAA+B,CACtC,KAAiC,EACjC,KAAsD;IAEtD,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,iCAAiC,EAAE,CAAC;QACrD,OAAO,OAAO,CAAC,QAAQ,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,KAA2C;IAE3C,OAAO,0BAA0B,CAAC,KAAK,CAAC;QACtC,cAAc,EAAE,EAAE;QAClB,GAAG,KAAK;KACT,CAAC,CAAC;AACL,CAAC;AAUD,MAAM,UAAU,0BAA0B,CACxC,QAAyC,EAAE;IAE3C,OAAO,WAAW,CAChB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACb,eAAe,EAAE;YACf,MAAM,EAAE,kCAAkC,CAAC,KAAK,CAAC,MAAM,CAAC;YACxD,OAAO,EAAE;gBACP,uBAAuB,EAAE,EAAE;gBAC3B,oBAAoB,EAAE,EAAE;aACzB;YACD,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,EAAE;YAC5C,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,EAAE;YAE1C,eAAe,CAAC,KAAK,EAAE,UAAU;gBAC/B,MAAM,WAAW,GAAG,QAAQ,EAAE,CAAC;gBAC/B,GAAG,EAAE,CAAC,eAAe,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;gBACtE,OAAO,WAAW,CAAC;YACrB,CAAC;YAED,eAAe,CAAC,WAAW,EAAE,KAAK,EAAE,UAAU;gBAC5C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACvB,MAAM,QAAQ,GACZ,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;oBAC3D,IAAI,QAAQ,EAAE,CAAC;wBACb,IAAI,KAAK,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;4BACtC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;4BACvB,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBAClC,CAAC;wBACD,OAAO;oBACT,CAAC;oBACD,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG;wBACzD,EAAE,EAAE,WAAW;wBACf,KAAK,EAAE,KAAK,IAAI,WAAW;wBAC3B,UAAU,EAAE,UAAU,IAAI,MAAM;wBAChC,aAAa,EAAE,SAAS;wBACxB,MAAM,EAAE,EAAE;wBACV,MAAM,EACJ,UAAU,KAAK,MAAM;4BACnB,CAAC,CAAC,yBAAyB,CAAC,WAAW,CAAC;4BACxC,CAAC,CAAC,IAAI;wBACV,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;qBACtB,CAAC;gBACJ,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;YAED,eAAe,CAAC,WAAW;gBACzB,GAAG,EAAE,CAAC,eAAe,CAAC,qBAAqB,CAAC,WAAW,EAAE;oBACvD,cAAc,EAAE,IAAI;iBACrB,CAAC,CAAC;gBACH,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACvB,OAAO,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;gBAClE,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;YAED,YAAY,CAAC,WAAW;gBACtB,OAAO,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YAClE,CAAC;YAED,SAAS,CAAC,MAAkC;gBAC1C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACvB,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,MAAM,CAAC;gBACxC,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;YAED,gBAAgB,CAAC,WAAW,EAAE,SAAS;gBACrC,GAAG,EAAE,CAAC,eAAe,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;gBACnD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACvB,MAAM,SAAS,GACb,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;oBAC3D,IAAI,CAAC,SAAS;wBAAE,OAAO;oBACvB,SAAS,CAAC,aAAa,GAAG,SAAS,CAAC;oBACpC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACnC,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;YAED,oBAAoB,CAAC,WAAW,EAAE,SAAS;gBACzC,GAAG,EAAE,CAAC,eAAe,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;gBACnD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACvB,MAAM,SAAS,GACb,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;oBAC3D,IAAI,CAAC,SAAS;wBAAE,OAAO;oBACvB,SAAS,CAAC,iBAAiB,GAAG,SAAS,CAAC;oBACxC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACnC,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;YAED,qBAAqB,CAAC,IAAI,EAAE,QAAQ;gBAClC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACvB,KAAK,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;gBACxD,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;YAED,uBAAuB,CAAC,IAAI;gBAC1B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACvB,OAAO,KAAK,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACpD,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;YAED,QAAQ,CAAC,WAAW,EAAE,KAAK;gBACzB,GAAG,EAAE,CAAC,eAAe,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;gBACnD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACvB,MAAM,SAAS,GACb,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;oBAC3D,IAAI,CAAC,SAAS;wBAAE,OAAO;oBAEvB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC7B,MAAM,SAAS,GAAG,wBAAwB,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;oBAClE,MAAM,oBAAoB,GAAG,gCAAgC,CAC3D,WAAW,EACX,SAAS,CAAC,MAAM,CACjB,CAAC;oBACF,SAAS,CAAC,MAAM;wBACd,SAAS,CAAC,UAAU,KAAK,MAAM;4BAC7B,CAAC,CAAC,uBAAuB,CACrB,SAAS,CAAC,MAAM,EAChB,WAAW,EACX,SAAS,EACT,KAAK,CAAC,IAAI,EACV,oBAAoB,CACrB;4BACH,CAAC,CAAC,mBAAmB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;oBACvD,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACnC,CAAC,CAAC,CACH,CAAC;gBACF,OAAO,KAAK,CAAC,EAAE,CAAC;YAClB,CAAC;YAED,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK;gBACrC,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAC1D,WAAW,CACZ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;gBACxD,MAAM,WAAW,GAAG,QAAQ;oBAC1B,CAAC,CAAC,+BAA+B,CAAC,QAAQ,EAAE,KAAK,CAAC;oBAClD,CAAC,CAAC,KAAK,CAAC;gBACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACvB,MAAM,SAAS,GACb,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;oBAC3D,IAAI,CAAC,SAAS;wBAAE,OAAO;oBAEvB,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CACjC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,OAAO,CACxC,CAAC;oBACF,IAAI,CAAC,KAAK;wBAAE,OAAO;oBAEnB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAC5B,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACnC,CAAC,CAAC,CACH,CAAC;gBACF,IAAI,WAAW,EAAE,CAAC;oBAChB,GAAG,EAAE,CAAC,eAAe,CAAC,iBAAiB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;YAED,WAAW,CAAC,WAAW,EAAE,OAAO;gBAC9B,GAAG,EAAE,CAAC,eAAe,CAAC,iBAAiB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBAC9D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACvB,MAAM,SAAS,GACb,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;oBAC3D,IAAI,CAAC,SAAS;wBAAE,OAAO;oBAEvB,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CACxC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAChC,CAAC;oBACF,SAAS,CAAC,MAAM,GAAG,qBAAqB,CACtC,SAAS,CAAC,MAAM,EAChB,yBAAyB,CAAC,WAAW,EAAE,OAAO,CAAC,CAChD,CAAC;oBACF,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACnC,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;YAED,gBAAgB,CAAC,WAAW,EAAE,OAAO;gBACnC,OAAO,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,uBAAuB,CAC1D,yBAAyB,CAAC,WAAW,EAAE,OAAO,CAAC,CAChD,CAAC;YACJ,CAAC;YAED,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK;gBAC1C,MAAM,cAAc,GAAG,yBAAyB,CAC9C,WAAW,EACX,OAAO,CACR,CAAC;gBACF,MAAM,QAAQ,GACZ,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,uBAAuB,CACnD,cAAc,CACf,CAAC;gBACJ,IAAI,QAAQ,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;oBACnC,4BAA4B,CAAC,QAAQ,CAAC,CAAC;gBACzC,CAAC;gBACD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACd,eAAe,EAAE;wBACf,GAAG,KAAK,CAAC,eAAe;wBACxB,OAAO,EAAE;4BACP,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO;4BAChC,uBAAuB,EAAE;gCACvB,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,uBAAuB;gCACxD,CAAC,cAAc,CAAC,EAAE,KAAK;6BACxB;yBACF;qBACF;iBACF,CAAC,CAAC,CAAC;YACN,CAAC;YAED,aAAa,CAAC,WAAW,EAAE,OAAO;gBAChC,OAAO,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,oBAAoB,CACvD,yBAAyB,CAAC,WAAW,EAAE,OAAO,CAAC,CAChD,CAAC;YACJ,CAAC;YAED,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK;gBAC1C,MAAM,cAAc,GAAG,yBAAyB,CAC9C,WAAW,EACX,OAAO,CACR,CAAC;gBACF,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACd,eAAe,EAAE;wBACf,GAAG,KAAK,CAAC,eAAe;wBACxB,OAAO,EAAE;4BACP,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO;4BAChC,oBAAoB,EAAE;gCACpB,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,oBAAoB;gCACrD,CAAC,cAAc,CAAC,EAAE,KAAK;6BACxB;yBACF;qBACF;iBACF,CAAC,CAAC,CAAC;YACN,CAAC;YAED,eAAe,CAAC,WAAW,EAAE,OAAO;gBAClC,MAAM,cAAc,GAAG,yBAAyB,CAC9C,WAAW,EACX,OAAO,CACR,CAAC;gBACF,IACE,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,oBAAoB,CAAC,cAAc,CAAC,EACnE,CAAC;oBACD,OAAO;gBACT,CAAC;gBACD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oBACZ,MAAM,wBAAwB,GAAG;wBAC/B,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,oBAAoB;qBACtD,CAAC;oBACF,OAAO,wBAAwB,CAAC,cAAc,CAAC,CAAC;oBAChD,OAAO;wBACL,eAAe,EAAE;4BACf,GAAG,KAAK,CAAC,eAAe;4BACxB,OAAO,EAAE;gCACP,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO;gCAChC,oBAAoB,EAAE,wBAAwB;6BAC/C;yBACF;qBACF,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC;YAED,iBAAiB,CAAC,WAAW,EAAE,OAAO;gBACpC,MAAM,cAAc,GAAG,yBAAyB,CAC9C,WAAW,EACX,OAAO,CACR,CAAC;gBACF,MAAM,QAAQ,GACZ,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,uBAAuB,CACnD,cAAc,CACf,CAAC;gBACJ,4BAA4B,CAAC,QAAQ,CAAC,CAAC;gBACvC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oBACZ,MAAM,2BAA2B,GAAG;wBAClC,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,uBAAuB;qBACzD,CAAC;oBACF,MAAM,wBAAwB,GAAG;wBAC/B,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,oBAAoB;qBACtD,CAAC;oBACF,OAAO,2BAA2B,CAAC,cAAc,CAAC,CAAC;oBACnD,OAAO,wBAAwB,CAAC,cAAc,CAAC,CAAC;oBAChD,OAAO;wBACL,eAAe,EAAE;4BACf,GAAG,KAAK,CAAC,eAAe;4BACxB,OAAO,EAAE;gCACP,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO;gCAChC,uBAAuB,EAAE,2BAA2B;gCACpD,oBAAoB,EAAE,wBAAwB;6BAC/C;yBACF;qBACF,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC;YAED,qBAAqB,CAAC,WAAW,EAAE,OAAO;gBACxC,MAAM,aAAa,GAAG,aAAa,WAAW,SAAS,CAAC;gBACxD,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CACpC,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,uBAAuB,CACtD,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,EAAE,CAC5B,cAAc,CAAC,UAAU,CAAC,aAAa,CAAC,CACzC,CAAC;gBACF,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,CACtC,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,oBAAoB,CACnD,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,EAAE,CAC1B,cAAc,CAAC,UAAU,CAAC,aAAa,CAAC,CACzC,CAAC;gBAEF,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE;oBACpC,4BAA4B,CAAC,KAAK,CAAC,CAAC;gBACtC,CAAC,CAAC,CAAC;gBAEH,IAAI,OAAO,EAAE,cAAc,EAAE,CAAC;oBAC5B,uBAAuB,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;gBAC9C,CAAC;gBAED,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oBACZ,MAAM,2BAA2B,GAAG;wBAClC,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,uBAAuB;qBACzD,CAAC;oBACF,MAAM,wBAAwB,GAAG;wBAC/B,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,oBAAoB;qBACtD,CAAC;oBACF,KAAK,MAAM,CAAC,cAAc,CAAC,IAAI,eAAe,EAAE,CAAC;wBAC/C,OAAO,2BAA2B,CAAC,cAAc,CAAC,CAAC;oBACrD,CAAC;oBACD,KAAK,MAAM,cAAc,IAAI,oBAAoB,EAAE,CAAC;wBAClD,OAAO,wBAAwB,CAAC,cAAc,CAAC,CAAC;oBAClD,CAAC;oBACD,OAAO;wBACL,eAAe,EAAE;4BACf,GAAG,KAAK,CAAC,eAAe;4BACxB,OAAO,EAAE;gCACP,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO;gCAChC,uBAAuB,EAAE,2BAA2B;gCACpD,oBAAoB,EAAE,wBAAwB;6BAC/C;yBACF;qBACF,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC;YAED,wBAAwB;gBACtB,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,uBAAuB,CACtD,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;oBAClB,4BAA4B,CAAC,KAAK,CAAC,CAAC;gBACtC,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACd,eAAe,EAAE;wBACf,GAAG,KAAK,CAAC,eAAe;wBACxB,OAAO,EAAE;4BACP,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO;4BAChC,uBAAuB,EAAE,EAAE;4BAC3B,oBAAoB,EAAE,EAAE;yBACzB;qBACF;iBACF,CAAC,CAAC,CAAC;YACN,CAAC;YAED,SAAS,CAAC,WAAW,EAAE,MAAM;gBAC3B,GAAG,EAAE,CAAC,eAAe,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;gBACnD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACvB,MAAM,SAAS,GACb,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;oBAC3D,IAAI,CAAC,SAAS;wBAAE,OAAO;oBAEvB,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAC3D,MAAM,oBAAoB,GAAG,gCAAgC,CAC3D,WAAW,EACX,SAAS,CAAC,MAAM,CACjB,CAAC;oBACF,SAAS,CAAC,MAAM,GAAG,mCAAmC,CACpD,MAAM,EACN,WAAW,EACX,QAAQ,EACR,SAAS,CAAC,UAAU,EACpB,oBAAoB,CACrB,CAAC;oBACF,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACnC,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,QAAiD;IAEjD,OAAO,gBAAgB,CAAwB,CAAC,KAAK,EAAE,EAAE,CACvD,QAAQ,CAAC,KAA6C,CAAC,CACxD,CAAC;AACJ,CAAC","sourcesContent":["import {createId} from '@paralleldrive/cuid2';\nimport {DbSliceState} from '@sqlrooms/db';\nimport {type DuckDbSliceState} from '@sqlrooms/duckdb';\nimport {\n DEFAULT_GRID_COLS,\n getGridColsForBreakpoint,\n type LayoutSliceState,\n} from '@sqlrooms/layout';\nimport {\n type LayoutGridItem,\n type LayoutGridNode,\n LayoutNode,\n type LayoutPanelNode,\n isLayoutGridNode,\n isLayoutNodeKey,\n isLayoutPanelNode,\n isLayoutSplitNode,\n} from '@sqlrooms/layout-config';\nimport {\n BaseRoomStoreState,\n createSlice,\n SliceFunctions,\n useBaseRoomStore,\n} from '@sqlrooms/room-store';\nimport {produce} from 'immer';\nimport type {ComponentType} from 'react';\nimport {z} from 'zod';\nimport type {ChartTypeDefinition} from '../chart-types/base-types';\nimport {ChartConfig} from '../chart-types/chart-config';\nimport {type MosaicSliceState} from '../MosaicSlice';\nimport {\n destroyRetainedVgPlotChart,\n type RetainedVgPlotChart,\n} from '../VgPlotChart';\nimport type {MosaicDashboardAddPanelAction} from './action-types';\nimport type {ChartRuntimeIssue} from '../chart-runtime';\n\n/**\n * Panel key used for function-form panel definitions registered by\n * `MosaicDashboardPanels`. Individual dashboard panels are represented as\n * `LayoutPanelNode` entries whose `panel` property carries\n * `{ key: MOSAIC_DASHBOARD_PANEL, meta: { dashboardId, panelId } }`.\n */\nexport const MOSAIC_DASHBOARD_PANEL = 'mosaic-dashboard-panel';\nexport const MOSAIC_DASHBOARD_CHART_PANEL_TYPE = 'vgplot';\nexport const MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE = 'profiler';\nexport const MOSAIC_DASHBOARD_TEXT_PANEL_TYPE = 'text';\n\nexport const MosaicDashboardLayoutType = z.enum(['dock', 'grid']);\nexport type MosaicDashboardLayoutType = z.infer<\n typeof MosaicDashboardLayoutType\n>;\n\n// Profiler panel config\nexport const ProfilerPanelConfig = z.object({\n pageSize: z.number().optional(),\n});\nexport type ProfilerPanelConfig = z.infer<typeof ProfilerPanelConfig>;\n\n// Text panel config\nexport const TextPanelConfig = z.object({\n content: z.string().default(''),\n toolbarOpen: z.boolean().default(false),\n sourcePanelOpen: z.boolean().default(false),\n});\nexport type TextPanelConfig = z.infer<typeof TextPanelConfig>;\n\n// Panel configs discriminated by type\nexport const ChartPanelConfig = z.object({\n id: z.string(),\n type: z.literal(MOSAIC_DASHBOARD_CHART_PANEL_TYPE),\n title: z.string().default('Panel'),\n config: ChartConfig,\n});\nexport type ChartPanelConfig = z.infer<typeof ChartPanelConfig>;\n\nexport const ProfilerPanel = z.object({\n id: z.string(),\n type: z.literal(MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE),\n title: z.string().default('Panel'),\n config: ProfilerPanelConfig,\n});\nexport type ProfilerPanel = z.infer<typeof ProfilerPanel>;\n\nexport const TextPanel = z.object({\n id: z.string(),\n type: z.literal(MOSAIC_DASHBOARD_TEXT_PANEL_TYPE),\n title: z.string().default('Text'),\n config: TextPanelConfig,\n});\nexport type TextPanel = z.infer<typeof TextPanel>;\n\n// Legacy panel for backward compatibility\nexport const LegacyPanelConfig = z.object({\n id: z.string(),\n type: z.string(),\n title: z.string().default('Panel'),\n config: z.record(z.string(), z.unknown()).default({}),\n});\nexport type LegacyPanelConfig = z.infer<typeof LegacyPanelConfig>;\n\n// Discriminated union of all panel types\nexport const MosaicDashboardPanelConfig = z\n .discriminatedUnion('type', [ChartPanelConfig, ProfilerPanel, TextPanel])\n .or(LegacyPanelConfig);\nexport type MosaicDashboardPanelConfig = z.infer<\n typeof MosaicDashboardPanelConfig\n>;\n\nexport type MosaicDashboardPanelRendererProps<\n TPanel extends MosaicDashboardPanelConfig = MosaicDashboardPanelConfig,\n> = {\n dashboardId: string;\n dashboard: MosaicDashboardEntry;\n panel: TPanel;\n selectionName: string;\n};\n\nexport type ChartPanelRendererProps =\n MosaicDashboardPanelRendererProps<ChartPanelConfig>;\nexport type ProfilerPanelRendererProps =\n MosaicDashboardPanelRendererProps<ProfilerPanel>;\nexport type TextPanelRendererProps =\n MosaicDashboardPanelRendererProps<TextPanel>;\n\nexport type MosaicDashboardPanelRenderer<\n TPanel extends MosaicDashboardPanelConfig = MosaicDashboardPanelConfig,\n> = {\n component: ComponentType<MosaicDashboardPanelRendererProps<TPanel>>;\n headerActions?: ComponentType<MosaicDashboardPanelRendererProps<TPanel>>;\n icon?: ComponentType<{className?: string}>;\n};\n\n// Type-erased renderer for storage (avoids circular dependency issues)\nexport type AnyPanelRenderer = {\n component: ComponentType<any>;\n headerActions?: ComponentType<any>;\n icon?: ComponentType<{className?: string}>;\n};\n\n// Map of panel type string to panel config type\nexport type PanelTypeMap = {\n [MOSAIC_DASHBOARD_CHART_PANEL_TYPE]: ChartPanelConfig;\n [MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE]: ProfilerPanel;\n [MOSAIC_DASHBOARD_TEXT_PANEL_TYPE]: TextPanel;\n};\n\n// Panel renderers record - use type-erased renderers for runtime compatibility\nexport type PanelRenderersRecord = Record<string, AnyPanelRenderer>;\n\nexport function createMosaicDashboardChartPanelConfig(\n title: string,\n config: ChartConfig,\n): ChartPanelConfig {\n return {\n id: createId(),\n type: MOSAIC_DASHBOARD_CHART_PANEL_TYPE,\n title,\n config,\n };\n}\n\nexport function createMosaicDashboardProfilerPanelConfig(\n options: {\n title?: string;\n config?: ProfilerPanelConfig;\n } = {},\n): ProfilerPanel {\n return {\n id: createId(),\n type: MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE,\n title: options.title ?? 'Profiler',\n config: options.config ?? {},\n };\n}\n\nexport function createMosaicDashboardTextPanelConfig(\n options: {\n title?: string;\n config?: TextPanelConfig;\n } = {},\n): TextPanel {\n return {\n id: createId(),\n type: MOSAIC_DASHBOARD_TEXT_PANEL_TYPE,\n title: options.title ?? 'Text',\n config: options.config ?? {\n toolbarOpen: false,\n sourcePanelOpen: false,\n content: '',\n },\n };\n}\n\nexport const MosaicDashboardEntry = z.object({\n id: z.string(),\n title: z.string().default('Dashboard'),\n layoutType: MosaicDashboardLayoutType.default('dock'),\n selectedTable: z.string().optional(),\n lastSelectedTable: z.string().optional(),\n panels: z.array(MosaicDashboardPanelConfig).default([]),\n layout: LayoutNode.nullable().default(null),\n updatedAt: z.number().default(0),\n});\nexport type MosaicDashboardEntry = z.infer<typeof MosaicDashboardEntry>;\n\nexport const MosaicDashboardSliceConfig = z.object({\n dashboardsById: z.record(z.string(), MosaicDashboardEntry).default({}),\n});\nexport type MosaicDashboardSliceConfig = z.infer<\n typeof MosaicDashboardSliceConfig\n>;\n\nexport type MosaicDashboardSliceState = {\n mosaicDashboard: SliceFunctions & {\n config: MosaicDashboardSliceConfig;\n runtime: {\n /**\n * Live vgplot chart instances retained across transient dashboard panel\n * remounts, keyed by `getMosaicDashboardPanelId(dashboardId, panelId)`.\n *\n * This is runtime-only state: entries are never serialized with dashboard\n * config and must be evicted when their panel/dashboard lifecycle ends.\n */\n retainedChartsByPanelId: Record<string, RetainedVgPlotChart>;\n /**\n * Runtime-only chart issues keyed by `getMosaicDashboardPanelId`.\n * These are live diagnostics for UI and AI tools, not persisted config.\n */\n panelIssuesByPanelId: Record<string, ChartRuntimeIssue>;\n };\n chartTypes?: ChartTypeDefinition[];\n addPanelActions: MosaicDashboardAddPanelAction[];\n createDashboard: (\n title?: string,\n layoutType?: MosaicDashboardLayoutType,\n ) => string;\n ensureDashboard: (\n dashboardId: string,\n title?: string,\n layoutType?: MosaicDashboardLayoutType,\n ) => void;\n removeDashboard: (dashboardId: string) => void;\n getDashboard: (dashboardId: string) => MosaicDashboardEntry | undefined;\n setSelectedTable: (dashboardId: string, tableName: string) => void;\n setLastSelectedTable: (dashboardId: string, tableName: string) => void;\n panelRenderers: PanelRenderersRecord;\n registerPanelRenderer: (type: string, renderer: AnyPanelRenderer) => void;\n unregisterPanelRenderer: (type: string) => void;\n addPanel: (\n dashboardId: string,\n panel: MosaicDashboardPanelConfig,\n ) => MosaicDashboardPanelConfig['id'];\n updatePanel: (\n dashboardId: string,\n panelId: string,\n patch: Partial<Omit<MosaicDashboardPanelConfig, 'id'>>,\n ) => void;\n removePanel: (dashboardId: string, panelId: string) => void;\n getRetainedChart: (\n dashboardId: string,\n panelId: string,\n ) => RetainedVgPlotChart | undefined;\n setRetainedChart: (\n dashboardId: string,\n panelId: string,\n chart: RetainedVgPlotChart,\n ) => void;\n getPanelIssue: (\n dashboardId: string,\n panelId: string,\n ) => ChartRuntimeIssue | undefined;\n reportPanelIssue: (\n dashboardId: string,\n panelId: string,\n issue: ChartRuntimeIssue,\n ) => void;\n clearPanelIssue: (dashboardId: string, panelId: string) => void;\n evictPanelRuntime: (dashboardId: string, panelId: string) => void;\n evictDashboardRuntime: (\n dashboardId: string,\n options?: {resetSelection?: boolean},\n ) => void;\n clearAllDashboardRuntime: () => void;\n setLayout: (dashboardId: string, layout: LayoutNode | null) => void;\n };\n};\n\nexport type MosaicDashboardStoreState = BaseRoomStoreState &\n DbSliceState &\n DuckDbSliceState &\n LayoutSliceState &\n MosaicSliceState &\n MosaicDashboardSliceState;\n\ntype DashboardPanelTypesByLayoutId = Record<string, string | undefined>;\n\n// ---------------------------------------------------------------------------\n// Layout tree helpers (operate on the new LayoutNode types)\n// ---------------------------------------------------------------------------\n\nfunction createDashboardPanelNode(\n dashboardId: string,\n panelId: string,\n): LayoutPanelNode {\n return {\n type: 'panel',\n id: getMosaicDashboardPanelId(dashboardId, panelId),\n minSize: 200,\n panel: {\n key: MOSAIC_DASHBOARD_PANEL,\n meta: {dashboardId, panelId},\n },\n };\n}\n\nfunction getDashboardPanelTypesByLayoutId(\n dashboardId: string,\n panels: MosaicDashboardPanelConfig[],\n): DashboardPanelTypesByLayoutId {\n return Object.fromEntries(\n panels.map((panel) => [\n getMosaicDashboardPanelId(dashboardId, panel.id),\n panel.type,\n ]),\n );\n}\n\nfunction appendPanelToLayout(\n layout: LayoutNode | null,\n panelNode: LayoutPanelNode,\n): LayoutNode {\n if (!layout) {\n return panelNode;\n }\n return {\n type: 'split',\n id: `split-${createId()}`,\n direction: 'row',\n children: [layout, panelNode],\n };\n}\n\nfunction createDashboardGridLayout(\n dashboardId: string,\n panelNode?: LayoutPanelNode,\n): LayoutGridNode {\n const children = panelNode ? [panelNode] : [];\n const layouts = createDashboardGridLayoutsForChildren(children);\n return {\n type: 'grid',\n id: getMosaicDashboardGridId(dashboardId),\n children,\n rowHeight: 150,\n margin: [12, 12],\n containerPadding: [0, 0],\n compactType: 'vertical',\n preventCollision: false,\n resizeHandles: ['e', 's', 'w', 'se', 'sw'],\n layouts,\n };\n}\n\nfunction getLayoutChildId(node: LayoutNode): string {\n return isLayoutNodeKey(node) ? node : node.id;\n}\n\nfunction createDashboardGridItem(\n panelId: string,\n layout: LayoutGridItem[],\n cols = 12,\n panelType?: string,\n): LayoutGridItem {\n const effectiveCols = Math.max(1, cols);\n const w =\n panelType === MOSAIC_DASHBOARD_PROFILER_PANEL_TYPE ||\n panelType === MOSAIC_DASHBOARD_TEXT_PANEL_TYPE\n ? effectiveCols\n : Math.max(1, Math.ceil(effectiveCols / 2));\n const h = 2;\n const bottom = layout.reduce(\n (max, item) => Math.max(max, item.y + item.h),\n 0,\n );\n\n for (let y = 0; y <= bottom; y += 1) {\n for (let x = 0; x <= effectiveCols - w; x += 1) {\n const overlaps = layout.some(\n (item) =>\n x < item.x + item.w &&\n x + w > item.x &&\n y < item.y + item.h &&\n y + h > item.y,\n );\n if (!overlaps) {\n return {\n i: panelId,\n x,\n y,\n w,\n h,\n };\n }\n }\n }\n\n return {\n i: panelId,\n x: 0,\n y: bottom,\n w,\n h,\n };\n}\n\nfunction createDashboardGridLayoutsForChildren(\n children: LayoutNode[],\n sourceLayouts?: LayoutGridNode['layouts'],\n cols?: LayoutGridNode['cols'],\n panelTypesByLayoutId: Record<string, string | undefined> = {},\n): LayoutGridNode['layouts'] {\n const childIds = new Set(children.map((child) => getLayoutChildId(child)));\n const sourceEntries = new Map<string, LayoutGridItem[]>(\n Object.keys(DEFAULT_GRID_COLS).map((breakpoint) => [breakpoint, []]),\n );\n for (const [breakpoint, breakpointLayout] of Object.entries(\n sourceLayouts ?? {},\n )) {\n sourceEntries.set(breakpoint, breakpointLayout);\n }\n\n return Object.fromEntries(\n [...sourceEntries.entries()].map(([breakpoint, breakpointLayout]) => {\n const nextLayout = breakpointLayout.filter((item) =>\n childIds.has(item.i),\n );\n const layoutItemIds = new Set(nextLayout.map((item) => item.i));\n\n for (const child of children) {\n const childId = getLayoutChildId(child);\n if (!layoutItemIds.has(childId)) {\n const item = createDashboardGridItem(\n childId,\n nextLayout,\n getGridColsForBreakpoint(cols, breakpoint),\n panelTypesByLayoutId[childId],\n );\n nextLayout.push(item);\n layoutItemIds.add(childId);\n }\n }\n\n return [breakpoint, nextLayout];\n }),\n );\n}\n\nfunction isExpectedDashboardPanelNode(\n node: LayoutNode,\n expectedPanelIds: Set<string>,\n): boolean {\n return expectedPanelIds.has(getLayoutChildId(node));\n}\n\nfunction collectDashboardPanelNodes(\n layout: LayoutNode | null,\n expectedPanelIds: Set<string>,\n nodes: LayoutNode[] = [],\n seen = new Set<string>(),\n): LayoutNode[] {\n if (!layout) return nodes;\n\n if (isLayoutNodeKey(layout) || isLayoutPanelNode(layout)) {\n if (isExpectedDashboardPanelNode(layout, expectedPanelIds)) {\n const id = getLayoutChildId(layout);\n if (!seen.has(id)) {\n nodes.push(layout);\n seen.add(id);\n }\n }\n return nodes;\n }\n\n if (isLayoutSplitNode(layout) || isLayoutGridNode(layout)) {\n for (const child of layout.children) {\n collectDashboardPanelNodes(child, expectedPanelIds, nodes, seen);\n }\n }\n\n return nodes;\n}\n\nfunction normalizeDashboardGridLayout(\n layout: LayoutNode | null,\n dashboardId: string,\n expectedPanelIds: Set<string>,\n panelTypesByLayoutId: DashboardPanelTypesByLayoutId = {},\n): LayoutGridNode {\n const collectedPanelIds = collectPanelIds(layout);\n const existingExpectedPanelIds = new Set(\n [...expectedPanelIds].filter((panelId) => collectedPanelIds.has(panelId)),\n );\n const children = collectDashboardPanelNodes(layout, existingExpectedPanelIds);\n const layouts = createDashboardGridLayoutsForChildren(\n children,\n isLayoutGridNode(layout) ? layout.layouts : undefined,\n isLayoutGridNode(layout) ? layout.cols : undefined,\n panelTypesByLayoutId,\n );\n\n if (isLayoutGridNode(layout)) {\n return {\n ...layout,\n children,\n layouts,\n };\n }\n\n return {\n ...createDashboardGridLayout(dashboardId),\n children,\n layouts,\n };\n}\n\nfunction appendPanelToGridLayout(\n layout: LayoutNode | null,\n dashboardId: string,\n panelNode: LayoutPanelNode,\n panelType?: string,\n panelTypesByLayoutId: DashboardPanelTypesByLayoutId = {},\n): LayoutGridNode {\n const nextPanelTypesByLayoutId = {\n ...panelTypesByLayoutId,\n [panelNode.id]: panelType ?? panelTypesByLayoutId[panelNode.id],\n };\n\n if (!isLayoutGridNode(layout)) {\n const dashboardPanelPrefix = `dashboard:${dashboardId}:panel:`;\n const expectedPanelIds = new Set(\n [...collectPanelIds(layout)].filter((panelId) =>\n panelId.startsWith(dashboardPanelPrefix),\n ),\n );\n expectedPanelIds.add(panelNode.id);\n const normalizedLayout = normalizeDashboardGridLayout(\n layout,\n dashboardId,\n expectedPanelIds,\n nextPanelTypesByLayoutId,\n );\n return appendPanelToGridLayout(\n normalizedLayout,\n dashboardId,\n panelNode,\n panelType,\n nextPanelTypesByLayoutId,\n );\n }\n\n const hasChild = layout.children.some((child) => {\n if (isLayoutNodeKey(child)) return child === panelNode.id;\n return child.id === panelNode.id;\n });\n const children = hasChild ? layout.children : [...layout.children, panelNode];\n const layouts = Object.fromEntries(\n Object.entries(\n createDashboardGridLayoutsForChildren(\n children,\n layout.layouts,\n layout.cols,\n nextPanelTypesByLayoutId,\n ) ?? {},\n ).map(([breakpoint, breakpointLayout]) => {\n if (breakpointLayout.some((item) => item.i === panelNode.id)) {\n return [breakpoint, breakpointLayout];\n }\n return [\n breakpoint,\n [\n ...breakpointLayout,\n createDashboardGridItem(\n panelNode.id,\n breakpointLayout,\n getGridColsForBreakpoint(layout.cols, breakpoint),\n nextPanelTypesByLayoutId[panelNode.id],\n ),\n ],\n ];\n }),\n );\n\n return {\n ...layout,\n children,\n layouts,\n };\n}\n\nfunction removePanelFromLayout(\n layout: LayoutNode | null,\n panelId: string,\n): LayoutNode | null {\n if (!layout) return null;\n\n if (isLayoutNodeKey(layout)) {\n return layout === panelId ? null : layout;\n }\n\n if (isLayoutPanelNode(layout)) {\n return layout.id === panelId ? null : layout;\n }\n\n if (isLayoutSplitNode(layout)) {\n const nextChildren = layout.children\n .map((child) => removePanelFromLayout(child, panelId))\n .filter((child): child is LayoutNode => child !== null);\n\n if (nextChildren.length === 0) return null;\n if (nextChildren.length === 1) return nextChildren[0] ?? null;\n\n return {...layout, children: nextChildren};\n }\n\n if (isLayoutGridNode(layout)) {\n const nextChildren = layout.children.filter((child) => {\n if (isLayoutNodeKey(child)) return child !== panelId;\n return child.id !== panelId;\n });\n const nextLayouts = layout.layouts\n ? Object.fromEntries(\n Object.entries(layout.layouts).map(\n ([breakpoint, breakpointLayout]) => [\n breakpoint,\n breakpointLayout.filter((item) => item.i !== panelId),\n ],\n ),\n )\n : layout.layouts;\n\n if (nextChildren.length === 0) return null;\n return {...layout, children: nextChildren, layouts: nextLayouts};\n }\n\n return layout;\n}\n\nfunction collectPanelIds(\n layout: LayoutNode | null,\n panelIds = new Set<string>(),\n): Set<string> {\n if (!layout) return panelIds;\n if (isLayoutNodeKey(layout)) {\n panelIds.add(layout);\n return panelIds;\n }\n if (isLayoutPanelNode(layout)) {\n panelIds.add(layout.id);\n return panelIds;\n }\n if (isLayoutSplitNode(layout)) {\n for (const child of layout.children) {\n collectPanelIds(child, panelIds);\n }\n }\n if (isLayoutGridNode(layout)) {\n for (const child of layout.children) {\n collectPanelIds(child, panelIds);\n }\n }\n return panelIds;\n}\n\nfunction ensureLayoutContainsDashboardPanels(\n layout: LayoutNode | null,\n dashboardId: string,\n panelIds: string[],\n layoutType: MosaicDashboardLayoutType = 'dock',\n panelTypesByLayoutId: DashboardPanelTypesByLayoutId = {},\n): LayoutNode | null {\n let nextLayout = layout;\n\n if (layoutType === 'grid') {\n const expectedPanelIds = new Set(\n panelIds.map((panelId) =>\n getMosaicDashboardPanelId(dashboardId, panelId),\n ),\n );\n nextLayout = normalizeDashboardGridLayout(\n nextLayout,\n dashboardId,\n expectedPanelIds,\n panelTypesByLayoutId,\n );\n }\n\n const existing = collectPanelIds(nextLayout);\n for (const panelId of panelIds) {\n const layoutPanelId = getMosaicDashboardPanelId(dashboardId, panelId);\n if (!existing.has(layoutPanelId)) {\n const panelNode = createDashboardPanelNode(dashboardId, panelId);\n nextLayout =\n layoutType === 'grid'\n ? appendPanelToGridLayout(\n nextLayout,\n dashboardId,\n panelNode,\n panelTypesByLayoutId[layoutPanelId],\n panelTypesByLayoutId,\n )\n : appendPanelToLayout(nextLayout, panelNode);\n existing.add(layoutPanelId);\n }\n }\n\n return nextLayout;\n}\n\nexport function isChartPanelConfig(\n panel: MosaicDashboardPanelConfig,\n): panel is ChartPanelConfig {\n return panel.type === MOSAIC_DASHBOARD_CHART_PANEL_TYPE;\n}\n\nexport function getMosaicDashboardPanelId(\n dashboardId: string,\n panelId: string,\n): string {\n return `dashboard:${dashboardId}:panel:${panelId}`;\n}\n\nexport function getMosaicDashboardDockId(dashboardId: string): string {\n return `dashboard:${dashboardId}:dock`;\n}\n\nexport function getMosaicDashboardGridId(dashboardId: string): string {\n return `dashboard:${dashboardId}:grid`;\n}\n\nexport function getMosaicDashboardSelectionName(dashboardId: string): string {\n return `dashboard:${dashboardId}:brush`;\n}\n\nfunction destroyDashboardRuntimeChart(\n chart: RetainedVgPlotChart | undefined,\n): void {\n if (!chart) return;\n destroyRetainedVgPlotChart(chart);\n}\n\nfunction evictDashboardSelection(\n state: MosaicDashboardStoreState,\n dashboardId: string,\n): void {\n state.mosaic.selections[\n getMosaicDashboardSelectionName(dashboardId)\n ]?.reset();\n}\n\nfunction shouldEvictPanelRuntimeForPatch(\n panel: MosaicDashboardPanelConfig,\n patch: Partial<Omit<MosaicDashboardPanelConfig, 'id'>>,\n): boolean {\n if (patch.type && patch.type !== panel.type) {\n return true;\n }\n\n if (panel.type === MOSAIC_DASHBOARD_CHART_PANEL_TYPE) {\n return Boolean('config' in patch && patch.config);\n }\n\n return false;\n}\n\nexport function createDefaultMosaicDashboardConfig(\n props?: Partial<MosaicDashboardSliceConfig>,\n): MosaicDashboardSliceConfig {\n return MosaicDashboardSliceConfig.parse({\n dashboardsById: {},\n ...props,\n });\n}\n\ntype CreateMosaicDashboardSliceProps = {\n config?: Partial<MosaicDashboardSliceConfig>;\n panelRenderers?: Record<string, MosaicDashboardPanelRenderer>;\n addPanelActions?: MosaicDashboardAddPanelAction[];\n chartTypes?: ChartTypeDefinition[];\n};\nexport type {CreateMosaicDashboardSliceProps};\n\nexport function createMosaicDashboardSlice(\n props: CreateMosaicDashboardSliceProps = {},\n) {\n return createSlice<MosaicDashboardSliceState, MosaicDashboardStoreState>(\n (set, get) => ({\n mosaicDashboard: {\n config: createDefaultMosaicDashboardConfig(props.config),\n runtime: {\n retainedChartsByPanelId: {},\n panelIssuesByPanelId: {},\n },\n chartTypes: props.chartTypes,\n addPanelActions: props.addPanelActions ?? [],\n panelRenderers: props.panelRenderers ?? {},\n\n createDashboard(title, layoutType) {\n const dashboardId = createId();\n get().mosaicDashboard.ensureDashboard(dashboardId, title, layoutType);\n return dashboardId;\n },\n\n ensureDashboard(dashboardId, title, layoutType) {\n set((state) =>\n produce(state, (draft) => {\n const existing =\n draft.mosaicDashboard.config.dashboardsById[dashboardId];\n if (existing) {\n if (title && existing.title !== title) {\n existing.title = title;\n existing.updatedAt = Date.now();\n }\n return;\n }\n draft.mosaicDashboard.config.dashboardsById[dashboardId] = {\n id: dashboardId,\n title: title ?? 'Dashboard',\n layoutType: layoutType ?? 'dock',\n selectedTable: undefined,\n panels: [],\n layout:\n layoutType === 'grid'\n ? createDashboardGridLayout(dashboardId)\n : null,\n updatedAt: Date.now(),\n };\n }),\n );\n },\n\n removeDashboard(dashboardId) {\n get().mosaicDashboard.evictDashboardRuntime(dashboardId, {\n resetSelection: true,\n });\n set((state) =>\n produce(state, (draft) => {\n delete draft.mosaicDashboard.config.dashboardsById[dashboardId];\n }),\n );\n },\n\n getDashboard(dashboardId) {\n return get().mosaicDashboard.config.dashboardsById[dashboardId];\n },\n\n setConfig(config: MosaicDashboardSliceConfig) {\n set((state) =>\n produce(state, (draft) => {\n draft.mosaicDashboard.config = config;\n }),\n );\n },\n\n setSelectedTable(dashboardId, tableName) {\n get().mosaicDashboard.ensureDashboard(dashboardId);\n set((state) =>\n produce(state, (draft) => {\n const dashboard =\n draft.mosaicDashboard.config.dashboardsById[dashboardId];\n if (!dashboard) return;\n dashboard.selectedTable = tableName;\n dashboard.updatedAt = Date.now();\n }),\n );\n },\n\n setLastSelectedTable(dashboardId, tableName) {\n get().mosaicDashboard.ensureDashboard(dashboardId);\n set((state) =>\n produce(state, (draft) => {\n const dashboard =\n draft.mosaicDashboard.config.dashboardsById[dashboardId];\n if (!dashboard) return;\n dashboard.lastSelectedTable = tableName;\n dashboard.updatedAt = Date.now();\n }),\n );\n },\n\n registerPanelRenderer(type, renderer) {\n set((state) =>\n produce(state, (draft) => {\n draft.mosaicDashboard.panelRenderers[type] = renderer;\n }),\n );\n },\n\n unregisterPanelRenderer(type) {\n set((state) =>\n produce(state, (draft) => {\n delete draft.mosaicDashboard.panelRenderers[type];\n }),\n );\n },\n\n addPanel(dashboardId, panel) {\n get().mosaicDashboard.ensureDashboard(dashboardId);\n set((state) =>\n produce(state, (draft) => {\n const dashboard =\n draft.mosaicDashboard.config.dashboardsById[dashboardId];\n if (!dashboard) return;\n\n dashboard.panels.push(panel);\n const panelNode = createDashboardPanelNode(dashboardId, panel.id);\n const panelTypesByLayoutId = getDashboardPanelTypesByLayoutId(\n dashboardId,\n dashboard.panels,\n );\n dashboard.layout =\n dashboard.layoutType === 'grid'\n ? appendPanelToGridLayout(\n dashboard.layout,\n dashboardId,\n panelNode,\n panel.type,\n panelTypesByLayoutId,\n )\n : appendPanelToLayout(dashboard.layout, panelNode);\n dashboard.updatedAt = Date.now();\n }),\n );\n return panel.id;\n },\n\n updatePanel(dashboardId, panelId, patch) {\n const existing = get().mosaicDashboard.config.dashboardsById[\n dashboardId\n ]?.panels.find((candidate) => candidate.id === panelId);\n const shouldEvict = existing\n ? shouldEvictPanelRuntimeForPatch(existing, patch)\n : false;\n set((state) =>\n produce(state, (draft) => {\n const dashboard =\n draft.mosaicDashboard.config.dashboardsById[dashboardId];\n if (!dashboard) return;\n\n const panel = dashboard.panels.find(\n (candidate) => candidate.id === panelId,\n );\n if (!panel) return;\n\n Object.assign(panel, patch);\n dashboard.updatedAt = Date.now();\n }),\n );\n if (shouldEvict) {\n get().mosaicDashboard.evictPanelRuntime(dashboardId, panelId);\n }\n },\n\n removePanel(dashboardId, panelId) {\n get().mosaicDashboard.evictPanelRuntime(dashboardId, panelId);\n set((state) =>\n produce(state, (draft) => {\n const dashboard =\n draft.mosaicDashboard.config.dashboardsById[dashboardId];\n if (!dashboard) return;\n\n dashboard.panels = dashboard.panels.filter(\n (panel) => panel.id !== panelId,\n );\n dashboard.layout = removePanelFromLayout(\n dashboard.layout,\n getMosaicDashboardPanelId(dashboardId, panelId),\n );\n dashboard.updatedAt = Date.now();\n }),\n );\n },\n\n getRetainedChart(dashboardId, panelId) {\n return get().mosaicDashboard.runtime.retainedChartsByPanelId[\n getMosaicDashboardPanelId(dashboardId, panelId)\n ];\n },\n\n setRetainedChart(dashboardId, panelId, chart) {\n const runtimePanelId = getMosaicDashboardPanelId(\n dashboardId,\n panelId,\n );\n const previous =\n get().mosaicDashboard.runtime.retainedChartsByPanelId[\n runtimePanelId\n ];\n if (previous && previous !== chart) {\n destroyDashboardRuntimeChart(previous);\n }\n set((state) => ({\n mosaicDashboard: {\n ...state.mosaicDashboard,\n runtime: {\n ...state.mosaicDashboard.runtime,\n retainedChartsByPanelId: {\n ...state.mosaicDashboard.runtime.retainedChartsByPanelId,\n [runtimePanelId]: chart,\n },\n },\n },\n }));\n },\n\n getPanelIssue(dashboardId, panelId) {\n return get().mosaicDashboard.runtime.panelIssuesByPanelId[\n getMosaicDashboardPanelId(dashboardId, panelId)\n ];\n },\n\n reportPanelIssue(dashboardId, panelId, issue) {\n const runtimePanelId = getMosaicDashboardPanelId(\n dashboardId,\n panelId,\n );\n set((state) => ({\n mosaicDashboard: {\n ...state.mosaicDashboard,\n runtime: {\n ...state.mosaicDashboard.runtime,\n panelIssuesByPanelId: {\n ...state.mosaicDashboard.runtime.panelIssuesByPanelId,\n [runtimePanelId]: issue,\n },\n },\n },\n }));\n },\n\n clearPanelIssue(dashboardId, panelId) {\n const runtimePanelId = getMosaicDashboardPanelId(\n dashboardId,\n panelId,\n );\n if (\n !get().mosaicDashboard.runtime.panelIssuesByPanelId[runtimePanelId]\n ) {\n return;\n }\n set((state) => {\n const nextPanelIssuesByPanelId = {\n ...state.mosaicDashboard.runtime.panelIssuesByPanelId,\n };\n delete nextPanelIssuesByPanelId[runtimePanelId];\n return {\n mosaicDashboard: {\n ...state.mosaicDashboard,\n runtime: {\n ...state.mosaicDashboard.runtime,\n panelIssuesByPanelId: nextPanelIssuesByPanelId,\n },\n },\n };\n });\n },\n\n evictPanelRuntime(dashboardId, panelId) {\n const runtimePanelId = getMosaicDashboardPanelId(\n dashboardId,\n panelId,\n );\n const existing =\n get().mosaicDashboard.runtime.retainedChartsByPanelId[\n runtimePanelId\n ];\n destroyDashboardRuntimeChart(existing);\n set((state) => {\n const nextRetainedChartsByPanelId = {\n ...state.mosaicDashboard.runtime.retainedChartsByPanelId,\n };\n const nextPanelIssuesByPanelId = {\n ...state.mosaicDashboard.runtime.panelIssuesByPanelId,\n };\n delete nextRetainedChartsByPanelId[runtimePanelId];\n delete nextPanelIssuesByPanelId[runtimePanelId];\n return {\n mosaicDashboard: {\n ...state.mosaicDashboard,\n runtime: {\n ...state.mosaicDashboard.runtime,\n retainedChartsByPanelId: nextRetainedChartsByPanelId,\n panelIssuesByPanelId: nextPanelIssuesByPanelId,\n },\n },\n };\n });\n },\n\n evictDashboardRuntime(dashboardId, options) {\n const runtimePrefix = `dashboard:${dashboardId}:panel:`;\n const existingEntries = Object.entries(\n get().mosaicDashboard.runtime.retainedChartsByPanelId,\n ).filter(([runtimePanelId]) =>\n runtimePanelId.startsWith(runtimePrefix),\n );\n const existingIssueEntries = Object.keys(\n get().mosaicDashboard.runtime.panelIssuesByPanelId,\n ).filter((runtimePanelId) =>\n runtimePanelId.startsWith(runtimePrefix),\n );\n\n existingEntries.forEach(([, chart]) => {\n destroyDashboardRuntimeChart(chart);\n });\n\n if (options?.resetSelection) {\n evictDashboardSelection(get(), dashboardId);\n }\n\n set((state) => {\n const nextRetainedChartsByPanelId = {\n ...state.mosaicDashboard.runtime.retainedChartsByPanelId,\n };\n const nextPanelIssuesByPanelId = {\n ...state.mosaicDashboard.runtime.panelIssuesByPanelId,\n };\n for (const [runtimePanelId] of existingEntries) {\n delete nextRetainedChartsByPanelId[runtimePanelId];\n }\n for (const runtimePanelId of existingIssueEntries) {\n delete nextPanelIssuesByPanelId[runtimePanelId];\n }\n return {\n mosaicDashboard: {\n ...state.mosaicDashboard,\n runtime: {\n ...state.mosaicDashboard.runtime,\n retainedChartsByPanelId: nextRetainedChartsByPanelId,\n panelIssuesByPanelId: nextPanelIssuesByPanelId,\n },\n },\n };\n });\n },\n\n clearAllDashboardRuntime() {\n Object.values(\n get().mosaicDashboard.runtime.retainedChartsByPanelId,\n ).forEach((chart) => {\n destroyDashboardRuntimeChart(chart);\n });\n set((state) => ({\n mosaicDashboard: {\n ...state.mosaicDashboard,\n runtime: {\n ...state.mosaicDashboard.runtime,\n retainedChartsByPanelId: {},\n panelIssuesByPanelId: {},\n },\n },\n }));\n },\n\n setLayout(dashboardId, layout) {\n get().mosaicDashboard.ensureDashboard(dashboardId);\n set((state) =>\n produce(state, (draft) => {\n const dashboard =\n draft.mosaicDashboard.config.dashboardsById[dashboardId];\n if (!dashboard) return;\n\n const panelIds = dashboard.panels.map((panel) => panel.id);\n const panelTypesByLayoutId = getDashboardPanelTypesByLayoutId(\n dashboardId,\n dashboard.panels,\n );\n dashboard.layout = ensureLayoutContainsDashboardPanels(\n layout,\n dashboardId,\n panelIds,\n dashboard.layoutType,\n panelTypesByLayoutId,\n );\n dashboard.updatedAt = Date.now();\n }),\n );\n },\n },\n }),\n );\n}\n\nexport function useStoreWithMosaicDashboard<T>(\n selector: (state: MosaicDashboardStoreState) => T,\n): T {\n return useBaseRoomStore<BaseRoomStoreState, T>((state) =>\n selector(state as unknown as MosaicDashboardStoreState),\n );\n}\n"]}