@grafana/scenes 6.7.0--canary.1091.14350229100.0 → 6.8.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 (331) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/esm/components/layout/CSSGrid/SceneCSSGridItem.js +33 -0
  3. package/dist/esm/dist/esm/behaviors/CursorSync.js +76 -0
  4. package/dist/esm/dist/esm/behaviors/LiveNowTimer.js +44 -0
  5. package/dist/esm/dist/esm/behaviors/SceneQueryController.js +14 -0
  6. package/dist/esm/dist/esm/components/EmbeddedScene.js +59 -0
  7. package/dist/esm/dist/esm/components/NestedScene.js +95 -0
  8. package/dist/esm/dist/esm/components/SceneApp/SceneApp.js +27 -0
  9. package/dist/esm/dist/esm/components/SceneApp/SceneAppPage.js +176 -0
  10. package/dist/esm/dist/esm/components/SceneApp/SceneAppPageView.js +104 -0
  11. package/dist/esm/dist/esm/components/SceneApp/utils.js +42 -0
  12. package/dist/esm/dist/esm/components/SceneByFrameRepeater.js +41 -0
  13. package/dist/esm/dist/esm/components/SceneByVariableRepeater.js +55 -0
  14. package/dist/esm/dist/esm/components/SceneCanvasText.js +32 -0
  15. package/dist/esm/dist/esm/components/SceneControlsSpacer.js +17 -0
  16. package/dist/esm/dist/esm/components/SceneDebugger/DebugDetails.js +82 -0
  17. package/dist/esm/dist/esm/components/SceneDebugger/DebugTreeNode.js +72 -0
  18. package/dist/esm/dist/esm/components/SceneDebugger/SceneDebugger.js +77 -0
  19. package/dist/esm/dist/esm/components/SceneReactObject.js +34 -0
  20. package/dist/esm/dist/esm/components/SceneRefreshPicker.js +205 -0
  21. package/dist/esm/dist/esm/components/SceneTimePicker.js +139 -0
  22. package/dist/esm/dist/esm/components/SceneTimeRangeCompare.js +240 -0
  23. package/dist/esm/dist/esm/components/SceneToolbarButton.js +33 -0
  24. package/dist/esm/dist/esm/components/VizPanel/VizPanel.js +406 -0
  25. package/dist/esm/dist/esm/components/VizPanel/VizPanelExploreButton.js +44 -0
  26. package/dist/esm/dist/esm/components/VizPanel/VizPanelMenu.js +59 -0
  27. package/dist/esm/dist/esm/components/VizPanel/VizPanelRenderer.js +285 -0
  28. package/dist/esm/dist/esm/components/VizPanel/VizPanelSeriesLimit.js +45 -0
  29. package/dist/esm/dist/esm/components/VizPanel/colorSeriesConfigFactory.js +72 -0
  30. package/dist/esm/dist/esm/components/VizPanel/registerRuntimePanelPlugin.js +11 -0
  31. package/dist/esm/dist/esm/components/VizPanel/seriesVisibilityConfigFactory.js +164 -0
  32. package/dist/esm/dist/esm/components/layout/CSSGrid/SceneCSSGridLayout.js +124 -0
  33. package/dist/esm/dist/esm/components/layout/LazyLoader.js +103 -0
  34. package/dist/esm/dist/esm/components/layout/SceneFlexLayout.js +135 -0
  35. package/dist/esm/dist/esm/components/layout/grid/SceneGridItem.js +30 -0
  36. package/dist/esm/dist/esm/components/layout/grid/SceneGridLayout.js +283 -0
  37. package/dist/esm/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js +178 -0
  38. package/dist/esm/dist/esm/components/layout/grid/SceneGridRow.js +190 -0
  39. package/dist/esm/dist/esm/components/layout/grid/constants.js +7 -0
  40. package/dist/esm/dist/esm/components/layout/grid/utils.js +36 -0
  41. package/dist/esm/dist/esm/components/layout/split/SplitLayout.js +17 -0
  42. package/dist/esm/dist/esm/components/layout/split/SplitLayoutRenderer.js +29 -0
  43. package/dist/esm/dist/esm/components/layout/split/Splitter.js +386 -0
  44. package/dist/esm/dist/esm/core/SceneComponentWrapper.js +57 -0
  45. package/dist/esm/dist/esm/core/SceneDataNode.js +43 -0
  46. package/dist/esm/dist/esm/core/SceneObjectBase.js +286 -0
  47. package/dist/esm/dist/esm/core/SceneObjectRef.js +32 -0
  48. package/dist/esm/dist/esm/core/SceneTimeRange.js +231 -0
  49. package/dist/esm/dist/esm/core/events.js +11 -0
  50. package/dist/esm/dist/esm/core/sceneGraph/getTimeRange.js +10 -0
  51. package/dist/esm/dist/esm/core/sceneGraph/index.js +25 -0
  52. package/dist/esm/dist/esm/core/sceneGraph/sceneGraph.js +178 -0
  53. package/dist/esm/dist/esm/core/sceneGraph/utils.js +64 -0
  54. package/dist/esm/dist/esm/core/types.js +15 -0
  55. package/dist/esm/dist/esm/querying/DataLayersMerger.js +46 -0
  56. package/dist/esm/dist/esm/querying/ExtraQueryProvider.js +6 -0
  57. package/dist/esm/dist/esm/querying/RuntimeDataSource.js +6 -0
  58. package/dist/esm/dist/esm/querying/SceneDataLayerSet.js +100 -0
  59. package/dist/esm/dist/esm/querying/SceneQueryRunner.js +468 -0
  60. package/dist/esm/dist/esm/querying/extraQueryProcessingOperator.js +46 -0
  61. package/dist/esm/dist/esm/querying/getEnrichedDataRequest.js +12 -0
  62. package/dist/esm/dist/esm/querying/layers/SceneDataLayerBase.js +112 -0
  63. package/dist/esm/dist/esm/querying/layers/SceneDataLayerControls.js +51 -0
  64. package/dist/esm/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js +130 -0
  65. package/dist/esm/dist/esm/querying/layers/annotations/filterAnnotations.js +85 -0
  66. package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationQuery.js +121 -0
  67. package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationsSupport.js +211 -0
  68. package/dist/esm/dist/esm/querying/layers/annotations/utils.js +77 -0
  69. package/dist/esm/dist/esm/querying/registerQueryWithController.js +41 -0
  70. package/dist/esm/dist/esm/services/SceneObjectUrlSyncConfig.js +30 -0
  71. package/dist/esm/dist/esm/services/UniqueUrlKeyMapper.js +45 -0
  72. package/dist/esm/dist/esm/services/UrlSyncManager.js +167 -0
  73. package/dist/esm/dist/esm/services/useUrlSync.js +29 -0
  74. package/dist/esm/dist/esm/services/utils.js +71 -0
  75. package/dist/esm/dist/esm/utils/ControlsLabel.js +107 -0
  76. package/dist/esm/dist/esm/utils/LoadingIndicator.js +19 -0
  77. package/dist/esm/dist/esm/utils/SafeSerializableSceneObject.js +39 -0
  78. package/dist/esm/dist/esm/utils/compatibility/setWindowGrafanaSceneContext.js +16 -0
  79. package/dist/esm/dist/esm/utils/date.js +15 -0
  80. package/dist/esm/dist/esm/utils/evaluateTimeRange.js +16 -0
  81. package/dist/esm/dist/esm/utils/explore.js +47 -0
  82. package/dist/esm/dist/esm/utils/getCompareSeriesRefId.js +4 -0
  83. package/dist/esm/dist/esm/utils/getDataSource.js +18 -0
  84. package/dist/esm/dist/esm/utils/getMessageFromError.js +24 -0
  85. package/dist/esm/dist/esm/utils/metricTree.js +53 -0
  86. package/dist/esm/dist/esm/utils/parseUrlParam.js +41 -0
  87. package/dist/esm/dist/esm/utils/utils.js +11 -0
  88. package/dist/esm/dist/esm/utils/wrapInSafeSerializableSceneObject.js +30 -0
  89. package/dist/esm/dist/esm/utils/writeSceneLog.js +12 -0
  90. package/dist/esm/dist/esm/variables/VariableDependencyConfig.js +150 -0
  91. package/dist/esm/dist/esm/variables/VariableValueRecorder.js +71 -0
  92. package/dist/esm/dist/esm/variables/adhoc/AdHocFilterBuilder.js +24 -0
  93. package/dist/esm/dist/esm/variables/adhoc/AdHocFilterRenderer.js +303 -0
  94. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +162 -0
  95. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +20 -0
  96. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +640 -0
  97. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +65 -0
  98. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +146 -0
  99. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +114 -0
  100. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +68 -0
  101. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js +146 -0
  102. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariable.js +289 -0
  103. package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +76 -0
  104. package/dist/esm/dist/esm/variables/adhoc/getAdhocOptionSearcher.js +13 -0
  105. package/dist/esm/dist/esm/variables/adhoc/patchGetAdhocFilters.js +47 -0
  106. package/dist/esm/dist/esm/variables/components/VariableValueControl.js +23 -0
  107. package/dist/esm/dist/esm/variables/components/VariableValueInput.js +33 -0
  108. package/dist/esm/dist/esm/variables/components/VariableValueSelect.js +228 -0
  109. package/dist/esm/dist/esm/variables/components/VariableValueSelectors.js +72 -0
  110. package/dist/esm/dist/esm/variables/components/getOptionSearcher.js +15 -0
  111. package/dist/esm/dist/esm/variables/constants.js +9 -0
  112. package/dist/esm/dist/esm/variables/getEnrichedFiltersRequest.js +12 -0
  113. package/dist/esm/dist/esm/variables/groupby/GroupByVariable.js +259 -0
  114. package/dist/esm/dist/esm/variables/groupby/GroupByVariableUrlSyncHandler.js +63 -0
  115. package/dist/esm/dist/esm/variables/groupby/findActiveGroupByVariablesByUid.js +13 -0
  116. package/dist/esm/dist/esm/variables/interpolation/ScopedVarsVariable.js +40 -0
  117. package/dist/esm/dist/esm/variables/interpolation/defaults.js +21 -0
  118. package/dist/esm/dist/esm/variables/interpolation/fieldAccessorCache.js +13 -0
  119. package/dist/esm/dist/esm/variables/interpolation/formatRegistry.js +296 -0
  120. package/dist/esm/dist/esm/variables/interpolation/sceneInterpolator.js +87 -0
  121. package/dist/esm/dist/esm/variables/lookupVariable.js +20 -0
  122. package/dist/esm/dist/esm/variables/macros/AllVariablesMacro.js +57 -0
  123. package/dist/esm/dist/esm/variables/macros/contextMacros.js +43 -0
  124. package/dist/esm/dist/esm/variables/macros/dataMacros.js +134 -0
  125. package/dist/esm/dist/esm/variables/macros/index.js +26 -0
  126. package/dist/esm/dist/esm/variables/macros/templateProxies.js +51 -0
  127. package/dist/esm/dist/esm/variables/macros/timeMacros.js +86 -0
  128. package/dist/esm/dist/esm/variables/macros/types.js +11 -0
  129. package/dist/esm/dist/esm/variables/macros/urlMacros.js +56 -0
  130. package/dist/esm/dist/esm/variables/sets/SceneVariableSet.js +254 -0
  131. package/dist/esm/dist/esm/variables/types.js +11 -0
  132. package/dist/esm/dist/esm/variables/utils.js +172 -0
  133. package/dist/esm/dist/esm/variables/variants/ConstantVariable.js +38 -0
  134. package/dist/esm/dist/esm/variables/variants/CustomVariable.js +60 -0
  135. package/dist/esm/dist/esm/variables/variants/DataSourceVariable.js +88 -0
  136. package/dist/esm/dist/esm/variables/variants/IntervalVariable.js +117 -0
  137. package/dist/esm/dist/esm/variables/variants/MultiValueVariable.js +295 -0
  138. package/dist/esm/dist/esm/variables/variants/TestVariable.js +117 -0
  139. package/dist/esm/dist/esm/variables/variants/TextBoxVariable.js +61 -0
  140. package/dist/esm/dist/esm/variables/variants/query/QueryVariable.js +139 -0
  141. package/dist/esm/dist/esm/variables/variants/query/createQueryVariableRunner.js +129 -0
  142. package/dist/esm/dist/esm/variables/variants/query/guards.js +28 -0
  143. package/dist/esm/dist/esm/variables/variants/query/toMetricFindValues.js +96 -0
  144. package/dist/esm/dist/esm/variables/variants/query/utils.js +124 -0
  145. package/dist/esm/index.js +1 -1
  146. package/dist/esm/index.js.map +1 -1
  147. package/dist/esm/querying/DataProviderSharer.js +39 -0
  148. package/dist/esm/src/behaviors/ActWhenVariableChanged.js +27 -0
  149. package/dist/esm/src/behaviors/CursorSync.js +76 -0
  150. package/dist/esm/src/behaviors/LiveNowTimer.js +44 -0
  151. package/dist/esm/src/behaviors/SceneQueryController.js +60 -0
  152. package/dist/esm/src/behaviors/index.js +5 -0
  153. package/dist/esm/src/components/EmbeddedScene.js +59 -0
  154. package/dist/esm/src/components/NestedScene.js +95 -0
  155. package/dist/esm/src/components/SceneApp/SceneApp.js +37 -0
  156. package/dist/esm/src/components/SceneApp/SceneAppPage.js +176 -0
  157. package/dist/esm/src/components/SceneApp/SceneAppPageView.js +104 -0
  158. package/dist/esm/src/components/SceneApp/utils.js +42 -0
  159. package/dist/esm/src/components/SceneByFrameRepeater.js +41 -0
  160. package/dist/esm/src/components/SceneByVariableRepeater.js +55 -0
  161. package/dist/esm/src/components/SceneCanvasText.js +32 -0
  162. package/dist/esm/src/components/SceneControlsSpacer.js +17 -0
  163. package/dist/esm/src/components/SceneDebugger/DebugDetails.js +82 -0
  164. package/dist/esm/src/components/SceneDebugger/DebugTreeNode.js +72 -0
  165. package/dist/esm/src/components/SceneDebugger/SceneDebugger.js +77 -0
  166. package/dist/esm/src/components/SceneReactObject.js +34 -0
  167. package/dist/esm/src/components/SceneRefreshPicker.js +205 -0
  168. package/dist/esm/src/components/SceneTimePicker.js +139 -0
  169. package/dist/esm/src/components/SceneTimeRangeCompare.js +240 -0
  170. package/dist/esm/src/components/SceneToolbarButton.js +33 -0
  171. package/dist/esm/src/components/VizPanel/VizPanel.js +406 -0
  172. package/dist/esm/src/components/VizPanel/VizPanelExploreButton.js +44 -0
  173. package/dist/esm/src/components/VizPanel/VizPanelMenu.js +59 -0
  174. package/dist/esm/src/components/VizPanel/VizPanelRenderer.js +285 -0
  175. package/dist/esm/src/components/VizPanel/VizPanelSeriesLimit.js +45 -0
  176. package/dist/esm/src/components/VizPanel/colorSeriesConfigFactory.js +72 -0
  177. package/dist/esm/src/components/VizPanel/registerRuntimePanelPlugin.js +56 -0
  178. package/dist/esm/src/components/VizPanel/seriesVisibilityConfigFactory.js +164 -0
  179. package/dist/esm/src/components/layout/CSSGrid/SceneCSSGridLayout.js +124 -0
  180. package/dist/esm/src/components/layout/LazyLoader.js +103 -0
  181. package/dist/esm/src/components/layout/SceneFlexLayout.js +135 -0
  182. package/dist/esm/src/components/layout/grid/SceneGridItem.js +30 -0
  183. package/dist/esm/src/components/layout/grid/SceneGridLayout.js +283 -0
  184. package/dist/esm/src/components/layout/grid/SceneGridLayoutRenderer.js +178 -0
  185. package/dist/esm/src/components/layout/grid/SceneGridRow.js +190 -0
  186. package/dist/esm/src/components/layout/grid/constants.js +7 -0
  187. package/dist/esm/src/components/layout/grid/utils.js +36 -0
  188. package/dist/esm/src/components/layout/split/SplitLayout.js +17 -0
  189. package/dist/esm/src/components/layout/split/SplitLayoutRenderer.js +29 -0
  190. package/dist/esm/src/components/layout/split/Splitter.js +386 -0
  191. package/dist/esm/src/core/PanelBuilders/FieldConfigBuilder.js +100 -0
  192. package/dist/esm/src/core/PanelBuilders/FieldConfigBuilders.js +75 -0
  193. package/dist/esm/src/core/PanelBuilders/FieldConfigOverridesBuilder.js +75 -0
  194. package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilder.js +22 -0
  195. package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilders.js +85 -0
  196. package/dist/esm/src/core/PanelBuilders/StandardFieldConfigBuilders.js +52 -0
  197. package/dist/esm/src/core/PanelBuilders/VizConfigBuilder.js +78 -0
  198. package/dist/esm/src/core/PanelBuilders/VizConfigBuilders.js +114 -0
  199. package/dist/esm/src/core/PanelBuilders/VizPanelBuilder.js +162 -0
  200. package/dist/esm/src/core/PanelBuilders/index.js +116 -0
  201. package/dist/esm/src/core/SceneComponentWrapper.js +57 -0
  202. package/dist/esm/src/core/SceneDataNode.js +43 -0
  203. package/dist/esm/src/core/SceneObjectBase.js +286 -0
  204. package/dist/esm/src/core/SceneObjectRef.js +32 -0
  205. package/dist/esm/src/core/SceneTimeRange.js +231 -0
  206. package/dist/esm/src/core/SceneTimeRangeTransformerBase.js +35 -0
  207. package/dist/esm/src/core/SceneTimeZoneOverride.js +63 -0
  208. package/dist/esm/src/core/events.js +11 -0
  209. package/dist/esm/src/core/sceneGraph/getTimeRange.js +10 -0
  210. package/dist/esm/src/core/sceneGraph/index.js +25 -0
  211. package/dist/esm/src/core/sceneGraph/sceneGraph.js +178 -0
  212. package/dist/esm/src/core/sceneGraph/utils.js +64 -0
  213. package/dist/esm/src/core/types.js +15 -0
  214. package/dist/esm/src/index.js +108 -0
  215. package/dist/esm/src/querying/DataLayersMerger.js +46 -0
  216. package/dist/esm/src/querying/DataProviderProxy.js +37 -0
  217. package/dist/esm/src/querying/DataProviderSharer.js +108 -0
  218. package/dist/esm/src/querying/ExtraQueryProvider.js +6 -0
  219. package/dist/esm/src/querying/RuntimeDataSource.js +49 -0
  220. package/dist/esm/src/querying/SceneDataLayerSet.js +100 -0
  221. package/dist/esm/src/querying/SceneDataTransformer.js +178 -0
  222. package/dist/esm/src/querying/SceneQueryRunner.js +468 -0
  223. package/dist/esm/src/querying/extraQueryProcessingOperator.js +46 -0
  224. package/dist/esm/src/querying/getEnrichedDataRequest.js +12 -0
  225. package/dist/esm/src/querying/layers/SceneDataLayerBase.js +112 -0
  226. package/dist/esm/src/querying/layers/SceneDataLayerControls.js +51 -0
  227. package/dist/esm/src/querying/layers/annotations/AnnotationsDataLayer.js +130 -0
  228. package/dist/esm/src/querying/layers/annotations/filterAnnotations.js +85 -0
  229. package/dist/esm/src/querying/layers/annotations/standardAnnotationQuery.js +121 -0
  230. package/dist/esm/src/querying/layers/annotations/standardAnnotationsSupport.js +211 -0
  231. package/dist/esm/src/querying/layers/annotations/utils.js +77 -0
  232. package/dist/esm/src/querying/layers/index.js +2 -0
  233. package/dist/esm/src/querying/registerQueryWithController.js +41 -0
  234. package/dist/esm/src/services/SceneObjectUrlSyncConfig.js +30 -0
  235. package/dist/esm/src/services/UniqueUrlKeyMapper.js +45 -0
  236. package/dist/esm/src/services/UrlSyncContextProvider.js +17 -0
  237. package/dist/esm/src/services/UrlSyncManager.js +167 -0
  238. package/dist/esm/src/services/useUrlSync.js +29 -0
  239. package/dist/esm/src/services/utils.js +75 -0
  240. package/dist/esm/src/utils/ControlsLabel.js +107 -0
  241. package/dist/esm/src/utils/LoadingIndicator.js +19 -0
  242. package/dist/esm/src/utils/SafeSerializableSceneObject.js +39 -0
  243. package/dist/esm/src/utils/compatibility/setWindowGrafanaSceneContext.js +16 -0
  244. package/dist/esm/src/utils/date.js +15 -0
  245. package/dist/esm/src/utils/evaluateTimeRange.js +16 -0
  246. package/dist/esm/src/utils/explore.js +47 -0
  247. package/dist/esm/src/utils/getCompareSeriesRefId.js +4 -0
  248. package/dist/esm/src/utils/getDataSource.js +18 -0
  249. package/dist/esm/src/utils/getMessageFromError.js +24 -0
  250. package/dist/esm/src/utils/metricTree.js +53 -0
  251. package/dist/esm/src/utils/parseUrlParam.js +41 -0
  252. package/dist/esm/src/utils/utils.js +11 -0
  253. package/dist/esm/src/utils/wrapInSafeSerializableSceneObject.js +30 -0
  254. package/dist/esm/src/utils/writeSceneLog.js +12 -0
  255. package/dist/esm/src/variables/VariableDependencyConfig.js +150 -0
  256. package/dist/esm/src/variables/VariableValueRecorder.js +71 -0
  257. package/dist/esm/src/variables/adhoc/AdHocFilterBuilder.js +24 -0
  258. package/dist/esm/src/variables/adhoc/AdHocFilterRenderer.js +303 -0
  259. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +162 -0
  260. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +20 -0
  261. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +640 -0
  262. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +65 -0
  263. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +146 -0
  264. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +114 -0
  265. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +68 -0
  266. package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/utils.js +146 -0
  267. package/dist/esm/src/variables/adhoc/AdHocFiltersVariable.js +289 -0
  268. package/dist/esm/src/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +76 -0
  269. package/dist/esm/src/variables/adhoc/getAdhocOptionSearcher.js +13 -0
  270. package/dist/esm/src/variables/adhoc/patchGetAdhocFilters.js +47 -0
  271. package/dist/esm/src/variables/components/VariableValueControl.js +23 -0
  272. package/dist/esm/src/variables/components/VariableValueInput.js +33 -0
  273. package/dist/esm/src/variables/components/VariableValueSelect.js +228 -0
  274. package/dist/esm/src/variables/components/VariableValueSelectors.js +72 -0
  275. package/dist/esm/src/variables/components/getOptionSearcher.js +15 -0
  276. package/dist/esm/src/variables/constants.js +9 -0
  277. package/dist/esm/src/variables/getEnrichedFiltersRequest.js +12 -0
  278. package/dist/esm/src/variables/groupby/GroupByVariable.js +259 -0
  279. package/dist/esm/src/variables/groupby/GroupByVariableUrlSyncHandler.js +63 -0
  280. package/dist/esm/src/variables/groupby/findActiveGroupByVariablesByUid.js +13 -0
  281. package/dist/esm/src/variables/interpolation/ScopedVarsVariable.js +40 -0
  282. package/dist/esm/src/variables/interpolation/defaults.js +21 -0
  283. package/dist/esm/src/variables/interpolation/fieldAccessorCache.js +13 -0
  284. package/dist/esm/src/variables/interpolation/formatRegistry.js +296 -0
  285. package/dist/esm/src/variables/interpolation/sceneInterpolator.js +87 -0
  286. package/dist/esm/src/variables/lookupVariable.js +20 -0
  287. package/dist/esm/src/variables/macros/AllVariablesMacro.js +57 -0
  288. package/dist/esm/src/variables/macros/contextMacros.js +43 -0
  289. package/dist/esm/src/variables/macros/dataMacros.js +134 -0
  290. package/dist/esm/src/variables/macros/index.js +35 -0
  291. package/dist/esm/src/variables/macros/templateProxies.js +51 -0
  292. package/dist/esm/src/variables/macros/timeMacros.js +86 -0
  293. package/dist/esm/src/variables/macros/types.js +11 -0
  294. package/dist/esm/src/variables/macros/urlMacros.js +56 -0
  295. package/dist/esm/src/variables/sets/SceneVariableSet.js +254 -0
  296. package/dist/esm/src/variables/types.js +11 -0
  297. package/dist/esm/src/variables/utils.js +172 -0
  298. package/dist/esm/src/variables/variants/ConstantVariable.js +38 -0
  299. package/dist/esm/src/variables/variants/CustomVariable.js +60 -0
  300. package/dist/esm/src/variables/variants/DataSourceVariable.js +88 -0
  301. package/dist/esm/src/variables/variants/IntervalVariable.js +117 -0
  302. package/dist/esm/src/variables/variants/JsonVariable.js +193 -0
  303. package/dist/esm/src/variables/variants/LocalValueVariable.js +56 -0
  304. package/dist/esm/src/variables/variants/MultiValueVariable.js +295 -0
  305. package/dist/esm/src/variables/variants/TestVariable.js +117 -0
  306. package/dist/esm/src/variables/variants/TextBoxVariable.js +61 -0
  307. package/dist/esm/src/variables/variants/guards.js +27 -0
  308. package/dist/esm/src/variables/variants/query/QueryVariable.js +139 -0
  309. package/dist/esm/src/variables/variants/query/createQueryVariableRunner.js +129 -0
  310. package/dist/esm/src/variables/variants/query/guards.js +28 -0
  311. package/dist/esm/src/variables/variants/query/toMetricFindValues.js +96 -0
  312. package/dist/esm/src/variables/variants/query/utils.js +124 -0
  313. package/dist/esm/variables/components/VariableValueSelect.js +13 -9
  314. package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
  315. package/dist/esm/variables/variants/ConstantVariable.js +22 -0
  316. package/dist/esm/variables/variants/ConstantVariable.js.map +1 -1
  317. package/dist/esm/variables/variants/CustomVariable.js +3 -2
  318. package/dist/esm/variables/variants/CustomVariable.js.map +1 -1
  319. package/dist/esm/variables/variants/DataSourceVariable.js +3 -2
  320. package/dist/esm/variables/variants/DataSourceVariable.js.map +1 -1
  321. package/dist/esm/variables/variants/JsonVariable.js +96 -0
  322. package/dist/esm/variables/variants/TestVariable.js +3 -2
  323. package/dist/esm/variables/variants/TestVariable.js.map +1 -1
  324. package/dist/esm/variables/variants/json/JsonVariable.js +95 -0
  325. package/dist/esm/variables/variants/json/JsonVariableOptionProviders.js +70 -0
  326. package/dist/esm/variables/variants/query/QueryVariable.js +3 -2
  327. package/dist/esm/variables/variants/query/QueryVariable.js.map +1 -1
  328. package/dist/index.d.ts +14 -6
  329. package/dist/index.js +35 -13
  330. package/dist/index.js.map +1 -1
  331. package/package.json +2 -2
