@grafana/scenes 6.5.1--canary.1077.13965250047.0 → 6.5.1--canary.1079.13965689803.0

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 (275) hide show
  1. package/dist/esm/behaviors/ActWhenVariableChanged.js.map +1 -1
  2. package/dist/esm/behaviors/CursorSync.js +21 -3
  3. package/dist/esm/behaviors/CursorSync.js.map +1 -1
  4. package/dist/esm/behaviors/LiveNowTimer.js +2 -3
  5. package/dist/esm/behaviors/LiveNowTimer.js.map +1 -1
  6. package/dist/esm/behaviors/SceneQueryController.js +37 -7
  7. package/dist/esm/behaviors/SceneQueryController.js.map +1 -1
  8. package/dist/esm/behaviors/SceneRenderProfiler.js +17 -10
  9. package/dist/esm/behaviors/SceneRenderProfiler.js.map +1 -1
  10. package/dist/esm/components/EmbeddedScene.js +12 -1
  11. package/dist/esm/components/EmbeddedScene.js.map +1 -1
  12. package/dist/esm/components/NestedScene.js +30 -23
  13. package/dist/esm/components/NestedScene.js.map +1 -1
  14. package/dist/esm/components/SceneApp/SceneApp.js +11 -1
  15. package/dist/esm/components/SceneApp/SceneApp.js.map +1 -1
  16. package/dist/esm/components/SceneApp/SceneAppPage.js +47 -28
  17. package/dist/esm/components/SceneApp/SceneAppPage.js.map +1 -1
  18. package/dist/esm/components/SceneApp/SceneAppPageView.js +20 -14
  19. package/dist/esm/components/SceneApp/SceneAppPageView.js.map +1 -1
  20. package/dist/esm/components/SceneApp/utils.js +18 -2
  21. package/dist/esm/components/SceneApp/utils.js.map +1 -1
  22. package/dist/esm/components/SceneByFrameRepeater.js +3 -1
  23. package/dist/esm/components/SceneByFrameRepeater.js.map +1 -1
  24. package/dist/esm/components/SceneByVariableRepeater.js +3 -1
  25. package/dist/esm/components/SceneByVariableRepeater.js.map +1 -1
  26. package/dist/esm/components/SceneCanvasText.js +4 -1
  27. package/dist/esm/components/SceneCanvasText.js.map +1 -1
  28. package/dist/esm/components/SceneControlsSpacer.js +3 -1
  29. package/dist/esm/components/SceneControlsSpacer.js.map +1 -1
  30. package/dist/esm/components/SceneDebugger/DebugDetails.js +24 -11
  31. package/dist/esm/components/SceneDebugger/DebugDetails.js.map +1 -1
  32. package/dist/esm/components/SceneDebugger/DebugTreeNode.js +14 -2
  33. package/dist/esm/components/SceneDebugger/DebugTreeNode.js.map +1 -1
  34. package/dist/esm/components/SceneDebugger/SceneDebugger.js +29 -1
  35. package/dist/esm/components/SceneDebugger/SceneDebugger.js.map +1 -1
  36. package/dist/esm/components/SceneReactObject.js +17 -1
  37. package/dist/esm/components/SceneReactObject.js.map +1 -1
  38. package/dist/esm/components/SceneRefreshPicker.js +38 -23
  39. package/dist/esm/components/SceneRefreshPicker.js.map +1 -1
  40. package/dist/esm/components/SceneTimePicker.js +29 -27
  41. package/dist/esm/components/SceneTimePicker.js.map +1 -1
  42. package/dist/esm/components/SceneTimeRangeCompare.js +50 -36
  43. package/dist/esm/components/SceneTimeRangeCompare.js.map +1 -1
  44. package/dist/esm/components/SceneToolbarButton.js +14 -10
  45. package/dist/esm/components/SceneToolbarButton.js.map +1 -1
  46. package/dist/esm/components/VizPanel/VizPanel.js +29 -20
  47. package/dist/esm/components/VizPanel/VizPanel.js.map +1 -1
  48. package/dist/esm/components/VizPanel/VizPanelExploreButton.js +13 -17
  49. package/dist/esm/components/VizPanel/VizPanelExploreButton.js.map +1 -1
  50. package/dist/esm/components/VizPanel/VizPanelMenu.js +20 -18
  51. package/dist/esm/components/VizPanel/VizPanelMenu.js.map +1 -1
  52. package/dist/esm/components/VizPanel/VizPanelRenderer.js +122 -92
  53. package/dist/esm/components/VizPanel/VizPanelRenderer.js.map +1 -1
  54. package/dist/esm/components/VizPanel/VizPanelSeriesLimit.js +15 -7
  55. package/dist/esm/components/VizPanel/VizPanelSeriesLimit.js.map +1 -1
  56. package/dist/esm/components/VizPanel/colorSeriesConfigFactory.js +29 -15
  57. package/dist/esm/components/VizPanel/colorSeriesConfigFactory.js.map +1 -1
  58. package/dist/esm/components/VizPanel/registerRuntimePanelPlugin.js +21 -3
  59. package/dist/esm/components/VizPanel/registerRuntimePanelPlugin.js.map +1 -1
  60. package/dist/esm/components/VizPanel/seriesVisibilityConfigFactory.js +34 -22
  61. package/dist/esm/components/VizPanel/seriesVisibilityConfigFactory.js.map +1 -1
  62. package/dist/esm/components/layout/CSSGrid/SceneCSSGridLayout.js +40 -8
  63. package/dist/esm/components/layout/CSSGrid/SceneCSSGridLayout.js.map +1 -1
  64. package/dist/esm/components/layout/LazyLoader.js +35 -2
  65. package/dist/esm/components/layout/LazyLoader.js.map +1 -1
  66. package/dist/esm/components/layout/SceneFlexLayout.js +13 -3
  67. package/dist/esm/components/layout/SceneFlexLayout.js.map +1 -1
  68. package/dist/esm/components/layout/grid/SceneGridItem.js +3 -1
  69. package/dist/esm/components/layout/grid/SceneGridItem.js.map +1 -1
  70. package/dist/esm/components/layout/grid/SceneGridLayout.js +26 -26
  71. package/dist/esm/components/layout/grid/SceneGridLayout.js.map +1 -1
  72. package/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js +104 -88
  73. package/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js.map +1 -1
  74. package/dist/esm/components/layout/grid/SceneGridRow.js +48 -15
  75. package/dist/esm/components/layout/grid/SceneGridRow.js.map +1 -1
  76. package/dist/esm/components/layout/grid/constants.js.map +1 -1
  77. package/dist/esm/components/layout/grid/types.js.map +1 -1
  78. package/dist/esm/components/layout/grid/utils.js +21 -3
  79. package/dist/esm/components/layout/grid/utils.js.map +1 -1
  80. package/dist/esm/components/layout/split/SplitLayout.js.map +1 -1
  81. package/dist/esm/components/layout/split/SplitLayoutRenderer.js +14 -11
  82. package/dist/esm/components/layout/split/SplitLayoutRenderer.js.map +1 -1
  83. package/dist/esm/components/layout/split/Splitter.js +58 -60
  84. package/dist/esm/components/layout/split/Splitter.js.map +1 -1
  85. package/dist/esm/core/PanelBuilders/FieldConfigBuilder.js +23 -46
  86. package/dist/esm/core/PanelBuilders/FieldConfigBuilder.js.map +1 -1
  87. package/dist/esm/core/PanelBuilders/FieldConfigBuilders.js +8 -8
  88. package/dist/esm/core/PanelBuilders/FieldConfigBuilders.js.map +1 -1
  89. package/dist/esm/core/PanelBuilders/FieldConfigOverridesBuilder.js.map +1 -1
  90. package/dist/esm/core/PanelBuilders/PanelOptionsBuilder.js +0 -3
  91. package/dist/esm/core/PanelBuilders/PanelOptionsBuilder.js.map +1 -1
  92. package/dist/esm/core/PanelBuilders/PanelOptionsBuilders.js +28 -28
  93. package/dist/esm/core/PanelBuilders/PanelOptionsBuilders.js.map +1 -1
  94. package/dist/esm/core/PanelBuilders/StandardFieldConfigBuilders.js.map +1 -1
  95. package/dist/esm/core/PanelBuilders/VizConfigBuilder.js +0 -39
  96. package/dist/esm/core/PanelBuilders/VizConfigBuilder.js.map +1 -1
  97. package/dist/esm/core/PanelBuilders/VizConfigBuilders.js +32 -32
  98. package/dist/esm/core/PanelBuilders/VizConfigBuilders.js.map +1 -1
  99. package/dist/esm/core/PanelBuilders/VizPanelBuilder.js +21 -82
  100. package/dist/esm/core/PanelBuilders/VizPanelBuilder.js.map +1 -1
  101. package/dist/esm/core/PanelBuilders/index.js +32 -32
  102. package/dist/esm/core/PanelBuilders/index.js.map +1 -1
  103. package/dist/esm/core/SceneComponentWrapper.js +38 -4
  104. package/dist/esm/core/SceneComponentWrapper.js.map +1 -1
  105. package/dist/esm/core/SceneDataNode.js +19 -4
  106. package/dist/esm/core/SceneDataNode.js.map +1 -1
  107. package/dist/esm/core/SceneObjectBase.js +17 -55
  108. package/dist/esm/core/SceneObjectBase.js.map +1 -1
  109. package/dist/esm/core/SceneObjectRef.js +18 -7
  110. package/dist/esm/core/SceneObjectRef.js.map +1 -1
  111. package/dist/esm/core/SceneScopesBridge.js +0 -15
  112. package/dist/esm/core/SceneScopesBridge.js.map +1 -1
  113. package/dist/esm/core/SceneTimeRange.js +17 -9
  114. package/dist/esm/core/SceneTimeRange.js.map +1 -1
  115. package/dist/esm/core/SceneTimeRangeTransformerBase.js.map +1 -1
  116. package/dist/esm/core/SceneTimeZoneOverride.js +23 -7
  117. package/dist/esm/core/SceneTimeZoneOverride.js.map +1 -1
  118. package/dist/esm/core/events.js.map +1 -1
  119. package/dist/esm/core/sceneGraph/getQueryController.js.map +1 -1
  120. package/dist/esm/core/sceneGraph/getTimeRange.js.map +1 -1
  121. package/dist/esm/core/sceneGraph/index.js +1 -1
  122. package/dist/esm/core/sceneGraph/index.js.map +1 -1
  123. package/dist/esm/core/sceneGraph/sceneGraph.js.map +1 -1
  124. package/dist/esm/core/sceneGraph/utils.js +17 -1
  125. package/dist/esm/core/sceneGraph/utils.js.map +1 -1
  126. package/dist/esm/core/types.js.map +1 -1
  127. package/dist/esm/index.js +5 -6
  128. package/dist/esm/index.js.map +1 -1
  129. package/dist/esm/querying/DataLayersMerger.js.map +1 -1
  130. package/dist/esm/querying/DataProviderProxy.js.map +1 -1
  131. package/dist/esm/querying/ExtraQueryProvider.js.map +1 -1
  132. package/dist/esm/querying/RuntimeDataSource.js.map +1 -1
  133. package/dist/esm/querying/SceneDataLayerSet.js +24 -9
  134. package/dist/esm/querying/SceneDataLayerSet.js.map +1 -1
  135. package/dist/esm/querying/SceneDataTransformer.js +24 -11
  136. package/dist/esm/querying/SceneDataTransformer.js.map +1 -1
  137. package/dist/esm/querying/SceneQueryRunner.js +34 -45
  138. package/dist/esm/querying/SceneQueryRunner.js.map +1 -1
  139. package/dist/esm/querying/extraQueryProcessingOperator.js +21 -3
  140. package/dist/esm/querying/extraQueryProcessingOperator.js.map +1 -1
  141. package/dist/esm/querying/getEnrichedDataRequest.js.map +1 -1
  142. package/dist/esm/querying/layers/SceneDataLayerBase.js +19 -16
  143. package/dist/esm/querying/layers/SceneDataLayerBase.js.map +1 -1
  144. package/dist/esm/querying/layers/SceneDataLayerControls.js +21 -15
  145. package/dist/esm/querying/layers/SceneDataLayerControls.js.map +1 -1
  146. package/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js +30 -12
  147. package/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js.map +1 -1
  148. package/dist/esm/querying/layers/annotations/filterAnnotations.js +23 -6
  149. package/dist/esm/querying/layers/annotations/filterAnnotations.js.map +1 -1
  150. package/dist/esm/querying/layers/annotations/standardAnnotationQuery.js +29 -19
  151. package/dist/esm/querying/layers/annotations/standardAnnotationQuery.js.map +1 -1
  152. package/dist/esm/querying/layers/annotations/standardAnnotationsSupport.js +34 -14
  153. package/dist/esm/querying/layers/annotations/standardAnnotationsSupport.js.map +1 -1
  154. package/dist/esm/querying/layers/annotations/utils.js +17 -1
  155. package/dist/esm/querying/layers/annotations/utils.js.map +1 -1
  156. package/dist/esm/querying/registerQueryWithController.js.map +1 -1
  157. package/dist/esm/services/SceneObjectUrlSyncConfig.js.map +1 -1
  158. package/dist/esm/services/UniqueUrlKeyMapper.js.map +1 -1
  159. package/dist/esm/services/UrlSyncContextProvider.js.map +1 -1
  160. package/dist/esm/services/UrlSyncManager.js +19 -11
  161. package/dist/esm/services/UrlSyncManager.js.map +1 -1
  162. package/dist/esm/services/useUrlSync.js.map +1 -1
  163. package/dist/esm/services/utils.js.map +1 -1
  164. package/dist/esm/utils/ControlsLabel.js +47 -23
  165. package/dist/esm/utils/ControlsLabel.js.map +1 -1
  166. package/dist/esm/utils/LoadingIndicator.js +10 -11
  167. package/dist/esm/utils/LoadingIndicator.js.map +1 -1
  168. package/dist/esm/utils/SafeSerializableSceneObject.js +18 -7
  169. package/dist/esm/utils/SafeSerializableSceneObject.js.map +1 -1
  170. package/dist/esm/utils/compatibility/setWindowGrafanaSceneContext.js.map +1 -1
  171. package/dist/esm/utils/date.js.map +1 -1
  172. package/dist/esm/utils/evaluateTimeRange.js.map +1 -1
  173. package/dist/esm/utils/explore.js.map +1 -1
  174. package/dist/esm/utils/getCompareSeriesRefId.js.map +1 -1
  175. package/dist/esm/utils/getDataSource.js.map +1 -1
  176. package/dist/esm/utils/getMessageFromError.js.map +1 -1
  177. package/dist/esm/utils/metricTree.js.map +1 -1
  178. package/dist/esm/utils/parseUrlParam.js.map +1 -1
  179. package/dist/esm/utils/utils.js.map +1 -1
  180. package/dist/esm/utils/wrapInSafeSerializableSceneObject.js.map +1 -1
  181. package/dist/esm/utils/writeSceneLog.js.map +1 -1
  182. package/dist/esm/variables/VariableDependencyConfig.js +0 -9
  183. package/dist/esm/variables/VariableDependencyConfig.js.map +1 -1
  184. package/dist/esm/variables/VariableValueRecorder.js.map +1 -1
  185. package/dist/esm/variables/adhoc/AdHocFilterBuilder.js +12 -13
  186. package/dist/esm/variables/adhoc/AdHocFilterBuilder.js.map +1 -1
  187. package/dist/esm/variables/adhoc/AdHocFilterRenderer.js +142 -129
  188. package/dist/esm/variables/adhoc/AdHocFilterRenderer.js.map +1 -1
  189. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +91 -84
  190. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js.map +1 -1
  191. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +6 -1
  192. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js.map +1 -1
  193. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +194 -195
  194. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js.map +1 -1
  195. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +28 -34
  196. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js.map +1 -1
  197. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +65 -28
  198. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js.map +1 -1
  199. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +43 -29
  200. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js.map +1 -1
  201. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +1 -2
  202. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js.map +1 -1
  203. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js.map +1 -1
  204. package/dist/esm/variables/adhoc/AdHocFiltersVariable.js +55 -43
  205. package/dist/esm/variables/adhoc/AdHocFiltersVariable.js.map +1 -1
  206. package/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js.map +1 -1
  207. package/dist/esm/variables/adhoc/getAdHocFiltersFromScopes.js +0 -1
  208. package/dist/esm/variables/adhoc/getAdHocFiltersFromScopes.js.map +1 -1
  209. package/dist/esm/variables/adhoc/getAdhocOptionSearcher.js.map +1 -1
  210. package/dist/esm/variables/adhoc/patchGetAdhocFilters.js.map +1 -1
  211. package/dist/esm/variables/components/VariableValueControl.js +6 -9
  212. package/dist/esm/variables/components/VariableValueControl.js.map +1 -1
  213. package/dist/esm/variables/components/VariableValueInput.js +10 -13
  214. package/dist/esm/variables/components/VariableValueInput.js.map +1 -1
  215. package/dist/esm/variables/components/VariableValueSelect.js +115 -90
  216. package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
  217. package/dist/esm/variables/components/VariableValueSelectors.js +37 -20
  218. package/dist/esm/variables/components/VariableValueSelectors.js.map +1 -1
  219. package/dist/esm/variables/components/getOptionSearcher.js +1 -1
  220. package/dist/esm/variables/components/getOptionSearcher.js.map +1 -1
  221. package/dist/esm/variables/constants.js.map +1 -1
  222. package/dist/esm/variables/filter.js +1 -6
  223. package/dist/esm/variables/filter.js.map +1 -1
  224. package/dist/esm/variables/getEnrichedFiltersRequest.js.map +1 -1
  225. package/dist/esm/variables/groupby/GroupByVariable.js +112 -106
  226. package/dist/esm/variables/groupby/GroupByVariable.js.map +1 -1
  227. package/dist/esm/variables/groupby/GroupByVariableUrlSyncHandler.js.map +1 -1
  228. package/dist/esm/variables/groupby/findActiveGroupByVariablesByUid.js.map +1 -1
  229. package/dist/esm/variables/interpolation/ScopedVarsVariable.js.map +1 -1
  230. package/dist/esm/variables/interpolation/defaults.js.map +1 -1
  231. package/dist/esm/variables/interpolation/fieldAccessorCache.js.map +1 -1
  232. package/dist/esm/variables/interpolation/formatRegistry.js.map +1 -1
  233. package/dist/esm/variables/interpolation/sceneInterpolator.js.map +1 -1
  234. package/dist/esm/variables/lookupVariable.js.map +1 -1
  235. package/dist/esm/variables/macros/AllVariablesMacro.js.map +1 -1
  236. package/dist/esm/variables/macros/contextMacros.js.map +1 -1
  237. package/dist/esm/variables/macros/dataMacros.js.map +1 -1
  238. package/dist/esm/variables/macros/index.js.map +1 -1
  239. package/dist/esm/variables/macros/templateProxies.js +21 -4
  240. package/dist/esm/variables/macros/templateProxies.js.map +1 -1
  241. package/dist/esm/variables/macros/timeMacros.js.map +1 -1
  242. package/dist/esm/variables/macros/types.js.map +1 -1
  243. package/dist/esm/variables/macros/urlMacros.js.map +1 -1
  244. package/dist/esm/variables/sets/SceneVariableSet.js +0 -44
  245. package/dist/esm/variables/sets/SceneVariableSet.js.map +1 -1
  246. package/dist/esm/variables/types.js.map +1 -1
  247. package/dist/esm/variables/utils.js.map +1 -1
  248. package/dist/esm/variables/variants/ConstantVariable.js +23 -4
  249. package/dist/esm/variables/variants/ConstantVariable.js.map +1 -1
  250. package/dist/esm/variables/variants/CustomVariable.js +19 -4
  251. package/dist/esm/variables/variants/CustomVariable.js.map +1 -1
  252. package/dist/esm/variables/variants/DataSourceVariable.js +19 -4
  253. package/dist/esm/variables/variants/DataSourceVariable.js.map +1 -1
  254. package/dist/esm/variables/variants/IntervalVariable.js +29 -17
  255. package/dist/esm/variables/variants/IntervalVariable.js.map +1 -1
  256. package/dist/esm/variables/variants/LocalValueVariable.js +23 -8
  257. package/dist/esm/variables/variants/LocalValueVariable.js.map +1 -1
  258. package/dist/esm/variables/variants/MultiValueVariable.js +0 -16
  259. package/dist/esm/variables/variants/MultiValueVariable.js.map +1 -1
  260. package/dist/esm/variables/variants/TestVariable.js +19 -5
  261. package/dist/esm/variables/variants/TestVariable.js.map +1 -1
  262. package/dist/esm/variables/variants/TextBoxVariable.js +22 -5
  263. package/dist/esm/variables/variants/TextBoxVariable.js.map +1 -1
  264. package/dist/esm/variables/variants/guards.js.map +1 -1
  265. package/dist/esm/variables/variants/query/QueryVariable.js +20 -8
  266. package/dist/esm/variables/variants/query/QueryVariable.js.map +1 -1
  267. package/dist/esm/variables/variants/query/createQueryVariableRunner.js +23 -6
  268. package/dist/esm/variables/variants/query/createQueryVariableRunner.js.map +1 -1
  269. package/dist/esm/variables/variants/query/guards.js.map +1 -1
  270. package/dist/esm/variables/variants/query/toMetricFindValues.js.map +1 -1
  271. package/dist/esm/variables/variants/query/utils.js.map +1 -1
  272. package/dist/index.d.ts +6 -36
  273. package/dist/index.js +2792 -2036
  274. package/dist/index.js.map +1 -1
  275. package/package.json +9 -8
