@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,18 @@
1
+ import { getDataSourceSrv } from '@grafana/runtime';
2
+ import { runtimeDataSources } from '../querying/RuntimeDataSource.js';
3
+
4
+ async function getDataSource(datasource, scopedVars) {
5
+ if (datasource == null ? void 0 : datasource.uid) {
6
+ const runtimeDataSource = runtimeDataSources.get(datasource.uid);
7
+ if (runtimeDataSource) {
8
+ return runtimeDataSource;
9
+ }
10
+ }
11
+ if (datasource && datasource.query) {
12
+ return datasource;
13
+ }
14
+ return await getDataSourceSrv().get(datasource, scopedVars);
15
+ }
16
+
17
+ export { getDataSource };
18
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0RGF0YVNvdXJjZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL2dldERhdGFTb3VyY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVNvdXJjZUFwaSwgU2NvcGVkVmFycyB9IGZyb20gJ0BncmFmYW5hL2RhdGEnO1xuaW1wb3J0IHsgZ2V0RGF0YVNvdXJjZVNydiB9IGZyb20gJ0BncmFmYW5hL3J1bnRpbWUnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZVJlZiB9IGZyb20gJ0BncmFmYW5hL3NjaGVtYSc7XG5pbXBvcnQgeyBydW50aW1lRGF0YVNvdXJjZXMgfSBmcm9tICcuLi9xdWVyeWluZy9SdW50aW1lRGF0YVNvdXJjZSc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREYXRhU291cmNlKFxuICBkYXRhc291cmNlOiBEYXRhU291cmNlUmVmIHwgdW5kZWZpbmVkIHwgbnVsbCxcbiAgc2NvcGVkVmFyczogU2NvcGVkVmFyc1xuKTogUHJvbWlzZTxEYXRhU291cmNlQXBpPiB7XG4gIGlmIChkYXRhc291cmNlPy51aWQpIHtcbiAgICBjb25zdCBydW50aW1lRGF0YVNvdXJjZSA9IHJ1bnRpbWVEYXRhU291cmNlcy5nZXQoZGF0YXNvdXJjZS51aWQpO1xuICAgIGlmIChydW50aW1lRGF0YVNvdXJjZSkge1xuICAgICAgcmV0dXJuIHJ1bnRpbWVEYXRhU291cmNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkYXRhc291cmNlICYmIChkYXRhc291cmNlIGFzIGFueSkucXVlcnkpIHtcbiAgICByZXR1cm4gZGF0YXNvdXJjZSBhcyBEYXRhU291cmNlQXBpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IGdldERhdGFTb3VyY2VTcnYoKS5nZXQoZGF0YXNvdXJjZSBhcyBzdHJpbmcsIHNjb3BlZFZhcnMpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUtzQixlQUFBLGFBQUEsQ0FDcEIsWUFDQSxVQUN3QixFQUFBO0FBQ3hCLEVBQUEsSUFBSSx5Q0FBWSxHQUFLLEVBQUE7QUFDbkIsSUFBQSxNQUFNLGlCQUFvQixHQUFBLGtCQUFBLENBQW1CLEdBQUksQ0FBQSxVQUFBLENBQVcsR0FBRyxDQUFBLENBQUE7QUFDL0QsSUFBQSxJQUFJLGlCQUFtQixFQUFBO0FBQ3JCLE1BQU8sT0FBQSxpQkFBQSxDQUFBO0FBQUEsS0FDVDtBQUFBLEdBQ0Y7QUFFQSxFQUFJLElBQUEsVUFBQSxJQUFlLFdBQW1CLEtBQU8sRUFBQTtBQUMzQyxJQUFPLE9BQUEsVUFBQSxDQUFBO0FBQUEsR0FDVDtBQUVBLEVBQUEsT0FBTyxNQUFNLGdCQUFBLEVBQW1CLENBQUEsR0FBQSxDQUFJLFlBQXNCLFVBQVUsQ0FBQSxDQUFBO0FBQ3RFOzs7OyJ9
@@ -0,0 +1,24 @@
1
+ import { isFetchError } from '@grafana/runtime';
2
+
3
+ function getMessageFromError(err) {
4
+ if (typeof err === "string") {
5
+ return err;
6
+ }
7
+ if (err) {
8
+ if (err instanceof Error) {
9
+ return err.message;
10
+ } else if (isFetchError(err)) {
11
+ if (err.data && err.data.message) {
12
+ return err.data.message;
13
+ } else if (err.statusText) {
14
+ return err.statusText;
15
+ }
16
+ } else if (err.hasOwnProperty("message")) {
17
+ return err.message;
18
+ }
19
+ }
20
+ return JSON.stringify(err);
21
+ }
22
+
23
+ export { getMessageFromError };
24
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0TWVzc2FnZUZyb21FcnJvci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL2dldE1lc3NhZ2VGcm9tRXJyb3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNGZXRjaEVycm9yIH0gZnJvbSAnQGdyYWZhbmEvcnVudGltZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXNzYWdlRnJvbUVycm9yKGVycjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgZXJyID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBlcnI7XG4gIH1cblxuICBpZiAoZXJyKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICByZXR1cm4gZXJyLm1lc3NhZ2U7XG4gICAgfSBlbHNlIGlmIChpc0ZldGNoRXJyb3IoZXJyKSkge1xuICAgICAgaWYgKGVyci5kYXRhICYmIGVyci5kYXRhLm1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIGVyci5kYXRhLm1lc3NhZ2U7XG4gICAgICB9IGVsc2UgaWYgKGVyci5zdGF0dXNUZXh0KSB7XG4gICAgICAgIHJldHVybiBlcnIuc3RhdHVzVGV4dDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVyci5oYXNPd25Qcm9wZXJ0eSgnbWVzc2FnZScpKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICByZXR1cm4gZXJyLm1lc3NhZ2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGVycik7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFTyxTQUFTLG9CQUFvQixHQUFzQixFQUFBO0FBQ3hELEVBQUksSUFBQSxPQUFPLFFBQVEsUUFBVSxFQUFBO0FBQzNCLElBQU8sT0FBQSxHQUFBLENBQUE7QUFBQSxHQUNUO0FBRUEsRUFBQSxJQUFJLEdBQUssRUFBQTtBQUNQLElBQUEsSUFBSSxlQUFlLEtBQU8sRUFBQTtBQUN4QixNQUFBLE9BQU8sR0FBSSxDQUFBLE9BQUEsQ0FBQTtBQUFBLEtBQ2IsTUFBQSxJQUFXLFlBQWEsQ0FBQSxHQUFHLENBQUcsRUFBQTtBQUM1QixNQUFBLElBQUksR0FBSSxDQUFBLElBQUEsSUFBUSxHQUFJLENBQUEsSUFBQSxDQUFLLE9BQVMsRUFBQTtBQUNoQyxRQUFBLE9BQU8sSUFBSSxJQUFLLENBQUEsT0FBQSxDQUFBO0FBQUEsT0FDbEIsTUFBQSxJQUFXLElBQUksVUFBWSxFQUFBO0FBQ3pCLFFBQUEsT0FBTyxHQUFJLENBQUEsVUFBQSxDQUFBO0FBQUEsT0FDYjtBQUFBLEtBQ1MsTUFBQSxJQUFBLEdBQUEsQ0FBSSxjQUFlLENBQUEsU0FBUyxDQUFHLEVBQUE7QUFFeEMsTUFBQSxPQUFPLEdBQUksQ0FBQSxPQUFBLENBQUE7QUFBQSxLQUNiO0FBQUEsR0FDRjtBQUVBLEVBQU8sT0FBQSxJQUFBLENBQUssVUFBVSxHQUFHLENBQUEsQ0FBQTtBQUMzQjs7OzsifQ==
@@ -0,0 +1,53 @@
1
+ function buildMetricTree(parent, depth) {
2
+ const chars = ["A", "B", "C", "D", "E", "F", "G", "H"];
3
+ const children = [];
4
+ if (depth > 5) {
5
+ return [];
6
+ }
7
+ for (const letter of chars) {
8
+ const nodeName = `${parent}${letter}`;
9
+ children.push({
10
+ name: nodeName,
11
+ children: buildMetricTree(nodeName, depth + 1)
12
+ });
13
+ }
14
+ return children;
15
+ }
16
+ function queryTree(children, query, queryIndex) {
17
+ if (queryIndex >= query.length) {
18
+ return children;
19
+ }
20
+ if (query[queryIndex] === "*") {
21
+ return children;
22
+ }
23
+ const nodeQuery = query[queryIndex];
24
+ let result = [];
25
+ let namesToMatch = [nodeQuery];
26
+ if (nodeQuery.startsWith("{")) {
27
+ namesToMatch = nodeQuery.replace(/\{|\}/g, "").split(",");
28
+ }
29
+ for (const node of children) {
30
+ for (const nameToMatch of namesToMatch) {
31
+ if (nameToMatch.indexOf("*") !== -1) {
32
+ const pattern = nameToMatch.replace("*", "");
33
+ const regex = new RegExp(`^${pattern}.*`, "gi");
34
+ if (regex.test(node.name)) {
35
+ result = result.concat(queryTree([node], query, queryIndex + 1));
36
+ }
37
+ } else if (node.name === nameToMatch) {
38
+ result = result.concat(queryTree(node.children, query, queryIndex + 1));
39
+ }
40
+ }
41
+ }
42
+ return result;
43
+ }
44
+ function queryMetricTree(query) {
45
+ if (query.indexOf("value") === 0) {
46
+ return [{ name: query, children: [] }];
47
+ }
48
+ const children = buildMetricTree("", 0);
49
+ return queryTree(children, query.split("."), 0);
50
+ }
51
+
52
+ export { queryMetricTree };
53
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljVHJlZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL21ldHJpY1RyZWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBUcmVlTm9kZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgY2hpbGRyZW46IFRyZWVOb2RlW107XG59XG5cbi8qXG4gKiAgQnVpbGRzIGEgbmVzdGVkIHRyZWUgbGlrZVxuICogIFtcbiAqICAgIHtcbiAqICAgICAgbmFtZTogJ0EnLFxuICogICAgICBjaGlsZHJlbjogW1xuICogICAgICAgIHsgbmFtZTogJ0FBJywgY2hpbGRyZW46IFtdIH0sXG4gKiAgICAgICAgeyBuYW1lOiAnQUInLCBjaGlsZHJlbjogW10gfSxcbiAqICAgICAgXVxuICogICAgfVxuICogIF1cbiAqL1xuZnVuY3Rpb24gYnVpbGRNZXRyaWNUcmVlKHBhcmVudDogc3RyaW5nLCBkZXB0aDogbnVtYmVyKTogVHJlZU5vZGVbXSB7XG4gIGNvbnN0IGNoYXJzID0gWydBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicsICdHJywgJ0gnXTtcbiAgY29uc3QgY2hpbGRyZW46IFRyZWVOb2RlW10gPSBbXTtcblxuICBpZiAoZGVwdGggPiA1KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZm9yIChjb25zdCBsZXR0ZXIgb2YgY2hhcnMpIHtcbiAgICBjb25zdCBub2RlTmFtZSA9IGAke3BhcmVudH0ke2xldHRlcn1gO1xuICAgIGNoaWxkcmVuLnB1c2goe1xuICAgICAgbmFtZTogbm9kZU5hbWUsXG4gICAgICBjaGlsZHJlbjogYnVpbGRNZXRyaWNUcmVlKG5vZGVOYW1lLCBkZXB0aCArIDEpLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuXG5mdW5jdGlvbiBxdWVyeVRyZWUoY2hpbGRyZW46IFRyZWVOb2RlW10sIHF1ZXJ5OiBzdHJpbmdbXSwgcXVlcnlJbmRleDogbnVtYmVyKTogVHJlZU5vZGVbXSB7XG4gIGlmIChxdWVyeUluZGV4ID49IHF1ZXJ5Lmxlbmd0aCkge1xuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuXG4gIGlmIChxdWVyeVtxdWVyeUluZGV4XSA9PT0gJyonKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG5cbiAgY29uc3Qgbm9kZVF1ZXJ5ID0gcXVlcnlbcXVlcnlJbmRleF07XG4gIGxldCByZXN1bHQ6IFRyZWVOb2RlW10gPSBbXTtcbiAgbGV0IG5hbWVzVG9NYXRjaCA9IFtub2RlUXVlcnldO1xuXG4gIC8vIGhhbmRsZSBnbG9iIHF1ZXJpZXNcbiAgaWYgKG5vZGVRdWVyeS5zdGFydHNXaXRoKCd7JykpIHtcbiAgICBuYW1lc1RvTWF0Y2ggPSBub2RlUXVlcnkucmVwbGFjZSgvXFx7fFxcfS9nLCAnJykuc3BsaXQoJywnKTtcbiAgfVxuXG4gIGZvciAoY29uc3Qgbm9kZSBvZiBjaGlsZHJlbikge1xuICAgIGZvciAoY29uc3QgbmFtZVRvTWF0Y2ggb2YgbmFtZXNUb01hdGNoKSB7XG4gICAgICBpZiAobmFtZVRvTWF0Y2guaW5kZXhPZignKicpICE9PSAtMSkge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gbmFtZVRvTWF0Y2gucmVwbGFjZSgnKicsICcnKTtcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBeJHtwYXR0ZXJufS4qYCwgJ2dpJyk7XG4gICAgICAgIGlmIChyZWdleC50ZXN0KG5vZGUubmFtZSkpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHF1ZXJ5VHJlZShbbm9kZV0sIHF1ZXJ5LCBxdWVyeUluZGV4ICsgMSkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUubmFtZSA9PT0gbmFtZVRvTWF0Y2gpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChxdWVyeVRyZWUobm9kZS5jaGlsZHJlbiwgcXVlcnksIHF1ZXJ5SW5kZXggKyAxKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5TWV0cmljVHJlZShxdWVyeTogc3RyaW5nKTogVHJlZU5vZGVbXSB7XG4gIGlmIChxdWVyeS5pbmRleE9mKCd2YWx1ZScpID09PSAwKSB7XG4gICAgcmV0dXJuIFt7IG5hbWU6IHF1ZXJ5LCBjaGlsZHJlbjogW10gfV07XG4gIH1cblxuICBjb25zdCBjaGlsZHJlbiA9IGJ1aWxkTWV0cmljVHJlZSgnJywgMCk7XG4gIHJldHVybiBxdWVyeVRyZWUoY2hpbGRyZW4sIHF1ZXJ5LnNwbGl0KCcuJyksIDApO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlCQSxTQUFTLGVBQUEsQ0FBZ0IsUUFBZ0IsS0FBMkIsRUFBQTtBQUNsRSxFQUFNLE1BQUEsS0FBQSxHQUFRLENBQUMsR0FBSyxFQUFBLEdBQUEsRUFBSyxLQUFLLEdBQUssRUFBQSxHQUFBLEVBQUssR0FBSyxFQUFBLEdBQUEsRUFBSyxHQUFHLENBQUEsQ0FBQTtBQUNyRCxFQUFBLE1BQU0sV0FBdUIsRUFBQyxDQUFBO0FBRTlCLEVBQUEsSUFBSSxRQUFRLENBQUcsRUFBQTtBQUNiLElBQUEsT0FBTyxFQUFDLENBQUE7QUFBQSxHQUNWO0FBRUEsRUFBQSxLQUFBLE1BQVcsVUFBVSxLQUFPLEVBQUE7QUFDMUIsSUFBTSxNQUFBLFFBQUEsR0FBVyxHQUFHLE1BQVMsQ0FBQSxFQUFBLE1BQUEsQ0FBQSxDQUFBLENBQUE7QUFDN0IsSUFBQSxRQUFBLENBQVMsSUFBSyxDQUFBO0FBQUEsTUFDWixJQUFNLEVBQUEsUUFBQTtBQUFBLE1BQ04sUUFBVSxFQUFBLGVBQUEsQ0FBZ0IsUUFBVSxFQUFBLEtBQUEsR0FBUSxDQUFDLENBQUE7QUFBQSxLQUM5QyxDQUFBLENBQUE7QUFBQSxHQUNIO0FBRUEsRUFBTyxPQUFBLFFBQUEsQ0FBQTtBQUNULENBQUE7QUFFQSxTQUFTLFNBQUEsQ0FBVSxRQUFzQixFQUFBLEtBQUEsRUFBaUIsVUFBZ0MsRUFBQTtBQUN4RixFQUFJLElBQUEsVUFBQSxJQUFjLE1BQU0sTUFBUSxFQUFBO0FBQzlCLElBQU8sT0FBQSxRQUFBLENBQUE7QUFBQSxHQUNUO0FBRUEsRUFBSSxJQUFBLEtBQUEsQ0FBTSxnQkFBZ0IsR0FBSyxFQUFBO0FBQzdCLElBQU8sT0FBQSxRQUFBLENBQUE7QUFBQSxHQUNUO0FBRUEsRUFBQSxNQUFNLFlBQVksS0FBTSxDQUFBLFVBQUEsQ0FBQSxDQUFBO0FBQ3hCLEVBQUEsSUFBSSxTQUFxQixFQUFDLENBQUE7QUFDMUIsRUFBSSxJQUFBLFlBQUEsR0FBZSxDQUFDLFNBQVMsQ0FBQSxDQUFBO0FBRzdCLEVBQUksSUFBQSxTQUFBLENBQVUsVUFBVyxDQUFBLEdBQUcsQ0FBRyxFQUFBO0FBQzdCLElBQUEsWUFBQSxHQUFlLFVBQVUsT0FBUSxDQUFBLFFBQUEsRUFBVSxFQUFFLENBQUEsQ0FBRSxNQUFNLEdBQUcsQ0FBQSxDQUFBO0FBQUEsR0FDMUQ7QUFFQSxFQUFBLEtBQUEsTUFBVyxRQUFRLFFBQVUsRUFBQTtBQUMzQixJQUFBLEtBQUEsTUFBVyxlQUFlLFlBQWMsRUFBQTtBQUN0QyxNQUFBLElBQUksV0FBWSxDQUFBLE9BQUEsQ0FBUSxHQUFHLENBQUEsS0FBTSxDQUFJLENBQUEsRUFBQTtBQUNuQyxRQUFBLE1BQU0sT0FBVSxHQUFBLFdBQUEsQ0FBWSxPQUFRLENBQUEsR0FBQSxFQUFLLEVBQUUsQ0FBQSxDQUFBO0FBQzNDLFFBQUEsTUFBTSxLQUFRLEdBQUEsSUFBSSxNQUFPLENBQUEsQ0FBQSxDQUFBLEVBQUksYUFBYSxJQUFJLENBQUEsQ0FBQTtBQUM5QyxRQUFBLElBQUksS0FBTSxDQUFBLElBQUEsQ0FBSyxJQUFLLENBQUEsSUFBSSxDQUFHLEVBQUE7QUFDekIsVUFBUyxNQUFBLEdBQUEsTUFBQSxDQUFPLE9BQU8sU0FBVSxDQUFBLENBQUMsSUFBSSxDQUFHLEVBQUEsS0FBQSxFQUFPLFVBQWEsR0FBQSxDQUFDLENBQUMsQ0FBQSxDQUFBO0FBQUEsU0FDakU7QUFBQSxPQUNGLE1BQUEsSUFBVyxJQUFLLENBQUEsSUFBQSxLQUFTLFdBQWEsRUFBQTtBQUNwQyxRQUFTLE1BQUEsR0FBQSxNQUFBLENBQU8sT0FBTyxTQUFVLENBQUEsSUFBQSxDQUFLLFVBQVUsS0FBTyxFQUFBLFVBQUEsR0FBYSxDQUFDLENBQUMsQ0FBQSxDQUFBO0FBQUEsT0FDeEU7QUFBQSxLQUNGO0FBQUEsR0FDRjtBQUVBLEVBQU8sT0FBQSxNQUFBLENBQUE7QUFDVCxDQUFBO0FBRU8sU0FBUyxnQkFBZ0IsS0FBMkIsRUFBQTtBQUN6RCxFQUFBLElBQUksS0FBTSxDQUFBLE9BQUEsQ0FBUSxPQUFPLENBQUEsS0FBTSxDQUFHLEVBQUE7QUFDaEMsSUFBQSxPQUFPLENBQUMsRUFBRSxJQUFBLEVBQU0sT0FBTyxRQUFVLEVBQUEsSUFBSSxDQUFBLENBQUE7QUFBQSxHQUN2QztBQUVBLEVBQU0sTUFBQSxRQUFBLEdBQVcsZUFBZ0IsQ0FBQSxFQUFBLEVBQUksQ0FBQyxDQUFBLENBQUE7QUFDdEMsRUFBQSxPQUFPLFVBQVUsUUFBVSxFQUFBLEtBQUEsQ0FBTSxLQUFNLENBQUEsR0FBRyxHQUFHLENBQUMsQ0FBQSxDQUFBO0FBQ2hEOzs7OyJ9
@@ -0,0 +1,41 @@
1
+ import { toUtc } from '@grafana/data';
2
+
3
+ const INTERVAL_STRING_REGEX = /^\d+[yYmMsSwWhHdD]$/;
4
+ function parseUrlParam(value) {
5
+ if (typeof value !== "string") {
6
+ return null;
7
+ }
8
+ if (value.indexOf("now") !== -1) {
9
+ return value;
10
+ }
11
+ if (INTERVAL_STRING_REGEX.test(value)) {
12
+ return value;
13
+ }
14
+ if (value.length === 8) {
15
+ const utcValue = toUtc(value, "YYYYMMDD");
16
+ if (utcValue.isValid()) {
17
+ return utcValue.toISOString();
18
+ }
19
+ } else if (value.length === 15) {
20
+ const utcValue = toUtc(value, "YYYYMMDDTHHmmss");
21
+ if (utcValue.isValid()) {
22
+ return utcValue.toISOString();
23
+ }
24
+ } else if (value.length === 19) {
25
+ const utcValue = toUtc(value, "YYYY-MM-DD HH:mm:ss");
26
+ if (utcValue.isValid()) {
27
+ return utcValue.toISOString();
28
+ }
29
+ } else if (value.length === 24) {
30
+ const utcValue = toUtc(value);
31
+ return utcValue.toISOString();
32
+ }
33
+ const epoch = parseInt(value, 10);
34
+ if (!isNaN(epoch)) {
35
+ return toUtc(epoch).toISOString();
36
+ }
37
+ return null;
38
+ }
39
+
40
+ export { parseUrlParam };
41
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VVcmxQYXJhbS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3BhcnNlVXJsUGFyYW0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdG9VdGMgfSBmcm9tICdAZ3JhZmFuYS9kYXRhJztcbmltcG9ydCB7IFNjZW5lT2JqZWN0VXJsVmFsdWUgfSBmcm9tICcuLi9jb3JlL3R5cGVzJztcblxuY29uc3QgSU5URVJWQUxfU1RSSU5HX1JFR0VYID0gL15cXGQrW3lZbU1zU3dXaEhkRF0kLztcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVXJsUGFyYW0odmFsdWU6IFNjZW5lT2JqZWN0VXJsVmFsdWUpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh2YWx1ZS5pbmRleE9mKCdub3cnKSAhPT0gLTEpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBpZiAoSU5URVJWQUxfU1RSSU5HX1JFR0VYLnRlc3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gOCkge1xuICAgIGNvbnN0IHV0Y1ZhbHVlID0gdG9VdGModmFsdWUsICdZWVlZTU1ERCcpO1xuICAgIGlmICh1dGNWYWx1ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHJldHVybiB1dGNWYWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT09IDE1KSB7XG4gICAgY29uc3QgdXRjVmFsdWUgPSB0b1V0Yyh2YWx1ZSwgJ1lZWVlNTUREVEhIbW1zcycpO1xuICAgIGlmICh1dGNWYWx1ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHJldHVybiB1dGNWYWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT09IDE5KSB7XG4gICAgY29uc3QgdXRjVmFsdWUgPSB0b1V0Yyh2YWx1ZSwgJ1lZWVktTU0tREQgSEg6bW06c3MnKTtcbiAgICBpZiAodXRjVmFsdWUuaXNWYWxpZCgpKSB7XG4gICAgICByZXR1cm4gdXRjVmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID09PSAyNCkge1xuICAgIGNvbnN0IHV0Y1ZhbHVlID0gdG9VdGModmFsdWUpO1xuICAgIHJldHVybiB1dGNWYWx1ZS50b0lTT1N0cmluZygpO1xuICB9XG5cbiAgY29uc3QgZXBvY2ggPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICBpZiAoIWlzTmFOKGVwb2NoKSkge1xuICAgIHJldHVybiB0b1V0YyhlcG9jaCkudG9JU09TdHJpbmcoKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0EsTUFBTSxxQkFBd0IsR0FBQSxxQkFBQSxDQUFBO0FBRXZCLFNBQVMsY0FBYyxLQUEyQyxFQUFBO0FBQ3ZFLEVBQUksSUFBQSxPQUFPLFVBQVUsUUFBVSxFQUFBO0FBQzdCLElBQU8sT0FBQSxJQUFBLENBQUE7QUFBQSxHQUNUO0FBRUEsRUFBQSxJQUFJLEtBQU0sQ0FBQSxPQUFBLENBQVEsS0FBSyxDQUFBLEtBQU0sQ0FBSSxDQUFBLEVBQUE7QUFDL0IsSUFBTyxPQUFBLEtBQUEsQ0FBQTtBQUFBLEdBQ1Q7QUFFQSxFQUFJLElBQUEscUJBQUEsQ0FBc0IsSUFBSyxDQUFBLEtBQUssQ0FBRyxFQUFBO0FBQ3JDLElBQU8sT0FBQSxLQUFBLENBQUE7QUFBQSxHQUNUO0FBRUEsRUFBSSxJQUFBLEtBQUEsQ0FBTSxXQUFXLENBQUcsRUFBQTtBQUN0QixJQUFNLE1BQUEsUUFBQSxHQUFXLEtBQU0sQ0FBQSxLQUFBLEVBQU8sVUFBVSxDQUFBLENBQUE7QUFDeEMsSUFBSSxJQUFBLFFBQUEsQ0FBUyxTQUFXLEVBQUE7QUFDdEIsTUFBQSxPQUFPLFNBQVMsV0FBWSxFQUFBLENBQUE7QUFBQSxLQUM5QjtBQUFBLEdBQ0YsTUFBQSxJQUFXLEtBQU0sQ0FBQSxNQUFBLEtBQVcsRUFBSSxFQUFBO0FBQzlCLElBQU0sTUFBQSxRQUFBLEdBQVcsS0FBTSxDQUFBLEtBQUEsRUFBTyxpQkFBaUIsQ0FBQSxDQUFBO0FBQy9DLElBQUksSUFBQSxRQUFBLENBQVMsU0FBVyxFQUFBO0FBQ3RCLE1BQUEsT0FBTyxTQUFTLFdBQVksRUFBQSxDQUFBO0FBQUEsS0FDOUI7QUFBQSxHQUNGLE1BQUEsSUFBVyxLQUFNLENBQUEsTUFBQSxLQUFXLEVBQUksRUFBQTtBQUM5QixJQUFNLE1BQUEsUUFBQSxHQUFXLEtBQU0sQ0FBQSxLQUFBLEVBQU8scUJBQXFCLENBQUEsQ0FBQTtBQUNuRCxJQUFJLElBQUEsUUFBQSxDQUFTLFNBQVcsRUFBQTtBQUN0QixNQUFBLE9BQU8sU0FBUyxXQUFZLEVBQUEsQ0FBQTtBQUFBLEtBQzlCO0FBQUEsR0FDRixNQUFBLElBQVcsS0FBTSxDQUFBLE1BQUEsS0FBVyxFQUFJLEVBQUE7QUFDOUIsSUFBTSxNQUFBLFFBQUEsR0FBVyxNQUFNLEtBQUssQ0FBQSxDQUFBO0FBQzVCLElBQUEsT0FBTyxTQUFTLFdBQVksRUFBQSxDQUFBO0FBQUEsR0FDOUI7QUFFQSxFQUFNLE1BQUEsS0FBQSxHQUFRLFFBQVMsQ0FBQSxLQUFBLEVBQU8sRUFBRSxDQUFBLENBQUE7QUFDaEMsRUFBSSxJQUFBLENBQUMsS0FBTSxDQUFBLEtBQUssQ0FBRyxFQUFBO0FBQ2pCLElBQU8sT0FBQSxLQUFBLENBQU0sS0FBSyxDQUFBLENBQUUsV0FBWSxFQUFBLENBQUE7QUFBQSxHQUNsQztBQUVBLEVBQU8sT0FBQSxJQUFBLENBQUE7QUFDVDs7OzsifQ==
@@ -0,0 +1,11 @@
1
+ import { useLocationService, locationService } from '@grafana/runtime';
2
+
3
+ function setBaseClassState(sceneObject, newState) {
4
+ sceneObject.setState(newState);
5
+ }
6
+ function useLocationServiceSafe() {
7
+ return useLocationService ? useLocationService() : locationService;
8
+ }
9
+
10
+ export { setBaseClassState, useLocationServiceSafe };
11
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy91dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY2VuZU9iamVjdCwgU2NlbmVPYmplY3RTdGF0ZSB9IGZyb20gJy4uL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgbG9jYXRpb25TZXJ2aWNlIGFzIGxvY2F0aW9uU2VydmljZVJ1bnRpbWUgfSBmcm9tICdAZ3JhZmFuYS9ydW50aW1lJztcbi8vIEB0cy1pZ25vcmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kdXBsaWNhdGUtaW1wb3J0c1xuaW1wb3J0IHsgdXNlTG9jYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGdyYWZhbmEvcnVudGltZSc7XG5cbi8qKlxuICogIFRoaXMgZnVuY3Rpb24gd29ya3MgYXJvdW5kIHRoZSBwcm9ibGVtIG9mIENvbnRyYXZhcmlhbmNlIG9mIHRoZSBTY2VuZU9iamVjdC5zZXRTdGF0ZSBmdW5jdGlvblxuICogIENvbnRyYXZhcmlhbmNlIGlzIG5vdCBlbmZvcmNlIGJ5IGludGVyZmFjZXMgYW5kIGhlcmUgd2UgdXNlIHRoZSBTY2VuZU9iamVjdCBpbnRlcmZhY2UgdG8gYWNjZXNzIHRoZSBzZXRTdGF0ZSBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0QmFzZUNsYXNzU3RhdGU8VCBleHRlbmRzIFNjZW5lT2JqZWN0U3RhdGU+KHNjZW5lT2JqZWN0OiBTY2VuZU9iamVjdDxUPiwgbmV3U3RhdGU6IFBhcnRpYWw8VD4pIHtcbiAgc2NlbmVPYmplY3Quc2V0U3RhdGUobmV3U3RhdGUpO1xufVxuXG4vKipcbiAqIFNhZmUgd2F5IHRvIGdldCBsb2NhdGlvbiBzZXJ2aWNlIHRoYXQgZmFsbGJhY2tzIHRvIHNpbmdsZXRvbiBmb3Igb2xkZXIgcnVudGltZSB2ZXJzaW9ucyB3aGVyZSB1c2VMb2NhdGlvblNlcnZpY2UgaXNcbiAqIG5vdCBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VMb2NhdGlvblNlcnZpY2VTYWZlKCkge1xuICAvLyBUaGlzIGlzIGJhc2ljYWxseSBhIHZlcnNpb24vZmVhdHVyZSBjaGVjayBmb3IgZ3JhZmFuYS9ydW50aW1lIHNvIHRoaXMgJ2lmJyBzaG91bGQgYmUgc3RhYmxlIChpZSBmb3Igb25lIGluc3RhbmNlXG4gIC8vIG9mIGdyYWZhbmEgdGhpcyB3aWxsIGFsd2F5cyBiZSB0cnVlIG9yIGZhbHNlKSBzbyBpdCBzaG91bGQgYmUgc2FmZSB0byBpZ25vcmUgdGhlIGhvb2sgcnVsZSBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICByZXR1cm4gdXNlTG9jYXRpb25TZXJ2aWNlID8gdXNlTG9jYXRpb25TZXJ2aWNlKCkgOiBsb2NhdGlvblNlcnZpY2VSdW50aW1lO1xufVxuIl0sIm5hbWVzIjpbImxvY2F0aW9uU2VydmljZVJ1bnRpbWUiXSwibWFwcGluZ3MiOiI7O0FBVWdCLFNBQUEsaUJBQUEsQ0FBOEMsYUFBNkIsUUFBc0IsRUFBQTtBQUMvRyxFQUFBLFdBQUEsQ0FBWSxTQUFTLFFBQVEsQ0FBQSxDQUFBO0FBQy9CLENBQUE7QUFNTyxTQUFTLHNCQUF5QixHQUFBO0FBSXZDLEVBQU8sT0FBQSxrQkFBQSxHQUFxQixvQkFBdUIsR0FBQUEsZUFBQSxDQUFBO0FBQ3JEOzs7OyJ9
@@ -0,0 +1,30 @@
1
+ import { config } from '@grafana/runtime';
2
+ import { SafeSerializableSceneObject } from './SafeSerializableSceneObject.js';
3
+
4
+ function shouldWrapInSafeSerializableSceneObject(grafanaVersion) {
5
+ const pattern = /^(\d+)\.(\d+)\.(\d+)/;
6
+ const match = grafanaVersion.match(pattern);
7
+ if (!match) {
8
+ return false;
9
+ }
10
+ const major = parseInt(match[1], 10);
11
+ const minor = parseInt(match[2], 10);
12
+ const patch = parseInt(match[3], 10);
13
+ if (major === 11) {
14
+ return minor === 0 && patch >= 4 || minor === 1 && patch >= 2 || minor > 1;
15
+ }
16
+ if (major === 10) {
17
+ return minor === 4 && patch >= 8 || minor >= 5;
18
+ }
19
+ return major > 11;
20
+ }
21
+ function wrapInSafeSerializableSceneObject(sceneObject) {
22
+ const version = config.buildInfo.version;
23
+ if (shouldWrapInSafeSerializableSceneObject(version)) {
24
+ return new SafeSerializableSceneObject(sceneObject);
25
+ }
26
+ return { value: sceneObject, text: "__sceneObject" };
27
+ }
28
+
29
+ export { shouldWrapInSafeSerializableSceneObject, wrapInSafeSerializableSceneObject };
30
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JhcEluU2FmZVNlcmlhbGl6YWJsZVNjZW5lT2JqZWN0LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvd3JhcEluU2FmZVNlcmlhbGl6YWJsZVNjZW5lT2JqZWN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbmZpZyB9IGZyb20gJ0BncmFmYW5hL3J1bnRpbWUnO1xuaW1wb3J0IHsgU2NlbmVPYmplY3QgfSBmcm9tICcuLi9jb3JlL3R5cGVzJztcbmltcG9ydCB7IFNhZmVTZXJpYWxpemFibGVTY2VuZU9iamVjdCB9IGZyb20gJy4vU2FmZVNlcmlhbGl6YWJsZVNjZW5lT2JqZWN0JztcbmltcG9ydCB7IFNjb3BlZFZhciB9IGZyb20gJ0BncmFmYW5hL2RhdGEnO1xuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkV3JhcEluU2FmZVNlcmlhbGl6YWJsZVNjZW5lT2JqZWN0KGdyYWZhbmFWZXJzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcGF0dGVybiA9IC9eKFxcZCspXFwuKFxcZCspXFwuKFxcZCspLztcbiAgY29uc3QgbWF0Y2ggPSBncmFmYW5hVmVyc2lvbi5tYXRjaChwYXR0ZXJuKTtcblxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgbWFqb3IgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICBjb25zdCBtaW5vciA9IHBhcnNlSW50KG1hdGNoWzJdLCAxMCk7XG4gIGNvbnN0IHBhdGNoID0gcGFyc2VJbnQobWF0Y2hbM10sIDEwKTtcblxuICBpZiAobWFqb3IgPT09IDExKSB7XG4gICAgcmV0dXJuIChtaW5vciA9PT0gMCAmJiBwYXRjaCA+PSA0KSB8fCAobWlub3IgPT09IDEgJiYgcGF0Y2ggPj0gMikgfHwgbWlub3IgPiAxO1xuICB9XG5cbiAgaWYgKG1ham9yID09PSAxMCkge1xuICAgIHJldHVybiAobWlub3IgPT09IDQgJiYgcGF0Y2ggPj0gOCkgfHwgbWlub3IgPj0gNTtcbiAgfVxuXG4gIHJldHVybiBtYWpvciA+IDExOyAvLyBBc3N1bWluZyB2ZXJzaW9ucyBncmVhdGVyIHRoYW4gMTEgYXJlIGFsc28gc3VwcG9ydGVkLlxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JhcEluU2FmZVNlcmlhbGl6YWJsZVNjZW5lT2JqZWN0KHNjZW5lT2JqZWN0OiBTY2VuZU9iamVjdCk6IFNjb3BlZFZhciB7XG4gIGNvbnN0IHZlcnNpb24gPSBjb25maWcuYnVpbGRJbmZvLnZlcnNpb247XG5cbiAgaWYgKHNob3VsZFdyYXBJblNhZmVTZXJpYWxpemFibGVTY2VuZU9iamVjdCh2ZXJzaW9uKSkge1xuICAgIHJldHVybiBuZXcgU2FmZVNlcmlhbGl6YWJsZVNjZW5lT2JqZWN0KHNjZW5lT2JqZWN0KTtcbiAgfVxuXG4gIHJldHVybiB7IHZhbHVlOiBzY2VuZU9iamVjdCwgdGV4dDogJ19fc2NlbmVPYmplY3QnIH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS08sU0FBUyx3Q0FBd0MsY0FBaUMsRUFBQTtBQUN2RixFQUFBLE1BQU0sT0FBVSxHQUFBLHNCQUFBLENBQUE7QUFDaEIsRUFBTSxNQUFBLEtBQUEsR0FBUSxjQUFlLENBQUEsS0FBQSxDQUFNLE9BQU8sQ0FBQSxDQUFBO0FBRTFDLEVBQUEsSUFBSSxDQUFDLEtBQU8sRUFBQTtBQUNWLElBQU8sT0FBQSxLQUFBLENBQUE7QUFBQSxHQUNUO0FBRUEsRUFBQSxNQUFNLEtBQVEsR0FBQSxRQUFBLENBQVMsS0FBTSxDQUFBLENBQUEsQ0FBQSxFQUFJLEVBQUUsQ0FBQSxDQUFBO0FBQ25DLEVBQUEsTUFBTSxLQUFRLEdBQUEsUUFBQSxDQUFTLEtBQU0sQ0FBQSxDQUFBLENBQUEsRUFBSSxFQUFFLENBQUEsQ0FBQTtBQUNuQyxFQUFBLE1BQU0sS0FBUSxHQUFBLFFBQUEsQ0FBUyxLQUFNLENBQUEsQ0FBQSxDQUFBLEVBQUksRUFBRSxDQUFBLENBQUE7QUFFbkMsRUFBQSxJQUFJLFVBQVUsRUFBSSxFQUFBO0FBQ2hCLElBQVEsT0FBQSxLQUFBLEtBQVUsS0FBSyxLQUFTLElBQUEsQ0FBQSxJQUFPLFVBQVUsQ0FBSyxJQUFBLEtBQUEsSUFBUyxLQUFNLEtBQVEsR0FBQSxDQUFBLENBQUE7QUFBQSxHQUMvRTtBQUVBLEVBQUEsSUFBSSxVQUFVLEVBQUksRUFBQTtBQUNoQixJQUFBLE9BQVEsS0FBVSxLQUFBLENBQUEsSUFBSyxLQUFTLElBQUEsQ0FBQSxJQUFNLEtBQVMsSUFBQSxDQUFBLENBQUE7QUFBQSxHQUNqRDtBQUVBLEVBQUEsT0FBTyxLQUFRLEdBQUEsRUFBQSxDQUFBO0FBQ2pCLENBQUE7QUFFTyxTQUFTLGtDQUFrQyxXQUFxQyxFQUFBO0FBQ3JGLEVBQU0sTUFBQSxPQUFBLEdBQVUsT0FBTyxTQUFVLENBQUEsT0FBQSxDQUFBO0FBRWpDLEVBQUksSUFBQSx1Q0FBQSxDQUF3QyxPQUFPLENBQUcsRUFBQTtBQUNwRCxJQUFPLE9BQUEsSUFBSSw0QkFBNEIsV0FBVyxDQUFBLENBQUE7QUFBQSxHQUNwRDtBQUVBLEVBQUEsT0FBTyxFQUFFLEtBQUEsRUFBTyxXQUFhLEVBQUEsSUFBQSxFQUFNLGVBQWdCLEVBQUEsQ0FBQTtBQUNyRDs7OzsifQ==
@@ -0,0 +1,12 @@
1
+ function writeSceneLog(logger, message, ...rest) {
2
+ let loggingEnabled = false;
3
+ if (typeof window !== "undefined") {
4
+ loggingEnabled = localStorage.getItem("grafana.debug.scenes") === "true";
5
+ }
6
+ if (loggingEnabled) {
7
+ console.log(`${logger}: `, message, ...rest);
8
+ }
9
+ }
10
+
11
+ export { writeSceneLog };
12
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVTY2VuZUxvZy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3dyaXRlU2NlbmVMb2cudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHdyaXRlU2NlbmVMb2cobG9nZ2VyOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgLi4ucmVzdDogdW5rbm93bltdKSB7XG4gIGxldCBsb2dnaW5nRW5hYmxlZCA9IGZhbHNlO1xuXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGxvZ2dpbmdFbmFibGVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2dyYWZhbmEuZGVidWcuc2NlbmVzJykgPT09ICd0cnVlJztcbiAgfVxuXG4gIGlmIChsb2dnaW5nRW5hYmxlZCkge1xuICAgIGNvbnNvbGUubG9nKGAke2xvZ2dlcn06IGAsIG1lc3NhZ2UsIC4uLnJlc3QpO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWdCLFNBQUEsYUFBQSxDQUFjLE1BQWdCLEVBQUEsT0FBQSxFQUFBLEdBQW9CLElBQWlCLEVBQUE7QUFDakYsRUFBQSxJQUFJLGNBQWlCLEdBQUEsS0FBQSxDQUFBO0FBRXJCLEVBQUksSUFBQSxPQUFPLFdBQVcsV0FBYSxFQUFBO0FBQ2pDLElBQWlCLGNBQUEsR0FBQSxZQUFBLENBQWEsT0FBUSxDQUFBLHNCQUFzQixDQUFNLEtBQUEsTUFBQSxDQUFBO0FBQUEsR0FDcEU7QUFFQSxFQUFBLElBQUksY0FBZ0IsRUFBQTtBQUNsQixJQUFBLE9BQUEsQ0FBUSxHQUFJLENBQUEsQ0FBQSxFQUFHLE1BQVksQ0FBQSxFQUFBLENBQUEsRUFBQSxPQUFBLEVBQVMsR0FBRyxJQUFJLENBQUEsQ0FBQTtBQUFBLEdBQzdDO0FBQ0Y7Ozs7In0=
@@ -0,0 +1,150 @@
1
+ import { DataLinkBuiltInVars } from '@grafana/data';
2
+ import { sceneGraph } from '../core/sceneGraph/index.js';
3
+ import { writeSceneLog } from '../utils/writeSceneLog.js';
4
+ import { VARIABLE_REGEX } from './constants.js';
5
+ import { safeStringifyValue } from './utils.js';
6
+ import { ConstantVariable } from './variants/ConstantVariable.js';
7
+
8
+ class VariableDependencyConfig {
9
+ constructor(_sceneObject, _options) {
10
+ this._sceneObject = _sceneObject;
11
+ this._options = _options;
12
+ this._dependencies = /* @__PURE__ */ new Set();
13
+ this._isWaitingForVariables = false;
14
+ this.scanCount = 0;
15
+ this._statePaths = _options.statePaths;
16
+ if (this._options.handleTimeMacros) {
17
+ this.handleTimeMacros();
18
+ }
19
+ }
20
+ hasDependencyOn(name) {
21
+ return this.getNames().has(name);
22
+ }
23
+ variableUpdateCompleted(variable, hasChanged) {
24
+ const deps = this.getNames();
25
+ let dependencyChanged = false;
26
+ if ((deps.has(variable.state.name) || deps.has(DataLinkBuiltInVars.includeVars)) && hasChanged) {
27
+ dependencyChanged = true;
28
+ }
29
+ writeSceneLog(
30
+ "VariableDependencyConfig",
31
+ "variableUpdateCompleted",
32
+ variable.state.name,
33
+ dependencyChanged,
34
+ this._isWaitingForVariables
35
+ );
36
+ if (this._options.onAnyVariableChanged) {
37
+ this._options.onAnyVariableChanged(variable);
38
+ }
39
+ if (this._options.onVariableUpdateCompleted && (this._isWaitingForVariables || dependencyChanged)) {
40
+ this._options.onVariableUpdateCompleted();
41
+ }
42
+ if (dependencyChanged) {
43
+ if (this._options.onReferencedVariableValueChanged) {
44
+ this._options.onReferencedVariableValueChanged(variable);
45
+ }
46
+ if (!this._options.onReferencedVariableValueChanged && !this._options.onVariableUpdateCompleted) {
47
+ this._sceneObject.forceRender();
48
+ }
49
+ }
50
+ }
51
+ hasDependencyInLoadingState() {
52
+ if (sceneGraph.hasVariableDependencyInLoadingState(this._sceneObject)) {
53
+ this._isWaitingForVariables = true;
54
+ return true;
55
+ }
56
+ this._isWaitingForVariables = false;
57
+ return false;
58
+ }
59
+ getNames() {
60
+ const prevState = this._state;
61
+ const newState = this._state = this._sceneObject.state;
62
+ if (!prevState) {
63
+ this.scanStateForDependencies(this._state);
64
+ return this._dependencies;
65
+ }
66
+ if (newState !== prevState) {
67
+ if (this._statePaths) {
68
+ for (const path of this._statePaths) {
69
+ if (path === "*" || newState[path] !== prevState[path]) {
70
+ this.scanStateForDependencies(newState);
71
+ break;
72
+ }
73
+ }
74
+ } else {
75
+ this.scanStateForDependencies(newState);
76
+ }
77
+ }
78
+ return this._dependencies;
79
+ }
80
+ setVariableNames(varNames) {
81
+ this._options.variableNames = varNames;
82
+ this.scanStateForDependencies(this._state);
83
+ }
84
+ setPaths(paths) {
85
+ this._statePaths = paths;
86
+ }
87
+ scanStateForDependencies(state) {
88
+ this._dependencies.clear();
89
+ this.scanCount += 1;
90
+ if (this._options.variableNames) {
91
+ for (const name of this._options.variableNames) {
92
+ this._dependencies.add(name);
93
+ }
94
+ }
95
+ if (this._statePaths) {
96
+ for (const path of this._statePaths) {
97
+ if (path === "*") {
98
+ this.extractVariablesFrom(state);
99
+ break;
100
+ } else {
101
+ const value = state[path];
102
+ if (value) {
103
+ this.extractVariablesFrom(value);
104
+ }
105
+ }
106
+ }
107
+ }
108
+ }
109
+ extractVariablesFrom(value) {
110
+ VARIABLE_REGEX.lastIndex = 0;
111
+ const stringToCheck = typeof value !== "string" ? safeStringifyValue(value) : value;
112
+ const matches = stringToCheck.matchAll(VARIABLE_REGEX);
113
+ if (!matches) {
114
+ return;
115
+ }
116
+ for (const match of matches) {
117
+ const [, var1, var2, , var3] = match;
118
+ const variableName = var1 || var2 || var3;
119
+ this._dependencies.add(variableName);
120
+ }
121
+ }
122
+ handleTimeMacros() {
123
+ this._sceneObject.addActivationHandler(() => {
124
+ const timeRange = sceneGraph.getTimeRange(this._sceneObject);
125
+ const sub = timeRange.subscribeToState((newState, oldState) => {
126
+ const deps = this.getNames();
127
+ const hasFromDep = deps.has("__from");
128
+ const hasToDep = deps.has("__to");
129
+ const hasTimeZone = deps.has("__timezone");
130
+ if (newState.value !== oldState.value) {
131
+ if (hasFromDep) {
132
+ const variable = new ConstantVariable({ name: "__from", value: newState.from });
133
+ this.variableUpdateCompleted(variable, true);
134
+ } else if (hasToDep) {
135
+ const variable = new ConstantVariable({ name: "__to", value: newState.to });
136
+ this.variableUpdateCompleted(variable, true);
137
+ }
138
+ }
139
+ if (newState.timeZone !== oldState.timeZone && hasTimeZone) {
140
+ const variable = new ConstantVariable({ name: "__timezone", value: newState.timeZone });
141
+ this.variableUpdateCompleted(variable, true);
142
+ }
143
+ });
144
+ return () => sub.unsubscribe();
145
+ });
146
+ }
147
+ }
148
+
149
+ export { VariableDependencyConfig };
150
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFyaWFibGVEZXBlbmRlbmN5Q29uZmlnLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdmFyaWFibGVzL1ZhcmlhYmxlRGVwZW5kZW5jeUNvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhTGlua0J1aWx0SW5WYXJzIH0gZnJvbSAnQGdyYWZhbmEvZGF0YSc7XG5pbXBvcnQgeyBzY2VuZUdyYXBoIH0gZnJvbSAnLi4vY29yZS9zY2VuZUdyYXBoJztcbmltcG9ydCB7IFNjZW5lT2JqZWN0LCBTY2VuZU9iamVjdFN0YXRlIH0gZnJvbSAnLi4vY29yZS90eXBlcyc7XG5pbXBvcnQgeyB3cml0ZVNjZW5lTG9nIH0gZnJvbSAnLi4vdXRpbHMvd3JpdGVTY2VuZUxvZyc7XG5pbXBvcnQgeyBWQVJJQUJMRV9SRUdFWCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuaW1wb3J0IHsgU2NlbmVWYXJpYWJsZSwgU2NlbmVWYXJpYWJsZURlcGVuZGVuY3lDb25maWdMaWtlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBzYWZlU3RyaW5naWZ5VmFsdWUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IENvbnN0YW50VmFyaWFibGUgfSBmcm9tICcuL3ZhcmlhbnRzL0NvbnN0YW50VmFyaWFibGUnO1xuXG5pbnRlcmZhY2UgVmFyaWFibGVEZXBlbmRlbmN5Q29uZmlnT3B0aW9uczxUU3RhdGUgZXh0ZW5kcyBTY2VuZU9iamVjdFN0YXRlPiB7XG4gIC8qKlxuICAgKiBTdGF0ZSBwYXRocyB0byBzY2FuIC8gZXh0cmFjdCB2YXJpYWJsZSBkZXBlbmRlbmNpZXMgZnJvbS4gTGVhdmUgZW1wdHkgdG8gc2NhbiBhbGwgcGF0aHMuXG4gICAqL1xuICBzdGF0ZVBhdGhzPzogQXJyYXk8a2V5b2YgVFN0YXRlIHwgJyonPjtcblxuICAvKipcbiAgICogRXhwbGljaXQgbGlzdCBvZiB2YXJpYWJsZSBuYW1lcyB0byBkZXBlbmQgb24uIExlYXZlIGVtcHR5IHRvIHNjYW4gc3RhdGUgZm9yIGRlcGVuZGVuY2llcy5cbiAgICovXG4gIHZhcmlhYmxlTmFtZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgd2F5IHRvIGN1c3RvbWl6ZSBob3cgdG8gaGFuZGxlIHdoZW4gYSBkZXBlbmRlbnQgdmFyaWFibGUgY2hhbmdlc1xuICAgKiBJZiBub3Qgc3BlY2lmaWVkIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIHRyaWdnZXIgYSByZS1yZW5kZXJcbiAgICovXG4gIG9uUmVmZXJlbmNlZFZhcmlhYmxlVmFsdWVDaGFuZ2VkPzogKHZhcmlhYmxlOiBTY2VuZVZhcmlhYmxlKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBUd28gc2NlbmFyaW9zIHRyaWdnZXIgdGhpcyBjYWxsYmFjayB0byBiZSBjYWxsZWQuXG4gICAqIDEuIFdoZW4gYW55IGRpcmVjdCBkZXBlbmRlbmN5IGNoYW5nZWQgdmFsdWVcbiAgICogMi4gSW4gY2FzZSBoYXNEZXBlbmRlbmN5SW5Mb2FkaW5nU3RhdGUgd2FzIGNhbGxlZCBhbmQgcmV0dXJuZWQgdHJ1ZSB3ZSByZWFsbHkgY2FyZSBhYm91dCBhbnkgdmFyaWFibGUgdXBkYXRlLiBTbyBpbiB0aGlzIHNjZW5hcmlvIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkXG4gICAqICAgIGFmdGVyIGFueSB2YXJpYWJsZSB1cGRhdGUgY29tcGxldGVzLiBUaGlzIGlzIHRvIGNvdmVyIHNjZW5hcmlvcyB3aGVyZSBhbiBvYmplY3QgaXMgd2FpdGluZyBmb3IgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIHRvIGNvbXBsZXRlLlxuICAgKi9cbiAgb25WYXJpYWJsZVVwZGF0ZUNvbXBsZXRlZD86ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHdheSB0byBzdWJzY3JpYmUgdG8gYWxsIHZhcmlhYmxlIHZhbHVlIGNoYW5nZXMsIGV2ZW4gdG8gdmFyaWFibGVzIHRoYXQgYXJlIG5vdCBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBvbkFueVZhcmlhYmxlQ2hhbmdlZD86ICh2YXJpYWJsZTogU2NlbmVWYXJpYWJsZSkgPT4gdm9pZDtcblxuICAvKipcbiAgICogSGFuZGxlIHRpbWUgbWFjcm9zLlxuICAgKi9cbiAgaGFuZGxlVGltZU1hY3Jvcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBWYXJpYWJsZURlcGVuZGVuY3lDb25maWc8VFN0YXRlIGV4dGVuZHMgU2NlbmVPYmplY3RTdGF0ZT4gaW1wbGVtZW50cyBTY2VuZVZhcmlhYmxlRGVwZW5kZW5jeUNvbmZpZ0xpa2Uge1xuICBwcml2YXRlIF9zdGF0ZTogVFN0YXRlIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9kZXBlbmRlbmNpZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBfc3RhdGVQYXRocz86IEFycmF5PGtleW9mIFRTdGF0ZSB8ICcqJz47XG4gIHByaXZhdGUgX2lzV2FpdGluZ0ZvclZhcmlhYmxlcyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBzY2FuQ291bnQgPSAwO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9zY2VuZU9iamVjdDogU2NlbmVPYmplY3Q8VFN0YXRlPixcbiAgICBwcml2YXRlIF9vcHRpb25zOiBWYXJpYWJsZURlcGVuZGVuY3lDb25maWdPcHRpb25zPFRTdGF0ZT5cbiAgKSB7XG4gICAgdGhpcy5fc3RhdGVQYXRocyA9IF9vcHRpb25zLnN0YXRlUGF0aHM7XG5cbiAgICBpZiAodGhpcy5fb3B0aW9ucy5oYW5kbGVUaW1lTWFjcm9zKSB7XG4gICAgICB0aGlzLmhhbmRsZVRpbWVNYWNyb3MoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXNlZCB0byBjaGVjayBmb3IgZGVwZW5kZW5jeSBvbiBhIHNwZWNpZmljIHZhcmlhYmxlXG4gICAqL1xuICBwdWJsaWMgaGFzRGVwZW5kZW5jeU9uKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldE5hbWVzKCkuaGFzKG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgY2FsbGVkIHdoZW5ldmVyIGFueSBzZXQgb2YgdmFyaWFibGVzIGhhdmUgbmV3IHZhbHVlcy4gSXQgaXMgdXAgdG8gdGhpcyBpbXBsZW1lbnRhdGlvbiB0byBjaGVjayBpZiBpdCdzIHJlbGV2YW50IGdpdmVuIHRoZSBjdXJyZW50IGRlcGVuZGVuY2llcy5cbiAgICovXG4gIHB1YmxpYyB2YXJpYWJsZVVwZGF0ZUNvbXBsZXRlZCh2YXJpYWJsZTogU2NlbmVWYXJpYWJsZSwgaGFzQ2hhbmdlZDogYm9vbGVhbikge1xuICAgIGNvbnN0IGRlcHMgPSB0aGlzLmdldE5hbWVzKCk7XG4gICAgbGV0IGRlcGVuZGVuY3lDaGFuZ2VkID0gZmFsc2U7XG5cbiAgICBpZiAoKGRlcHMuaGFzKHZhcmlhYmxlLnN0YXRlLm5hbWUpIHx8IGRlcHMuaGFzKERhdGFMaW5rQnVpbHRJblZhcnMuaW5jbHVkZVZhcnMpKSAmJiBoYXNDaGFuZ2VkKSB7XG4gICAgICBkZXBlbmRlbmN5Q2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgd3JpdGVTY2VuZUxvZyhcbiAgICAgICdWYXJpYWJsZURlcGVuZGVuY3lDb25maWcnLFxuICAgICAgJ3ZhcmlhYmxlVXBkYXRlQ29tcGxldGVkJyxcbiAgICAgIHZhcmlhYmxlLnN0YXRlLm5hbWUsXG4gICAgICBkZXBlbmRlbmN5Q2hhbmdlZCxcbiAgICAgIHRoaXMuX2lzV2FpdGluZ0ZvclZhcmlhYmxlc1xuICAgICk7XG5cbiAgICBpZiAodGhpcy5fb3B0aW9ucy5vbkFueVZhcmlhYmxlQ2hhbmdlZCkge1xuICAgICAgdGhpcy5fb3B0aW9ucy5vbkFueVZhcmlhYmxlQ2hhbmdlZCh2YXJpYWJsZSk7XG4gICAgfVxuXG4gICAgLy8gSWYgY3VzdG9tIGhhbmRsZXIgY2FsbGVkIHdoZW4gZGVwZW5kZW5jeSBpcyBjaGFuZ2VkIG9yIHdoZW4gd2UgYXJlIHdhaXRpbmcgZm9yIHZhcmlhYmxlc1xuICAgIGlmICh0aGlzLl9vcHRpb25zLm9uVmFyaWFibGVVcGRhdGVDb21wbGV0ZWQgJiYgKHRoaXMuX2lzV2FpdGluZ0ZvclZhcmlhYmxlcyB8fCBkZXBlbmRlbmN5Q2hhbmdlZCkpIHtcbiAgICAgIHRoaXMuX29wdGlvbnMub25WYXJpYWJsZVVwZGF0ZUNvbXBsZXRlZCgpO1xuICAgIH1cblxuICAgIGlmIChkZXBlbmRlbmN5Q2hhbmdlZCkge1xuICAgICAgaWYgKHRoaXMuX29wdGlvbnMub25SZWZlcmVuY2VkVmFyaWFibGVWYWx1ZUNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5vblJlZmVyZW5jZWRWYXJpYWJsZVZhbHVlQ2hhbmdlZCh2YXJpYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIG5vIGNhbGxiYWNrcyBhcmUgc3BlY2lmaWVkIHRoZW4ganVzdCBkbyBhIGZvcmNlUmVuZGVyXG4gICAgICBpZiAoIXRoaXMuX29wdGlvbnMub25SZWZlcmVuY2VkVmFyaWFibGVWYWx1ZUNoYW5nZWQgJiYgIXRoaXMuX29wdGlvbnMub25WYXJpYWJsZVVwZGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICB0aGlzLl9zY2VuZU9iamVjdC5mb3JjZVJlbmRlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBoYXNEZXBlbmRlbmN5SW5Mb2FkaW5nU3RhdGUoKSB7XG4gICAgaWYgKHNjZW5lR3JhcGguaGFzVmFyaWFibGVEZXBlbmRlbmN5SW5Mb2FkaW5nU3RhdGUodGhpcy5fc2NlbmVPYmplY3QpKSB7XG4gICAgICB0aGlzLl9pc1dhaXRpbmdGb3JWYXJpYWJsZXMgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5faXNXYWl0aW5nRm9yVmFyaWFibGVzID0gZmFsc2U7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldE5hbWVzKCk6IFNldDxzdHJpbmc+IHtcbiAgICBjb25zdCBwcmV2U3RhdGUgPSB0aGlzLl9zdGF0ZTtcbiAgICBjb25zdCBuZXdTdGF0ZSA9ICh0aGlzLl9zdGF0ZSA9IHRoaXMuX3NjZW5lT2JqZWN0LnN0YXRlKTtcblxuICAgIGlmICghcHJldlN0YXRlKSB7XG4gICAgICAvLyBGaXJzdCB0aW1lIHdlIGFsd2F5cyBzY2FuIGZvciBkZXBlbmRlbmNpZXNcbiAgICAgIHRoaXMuc2NhblN0YXRlRm9yRGVwZW5kZW5jaWVzKHRoaXMuX3N0YXRlKTtcbiAgICAgIHJldHVybiB0aGlzLl9kZXBlbmRlbmNpZXM7XG4gICAgfVxuXG4gICAgLy8gU2Vjb25kIHRpbWUgd2Ugb25seSBzY2FuIGlmIHN0YXRlIGlzIGEgZGlmZmVyZW50IGFuZCBpZiBhbnkgc3BlY2lmaWMgc3RhdGUgcGF0aCBoYXMgY2hhbmdlZFxuICAgIGlmIChuZXdTdGF0ZSAhPT0gcHJldlN0YXRlKSB7XG4gICAgICBpZiAodGhpcy5fc3RhdGVQYXRocykge1xuICAgICAgICBmb3IgKGNvbnN0IHBhdGggb2YgdGhpcy5fc3RhdGVQYXRocykge1xuICAgICAgICAgIGlmIChwYXRoID09PSAnKicgfHwgbmV3U3RhdGVbcGF0aF0gIT09IHByZXZTdGF0ZVtwYXRoXSkge1xuICAgICAgICAgICAgdGhpcy5zY2FuU3RhdGVGb3JEZXBlbmRlbmNpZXMobmV3U3RhdGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNjYW5TdGF0ZUZvckRlcGVuZGVuY2llcyhuZXdTdGF0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2RlcGVuZGVuY2llcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdmFyaWFibGVOYW1lc1xuICAgKi9cbiAgcHVibGljIHNldFZhcmlhYmxlTmFtZXModmFyTmFtZXM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fb3B0aW9ucy52YXJpYWJsZU5hbWVzID0gdmFyTmFtZXM7XG4gICAgdGhpcy5zY2FuU3RhdGVGb3JEZXBlbmRlbmNpZXModGhpcy5fc3RhdGUhKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRQYXRocyhwYXRoczogQXJyYXk8a2V5b2YgVFN0YXRlIHwgJyonPikge1xuICAgIHRoaXMuX3N0YXRlUGF0aHMgPSBwYXRocztcbiAgfVxuXG4gIHByaXZhdGUgc2NhblN0YXRlRm9yRGVwZW5kZW5jaWVzKHN0YXRlOiBUU3RhdGUpIHtcbiAgICB0aGlzLl9kZXBlbmRlbmNpZXMuY2xlYXIoKTtcbiAgICB0aGlzLnNjYW5Db3VudCArPSAxO1xuXG4gICAgaWYgKHRoaXMuX29wdGlvbnMudmFyaWFibGVOYW1lcykge1xuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIHRoaXMuX29wdGlvbnMudmFyaWFibGVOYW1lcykge1xuICAgICAgICB0aGlzLl9kZXBlbmRlbmNpZXMuYWRkKG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdGF0ZVBhdGhzKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhdGggb2YgdGhpcy5fc3RhdGVQYXRocykge1xuICAgICAgICBpZiAocGF0aCA9PT0gJyonKSB7XG4gICAgICAgICAgdGhpcy5leHRyYWN0VmFyaWFibGVzRnJvbShzdGF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBzdGF0ZVtwYXRoXTtcbiAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZXh0cmFjdFZhcmlhYmxlc0Zyb20odmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFZhcmlhYmxlc0Zyb20odmFsdWU6IHVua25vd24pIHtcbiAgICBWQVJJQUJMRV9SRUdFWC5sYXN0SW5kZXggPSAwO1xuXG4gICAgY29uc3Qgc3RyaW5nVG9DaGVjayA9IHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgPyBzYWZlU3RyaW5naWZ5VmFsdWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICBjb25zdCBtYXRjaGVzID0gc3RyaW5nVG9DaGVjay5tYXRjaEFsbChWQVJJQUJMRV9SRUdFWCk7XG4gICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVzKSB7XG4gICAgICBjb25zdCBbLCB2YXIxLCB2YXIyLCAsIHZhcjNdID0gbWF0Y2g7XG4gICAgICBjb25zdCB2YXJpYWJsZU5hbWUgPSB2YXIxIHx8IHZhcjIgfHwgdmFyMztcbiAgICAgIHRoaXMuX2RlcGVuZGVuY2llcy5hZGQodmFyaWFibGVOYW1lKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVRpbWVNYWNyb3MoKSB7XG4gICAgdGhpcy5fc2NlbmVPYmplY3QuYWRkQWN0aXZhdGlvbkhhbmRsZXIoKCkgPT4ge1xuICAgICAgY29uc3QgdGltZVJhbmdlID0gc2NlbmVHcmFwaC5nZXRUaW1lUmFuZ2UodGhpcy5fc2NlbmVPYmplY3QpO1xuXG4gICAgICBjb25zdCBzdWIgPSB0aW1lUmFuZ2Uuc3Vic2NyaWJlVG9TdGF0ZSgobmV3U3RhdGUsIG9sZFN0YXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlcHMgPSB0aGlzLmdldE5hbWVzKCk7XG4gICAgICAgIGNvbnN0IGhhc0Zyb21EZXAgPSBkZXBzLmhhcygnX19mcm9tJyk7XG4gICAgICAgIGNvbnN0IGhhc1RvRGVwID0gZGVwcy5oYXMoJ19fdG8nKTtcbiAgICAgICAgY29uc3QgaGFzVGltZVpvbmUgPSBkZXBzLmhhcygnX190aW1lem9uZScpO1xuXG4gICAgICAgIGlmIChuZXdTdGF0ZS52YWx1ZSAhPT0gb2xkU3RhdGUudmFsdWUpIHtcbiAgICAgICAgICAvLyBJZiB5b3UgaGF2ZSBib3RoIF9fZnJvbSAmIF9fdG/CoGFzIGRlcGVuZGVuY2llcyB5b3Ugb25seSBnZXQgbm90aWZpZWQgdGhhdCBmcm9tIGNoYW5nZWQgYW5kIHZpY2UgdmVyc2FcbiAgICAgICAgICBpZiAoaGFzRnJvbURlcCkge1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGUgPSBuZXcgQ29uc3RhbnRWYXJpYWJsZSh7IG5hbWU6ICdfX2Zyb20nLCB2YWx1ZTogbmV3U3RhdGUuZnJvbSB9KTtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVVcGRhdGVDb21wbGV0ZWQodmFyaWFibGUsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzVG9EZXApIHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlID0gbmV3IENvbnN0YW50VmFyaWFibGUoeyBuYW1lOiAnX190bycsIHZhbHVlOiBuZXdTdGF0ZS50byB9KTtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVVcGRhdGVDb21wbGV0ZWQodmFyaWFibGUsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdTdGF0ZS50aW1lWm9uZSAhPT0gb2xkU3RhdGUudGltZVpvbmUgJiYgaGFzVGltZVpvbmUpIHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZSA9IG5ldyBDb25zdGFudFZhcmlhYmxlKHsgbmFtZTogJ19fdGltZXpvbmUnLCB2YWx1ZTogbmV3U3RhdGUudGltZVpvbmUgfSk7XG4gICAgICAgICAgdGhpcy52YXJpYWJsZVVwZGF0ZUNvbXBsZXRlZCh2YXJpYWJsZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gKCkgPT4gc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBOENPLE1BQU0sd0JBQXVHLENBQUE7QUFBQSxFQVEzRyxXQUFBLENBQ0csY0FDQSxRQUNSLEVBQUE7QUFGUSxJQUFBLElBQUEsQ0FBQSxZQUFBLEdBQUEsWUFBQSxDQUFBO0FBQ0EsSUFBQSxJQUFBLENBQUEsUUFBQSxHQUFBLFFBQUEsQ0FBQTtBQVJWLElBQVEsSUFBQSxDQUFBLGFBQUEsdUJBQW9CLEdBQVksRUFBQSxDQUFBO0FBRXhDLElBQUEs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
@@ -0,0 +1,71 @@
1
+ import { sceneGraph } from '../core/sceneGraph/index.js';
2
+ import { isVariableValueEqual } from './utils.js';
3
+
4
+ class VariableValueRecorder {
5
+ constructor() {
6
+ this._values = /* @__PURE__ */ new Map();
7
+ }
8
+ recordCurrentDependencyValuesForSceneObject(sceneObject) {
9
+ this.clearValues();
10
+ if (!sceneObject.variableDependency) {
11
+ return;
12
+ }
13
+ for (const variableName of sceneObject.variableDependency.getNames()) {
14
+ const variable = sceneGraph.lookupVariable(variableName, sceneObject);
15
+ if (variable) {
16
+ this._values.set(variable.state.name, variable.getValue());
17
+ }
18
+ }
19
+ }
20
+ cloneAndRecordCurrentValuesForSceneObject(sceneObject) {
21
+ const clone = new VariableValueRecorder();
22
+ clone.recordCurrentDependencyValuesForSceneObject(sceneObject);
23
+ return clone;
24
+ }
25
+ clearValues() {
26
+ this._values.clear();
27
+ }
28
+ hasValues() {
29
+ return !!this._values;
30
+ }
31
+ recordCurrentValue(variable) {
32
+ this._values.set(variable.state.name, variable.getValue());
33
+ }
34
+ hasRecordedValue(variable) {
35
+ return this._values.has(variable.state.name);
36
+ }
37
+ hasValueChanged(variable) {
38
+ if (this._values.has(variable.state.name)) {
39
+ const value = this._values.get(variable.state.name);
40
+ if (!isVariableValueEqual(value, variable.getValue())) {
41
+ return true;
42
+ }
43
+ }
44
+ return false;
45
+ }
46
+ hasDependenciesChanged(sceneObject) {
47
+ if (!this._values) {
48
+ return false;
49
+ }
50
+ if (!sceneObject.variableDependency) {
51
+ return false;
52
+ }
53
+ for (const variableName of sceneObject.variableDependency.getNames()) {
54
+ const variable = sceneGraph.lookupVariable(variableName, sceneObject);
55
+ if (!variable) {
56
+ continue;
57
+ }
58
+ const name = variable.state.name;
59
+ if (variable && this._values.has(name)) {
60
+ const value = this._values.get(name);
61
+ if (!isVariableValueEqual(value, variable.getValue())) {
62
+ return true;
63
+ }
64
+ }
65
+ }
66
+ return false;
67
+ }
68
+ }
69
+
70
+ export { VariableValueRecorder };
71
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFyaWFibGVWYWx1ZVJlY29yZGVyLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdmFyaWFibGVzL1ZhcmlhYmxlVmFsdWVSZWNvcmRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzY2VuZUdyYXBoIH0gZnJvbSAnLi4vY29yZS9zY2VuZUdyYXBoJztcbmltcG9ydCB7IFNjZW5lT2JqZWN0IH0gZnJvbSAnLi4vY29yZS90eXBlcyc7XG5pbXBvcnQgeyBTY2VuZVZhcmlhYmxlLCBWYXJpYWJsZVZhbHVlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBpc1ZhcmlhYmxlVmFsdWVFcXVhbCB9IGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIFVzZWZ1bCBmb3IgcmVtZW1iZXJpbmcgdmFyaWFibGUgdmFsdWVzIHRvIGtub3cgaWYgdGhleSBoYXZlIGNoYW5nZWRcbiAqKi9cbmV4cG9ydCBjbGFzcyBWYXJpYWJsZVZhbHVlUmVjb3JkZXIge1xuICBwcml2YXRlIF92YWx1ZXMgPSBuZXcgTWFwPHN0cmluZywgVmFyaWFibGVWYWx1ZSB8IHVuZGVmaW5lZCB8IG51bGw+KCk7XG5cbiAgcHVibGljIHJlY29yZEN1cnJlbnREZXBlbmRlbmN5VmFsdWVzRm9yU2NlbmVPYmplY3Qoc2NlbmVPYmplY3Q6IFNjZW5lT2JqZWN0KSB7XG4gICAgdGhpcy5jbGVhclZhbHVlcygpO1xuXG4gICAgaWYgKCFzY2VuZU9iamVjdC52YXJpYWJsZURlcGVuZGVuY3kpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHZhcmlhYmxlTmFtZSBvZiBzY2VuZU9iamVjdC52YXJpYWJsZURlcGVuZGVuY3kuZ2V0TmFtZXMoKSkge1xuICAgICAgY29uc3QgdmFyaWFibGUgPSBzY2VuZUdyYXBoLmxvb2t1cFZhcmlhYmxlKHZhcmlhYmxlTmFtZSwgc2NlbmVPYmplY3QpO1xuICAgICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlcy5zZXQodmFyaWFibGUuc3RhdGUubmFtZSwgdmFyaWFibGUuZ2V0VmFsdWUoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNsb25lQW5kUmVjb3JkQ3VycmVudFZhbHVlc0ZvclNjZW5lT2JqZWN0KHNjZW5lT2JqZWN0OiBTY2VuZU9iamVjdCkge1xuICAgIGNvbnN0IGNsb25lID0gbmV3IFZhcmlhYmxlVmFsdWVSZWNvcmRlcigpO1xuICAgIGNsb25lLnJlY29yZEN1cnJlbnREZXBlbmRlbmN5VmFsdWVzRm9yU2NlbmVPYmplY3Qoc2NlbmVPYmplY3QpO1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhclZhbHVlcygpIHtcbiAgICB0aGlzLl92YWx1ZXMuY2xlYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNWYWx1ZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5fdmFsdWVzO1xuICB9XG5cbiAgcHVibGljIHJlY29yZEN1cnJlbnRWYWx1ZSh2YXJpYWJsZTogU2NlbmVWYXJpYWJsZSkge1xuICAgIHRoaXMuX3ZhbHVlcy5zZXQodmFyaWFibGUuc3RhdGUubmFtZSwgdmFyaWFibGUuZ2V0VmFsdWUoKSk7XG4gIH1cblxuICBwdWJsaWMgaGFzUmVjb3JkZWRWYWx1ZSh2YXJpYWJsZTogU2NlbmVWYXJpYWJsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZXMuaGFzKHZhcmlhYmxlLnN0YXRlLm5hbWUpO1xuICB9XG5cbiAgcHVibGljIGhhc1ZhbHVlQ2hhbmdlZCh2YXJpYWJsZTogU2NlbmVWYXJpYWJsZSk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLl92YWx1ZXMuaGFzKHZhcmlhYmxlLnN0YXRlLm5hbWUpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX3ZhbHVlcy5nZXQodmFyaWFibGUuc3RhdGUubmFtZSk7XG4gICAgICBpZiAoIWlzVmFyaWFibGVWYWx1ZUVxdWFsKHZhbHVlLCB2YXJpYWJsZS5nZXRWYWx1ZSgpKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgaGFzRGVwZW5kZW5jaWVzQ2hhbmdlZChzY2VuZU9iamVjdDogU2NlbmVPYmplY3QpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuX3ZhbHVlcykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghc2NlbmVPYmplY3QudmFyaWFibGVEZXBlbmRlbmN5KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB2YXJpYWJsZU5hbWUgb2Ygc2NlbmVPYmplY3QudmFyaWFibGVEZXBlbmRlbmN5LmdldE5hbWVzKCkpIHtcbiAgICAgIGNvbnN0IHZhcmlhYmxlID0gc2NlbmVHcmFwaC5sb29rdXBWYXJpYWJsZSh2YXJpYWJsZU5hbWUsIHNjZW5lT2JqZWN0KTtcbiAgICAgIGlmICghdmFyaWFibGUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5hbWUgPSB2YXJpYWJsZS5zdGF0ZS5uYW1lO1xuXG4gICAgICBpZiAodmFyaWFibGUgJiYgdGhpcy5fdmFsdWVzLmhhcyhuYW1lKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX3ZhbHVlcy5nZXQobmFtZSk7XG4gICAgICAgIGlmICghaXNWYXJpYWJsZVZhbHVlRXF1YWwodmFsdWUsIHZhcmlhYmxlLmdldFZhbHVlKCkpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFRTyxNQUFNLHFCQUFzQixDQUFBO0FBQUEsRUFBNUIsV0FBQSxHQUFBO0FBQ0wsSUFBUSxJQUFBLENBQUEsT0FBQSx1QkFBYyxHQUE4QyxFQUFBLENBQUE7QUFBQSxH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
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+ import { AdHocFilterRenderer } from './AdHocFilterRenderer.js';
3
+ import { Button } from '@grafana/ui';
4
+
5
+ function AdHocFilterBuilder({ model, addFilterButtonText }) {
6
+ const { _wip } = model.useState();
7
+ if (!_wip) {
8
+ return /* @__PURE__ */ React.createElement(Button, {
9
+ variant: "secondary",
10
+ icon: "plus",
11
+ title: "Add filter",
12
+ "aria-label": "Add filter",
13
+ "data-testid": `AdHocFilter-add`,
14
+ onClick: () => model._addWip()
15
+ }, addFilterButtonText);
16
+ }
17
+ return /* @__PURE__ */ React.createElement(AdHocFilterRenderer, {
18
+ filter: _wip,
19
+ model
20
+ });
21
+ }
22
+
23
+ export { AdHocFilterBuilder };
24
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWRIb2NGaWx0ZXJCdWlsZGVyLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdmFyaWFibGVzL2FkaG9jL0FkSG9jRmlsdGVyQnVpbGRlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHsgQWRIb2NGaWx0ZXJSZW5kZXJlciB9IGZyb20gJy4vQWRIb2NGaWx0ZXJSZW5kZXJlcic7XG5pbXBvcnQgeyBBZEhvY0ZpbHRlcnNWYXJpYWJsZSB9IGZyb20gJy4vQWRIb2NGaWx0ZXJzVmFyaWFibGUnO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQGdyYWZhbmEvdWknO1xuXG5pbnRlcmZhY2UgUHJvcHMge1xuICBtb2RlbDogQWRIb2NGaWx0ZXJzVmFyaWFibGU7XG4gIGFkZEZpbHRlckJ1dHRvblRleHQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBZEhvY0ZpbHRlckJ1aWxkZXIoeyBtb2RlbCwgYWRkRmlsdGVyQnV0dG9uVGV4dCB9OiBQcm9wcykge1xuICBjb25zdCB7IF93aXAgfSA9IG1vZGVsLnVzZVN0YXRlKCk7XG5cbiAgaWYgKCFfd2lwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxCdXR0b25cbiAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgIGljb249XCJwbHVzXCJcbiAgICAgICAgdGl0bGU9eydBZGQgZmlsdGVyJ31cbiAgICAgICAgYXJpYS1sYWJlbD1cIkFkZCBmaWx0ZXJcIlxuICAgICAgICBkYXRhLXRlc3RpZD17YEFkSG9jRmlsdGVyLWFkZGB9XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IG1vZGVsLl9hZGRXaXAoKX1cbiAgICAgID5cbiAgICAgICAge2FkZEZpbHRlckJ1dHRvblRleHR9XG4gICAgICA8L0J1dHRvbj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIDxBZEhvY0ZpbHRlclJlbmRlcmVyIGZpbHRlcj17X3dpcH0gbW9kZWw9e21vZGVsfSAvPjtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBV08sU0FBUyxrQkFBbUIsQ0FBQSxFQUFFLEtBQU8sRUFBQSxtQkFBQSxFQUE4QixFQUFBO0FBQ3hFLEVBQUEsTUFBTSxFQUFFLElBQUEsRUFBUyxHQUFBLEtBQUEsQ0FBTSxRQUFTLEVBQUEsQ0FBQTtBQUVoQyxFQUFBLElBQUksQ0FBQyxJQUFNLEVBQUE7QUFDVCxJQUFBLHVCQUNHLEtBQUEsQ0FBQSxhQUFBLENBQUEsTUFBQSxFQUFBO0FBQUEsTUFDQyxPQUFRLEVBQUEsV0FBQTtBQUFBLE1BQ1IsSUFBSyxFQUFBLE1BQUE7QUFBQSxNQUNMLEtBQU8sRUFBQSxZQUFBO0FBQUEsTUFDUCxZQUFXLEVBQUEsWUFBQTtBQUFBLE1BQ1gsYUFBYSxFQUFBLENBQUEsZUFBQSxDQUFBO0FBQUEsTUFDYixPQUFBLEVBQVMsTUFBTSxLQUFBLENBQU0sT0FBUSxFQUFBO0FBQUEsS0FBQSxFQUU1QixtQkFDSCxDQUFBLENBQUE7QUFBQSxHQUVKO0FBRUEsRUFBQSx1QkFBUSxLQUFBLENBQUEsYUFBQSxDQUFBLG1CQUFBLEVBQUE7QUFBQSxJQUFvQixNQUFRLEVBQUEsSUFBQTtBQUFBLElBQU0sS0FBQTtBQUFBLEdBQWMsQ0FBQSxDQUFBO0FBQzFEOzs7OyJ9