@@ -0,0 +1,44 @@
1
+ import { VizPanel } from '../components/VizPanel/VizPanel.js';
2
+ import { SceneObjectBase } from '../core/SceneObjectBase.js';
3
+ import { sceneGraph } from '../core/sceneGraph/index.js';
4
+
5
+ const _LiveNowTimer = class extends SceneObjectBase {
6
+ constructor({ enabled = false }) {
7
+ super({ enabled });
8
+ this.timerId = void 0;
9
+ this._activationHandler = () => {
10
+ if (this.state.enabled) {
11
+ this.enable();
12
+ }
13
+ return () => {
14
+ window.clearInterval(this.timerId);
15
+ this.timerId = void 0;
16
+ };
17
+ };
18
+ this.addActivationHandler(this._activationHandler);
19
+ }
20
+ enable() {
21
+ window.clearInterval(this.timerId);
22
+ this.timerId = void 0;
23
+ this.timerId = window.setInterval(() => {
24
+ const panels = sceneGraph.findAllObjects(this.getRoot(), (obj) => obj instanceof VizPanel);
25
+ for (const panel of panels) {
26
+ panel.forceRender();
27
+ }
28
+ }, _LiveNowTimer.REFRESH_RATE);
29
+ this.setState({ enabled: true });
30
+ }
31
+ disable() {
32
+ window.clearInterval(this.timerId);
33
+ this.timerId = void 0;
34
+ this.setState({ enabled: false });
35
+ }
36
+ get isEnabled() {
37
+ return this.state.enabled;
38
+ }
39
+ };
40
+ let LiveNowTimer = _LiveNowTimer;
41
+ LiveNowTimer.REFRESH_RATE = 100;
42
+
43
+ export { LiveNowTimer };
44
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGl2ZU5vd1RpbWVyLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYmVoYXZpb3JzL0xpdmVOb3dUaW1lci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWaXpQYW5lbCB9IGZyb20gJy4uL2NvbXBvbmVudHMvVml6UGFuZWwvVml6UGFuZWwnO1xuaW1wb3J0IHsgU2NlbmVPYmplY3RCYXNlIH0gZnJvbSAnLi4vY29yZS9TY2VuZU9iamVjdEJhc2UnO1xuaW1wb3J0IHsgc2NlbmVHcmFwaCB9IGZyb20gJy4uL2NvcmUvc2NlbmVHcmFwaCc7XG5pbXBvcnQgeyBTY2VuZU9iamVjdFN0YXRlIH0gZnJvbSAnLi4vY29yZS90eXBlcyc7XG5cbmludGVyZmFjZSBMaXZlTm93VGltZXJTdGF0ZSBleHRlbmRzIFNjZW5lT2JqZWN0U3RhdGUge1xuICBlbmFibGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgTGl2ZU5vd1RpbWVyIGV4dGVuZHMgU2NlbmVPYmplY3RCYXNlPExpdmVOb3dUaW1lclN0YXRlPiB7XG4gIHByaXZhdGUgdGltZXJJZDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIHN0YXRpYyBSRUZSRVNIX1JBVEUgPSAxMDA7IC8vIG1zXG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHsgZW5hYmxlZCA9IGZhbHNlIH0pIHtcbiAgICBzdXBlcih7IGVuYWJsZWQgfSk7XG4gICAgdGhpcy5hZGRBY3RpdmF0aW9uSGFuZGxlcih0aGlzLl9hY3RpdmF0aW9uSGFuZGxlcik7XG4gIH1cblxuICBwcml2YXRlIF9hY3RpdmF0aW9uSGFuZGxlciA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS5lbmFibGVkKSB7XG4gICAgICB0aGlzLmVuYWJsZSgpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVySWQpO1xuICAgICAgdGhpcy50aW1lcklkID0gdW5kZWZpbmVkO1xuICAgIH07XG4gIH07XG5cbiAgcHVibGljIGVuYWJsZSgpIHtcbiAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVySWQpO1xuICAgIHRoaXMudGltZXJJZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnRpbWVySWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgcGFuZWxzID0gc2NlbmVHcmFwaC5maW5kQWxsT2JqZWN0cyh0aGlzLmdldFJvb3QoKSwgKG9iaikgPT4gb2JqIGluc3RhbmNlb2YgVml6UGFuZWwpIGFzIFZpelBhbmVsW107XG4gICAgICBmb3IgKGNvbnN0IHBhbmVsIG9mIHBhbmVscykge1xuICAgICAgICBwYW5lbC5mb3JjZVJlbmRlcigpO1xuICAgICAgfVxuICAgIH0sIExpdmVOb3dUaW1lci5SRUZSRVNIX1JBVEUpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBlbmFibGVkOiB0cnVlIH0pO1xuICB9XG5cbiAgcHVibGljIGRpc2FibGUoKSB7XG4gICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy50aW1lcklkKTtcbiAgICB0aGlzLnRpbWVySWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGVuYWJsZWQ6IGZhbHNlIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0VuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuZW5hYmxlZDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFTTyxNQUFNLGFBQUEsR0FBTixjQUEyQixlQUFtQyxDQUFBO0FBQUEsRUFJNUQsV0FBWSxDQUFBLEVBQUUsT0FBVSxHQUFBLEtBQUEsRUFBUyxFQUFBO0FBQ3RDLElBQU0sS0FBQSxDQUFBLEVBQUUsU0FBUyxDQUFBLENBQUE7QUFKbkIsSUFBQSxJQUFBLENBQVEsT0FBOEIsR0FBQSxLQUFBLENBQUEsQ0FBQTtBQVF0QyxJQUFBLElBQUEsQ0FBUSxxQkFBcUIsTUFBTTtBQUNqQyxNQUFJLElBQUEsSUFBQSxDQUFLLE1BQU0sT0FBUyxFQUFBO0FBQ3RCLFFBQUEsSUFBQSxDQUFLLE1BQU8sRUFBQSxDQUFBO0FBQUEsT0FDZDtBQUVBLE1BQUEsT0FBTyxNQUFNO0FBQ1gsUUFBTyxNQUFBLENBQUEsYUFBQSxDQUFjLEtBQUssT0FBTyxDQUFBLENBQUE7QUFDakMsUUFBQSxJQUFBLENBQUssT0FBVSxHQUFBLEtBQUEsQ0FBQSxDQUFBO0FBQUEsT0FDakIsQ0FBQTtBQUFBLEtBQ0YsQ0FBQTtBQVpFLElBQUssSUFBQSxDQUFBLG9CQUFBLENBQXFCLEtBQUssa0JBQWtCLENBQUEsQ0FBQTtBQUFBLEdBQ25EO0FBQUEsRUFhTyxNQUFTLEdBQUE7QUFDZCxJQUFPLE1BQUEsQ0FBQSxhQUFBLENBQWMsS0FBSyxPQUFPLENBQUEsQ0FBQTtBQUNqQyxJQUFBLElBQUEsQ0FBSyxPQUFVLEdBQUEsS0FBQSxDQUFBLENBQUE7QUFDZixJQUFLLElBQUEsQ0FBQSxPQUFBLEdBQVUsTUFBTyxDQUFBLFdBQUEsQ0FBWSxNQUFNO0FBQ3RDLE1BQU0sTUFBQSxNQUFBLEdBQVMsV0FBVyxjQUFlLENBQUEsSUFBQSxDQUFLLFNBQVcsRUFBQSxDQUFDLEdBQVEsS0FBQSxHQUFBLFlBQWUsUUFBUSxDQUFBLENBQUE7QUFDekYsTUFBQSxLQUFBLE1BQVcsU0FBUyxNQUFRLEVBQUE7QUFDMUIsUUFBQSxLQUFBLENBQU0sV0FBWSxFQUFBLENBQUE7QUFBQSxPQUNwQjtBQUFBLEtBQ0YsRUFBRyxjQUFhLFlBQVksQ0FBQSxDQUFBO0FBQzVCLElBQUEsSUFBQSxDQUFLLFFBQVMsQ0FBQSxFQUFFLE9BQVMsRUFBQSxJQUFBLEVBQU0sQ0FBQSxDQUFBO0FBQUEsR0FDakM7QUFBQSxFQUVPLE9BQVUsR0FBQTtBQUNmLElBQU8sTUFBQSxDQUFBLGFBQUEsQ0FBYyxLQUFLLE9BQU8sQ0FBQSxDQUFBO0FBQ2pDLElBQUEsSUFBQSxDQUFLLE9BQVUsR0FBQSxLQUFBLENBQUEsQ0FBQTtBQUNmLElBQUEsSUFBQSxDQUFLLFFBQVMsQ0FBQSxFQUFFLE9BQVMsRUFBQSxLQUFBLEVBQU8sQ0FBQSxDQUFBO0FBQUEsR0FDbEM7QUFBQSxFQUVBLElBQVcsU0FBWSxHQUFBO0FBQ3JCLElBQUEsT0FBTyxLQUFLLEtBQU0sQ0FBQSxPQUFBLENBQUE7QUFBQSxHQUNwQjtBQUNGLENBQUEsQ0FBQTtBQXpDTyxJQUFNLFlBQU4sR0FBQSxjQUFBO0FBQU0sWUFBQSxDQUVJLFlBQWUsR0FBQSxHQUFBOzs7OyJ9
@@ -0,0 +1,60 @@
1
+ import { SceneObjectBase } from '../core/SceneObjectBase.js';
2
+
3
+ var __accessCheck = (obj, member, msg) => {
4
+ if (!member.has(obj))
5
+ throw TypeError("Cannot " + msg);
6
+ };
7
+ var __privateGet = (obj, member, getter) => {
8
+ __accessCheck(obj, member, "read from private field");
9
+ return getter ? getter.call(obj) : member.get(obj);
10
+ };
11
+ var __privateAdd = (obj, member, value) => {
12
+ if (member.has(obj))
13
+ throw TypeError("Cannot add the same private member more than once");
14
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
15
+ };
16
+ var _running;
17
+ function isQueryController(s) {
18
+ return "isQueryController" in s;
19
+ }
20
+ class SceneQueryController extends SceneObjectBase {
21
+ constructor() {
22
+ super({ isRunning: false });
23
+ this.isQueryController = true;
24
+ __privateAdd(this, _running, /* @__PURE__ */ new Set());
25
+ this.addActivationHandler(() => {
26
+ return () => __privateGet(this, _running).clear();
27
+ });
28
+ }
29
+ queryStarted(entry) {
30
+ __privateGet(this, _running).add(entry);
31
+ this.changeRunningQueryCount(1);
32
+ if (!this.state.isRunning) {
33
+ this.setState({ isRunning: true });
34
+ }
35
+ }
36
+ queryCompleted(entry) {
37
+ if (!__privateGet(this, _running).has(entry)) {
38
+ return;
39
+ }
40
+ __privateGet(this, _running).delete(entry);
41
+ this.changeRunningQueryCount(-1);
42
+ if (__privateGet(this, _running).size === 0) {
43
+ this.setState({ isRunning: false });
44
+ }
45
+ }
46
+ changeRunningQueryCount(dir) {
47
+ var _a;
48
+ window.__grafanaRunningQueryCount = ((_a = window.__grafanaRunningQueryCount) != null ? _a : 0) + dir;
49
+ }
50
+ cancelAll() {
51
+ var _a;
52
+ for (const entry of __privateGet(this, _running).values()) {
53
+ (_a = entry.cancel) == null ? void 0 : _a.call(entry);
54
+ }
55
+ }
56
+ }
57
+ _running = new WeakMap();
58
+
59
+ export { SceneQueryController, isQueryController };
60
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NlbmVRdWVyeUNvbnRyb2xsZXIuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iZWhhdmlvcnMvU2NlbmVRdWVyeUNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2NlbmVPYmplY3RCYXNlIH0gZnJvbSAnLi4vY29yZS9TY2VuZU9iamVjdEJhc2UnO1xuaW1wb3J0IHsgU2NlbmVPYmplY3QsIFNjZW5lT2JqZWN0U3RhdGUsIFNjZW5lU3RhdGVsZXNzQmVoYXZpb3IgfSBmcm9tICcuLi9jb3JlL3R5cGVzJztcbmltcG9ydCB7IERhdGFRdWVyeVJlcXVlc3QgfSBmcm9tICdAZ3JhZmFuYS9kYXRhJztcbmltcG9ydCB7IExvYWRpbmdTdGF0ZSB9IGZyb20gJ0BncmFmYW5hL3NjaGVtYSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NlbmVRdWVyeVN0YXRlQ29udHJvbGxlclN0YXRlIGV4dGVuZHMgU2NlbmVPYmplY3RTdGF0ZSB7XG4gIGlzUnVubmluZzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY2VuZVF1ZXJ5Q29udHJvbGxlckxpa2UgZXh0ZW5kcyBTY2VuZU9iamVjdDxTY2VuZVF1ZXJ5U3RhdGVDb250cm9sbGVyU3RhdGU+IHtcbiAgaXNRdWVyeUNvbnRyb2xsZXI6IHRydWU7XG4gIGNhbmNlbEFsbCgpOiB2b2lkO1xuXG4gIHF1ZXJ5U3RhcnRlZChlbnRyeTogU2NlbmVRdWVyeUNvbnRyb2xsZXJFbnRyeSk6IHZvaWQ7XG4gIHF1ZXJ5Q29tcGxldGVkKGVudHJ5OiBTY2VuZVF1ZXJ5Q29udHJvbGxlckVudHJ5KTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUXVlcnlDb250cm9sbGVyKHM6IFNjZW5lT2JqZWN0IHwgU2NlbmVTdGF0ZWxlc3NCZWhhdmlvcik6IHMgaXMgU2NlbmVRdWVyeUNvbnRyb2xsZXJMaWtlIHtcbiAgcmV0dXJuICdpc1F1ZXJ5Q29udHJvbGxlcicgaW4gcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVJlc3VsdFdpdGhTdGF0ZSB7XG4gIHN0YXRlOiBMb2FkaW5nU3RhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NlbmVRdWVyeUNvbnRyb2xsZXJFbnRyeSB7XG4gIHJlcXVlc3Q/OiBEYXRhUXVlcnlSZXF1ZXN0O1xuICB0eXBlOiBTY2VuZVF1ZXJ5Q29udHJvbGxlckVudHJ5VHlwZTtcbiAgb3JpZ2luOiBTY2VuZU9iamVjdDtcbiAgY2FuY2VsPzogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgU2NlbmVRdWVyeUNvbnRyb2xsZXJFbnRyeVR5cGUgPSAnZGF0YScgfCAnYW5ub3RhdGlvbnMnIHwgJ3ZhcmlhYmxlJyB8ICdhbGVydHMnO1xuXG5leHBvcnQgY2xhc3MgU2NlbmVRdWVyeUNvbnRyb2xsZXJcbiAgZXh0ZW5kcyBTY2VuZU9iamVjdEJhc2U8U2NlbmVRdWVyeVN0YXRlQ29udHJvbGxlclN0YXRlPlxuICBpbXBsZW1lbnRzIFNjZW5lUXVlcnlDb250cm9sbGVyTGlrZVxue1xuICBwdWJsaWMgaXNRdWVyeUNvbnRyb2xsZXI6IHRydWUgPSB0cnVlO1xuXG4gICNydW5uaW5nID0gbmV3IFNldDxTY2VuZVF1ZXJ5Q29udHJvbGxlckVudHJ5PigpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcih7IGlzUnVubmluZzogZmFsc2UgfSk7XG5cbiAgICAvLyBDbGVhciBydW5uaW5nIHN0YXRlIG9uIGRlYWN0aXZhdGVcbiAgICB0aGlzLmFkZEFjdGl2YXRpb25IYW5kbGVyKCgpID0+IHtcbiAgICAgIHJldHVybiAoKSA9PiB0aGlzLiNydW5uaW5nLmNsZWFyKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcXVlcnlTdGFydGVkKGVudHJ5OiBTY2VuZVF1ZXJ5Q29udHJvbGxlckVudHJ5KSB7XG4gICAgdGhpcy4jcnVubmluZy5hZGQoZW50cnkpO1xuXG4gICAgdGhpcy5jaGFuZ2VSdW5uaW5nUXVlcnlDb3VudCgxKTtcblxuICAgIGlmICghdGhpcy5zdGF0ZS5pc1J1bm5pbmcpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpc1J1bm5pbmc6IHRydWUgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHF1ZXJ5Q29tcGxldGVkKGVudHJ5OiBTY2VuZVF1ZXJ5Q29udHJvbGxlckVudHJ5KSB7XG4gICAgaWYgKCF0aGlzLiNydW5uaW5nLmhhcyhlbnRyeSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLiNydW5uaW5nLmRlbGV0ZShlbnRyeSk7XG5cbiAgICB0aGlzLmNoYW5nZVJ1bm5pbmdRdWVyeUNvdW50KC0xKTtcblxuICAgIGlmICh0aGlzLiNydW5uaW5nLnNpemUgPT09IDApIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpc1J1bm5pbmc6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlUnVubmluZ1F1ZXJ5Q291bnQoZGlyOiAxIHwgLTEpIHtcbiAgICAvKipcbiAgICAgKiBVc2VkIGJ5IGdyYWZhbmEtaW1hZ2UtcmVuZGVyZXIgdG8ga25vdyB3aGVuIGFsbCBxdWVyaWVzIGFyZSBjb21wbGV0ZWQuXG4gICAgICovXG4gICAgKHdpbmRvdyBhcyBhbnkpLl9fZ3JhZmFuYVJ1bm5pbmdRdWVyeUNvdW50ID0gKCh3aW5kb3cgYXMgYW55KS5fX2dyYWZhbmFSdW5uaW5nUXVlcnlDb3VudCA/PyAwKSArIGRpcjtcbiAgfVxuXG4gIHB1YmxpYyBjYW5jZWxBbGwoKSB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLiNydW5uaW5nLnZhbHVlcygpKSB7XG4gICAgICBlbnRyeS5jYW5jZWw/LigpO1xuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUEsUUFBQSxDQUFBO0FBaUJPLFNBQVMsa0JBQWtCLENBQXdFLEVBQUE7QUFDeEcsRUFBQSxPQUFPLG1CQUF1QixJQUFBLENBQUEsQ0FBQTtBQUNoQyxDQUFBO0FBZU8sTUFBTSw2QkFDSCxlQUVWLENBQUE7QUFBQSxFQUtTLFdBQWMsR0FBQTtBQUNuQixJQUFNLEtBQUEsQ0FBQSxFQUFFLFNBQVcsRUFBQSxLQUFBLEVBQU8sQ0FBQSxDQUFBO0FBTDVCLElBQUEsSUFBQSxDQUFPLGlCQUEwQixHQUFBLElBQUEsQ0FBQTtBQUVqQyxJQUFBLFlBQUEsQ0FBQSxJQUFBLEVBQUEsUUFBQSxzQkFBZSxHQUErQixFQUFBLENBQUEsQ0FBQTtBQU01QyxJQUFBLElBQUEsQ0FBSyxxQkFBcUIsTUFBTTtBQUM5QixNQUFPLE9BQUEsTUFBTSxZQUFLLENBQUEsSUFBQSxFQUFBLFFBQUEsQ0FBQSxDQUFTLEtBQU0sRUFBQSxDQUFBO0FBQUEsS0FDbEMsQ0FBQSxDQUFBO0FBQUEsR0FDSDtBQUFBLEVBRU8sYUFBYSxLQUFrQyxFQUFBO0FBQ3BELElBQUssWUFBQSxDQUFBLElBQUEsRUFBQSxRQUFBLENBQUEsQ0FBUyxJQUFJLEtBQUssQ0FBQSxDQUFBO0FBRXZCLElBQUEsSUFBQSxDQUFLLHdCQUF3QixDQUFDLENBQUEsQ0FBQTtBQUU5QixJQUFJLElBQUEsQ0FBQyxJQUFLLENBQUEsS0FBQSxDQUFNLFNBQVcsRUFBQTtBQUN6QixNQUFBLElBQUEsQ0FBSyxRQUFTLENBQUEsRUFBRSxTQUFXLEVBQUEsSUFBQSxFQUFNLENBQUEsQ0FBQTtBQUFBLEtBQ25DO0FBQUEsR0FDRjtBQUFBLEVBRU8sZUFBZSxLQUFrQyxFQUFBO0FBQ3RELElBQUEsSUFBSSxDQUFDLFlBQUEsQ0FBQSxJQUFBLEVBQUssUUFBUyxDQUFBLENBQUEsR0FBQSxDQUFJLEtBQUssQ0FBRyxFQUFBO0FBQzdCLE1BQUEsT0FBQTtBQUFBLEtBQ0Y7QUFFQSxJQUFLLFlBQUEsQ0FBQSxJQUFBLEVBQUEsUUFBQSxDQUFBLENBQVMsT0FBTyxLQUFLLENBQUEsQ0FBQTtBQUUxQixJQUFBLElBQUEsQ0FBSyx3QkFBd0IsQ0FBRSxDQUFBLENBQUEsQ0FBQTtBQUUvQixJQUFJLElBQUEsWUFBQSxDQUFBLElBQUEsRUFBSyxRQUFTLENBQUEsQ0FBQSxJQUFBLEtBQVMsQ0FBRyxFQUFBO0FBQzVCLE1BQUEsSUFBQSxDQUFLLFFBQVMsQ0FBQSxFQUFFLFNBQVcsRUFBQSxLQUFBLEVBQU8sQ0FBQSxDQUFBO0FBQUEsS0FDcEM7QUFBQSxHQUNGO0FBQUEsRUFFUSx3QkFBd0IsR0FBYSxFQUFBO0FBM0UvQyxJQUFBLElBQUEsRUFBQSxDQUFBO0FBK0VJLElBQUMsTUFBZSxDQUFBLDBCQUFBLEdBQUEsQ0FBQSxDQUErQixFQUFlLEdBQUEsTUFBQSxDQUFBLDBCQUFBLEtBQWYsWUFBNkMsQ0FBSyxJQUFBLEdBQUEsQ0FBQTtBQUFBLEdBQ25HO0FBQUEsRUFFTyxTQUFZLEdBQUE7QUFsRnJCLElBQUEsSUFBQSxFQUFBLENBQUE7QUFtRkksSUFBQSxLQUFBLE1BQVcsS0FBUyxJQUFBLFlBQUEsQ0FBQSxJQUFBLEVBQUssUUFBUyxDQUFBLENBQUEsTUFBQSxFQUFVLEVBQUE7QUFDMUMsTUFBQSxDQUFBLEVBQUEsR0FBQSxLQUFBLENBQU0sTUFBTixLQUFBLElBQUEsR0FBQSxLQUFBLENBQUEsR0FBQSxFQUFBLENBQUEsSUFBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBO0FBQUEsS0FDRjtBQUFBLEdBQ0Y7QUFDRixDQUFBO0FBL0NFLFFBQUEsR0FBQSxJQUFBLE9BQUEsRUFBQTs7OzsifQ==
@@ -0,0 +1,5 @@
1
+ export { ActWhenVariableChanged } from './ActWhenVariableChanged.js';
2
+ export { CursorSync } from './CursorSync.js';
3
+ export { SceneQueryController } from './SceneQueryController.js';
4
+ export { LiveNowTimer } from './LiveNowTimer.js';
5
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7In0=
@@ -0,0 +1,59 @@
1
+ import { css } from '@emotion/css';
2
+ import { useStyles2 } from '@grafana/ui';
3
+ import React from 'react';
4
+ import { SceneObjectBase } from '../core/SceneObjectBase.js';
5
+ import { setWindowGrafanaSceneContext } from '../utils/compatibility/setWindowGrafanaSceneContext.js';
6
+
7
+ class EmbeddedScene extends SceneObjectBase {
8
+ constructor(state) {
9
+ super(state);
10
+ this.addActivationHandler(() => {
11
+ const unsetGlobalScene = setWindowGrafanaSceneContext(this);
12
+ return () => {
13
+ unsetGlobalScene();
14
+ };
15
+ });
16
+ }
17
+ }
18
+ EmbeddedScene.Component = EmbeddedSceneRenderer;
19
+ function EmbeddedSceneRenderer({ model }) {
20
+ const { body, controls } = model.useState();
21
+ const styles = useStyles2(getStyles);
22
+ return /* @__PURE__ */ React.createElement("div", {
23
+ className: styles.container
24
+ }, controls && /* @__PURE__ */ React.createElement("div", {
25
+ className: styles.controls
26
+ }, controls.map((control) => /* @__PURE__ */ React.createElement(control.Component, {
27
+ key: control.state.key,
28
+ model: control
29
+ }))), /* @__PURE__ */ React.createElement("div", {
30
+ className: styles.body
31
+ }, /* @__PURE__ */ React.createElement(body.Component, {
32
+ model: body
33
+ })));
34
+ }
35
+ const getStyles = (theme) => {
36
+ return {
37
+ container: css({
38
+ flexGrow: 1,
39
+ display: "flex",
40
+ gap: theme.spacing(2),
41
+ minHeight: "100%",
42
+ flexDirection: "column"
43
+ }),
44
+ body: css({
45
+ flexGrow: 1,
46
+ display: "flex",
47
+ gap: theme.spacing(1)
48
+ }),
49
+ controls: css({
50
+ display: "flex",
51
+ gap: theme.spacing(2),
52
+ alignItems: "flex-end",
53
+ flexWrap: "wrap"
54
+ })
55
+ };
56
+ };
57
+
58
+ export { EmbeddedScene };
59
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW1iZWRkZWRTY2VuZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvRW1iZWRkZWRTY2VuZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vY3NzJztcbmltcG9ydCB7IEdyYWZhbmFUaGVtZTIgfSBmcm9tICdAZ3JhZmFuYS9kYXRhJztcbmltcG9ydCB7IHVzZVN0eWxlczIgfSBmcm9tICdAZ3JhZmFuYS91aSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBTY2VuZU9iamVjdEJhc2UgfSBmcm9tICcuLi9jb3JlL1NjZW5lT2JqZWN0QmFzZSc7XG5pbXBvcnQgeyBTY2VuZUNvbXBvbmVudFByb3BzLCBTY2VuZU9iamVjdFN0YXRlLCBTY2VuZU9iamVjdCB9IGZyb20gJy4uL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgc2V0V2luZG93R3JhZmFuYVNjZW5lQ29udGV4dCB9IGZyb20gJy4uL3V0aWxzL2NvbXBhdGliaWxpdHkvc2V0V2luZG93R3JhZmFuYVNjZW5lQ29udGV4dCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW1iZWRkZWRTY2VuZVN0YXRlIGV4dGVuZHMgU2NlbmVPYmplY3RTdGF0ZSB7XG4gIC8qKlxuICAgKiBUaGUgbWFpbiBjb250ZW50IG9mIHRoZSBzY2VuZSAodXN1YWxseSBhIFNjZW5lRmxleExheW91dClcbiAgICovXG4gIGJvZHk6IFNjZW5lT2JqZWN0O1xuICAvKipcbiAgICogVG9wIHJvdyBvZiB2YXJpYWJsZSBzZWxlY3RvcnMsIGZpbHRlcnMsIHRpbWUgcGlja2VycyBhbmQgY3VzdG9tIGFjdGlvbnMuXG4gICAqL1xuICBjb250cm9scz86IFNjZW5lT2JqZWN0W107XG4gIC8qKlxuICAgKiBGb3IgaW50ZXJvcGVyYWJpbGl0eSAodXNlZCBmcm9tIEVtYmVkZGVkU2NlbmVXaXRoQ29udGV4dClcbiAgICovXG4gIGNvbnRleHQ/OiBTY2VuZU9iamVjdDtcbn1cblxuZXhwb3J0IGNsYXNzIEVtYmVkZGVkU2NlbmUgZXh0ZW5kcyBTY2VuZU9iamVjdEJhc2U8RW1iZWRkZWRTY2VuZVN0YXRlPiB7XG4gIHB1YmxpYyBzdGF0aWMgQ29tcG9uZW50ID0gRW1iZWRkZWRTY2VuZVJlbmRlcmVyO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzdGF0ZTogRW1iZWRkZWRTY2VuZVN0YXRlKSB7XG4gICAgc3VwZXIoc3RhdGUpO1xuXG4gICAgdGhpcy5hZGRBY3RpdmF0aW9uSGFuZGxlcigoKSA9PiB7XG4gICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHNldHRpbmcgd2luZG93Ll9fZ3JhZmFuYVNjZW5lQ29udGV4dCB3aGljaCBpcyB1c2VkIGZyb20gR3JhZmFuYSBjb3JlIGluIHRoZSBvbGQgc2VydmljZXMgVGltZVNydiBhbmQgVGVtcGxhdGVTcnYuXG4gICAgICAvLyBUaGlzIHdvcmtzIGFzIGEgYmFja3dhcmQgY29tcGF0YWJpbGl0eSBtZXRob2QgdG8gc3VwcG9ydCBhY2Nlc3Npbmcgc2NlbmUgdGltZSByYW5nZSBhbmQgdmFyaWFibGVzIGZyb20gdGhvc2Ugb2xkIHNlcnZpY2VzLlxuICAgICAgY29uc3QgdW5zZXRHbG9iYWxTY2VuZSA9IHNldFdpbmRvd0dyYWZhbmFTY2VuZUNvbnRleHQodGhpcyk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB1bnNldEdsb2JhbFNjZW5lKCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIEVtYmVkZGVkU2NlbmVSZW5kZXJlcih7IG1vZGVsIH06IFNjZW5lQ29tcG9uZW50UHJvcHM8RW1iZWRkZWRTY2VuZT4pIHtcbiAgY29uc3QgeyBib2R5LCBjb250cm9scyB9ID0gbW9kZWwudXNlU3RhdGUoKTtcbiAgY29uc3Qgc3R5bGVzID0gdXNlU3R5bGVzMihnZXRTdHlsZXMpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAge2NvbnRyb2xzICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250cm9sc30+XG4gICAgICAgICAge2NvbnRyb2xzLm1hcCgoY29udHJvbCkgPT4gKFxuICAgICAgICAgICAgPGNvbnRyb2wuQ29tcG9uZW50IGtleT17Y29udHJvbC5zdGF0ZS5rZXl9IG1vZGVsPXtjb250cm9sfSAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9PlxuICAgICAgICA8Ym9keS5Db21wb25lbnQgbW9kZWw9e2JvZHl9IC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuY29uc3QgZ2V0U3R5bGVzID0gKHRoZW1lOiBHcmFmYW5hVGhlbWUyKSA9PiB7XG4gIHJldHVybiB7XG4gICAgY29udGFpbmVyOiBjc3Moe1xuICAgICAgZmxleEdyb3c6IDEsXG4gICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICBnYXA6IHRoZW1lLnNwYWNpbmcoMiksXG4gICAgICBtaW5IZWlnaHQ6ICcxMDAlJyxcbiAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIH0pLFxuICAgIGJvZHk6IGNzcyh7XG4gICAgICBmbGV4R3JvdzogMSxcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGdhcDogdGhlbWUuc3BhY2luZygxKSxcbiAgICB9KSxcbiAgICBjb250cm9sczogY3NzKHtcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGdhcDogdGhlbWUuc3BhY2luZygyKSxcbiAgICAgIGFsaWduSXRlbXM6ICdmbGV4LWVuZCcsXG4gICAgICBmbGV4V3JhcDogJ3dyYXAnLFxuICAgIH0pLFxuICB9O1xufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUF3Qk8sTUFBTSxzQkFBc0IsZUFBb0MsQ0FBQTtBQUFBLEVBRzlELFlBQVksS0FBMkIsRUFBQTtB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
@@ -0,0 +1,95 @@
1
+ import { cx, css } from '@emotion/css';
2
+ import React from 'react';
3
+ import { useStyles2, ToolbarButton, Icon } from '@grafana/ui';
4
+ import { SceneObjectBase } from '../core/SceneObjectBase.js';
5
+ import { getSceneGridRowStyles } from './layout/grid/SceneGridRow.js';
6
+ import { sceneGraph } from '../core/sceneGraph/index.js';
7
+
8
+ class NestedScene extends SceneObjectBase {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.onToggle = () => {
12
+ this.setState({
13
+ isCollapsed: !this.state.isCollapsed
14
+ });
15
+ };
16
+ this.onRemove = () => {
17
+ const parent = this.parent;
18
+ if (isSceneLayoutItem(parent)) {
19
+ parent.setState({
20
+ body: void 0
21
+ });
22
+ }
23
+ };
24
+ }
25
+ }
26
+ NestedScene.Component = NestedSceneRenderer;
27
+ function NestedSceneRenderer({ model }) {
28
+ const { title, isCollapsed, canCollapse, canRemove, body, controls } = model.useState();
29
+ const gridRow = useStyles2(getSceneGridRowStyles);
30
+ const styles = useStyles2(getStyles);
31
+ const toolbarControls = (controls != null ? controls : []).map((action) => /* @__PURE__ */ React.createElement(action.Component, {
32
+ key: action.state.key,
33
+ model: action
34
+ }));
35
+ if (canRemove) {
36
+ toolbarControls.push(
37
+ /* @__PURE__ */ React.createElement(ToolbarButton, {
38
+ icon: "times",
39
+ variant: "default",
40
+ onClick: model.onRemove,
41
+ key: "remove-button",
42
+ "aria-label": "Remove scene"
43
+ })
44
+ );
45
+ }
46
+ return /* @__PURE__ */ React.createElement("div", {
47
+ className: styles.wrapper
48
+ }, /* @__PURE__ */ React.createElement("div", {
49
+ className: cx(styles.row, isCollapsed && styles.rowCollapsed)
50
+ }, /* @__PURE__ */ React.createElement("button", {
51
+ onClick: model.onToggle,
52
+ className: gridRow.rowTitleButton,
53
+ "aria-label": isCollapsed ? "Expand scene" : "Collapse scene"
54
+ }, canCollapse && /* @__PURE__ */ React.createElement(Icon, {
55
+ name: isCollapsed ? "angle-right" : "angle-down"
56
+ }), /* @__PURE__ */ React.createElement("span", {
57
+ className: gridRow.rowTitle,
58
+ role: "heading"
59
+ }, sceneGraph.interpolate(model, title, void 0, "text"))), /* @__PURE__ */ React.createElement("div", {
60
+ className: styles.actions
61
+ }, toolbarControls)), !isCollapsed && /* @__PURE__ */ React.createElement(body.Component, {
62
+ model: body
63
+ }));
64
+ }
65
+ const getStyles = (theme) => ({
66
+ wrapper: css({
67
+ display: "flex",
68
+ flexDirection: "column",
69
+ flexGrow: 1,
70
+ gap: theme.spacing(1)
71
+ }),
72
+ row: css({
73
+ width: "100%",
74
+ display: "flex",
75
+ justifyContent: "space-between",
76
+ gap: theme.spacing(1)
77
+ }),
78
+ rowCollapsed: css({
79
+ borderBottom: `1px solid ${theme.colors.border.weak}`,
80
+ paddingBottom: theme.spacing(1)
81
+ }),
82
+ actions: css({
83
+ display: "flex",
84
+ alignItems: "center",
85
+ gap: theme.spacing(1),
86
+ justifyContent: "flex-end",
87
+ flexGrow: 1
88
+ })
89
+ });
90
+ function isSceneLayoutItem(x) {
91
+ return "body" in x.state;
92
+ }
93
+
94
+ export { NestedScene, NestedSceneRenderer };
95
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmVzdGVkU2NlbmUuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL05lc3RlZFNjZW5lLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjc3MsIGN4IH0gZnJvbSAnQGVtb3Rpb24vY3NzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IEdyYWZhbmFUaGVtZTIgfSBmcm9tICdAZ3JhZmFuYS9kYXRhJztcbmltcG9ydCB7IEljb24sIFRvb2xiYXJCdXR0b24sIHVzZVN0eWxlczIgfSBmcm9tICdAZ3JhZmFuYS91aSc7XG5cbmltcG9ydCB7IFNjZW5lT2JqZWN0QmFzZSB9IGZyb20gJy4uL2NvcmUvU2NlbmVPYmplY3RCYXNlJztcbmltcG9ydCB7IFNjZW5lT2JqZWN0LCBTY2VuZUNvbXBvbmVudFByb3BzLCBTY2VuZUxheW91dCwgU2NlbmVPYmplY3RTdGF0ZSB9IGZyb20gJy4uL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgZ2V0U2NlbmVHcmlkUm93U3R5bGVzIH0gZnJvbSAnLi9sYXlvdXQvZ3JpZC9TY2VuZUdyaWRSb3cnO1xuaW1wb3J0IHsgc2NlbmVHcmFwaCB9IGZyb20gJy4uL2NvcmUvc2NlbmVHcmFwaCc7XG5cbmludGVyZmFjZSBOZXN0ZWRTY2VuZVN0YXRlIGV4dGVuZHMgU2NlbmVPYmplY3RTdGF0ZSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGlzQ29sbGFwc2VkPzogYm9vbGVhbjtcbiAgY2FuQ29sbGFwc2U/OiBib29sZWFuO1xuICBjYW5SZW1vdmU/OiBib29sZWFuO1xuICBib2R5OiBTY2VuZUxheW91dDtcbiAgY29udHJvbHM/OiBTY2VuZU9iamVjdFtdO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogUE9DIHN0YXR1cywgZG9uJ3QgdXNlIHRoaXMgeWV0XG4gKi9cbmV4cG9ydCBjbGFzcyBOZXN0ZWRTY2VuZSBleHRlbmRzIFNjZW5lT2JqZWN0QmFzZTxOZXN0ZWRTY2VuZVN0YXRlPiB7XG4gIHB1YmxpYyBzdGF0aWMgQ29tcG9uZW50ID0gTmVzdGVkU2NlbmVSZW5kZXJlcjtcblxuICBwdWJsaWMgb25Ub2dnbGUgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpc0NvbGxhcHNlZDogIXRoaXMuc3RhdGUuaXNDb2xsYXBzZWQsXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqIFJlbW92ZXMgaXRzZWxmIGZyb20gaXRzIHBhcmVudCdzIGNoaWxkcmVuIGFycmF5ICovXG4gIHB1YmxpYyBvblJlbW92ZSA9ICgpID0+IHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudCE7XG5cbiAgICBpZiAoaXNTY2VuZUxheW91dEl0ZW0ocGFyZW50KSkge1xuICAgICAgcGFyZW50LnNldFN0YXRlKHtcbiAgICAgICAgYm9keTogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTmVzdGVkU2NlbmVSZW5kZXJlcih7IG1vZGVsIH06IFNjZW5lQ29tcG9uZW50UHJvcHM8TmVzdGVkU2NlbmU+KSB7XG4gIGNvbnN0IHsgdGl0bGUsIGlzQ29sbGFwc2VkLCBjYW5Db2xsYXBzZSwgY2FuUmVtb3ZlLCBib2R5LCBjb250cm9scyB9ID0gbW9kZWwudXNlU3RhdGUoKTtcbiAgY29uc3QgZ3JpZFJvdyA9IHVzZVN0eWxlczIoZ2V0U2NlbmVHcmlkUm93U3R5bGVzKTtcbiAgY29uc3Qgc3R5bGVzID0gdXNlU3R5bGVzMihnZXRTdHlsZXMpO1xuXG4gIGNvbnN0IHRvb2xiYXJDb250cm9scyA9IChjb250cm9scyA/PyBbXSkubWFwKChhY3Rpb24pID0+IDxhY3Rpb24uQ29tcG9uZW50IGtleT17YWN0aW9uLnN0YXRlLmtleX0gbW9kZWw9e2FjdGlvbn0gLz4pO1xuXG4gIGlmIChjYW5SZW1vdmUpIHtcbiAgICB0b29sYmFyQ29udHJvbHMucHVzaChcbiAgICAgIDxUb29sYmFyQnV0dG9uXG4gICAgICAgIGljb249XCJ0aW1lc1wiXG4gICAgICAgIHZhcmlhbnQ9eydkZWZhdWx0J31cbiAgICAgICAgb25DbGljaz17bW9kZWwub25SZW1vdmV9XG4gICAgICAgIGtleT1cInJlbW92ZS1idXR0b25cIlxuICAgICAgICBhcmlhLWxhYmVsPVwiUmVtb3ZlIHNjZW5lXCJcbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy53cmFwcGVyfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjeChzdHlsZXMucm93LCBpc0NvbGxhcHNlZCAmJiBzdHlsZXMucm93Q29sbGFwc2VkKX0+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBvbkNsaWNrPXttb2RlbC5vblRvZ2dsZX1cbiAgICAgICAgICBjbGFzc05hbWU9e2dyaWRSb3cucm93VGl0bGVCdXR0b259XG4gICAgICAgICAgYXJpYS1sYWJlbD17aXNDb2xsYXBzZWQgPyAnRXhwYW5kIHNjZW5lJyA6ICdDb2xsYXBzZSBzY2VuZSd9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2FuQ29sbGFwc2UgJiYgPEljb24gbmFtZT17aXNDb2xsYXBzZWQgPyAnYW5nbGUtcmlnaHQnIDogJ2FuZ2xlLWRvd24nfSAvPn1cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2dyaWRSb3cucm93VGl0bGV9IHJvbGU9XCJoZWFkaW5nXCI+XG4gICAgICAgICAgICB7c2NlbmVHcmFwaC5pbnRlcnBvbGF0ZShtb2RlbCwgdGl0bGUsIHVuZGVmaW5lZCwgJ3RleHQnKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmFjdGlvbnN9Pnt0b29sYmFyQ29udHJvbHN9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIHshaXNDb2xsYXBzZWQgJiYgPGJvZHkuQ29tcG9uZW50IG1vZGVsPXtib2R5fSAvPn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuY29uc3QgZ2V0U3R5bGVzID0gKHRoZW1lOiBHcmFmYW5hVGhlbWUyKSA9PiAoe1xuICB3cmFwcGVyOiBjc3Moe1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBmbGV4R3JvdzogMSxcbiAgICBnYXA6IHRoZW1lLnNwYWNpbmcoMSksXG4gIH0pLFxuICByb3c6IGNzcyh7XG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICBnYXA6IHRoZW1lLnNwYWNpbmcoMSksXG4gIH0pLFxuICByb3dDb2xsYXBzZWQ6IGNzcyh7XG4gICAgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7dGhlbWUuY29sb3JzLmJvcmRlci53ZWFrfWAsXG4gICAgcGFkZGluZ0JvdHRvbTogdGhlbWUuc3BhY2luZygxKSxcbiAgfSksXG4gIGFjdGlvbnM6IGNzcyh7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogdGhlbWUuc3BhY2luZygxKSxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyxcbiAgICBmbGV4R3JvdzogMSxcbiAgfSksXG59KTtcblxuZnVuY3Rpb24gaXNTY2VuZUxheW91dEl0ZW0oeDogU2NlbmVPYmplY3QpOiB4IGlzIFNjZW5lT2JqZWN0PFNjZW5lT2JqZWN0U3RhdGUgJiB7IGJvZHk6IFNjZW5lT2JqZWN0IHwgdW5kZWZpbmVkIH0+IHtcbiAgcmV0dXJuICdib2R5JyBpbiB4LnN0YXRlO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUF3Qk8sTUFBTSxvQkFBb0IsZUFBa0MsQ0FBQTtBQUFBLEVBQTVELFdBQUEsR0FBQTtBQUFBLElBQUEsS0FBQSxDQUFBLEdBQUEsU0FBQSxDQUFBLENBQUE7QUFHTCxJQUFBLElBQUEsQ0FBTyxXQUFXLE1BQU07QUFDdEIsTUFBQSxJQUFBLENBQUss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
@@ -0,0 +1,37 @@
1
+ import React, { createContext } from 'react';
2
+ import { Switch, Route } from 'react-router-dom';
3
+ import { SceneObjectBase } from '../../core/SceneObjectBase.js';
4
+ import { renderSceneComponentWithRouteProps } from './utils.js';
5
+
6
+ class SceneApp extends SceneObjectBase {
7
+ enrichDataRequest() {
8
+ return {
9
+ app: this.state.name || "app"
10
+ };
11
+ }
12
+ }
13
+ SceneApp.Component = ({ model }) => {
14
+ const { pages } = model.useState();
15
+ return /* @__PURE__ */ React.createElement(SceneAppContext.Provider, {
16
+ value: model
17
+ }, /* @__PURE__ */ React.createElement(Switch, null, pages.map((page) => /* @__PURE__ */ React.createElement(Route, {
18
+ key: page.state.url,
19
+ exact: false,
20
+ path: page.state.url,
21
+ render: (props) => renderSceneComponentWithRouteProps(page, props)
22
+ }))));
23
+ };
24
+ const SceneAppContext = createContext(null);
25
+ const sceneAppCache = /* @__PURE__ */ new Map();
26
+ function useSceneApp(factory) {
27
+ const cachedApp = sceneAppCache.get(factory);
28
+ if (cachedApp) {
29
+ return cachedApp;
30
+ }
31
+ const newApp = factory();
32
+ sceneAppCache.set(factory, newApp);
33
+ return newApp;
34
+ }
35
+
36
+ export { SceneApp, SceneAppContext, useSceneApp };
37
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NlbmVBcHAuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1NjZW5lQXBwL1NjZW5lQXBwLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFJvdXRlLCBTd2l0Y2ggfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcblxuaW1wb3J0IHsgRGF0YVJlcXVlc3RFbnJpY2hlciwgU2NlbmVDb21wb25lbnRQcm9wcyB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgU2NlbmVPYmplY3RCYXNlIH0gZnJvbSAnLi4vLi4vY29yZS9TY2VuZU9iamVjdEJhc2UnO1xuaW1wb3J0IHsgU2NlbmVBcHBTdGF0ZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgcmVuZGVyU2NlbmVDb21wb25lbnRXaXRoUm91dGVQcm9wcyB9IGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIFJlc3BvbnNpYmxlIGZvciB0b3AgbGV2ZWwgcGFnZXMgcm91dGluZ1xuICovXG5leHBvcnQgY2xhc3MgU2NlbmVBcHAgZXh0ZW5kcyBTY2VuZU9iamVjdEJhc2U8U2NlbmVBcHBTdGF0ZT4gaW1wbGVtZW50cyBEYXRhUmVxdWVzdEVucmljaGVyIHtcbiAgcHVibGljIGVucmljaERhdGFSZXF1ZXN0KCkge1xuICAgIHJldHVybiB7XG4gICAgICBhcHA6IHRoaXMuc3RhdGUubmFtZSB8fCAnYXBwJyxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBDb21wb25lbnQgPSAoeyBtb2RlbCB9OiBTY2VuZUNvbXBvbmVudFByb3BzPFNjZW5lQXBwPikgPT4ge1xuICAgIGNvbnN0IHsgcGFnZXMgfSA9IG1vZGVsLnVzZVN0YXRlKCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNjZW5lQXBwQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17bW9kZWx9PlxuICAgICAgICA8U3dpdGNoPlxuICAgICAgICAgIHtwYWdlcy5tYXAoKHBhZ2UpID0+IChcbiAgICAgICAgICAgIDxSb3V0ZVxuICAgICAgICAgICAgICBrZXk9e3BhZ2Uuc3RhdGUudXJsfVxuICAgICAgICAgICAgICBleGFjdD17ZmFsc2V9XG4gICAgICAgICAgICAgIHBhdGg9e3BhZ2Uuc3RhdGUudXJsfVxuICAgICAgICAgICAgICByZW5kZXI9eyhwcm9wcykgPT4gcmVuZGVyU2NlbmVDb21wb25lbnRXaXRoUm91dGVQcm9wcyhwYWdlLCBwcm9wcyl9XG4gICAgICAgICAgICA+PC9Sb3V0ZT5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9Td2l0Y2g+XG4gICAgICA8L1NjZW5lQXBwQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgU2NlbmVBcHBDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxTY2VuZUFwcCB8IG51bGw+KG51bGwpO1xuXG5jb25zdCBzY2VuZUFwcENhY2hlID0gbmV3IE1hcDxvYmplY3QsIFNjZW5lQXBwPigpO1xuXG4vKipcbiAqIENhY2hlcyB0aGUgdGhlIHJlc3VsdGluZyBTY2VuZUFwcCByZXR1cm5lZCBieSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBzbyB0aGF0IGl0J3Mgb25seSBjYWxsZWQgb25jZSBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mIHRoZSBicm93c2VyIHRhYlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU2NlbmVBcHAoZmFjdG9yeTogKCkgPT4gU2NlbmVBcHApIHtcbiAgY29uc3QgY2FjaGVkQXBwID0gc2NlbmVBcHBDYWNoZS5nZXQoZmFjdG9yeSk7XG5cbiAgaWYgKGNhY2hlZEFwcCkge1xuICAgIHJldHVybiBjYWNoZWRBcHA7XG4gIH1cblxuICBjb25zdCBuZXdBcHAgPSBmYWN0b3J5KCk7XG4gIHNjZW5lQXBwQ2FjaGUuc2V0KGZhY3RvcnksIG5ld0FwcCk7XG5cbiAgcmV0dXJuIG5ld0FwcDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVdPLE1BQU0saUJBQWlCLGVBQThELENBQUE7QUFBQSxFQUNuRixpQkFBb0IsR0FBQTtBQUN6QixJQUFPLE9BQUE7QUFBQSxNQUNMLEdBQUEsRUFBSyxJQUFLLENBQUEsS0FBQSxDQUFNLElBQVEsSUFBQSxLQUFBO0FBQUEsS0FDMUIsQ0FBQTtBQUFBLEdBQ0Y7QUFvQkYsQ0FBQTtBQXpCYSxRQUFBLENBT0csU0FBWSxHQUFBLENBQUMsRUFBRSxLQUFBLEVBQTJDLEtBQUE7QUFDdEUsRUFBQSxNQUFNLEVBQUUsS0FBQSxFQUFVLEdBQUEsS0FBQSxDQUFNLFFBQVMsRUFBQSxDQUFBO0FBRWpDLEVBQ0UsdUJBQUEsS0FBQSxDQUFBLGFBQUEsQ0FBQyxnQkFBZ0IsUUFBaEIsRUFBQTtBQUFBLElBQXlCLEtBQU8sRUFBQSxLQUFBO0FBQUEsR0FBQSxzQ0FDOUIsTUFDRSxFQUFBLElBQUEsRUFBQSxLQUFBLENBQU0sR0FBSSxDQUFBLENBQUMseUJBQ1QsS0FBQSxDQUFBLGFBQUEsQ0FBQSxLQUFBLEVBQUE7QUFBQSxJQUNDLEdBQUEsRUFBSyxLQUFLLEtBQU0sQ0FBQSxHQUFBO0FBQUEsSUFDaEIsS0FBTyxFQUFBLEtBQUE7QUFBQSxJQUNQLElBQUEsRUFBTSxLQUFLLEtBQU0sQ0FBQSxHQUFBO0FBQUEsSUFDakIsTUFBUSxFQUFBLENBQUMsS0FBVSxLQUFBLGtDQUFBLENBQW1DLE1BQU0sS0FBSyxDQUFBO0FBQUEsR0FDbEUsQ0FDRixDQUNILENBQ0YsQ0FBQSxDQUFBO0FBRUosQ0FBQSxDQUFBO0FBR1csTUFBQSxlQUFBLEdBQWtCLGNBQStCLElBQUksRUFBQTtBQUVsRSxNQUFNLGFBQUEsdUJBQW9CLEdBQXNCLEVBQUEsQ0FBQTtBQUt6QyxTQUFTLFlBQVksT0FBeUIsRUFBQTtBQUNuRCxFQUFNLE1BQUEsU0FBQSxHQUFZLGFBQWMsQ0FBQSxHQUFBLENBQUksT0FBTyxDQUFBLENBQUE7QUFFM0MsRUFBQSxJQUFJLFNBQVcsRUFBQTtBQUNiLElBQU8sT0FBQSxTQUFBLENBQUE7QUFBQSxHQUNUO0FBRUEsRUFBQSxNQUFNLFNBQVMsT0FBUSxFQUFBLENBQUE7QUFDdkIsRUFBYyxhQUFBLENBQUEsR0FBQSxDQUFJLFNBQVMsTUFBTSxDQUFBLENBQUE7QUFFakMsRUFBTyxPQUFBLE1BQUEsQ0FBQTtBQUNUOzs7OyJ9
@@ -0,0 +1,176 @@
1
+ import React from 'react';
2
+ import { Route, Switch } from 'react-router-dom';
3
+ import { SceneObjectBase } from '../../core/SceneObjectBase.js';
4
+ import { isDataRequestEnricher } from '../../core/types.js';
5
+ import { EmbeddedScene } from '../EmbeddedScene.js';
6
+ import { SceneFlexLayout, SceneFlexItem } from '../layout/SceneFlexLayout.js';
7
+ import { SceneReactObject } from '../SceneReactObject.js';
8
+ import { SceneAppDrilldownViewRender, SceneAppPageView } from './SceneAppPageView.js';
9
+ import { renderSceneComponentWithRouteProps } from './utils.js';
10
+
11
+ class SceneAppPage extends SceneObjectBase {
12
+ constructor(state) {
13
+ super(state);
14
+ this._sceneCache = /* @__PURE__ */ new Map();
15
+ this._drilldownCache = /* @__PURE__ */ new Map();
16
+ }
17
+ initializeScene(scene) {
18
+ this.setState({ initializedScene: scene });
19
+ }
20
+ getScene(routeMatch) {
21
+ let scene = this._sceneCache.get(routeMatch.url);
22
+ if (scene) {
23
+ return scene;
24
+ }
25
+ if (!this.state.getScene) {
26
+ throw new Error("Missing getScene on SceneAppPage " + this.state.title);
27
+ }
28
+ scene = this.state.getScene(routeMatch);
29
+ this._sceneCache.set(routeMatch.url, scene);
30
+ return scene;
31
+ }
32
+ getDrilldownPage(drilldown, routeMatch) {
33
+ let page = this._drilldownCache.get(routeMatch.url);
34
+ if (page) {
35
+ return page;
36
+ }
37
+ page = drilldown.getPage(routeMatch, this);
38
+ this._drilldownCache.set(routeMatch.url, page);
39
+ return page;
40
+ }
41
+ enrichDataRequest(source) {
42
+ if (this.state.getParentPage) {
43
+ return this.state.getParentPage().enrichDataRequest(source);
44
+ }
45
+ if (!this.parent) {
46
+ return null;
47
+ }
48
+ const root = this.getRoot();
49
+ if (isDataRequestEnricher(root)) {
50
+ return root.enrichDataRequest(source);
51
+ }
52
+ return null;
53
+ }
54
+ }
55
+ SceneAppPage.Component = SceneAppPageRenderer;
56
+ function SceneAppPageRenderer({ model, routeProps }) {
57
+ var _a, _b;
58
+ const { tabs, drilldowns } = model.useState();
59
+ const routes = [];
60
+ if (tabs && tabs.length > 0) {
61
+ for (let tabIndex = 0; tabIndex < tabs.length; tabIndex++) {
62
+ const tab = tabs[tabIndex];
63
+ if (tabIndex === 0) {
64
+ routes.push(
65
+ /* @__PURE__ */ React.createElement(Route, {
66
+ exact: true,
67
+ key: model.state.url,
68
+ path: (_a = model.state.routePath) != null ? _a : model.state.url,
69
+ render: (props) => renderSceneComponentWithRouteProps(tab, props)
70
+ })
71
+ );
72
+ }
73
+ routes.push(
74
+ /* @__PURE__ */ React.createElement(Route, {
75
+ exact: true,
76
+ key: tab.state.url,
77
+ path: (_b = tab.state.routePath) != null ? _b : tab.state.url,
78
+ render: (props) => renderSceneComponentWithRouteProps(tab, props)
79
+ })
80
+ );
81
+ if (tab.state.drilldowns) {
82
+ for (const drilldown of tab.state.drilldowns) {
83
+ routes.push(
84
+ /* @__PURE__ */ React.createElement(Route, {
85
+ exact: false,
86
+ key: drilldown.routePath,
87
+ path: drilldown.routePath,
88
+ render: (props) => /* @__PURE__ */ React.createElement(SceneAppDrilldownViewRender, {
89
+ drilldown,
90
+ parent: tab,
91
+ routeProps: props
92
+ })
93
+ })
94
+ );
95
+ }
96
+ }
97
+ }
98
+ }
99
+ if (drilldowns) {
100
+ for (const drilldown of drilldowns) {
101
+ routes.push(
102
+ /* @__PURE__ */ React.createElement(Route, {
103
+ key: drilldown.routePath,
104
+ exact: false,
105
+ path: drilldown.routePath,
106
+ render: (props) => /* @__PURE__ */ React.createElement(SceneAppDrilldownViewRender, {
107
+ drilldown,
108
+ parent: model,
109
+ routeProps: props
110
+ })
111
+ })
112
+ );
113
+ }
114
+ }
115
+ if (!tabs && isCurrentPageRouteMatch(model, routeProps.match)) {
116
+ return /* @__PURE__ */ React.createElement(SceneAppPageView, {
117
+ page: model,
118
+ routeProps
119
+ });
120
+ }
121
+ routes.push(getFallbackRoute(model, routeProps));
122
+ return /* @__PURE__ */ React.createElement(Switch, null, routes);
123
+ }
124
+ function getFallbackRoute(page, routeProps) {
125
+ return /* @__PURE__ */ React.createElement(Route, {
126
+ key: "fallback route",
127
+ render: (props) => {
128
+ var _a, _b, _c;
129
+ const fallbackPage = (_c = (_b = (_a = page.state).getFallbackPage) == null ? void 0 : _b.call(_a)) != null ? _c : getDefaultFallbackPage();
130
+ return /* @__PURE__ */ React.createElement(SceneAppPageView, {
131
+ page: fallbackPage,
132
+ routeProps
133
+ });
134
+ }
135
+ });
136
+ }
137
+ function isCurrentPageRouteMatch(page, match) {
138
+ if (!match.isExact) {
139
+ return false;
140
+ }
141
+ if (match.url === page.state.url) {
142
+ return true;
143
+ }
144
+ if (page.parent instanceof SceneAppPage && page.parent.state.tabs[0] === page && page.parent.state.url === match.url) {
145
+ return true;
146
+ }
147
+ return false;
148
+ }
149
+ function getDefaultFallbackPage() {
150
+ return new SceneAppPage({
151
+ url: "",
152
+ title: "Not found",
153
+ subTitle: "The url did not match any page",
154
+ getScene: () => {
155
+ return new EmbeddedScene({
156
+ body: new SceneFlexLayout({
157
+ direction: "column",
158
+ children: [
159
+ new SceneFlexItem({
160
+ body: new SceneReactObject({
161
+ component: () => {
162
+ return /* @__PURE__ */ React.createElement("div", {
163
+ "data-testid": "default-fallback-content"
164
+ }, "If you found your way here using a link then there might be a bug in this application.");
165
+ }
166
+ })
167
+ })
168
+ ]
169
+ })
170
+ });
171
+ }
172
+ });
173
+ }
174
+
175
+ export { SceneAppPage };
176
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NlbmVBcHBQYWdlLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9TY2VuZUFwcC9TY2VuZUFwcFBhZ2UudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSb3V0ZSwgUm91dGVDb21wb25lbnRQcm9wcywgU3dpdGNoIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgeyBTY2VuZU9iamVjdEJhc2UgfSBmcm9tICcuLi8uLi9jb3JlL1NjZW5lT2JqZWN0QmFzZSc7XG5pbXBvcnQgeyBTY2VuZUNvbXBvbmVudFByb3BzLCBTY2VuZU9iamVjdCwgaXNEYXRhUmVxdWVzdEVucmljaGVyIH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcyc7XG5pbXBvcnQgeyBFbWJlZGRlZFNjZW5lIH0gZnJvbSAnLi4vRW1iZWRkZWRTY2VuZSc7XG5pbXBvcnQgeyBTY2VuZUZsZXhJdGVtLCBTY2VuZUZsZXhMYXlvdXQgfSBmcm9tICcuLi9sYXlvdXQvU2NlbmVGbGV4TGF5b3V0JztcbmltcG9ydCB7IFNjZW5lUmVhY3RPYmplY3QgfSBmcm9tICcuLi9TY2VuZVJlYWN0T2JqZWN0JztcbmltcG9ydCB7IFNjZW5lQXBwRHJpbGxkb3duVmlld1JlbmRlciwgU2NlbmVBcHBQYWdlVmlldyB9IGZyb20gJy4vU2NlbmVBcHBQYWdlVmlldyc7XG5pbXBvcnQgeyBTY2VuZUFwcERyaWxsZG93blZpZXcsIFNjZW5lQXBwUGFnZUxpa2UsIFNjZW5lQXBwUGFnZVN0YXRlLCBTY2VuZVJvdXRlTWF0Y2ggfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IHJlbmRlclNjZW5lQ29tcG9uZW50V2l0aFJvdXRlUHJvcHMgfSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBSZXNwb25zaWJsZSBmb3IgcGFnZSdzIGRyaWxsZG93biAmIHRhYnMgcm91dGluZ1xuICovXG5leHBvcnQgY2xhc3MgU2NlbmVBcHBQYWdlIGV4dGVuZHMgU2NlbmVPYmplY3RCYXNlPFNjZW5lQXBwUGFnZVN0YXRlPiBpbXBsZW1lbnRzIFNjZW5lQXBwUGFnZUxpa2Uge1xuICBwdWJsaWMgc3RhdGljIENvbXBvbmVudCA9IFNjZW5lQXBwUGFnZVJlbmRlcmVyO1xuICBwcml2YXRlIF9zY2VuZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEVtYmVkZGVkU2NlbmU+KCk7XG4gIHByaXZhdGUgX2RyaWxsZG93bkNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFNjZW5lQXBwUGFnZUxpa2U+KCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHN0YXRlOiBTY2VuZUFwcFBhZ2VTdGF0ZSkge1xuICAgIHN1cGVyKHN0YXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0aWFsaXplU2NlbmUoc2NlbmU6IEVtYmVkZGVkU2NlbmUpIHtcbiAgICB0aGlzLnNldFN0YXRlKHsgaW5pdGlhbGl6ZWRTY2VuZTogc2NlbmUgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2NlbmUocm91dGVNYXRjaDogU2NlbmVSb3V0ZU1hdGNoKTogRW1iZWRkZWRTY2VuZSB7XG4gICAgbGV0IHNjZW5lID0gdGhpcy5fc2NlbmVDYWNoZS5nZXQocm91dGVNYXRjaC51cmwpO1xuXG4gICAgaWYgKHNjZW5lKSB7XG4gICAgICByZXR1cm4gc2NlbmU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnN0YXRlLmdldFNjZW5lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgZ2V0U2NlbmUgb24gU2NlbmVBcHBQYWdlICcgKyB0aGlzLnN0YXRlLnRpdGxlKTtcbiAgICB9XG5cbiAgICBzY2VuZSA9IHRoaXMuc3RhdGUuZ2V0U2NlbmUocm91dGVNYXRjaCk7XG4gICAgdGhpcy5fc2NlbmVDYWNoZS5zZXQocm91dGVNYXRjaC51cmwsIHNjZW5lKTtcblxuICAgIHJldHVybiBzY2VuZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREcmlsbGRvd25QYWdlKGRyaWxsZG93bjogU2NlbmVBcHBEcmlsbGRvd25WaWV3LCByb3V0ZU1hdGNoOiBTY2VuZVJvdXRlTWF0Y2g8e30+KTogU2NlbmVBcHBQYWdlTGlrZSB7XG4gICAgbGV0IHBhZ2UgPSB0aGlzLl9kcmlsbGRvd25DYWNoZS5nZXQocm91dGVNYXRjaCEudXJsKTtcbiAgICBpZiAocGFnZSkge1xuICAgICAgcmV0dXJuIHBhZ2U7XG4gICAgfVxuXG4gICAgcGFnZSA9IGRyaWxsZG93bi5nZXRQYWdlKHJvdXRlTWF0Y2gsIHRoaXMpO1xuICAgIHRoaXMuX2RyaWxsZG93bkNhY2hlLnNldChyb3V0ZU1hdGNoIS51cmwsIHBhZ2UpO1xuXG4gICAgcmV0dXJuIHBhZ2U7XG4gIH1cblxuICBwdWJsaWMgZW5yaWNoRGF0YVJlcXVlc3Qoc291cmNlOiBTY2VuZU9iamVjdCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmdldFBhcmVudFBhZ2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXRlLmdldFBhcmVudFBhZ2UoKS5lbnJpY2hEYXRhUmVxdWVzdChzb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5wYXJlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJvb3QgPSB0aGlzLmdldFJvb3QoKTtcblxuICAgIGlmIChpc0RhdGFSZXF1ZXN0RW5yaWNoZXIocm9vdCkpIHtcbiAgICAgIHJldHVybiByb290LmVucmljaERhdGFSZXF1ZXN0KHNvdXJjZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY2VuZUFwcFBhZ2VSZW5kZXJlclByb3BzIGV4dGVuZHMgU2NlbmVDb21wb25lbnRQcm9wczxTY2VuZUFwcFBhZ2U+IHtcbiAgcm91dGVQcm9wczogUm91dGVDb21wb25lbnRQcm9wcztcbn1cblxuZnVuY3Rpb24gU2NlbmVBcHBQYWdlUmVuZGVyZXIoeyBtb2RlbCwgcm91dGVQcm9wcyB9OiBTY2VuZUFwcFBhZ2VSZW5kZXJlclByb3BzKSB7XG4gIGNvbnN0IHsgdGFicywgZHJpbGxkb3ducyB9ID0gbW9kZWwudXNlU3RhdGUoKTtcbiAgY29uc3Qgcm91dGVzOiBSZWFjdC5SZWFjdE5vZGVbXSA9IFtdO1xuXG4gIGlmICh0YWJzICYmIHRhYnMubGVuZ3RoID4gMCkge1xuICAgIGZvciAobGV0IHRhYkluZGV4ID0gMDsgdGFiSW5kZXggPCB0YWJzLmxlbmd0aDsgdGFiSW5kZXgrKykge1xuICAgICAgY29uc3QgdGFiID0gdGFic1t0YWJJbmRleF07XG5cbiAgICAgIC8vIEFkZCBmaXJzdCB0YWIgYXMgYSBkZWZhdWx0IHJvdXRlLCB0aGlzIG1ha2VzIGl0IHBvc3NpYmxlIGZvciB0aGUgZmlyc3QgdGFiIHRvIHJlbmRlciB3aXRoIHRoZSB1cmwgb2YgdGhlIHBhcmVudCBwYWdlXG4gICAgICBpZiAodGFiSW5kZXggPT09IDApIHtcbiAgICAgICAgcm91dGVzLnB1c2goXG4gICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICBleGFjdD17dHJ1ZX1cbiAgICAgICAgICAgIGtleT17bW9kZWwuc3RhdGUudXJsfVxuICAgICAgICAgICAgcGF0aD17bW9kZWwuc3RhdGUucm91dGVQYXRoID8/IG1vZGVsLnN0YXRlLnVybH1cbiAgICAgICAgICAgIHJlbmRlcj17KHByb3BzKSA9PiByZW5kZXJTY2VuZUNvbXBvbmVudFdpdGhSb3V0ZVByb3BzKHRhYiwgcHJvcHMpfVxuICAgICAgICAgID48L1JvdXRlPlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByb3V0ZXMucHVzaChcbiAgICAgICAgPFJvdXRlXG4gICAgICAgICAgZXhhY3Q9e3RydWV9XG4gICAgICAgICAga2V5PXt0YWIuc3RhdGUudXJsfVxuICAgICAgICAgIHBhdGg9e3RhYi5zdGF0ZS5yb3V0ZVBhdGggPz8gdGFiLnN0YXRlLnVybH1cbiAgICAgICAgICByZW5kZXI9eyhwcm9wcykgPT4gcmVuZGVyU2NlbmVDb21wb25lbnRXaXRoUm91dGVQcm9wcyh0YWIsIHByb3BzKX1cbiAgICAgICAgPjwvUm91dGU+XG4gICAgICApO1xuXG4gICAgICBpZiAodGFiLnN0YXRlLmRyaWxsZG93bnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBkcmlsbGRvd24gb2YgdGFiLnN0YXRlLmRyaWxsZG93bnMpIHtcbiAgICAgICAgICByb3V0ZXMucHVzaChcbiAgICAgICAgICAgIDxSb3V0ZVxuICAgICAgICAgICAgICBleGFjdD17ZmFsc2V9XG4gICAgICAgICAgICAgIGtleT17ZHJpbGxkb3duLnJvdXRlUGF0aH1cbiAgICAgICAgICAgICAgcGF0aD17ZHJpbGxkb3duLnJvdXRlUGF0aH1cbiAgICAgICAgICAgICAgcmVuZGVyPXsocHJvcHMpID0+IDxTY2VuZUFwcERyaWxsZG93blZpZXdSZW5kZXIgZHJpbGxkb3duPXtkcmlsbGRvd259IHBhcmVudD17dGFifSByb3V0ZVByb3BzPXtwcm9wc30gLz59XG4gICAgICAgICAgICA+PC9Sb3V0ZT5cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGRyaWxsZG93bnMpIHtcbiAgICBmb3IgKGNvbnN0IGRyaWxsZG93biBvZiBkcmlsbGRvd25zKSB7XG4gICAgICByb3V0ZXMucHVzaChcbiAgICAgICAgPFJvdXRlXG4gICAgICAgICAga2V5PXtkcmlsbGRvd24ucm91dGVQYXRofVxuICAgICAgICAgIGV4YWN0PXtmYWxzZX1cbiAgICAgICAgICBwYXRoPXtkcmlsbGRvd24ucm91dGVQYXRofVxuICAgICAgICAgIHJlbmRlcj17KHByb3BzKSA9PiA8U2NlbmVBcHBEcmlsbGRvd25WaWV3UmVuZGVyIGRyaWxsZG93bj17ZHJpbGxkb3dufSBwYXJlbnQ9e21vZGVsfSByb3V0ZVByb3BzPXtwcm9wc30gLz59XG4gICAgICAgID48L1JvdXRlPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIXRhYnMgJiYgaXNDdXJyZW50UGFnZVJvdXRlTWF0Y2gobW9kZWwsIHJvdXRlUHJvcHMubWF0Y2gpKSB7XG4gICAgcmV0dXJuIDxTY2VuZUFwcFBhZ2VWaWV3IHBhZ2U9e21vZGVsfSByb3V0ZVByb3BzPXtyb3V0ZVByb3BzfSAvPjtcbiAgfVxuXG4gIHJvdXRlcy5wdXNoKGdldEZhbGxiYWNrUm91dGUobW9kZWwsIHJvdXRlUHJvcHMpKTtcblxuICByZXR1cm4gPFN3aXRjaD57cm91dGVzfTwvU3dpdGNoPjtcbn1cblxuZnVuY3Rpb24gZ2V0RmFsbGJhY2tSb3V0ZShwYWdlOiBTY2VuZUFwcFBhZ2UsIHJvdXRlUHJvcHM6IFJvdXRlQ29tcG9uZW50UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8Um91dGVcbiAgICAgIGtleT17J2ZhbGxiYWNrIHJvdXRlJ31cbiAgICAgIHJlbmRlcj17KHByb3BzKSA9PiB7XG4gICAgICAgIGNvbnN0IGZhbGxiYWNrUGFnZSA9IHBhZ2Uuc3RhdGUuZ2V0RmFsbGJhY2tQYWdlPy4oKSA/PyBnZXREZWZhdWx0RmFsbGJhY2tQYWdlKCk7XG4gICAgICAgIHJldHVybiA8U2NlbmVBcHBQYWdlVmlldyBwYWdlPXtmYWxsYmFja1BhZ2V9IHJvdXRlUHJvcHM9e3JvdXRlUHJvcHN9IC8+O1xuICAgICAgfX1cbiAgICA+PC9Sb3V0ZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNDdXJyZW50UGFnZVJvdXRlTWF0Y2gocGFnZTogU2NlbmVBcHBQYWdlLCBtYXRjaDogU2NlbmVSb3V0ZU1hdGNoKSB7XG4gIGlmICghbWF0Y2guaXNFeGFjdCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGN1cnJlbnQgcGFnZSBtYXRjaGVzIHRoZSByb3V0ZSB1cmxcbiAgaWYgKG1hdGNoLnVybCA9PT0gcGFnZS5zdGF0ZS51cmwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIGNoZWNrIGlmIHdlIGFyZSBhIHRhYiBhbmQgdGhlIGZpcnN0IHRhYiwgdGhlbiB3ZSBzaG91bGQgYWxzbyByZW5kZXIgb24gdGhlIHBhcmVudCB1cmxcbiAgaWYgKFxuICAgIHBhZ2UucGFyZW50IGluc3RhbmNlb2YgU2NlbmVBcHBQYWdlICYmXG4gICAgcGFnZS5wYXJlbnQuc3RhdGUudGFicyFbMF0gPT09IHBhZ2UgJiZcbiAgICBwYWdlLnBhcmVudC5zdGF0ZS51cmwgPT09IG1hdGNoLnVybFxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEZhbGxiYWNrUGFnZSgpIHtcbiAgcmV0dXJuIG5ldyBTY2VuZUFwcFBhZ2Uoe1xuICAgIHVybDogJycsXG4gICAgdGl0bGU6ICdOb3QgZm91bmQnLFxuICAgIHN1YlRpdGxlOiAnVGhlIHVybCBkaWQgbm90IG1hdGNoIGFueSBwYWdlJyxcbiAgICBnZXRTY2VuZTogKCkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBFbWJlZGRlZFNjZW5lKHtcbiAgICAgICAgYm9keTogbmV3IFNjZW5lRmxleExheW91dCh7XG4gICAgICAgICAgZGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgbmV3IFNjZW5lRmxleEl0ZW0oe1xuICAgICAgICAgICAgICBib2R5OiBuZXcgU2NlbmVSZWFjdE9iamVjdCh7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtdGVzdGlkPVwiZGVmYXVsdC1mYWxsYmFjay1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGZvdW5kIHlvdXIgd2F5IGhlcmUgdXNpbmcgYSBsaW5rIHRoZW4gdGhlcmUgbWlnaHQgYmUgYSBidWcgaW4gdGhpcyBhcHBsaWNhdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAg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