@@ -76,22 +76,34 @@ function SceneAppPageRenderer({ model }) {
76
76
  for (let tabIndex = 0; tabIndex < tabs.length; tabIndex++) {
77
77
  const tab = tabs[tabIndex];
78
78
  if (tabIndex === 0) {
79
- routes.push(/* @__PURE__ */ React.createElement(Route, { key: model.state.routePath, path: "", element: /* @__PURE__ */ React.createElement(tab.Component, { model: tab }) }));
79
+ routes.push(/* @__PURE__ */ React.createElement(Route, {
80
+ key: model.state.routePath,
81
+ path: "",
82
+ element: /* @__PURE__ */ React.createElement(tab.Component, {
83
+ model: tab
84
+ })
85
+ }));
80
86
  }
81
87
  routes.push(
82
- /* @__PURE__ */ React.createElement(Route, { key: tab.state.url, path: tab.state.routePath, element: /* @__PURE__ */ React.createElement(tab.Component, { model: tab }) })
88
+ /* @__PURE__ */ React.createElement(Route, {
89
+ key: tab.state.url,
90
+ path: tab.state.routePath,
91
+ element: /* @__PURE__ */ React.createElement(tab.Component, {
92
+ model: tab
93
+ })
94
+ })
83
95
  );
84
96
  if (tab.state.drilldowns) {
85
97
  for (const drilldown of tab.state.drilldowns) {
86
98
  routes.push(
87
- /* @__PURE__ */ React.createElement(
88
- Route,
89
- {
90
- key: drilldown.routePath,
91
- path: drilldown.routePath,
92
- element: /* @__PURE__ */ React.createElement(SceneAppDrilldownViewRender, { drilldown, parent: tab })
93
- }
94
- )
99
+ /* @__PURE__ */ React.createElement(Route, {
100
+ key: drilldown.routePath,
101
+ path: drilldown.routePath,
102
+ element: /* @__PURE__ */ React.createElement(SceneAppDrilldownViewRender, {
103
+ drilldown,
104
+ parent: tab
105
+ })
106
+ })
95
107
  );
96
108
  }
97
109
  }
@@ -100,32 +112,37 @@ function SceneAppPageRenderer({ model }) {
100
112
  if (drilldowns) {
101
113
  for (const drilldown of drilldowns) {
102
114
  routes.push(
103
- /* @__PURE__ */ React.createElement(
104
- Route,
105
- {
106
- key: drilldown.routePath,
107
- path: drilldown.routePath,
108
- Component: () => /* @__PURE__ */ React.createElement(SceneAppDrilldownViewRender, { drilldown, parent: model })
109
- }
110
- )
115
+ /* @__PURE__ */ React.createElement(Route, {
116
+ key: drilldown.routePath,
117
+ path: drilldown.routePath,
118
+ Component: () => /* @__PURE__ */ React.createElement(SceneAppDrilldownViewRender, {
119
+ drilldown,
120
+ parent: model
121
+ })
122
+ })
111
123
  );
112
124
  }
113
125
  }
114
126
  if (!tabs) {
115
- routes.push(/* @__PURE__ */ React.createElement(Route, { key: "home route", path: "/", element: /* @__PURE__ */ React.createElement(SceneAppPageView, { page: model }) }));
127
+ routes.push(/* @__PURE__ */ React.createElement(Route, {
128
+ key: "home route",
129
+ path: "/",
130
+ element: /* @__PURE__ */ React.createElement(SceneAppPageView, {
131
+ page: model
132
+ })
133
+ }));
116
134
  }
117
135
  return /* @__PURE__ */ React.createElement(Routes, null, routes);
118
136
  }
119
137
  function getFallbackRoute(page) {
120
138
  var _a, _b, _c;
121
- return /* @__PURE__ */ React.createElement(
122
- Route,
123
- {
124
- key: "fallback route",
125
- path: "*",
126
- element: /* @__PURE__ */ React.createElement(SceneAppPageView, { page: (_c = (_b = (_a = page.state).getFallbackPage) == null ? void 0 : _b.call(_a)) != null ? _c : getDefaultFallbackPage() })
127
- }
128
- );
139
+ return /* @__PURE__ */ React.createElement(Route, {
140
+ key: "fallback route",
141
+ path: "*",
142
+ element: /* @__PURE__ */ React.createElement(SceneAppPageView, {
143
+ page: (_c = (_b = (_a = page.state).getFallbackPage) == null ? void 0 : _b.call(_a)) != null ? _c : getDefaultFallbackPage()
144
+ })
145
+ });
129
146
  }
130
147
  function getDefaultFallbackPage() {
131
148
  return new SceneAppPage({
@@ -141,7 +158,9 @@ function getDefaultFallbackPage() {
141
158
  new SceneFlexItem({
142
159
  body: new SceneReactObject({
143
160
  component: () => {
144
- return /* @__PURE__ */ React.createElement("div", { "data-testid": "default-fallback-content" }, "If you found your way here using a link then there might be a bug in this application.");
161
+ return /* @__PURE__ */ React.createElement("div", {
162
+ "data-testid": "default-fallback-content"
163
+ }, "If you found your way here using a link then there might be a bug in this application.");
145
164
  }
146
165
  })
147
166
  })
@@ -1 +1 @@
1
- {"version":3,"file":"SceneAppPage.js","sources":["../../../../src/components/SceneApp/SceneAppPage.tsx"],"sourcesContent":["import React from 'react';\nimport { Route, Routes } from 'react-router-dom';\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneScopesBridge } from '../../core/SceneScopesBridge';\nimport { SceneComponentProps, SceneObject, isDataRequestEnricher } from '../../core/types';\nimport { EmbeddedScene } from '../EmbeddedScene';\nimport { SceneFlexItem, SceneFlexLayout } from '../layout/SceneFlexLayout';\nimport { SceneReactObject } from '../SceneReactObject';\nimport { SceneAppDrilldownViewRender, SceneAppPageView } from './SceneAppPageView';\nimport { SceneAppDrilldownView, SceneAppPageLike, SceneAppPageState, SceneRouteMatch } from './types';\n\n/**\n * Responsible for page's drilldown & tabs routing\n */\nexport class SceneAppPage extends SceneObjectBase<SceneAppPageState> implements SceneAppPageLike {\n public static Component = SceneAppPageRenderer;\n private _sceneCache = new Map<string, EmbeddedScene>();\n private _drilldownCache = new Map<string, SceneAppPageLike>();\n private _scopesBridge: SceneScopesBridge | undefined;\n\n public constructor(state: SceneAppPageState) {\n super(state);\n\n this.addActivationHandler(this._activationHandler);\n }\n\n private _activationHandler = () => {\n if (!this.state.useScopes) {\n return;\n }\n\n this._scopesBridge = sceneGraph.getScopesBridge(this);\n\n if (!this._scopesBridge) {\n throw new Error('Use of scopes is enabled but no scopes bridge found');\n }\n\n this._scopesBridge.setEnabled(true);\n\n return () => {\n this._scopesBridge?.setEnabled(false);\n };\n };\n\n public initializeScene(scene: EmbeddedScene) {\n this.setState({ initializedScene: scene });\n }\n\n public getScene(routeMatch: SceneRouteMatch): EmbeddedScene {\n let scene = this._sceneCache.get(routeMatch.url);\n\n if (scene) {\n return scene;\n }\n\n if (!this.state.getScene) {\n throw new Error('Missing getScene on SceneAppPage ' + this.state.title);\n }\n\n scene = this.state.getScene(routeMatch);\n this._sceneCache.set(routeMatch.url, scene);\n\n return scene;\n }\n\n public getDrilldownPage(drilldown: SceneAppDrilldownView, routeMatch: SceneRouteMatch<{}>): SceneAppPageLike {\n let page = this._drilldownCache.get(routeMatch!.url);\n if (page) {\n return page;\n }\n\n page = drilldown.getPage(routeMatch, this);\n this._drilldownCache.set(routeMatch!.url, page);\n\n return page;\n }\n\n public enrichDataRequest(source: SceneObject) {\n if (this.state.getParentPage) {\n return this.state.getParentPage().enrichDataRequest(source);\n }\n\n if (!this.parent) {\n return null;\n }\n\n const root = this.getRoot();\n\n if (isDataRequestEnricher(root)) {\n return root.enrichDataRequest(source);\n }\n\n return null;\n }\n}\nfunction SceneAppPageRenderer({ model }: SceneComponentProps<SceneAppPage>) {\n const { tabs, drilldowns } = model.useState();\n const routes: React.ReactNode[] = [];\n\n routes.push(getFallbackRoute(model));\n\n if (tabs && tabs.length > 0) {\n for (let tabIndex = 0; tabIndex < tabs.length; tabIndex++) {\n const tab = tabs[tabIndex];\n\n // Add first tab as a default route, this makes it possible for the first tab to render with the url of the parent page\n if (tabIndex === 0) {\n routes.push(<Route key={model.state.routePath} path=\"\" element={<tab.Component model={tab} />}></Route>);\n }\n\n routes.push(\n <Route key={tab.state.url} path={tab.state.routePath} element={<tab.Component model={tab} />}></Route>\n );\n\n if (tab.state.drilldowns) {\n for (const drilldown of tab.state.drilldowns) {\n routes.push(\n <Route\n key={drilldown.routePath}\n path={drilldown.routePath}\n element={<SceneAppDrilldownViewRender drilldown={drilldown} parent={tab} />}\n ></Route>\n );\n }\n }\n }\n }\n\n if (drilldowns) {\n for (const drilldown of drilldowns) {\n routes.push(\n <Route\n key={drilldown.routePath}\n path={drilldown.routePath}\n Component={() => <SceneAppDrilldownViewRender drilldown={drilldown} parent={model} />}\n ></Route>\n );\n }\n }\n\n if (!tabs) {\n routes.push(<Route key=\"home route\" path=\"/\" element={<SceneAppPageView page={model} />}></Route>);\n }\n\n return <Routes>{routes}</Routes>;\n}\n\nfunction getFallbackRoute(page: SceneAppPage) {\n return (\n <Route\n key={'fallback route'}\n path=\"*\"\n element={<SceneAppPageView page={page.state.getFallbackPage?.() ?? getDefaultFallbackPage()} />}\n ></Route>\n );\n}\n\nfunction getDefaultFallbackPage() {\n return new SceneAppPage({\n url: '',\n title: 'Not found',\n subTitle: 'The url did not match any page',\n routePath: '*',\n getScene: () => {\n return new EmbeddedScene({\n body: new SceneFlexLayout({\n direction: 'column',\n children: [\n new SceneFlexItem({\n body: new SceneReactObject({\n component: () => {\n return (\n <div data-testid=\"default-fallback-content\">\n If you found your way here using a link then there might be a bug in this application.\n </div>\n );\n },\n }),\n }),\n ],\n }),\n });\n },\n });\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SceneAppPage.js","sources":["../../../../src/components/SceneApp/SceneAppPage.tsx"],"sourcesContent":["import React from 'react';\nimport { Route, Routes } from 'react-router-dom';\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneScopesBridge } from '../../core/SceneScopesBridge';\nimport { SceneComponentProps, SceneObject, isDataRequestEnricher } from '../../core/types';\nimport { EmbeddedScene } from '../EmbeddedScene';\nimport { SceneFlexItem, SceneFlexLayout } from '../layout/SceneFlexLayout';\nimport { SceneReactObject } from '../SceneReactObject';\nimport { SceneAppDrilldownViewRender, SceneAppPageView } from './SceneAppPageView';\nimport { SceneAppDrilldownView, SceneAppPageLike, SceneAppPageState, SceneRouteMatch } from './types';\n\n/**\n * Responsible for page's drilldown & tabs routing\n */\nexport class SceneAppPage extends SceneObjectBase<SceneAppPageState> implements SceneAppPageLike {\n public static Component = SceneAppPageRenderer;\n private _sceneCache = new Map<string, EmbeddedScene>();\n private _drilldownCache = new Map<string, SceneAppPageLike>();\n private _scopesBridge: SceneScopesBridge | undefined;\n\n public constructor(state: SceneAppPageState) {\n super(state);\n\n this.addActivationHandler(this._activationHandler);\n }\n\n private _activationHandler = () => {\n if (!this.state.useScopes) {\n return;\n }\n\n this._scopesBridge = sceneGraph.getScopesBridge(this);\n\n if (!this._scopesBridge) {\n throw new Error('Use of scopes is enabled but no scopes bridge found');\n }\n\n this._scopesBridge.setEnabled(true);\n\n return () => {\n this._scopesBridge?.setEnabled(false);\n };\n };\n\n public initializeScene(scene: EmbeddedScene) {\n this.setState({ initializedScene: scene });\n }\n\n public getScene(routeMatch: SceneRouteMatch): EmbeddedScene {\n let scene = this._sceneCache.get(routeMatch.url);\n\n if (scene) {\n return scene;\n }\n\n if (!this.state.getScene) {\n throw new Error('Missing getScene on SceneAppPage ' + this.state.title);\n }\n\n scene = this.state.getScene(routeMatch);\n this._sceneCache.set(routeMatch.url, scene);\n\n return scene;\n }\n\n public getDrilldownPage(drilldown: SceneAppDrilldownView, routeMatch: SceneRouteMatch<{}>): SceneAppPageLike {\n let page = this._drilldownCache.get(routeMatch!.url);\n if (page) {\n return page;\n }\n\n page = drilldown.getPage(routeMatch, this);\n this._drilldownCache.set(routeMatch!.url, page);\n\n return page;\n }\n\n public enrichDataRequest(source: SceneObject) {\n if (this.state.getParentPage) {\n return this.state.getParentPage().enrichDataRequest(source);\n }\n\n if (!this.parent) {\n return null;\n }\n\n const root = this.getRoot();\n\n if (isDataRequestEnricher(root)) {\n return root.enrichDataRequest(source);\n }\n\n return null;\n }\n}\nfunction SceneAppPageRenderer({ model }: SceneComponentProps<SceneAppPage>) {\n const { tabs, drilldowns } = model.useState();\n const routes: React.ReactNode[] = [];\n\n routes.push(getFallbackRoute(model));\n\n if (tabs && tabs.length > 0) {\n for (let tabIndex = 0; tabIndex < tabs.length; tabIndex++) {\n const tab = tabs[tabIndex];\n\n // Add first tab as a default route, this makes it possible for the first tab to render with the url of the parent page\n if (tabIndex === 0) {\n routes.push(<Route key={model.state.routePath} path=\"\" element={<tab.Component model={tab} />}></Route>);\n }\n\n routes.push(\n <Route key={tab.state.url} path={tab.state.routePath} element={<tab.Component model={tab} />}></Route>\n );\n\n if (tab.state.drilldowns) {\n for (const drilldown of tab.state.drilldowns) {\n routes.push(\n <Route\n key={drilldown.routePath}\n path={drilldown.routePath}\n element={<SceneAppDrilldownViewRender drilldown={drilldown} parent={tab} />}\n ></Route>\n );\n }\n }\n }\n }\n\n if (drilldowns) {\n for (const drilldown of drilldowns) {\n routes.push(\n <Route\n key={drilldown.routePath}\n path={drilldown.routePath}\n Component={() => <SceneAppDrilldownViewRender drilldown={drilldown} parent={model} />}\n ></Route>\n );\n }\n }\n\n if (!tabs) {\n routes.push(<Route key=\"home route\" path=\"/\" element={<SceneAppPageView page={model} />}></Route>);\n }\n\n return <Routes>{routes}</Routes>;\n}\n\nfunction getFallbackRoute(page: SceneAppPage) {\n return (\n <Route\n key={'fallback route'}\n path=\"*\"\n element={<SceneAppPageView page={page.state.getFallbackPage?.() ?? getDefaultFallbackPage()} />}\n ></Route>\n );\n}\n\nfunction getDefaultFallbackPage() {\n return new SceneAppPage({\n url: '',\n title: 'Not found',\n subTitle: 'The url did not match any page',\n routePath: '*',\n getScene: () => {\n return new EmbeddedScene({\n body: new SceneFlexLayout({\n direction: 'column',\n children: [\n new SceneFlexItem({\n body: new SceneReactObject({\n component: () => {\n return (\n <div data-testid=\"default-fallback-content\">\n If you found your way here using a link then there might be a bug in this application.\n </div>\n );\n },\n }),\n }),\n ],\n }),\n });\n },\n });\n}\n"],"names":[],"mappings":"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"}
@@ -55,22 +55,26 @@ function SceneAppPageView({ page }) {
55
55
  }
56
56
  let pageActions = [];
57
57
  if (containerState.controls) {
58
- pageActions = containerState.controls.map((control) => /* @__PURE__ */ React.createElement(control.Component, { model: control, key: control.state.key }));
58
+ pageActions = containerState.controls.map((control) => /* @__PURE__ */ React.createElement(control.Component, {
59
+ model: control,
60
+ key: control.state.key
61
+ }));
59
62
  }
60
63
  if (params["scene-debugger"]) {
61
- pageActions.push(/* @__PURE__ */ React.createElement(SceneDebugger, { scene: containerPage, key: "scene-debugger" }));
64
+ pageActions.push(/* @__PURE__ */ React.createElement(SceneDebugger, {
65
+ scene: containerPage,
66
+ key: "scene-debugger"
67
+ }));
62
68
  }
63
- return /* @__PURE__ */ React.createElement(
64
- PluginPage,
65
- {
66
- layout,
67
- pageNav,
68
- actions: pageActions,
69
- renderTitle: containerState.renderTitle,
70
- subTitle: containerState.subTitle
71
- },
72
- /* @__PURE__ */ React.createElement(scene.Component, { model: scene })
73
- );
69
+ return /* @__PURE__ */ React.createElement(PluginPage, {
70
+ layout,
71
+ pageNav,
72
+ actions: pageActions,
73
+ renderTitle: containerState.renderTitle,
74
+ subTitle: containerState.subTitle
75
+ }, /* @__PURE__ */ React.createElement(scene.Component, {
76
+ model: scene
77
+ }));
74
78
  }
75
79
  function getParentPageIfTab(page) {
76
80
  if (page.parent instanceof SceneAppPage) {
@@ -96,7 +100,9 @@ function getParentBreadcrumbs(parent, params, searchObject) {
96
100
  function SceneAppDrilldownViewRender({ drilldown, parent }) {
97
101
  const routeMatch = useSceneRouteMatch(drilldown.routePath);
98
102
  const page = parent.getDrilldownPage(drilldown, routeMatch);
99
- return /* @__PURE__ */ React.createElement(page.Component, { model: page });
103
+ return /* @__PURE__ */ React.createElement(page.Component, {
104
+ model: page
105
+ });
100
106
  }
101
107
 
102
108
  export { SceneAppDrilldownViewRender, SceneAppPageView };
@@ -1 +1 @@
1
- {"version":3,"file":"SceneAppPageView.js","sources":["../../../../src/components/SceneApp/SceneAppPageView.tsx"],"sourcesContent":["import { NavModelItem, UrlQueryMap } from '@grafana/data';\nimport { PluginPage } from '@grafana/runtime';\nimport React, { useContext, useEffect, useLayoutEffect } from 'react';\n\nimport { SceneObject } from '../../core/types';\nimport { SceneDebugger } from '../SceneDebugger/SceneDebugger';\nimport { SceneAppPage } from './SceneAppPage';\nimport { SceneAppDrilldownView, SceneAppPageLike } from './types';\nimport { getUrlWithAppState, useAppQueryParams, useSceneRouteMatch } from './utils';\nimport { useUrlSync } from '../../services/useUrlSync';\nimport { SceneAppContext } from './SceneApp';\nimport { useLocationServiceSafe } from '../../utils/utils';\n\nexport interface Props {\n page: SceneAppPageLike;\n}\n\nexport function SceneAppPageView({ page }: Props) {\n const routeMatch = useSceneRouteMatch(page.state.url);\n const containerPage = getParentPageIfTab(page);\n const containerState = containerPage.useState();\n const params = useAppQueryParams();\n const scene = page.getScene(routeMatch);\n const appContext = useContext(SceneAppContext);\n const isInitialized = containerState.initializedScene === scene;\n const { layout } = page.state;\n const locationService = useLocationServiceSafe();\n\n useLayoutEffect(() => {\n // Before rendering scene components, we are making sure the URL sync is enabled for.\n if (!isInitialized) {\n containerPage.initializeScene(scene);\n }\n }, [scene, containerPage, isInitialized]);\n\n useEffect(() => {\n // Clear initializedScene when unmounting\n return () => containerPage.setState({ initializedScene: undefined });\n }, [containerPage]);\n\n const urlSyncInitialized = useUrlSync(containerPage, appContext?.state.urlSyncOptions);\n\n if (!isInitialized && !urlSyncInitialized) {\n return null;\n }\n\n const pageNav: NavModelItem = {\n text: containerState.title,\n img: containerState.titleImg,\n icon: containerState.titleIcon,\n url: getUrlWithAppState(containerState.url, locationService.getSearchObject(), containerState.preserveUrlKeys),\n hideFromBreadcrumbs: containerState.hideFromBreadcrumbs,\n parentItem: getParentBreadcrumbs(\n containerState.getParentPage ? containerState.getParentPage() : containerPage.parent,\n params,\n locationService.getSearchObject()\n ),\n };\n\n if (containerState.tabs) {\n pageNav.children = containerState.tabs.map((tab) => {\n return {\n text: tab.state.title,\n icon: tab.state.titleIcon,\n tabSuffix: tab.state.tabSuffix,\n active: page === tab,\n url: getUrlWithAppState(tab.state.url, locationService.getSearchObject(), tab.state.preserveUrlKeys),\n parentItem: pageNav,\n };\n });\n }\n\n let pageActions: React.ReactNode[] = [];\n if (containerState.controls) {\n pageActions = containerState.controls.map((control) => (\n <control.Component model={control} key={control.state.key} />\n ));\n }\n\n if (params['scene-debugger']) {\n pageActions.push(<SceneDebugger scene={containerPage} key={'scene-debugger'} />);\n }\n\n return (\n <PluginPage\n layout={layout}\n pageNav={pageNav}\n actions={pageActions}\n renderTitle={containerState.renderTitle}\n subTitle={containerState.subTitle}\n >\n <scene.Component model={scene} />\n </PluginPage>\n );\n}\n\n/**\n * For pages that are \"tabs\" this will return the parent page\n */\nfunction getParentPageIfTab(page: SceneAppPageLike) {\n if (page.parent instanceof SceneAppPage) {\n return page.parent;\n }\n\n return page;\n}\n\nfunction getParentBreadcrumbs(\n parent: SceneObject | undefined,\n params: UrlQueryMap,\n searchObject: UrlQueryMap\n): NavModelItem | undefined {\n if (parent instanceof SceneAppPage) {\n return {\n text: parent.state.title,\n url: getUrlWithAppState(parent.state.url, searchObject, parent.state.preserveUrlKeys),\n hideFromBreadcrumbs: parent.state.hideFromBreadcrumbs,\n parentItem: getParentBreadcrumbs(\n parent.state.getParentPage ? parent.state.getParentPage() : parent.parent,\n params,\n searchObject\n ),\n };\n }\n\n return undefined;\n}\n\nexport interface SceneAppDrilldownViewRenderProps {\n drilldown: SceneAppDrilldownView;\n parent: SceneAppPageLike;\n}\n\nexport function SceneAppDrilldownViewRender({ drilldown, parent }: SceneAppDrilldownViewRenderProps) {\n const routeMatch = useSceneRouteMatch(drilldown.routePath!);\n const page = parent.getDrilldownPage(drilldown, routeMatch);\n return <page.Component model={page} />;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SceneAppPageView.js","sources":["../../../../src/components/SceneApp/SceneAppPageView.tsx"],"sourcesContent":["import { NavModelItem, UrlQueryMap } from '@grafana/data';\nimport { PluginPage } from '@grafana/runtime';\nimport React, { useContext, useEffect, useLayoutEffect } from 'react';\n\nimport { SceneObject } from '../../core/types';\nimport { SceneDebugger } from '../SceneDebugger/SceneDebugger';\nimport { SceneAppPage } from './SceneAppPage';\nimport { SceneAppDrilldownView, SceneAppPageLike } from './types';\nimport { getUrlWithAppState, useAppQueryParams, useSceneRouteMatch } from './utils';\nimport { useUrlSync } from '../../services/useUrlSync';\nimport { SceneAppContext } from './SceneApp';\nimport { useLocationServiceSafe } from '../../utils/utils';\n\nexport interface Props {\n page: SceneAppPageLike;\n}\n\nexport function SceneAppPageView({ page }: Props) {\n const routeMatch = useSceneRouteMatch(page.state.url);\n const containerPage = getParentPageIfTab(page);\n const containerState = containerPage.useState();\n const params = useAppQueryParams();\n const scene = page.getScene(routeMatch);\n const appContext = useContext(SceneAppContext);\n const isInitialized = containerState.initializedScene === scene;\n const { layout } = page.state;\n const locationService = useLocationServiceSafe();\n\n useLayoutEffect(() => {\n // Before rendering scene components, we are making sure the URL sync is enabled for.\n if (!isInitialized) {\n containerPage.initializeScene(scene);\n }\n }, [scene, containerPage, isInitialized]);\n\n useEffect(() => {\n // Clear initializedScene when unmounting\n return () => containerPage.setState({ initializedScene: undefined });\n }, [containerPage]);\n\n const urlSyncInitialized = useUrlSync(containerPage, appContext?.state.urlSyncOptions);\n\n if (!isInitialized && !urlSyncInitialized) {\n return null;\n }\n\n const pageNav: NavModelItem = {\n text: containerState.title,\n img: containerState.titleImg,\n icon: containerState.titleIcon,\n url: getUrlWithAppState(containerState.url, locationService.getSearchObject(), containerState.preserveUrlKeys),\n hideFromBreadcrumbs: containerState.hideFromBreadcrumbs,\n parentItem: getParentBreadcrumbs(\n containerState.getParentPage ? containerState.getParentPage() : containerPage.parent,\n params,\n locationService.getSearchObject()\n ),\n };\n\n if (containerState.tabs) {\n pageNav.children = containerState.tabs.map((tab) => {\n return {\n text: tab.state.title,\n icon: tab.state.titleIcon,\n tabSuffix: tab.state.tabSuffix,\n active: page === tab,\n url: getUrlWithAppState(tab.state.url, locationService.getSearchObject(), tab.state.preserveUrlKeys),\n parentItem: pageNav,\n };\n });\n }\n\n let pageActions: React.ReactNode[] = [];\n if (containerState.controls) {\n pageActions = containerState.controls.map((control) => (\n <control.Component model={control} key={control.state.key} />\n ));\n }\n\n if (params['scene-debugger']) {\n pageActions.push(<SceneDebugger scene={containerPage} key={'scene-debugger'} />);\n }\n\n return (\n <PluginPage\n layout={layout}\n pageNav={pageNav}\n actions={pageActions}\n renderTitle={containerState.renderTitle}\n subTitle={containerState.subTitle}\n >\n <scene.Component model={scene} />\n </PluginPage>\n );\n}\n\n/**\n * For pages that are \"tabs\" this will return the parent page\n */\nfunction getParentPageIfTab(page: SceneAppPageLike) {\n if (page.parent instanceof SceneAppPage) {\n return page.parent;\n }\n\n return page;\n}\n\nfunction getParentBreadcrumbs(\n parent: SceneObject | undefined,\n params: UrlQueryMap,\n searchObject: UrlQueryMap\n): NavModelItem | undefined {\n if (parent instanceof SceneAppPage) {\n return {\n text: parent.state.title,\n url: getUrlWithAppState(parent.state.url, searchObject, parent.state.preserveUrlKeys),\n hideFromBreadcrumbs: parent.state.hideFromBreadcrumbs,\n parentItem: getParentBreadcrumbs(\n parent.state.getParentPage ? parent.state.getParentPage() : parent.parent,\n params,\n searchObject\n ),\n };\n }\n\n return undefined;\n}\n\nexport interface SceneAppDrilldownViewRenderProps {\n drilldown: SceneAppDrilldownView;\n parent: SceneAppPageLike;\n}\n\nexport function SceneAppDrilldownViewRender({ drilldown, parent }: SceneAppDrilldownViewRenderProps) {\n const routeMatch = useSceneRouteMatch(drilldown.routePath!);\n const page = parent.getDrilldownPage(drilldown, routeMatch);\n return <page.Component model={page} />;\n}\n"],"names":[],"mappings":"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"}
@@ -1,13 +1,29 @@
1
- import { useParams, useLocation, matchPath } from 'react-router-dom';
1
+ import { useLocation, useParams, matchPath } from 'react-router-dom';
2
2
  import { urlUtil, locationUtil } from '@grafana/data';
3
3
  import { locationSearchToObject } from '@grafana/runtime';
4
4
 
5
+ var __defProp = Object.defineProperty;
6
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
9
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10
+ var __spreadValues = (a, b) => {
11
+ for (var prop in b || (b = {}))
12
+ if (__hasOwnProp.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ if (__getOwnPropSymbols)
15
+ for (var prop of __getOwnPropSymbols(b)) {
16
+ if (__propIsEnum.call(b, prop))
17
+ __defNormalProp(a, prop, b[prop]);
18
+ }
19
+ return a;
20
+ };
5
21
  function useAppQueryParams() {
6
22
  const location = useLocation();
7
23
  return locationSearchToObject(location.search || "");
8
24
  }
9
25
  function getUrlWithAppState(path, searchObject, preserveParams) {
10
- const paramsCopy = { ...searchObject };
26
+ const paramsCopy = __spreadValues({}, searchObject);
11
27
  if (preserveParams) {
12
28
  for (const key of Object.keys(paramsCopy)) {
13
29
  if (!preserveParams.includes(key)) {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../src/components/SceneApp/utils.ts"],"sourcesContent":["import { matchPath, useLocation, useParams } from 'react-router-dom';\nimport { UrlQueryMap, locationUtil, urlUtil } from '@grafana/data';\nimport { locationSearchToObject } from '@grafana/runtime';\nimport { SceneRouteMatch } from './types';\n\nexport function useAppQueryParams(): UrlQueryMap {\n const location = useLocation();\n return locationSearchToObject(location.search || '');\n}\n\n/**\n *\n * @param path Url to append query params to\n * @param searchObject Query params of the URL\n * @param preserveParams Query params to preserve\n * @returns Url with query params\n */\nexport function getUrlWithAppState(path: string, searchObject: UrlQueryMap, preserveParams?: string[]): string {\n // make a copy of params as the renderUrl function mutates the object\n const paramsCopy = { ...searchObject };\n\n if (preserveParams) {\n for (const key of Object.keys(paramsCopy)) {\n // if param is not in preserveParams, remove it\n if (!preserveParams.includes(key)) {\n delete paramsCopy[key];\n }\n }\n }\n\n return urlUtil.renderUrl(locationUtil.assureBaseUrl(path), paramsCopy);\n}\n\nexport function useSceneRouteMatch(path: string) {\n const params = useParams();\n const location = useLocation();\n const isExact = matchPath(\n {\n path,\n caseSensitive: false,\n end: true,\n },\n location.pathname\n );\n\n const match: SceneRouteMatch = {\n params,\n isExact: isExact !== null,\n path: location.pathname,\n url: location.pathname,\n };\n\n return match;\n}\n"],"names":[],"mappings":";;;;AAKO,SAAS,iBAAiC,GAAA;AAC/C,EAAA,MAAM,WAAW,WAAY,EAAA;AAC7B,EAAO,OAAA,sBAAA,CAAuB,QAAS,CAAA,MAAA,IAAU,EAAE,CAAA;AACrD;AASgB,SAAA,kBAAA,CAAmB,IAAc,EAAA,YAAA,EAA2B,cAAmC,EAAA;AAE7G,EAAM,MAAA,UAAA,GAAa,EAAE,GAAG,YAAa,EAAA;AAErC,EAAA,IAAI,cAAgB,EAAA;AAClB,IAAA,KAAA,MAAW,GAAO,IAAA,MAAA,CAAO,IAAK,CAAA,UAAU,CAAG,EAAA;AAEzC,MAAA,IAAI,CAAC,cAAA,CAAe,QAAS,CAAA,GAAG,CAAG,EAAA;AACjC,QAAA,OAAO,WAAW,GAAG,CAAA;AAAA;AACvB;AACF;AAGF,EAAA,OAAO,QAAQ,SAAU,CAAA,YAAA,CAAa,aAAc,CAAA,IAAI,GAAG,UAAU,CAAA;AACvE;AAEO,SAAS,mBAAmB,IAAc,EAAA;AAC/C,EAAA,MAAM,SAAS,SAAU,EAAA;AACzB,EAAA,MAAM,WAAW,WAAY,EAAA;AAC7B,EAAA,MAAM,OAAU,GAAA,SAAA;AAAA,IACd;AAAA,MACE,IAAA;AAAA,MACA,aAAe,EAAA,KAAA;AAAA,MACf,GAAK,EAAA;AAAA,KACP;AAAA,IACA,QAAS,CAAA;AAAA,GACX;AAEA,EAAA,MAAM,KAAyB,GAAA;AAAA,IAC7B,MAAA;AAAA,IACA,SAAS,OAAY,KAAA,IAAA;AAAA,IACrB,MAAM,QAAS,CAAA,QAAA;AAAA,IACf,KAAK,QAAS,CAAA;AAAA,GAChB;AAEA,EAAO,OAAA,KAAA;AACT;;;;"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../src/components/SceneApp/utils.ts"],"sourcesContent":["import { matchPath, useLocation, useParams } from 'react-router-dom';\nimport { UrlQueryMap, locationUtil, urlUtil } from '@grafana/data';\nimport { locationSearchToObject } from '@grafana/runtime';\nimport { SceneRouteMatch } from './types';\n\nexport function useAppQueryParams(): UrlQueryMap {\n const location = useLocation();\n return locationSearchToObject(location.search || '');\n}\n\n/**\n *\n * @param path Url to append query params to\n * @param searchObject Query params of the URL\n * @param preserveParams Query params to preserve\n * @returns Url with query params\n */\nexport function getUrlWithAppState(path: string, searchObject: UrlQueryMap, preserveParams?: string[]): string {\n // make a copy of params as the renderUrl function mutates the object\n const paramsCopy = { ...searchObject };\n\n if (preserveParams) {\n for (const key of Object.keys(paramsCopy)) {\n // if param is not in preserveParams, remove it\n if (!preserveParams.includes(key)) {\n delete paramsCopy[key];\n }\n }\n }\n\n return urlUtil.renderUrl(locationUtil.assureBaseUrl(path), paramsCopy);\n}\n\nexport function useSceneRouteMatch(path: string) {\n const params = useParams();\n const location = useLocation();\n const isExact = matchPath(\n {\n path,\n caseSensitive: false,\n end: true,\n },\n location.pathname\n );\n\n const match: SceneRouteMatch = {\n params,\n isExact: isExact !== null,\n path: location.pathname,\n url: location.pathname,\n };\n\n return match;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAKO,SAAS,iBAAiC,GAAA;AAC/C,EAAA,MAAM,WAAW,WAAY,EAAA,CAAA;AAC7B,EAAO,OAAA,sBAAA,CAAuB,QAAS,CAAA,MAAA,IAAU,EAAE,CAAA,CAAA;AACrD,CAAA;AASgB,SAAA,kBAAA,CAAmB,IAAc,EAAA,YAAA,EAA2B,cAAmC,EAAA;AAE7G,EAAA,MAAM,aAAa,cAAK,CAAA,EAAA,EAAA,YAAA,CAAA,CAAA;AAExB,EAAA,IAAI,cAAgB,EAAA;AAClB,IAAA,KAAA,MAAW,GAAO,IAAA,MAAA,CAAO,IAAK,CAAA,UAAU,CAAG,EAAA;AAEzC,MAAA,IAAI,CAAC,cAAA,CAAe,QAAS,CAAA,GAAG,CAAG,EAAA;AACjC,QAAA,OAAO,UAAW,CAAA,GAAA,CAAA,CAAA;AAAA,OACpB;AAAA,KACF;AAAA,GACF;AAEA,EAAA,OAAO,QAAQ,SAAU,CAAA,YAAA,CAAa,aAAc,CAAA,IAAI,GAAG,UAAU,CAAA,CAAA;AACvE,CAAA;AAEO,SAAS,mBAAmB,IAAc,EAAA;AAC/C,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAA,MAAM,WAAW,WAAY,EAAA,CAAA;AAC7B,EAAA,MAAM,OAAU,GAAA,SAAA;AAAA,IACd;AAAA,MACE,IAAA;AAAA,MACA,aAAe,EAAA,KAAA;AAAA,MACf,GAAK,EAAA,IAAA;AAAA,KACP;AAAA,IACA,QAAS,CAAA,QAAA;AAAA,GACX,CAAA;AAEA,EAAA,MAAM,KAAyB,GAAA;AAAA,IAC7B,MAAA;AAAA,IACA,SAAS,OAAY,KAAA,IAAA;AAAA,IACrB,MAAM,QAAS,CAAA,QAAA;AAAA,IACf,KAAK,QAAS,CAAA,QAAA;AAAA,GAChB,CAAA;AAEA,EAAO,OAAA,KAAA,CAAA;AACT;;;;"}
@@ -32,7 +32,9 @@ class SceneByFrameRepeater extends SceneObjectBase {
32
32
  }
33
33
  SceneByFrameRepeater.Component = ({ model }) => {
34
34
  const { body } = model.useState();
35
- return /* @__PURE__ */ React.createElement(body.Component, { model: body });
35
+ return /* @__PURE__ */ React.createElement(body.Component, {
36
+ model: body
37
+ });
36
38
  };
37
39
 
38
40
  export { SceneByFrameRepeater };
@@ -1 +1 @@
1
- {"version":3,"file":"SceneByFrameRepeater.js","sources":["../../../src/components/SceneByFrameRepeater.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LoadingState, PanelData, DataFrame } from '@grafana/data';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneComponentProps, SceneLayout, SceneObject, SceneObjectState } from '../core/types';\n\ninterface SceneByFrameRepeaterState extends SceneObjectState {\n body: SceneLayout;\n getLayoutChild(data: PanelData, frame: DataFrame, frameIndex: number): SceneObject;\n}\n\nexport class SceneByFrameRepeater extends SceneObjectBase<SceneByFrameRepeaterState> {\n public constructor(state: SceneByFrameRepeaterState) {\n super(state);\n\n this.addActivationHandler(() => {\n const dataProvider = sceneGraph.getData(this);\n\n this._subs.add(\n dataProvider.subscribeToState((data) => {\n if (data.data?.state === LoadingState.Done) {\n this.performRepeat(data.data);\n }\n })\n );\n\n if (dataProvider.state.data) {\n this.performRepeat(dataProvider.state.data);\n }\n });\n }\n\n private performRepeat(data: PanelData) {\n const newChildren: SceneObject[] = [];\n\n for (let seriesIndex = 0; seriesIndex < data.series.length; seriesIndex++) {\n const layoutChild = this.state.getLayoutChild(data, data.series[seriesIndex], seriesIndex);\n newChildren.push(layoutChild);\n }\n\n this.state.body.setState({ children: newChildren });\n }\n\n public static Component = ({ model }: SceneComponentProps<SceneByFrameRepeater>) => {\n const { body } = model.useState();\n return <body.Component model={body} />;\n };\n}\n"],"names":[],"mappings":";;;;;AAaO,MAAM,6BAA6B,eAA2C,CAAA;AAAA,EAC5E,YAAY,KAAkC,EAAA;AACnD,IAAA,KAAA,CAAM,KAAK,CAAA;AAEX,IAAA,IAAA,CAAK,qBAAqB,MAAM;AAC9B,MAAM,MAAA,YAAA,GAAe,UAAW,CAAA,OAAA,CAAQ,IAAI,CAAA;AAE5C,MAAA,IAAA,CAAK,KAAM,CAAA,GAAA;AAAA,QACT,YAAA,CAAa,gBAAiB,CAAA,CAAC,IAAS,KAAA;AArBhD,UAAA,IAAA,EAAA;AAsBU,UAAA,IAAA,CAAA,CAAI,EAAK,GAAA,IAAA,CAAA,IAAA,KAAL,IAAW,GAAA,MAAA,GAAA,EAAA,CAAA,KAAA,MAAU,aAAa,IAAM,EAAA;AAC1C,YAAK,IAAA,CAAA,aAAA,CAAc,KAAK,IAAI,CAAA;AAAA;AAC9B,SACD;AAAA,OACH;AAEA,MAAI,IAAA,YAAA,CAAa,MAAM,IAAM,EAAA;AAC3B,QAAK,IAAA,CAAA,aAAA,CAAc,YAAa,CAAA,KAAA,CAAM,IAAI,CAAA;AAAA;AAC5C,KACD,CAAA;AAAA;AACH,EAEQ,cAAc,IAAiB,EAAA;AACrC,IAAA,MAAM,cAA6B,EAAC;AAEpC,IAAA,KAAA,IAAS,cAAc,CAAG,EAAA,WAAA,GAAc,IAAK,CAAA,MAAA,CAAO,QAAQ,WAAe,EAAA,EAAA;AACzE,MAAM,MAAA,WAAA,GAAc,KAAK,KAAM,CAAA,cAAA,CAAe,MAAM,IAAK,CAAA,MAAA,CAAO,WAAW,CAAA,EAAG,WAAW,CAAA;AACzF,MAAA,WAAA,CAAY,KAAK,WAAW,CAAA;AAAA;AAG9B,IAAA,IAAA,CAAK,MAAM,IAAK,CAAA,QAAA,CAAS,EAAE,QAAA,EAAU,aAAa,CAAA;AAAA;AAOtD;AApCa,oBAAA,CAgCG,SAAY,GAAA,CAAC,EAAE,KAAA,EAAuD,KAAA;AAClF,EAAA,MAAM,EAAE,IAAA,EAAS,GAAA,KAAA,CAAM,QAAS,EAAA;AAChC,EAAA,uBAAQ,KAAA,CAAA,aAAA,CAAA,IAAA,CAAK,SAAL,EAAA,EAAe,OAAO,IAAM,EAAA,CAAA;AACtC,CAAA;;;;"}
1
+ {"version":3,"file":"SceneByFrameRepeater.js","sources":["../../../src/components/SceneByFrameRepeater.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LoadingState, PanelData, DataFrame } from '@grafana/data';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneComponentProps, SceneLayout, SceneObject, SceneObjectState } from '../core/types';\n\ninterface SceneByFrameRepeaterState extends SceneObjectState {\n body: SceneLayout;\n getLayoutChild(data: PanelData, frame: DataFrame, frameIndex: number): SceneObject;\n}\n\nexport class SceneByFrameRepeater extends SceneObjectBase<SceneByFrameRepeaterState> {\n public constructor(state: SceneByFrameRepeaterState) {\n super(state);\n\n this.addActivationHandler(() => {\n const dataProvider = sceneGraph.getData(this);\n\n this._subs.add(\n dataProvider.subscribeToState((data) => {\n if (data.data?.state === LoadingState.Done) {\n this.performRepeat(data.data);\n }\n })\n );\n\n if (dataProvider.state.data) {\n this.performRepeat(dataProvider.state.data);\n }\n });\n }\n\n private performRepeat(data: PanelData) {\n const newChildren: SceneObject[] = [];\n\n for (let seriesIndex = 0; seriesIndex < data.series.length; seriesIndex++) {\n const layoutChild = this.state.getLayoutChild(data, data.series[seriesIndex], seriesIndex);\n newChildren.push(layoutChild);\n }\n\n this.state.body.setState({ children: newChildren });\n }\n\n public static Component = ({ model }: SceneComponentProps<SceneByFrameRepeater>) => {\n const { body } = model.useState();\n return <body.Component model={body} />;\n };\n}\n"],"names":[],"mappings":";;;;;AAaO,MAAM,6BAA6B,eAA2C,CAAA;AAAA,EAC5E,YAAY,KAAkC,EAAA;AACnD,IAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AAEX,IAAA,IAAA,CAAK,qBAAqB,MAAM;AAC9B,MAAM,MAAA,YAAA,GAAe,UAAW,CAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAE5C,MAAA,IAAA,CAAK,KAAM,CAAA,GAAA;AAAA,QACT,YAAA,CAAa,gBAAiB,CAAA,CAAC,IAAS,KAAA;AArBhD,UAAA,IAAA,EAAA,CAAA;AAsBU,UAAA,IAAA,CAAA,CAAI,EAAK,GAAA,IAAA,CAAA,IAAA,KAAL,IAAW,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,MAAU,aAAa,IAAM,EAAA;AAC1C,YAAK,IAAA,CAAA,aAAA,CAAc,KAAK,IAAI,CAAA,CAAA;AAAA,WAC9B;AAAA,SACD,CAAA;AAAA,OACH,CAAA;AAEA,MAAI,IAAA,YAAA,CAAa,MAAM,IAAM,EAAA;AAC3B,QAAK,IAAA,CAAA,aAAA,CAAc,YAAa,CAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAAA,OAC5C;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAAA,EAEQ,cAAc,IAAiB,EAAA;AACrC,IAAA,MAAM,cAA6B,EAAC,CAAA;AAEpC,IAAA,KAAA,IAAS,cAAc,CAAG,EAAA,WAAA,GAAc,IAAK,CAAA,MAAA,CAAO,QAAQ,WAAe,EAAA,EAAA;AACzE,MAAM,MAAA,WAAA,GAAc,KAAK,KAAM,CAAA,cAAA,CAAe,MAAM,IAAK,CAAA,MAAA,CAAO,cAAc,WAAW,CAAA,CAAA;AACzF,MAAA,WAAA,CAAY,KAAK,WAAW,CAAA,CAAA;AAAA,KAC9B;AAEA,IAAA,IAAA,CAAK,MAAM,IAAK,CAAA,QAAA,CAAS,EAAE,QAAA,EAAU,aAAa,CAAA,CAAA;AAAA,GACpD;AAMF,CAAA;AApCa,oBAAA,CAgCG,SAAY,GAAA,CAAC,EAAE,KAAA,EAAuD,KAAA;AAClF,EAAA,MAAM,EAAE,IAAA,EAAS,GAAA,KAAA,CAAM,QAAS,EAAA,CAAA;AAChC,EAAO,uBAAA,KAAA,CAAA,aAAA,CAAC,KAAK,SAAL,EAAA;AAAA,IAAe,KAAO,EAAA,IAAA;AAAA,GAAM,CAAA,CAAA;AACtC,CAAA;;;;"}
@@ -36,7 +36,9 @@ class SceneByVariableRepeater extends SceneObjectBase {
36
36
  }
37
37
  SceneByVariableRepeater.Component = ({ model }) => {
38
38
  const { body } = model.useState();
39
- return /* @__PURE__ */ React.createElement(body.Component, { model: body });
39
+ return /* @__PURE__ */ React.createElement(body.Component, {
40
+ model: body
41
+ });
40
42
  };
41
43
  function getMultiVariableValues(variable) {
42
44
  const { value, text, options } = variable.state;
@@ -1 +1 @@
1
- {"version":3,"file":"SceneByVariableRepeater.js","sources":["../../../src/components/SceneByVariableRepeater.tsx"],"sourcesContent":["import React from 'react';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneComponentProps, SceneLayout, SceneObject, SceneObjectState } from '../core/types';\nimport { VariableDependencyConfig } from '../variables/VariableDependencyConfig';\nimport { VariableValueOption } from '../variables/types';\nimport { MultiValueVariable } from '../variables/variants/MultiValueVariable';\n\ninterface SceneByVariableRepeaterState extends SceneObjectState {\n body: SceneLayout;\n variableName: string;\n getLayoutChild(option: VariableValueOption): SceneObject;\n}\n\nexport class SceneByVariableRepeater extends SceneObjectBase<SceneByVariableRepeaterState> {\n protected _variableDependency: VariableDependencyConfig<SceneByVariableRepeaterState> = new VariableDependencyConfig(\n this,\n {\n variableNames: [this.state.variableName],\n onVariableUpdateCompleted: () => this.performRepeat(),\n }\n );\n\n public constructor(state: SceneByVariableRepeaterState) {\n super(state);\n\n this.addActivationHandler(() => this.performRepeat());\n }\n\n private performRepeat() {\n if (this._variableDependency.hasDependencyInLoadingState()) {\n return;\n }\n\n const variable = sceneGraph.lookupVariable(this.state.variableName, this);\n if (!(variable instanceof MultiValueVariable)) {\n console.error('SceneByVariableRepeater: variable is not a MultiValueVariable');\n return;\n }\n\n const values = getMultiVariableValues(variable);\n const newChildren: SceneObject[] = [];\n\n for (const option of values) {\n const layoutChild = this.state.getLayoutChild(option);\n newChildren.push(layoutChild);\n }\n\n this.state.body.setState({ children: newChildren });\n }\n\n public static Component = ({ model }: SceneComponentProps<SceneByVariableRepeater>) => {\n const { body } = model.useState();\n return <body.Component model={body} />;\n };\n}\n\nexport function getMultiVariableValues(variable: MultiValueVariable): VariableValueOption[] {\n const { value, text, options } = variable.state;\n\n if (variable.hasAllValue()) {\n return options;\n }\n\n if (Array.isArray(value) && Array.isArray(text)) {\n return value.map((v, i) => ({ value: v, label: text[i] as string }));\n }\n\n return [{ value: value as string, label: text as string }];\n}\n"],"names":[],"mappings":";;;;;;AAeO,MAAM,gCAAgC,eAA8C,CAAA;AAAA,EASlF,YAAY,KAAqC,EAAA;AACtD,IAAA,KAAA,CAAM,KAAK,CAAA;AATb,IAAA,IAAA,CAAU,sBAA8E,IAAI,wBAAA;AAAA,MAC1F,IAAA;AAAA,MACA;AAAA,QACE,aAAe,EAAA,CAAC,IAAK,CAAA,KAAA,CAAM,YAAY,CAAA;AAAA,QACvC,yBAAA,EAA2B,MAAM,IAAA,CAAK,aAAc;AAAA;AACtD,KACF;AAKE,IAAA,IAAA,CAAK,oBAAqB,CAAA,MAAM,IAAK,CAAA,aAAA,EAAe,CAAA;AAAA;AACtD,EAEQ,aAAgB,GAAA;AACtB,IAAI,IAAA,IAAA,CAAK,mBAAoB,CAAA,2BAAA,EAA+B,EAAA;AAC1D,MAAA;AAAA;AAGF,IAAA,MAAM,WAAW,UAAW,CAAA,cAAA,CAAe,IAAK,CAAA,KAAA,CAAM,cAAc,IAAI,CAAA;AACxE,IAAI,IAAA,EAAE,oBAAoB,kBAAqB,CAAA,EAAA;AAC7C,MAAA,OAAA,CAAQ,MAAM,+DAA+D,CAAA;AAC7E,MAAA;AAAA;AAGF,IAAM,MAAA,MAAA,GAAS,uBAAuB,QAAQ,CAAA;AAC9C,IAAA,MAAM,cAA6B,EAAC;AAEpC,IAAA,KAAA,MAAW,UAAU,MAAQ,EAAA;AAC3B,MAAA,MAAM,WAAc,GAAA,IAAA,CAAK,KAAM,CAAA,cAAA,CAAe,MAAM,CAAA;AACpD,MAAA,WAAA,CAAY,KAAK,WAAW,CAAA;AAAA;AAG9B,IAAA,IAAA,CAAK,MAAM,IAAK,CAAA,QAAA,CAAS,EAAE,QAAA,EAAU,aAAa,CAAA;AAAA;AAOtD;AAzCa,uBAAA,CAqCG,SAAY,GAAA,CAAC,EAAE,KAAA,EAA0D,KAAA;AACrF,EAAA,MAAM,EAAE,IAAA,EAAS,GAAA,KAAA,CAAM,QAAS,EAAA;AAChC,EAAA,uBAAQ,KAAA,CAAA,aAAA,CAAA,IAAA,CAAK,SAAL,EAAA,EAAe,OAAO,IAAM,EAAA,CAAA;AACtC,CAAA;AAGK,SAAS,uBAAuB,QAAqD,EAAA;AAC1F,EAAA,MAAM,EAAE,KAAA,EAAO,IAAM,EAAA,OAAA,KAAY,QAAS,CAAA,KAAA;AAE1C,EAAI,IAAA,QAAA,CAAS,aAAe,EAAA;AAC1B,IAAO,OAAA,OAAA;AAAA;AAGT,EAAA,IAAI,MAAM,OAAQ,CAAA,KAAK,KAAK,KAAM,CAAA,OAAA,CAAQ,IAAI,CAAG,EAAA;AAC/C,IAAA,OAAO,KAAM,CAAA,GAAA,CAAI,CAAC,CAAA,EAAG,CAAO,MAAA,EAAE,KAAO,EAAA,CAAA,EAAG,KAAO,EAAA,IAAA,CAAK,CAAC,CAAA,EAAc,CAAA,CAAA;AAAA;AAGrE,EAAA,OAAO,CAAC,EAAE,KAAwB,EAAA,KAAA,EAAO,MAAgB,CAAA;AAC3D;;;;"}
1
+ {"version":3,"file":"SceneByVariableRepeater.js","sources":["../../../src/components/SceneByVariableRepeater.tsx"],"sourcesContent":["import React from 'react';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneComponentProps, SceneLayout, SceneObject, SceneObjectState } from '../core/types';\nimport { VariableDependencyConfig } from '../variables/VariableDependencyConfig';\nimport { VariableValueOption } from '../variables/types';\nimport { MultiValueVariable } from '../variables/variants/MultiValueVariable';\n\ninterface SceneByVariableRepeaterState extends SceneObjectState {\n body: SceneLayout;\n variableName: string;\n getLayoutChild(option: VariableValueOption): SceneObject;\n}\n\nexport class SceneByVariableRepeater extends SceneObjectBase<SceneByVariableRepeaterState> {\n protected _variableDependency: VariableDependencyConfig<SceneByVariableRepeaterState> = new VariableDependencyConfig(\n this,\n {\n variableNames: [this.state.variableName],\n onVariableUpdateCompleted: () => this.performRepeat(),\n }\n );\n\n public constructor(state: SceneByVariableRepeaterState) {\n super(state);\n\n this.addActivationHandler(() => this.performRepeat());\n }\n\n private performRepeat() {\n if (this._variableDependency.hasDependencyInLoadingState()) {\n return;\n }\n\n const variable = sceneGraph.lookupVariable(this.state.variableName, this);\n if (!(variable instanceof MultiValueVariable)) {\n console.error('SceneByVariableRepeater: variable is not a MultiValueVariable');\n return;\n }\n\n const values = getMultiVariableValues(variable);\n const newChildren: SceneObject[] = [];\n\n for (const option of values) {\n const layoutChild = this.state.getLayoutChild(option);\n newChildren.push(layoutChild);\n }\n\n this.state.body.setState({ children: newChildren });\n }\n\n public static Component = ({ model }: SceneComponentProps<SceneByVariableRepeater>) => {\n const { body } = model.useState();\n return <body.Component model={body} />;\n };\n}\n\nexport function getMultiVariableValues(variable: MultiValueVariable): VariableValueOption[] {\n const { value, text, options } = variable.state;\n\n if (variable.hasAllValue()) {\n return options;\n }\n\n if (Array.isArray(value) && Array.isArray(text)) {\n return value.map((v, i) => ({ value: v, label: text[i] as string }));\n }\n\n return [{ value: value as string, label: text as string }];\n}\n"],"names":[],"mappings":";;;;;;AAeO,MAAM,gCAAgC,eAA8C,CAAA;AAAA,EASlF,YAAY,KAAqC,EAAA;AACtD,IAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AATb,IAAA,IAAA,CAAU,sBAA8E,IAAI,wBAAA;AAAA,MAC1F,IAAA;AAAA,MACA;AAAA,QACE,aAAe,EAAA,CAAC,IAAK,CAAA,KAAA,CAAM,YAAY,CAAA;AAAA,QACvC,yBAAA,EAA2B,MAAM,IAAA,CAAK,aAAc,EAAA;AAAA,OACtD;AAAA,KACF,CAAA;AAKE,IAAA,IAAA,CAAK,oBAAqB,CAAA,MAAM,IAAK,CAAA,aAAA,EAAe,CAAA,CAAA;AAAA,GACtD;AAAA,EAEQ,aAAgB,GAAA;AACtB,IAAI,IAAA,IAAA,CAAK,mBAAoB,CAAA,2BAAA,EAA+B,EAAA;AAC1D,MAAA,OAAA;AAAA,KACF;AAEA,IAAA,MAAM,WAAW,UAAW,CAAA,cAAA,CAAe,IAAK,CAAA,KAAA,CAAM,cAAc,IAAI,CAAA,CAAA;AACxE,IAAI,IAAA,EAAE,oBAAoB,kBAAqB,CAAA,EAAA;AAC7C,MAAA,OAAA,CAAQ,MAAM,+DAA+D,CAAA,CAAA;AAC7E,MAAA,OAAA;AAAA,KACF;AAEA,IAAM,MAAA,MAAA,GAAS,uBAAuB,QAAQ,CAAA,CAAA;AAC9C,IAAA,MAAM,cAA6B,EAAC,CAAA;AAEpC,IAAA,KAAA,MAAW,UAAU,MAAQ,EAAA;AAC3B,MAAA,MAAM,WAAc,GAAA,IAAA,CAAK,KAAM,CAAA,cAAA,CAAe,MAAM,CAAA,CAAA;AACpD,MAAA,WAAA,CAAY,KAAK,WAAW,CAAA,CAAA;AAAA,KAC9B;AAEA,IAAA,IAAA,CAAK,MAAM,IAAK,CAAA,QAAA,CAAS,EAAE,QAAA,EAAU,aAAa,CAAA,CAAA;AAAA,GACpD;AAMF,CAAA;AAzCa,uBAAA,CAqCG,SAAY,GAAA,CAAC,EAAE,KAAA,EAA0D,KAAA;AACrF,EAAA,MAAM,EAAE,IAAA,EAAS,GAAA,KAAA,CAAM,QAAS,EAAA,CAAA;AAChC,EAAO,uBAAA,KAAA,CAAA,aAAA,CAAC,KAAK,SAAL,EAAA;AAAA,IAAe,KAAO,EAAA,IAAA;AAAA,GAAM,CAAA,CAAA;AACtC,CAAA,CAAA;AAGK,SAAS,uBAAuB,QAAqD,EAAA;AAC1F,EAAA,MAAM,EAAE,KAAA,EAAO,IAAM,EAAA,OAAA,KAAY,QAAS,CAAA,KAAA,CAAA;AAE1C,EAAI,IAAA,QAAA,CAAS,aAAe,EAAA;AAC1B,IAAO,OAAA,OAAA,CAAA;AAAA,GACT;AAEA,EAAA,IAAI,MAAM,OAAQ,CAAA,KAAK,KAAK,KAAM,CAAA,OAAA,CAAQ,IAAI,CAAG,EAAA;AAC/C,IAAO,OAAA,KAAA,CAAM,GAAI,CAAA,CAAC,CAAG,EAAA,CAAA,MAAO,EAAE,KAAA,EAAO,CAAG,EAAA,KAAA,EAAO,IAAK,CAAA,CAAA,CAAA,EAAe,CAAA,CAAA,CAAA;AAAA,GACrE;AAEA,EAAA,OAAO,CAAC,EAAE,KAAwB,EAAA,KAAA,EAAO,MAAgB,CAAA,CAAA;AAC3D;;;;"}
@@ -22,7 +22,10 @@ SceneCanvasText.Component = ({ model }) => {
22
22
  padding: spacing ? theme.spacing(spacing, 0) : void 0,
23
23
  justifyContent: align
24
24
  });
25
- return /* @__PURE__ */ React.createElement("div", { className: style, "data-testid": key }, sceneGraph.interpolate(model, text));
25
+ return /* @__PURE__ */ React.createElement("div", {
26
+ className: style,
27
+ "data-testid": key
28
+ }, sceneGraph.interpolate(model, text));
26
29
  };
27
30
 
28
31
  export { SceneCanvasText };
@@ -1 +1 @@
1
- {"version":3,"file":"SceneCanvasText.js","sources":["../../../src/components/SceneCanvasText.tsx"],"sourcesContent":["import React from 'react';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneComponentProps, SceneObjectState } from '../core/types';\nimport { VariableDependencyConfig } from '../variables/VariableDependencyConfig';\nimport { useTheme2 } from '@grafana/ui';\nimport { css } from '@emotion/css';\n\nexport interface SceneCanvasTextState extends SceneObjectState {\n text: string;\n fontSize?: number;\n align?: 'left' | 'center' | 'right';\n spacing?: number;\n}\n\n/**\n * Not a really useful component, just an example of how to create one\n * @internal\n */\nexport class SceneCanvasText extends SceneObjectBase<SceneCanvasTextState> {\n protected _variableDependency = new VariableDependencyConfig(this, { statePaths: ['text'] });\n\n public static Component = ({ model }: SceneComponentProps<SceneCanvasText>) => {\n const { text, fontSize = 20, align = 'left', key, spacing } = model.useState();\n const theme = useTheme2();\n\n const style = css({\n fontSize: fontSize,\n display: 'flex',\n flexGrow: 1,\n alignItems: 'center',\n padding: spacing ? theme.spacing(spacing, 0) : undefined,\n justifyContent: align,\n });\n\n return (\n <div className={style} data-testid={key}>\n {sceneGraph.interpolate(model, text)}\n </div>\n );\n };\n}\n"],"names":[],"mappings":";;;;;;;AAoBO,MAAM,wBAAwB,eAAsC,CAAA;AAAA,EAApE,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AACL,IAAU,IAAA,CAAA,mBAAA,GAAsB,IAAI,wBAAyB,CAAA,IAAA,EAAM,EAAE,UAAY,EAAA,CAAC,MAAM,CAAA,EAAG,CAAA;AAAA;AAqB7F;AAtBa,eAAA,CAGG,SAAY,GAAA,CAAC,EAAE,KAAA,EAAkD,KAAA;AAC7E,EAAM,MAAA,EAAE,IAAM,EAAA,QAAA,GAAW,EAAI,EAAA,KAAA,GAAQ,QAAQ,GAAK,EAAA,OAAA,EAAY,GAAA,KAAA,CAAM,QAAS,EAAA;AAC7E,EAAA,MAAM,QAAQ,SAAU,EAAA;AAExB,EAAA,MAAM,QAAQ,GAAI,CAAA;AAAA,IAChB,QAAA;AAAA,IACA,OAAS,EAAA,MAAA;AAAA,IACT,QAAU,EAAA,CAAA;AAAA,IACV,UAAY,EAAA,QAAA;AAAA,IACZ,SAAS,OAAU,GAAA,KAAA,CAAM,OAAQ,CAAA,OAAA,EAAS,CAAC,CAAI,GAAA,MAAA;AAAA,IAC/C,cAAgB,EAAA;AAAA,GACjB,CAAA;AAED,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,KAAO,EAAA,aAAA,EAAa,OACjC,UAAW,CAAA,WAAA,CAAY,KAAO,EAAA,IAAI,CACrC,CAAA;AAEJ,CAAA;;;;"}
1
+ {"version":3,"file":"SceneCanvasText.js","sources":["../../../src/components/SceneCanvasText.tsx"],"sourcesContent":["import React from 'react';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneComponentProps, SceneObjectState } from '../core/types';\nimport { VariableDependencyConfig } from '../variables/VariableDependencyConfig';\nimport { useTheme2 } from '@grafana/ui';\nimport { css } from '@emotion/css';\n\nexport interface SceneCanvasTextState extends SceneObjectState {\n text: string;\n fontSize?: number;\n align?: 'left' | 'center' | 'right';\n spacing?: number;\n}\n\n/**\n * Not a really useful component, just an example of how to create one\n * @internal\n */\nexport class SceneCanvasText extends SceneObjectBase<SceneCanvasTextState> {\n protected _variableDependency = new VariableDependencyConfig(this, { statePaths: ['text'] });\n\n public static Component = ({ model }: SceneComponentProps<SceneCanvasText>) => {\n const { text, fontSize = 20, align = 'left', key, spacing } = model.useState();\n const theme = useTheme2();\n\n const style = css({\n fontSize: fontSize,\n display: 'flex',\n flexGrow: 1,\n alignItems: 'center',\n padding: spacing ? theme.spacing(spacing, 0) : undefined,\n justifyContent: align,\n });\n\n return (\n <div className={style} data-testid={key}>\n {sceneGraph.interpolate(model, text)}\n </div>\n );\n };\n}\n"],"names":[],"mappings":";;;;;;;AAoBO,MAAM,wBAAwB,eAAsC,CAAA;AAAA,EAApE,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA,CAAA;AACL,IAAU,IAAA,CAAA,mBAAA,GAAsB,IAAI,wBAAyB,CAAA,IAAA,EAAM,EAAE,UAAY,EAAA,CAAC,MAAM,CAAA,EAAG,CAAA,CAAA;AAAA,GAAA;AAqB7F,CAAA;AAtBa,eAAA,CAGG,SAAY,GAAA,CAAC,EAAE,KAAA,EAAkD,KAAA;AAC7E,EAAM,MAAA,EAAE,IAAM,EAAA,QAAA,GAAW,EAAI,EAAA,KAAA,GAAQ,QAAQ,GAAK,EAAA,OAAA,EAAY,GAAA,KAAA,CAAM,QAAS,EAAA,CAAA;AAC7E,EAAA,MAAM,QAAQ,SAAU,EAAA,CAAA;AAExB,EAAA,MAAM,QAAQ,GAAI,CAAA;AAAA,IAChB,QAAA;AAAA,IACA,OAAS,EAAA,MAAA;AAAA,IACT,QAAU,EAAA,CAAA;AAAA,IACV,UAAY,EAAA,QAAA;AAAA,IACZ,SAAS,OAAU,GAAA,KAAA,CAAM,OAAQ,CAAA,OAAA,EAAS,CAAC,CAAI,GAAA,KAAA,CAAA;AAAA,IAC/C,cAAgB,EAAA,KAAA;AAAA,GACjB,CAAA,CAAA;AAED,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AAAA,IAAI,SAAW,EAAA,KAAA;AAAA,IAAO,aAAa,EAAA,GAAA;AAAA,GAAA,EACjC,UAAW,CAAA,WAAA,CAAY,KAAO,EAAA,IAAI,CACrC,CAAA,CAAA;AAEJ,CAAA;;;;"}
@@ -8,7 +8,9 @@ class SceneControlsSpacer extends SceneObjectBase {
8
8
  }
9
9
  }
10
10
  SceneControlsSpacer.Component = (_props) => {
11
- return /* @__PURE__ */ React.createElement("div", { style: { flexGrow: 1 } });
11
+ return /* @__PURE__ */ React.createElement("div", {
12
+ style: { flexGrow: 1 }
13
+ });
12
14
  };
13
15
 
14
16
  export { SceneControlsSpacer };
@@ -1 +1 @@
1
- {"version":3,"file":"SceneControlsSpacer.js","sources":["../../../src/components/SceneControlsSpacer.tsx"],"sourcesContent":["import React from 'react';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { SceneComponentProps } from '../core/types';\n\nexport class SceneControlsSpacer extends SceneObjectBase {\n public constructor() {\n super({});\n\n this._renderBeforeActivation = true;\n }\n\n public static Component = (_props: SceneComponentProps<SceneControlsSpacer>) => {\n return <div style={{ flexGrow: 1 }} />;\n };\n}\n"],"names":[],"mappings":";;;AAKO,MAAM,4BAA4B,eAAgB,CAAA;AAAA,EAChD,WAAc,GAAA;AACnB,IAAA,KAAA,CAAM,EAAE,CAAA;AAER,IAAA,IAAA,CAAK,uBAA0B,GAAA,IAAA;AAAA;AAMnC;AAVa,mBAOG,CAAA,SAAA,GAAY,CAAC,MAAqD,KAAA;AAC9E,EAAA,2CAAQ,KAAI,EAAA,EAAA,KAAA,EAAO,EAAE,QAAA,EAAU,GAAK,EAAA,CAAA;AACtC,CAAA;;;;"}
1
+ {"version":3,"file":"SceneControlsSpacer.js","sources":["../../../src/components/SceneControlsSpacer.tsx"],"sourcesContent":["import React from 'react';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { SceneComponentProps } from '../core/types';\n\nexport class SceneControlsSpacer extends SceneObjectBase {\n public constructor() {\n super({});\n\n this._renderBeforeActivation = true;\n }\n\n public static Component = (_props: SceneComponentProps<SceneControlsSpacer>) => {\n return <div style={{ flexGrow: 1 }} />;\n };\n}\n"],"names":[],"mappings":";;;AAKO,MAAM,4BAA4B,eAAgB,CAAA;AAAA,EAChD,WAAc,GAAA;AACnB,IAAA,KAAA,CAAM,EAAE,CAAA,CAAA;AAER,IAAA,IAAA,CAAK,uBAA0B,GAAA,IAAA,CAAA;AAAA,GACjC;AAKF,CAAA;AAVa,mBAOG,CAAA,SAAA,GAAY,CAAC,MAAqD,KAAA;AAC9E,EAAA,uBAAQ,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AAAA,IAAI,KAAA,EAAO,EAAE,QAAA,EAAU,CAAE,EAAA;AAAA,GAAG,CAAA,CAAA;AACtC,CAAA;;;;"}
@@ -7,7 +7,16 @@ import { isSceneObject } from '../../core/types.js';
7
7
  function DebugDetails({ node }) {
8
8
  const state = node.useState();
9
9
  const styles = useStyles2(getStyles);
10
- return /* @__PURE__ */ React.createElement("div", { className: styles.container }, Object.keys(state).map((key) => /* @__PURE__ */ React.createElement("div", { className: styles.row, key }, /* @__PURE__ */ React.createElement("div", { className: styles.keyName }, key), /* @__PURE__ */ React.createElement("div", { className: styles.value }, renderValue(key, state[key], node)))));
10
+ return /* @__PURE__ */ React.createElement("div", {
11
+ className: styles.container
12
+ }, Object.keys(state).map((key) => /* @__PURE__ */ React.createElement("div", {
13
+ className: styles.row,
14
+ key
15
+ }, /* @__PURE__ */ React.createElement("div", {
16
+ className: styles.keyName
17
+ }, key), /* @__PURE__ */ React.createElement("div", {
18
+ className: styles.value
19
+ }, renderValue(key, state[key], node)))));
11
20
  }
12
21
  function renderValue(key, value, node) {
13
22
  if (value === null) {
@@ -15,22 +24,26 @@ function renderValue(key, value, node) {
15
24
  }
16
25
  switch (typeof value) {
17
26
  case "number":
18
- return /* @__PURE__ */ React.createElement(
19
- Input,
20
- {
21
- type: "number",
22
- defaultValue: value,
23
- onBlur: (evt) => node.setState({ [key]: evt.currentTarget.valueAsNumber })
24
- }
25
- );
27
+ return /* @__PURE__ */ React.createElement(Input, {
28
+ type: "number",
29
+ defaultValue: value,
30
+ onBlur: (evt) => node.setState({ [key]: evt.currentTarget.valueAsNumber })
31
+ });
26
32
  case "string":
27
- return /* @__PURE__ */ React.createElement(Input, { type: "text", defaultValue: value, onBlur: (evt) => node.setState({ [key]: evt.currentTarget.value }) });
33
+ return /* @__PURE__ */ React.createElement(Input, {
34
+ type: "text",
35
+ defaultValue: value,
36
+ onBlur: (evt) => node.setState({ [key]: evt.currentTarget.value })
37
+ });
28
38
  case "object":
29
39
  if (isSceneObject(value)) {
30
40
  return value.constructor.name;
31
41
  }
32
42
  if (isPlainObject(value) || isArray(value)) {
33
- return /* @__PURE__ */ React.createElement(JSONFormatter, { json: value, open: 0 });
43
+ return /* @__PURE__ */ React.createElement(JSONFormatter, {
44
+ json: value,
45
+ open: 0
46
+ });
34
47
  }
35
48
  return String(value);
36
49
  default:
@@ -1 +1 @@
1
- {"version":3,"file":"DebugDetails.js","sources":["../../../../src/components/SceneDebugger/DebugDetails.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Input, JSONFormatter, useStyles2 } from '@grafana/ui';\nimport { isArray, isPlainObject } from 'lodash';\nimport React from 'react';\nimport { isSceneObject, SceneObject } from '../../core/types';\n\nexport interface Props {\n node: SceneObject;\n}\n\nexport function DebugDetails({ node }: Props) {\n const state = node.useState();\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.container}>\n {Object.keys(state).map((key) => (\n <div className={styles.row} key={key}>\n <div className={styles.keyName}>{key}</div>\n <div className={styles.value}>{renderValue(key, (state as any)[key], node)}</div>\n </div>\n ))}\n </div>\n );\n}\n\nfunction renderValue(key: string, value: any, node: SceneObject) {\n if (value === null) {\n return 'null';\n }\n\n switch (typeof value) {\n case 'number':\n return (\n <Input\n type=\"number\"\n defaultValue={value}\n onBlur={(evt) => node.setState({ [key]: evt.currentTarget.valueAsNumber })}\n />\n );\n case 'string':\n return (\n <Input type=\"text\" defaultValue={value} onBlur={(evt) => node.setState({ [key]: evt.currentTarget.value })} />\n );\n case 'object':\n if (isSceneObject(value)) {\n return value.constructor.name;\n }\n if (isPlainObject(value) || isArray(value)) {\n return <JSONFormatter json={value} open={0} />;\n }\n return String(value);\n default:\n return typeof value;\n }\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n container: css({\n flexGrow: 1,\n display: 'flex',\n gap: theme.spacing(0.5),\n flexDirection: 'column',\n }),\n row: css({\n display: 'flex',\n gap: theme.spacing(2),\n }),\n keyName: css({\n display: 'flex',\n flexGrow: '0',\n width: 120,\n alignItems: 'center',\n height: theme.spacing(theme.components.height.md),\n }),\n value: css({\n flexGrow: 1,\n minHeight: theme.spacing(theme.components.height.md),\n display: 'flex',\n alignItems: 'center',\n }),\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DebugDetails.js","sources":["../../../../src/components/SceneDebugger/DebugDetails.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Input, JSONFormatter, useStyles2 } from '@grafana/ui';\nimport { isArray, isPlainObject } from 'lodash';\nimport React from 'react';\nimport { isSceneObject, SceneObject } from '../../core/types';\n\nexport interface Props {\n node: SceneObject;\n}\n\nexport function DebugDetails({ node }: Props) {\n const state = node.useState();\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.container}>\n {Object.keys(state).map((key) => (\n <div className={styles.row} key={key}>\n <div className={styles.keyName}>{key}</div>\n <div className={styles.value}>{renderValue(key, (state as any)[key], node)}</div>\n </div>\n ))}\n </div>\n );\n}\n\nfunction renderValue(key: string, value: any, node: SceneObject) {\n if (value === null) {\n return 'null';\n }\n\n switch (typeof value) {\n case 'number':\n return (\n <Input\n type=\"number\"\n defaultValue={value}\n onBlur={(evt) => node.setState({ [key]: evt.currentTarget.valueAsNumber })}\n />\n );\n case 'string':\n return (\n <Input type=\"text\" defaultValue={value} onBlur={(evt) => node.setState({ [key]: evt.currentTarget.value })} />\n );\n case 'object':\n if (isSceneObject(value)) {\n return value.constructor.name;\n }\n if (isPlainObject(value) || isArray(value)) {\n return <JSONFormatter json={value} open={0} />;\n }\n return String(value);\n default:\n return typeof value;\n }\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n container: css({\n flexGrow: 1,\n display: 'flex',\n gap: theme.spacing(0.5),\n flexDirection: 'column',\n }),\n row: css({\n display: 'flex',\n gap: theme.spacing(2),\n }),\n keyName: css({\n display: 'flex',\n flexGrow: '0',\n width: 120,\n alignItems: 'center',\n height: theme.spacing(theme.components.height.md),\n }),\n value: css({\n flexGrow: 1,\n minHeight: theme.spacing(theme.components.height.md),\n display: 'flex',\n alignItems: 'center',\n }),\n };\n}\n"],"names":[],"mappings":"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"}
@@ -8,10 +8,22 @@ function DebugTreeNode({ node, selectedObject, onSelect }) {
8
8
  const isSelected = node === selectedObject;
9
9
  node.forEachChild((child) => {
10
10
  children.push(
11
- /* @__PURE__ */ React.createElement(DebugTreeNode, { node: child, key: child.state.key, selectedObject, onSelect })
11
+ /* @__PURE__ */ React.createElement(DebugTreeNode, {
12
+ node: child,
13
+ key: child.state.key,
14
+ selectedObject,
15
+ onSelect
16
+ })
12
17
  );
13
18
  });
14
- return /* @__PURE__ */ React.createElement("div", { className: styles.container }, /* @__PURE__ */ React.createElement("div", { className: cx(styles.name, isSelected && styles.selected), onClick: () => onSelect(node) }, node.constructor.name), /* @__PURE__ */ React.createElement("div", { className: styles.children }, children));
19
+ return /* @__PURE__ */ React.createElement("div", {
20
+ className: styles.container
21
+ }, /* @__PURE__ */ React.createElement("div", {
22
+ className: cx(styles.name, isSelected && styles.selected),
23
+ onClick: () => onSelect(node)
24
+ }, node.constructor.name), /* @__PURE__ */ React.createElement("div", {
25
+ className: styles.children
26
+ }, children));
15
27
  }
16
28
  function getStyles(theme) {
17
29
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"DebugTreeNode.js","sources":["../../../../src/components/SceneDebugger/DebugTreeNode.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport React, { ReactNode } from 'react';\nimport { SceneObject } from '../../core/types';\n\nexport interface Props {\n node: SceneObject;\n selectedObject?: SceneObject;\n onSelect: (node: SceneObject) => void;\n}\n\nexport function DebugTreeNode({ node, selectedObject, onSelect }: Props) {\n const styles = useStyles2(getStyles);\n const children: ReactNode[] = [];\n const isSelected = node === selectedObject;\n\n node.forEachChild((child) => {\n children.push(\n <DebugTreeNode node={child} key={child.state.key} selectedObject={selectedObject} onSelect={onSelect} />\n );\n });\n\n return (\n <div className={styles.container}>\n <div className={cx(styles.name, isSelected && styles.selected)} onClick={() => onSelect(node)}>\n {node.constructor.name}\n </div>\n <div className={styles.children}>{children}</div>\n </div>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n container: css({\n flexGrow: 1,\n display: 'flex',\n gap: theme.spacing(0.5),\n flexDirection: 'column',\n }),\n name: css({\n flexGrow: 1,\n display: 'flex',\n gap: theme.spacing(1),\n fontSize: theme.typography.bodySmall.fontSize,\n cursor: 'pointer',\n padding: theme.spacing(0, 1),\n borderRadius: theme.shape.borderRadius(2),\n position: 'relative',\n '&:hover': {\n background: theme.colors.background.secondary,\n },\n }),\n selected: css({\n '&::before': {\n display: 'block',\n content: \"' '\",\n position: 'absolute',\n left: 0,\n width: 4,\n bottom: 2,\n top: 2,\n borderRadius: theme.shape.radius.default,\n backgroundImage: theme.colors.gradients.brandVertical,\n },\n }),\n children: css({\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n paddingLeft: theme.spacing(1),\n }),\n };\n}\n"],"names":[],"mappings":";;;;AAYO,SAAS,aAAc,CAAA,EAAE,IAAM,EAAA,cAAA,EAAgB,UAAmB,EAAA;AACvE,EAAM,MAAA,MAAA,GAAS,WAAW,SAAS,CAAA;AACnC,EAAA,MAAM,WAAwB,EAAC;AAC/B,EAAA,MAAM,aAAa,IAAS,KAAA,cAAA;AAE5B,EAAK,IAAA,CAAA,YAAA,CAAa,CAAC,KAAU,KAAA;AAC3B,IAAS,QAAA,CAAA,IAAA;AAAA,sBACP,KAAA,CAAA,aAAA,CAAC,iBAAc,IAAM,EAAA,KAAA,EAAO,KAAK,KAAM,CAAA,KAAA,CAAM,GAAK,EAAA,cAAA,EAAgC,QAAoB,EAAA;AAAA,KACxG;AAAA,GACD,CAAA;AAED,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,MAAA,CAAO,SACrB,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,EAAG,CAAA,MAAA,CAAO,IAAM,EAAA,UAAA,IAAc,OAAO,QAAQ,CAAA,EAAG,OAAS,EAAA,MAAM,QAAS,CAAA,IAAI,CACzF,EAAA,EAAA,IAAA,CAAK,WAAY,CAAA,IACpB,CACA,kBAAA,KAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,MAAO,CAAA,QAAA,EAAA,EAAW,QAAS,CAC7C,CAAA;AAEJ;AAEA,SAAS,UAAU,KAAsB,EAAA;AACvC,EAAO,OAAA;AAAA,IACL,WAAW,GAAI,CAAA;AAAA,MACb,QAAU,EAAA,CAAA;AAAA,MACV,OAAS,EAAA,MAAA;AAAA,MACT,GAAA,EAAK,KAAM,CAAA,OAAA,CAAQ,GAAG,CAAA;AAAA,MACtB,aAAe,EAAA;AAAA,KAChB,CAAA;AAAA,IACD,MAAM,GAAI,CAAA;AAAA,MACR,QAAU,EAAA,CAAA;AAAA,MACV,OAAS,EAAA,MAAA;AAAA,MACT,GAAA,EAAK,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,MACpB,QAAA,EAAU,KAAM,CAAA,UAAA,CAAW,SAAU,CAAA,QAAA;AAAA,MACrC,MAAQ,EAAA,SAAA;AAAA,MACR,OAAS,EAAA,KAAA,CAAM,OAAQ,CAAA,CAAA,EAAG,CAAC,CAAA;AAAA,MAC3B,YAAc,EAAA,KAAA,CAAM,KAAM,CAAA,YAAA,CAAa,CAAC,CAAA;AAAA,MACxC,QAAU,EAAA,UAAA;AAAA,MACV,SAAW,EAAA;AAAA,QACT,UAAA,EAAY,KAAM,CAAA,MAAA,CAAO,UAAW,CAAA;AAAA;AACtC,KACD,CAAA;AAAA,IACD,UAAU,GAAI,CAAA;AAAA,MACZ,WAAa,EAAA;AAAA,QACX,OAAS,EAAA,OAAA;AAAA,QACT,OAAS,EAAA,KAAA;AAAA,QACT,QAAU,EAAA,UAAA;AAAA,QACV,IAAM,EAAA,CAAA;AAAA,QACN,KAAO,EAAA,CAAA;AAAA,QACP,MAAQ,EAAA,CAAA;AAAA,QACR,GAAK,EAAA,CAAA;AAAA,QACL,YAAA,EAAc,KAAM,CAAA,KAAA,CAAM,MAAO,CAAA,OAAA;AAAA,QACjC,eAAA,EAAiB,KAAM,CAAA,MAAA,CAAO,SAAU,CAAA;AAAA;AAC1C,KACD,CAAA;AAAA,IACD,UAAU,GAAI,CAAA;AAAA,MACZ,QAAU,EAAA,CAAA;AAAA,MACV,OAAS,EAAA,MAAA;AAAA,MACT,aAAe,EAAA,QAAA;AAAA,MACf,WAAA,EAAa,KAAM,CAAA,OAAA,CAAQ,CAAC;AAAA,KAC7B;AAAA,GACH;AACF;;;;"}
1
+ {"version":3,"file":"DebugTreeNode.js","sources":["../../../../src/components/SceneDebugger/DebugTreeNode.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport React, { ReactNode } from 'react';\nimport { SceneObject } from '../../core/types';\n\nexport interface Props {\n node: SceneObject;\n selectedObject?: SceneObject;\n onSelect: (node: SceneObject) => void;\n}\n\nexport function DebugTreeNode({ node, selectedObject, onSelect }: Props) {\n const styles = useStyles2(getStyles);\n const children: ReactNode[] = [];\n const isSelected = node === selectedObject;\n\n node.forEachChild((child) => {\n children.push(\n <DebugTreeNode node={child} key={child.state.key} selectedObject={selectedObject} onSelect={onSelect} />\n );\n });\n\n return (\n <div className={styles.container}>\n <div className={cx(styles.name, isSelected && styles.selected)} onClick={() => onSelect(node)}>\n {node.constructor.name}\n </div>\n <div className={styles.children}>{children}</div>\n </div>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n container: css({\n flexGrow: 1,\n display: 'flex',\n gap: theme.spacing(0.5),\n flexDirection: 'column',\n }),\n name: css({\n flexGrow: 1,\n display: 'flex',\n gap: theme.spacing(1),\n fontSize: theme.typography.bodySmall.fontSize,\n cursor: 'pointer',\n padding: theme.spacing(0, 1),\n borderRadius: theme.shape.borderRadius(2),\n position: 'relative',\n '&:hover': {\n background: theme.colors.background.secondary,\n },\n }),\n selected: css({\n '&::before': {\n display: 'block',\n content: \"' '\",\n position: 'absolute',\n left: 0,\n width: 4,\n bottom: 2,\n top: 2,\n borderRadius: theme.shape.radius.default,\n backgroundImage: theme.colors.gradients.brandVertical,\n },\n }),\n children: css({\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n paddingLeft: theme.spacing(1),\n }),\n };\n}\n"],"names":[],"mappings":"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"}
@@ -8,7 +8,35 @@ function SceneDebugger({ scene }) {
8
8
  const styles = useStyles2(getStyles);
9
9
  const [isOpen, setIsOpen] = useState(false);
10
10
  const [selectedObject, setSelectedObject] = useState();
11
- return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(ToolbarButton, { variant: "canvas", icon: "bug", onClick: () => setIsOpen(true) }), isOpen && /* @__PURE__ */ React.createElement(Drawer, { title: "Scene debugger", onClose: () => setIsOpen(false), size: "lg" }, /* @__PURE__ */ React.createElement("div", { className: styles.panes }, /* @__PURE__ */ React.createElement("div", { className: styles.pane1 }, /* @__PURE__ */ React.createElement("div", { className: styles.paneHeading }, "Scene graph"), /* @__PURE__ */ React.createElement(CustomScrollbar, { autoHeightMin: "100%" }, /* @__PURE__ */ React.createElement("div", { className: styles.treeWrapper }, /* @__PURE__ */ React.createElement(DebugTreeNode, { node: scene, selectedObject, onSelect: setSelectedObject })))), /* @__PURE__ */ React.createElement("div", { className: styles.pane2 }, /* @__PURE__ */ React.createElement("div", { className: styles.paneHeading }, "Object details"), selectedObject && /* @__PURE__ */ React.createElement(DebugDetails, { node: selectedObject })))));
11
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(ToolbarButton, {
12
+ variant: "canvas",
13
+ icon: "bug",
14
+ onClick: () => setIsOpen(true)
15
+ }), isOpen && /* @__PURE__ */ React.createElement(Drawer, {
16
+ title: "Scene debugger",
17
+ onClose: () => setIsOpen(false),
18
+ size: "lg"
19
+ }, /* @__PURE__ */ React.createElement("div", {
20
+ className: styles.panes
21
+ }, /* @__PURE__ */ React.createElement("div", {
22
+ className: styles.pane1
23
+ }, /* @__PURE__ */ React.createElement("div", {
24
+ className: styles.paneHeading
25
+ }, "Scene graph"), /* @__PURE__ */ React.createElement(CustomScrollbar, {
26
+ autoHeightMin: "100%"
27
+ }, /* @__PURE__ */ React.createElement("div", {
28
+ className: styles.treeWrapper
29
+ }, /* @__PURE__ */ React.createElement(DebugTreeNode, {
30
+ node: scene,
31
+ selectedObject,
32
+ onSelect: setSelectedObject
33
+ })))), /* @__PURE__ */ React.createElement("div", {
34
+ className: styles.pane2
35
+ }, /* @__PURE__ */ React.createElement("div", {
36
+ className: styles.paneHeading
37
+ }, "Object details"), selectedObject && /* @__PURE__ */ React.createElement(DebugDetails, {
38
+ node: selectedObject
39
+ })))));
12
40
  }
13
41
  function getStyles(theme) {
14
42
  return {