@grafana/scenes 6.7.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 +13 -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,295 @@
1
+ import { isEqual, isArray } from 'lodash';
2
+ import { map } from 'rxjs';
3
+ import { ALL_VARIABLE_VALUE, ALL_VARIABLE_TEXT } from '../constants.js';
4
+ import { SceneObjectBase } from '../../core/SceneObjectBase.js';
5
+ import { SceneVariableValueChangedEvent } from '../types.js';
6
+ import { formatRegistry } from '../interpolation/formatRegistry.js';
7
+ import { VariableFormatID } from '@grafana/schema';
8
+ import { setBaseClassState } from '../../utils/utils.js';
9
+
10
+ class MultiValueVariable extends SceneObjectBase {
11
+ constructor() {
12
+ super(...arguments);
13
+ this._urlSync = new MultiValueUrlSyncHandler(this);
14
+ }
15
+ validateAndUpdate() {
16
+ return this.getValueOptions({}).pipe(
17
+ map((options) => {
18
+ this.updateValueGivenNewOptions(options);
19
+ return {};
20
+ })
21
+ );
22
+ }
23
+ onCancel() {
24
+ this.setStateHelper({ loading: false });
25
+ const sceneVarSet = this.parent;
26
+ sceneVarSet == null ? void 0 : sceneVarSet.cancel(this);
27
+ }
28
+ updateValueGivenNewOptions(options) {
29
+ const { value: currentValue, text: currentText, options: oldOptions } = this.state;
30
+ const stateUpdate = this.getStateUpdateGivenNewOptions(options, currentValue, currentText);
31
+ this.interceptStateUpdateAfterValidation(stateUpdate);
32
+ this.setStateHelper(stateUpdate);
33
+ if (stateUpdate.value !== currentValue || stateUpdate.text !== currentText || this.hasAllValue() && !isEqual(options, oldOptions)) {
34
+ this.publishEvent(new SceneVariableValueChangedEvent(this), true);
35
+ }
36
+ }
37
+ getStateUpdateGivenNewOptions(options, currentValue, currentText) {
38
+ const stateUpdate = {
39
+ options,
40
+ loading: false,
41
+ value: currentValue,
42
+ text: currentText
43
+ };
44
+ if (options.length === 0) {
45
+ if (this.state.defaultToAll || this.state.includeAll) {
46
+ stateUpdate.value = ALL_VARIABLE_VALUE;
47
+ stateUpdate.text = ALL_VARIABLE_TEXT;
48
+ } else if (this.state.isMulti) {
49
+ stateUpdate.value = [];
50
+ stateUpdate.text = [];
51
+ } else {
52
+ stateUpdate.value = "";
53
+ stateUpdate.text = "";
54
+ }
55
+ return stateUpdate;
56
+ }
57
+ if (this.hasAllValue()) {
58
+ if (this.state.includeAll) {
59
+ stateUpdate.text = ALL_VARIABLE_TEXT;
60
+ } else {
61
+ stateUpdate.value = options[0].value;
62
+ stateUpdate.text = options[0].label;
63
+ if (this.state.isMulti) {
64
+ stateUpdate.value = [stateUpdate.value];
65
+ stateUpdate.text = [stateUpdate.text];
66
+ }
67
+ }
68
+ return stateUpdate;
69
+ }
70
+ if (this.state.isMulti) {
71
+ const currentValues = Array.isArray(currentValue) ? currentValue : [currentValue];
72
+ const validValues = currentValues.filter((v) => options.find((o) => o.value === v));
73
+ const validTexts = validValues.map((v) => options.find((o) => o.value === v).label);
74
+ if (validValues.length === 0) {
75
+ const defaultState = this.getDefaultMultiState(options);
76
+ stateUpdate.value = defaultState.value;
77
+ stateUpdate.text = defaultState.text;
78
+ } else {
79
+ if (!isEqual(validValues, currentValue)) {
80
+ stateUpdate.value = validValues;
81
+ }
82
+ if (!isEqual(validTexts, currentText)) {
83
+ stateUpdate.text = validTexts;
84
+ }
85
+ }
86
+ return stateUpdate;
87
+ }
88
+ let matchingOption = findOptionMatchingCurrent(currentValue, currentText, options);
89
+ if (matchingOption) {
90
+ stateUpdate.text = matchingOption.label;
91
+ stateUpdate.value = matchingOption.value;
92
+ } else {
93
+ if (this.state.defaultToAll) {
94
+ stateUpdate.value = ALL_VARIABLE_VALUE;
95
+ stateUpdate.text = ALL_VARIABLE_TEXT;
96
+ } else {
97
+ stateUpdate.value = options[0].value;
98
+ stateUpdate.text = options[0].label;
99
+ }
100
+ }
101
+ return stateUpdate;
102
+ }
103
+ interceptStateUpdateAfterValidation(stateUpdate) {
104
+ const isAllValueFix = stateUpdate.value === ALL_VARIABLE_VALUE && this.state.text === ALL_VARIABLE_TEXT;
105
+ if (this.skipNextValidation && stateUpdate.value !== this.state.value && stateUpdate.text !== this.state.text && !isAllValueFix) {
106
+ stateUpdate.value = this.state.value;
107
+ stateUpdate.text = this.state.text;
108
+ }
109
+ this.skipNextValidation = false;
110
+ }
111
+ getValue() {
112
+ if (this.hasAllValue()) {
113
+ if (this.state.allValue) {
114
+ return new CustomAllValue(this.state.allValue, this);
115
+ }
116
+ return this.state.options.map((x) => x.value);
117
+ }
118
+ return this.state.value;
119
+ }
120
+ getValueText() {
121
+ if (this.hasAllValue()) {
122
+ return ALL_VARIABLE_TEXT;
123
+ }
124
+ if (Array.isArray(this.state.text)) {
125
+ return this.state.text.join(" + ");
126
+ }
127
+ return String(this.state.text);
128
+ }
129
+ hasAllValue() {
130
+ const value = this.state.value;
131
+ return value === ALL_VARIABLE_VALUE || Array.isArray(value) && value[0] === ALL_VARIABLE_VALUE;
132
+ }
133
+ getDefaultMultiState(options) {
134
+ if (this.state.defaultToAll) {
135
+ return { value: [ALL_VARIABLE_VALUE], text: [ALL_VARIABLE_TEXT] };
136
+ } else if (options.length > 0) {
137
+ return { value: [options[0].value], text: [options[0].label] };
138
+ } else {
139
+ return { value: [], text: [] };
140
+ }
141
+ }
142
+ changeValueTo(value, text) {
143
+ if (value === this.state.value && text === this.state.text) {
144
+ return;
145
+ }
146
+ if (!text) {
147
+ if (Array.isArray(value)) {
148
+ text = value.map((v) => this.findLabelTextForValue(v));
149
+ } else {
150
+ text = this.findLabelTextForValue(value);
151
+ }
152
+ }
153
+ if (Array.isArray(value)) {
154
+ if (value.length === 0) {
155
+ const state = this.getDefaultMultiState(this.state.options);
156
+ value = state.value;
157
+ text = state.text;
158
+ }
159
+ if (value[value.length - 1] === ALL_VARIABLE_VALUE) {
160
+ value = [ALL_VARIABLE_VALUE];
161
+ text = [ALL_VARIABLE_TEXT];
162
+ } else if (value[0] === ALL_VARIABLE_VALUE && value.length > 1) {
163
+ value.shift();
164
+ if (Array.isArray(text)) {
165
+ text.shift();
166
+ }
167
+ }
168
+ }
169
+ if (isEqual(value, this.state.value) && isEqual(text, this.state.text)) {
170
+ return;
171
+ }
172
+ this.setStateHelper({ value, text, loading: false });
173
+ this.publishEvent(new SceneVariableValueChangedEvent(this), true);
174
+ }
175
+ findLabelTextForValue(value) {
176
+ if (value === ALL_VARIABLE_VALUE) {
177
+ return ALL_VARIABLE_TEXT;
178
+ }
179
+ const option = this.state.options.find((x) => x.value === value);
180
+ if (option) {
181
+ return option.label;
182
+ }
183
+ const optionByLabel = this.state.options.find((x) => x.label === value);
184
+ if (optionByLabel) {
185
+ return optionByLabel.label;
186
+ }
187
+ return value;
188
+ }
189
+ setStateHelper(state) {
190
+ setBaseClassState(this, state);
191
+ }
192
+ getOptionsForSelect() {
193
+ let options = this.state.options;
194
+ if (this.state.includeAll) {
195
+ options = [{ value: ALL_VARIABLE_VALUE, label: ALL_VARIABLE_TEXT }, ...options];
196
+ }
197
+ if (!Array.isArray(this.state.value)) {
198
+ const current = options.find((x) => x.value === this.state.value);
199
+ if (!current) {
200
+ options = [{ value: this.state.value, label: String(this.state.text) }, ...options];
201
+ }
202
+ }
203
+ return options;
204
+ }
205
+ refreshOptions() {
206
+ this.getValueOptions({}).subscribe((options) => {
207
+ this.updateValueGivenNewOptions(options);
208
+ });
209
+ }
210
+ }
211
+ function findOptionMatchingCurrent(currentValue, currentText, options) {
212
+ let textMatch;
213
+ for (const item of options) {
214
+ if (item.value === currentValue) {
215
+ return item;
216
+ }
217
+ if (item.label === currentText) {
218
+ textMatch = item;
219
+ }
220
+ }
221
+ return textMatch;
222
+ }
223
+ class MultiValueUrlSyncHandler {
224
+ constructor(_sceneObject) {
225
+ this._sceneObject = _sceneObject;
226
+ }
227
+ getKey() {
228
+ return `var-${this._sceneObject.state.name}`;
229
+ }
230
+ getKeys() {
231
+ if (this._sceneObject.state.skipUrlSync) {
232
+ return [];
233
+ }
234
+ return [this.getKey()];
235
+ }
236
+ getUrlState() {
237
+ if (this._sceneObject.state.skipUrlSync) {
238
+ return {};
239
+ }
240
+ let urlValue = null;
241
+ let value = this._sceneObject.state.value;
242
+ if (Array.isArray(value)) {
243
+ urlValue = value.map(String);
244
+ } else if (this._sceneObject.state.isMulti) {
245
+ urlValue = [String(value)];
246
+ } else {
247
+ urlValue = String(value);
248
+ }
249
+ return { [this.getKey()]: urlValue };
250
+ }
251
+ updateFromUrl(values) {
252
+ let urlValue = values[this.getKey()];
253
+ if (urlValue != null) {
254
+ if (this._sceneObject.state.includeAll) {
255
+ urlValue = handleLegacyUrlAllValue(urlValue);
256
+ }
257
+ if (this._sceneObject.state.allValue && this._sceneObject.state.allValue === urlValue) {
258
+ urlValue = ALL_VARIABLE_VALUE;
259
+ }
260
+ if (!this._sceneObject.isActive) {
261
+ this._sceneObject.skipNextValidation = true;
262
+ }
263
+ this._sceneObject.changeValueTo(urlValue);
264
+ }
265
+ }
266
+ }
267
+ function handleLegacyUrlAllValue(value) {
268
+ if (isArray(value) && value[0] === ALL_VARIABLE_TEXT) {
269
+ return [ALL_VARIABLE_VALUE];
270
+ } else if (value === ALL_VARIABLE_TEXT) {
271
+ return ALL_VARIABLE_VALUE;
272
+ }
273
+ return value;
274
+ }
275
+ class CustomAllValue {
276
+ constructor(_value, _variable) {
277
+ this._value = _value;
278
+ this._variable = _variable;
279
+ }
280
+ formatter(formatNameOrFn) {
281
+ if (formatNameOrFn === VariableFormatID.Text) {
282
+ return ALL_VARIABLE_TEXT;
283
+ }
284
+ if (formatNameOrFn === VariableFormatID.PercentEncode) {
285
+ return formatRegistry.get(VariableFormatID.PercentEncode).formatter(this._value, [], this._variable);
286
+ }
287
+ if (formatNameOrFn === VariableFormatID.QueryParam) {
288
+ return formatRegistry.get(VariableFormatID.QueryParam).formatter(ALL_VARIABLE_TEXT, [], this._variable);
289
+ }
290
+ return this._value;
291
+ }
292
+ }
293
+
294
+ export { CustomAllValue, MultiValueUrlSyncHandler, MultiValueVariable };
295
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXVsdGlWYWx1ZVZhcmlhYmxlLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdmFyaWFibGVzL3ZhcmlhbnRzL011bHRpVmFsdWVWYXJpYWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0FycmF5LCBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBTExfVkFSSUFCTEVfVEVYVCwgQUxMX1ZBUklBQkxFX1ZBTFVFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuaW1wb3J0IHsgU2NlbmVPYmplY3RCYXNlIH0gZnJvbSAnLi4vLi4vY29yZS9TY2VuZU9iamVjdEJhc2UnO1xuaW1wb3J0IHsgU2NlbmVPYmplY3RVcmxTeW5jSGFuZGxlciwgU2NlbmVPYmplY3RVcmxWYWx1ZXMgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzJztcbmltcG9ydCB7XG4gIFNjZW5lVmFyaWFibGUsXG4gIFNjZW5lVmFyaWFibGVWYWx1ZUNoYW5nZWRFdmVudCxcbiAgU2NlbmVWYXJpYWJsZVN0YXRlLFxuICBWYWxpZGF0ZUFuZFVwZGF0ZVJlc3VsdCxcbiAgVmFyaWFibGVWYWx1ZSxcbiAgVmFyaWFibGVWYWx1ZU9wdGlvbixcbiAgVmFyaWFibGVWYWx1ZVNpbmdsZSxcbiAgQ3VzdG9tVmFyaWFibGVWYWx1ZSxcbiAgVmFyaWFibGVDdXN0b21Gb3JtYXR0ZXJGbixcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZm9ybWF0UmVnaXN0cnkgfSBmcm9tICcuLi9pbnRlcnBvbGF0aW9uL2Zvcm1hdFJlZ2lzdHJ5JztcbmltcG9ydCB7IFZhcmlhYmxlRm9ybWF0SUQgfSBmcm9tICdAZ3JhZmFuYS9zY2hlbWEnO1xuaW1wb3J0IHsgU2NlbmVWYXJpYWJsZVNldCB9IGZyb20gJy4uL3NldHMvU2NlbmVWYXJpYWJsZVNldCc7XG5pbXBvcnQgeyBzZXRCYXNlQ2xhc3NTdGF0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aVZhbHVlVmFyaWFibGVTdGF0ZSBleHRlbmRzIFNjZW5lVmFyaWFibGVTdGF0ZSB7XG4gIHZhbHVlOiBWYXJpYWJsZVZhbHVlOyAvLyBvbGQgY3VycmVudC50ZXh0XG4gIHRleHQ6IFZhcmlhYmxlVmFsdWU7IC8vIG9sZCBjdXJyZW50LnZhbHVlXG4gIG9wdGlvbnM6IFZhcmlhYmxlVmFsdWVPcHRpb25bXTtcbiAgYWxsb3dDdXN0b21WYWx1ZT86IGJvb2xlYW47XG4gIGlzTXVsdGk/OiBib29sZWFuO1xuICBpbmNsdWRlQWxsPzogYm9vbGVhbjtcbiAgZGVmYXVsdFRvQWxsPzogYm9vbGVhbjtcbiAgYWxsVmFsdWU/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKipcbiAgICogRm9yIG11bHRpIHZhbHVlIHZhcmlhYmxlcywgdGhpcyBvcHRpb24gY29udHJvbHMgaG93IG1hbnkgdmFsdWVzIHRvIHNob3cgYmVmb3JlIHRoZXkgYXJlIGNvbGxhcHNlZCBpbnRvICtOLlxuICAgKiBEZWZhdWx0cyB0byA1XG4gICAqL1xuICBtYXhWaXNpYmxlVmFsdWVzPzogbnVtYmVyO1xuICBub1ZhbHVlT25DbGVhcj86IGJvb2xlYW47XG4gIGlzUmVhZE9ubHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZhcmlhYmxlR2V0T3B0aW9uc0FyZ3Mge1xuICBzZWFyY2hGaWx0ZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNdWx0aVZhbHVlVmFyaWFibGU8VFN0YXRlIGV4dGVuZHMgTXVsdGlWYWx1ZVZhcmlhYmxlU3RhdGUgPSBNdWx0aVZhbHVlVmFyaWFibGVTdGF0ZT5cbiAgZXh0ZW5kcyBTY2VuZU9iamVjdEJhc2U8VFN0YXRlPlxuICBpbXBsZW1lbnRzIFNjZW5lVmFyaWFibGU8VFN0YXRlPlxue1xuICBwcm90ZWN0ZWQgX3VybFN5bmM6IFNjZW5lT2JqZWN0VXJsU3luY0hhbmRsZXIgPSBuZXcgTXVsdGlWYWx1ZVVybFN5bmNIYW5kbGVyKHRoaXMpO1xuXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSB0byBza2lwIG5leHQgdmFsdWUgdmFsaWRhdGlvbiB0byBtYWludGFpbiB0aGUgY3VycmVudCB2YWx1ZSBldmVuIGl0IGl0J3Mgbm90IGFtb25nIHRoZSBvcHRpb25zIChpZSB2YWxpZCB2YWx1ZXMpXG4gICAqL1xuICBwdWJsaWMgc2tpcE5leHRWYWxpZGF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBvZiB2YWx1ZSBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGdldFZhbHVlT3B0aW9ucyhhcmdzOiBWYXJpYWJsZUdldE9wdGlvbnNBcmdzKTogT2JzZXJ2YWJsZTxWYXJpYWJsZVZhbHVlT3B0aW9uW10+O1xuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiB3aGVuIFNjZW5lVmFyaWFibGVTZXQgaXMgYWN0aXZhdGVkIG9yIHdoZW4gYSBkZXBlbmRlbmN5IGNoYW5nZXMuXG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGVBbmRVcGRhdGUoKTogT2JzZXJ2YWJsZTxWYWxpZGF0ZUFuZFVwZGF0ZVJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlT3B0aW9ucyh7fSkucGlwZShcbiAgICAgIG1hcCgob3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlR2l2ZW5OZXdPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRTdGF0ZUhlbHBlcih7IGxvYWRpbmc6IGZhbHNlIH0pO1xuICAgIGNvbnN0IHNjZW5lVmFyU2V0ID0gdGhpcy5wYXJlbnQgYXMgU2NlbmVWYXJpYWJsZVNldDtcbiAgICBzY2VuZVZhclNldD8uY2FuY2VsKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGN1cnJlbnQgdmFsdWUgaXMgdmFsaWQgZ2l2ZW4gbmV3IG9wdGlvbnMuIElmIG5vdCB1cGRhdGUgdGhlIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZUdpdmVuTmV3T3B0aW9ucyhvcHRpb25zOiBWYXJpYWJsZVZhbHVlT3B0aW9uW10pIHtcbiAgICAvLyBSZW1lbWJlciBjdXJyZW50IHZhbHVlIGFuZCB0ZXh0XG4gICAgY29uc3QgeyB2YWx1ZTogY3VycmVudFZhbHVlLCB0ZXh0OiBjdXJyZW50VGV4dCwgb3B0aW9uczogb2xkT3B0aW9ucyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIGNvbnN0IHN0YXRlVXBkYXRlID0gdGhpcy5nZXRTdGF0ZVVwZGF0ZUdpdmVuTmV3T3B0aW9ucyhvcHRpb25zLCBjdXJyZW50VmFsdWUsIGN1cnJlbnRUZXh0KTtcblxuICAgIHRoaXMuaW50ZXJjZXB0U3RhdGVVcGRhdGVBZnRlclZhbGlkYXRpb24oc3RhdGVVcGRhdGUpO1xuXG4gICAgLy8gUGVyZm9ybSBzdGF0ZSBjaGFuZ2VcbiAgICB0aGlzLnNldFN0YXRlSGVscGVyKHN0YXRlVXBkYXRlKTtcblxuICAgIC8vIFB1Ymxpc2ggdmFsdWUgY2hhbmdlZCBldmVudCBvbmx5IGlmIHZhbHVlIGNoYW5nZWRcbiAgICBpZiAoXG4gICAgICBzdGF0ZVVwZGF0ZS52YWx1ZSAhPT0gY3VycmVudFZhbHVlIHx8XG4gICAgICBzdGF0ZVVwZGF0ZS50ZXh0ICE9PSBjdXJyZW50VGV4dCB8fFxuICAgICAgKHRoaXMuaGFzQWxsVmFsdWUoKSAmJiAhaXNFcXVhbChvcHRpb25zLCBvbGRPcHRpb25zKSlcbiAgICApIHtcbiAgICAgIHRoaXMucHVibGlzaEV2ZW50KG5ldyBTY2VuZVZhcmlhYmxlVmFsdWVDaGFuZ2VkRXZlbnQodGhpcyksIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RhdGVVcGRhdGVHaXZlbk5ld09wdGlvbnMoXG4gICAgb3B0aW9uczogVmFyaWFibGVWYWx1ZU9wdGlvbltdLFxuICAgIGN1cnJlbnRWYWx1ZTogVmFyaWFibGVWYWx1ZSxcbiAgICBjdXJyZW50VGV4dDogVmFyaWFibGVWYWx1ZVxuICApOiBQYXJ0aWFsPE11bHRpVmFsdWVWYXJpYWJsZVN0YXRlPiB7XG4gICAgY29uc3Qgc3RhdGVVcGRhdGU6IFBhcnRpYWw8TXVsdGlWYWx1ZVZhcmlhYmxlU3RhdGU+ID0ge1xuICAgICAgb3B0aW9ucyxcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgdmFsdWU6IGN1cnJlbnRWYWx1ZSxcbiAgICAgIHRleHQ6IGN1cnJlbnRUZXh0LFxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmRlZmF1bHRUb0FsbCB8fCB0aGlzLnN0YXRlLmluY2x1ZGVBbGwpIHtcbiAgICAgICAgc3RhdGVVcGRhdGUudmFsdWUgPSBBTExfVkFSSUFCTEVfVkFMVUU7XG4gICAgICAgIHN0YXRlVXBkYXRlLnRleHQgPSBBTExfVkFSSUFCTEVfVEVYVDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5pc011bHRpKSB7XG4gICAgICAgIHN0YXRlVXBkYXRlLnZhbHVlID0gW107XG4gICAgICAgIHN0YXRlVXBkYXRlLnRleHQgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlVXBkYXRlLnZhbHVlID0gJyc7XG4gICAgICAgIHN0YXRlVXBkYXRlLnRleHQgPSAnJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0YXRlVXBkYXRlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0FsbFZhbHVlKCkpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmluY2x1ZGVBbGwpIHtcbiAgICAgICAgLy8gU29tZXRpbWVzIHRoZSB0ZXh0IHJlcHJlc2VudGF0aW9uIGlzIGFsc28gc2V0IHRoZSBBTExfVkFSSUFCTEVfVkFMVUUsIHRoaXMgZml4ZXMgdGhhdFxuICAgICAgICBzdGF0ZVVwZGF0ZS50ZXh0ID0gQUxMX1ZBUklBQkxFX1RFWFQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZVVwZGF0ZS52YWx1ZSA9IG9wdGlvbnNbMF0udmFsdWU7XG4gICAgICAgIHN0YXRlVXBkYXRlLnRleHQgPSBvcHRpb25zWzBdLmxhYmVsO1xuICAgICAgICAvLyBJZiBtdWx0aSBzd2l0Y2ggdG8gYXJyYXlzXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmlzTXVsdGkpIHtcbiAgICAgICAgICBzdGF0ZVVwZGF0ZS52YWx1ZSA9IFtzdGF0ZVVwZGF0ZS52YWx1ZV07XG4gICAgICAgICAgc3RhdGVVcGRhdGUudGV4dCA9IFtzdGF0ZVVwZGF0ZS50ZXh0XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlVXBkYXRlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlLmlzTXVsdGkpIHtcbiAgICAgIC8vIElmIHdlIGFyZSBhIG11bHRpIHZhbHVlZCB2YXJpYWJsZSB2YWxpZGF0ZSB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGFtb25nIHRoZSBvcHRpb25zXG4gICAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpID8gY3VycmVudFZhbHVlIDogW2N1cnJlbnRWYWx1ZV07XG4gICAgICBjb25zdCB2YWxpZFZhbHVlcyA9IGN1cnJlbnRWYWx1ZXMuZmlsdGVyKCh2KSA9PiBvcHRpb25zLmZpbmQoKG8pID0+IG8udmFsdWUgPT09IHYpKTtcbiAgICAgIGNvbnN0IHZhbGlkVGV4dHMgPSB2YWxpZFZhbHVlcy5tYXAoKHYpID0+IG9wdGlvbnMuZmluZCgobykgPT4gby52YWx1ZSA9PT0gdikhLmxhYmVsKTtcblxuICAgICAgLy8gSWYgbm8gdmFsaWQgdmFsdWVzIHBpY2sgdGhlIGZpcnN0IG9wdGlvblxuICAgICAgaWYgKHZhbGlkVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zdCBkZWZhdWx0U3RhdGUgPSB0aGlzLmdldERlZmF1bHRNdWx0aVN0YXRlKG9wdGlvbnMpO1xuICAgICAgICBzdGF0ZVVwZGF0ZS52YWx1ZSA9IGRlZmF1bHRTdGF0ZS52YWx1ZTtcbiAgICAgICAgc3RhdGVVcGRhdGUudGV4dCA9IGRlZmF1bHRTdGF0ZS50ZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2UgaGF2ZSB2YWxpZCB2YWx1ZXMsIGlmIGl0J3MgZGlmZmVyZW50IGZyb20gY3VycmVudCB2YWxpZCB2YWx1ZXMgdXBkYXRlIGN1cnJlbnQgdmFsdWVzXG4gICAgICAgIGlmICghaXNFcXVhbCh2YWxpZFZhbHVlcywgY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgIHN0YXRlVXBkYXRlLnZhbHVlID0gdmFsaWRWYWx1ZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VxdWFsKHZhbGlkVGV4dHMsIGN1cnJlbnRUZXh0KSkge1xuICAgICAgICAgIHN0YXRlVXBkYXRlLnRleHQgPSB2YWxpZFRleHRzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGVVcGRhdGU7XG4gICAgfVxuXG4gICAgLy8gU2luZ2xlIHZhbHVlIHZhcmlhYmxlIHZhbGlkYXRpb25cblxuICAgIC8vIFRyeSBmaW5kIGJ5IHZhbHVlIHRoZW4gdGV4dFxuICAgIGxldCBtYXRjaGluZ09wdGlvbiA9IGZpbmRPcHRpb25NYXRjaGluZ0N1cnJlbnQoY3VycmVudFZhbHVlLCBjdXJyZW50VGV4dCwgb3B0aW9ucyk7XG4gICAgaWYgKG1hdGNoaW5nT3B0aW9uKSB7XG4gICAgICAvLyBXaGVuIHVwZGF0aW5nIHRoZSBpbml0aWFsIHN0YXRlIGZyb20gVVJMIHRoZSB0ZXh0IHByb3BlcnR5IGlzIHNldCB0aGUgc2FtZSBhcyB2YWx1ZVxuICAgICAgLy8gSGVyZSB3ZSBjYW4gY29ycmVjdCB0aGUgdGV4dCB2YWx1ZSBzdGF0ZVxuICAgICAgc3RhdGVVcGRhdGUudGV4dCA9IG1hdGNoaW5nT3B0aW9uLmxhYmVsO1xuICAgICAgc3RhdGVVcGRhdGUudmFsdWUgPSBtYXRjaGluZ09wdGlvbi52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3VycmVudCB2YWx1ZSBpcyBmb3VuZCBpbiBvcHRpb25zXG4gICAgICBpZiAodGhpcy5zdGF0ZS5kZWZhdWx0VG9BbGwpIHtcbiAgICAgICAgc3RhdGVVcGRhdGUudmFsdWUgPSBBTExfVkFSSUFCTEVfVkFMVUU7XG4gICAgICAgIHN0YXRlVXBkYXRlLnRleHQgPSBBTExfVkFSSUFCTEVfVEVYVDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEN1cnJlbnQgdmFsdWUgaXMgbm90IHZhbGlkLiBTZXQgdG8gZmlyc3Qgb2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zXG4gICAgICAgIHN0YXRlVXBkYXRlLnZhbHVlID0gb3B0aW9uc1swXS52YWx1ZTtcbiAgICAgICAgc3RhdGVVcGRhdGUudGV4dCA9IG9wdGlvbnNbMF0ubGFiZWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlVXBkYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbHVlcyBzZXQgYnkgaW5pdGlhbCBVUkwgc3luYyBuZWVkcyB0byBzdXJ2aXZlIHRoZSBuZXh0IHZhbGlkYXRpb24gYW5kIHVwZGF0ZS5cbiAgICogVGhpcyBmdW5jdGlvbiBjYW4gaW50ZXJjZXB0IGFuZCBtYWtlIHN1cmUgdGhvc2UgdmFsdWVzIGFyZSBwcmVzZXJ2ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgaW50ZXJjZXB0U3RhdGVVcGRhdGVBZnRlclZhbGlkYXRpb24oc3RhdGVVcGRhdGU6IFBhcnRpYWw8TXVsdGlWYWx1ZVZhcmlhYmxlU3RhdGU+KTogdm9pZCB7XG4gICAgLy8gSWYgdGhlIHZhbGlkYXRpb24gd2FudHMgdG8gZml4IHRoZSBhbGwgdmFsdWUgKEFsbCA9PT4gJF9fYWxsKSB0aGVuIHdlIHNob3VsZCBsZXQgdGhhdCBwYXNzXG4gICAgY29uc3QgaXNBbGxWYWx1ZUZpeCA9IHN0YXRlVXBkYXRlLnZhbHVlID09PSBBTExfVkFSSUFCTEVfVkFMVUUgJiYgdGhpcy5zdGF0ZS50ZXh0ID09PSBBTExfVkFSSUFCTEVfVEVYVDtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuc2tpcE5leHRWYWxpZGF0aW9uICYmXG4gICAgICBzdGF0ZVVwZGF0ZS52YWx1ZSAhPT0gdGhpcy5zdGF0ZS52YWx1ZSAmJlxuICAgICAgc3RhdGVVcGRhdGUudGV4dCAhPT0gdGhpcy5zdGF0ZS50ZXh0ICYmXG4gICAgICAhaXNBbGxWYWx1ZUZpeFxuICAgICkge1xuICAgICAgc3RhdGVVcGRhdGUudmFsdWUgPSB0aGlzLnN0YXRlLnZhbHVlO1xuICAgICAgc3RhdGVVcGRhdGUudGV4dCA9IHRoaXMuc3RhdGUudGV4dDtcbiAgICB9XG5cbiAgICB0aGlzLnNraXBOZXh0VmFsaWRhdGlvbiA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldFZhbHVlKCk6IFZhcmlhYmxlVmFsdWUge1xuICAgIGlmICh0aGlzLmhhc0FsbFZhbHVlKCkpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmFsbFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3VzdG9tQWxsVmFsdWUodGhpcy5zdGF0ZS5hbGxWYWx1ZSwgdGhpcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnN0YXRlLm9wdGlvbnMubWFwKCh4KSA9PiB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRWYWx1ZVRleHQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5oYXNBbGxWYWx1ZSgpKSB7XG4gICAgICByZXR1cm4gQUxMX1ZBUklBQkxFX1RFWFQ7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5zdGF0ZS50ZXh0KSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGUudGV4dC5qb2luKCcgKyAnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuc3RhdGUudGV4dCk7XG4gIH1cblxuICBwdWJsaWMgaGFzQWxsVmFsdWUoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnN0YXRlLnZhbHVlO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gQUxMX1ZBUklBQkxFX1ZBTFVFIHx8IChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZVswXSA9PT0gQUxMX1ZBUklBQkxFX1ZBTFVFKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREZWZhdWx0TXVsdGlTdGF0ZShvcHRpb25zOiBWYXJpYWJsZVZhbHVlT3B0aW9uW10pIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5kZWZhdWx0VG9BbGwpIHtcbiAgICAgIHJldHVybiB7IHZhbHVlOiBbQUxMX1ZBUklBQkxFX1ZBTFVFXSwgdGV4dDogW0FMTF9WQVJJQUJMRV9URVhUXSB9O1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4geyB2YWx1ZTogW29wdGlvbnNbMF0udmFsdWVdLCB0ZXh0OiBbb3B0aW9uc1swXS5sYWJlbF0gfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgdmFsdWU6IFtdLCB0ZXh0OiBbXSB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2UgdGhlIHZhbHVlIGFuZCBwdWJsaXNoIFNjZW5lVmFyaWFibGVWYWx1ZUNoYW5nZWRFdmVudCBldmVudC5cbiAgICovXG4gIHB1YmxpYyBjaGFuZ2VWYWx1ZVRvKHZhbHVlOiBWYXJpYWJsZVZhbHVlLCB0ZXh0PzogVmFyaWFibGVWYWx1ZSkge1xuICAgIC8vIElnbm9yZSBpZiB0aGVyZSBpcyBubyBjaGFuZ2VcbiAgICBpZiAodmFsdWUgPT09IHRoaXMuc3RhdGUudmFsdWUgJiYgdGV4dCA9PT0gdGhpcy5zdGF0ZS50ZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGV4dCA9IHZhbHVlLm1hcCgodikgPT4gdGhpcy5maW5kTGFiZWxUZXh0Rm9yVmFsdWUodikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCA9IHRoaXMuZmluZExhYmVsVGV4dEZvclZhbHVlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIElmIHdlIGFyZSBhIG11bHRpIHZhbHVlZCB2YXJpYWJsZSBpcyBjbGVhcmVkIChlbXB0eSBhcnJheSkgd2UgbmVlZCB0byBzZXQgdGhlIGRlZmF1bHQgZW1wdHkgc3RhdGVcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldERlZmF1bHRNdWx0aVN0YXRlKHRoaXMuc3RhdGUub3B0aW9ucyk7XG4gICAgICAgIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgICAgIHRleHQgPSBzdGF0ZS50ZXh0O1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBsYXN0IHZhbHVlIGlzIHRoZSBBbGwgdmFsdWUgdGhlbiByZXBsYWNlIGFsbCB3aXRoIGl0XG4gICAgICBpZiAodmFsdWVbdmFsdWUubGVuZ3RoIC0gMV0gPT09IEFMTF9WQVJJQUJMRV9WQUxVRSkge1xuICAgICAgICB2YWx1ZSA9IFtBTExfVkFSSUFCTEVfVkFMVUVdO1xuICAgICAgICB0ZXh0ID0gW0FMTF9WQVJJQUJMRV9URVhUXTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZSBmaXJzdCB2YWx1ZSBpcyB0aGUgQUxMIHZhbHVlIGFuZCB3ZSBoYXZlIG90aGVyIHZhbHVlcywgdGhlbiByZW1vdmUgdGhlIEFsbCB2YWx1ZVxuICAgICAgZWxzZSBpZiAodmFsdWVbMF0gPT09IEFMTF9WQVJJQUJMRV9WQUxVRSAmJiB2YWx1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgIHZhbHVlLnNoaWZ0KCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRleHQpKSB7XG4gICAgICAgICAgdGV4dC5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRG8gbm90aGluZyBpZiB2YWx1ZSBhbmQgdGV4dCBhcmUgdGhlIHNhbWVcbiAgICBpZiAoaXNFcXVhbCh2YWx1ZSwgdGhpcy5zdGF0ZS52YWx1ZSkgJiYgaXNFcXVhbCh0ZXh0LCB0aGlzLnN0YXRlLnRleHQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZUhlbHBlcih7IHZhbHVlLCB0ZXh0LCBsb2FkaW5nOiBmYWxzZSB9KTtcbiAgICB0aGlzLnB1Ymxpc2hFdmVudChuZXcgU2NlbmVWYXJpYWJsZVZhbHVlQ2hhbmdlZEV2ZW50KHRoaXMpLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZExhYmVsVGV4dEZvclZhbHVlKHZhbHVlOiBWYXJpYWJsZVZhbHVlU2luZ2xlKTogVmFyaWFibGVWYWx1ZVNpbmdsZSB7XG4gICAgaWYgKHZhbHVlID09PSBBTExfVkFSSUFCTEVfVkFMVUUpIHtcbiAgICAgIHJldHVybiBBTExfVkFSSUFCTEVfVEVYVDtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb24gPSB0aGlzLnN0YXRlLm9wdGlvbnMuZmluZCgoeCkgPT4geC52YWx1ZSA9PT0gdmFsdWUpO1xuICAgIGlmIChvcHRpb24pIHtcbiAgICAgIHJldHVybiBvcHRpb24ubGFiZWw7XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9uQnlMYWJlbCA9IHRoaXMuc3RhdGUub3B0aW9ucy5maW5kKCh4KSA9PiB4LmxhYmVsID09PSB2YWx1ZSk7XG4gICAgaWYgKG9wdGlvbkJ5TGFiZWwpIHtcbiAgICAgIHJldHVybiBvcHRpb25CeUxhYmVsLmxhYmVsO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiBpcyB0byBjb3VudGVyIHRoZSBjb250cmF2YXJpYW5jZSBvZiBzZXRTdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzZXRTdGF0ZUhlbHBlcihzdGF0ZTogUGFydGlhbDxNdWx0aVZhbHVlVmFyaWFibGVTdGF0ZT4pIHtcbiAgICBzZXRCYXNlQ2xhc3NTdGF0ZTxNdWx0aVZhbHVlVmFyaWFibGVTdGF0ZT4odGhpcywgc3RhdGUpO1xuICB9XG5cbiAgcHVibGljIGdldE9wdGlvbnNGb3JTZWxlY3QoKTogVmFyaWFibGVWYWx1ZU9wdGlvbltdIHtcbiAgICBsZXQgb3B0aW9ucyA9IHRoaXMuc3RhdGUub3B0aW9ucztcblxuICAgIGlmICh0aGlzLnN0YXRlLmluY2x1ZGVBbGwpIHtcbiAgICAgIG9wdGlvbnMgPSBbeyB2YWx1ZTogQUxMX1ZBUklBQkxFX1ZBTFVFLCBsYWJlbDogQUxMX1ZBUklBQkxFX1RFWFQgfSwgLi4ub3B0aW9uc107XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuc3RhdGUudmFsdWUpKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gb3B0aW9ucy5maW5kKCh4KSA9PiB4LnZhbHVlID09PSB0aGlzLnN0YXRlLnZhbHVlKTtcbiAgICAgIGlmICghY3VycmVudCkge1xuICAgICAgICBvcHRpb25zID0gW3sgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUsIGxhYmVsOiBTdHJpbmcodGhpcy5zdGF0ZS50ZXh0KSB9LCAuLi5vcHRpb25zXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyByZWZyZXNoT3B0aW9ucygpIHtcbiAgICB0aGlzLmdldFZhbHVlT3B0aW9ucyh7fSkuc3Vic2NyaWJlKChvcHRpb25zKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlR2l2ZW5OZXdPcHRpb25zKG9wdGlvbnMpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbiBiZSB1c2VkIGJ5IHN1YmNsYXNzZXMgdG8gZG8gY3VzdG9tIGhhbmRsaW5nIG9mIG9wdGlvbiBzZWFyY2ggYmFzZWQgb24gc2VhcmNoIGlucHV0XG4gICAqL1xuICBwdWJsaWMgb25TZWFyY2hDaGFuZ2U/KHNlYXJjaEZpbHRlcjogc3RyaW5nKTogdm9pZDtcbn1cblxuLyoqXG4gKiBMb29rcyBmb3IgbWF0Y2hpbmcgb3B0aW9uLCBmaXJzdCBieSB2YWx1ZSBidXQgYXMgYSBmYWxsYmFjayBieSB0ZXh0IChsYWJlbCkuXG4gKi9cbmZ1bmN0aW9uIGZpbmRPcHRpb25NYXRjaGluZ0N1cnJlbnQoXG4gIGN1cnJlbnRWYWx1ZTogVmFyaWFibGVWYWx1ZSxcbiAgY3VycmVudFRleHQ6IFZhcmlhYmxlVmFsdWUsXG4gIG9wdGlvbnM6IFZhcmlhYmxlVmFsdWVPcHRpb25bXVxuKSB7XG4gIGxldCB0ZXh0TWF0Y2g6IFZhcmlhYmxlVmFsdWVPcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIG9wdGlvbnMpIHtcbiAgICBpZiAoaXRlbS52YWx1ZSA9PT0gY3VycmVudFZhbHVlKSB7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICAvLyBObyBlYXJseSByZXR1cm4gaGVyZSBhcyB3YW50IHRvIGNvbnRpbnVlIHRvIGxvb2sgYSB2YWx1ZSBtYXRjaFxuICAgIGlmIChpdGVtLmxhYmVsID09PSBjdXJyZW50VGV4dCkge1xuICAgICAgdGV4dE1hdGNoID0gaXRlbTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGV4dE1hdGNoO1xufVxuXG5leHBvcnQgY2xhc3MgTXVsdGlWYWx1ZVVybFN5bmNIYW5kbGVyPFRTdGF0ZSBleHRlbmRzIE11bHRpVmFsdWVWYXJpYWJsZVN0YXRlID0gTXVsdGlWYWx1ZVZhcmlhYmxlU3RhdGU+XG4gIGltcGxlbWVudHMgU2NlbmVPYmplY3RVcmxTeW5jSGFuZGxlclxue1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBfc2NlbmVPYmplY3Q6IE11bHRpVmFsdWVWYXJpYWJsZTxUU3RhdGU+KSB7fVxuXG4gIHByaXZhdGUgZ2V0S2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGB2YXItJHt0aGlzLl9zY2VuZU9iamVjdC5zdGF0ZS5uYW1lfWA7XG4gIH1cblxuICBwdWJsaWMgZ2V0S2V5cygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKHRoaXMuX3NjZW5lT2JqZWN0LnN0YXRlLnNraXBVcmxTeW5jKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIFt0aGlzLmdldEtleSgpXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVcmxTdGF0ZSgpOiBTY2VuZU9iamVjdFVybFZhbHVlcyB7XG4gICAgaWYgKHRoaXMuX3NjZW5lT2JqZWN0LnN0YXRlLnNraXBVcmxTeW5jKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgbGV0IHVybFZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuX3NjZW5lT2JqZWN0LnN0YXRlLnZhbHVlO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB1cmxWYWx1ZSA9IHZhbHVlLm1hcChTdHJpbmcpO1xuICAgIH0gZWxzZSBpZiAoKHRoaXMsIHRoaXMuX3NjZW5lT2JqZWN0LnN0YXRlLmlzTXVsdGkpKSB7XG4gICAgICAvLyBJZiB3ZSBhcmUgaW5NdWx0aSBtb2RlIHdlIG11c3QgcmV0dXJuIGFuIGFycmF5IGhlcmUgYXMgb3RoZXJ3aXNlIFVybFN5bmNNYW5hZ2VyIHdpbGwgbm90IHBhc3MgYWxsIHZhbHVlcyAoaW4gYW4gYXJyYXkpIGluIHVwZGF0ZUZyb21VcmxcbiAgICAgIHVybFZhbHVlID0gW1N0cmluZyh2YWx1ZSldO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cmxWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgW3RoaXMuZ2V0S2V5KCldOiB1cmxWYWx1ZSB9O1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZyb21VcmwodmFsdWVzOiBTY2VuZU9iamVjdFVybFZhbHVlcyk6IHZvaWQge1xuICAgIGxldCB1cmxWYWx1ZSA9IHZhbHVlc1t0aGlzLmdldEtleSgpXTtcblxuICAgIGlmICh1cmxWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIHRvIGJlIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggb2xkIHVybCBhbGwgdmFsdWVcbiAgICAgIGlmICh0aGlzLl9zY2VuZU9iamVjdC5zdGF0ZS5pbmNsdWRlQWxsKSB7XG4gICAgICAgIHVybFZhbHVlID0gaGFuZGxlTGVnYWN5VXJsQWxsVmFsdWUodXJsVmFsdWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3IgZWRnZSBjYXNlcyB3aGVyZSBkYXRhIGxpbmtzIGluY2x1ZGUgdmFyaWFibGVzIHdpdGggY3VzdG9tIGFsbCB2YWx1ZS5cbiAgICAgIC8vIFdlIHdhbnQgdGhlIHZhcmlhYmxlIHRvIG1haW50YWluIHRoZSBcIkFsbFwiIG1ldGEgdmFsdWUgbm90IHRoZSBhY3R1YWwgY3VzdG9tIHZhbGwgdmFsdWUuIChGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vZ3JhZmFuYS9ncmFmYW5hL2lzc3Vlcy8yODYzNSlcbiAgICAgIGlmICh0aGlzLl9zY2VuZU9iamVjdC5zdGF0ZS5hbGxWYWx1ZSAmJiB0aGlzLl9zY2VuZU9iamVjdC5zdGF0ZS5hbGxWYWx1ZSA9PT0gdXJsVmFsdWUpIHtcbiAgICAgICAgdXJsVmFsdWUgPSBBTExfVkFSSUFCTEVfVkFMVUU7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogSW5pdGlhbCBVUkwgU3luYyBoYXBwZW5zIGJlZm9yZSBzY2VuZSBvYmplY3RzIGFyZSBhY3RpdmF0ZWQuXG4gICAgICAgKiBXZSBuZWVkIHRvIHNraXAgdmFsaWRhdGlvbiBpbiB0aGlzIGNhc2UgdG8gbWFrZSBzdXJlIHZhbHVlcyBzZXQgdmlhIFVSTCBhcmUgbWFpbnRhaW5lZC5cbiAgICAgICAqL1xuICAgICAgaWYgKCF0aGlzLl9zY2VuZU9iamVjdC5pc0FjdGl2ZSkge1xuICAgICAgICB0aGlzLl9zY2VuZU9iamVjdC5za2lwTmV4dFZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zY2VuZU9iamVjdC5jaGFuZ2VWYWx1ZVRvKHVybFZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlTGVnYWN5VXJsQWxsVmFsdWUodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZVswXSA9PT0gQUxMX1ZBUklBQkxFX1RFWFQpIHtcbiAgICByZXR1cm4gW0FMTF9WQVJJQUJMRV9WQUxVRV07XG4gIH0gZWxzZSBpZiAodmFsdWUgPT09IEFMTF9WQVJJQUJMRV9URVhUKSB7XG4gICAgcmV0dXJuIEFMTF9WQVJJQUJMRV9WQUxVRTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBWYXJpYWJsZSBnZXRWYWx1ZSBjYW4gcmV0dXJuIHRoaXMgdG8gc2tpcCBhbnkgc3Vic2VxdWVudCBmb3JtYXR0aW5nLlxuICogVGhpcyBpcyB1c2VmdWwgZm9yIGN1c3RvbSBhbGwgdmFsdWVzIHRoYXQgc2hvdWxkIG5vdCBiZSBlc2NhcGVkL2Zvcm1hdHRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEN1c3RvbUFsbFZhbHVlIGltcGxlbWVudHMgQ3VzdG9tVmFyaWFibGVWYWx1ZSB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF92YWx1ZTogc3RyaW5nLCBwcml2YXRlIF92YXJpYWJsZTogU2NlbmVWYXJpYWJsZSkge31cblxuICBwdWJsaWMgZm9ybWF0dGVyKGZvcm1hdE5hbWVPckZuPzogc3RyaW5nIHwgVmFyaWFibGVDdXN0b21Gb3JtYXR0ZXJGbik6IHN0cmluZyB7XG4gICAgaWYgKGZvcm1hdE5hbWVPckZuID09PSBWYXJpYWJsZUZvcm1hdElELlRleHQpIHtcbiAgICAgIHJldHVybiBBTExfVkFSSUFCTEVfVEVYVDtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWF0TmFtZU9yRm4gPT09IFZhcmlhYmxlRm9ybWF0SUQuUGVyY2VudEVuY29kZSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFJlZ2lzdHJ5LmdldChWYXJpYWJsZUZvcm1hdElELlBlcmNlbnRFbmNvZGUpLmZvcm1hdHRlcih0aGlzLl92YWx1ZSwgW10sIHRoaXMuX3ZhcmlhYmxlKTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWF0TmFtZU9yRm4gPT09IFZhcmlhYmxlRm9ybWF0SUQuUXVlcnlQYXJhbSkge1xuICAgICAgcmV0dXJuIGZvcm1hdFJlZ2lzdHJ5LmdldChWYXJpYWJsZUZvcm1hdElELlF1ZXJ5UGFyYW0pLmZvcm1hdHRlcihBTExfVkFSSUFCTEVfVEVYVCwgW10sIHRoaXMuX3ZhcmlhYmxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUE4Q08sTUFBZSwyQkFDWixlQUVWLENBQUE7QUFBQSxFQUhPLFdBQUEsR0FBQTtBQUFBLElBQUEsS0FBQSxDQUFBLEdBQUEsU0FBQSxDQUFBLENBQUE7QUFJTCxJQUFVLElBQUEsQ0FBQSxRQUFBLEdBQXNDLElBQUksd0JBQUEsQ0FBeUIsSUFBSSxDQUFBLENBQUE7QUFBQSxHQUFBO0FBQUEsRUFlMUUsaUJBQXlELEdBQUE7QUFDOUQsSUFBQSxPQUFPLElBQUssQ0FBQSxlQUFBLENBQWdCLEVBQUUsQ0FBRSxDQUFBLElBQUE7QUFBQSxNQUM5QixHQUFBLENBQUksQ0FBQyxPQUFZLEtBQUE7QUFDZixRQUFBLElBQUEsQ0FBSywyQkFBMkIsT0FBTyxDQUFBLENBQUE7QUFDdkMsUUFBQSxPQUFPLEVBQUMsQ0FBQTtBQUFBLE9BQ1QsQ0FBQTtBQUFBLEtBQ0gsQ0FBQTtBQUFBLEdBQ0Y7QUFBQSxFQUVPLFFBQWlCLEdBQUE7QUFDdEIsSUFBQSxJQUFBLENBQUssY0FBZSxDQUFBLEVBQUUsT0FBUyxFQUFBLEtBQUEsRUFBTyxDQUFBLENBQUE7QUFDdEMsSUFBQSxNQUFNLGNBQWMsSUFBSyxDQUFBLE1BQUEsQ0FBQTtBQUN6QixJQUFBLFdBQUEsSUFBQSxJQUFBLEdBQUEsS0FBQSxDQUFB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
@@ -0,0 +1,117 @@
1
+ import { Subject, Observable } from 'rxjs';
2
+ import { sceneGraph } from '../../core/sceneGraph/index.js';
3
+ import { queryMetricTree } from '../../utils/metricTree.js';
4
+ import { VariableDependencyConfig } from '../VariableDependencyConfig.js';
5
+ import { renderSelectForVariable } from '../components/VariableValueSelect.js';
6
+ import { MultiValueVariable } from './MultiValueVariable.js';
7
+ import { VariableRefresh } from '@grafana/data';
8
+ import { getClosest } from '../../core/sceneGraph/utils.js';
9
+ import { SceneVariableSet } from '../sets/SceneVariableSet.js';
10
+
11
+ var __defProp = Object.defineProperty;
12
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
15
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
16
+ var __spreadValues = (a, b) => {
17
+ for (var prop in b || (b = {}))
18
+ if (__hasOwnProp.call(b, prop))
19
+ __defNormalProp(a, prop, b[prop]);
20
+ if (__getOwnPropSymbols)
21
+ for (var prop of __getOwnPropSymbols(b)) {
22
+ if (__propIsEnum.call(b, prop))
23
+ __defNormalProp(a, prop, b[prop]);
24
+ }
25
+ return a;
26
+ };
27
+ class TestVariable extends MultiValueVariable {
28
+ constructor(initialState, isLazy = false) {
29
+ super(__spreadValues({
30
+ type: "custom",
31
+ name: "Test",
32
+ value: "Value",
33
+ text: "Text",
34
+ query: "Query",
35
+ options: [],
36
+ refresh: VariableRefresh.onDashboardLoad,
37
+ updateOptions: true
38
+ }, initialState));
39
+ this.completeUpdate = new Subject();
40
+ this.isGettingValues = true;
41
+ this.getValueOptionsCount = 0;
42
+ this.isLazy = false;
43
+ this._variableDependency = new VariableDependencyConfig(this, {
44
+ statePaths: ["query"]
45
+ });
46
+ this.isLazy = isLazy;
47
+ }
48
+ getValueOptions(args) {
49
+ const { delayMs } = this.state;
50
+ this.getValueOptionsCount += 1;
51
+ const queryController = sceneGraph.getQueryController(this);
52
+ return new Observable((observer) => {
53
+ const queryEntry = {
54
+ type: "variable",
55
+ origin: this,
56
+ cancel: () => observer.complete()
57
+ };
58
+ if (queryController) {
59
+ queryController.queryStarted(queryEntry);
60
+ }
61
+ this.setState({ loading: true });
62
+ if (this.state.throwError) {
63
+ throw new Error(this.state.throwError);
64
+ }
65
+ const interpolatedQuery = sceneGraph.interpolate(this, this.state.query);
66
+ const options = this.getOptions(interpolatedQuery);
67
+ const sub = this.completeUpdate.subscribe({
68
+ next: () => {
69
+ const newState = { issuedQuery: interpolatedQuery, loading: false };
70
+ if (this.state.updateOptions) {
71
+ newState.options = options;
72
+ }
73
+ this.setState(newState);
74
+ observer.next(options);
75
+ observer.complete();
76
+ }
77
+ });
78
+ let timeout;
79
+ if (delayMs) {
80
+ timeout = window.setTimeout(() => this.signalUpdateCompleted(), delayMs);
81
+ } else if (delayMs === 0) {
82
+ this.signalUpdateCompleted();
83
+ }
84
+ this.isGettingValues = true;
85
+ return () => {
86
+ sub.unsubscribe();
87
+ window.clearTimeout(timeout);
88
+ this.isGettingValues = false;
89
+ if (this.state.loading) {
90
+ this.setState({ loading: false });
91
+ }
92
+ if (queryController) {
93
+ queryController.queryCompleted(queryEntry);
94
+ }
95
+ };
96
+ });
97
+ }
98
+ cancel() {
99
+ const sceneVarSet = getClosest(this, (s) => s instanceof SceneVariableSet ? s : void 0);
100
+ sceneVarSet == null ? void 0 : sceneVarSet.cancel(this);
101
+ }
102
+ getOptions(interpolatedQuery) {
103
+ if (this.state.optionsToReturn) {
104
+ return this.state.optionsToReturn;
105
+ }
106
+ return queryMetricTree(interpolatedQuery).map((x) => ({ label: x.name, value: x.name }));
107
+ }
108
+ signalUpdateCompleted() {
109
+ this.completeUpdate.next(1);
110
+ }
111
+ }
112
+ TestVariable.Component = ({ model }) => {
113
+ return renderSelectForVariable(model);
114
+ };
115
+
116
+ export { TestVariable };
117
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVzdFZhcmlhYmxlLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdmFyaWFibGVzL3ZhcmlhbnRzL1Rlc3RWYXJpYWJsZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBzY2VuZUdyYXBoIH0gZnJvbSAnLi4vLi4vY29yZS9zY2VuZUdyYXBoJztcbmltcG9ydCB7IFNjZW5lQ29tcG9uZW50UHJvcHMgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzJztcbmltcG9ydCB7IHF1ZXJ5TWV0cmljVHJlZSB9IGZyb20gJy4uLy4uL3V0aWxzL21ldHJpY1RyZWUnO1xuaW1wb3J0IHsgVmFyaWFibGVEZXBlbmRlbmN5Q29uZmlnIH0gZnJvbSAnLi4vVmFyaWFibGVEZXBlbmRlbmN5Q29uZmlnJztcbmltcG9ydCB7IHJlbmRlclNlbGVjdEZvclZhcmlhYmxlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9WYXJpYWJsZVZhbHVlU2VsZWN0JztcbmltcG9ydCB7IFZhcmlhYmxlVmFsdWVPcHRpb24gfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IE11bHRpVmFsdWVWYXJpYWJsZSwgTXVsdGlWYWx1ZVZhcmlhYmxlU3RhdGUsIFZhcmlhYmxlR2V0T3B0aW9uc0FyZ3MgfSBmcm9tICcuL011bHRpVmFsdWVWYXJpYWJsZSc7XG5pbXBvcnQgeyBWYXJpYWJsZVJlZnJlc2ggfSBmcm9tICdAZ3JhZmFuYS9kYXRhJztcbmltcG9ydCB7IGdldENsb3Nlc3QgfSBmcm9tICcuLi8uLi9jb3JlL3NjZW5lR3JhcGgvdXRpbHMnO1xuaW1wb3J0IHsgU2NlbmVWYXJpYWJsZVNldCB9IGZyb20gJy4uL3NldHMvU2NlbmVWYXJpYWJsZVNldCc7XG5pbXBvcnQgeyBTY2VuZVF1ZXJ5Q29udHJvbGxlckVudHJ5IH0gZnJvbSAnLi4vLi4vYmVoYXZpb3JzL1NjZW5lUXVlcnlDb250cm9sbGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBUZXN0VmFyaWFibGVTdGF0ZSBleHRlbmRzIE11bHRpVmFsdWVWYXJpYWJsZVN0YXRlIHtcbiAgcXVlcnk6IHN0cmluZztcbiAgZGVsYXlNcz86IG51bWJlcjtcbiAgaXNzdWVkUXVlcnk/OiBzdHJpbmc7XG4gIHJlZnJlc2g/OiBWYXJpYWJsZVJlZnJlc2g7XG4gIHRocm93RXJyb3I/OiBzdHJpbmc7XG4gIG9wdGlvbnNUb1JldHVybj86IFZhcmlhYmxlVmFsdWVPcHRpb25bXTtcbiAgdXBkYXRlT3B0aW9ucz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhpcyB2YXJpYWJsZSBpcyBvbmx5IGRlc2lnbmVkIGZvciB1bml0IHRlc3RzIGFuZCBwb3RlbnRpYWxseSBlMmUgdGVzdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZXN0VmFyaWFibGUgZXh0ZW5kcyBNdWx0aVZhbHVlVmFyaWFibGU8VGVzdFZhcmlhYmxlU3RhdGU+IHtcbiAgcHJpdmF0ZSBjb21wbGV0ZVVwZGF0ZSA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcbiAgcHVibGljIGlzR2V0dGluZ1ZhbHVlcyA9IHRydWU7XG4gIHB1YmxpYyBnZXRWYWx1ZU9wdGlvbnNDb3VudCA9IDA7XG4gIGlzTGF6eSA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBfdmFyaWFibGVEZXBlbmRlbmN5ID0gbmV3IFZhcmlhYmxlRGVwZW5kZW5jeUNvbmZpZyh0aGlzLCB7XG4gICAgc3RhdGVQYXRoczogWydxdWVyeSddLFxuICB9KTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoaW5pdGlhbFN0YXRlOiBQYXJ0aWFsPFRlc3RWYXJpYWJsZVN0YXRlPiwgaXNMYXp5ID0gZmFsc2UpIHtcbiAgICBzdXBlcih7XG4gICAgICB0eXBlOiAnY3VzdG9tJyxcbiAgICAgIG5hbWU6ICdUZXN0JyxcbiAgICAgIHZhbHVlOiAnVmFsdWUnLFxuICAgICAgdGV4dDogJ1RleHQnLFxuICAgICAgcXVlcnk6ICdRdWVyeScsXG4gICAgICBvcHRpb25zOiBbXSxcbiAgICAgIHJlZnJlc2g6IFZhcmlhYmxlUmVmcmVzaC5vbkRhc2hib2FyZExvYWQsXG4gICAgICB1cGRhdGVPcHRpb25zOiB0cnVlLFxuICAgICAgLi4uaW5pdGlhbFN0YXRlLFxuICAgIH0pO1xuICAgIHRoaXMuaXNMYXp5ID0gaXNMYXp5O1xuICB9XG5cbiAgcHVibGljIGdldFZhbHVlT3B0aW9ucyhhcmdzOiBWYXJpYWJsZUdldE9wdGlvbnNBcmdzKTogT2JzZXJ2YWJsZTxWYXJpYWJsZVZhbHVlT3B0aW9uW10+IHtcbiAgICBjb25zdCB7IGRlbGF5TXMgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICB0aGlzLmdldFZhbHVlT3B0aW9uc0NvdW50ICs9IDE7XG5cbiAgICBjb25zdCBxdWVyeUNvbnRyb2xsZXIgPSBzY2VuZUdyYXBoLmdldFF1ZXJ5Q29udHJvbGxlcih0aGlzKTtcblxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxWYXJpYWJsZVZhbHVlT3B0aW9uW10+KChvYnNlcnZlcikgPT4ge1xuICAgICAgY29uc3QgcXVlcnlFbnRyeTogU2NlbmVRdWVyeUNvbnRyb2xsZXJFbnRyeSA9IHtcbiAgICAgICAgdHlwZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgb3JpZ2luOiB0aGlzLFxuICAgICAgICBjYW5jZWw6ICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKCksXG4gICAgICB9O1xuXG4gICAgICBpZiAocXVlcnlDb250cm9sbGVyKSB7XG4gICAgICAgIHF1ZXJ5Q29udHJvbGxlci5xdWVyeVN0YXJ0ZWQocXVlcnlFbnRyeSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiB0cnVlIH0pO1xuXG4gICAgICBpZiAodGhpcy5zdGF0ZS50aHJvd0Vycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLnN0YXRlLnRocm93RXJyb3IpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbnRlcnBvbGF0ZWRRdWVyeSA9IHNjZW5lR3JhcGguaW50ZXJwb2xhdGUodGhpcywgdGhpcy5zdGF0ZS5xdWVyeSk7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKGludGVycG9sYXRlZFF1ZXJ5KTtcblxuICAgICAgY29uc3Qgc3ViID0gdGhpcy5jb21wbGV0ZVVwZGF0ZS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3U3RhdGU6IFBhcnRpYWw8VGVzdFZhcmlhYmxlU3RhdGU+ID0geyBpc3N1ZWRRdWVyeTogaW50ZXJwb2xhdGVkUXVlcnksIGxvYWRpbmc6IGZhbHNlIH07XG5cbiAgICAgICAgICBpZiAodGhpcy5zdGF0ZS51cGRhdGVPcHRpb25zKSB7XG4gICAgICAgICAgICBuZXdTdGF0ZS5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KG9wdGlvbnMpO1xuICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgbGV0IHRpbWVvdXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChkZWxheU1zKSB7XG4gICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnNpZ25hbFVwZGF0ZUNvbXBsZXRlZCgpLCBkZWxheU1zKTtcbiAgICAgIH0gZWxzZSBpZiAoZGVsYXlNcyA9PT0gMCkge1xuICAgICAgICB0aGlzLnNpZ25hbFVwZGF0ZUNvbXBsZXRlZCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzR2V0dGluZ1ZhbHVlcyA9IHRydWU7XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICB0aGlzLmlzR2V0dGluZ1ZhbHVlcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmxvYWRpbmcpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogZmFsc2UgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocXVlcnlDb250cm9sbGVyKSB7XG4gICAgICAgICAgcXVlcnlDb250cm9sbGVyLnF1ZXJ5Q29tcGxldGVkKHF1ZXJ5RW50cnkpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNhbmNlbCgpIHtcbiAgICBjb25zdCBzY2VuZVZhclNldCA9IGdldENsb3Nlc3QodGhpcywgKHMpID0+IChzIGluc3RhbmNlb2YgU2NlbmVWYXJpYWJsZVNldCA/IHMgOiB1bmRlZmluZWQpKTtcbiAgICBzY2VuZVZhclNldD8uY2FuY2VsKHRoaXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcHRpb25zKGludGVycG9sYXRlZFF1ZXJ5OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5vcHRpb25zVG9SZXR1cm4pIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXRlLm9wdGlvbnNUb1JldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gcXVlcnlNZXRyaWNUcmVlKGludGVycG9sYXRlZFF1ZXJ5KS5tYXAoKHgpID0+ICh7IGxhYmVsOiB4Lm5hbWUsIHZhbHVlOiB4Lm5hbWUgfSkpO1xuICB9XG5cbiAgLyoqIFVzZWZ1bCBmcm9tIHRlc3RzICovXG4gIHB1YmxpYyBzaWduYWxVcGRhdGVDb21wbGV0ZWQoKSB7XG4gICAgdGhpcy5jb21wbGV0ZVVwZGF0ZS5uZXh0KDEpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBDb21wb25lbnQgPSAoeyBtb2RlbCB9OiBTY2VuZUNvbXBvbmVudFByb3BzPE11bHRpVmFsdWVWYXJpYWJsZT4pID0+IHtcbiAgICByZXR1cm4gcmVuZGVyU2VsZWN0Rm9yVmFyaWFibGUobW9kZWwpO1xuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7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
@@ -0,0 +1,61 @@
1
+ import React from 'react';
2
+ import { SceneObjectBase } from '../../core/SceneObjectBase.js';
3
+ import { SceneObjectUrlSyncConfig } from '../../services/SceneObjectUrlSyncConfig.js';
4
+ import { VariableValueInput } from '../components/VariableValueInput.js';
5
+ import { SceneVariableValueChangedEvent } from '../types.js';
6
+
7
+ var __defProp = Object.defineProperty;
8
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
11
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
+ var __spreadValues = (a, b) => {
13
+ for (var prop in b || (b = {}))
14
+ if (__hasOwnProp.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ if (__getOwnPropSymbols)
17
+ for (var prop of __getOwnPropSymbols(b)) {
18
+ if (__propIsEnum.call(b, prop))
19
+ __defNormalProp(a, prop, b[prop]);
20
+ }
21
+ return a;
22
+ };
23
+ class TextBoxVariable extends SceneObjectBase {
24
+ constructor(initialState) {
25
+ super(__spreadValues({
26
+ type: "textbox",
27
+ value: "",
28
+ name: ""
29
+ }, initialState));
30
+ this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: () => [this.getKey()] });
31
+ }
32
+ getValue() {
33
+ return this.state.value;
34
+ }
35
+ setValue(newValue) {
36
+ if (newValue !== this.state.value) {
37
+ this.setState({ value: newValue });
38
+ this.publishEvent(new SceneVariableValueChangedEvent(this), true);
39
+ }
40
+ }
41
+ getKey() {
42
+ return `var-${this.state.name}`;
43
+ }
44
+ getUrlState() {
45
+ return { [this.getKey()]: this.state.value };
46
+ }
47
+ updateFromUrl(values) {
48
+ const val = values[this.getKey()];
49
+ if (typeof val === "string") {
50
+ this.setValue(val);
51
+ }
52
+ }
53
+ }
54
+ TextBoxVariable.Component = ({ model }) => {
55
+ return /* @__PURE__ */ React.createElement(VariableValueInput, {
56
+ model
57
+ });
58
+ };
59
+
60
+ export { TextBoxVariable };
61
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dEJveFZhcmlhYmxlLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdmFyaWFibGVzL3ZhcmlhbnRzL1RleHRCb3hWYXJpYWJsZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFNjZW5lT2JqZWN0QmFzZSB9IGZyb20gJy4uLy4uL2NvcmUvU2NlbmVPYmplY3RCYXNlJztcbmltcG9ydCB7IFNjZW5lQ29tcG9uZW50UHJvcHMsIFNjZW5lT2JqZWN0VXJsVmFsdWVzIH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcyc7XG5pbXBvcnQgeyBTY2VuZU9iamVjdFVybFN5bmNDb25maWcgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9TY2VuZU9iamVjdFVybFN5bmNDb25maWcnO1xuaW1wb3J0IHsgVmFyaWFibGVWYWx1ZUlucHV0IH0gZnJvbSAnLi4vY29tcG9uZW50cy9WYXJpYWJsZVZhbHVlSW5wdXQnO1xuaW1wb3J0IHsgU2NlbmVWYXJpYWJsZSwgU2NlbmVWYXJpYWJsZVN0YXRlLCBTY2VuZVZhcmlhYmxlVmFsdWVDaGFuZ2VkRXZlbnQsIFZhcmlhYmxlVmFsdWUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGV4dEJveFZhcmlhYmxlU3RhdGUgZXh0ZW5kcyBTY2VuZVZhcmlhYmxlU3RhdGUge1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgVGV4dEJveFZhcmlhYmxlXG4gIGV4dGVuZHMgU2NlbmVPYmplY3RCYXNlPFRleHRCb3hWYXJpYWJsZVN0YXRlPlxuICBpbXBsZW1lbnRzIFNjZW5lVmFyaWFibGU8VGV4dEJveFZhcmlhYmxlU3RhdGU+XG57XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihpbml0aWFsU3RhdGU6IFBhcnRpYWw8VGV4dEJveFZhcmlhYmxlU3RhdGU+KSB7XG4gICAgc3VwZXIoe1xuICAgICAgdHlwZTogJ3RleHRib3gnLFxuICAgICAgdmFsdWU6ICcnLFxuICAgICAgbmFtZTogJycsXG4gICAgICAuLi5pbml0aWFsU3RhdGUsXG4gICAgfSk7XG5cbiAgICB0aGlzLl91cmxTeW5jID0gbmV3IFNjZW5lT2JqZWN0VXJsU3luY0NvbmZpZyh0aGlzLCB7IGtleXM6ICgpID0+IFt0aGlzLmdldEtleSgpXSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRWYWx1ZSgpOiBWYXJpYWJsZVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWYWx1ZShuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKG5ld1ZhbHVlICE9PSB0aGlzLnN0YXRlLnZhbHVlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IG5ld1ZhbHVlIH0pO1xuICAgICAgdGhpcy5wdWJsaXNoRXZlbnQobmV3IFNjZW5lVmFyaWFibGVWYWx1ZUNoYW5nZWRFdmVudCh0aGlzKSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRLZXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYHZhci0ke3RoaXMuc3RhdGUubmFtZX1gO1xuICB9XG5cbiAgcHVibGljIGdldFVybFN0YXRlKCkge1xuICAgIHJldHVybiB7IFt0aGlzLmdldEtleSgpXTogdGhpcy5zdGF0ZS52YWx1ZSB9O1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZyb21VcmwodmFsdWVzOiBTY2VuZU9iamVjdFVybFZhbHVlcykge1xuICAgIGNvbnN0IHZhbCA9IHZhbHVlc1t0aGlzLmdldEtleSgpXTtcblxuICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5zZXRWYWx1ZSh2YWwpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgQ29tcG9uZW50ID0gKHsgbW9kZWwgfTogU2NlbmVDb21wb25lbnRQcm9wczxUZXh0Qm94VmFyaWFibGU+KSA9PiB7XG4gICAgcmV0dXJuIDxWYXJpYWJsZVZhbHVlSW5wdXQgbW9kZWw9e21vZGVsfSAvPjtcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV08sTUFBTSx3QkFDSCxlQUVWLENBQUE7QUFBQSxFQUNTLFlBQVksWUFBNkMsRUFBQTtBQUM5RCxJQUFNLEtBQUEsQ0FBQSxjQUFBLENBQUE7QUFBQSxNQUNKLElBQU0sRUFBQSxTQUFBO0FBQUEsTUFDTixLQUFPLEVBQUEsRUFBQTtBQUFBLE1BQ1AsSUFBTSxFQUFBLEVBQUE7QUFBQSxLQUFBLEVBQ0gsWUFDSixDQUFBLENBQUEsQ0FBQTtBQUVELElBQUEsSUFBQSxDQUFLLFFBQVcsR0FBQSxJQUFJLHdCQUF5QixDQUFBLElBQUEsRUFBTSxFQUFFLElBQUEsRUFBTSxNQUFNLENBQUMsSUFBSyxDQUFBLE1BQUEsRUFBUSxDQUFBLEVBQUcsQ0FBQSxDQUFBO0FBQUEsR0FDcEY7QUFBQSxFQUVPLFFBQTBCLEdBQUE7QUFDL0IsSUFBQSxPQUFPLEtBQUssS0FBTSxDQUFBLEtBQUEsQ0FBQTtBQUFBLEdBQ3BCO0FBQUEsRUFFTyxTQUFTLFFBQWtCLEVBQUE7QUFDaEMsSUFBSSxJQUFBLFFBQUEsS0FBYSxJQUFLLENBQUEsS0FBQSxDQUFNLEtBQU8sRUFBQTtBQUNqQyxNQUFBLElBQUEsQ0FBSyxRQUFTLENBQUEsRUFBRSxLQUFPLEVBQUEsUUFBQSxFQUFVLENBQUEsQ0FBQTtBQUNqQyxNQUFBLElBQUEsQ0FBSyxZQUFhLENBQUEsSUFBSSw4QkFBK0IsQ0FBQSxJQUFJLEdBQUcsSUFBSSxDQUFBLENBQUE7QUFBQSxLQUNsRTtBQUFBLEdBQ0Y7QUFBQSxFQUVRLE1BQWlCLEdBQUE7QUFDdkIsSUFBTyxPQUFBLENBQUEsSUFBQSxFQUFPLEtBQUssS0FBTSxDQUFBLElBQUEsQ0FBQSxDQUFBLENBQUE7QUFBQSxHQUMzQjtBQUFBLEVBRU8sV0FBYyxHQUFBO0FBQ25CLElBQUEsT0FBTyxFQUFFLENBQUMsSUFBQSxDQUFLLFFBQVcsR0FBQSxJQUFBLENBQUssTUFBTSxLQUFNLEVBQUEsQ0FBQTtBQUFBLEdBQzdDO0FBQUEsRUFFTyxjQUFjLE1BQThCLEVBQUE7QUFDakQsSUFBTSxNQUFBLEdBQUEsR0FBTSxNQUFPLENBQUEsSUFBQSxDQUFLLE1BQU8sRUFBQSxDQUFBLENBQUE7QUFFL0IsSUFBSSxJQUFBLE9BQU8sUUFBUSxRQUFVLEVBQUE7QUFDM0IsTUFBQSxJQUFBLENBQUssU0FBUyxHQUFHLENBQUEsQ0FBQTtBQUFBLEtBQ25CO0FBQUEsR0FDRjtBQUtGLENBQUE7QUE3Q2EsZUFBQSxDQTBDRyxTQUFZLEdBQUEsQ0FBQyxFQUFFLEtBQUEsRUFBa0QsS0FBQTtBQUM3RSxFQUFBLHVCQUFRLEtBQUEsQ0FBQSxhQUFBLENBQUEsa0JBQUEsRUFBQTtBQUFBLElBQW1CLEtBQUE7QUFBQSxHQUFjLENBQUEsQ0FBQTtBQUMzQyxDQUFBOzs7OyJ9
@@ -0,0 +1,27 @@
1
+ function isAdHocVariable(variable) {
2
+ return variable.state.type === "adhoc";
3
+ }
4
+ function isConstantVariable(variable) {
5
+ return variable.state.type === "constant";
6
+ }
7
+ function isCustomVariable(variable) {
8
+ return variable.state.type === "custom";
9
+ }
10
+ function isDataSourceVariable(variable) {
11
+ return variable.state.type === "datasource";
12
+ }
13
+ function isIntervalVariable(variable) {
14
+ return variable.state.type === "interval";
15
+ }
16
+ function isQueryVariable(variable) {
17
+ return variable.state.type === "query";
18
+ }
19
+ function isTextBoxVariable(variable) {
20
+ return variable.state.type === "textbox";
21
+ }
22
+ function isGroupByVariable(variable) {
23
+ return variable.state.type === "groupby";
24
+ }
25
+
26
+ export { isAdHocVariable, isConstantVariable, isCustomVariable, isDataSourceVariable, isGroupByVariable, isIntervalVariable, isQueryVariable, isTextBoxVariable };
27
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhcmRzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdmFyaWFibGVzL3ZhcmlhbnRzL2d1YXJkcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZEhvY0ZpbHRlcnNWYXJpYWJsZSB9IGZyb20gJy4uL2FkaG9jL0FkSG9jRmlsdGVyc1ZhcmlhYmxlJztcbmltcG9ydCB7IFNjZW5lVmFyaWFibGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBDb25zdGFudFZhcmlhYmxlIH0gZnJvbSAnLi9Db25zdGFudFZhcmlhYmxlJztcbmltcG9ydCB7IEN1c3RvbVZhcmlhYmxlIH0gZnJvbSAnLi9DdXN0b21WYXJpYWJsZSc7XG5pbXBvcnQgeyBEYXRhU291cmNlVmFyaWFibGUgfSBmcm9tICcuL0RhdGFTb3VyY2VWYXJpYWJsZSc7XG5pbXBvcnQgeyBJbnRlcnZhbFZhcmlhYmxlIH0gZnJvbSAnLi9JbnRlcnZhbFZhcmlhYmxlJztcbmltcG9ydCB7IFRleHRCb3hWYXJpYWJsZSB9IGZyb20gJy4vVGV4dEJveFZhcmlhYmxlJztcbmltcG9ydCB7IFF1ZXJ5VmFyaWFibGUgfSBmcm9tICcuL3F1ZXJ5L1F1ZXJ5VmFyaWFibGUnO1xuaW1wb3J0IHsgR3JvdXBCeVZhcmlhYmxlIH0gZnJvbSAnLi4vZ3JvdXBieS9Hcm91cEJ5VmFyaWFibGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNBZEhvY1ZhcmlhYmxlKHZhcmlhYmxlOiBTY2VuZVZhcmlhYmxlKTogdmFyaWFibGUgaXMgQWRIb2NGaWx0ZXJzVmFyaWFibGUge1xuICByZXR1cm4gdmFyaWFibGUuc3RhdGUudHlwZSA9PT0gJ2FkaG9jJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uc3RhbnRWYXJpYWJsZSh2YXJpYWJsZTogU2NlbmVWYXJpYWJsZSk6IHZhcmlhYmxlIGlzIENvbnN0YW50VmFyaWFibGUge1xuICByZXR1cm4gdmFyaWFibGUuc3RhdGUudHlwZSA9PT0gJ2NvbnN0YW50Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ3VzdG9tVmFyaWFibGUodmFyaWFibGU6IFNjZW5lVmFyaWFibGUpOiB2YXJpYWJsZSBpcyBDdXN0b21WYXJpYWJsZSB7XG4gIHJldHVybiB2YXJpYWJsZS5zdGF0ZS50eXBlID09PSAnY3VzdG9tJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YVNvdXJjZVZhcmlhYmxlKHZhcmlhYmxlOiBTY2VuZVZhcmlhYmxlKTogdmFyaWFibGUgaXMgRGF0YVNvdXJjZVZhcmlhYmxlIHtcbiAgcmV0dXJuIHZhcmlhYmxlLnN0YXRlLnR5cGUgPT09ICdkYXRhc291cmNlJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZXJ2YWxWYXJpYWJsZSh2YXJpYWJsZTogU2NlbmVWYXJpYWJsZSk6IHZhcmlhYmxlIGlzIEludGVydmFsVmFyaWFibGUge1xuICByZXR1cm4gdmFyaWFibGUuc3RhdGUudHlwZSA9PT0gJ2ludGVydmFsJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUXVlcnlWYXJpYWJsZSh2YXJpYWJsZTogU2NlbmVWYXJpYWJsZSk6IHZhcmlhYmxlIGlzIFF1ZXJ5VmFyaWFibGUge1xuICByZXR1cm4gdmFyaWFibGUuc3RhdGUudHlwZSA9PT0gJ3F1ZXJ5Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGV4dEJveFZhcmlhYmxlKHZhcmlhYmxlOiBTY2VuZVZhcmlhYmxlKTogdmFyaWFibGUgaXMgVGV4dEJveFZhcmlhYmxlIHtcbiAgcmV0dXJuIHZhcmlhYmxlLnN0YXRlLnR5cGUgPT09ICd0ZXh0Ym94Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzR3JvdXBCeVZhcmlhYmxlKHZhcmlhYmxlOiBTY2VuZVZhcmlhYmxlKTogdmFyaWFibGUgaXMgR3JvdXBCeVZhcmlhYmxlIHtcbiAgcmV0dXJuIHZhcmlhYmxlLnN0YXRlLnR5cGUgPT09ICdncm91cGJ5Jztcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVTyxTQUFTLGdCQUFnQixRQUEyRCxFQUFBO0FBQ3pGLEVBQU8sT0FBQSxRQUFBLENBQVMsTUFBTSxJQUFTLEtBQUEsT0FBQSxDQUFBO0FBQ2pDLENBQUE7QUFFTyxTQUFTLG1CQUFtQixRQUF1RCxFQUFBO0FBQ3hGLEVBQU8sT0FBQSxRQUFBLENBQVMsTUFBTSxJQUFTLEtBQUEsVUFBQSxDQUFBO0FBQ2pDLENBQUE7QUFFTyxTQUFTLGlCQUFpQixRQUFxRCxFQUFBO0FBQ3BGLEVBQU8sT0FBQSxRQUFBLENBQVMsTUFBTSxJQUFTLEtBQUEsUUFBQSxDQUFBO0FBQ2pDLENBQUE7QUFFTyxTQUFTLHFCQUFxQixRQUF5RCxFQUFBO0FBQzVGLEVBQU8sT0FBQSxRQUFBLENBQVMsTUFBTSxJQUFTLEtBQUEsWUFBQSxDQUFBO0FBQ2pDLENBQUE7QUFFTyxTQUFTLG1CQUFtQixRQUF1RCxFQUFBO0FBQ3hGLEVBQU8sT0FBQSxRQUFBLENBQVMsTUFBTSxJQUFTLEtBQUEsVUFBQSxDQUFBO0FBQ2pDLENBQUE7QUFFTyxTQUFTLGdCQUFnQixRQUFvRCxFQUFBO0FBQ2xGLEVBQU8sT0FBQSxRQUFBLENBQVMsTUFBTSxJQUFTLEtBQUEsT0FBQSxDQUFBO0FBQ2pDLENBQUE7QUFFTyxTQUFTLGtCQUFrQixRQUFzRCxFQUFBO0FBQ3RGLEVBQU8sT0FBQSxRQUFBLENBQVMsTUFBTSxJQUFTLEtBQUEsU0FBQSxDQUFBO0FBQ2pDLENBQUE7QUFFTyxTQUFTLGtCQUFrQixRQUFzRCxFQUFBO0FBQ3RGLEVBQU8sT0FBQSxRQUFBLENBQVMsTUFBTSxJQUFTLEtBQUEsU0FBQSxDQUFBO0FBQ2pDOzs7OyJ9