@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,285 @@
1
+ import React, { useMemo, useCallback } from 'react';
2
+ import { useMeasure } from 'react-use';
3
+ import { SetPanelAttentionEvent, AlertState, PluginContextProvider } from '@grafana/data';
4
+ import { getAppEvents } from '@grafana/runtime';
5
+ import { useStyles2, Tooltip, PanelChrome, Icon, ErrorBoundaryAlert, PanelContextProvider } from '@grafana/ui';
6
+ import { sceneGraph } from '../../core/sceneGraph/index.js';
7
+ import { isSceneObject } from '../../core/types.js';
8
+ import { css, cx } from '@emotion/css';
9
+ import { debounce } from 'lodash';
10
+ import { VizPanelSeriesLimit } from './VizPanelSeriesLimit.js';
11
+
12
+ var __defProp = Object.defineProperty;
13
+ var __defProps = Object.defineProperties;
14
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
15
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
16
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
17
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
18
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
19
+ var __spreadValues = (a, b) => {
20
+ for (var prop in b || (b = {}))
21
+ if (__hasOwnProp.call(b, prop))
22
+ __defNormalProp(a, prop, b[prop]);
23
+ if (__getOwnPropSymbols)
24
+ for (var prop of __getOwnPropSymbols(b)) {
25
+ if (__propIsEnum.call(b, prop))
26
+ __defNormalProp(a, prop, b[prop]);
27
+ }
28
+ return a;
29
+ };
30
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
31
+ function VizPanelRenderer({ model }) {
32
+ var _a;
33
+ const {
34
+ title,
35
+ options,
36
+ fieldConfig,
37
+ _pluginLoadError,
38
+ displayMode,
39
+ hoverHeader,
40
+ showMenuAlways,
41
+ hoverHeaderOffset,
42
+ menu,
43
+ headerActions,
44
+ titleItems,
45
+ seriesLimit,
46
+ seriesLimitShowAll,
47
+ description,
48
+ collapsible,
49
+ collapsed,
50
+ _renderCounter = 0
51
+ } = model.useState();
52
+ const [ref, { width, height }] = useMeasure();
53
+ const appEvents = useMemo(() => getAppEvents(), []);
54
+ const setPanelAttention = useCallback(() => {
55
+ if (model.state.key) {
56
+ appEvents.publish(new SetPanelAttentionEvent({ panelId: model.state.key }));
57
+ }
58
+ }, [model.state.key, appEvents]);
59
+ const debouncedMouseMove = useMemo(
60
+ () => debounce(setPanelAttention, 100, { leading: true, trailing: false }),
61
+ [setPanelAttention]
62
+ );
63
+ const plugin = model.getPlugin();
64
+ const { dragClass, dragClassCancel } = getDragClasses(model);
65
+ const dataObject = sceneGraph.getData(model);
66
+ const rawData = dataObject.useState();
67
+ const dataWithSeriesLimit = useDataWithSeriesLimit(rawData.data, seriesLimit, seriesLimitShowAll);
68
+ const dataWithFieldConfig = model.applyFieldConfig(dataWithSeriesLimit);
69
+ const sceneTimeRange = sceneGraph.getTimeRange(model);
70
+ const timeZone = sceneTimeRange.getTimeZone();
71
+ const timeRange = model.getTimeRange(dataWithFieldConfig);
72
+ const titleInterpolated = model.interpolate(title, void 0, "text");
73
+ const alertStateStyles = useStyles2(getAlertStateStyles);
74
+ if (!plugin) {
75
+ return /* @__PURE__ */ React.createElement("div", null, "Loading plugin panel...");
76
+ }
77
+ if (!plugin.panel) {
78
+ return /* @__PURE__ */ React.createElement("div", null, "Panel plugin has no panel component");
79
+ }
80
+ const PanelComponent = plugin.panel;
81
+ if (dataObject && dataObject.setContainerWidth) {
82
+ dataObject.setContainerWidth(Math.round(width));
83
+ }
84
+ let titleItemsElement = [];
85
+ if (titleItems) {
86
+ if (Array.isArray(titleItems)) {
87
+ titleItemsElement = titleItemsElement.concat(
88
+ titleItems.map((titleItem) => {
89
+ return /* @__PURE__ */ React.createElement(titleItem.Component, {
90
+ model: titleItem,
91
+ key: `${titleItem.state.key}`
92
+ });
93
+ })
94
+ );
95
+ } else if (isSceneObject(titleItems)) {
96
+ titleItemsElement.push(/* @__PURE__ */ React.createElement(titleItems.Component, {
97
+ model: titleItems
98
+ }));
99
+ } else {
100
+ titleItemsElement.push(titleItems);
101
+ }
102
+ }
103
+ if (seriesLimit) {
104
+ titleItemsElement.push(
105
+ /* @__PURE__ */ React.createElement(VizPanelSeriesLimit, {
106
+ key: "series-limit",
107
+ data: rawData.data,
108
+ seriesLimit,
109
+ showAll: seriesLimitShowAll,
110
+ onShowAllSeries: () => model.setState({ seriesLimitShowAll: !seriesLimitShowAll })
111
+ })
112
+ );
113
+ }
114
+ if (model.state.$timeRange) {
115
+ titleItemsElement.push(/* @__PURE__ */ React.createElement(model.state.$timeRange.Component, {
116
+ model: model.state.$timeRange,
117
+ key: model.state.key
118
+ }));
119
+ }
120
+ if (dataWithFieldConfig.alertState) {
121
+ titleItemsElement.push(
122
+ /* @__PURE__ */ React.createElement(Tooltip, {
123
+ content: (_a = dataWithFieldConfig.alertState.state) != null ? _a : "unknown",
124
+ key: `alert-states-icon-${model.state.key}`
125
+ }, /* @__PURE__ */ React.createElement(PanelChrome.TitleItem, {
126
+ className: cx({
127
+ [alertStateStyles.ok]: dataWithFieldConfig.alertState.state === AlertState.OK,
128
+ [alertStateStyles.pending]: dataWithFieldConfig.alertState.state === AlertState.Pending,
129
+ [alertStateStyles.alerting]: dataWithFieldConfig.alertState.state === AlertState.Alerting
130
+ })
131
+ }, /* @__PURE__ */ React.createElement(Icon, {
132
+ name: dataWithFieldConfig.alertState.state === "alerting" ? "heart-break" : "heart",
133
+ className: "panel-alert-icon",
134
+ size: "md"
135
+ })))
136
+ );
137
+ }
138
+ let panelMenu;
139
+ if (menu) {
140
+ panelMenu = /* @__PURE__ */ React.createElement(menu.Component, {
141
+ model: menu
142
+ });
143
+ }
144
+ let actionsElement;
145
+ if (headerActions) {
146
+ if (Array.isArray(headerActions)) {
147
+ actionsElement = /* @__PURE__ */ React.createElement(React.Fragment, null, headerActions.map((action) => {
148
+ return /* @__PURE__ */ React.createElement(action.Component, {
149
+ model: action,
150
+ key: `${action.state.key}`
151
+ });
152
+ }));
153
+ } else if (isSceneObject(headerActions)) {
154
+ actionsElement = /* @__PURE__ */ React.createElement(headerActions.Component, {
155
+ model: headerActions
156
+ });
157
+ } else {
158
+ actionsElement = headerActions;
159
+ }
160
+ }
161
+ const data = dataWithFieldConfig;
162
+ const isReadyToRender = dataObject.isDataReadyToDisplay ? dataObject.isDataReadyToDisplay() : true;
163
+ const context = model.getPanelContext();
164
+ const panelId = model.getLegacyPanelId();
165
+ return /* @__PURE__ */ React.createElement("div", {
166
+ className: relativeWrapper
167
+ }, /* @__PURE__ */ React.createElement("div", {
168
+ ref,
169
+ className: absoluteWrapper,
170
+ "data-viz-panel-key": model.state.key
171
+ }, width > 0 && height > 0 && /* @__PURE__ */ React.createElement(PanelChrome, {
172
+ title: titleInterpolated,
173
+ description: (description == null ? void 0 : description.trim()) ? model.getDescription : void 0,
174
+ loadingState: data.state,
175
+ statusMessage: getChromeStatusMessage(data, _pluginLoadError),
176
+ statusMessageOnClick: model.onStatusMessageClick,
177
+ width,
178
+ height,
179
+ displayMode,
180
+ showMenuAlways,
181
+ hoverHeader,
182
+ hoverHeaderOffset,
183
+ titleItems: titleItemsElement,
184
+ dragClass,
185
+ actions: actionsElement,
186
+ dragClassCancel,
187
+ padding: plugin.noPadding ? "none" : "md",
188
+ menu: panelMenu,
189
+ onCancelQuery: model.onCancelQuery,
190
+ onFocus: setPanelAttention,
191
+ onMouseEnter: setPanelAttention,
192
+ onMouseMove: debouncedMouseMove,
193
+ collapsible,
194
+ collapsed,
195
+ onToggleCollapse: model.onToggleCollapse
196
+ }, (innerWidth, innerHeight) => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(ErrorBoundaryAlert, {
197
+ dependencies: [plugin, data]
198
+ }, /* @__PURE__ */ React.createElement(PluginContextProvider, {
199
+ meta: plugin.meta
200
+ }, /* @__PURE__ */ React.createElement(PanelContextProvider, {
201
+ value: context
202
+ }, isReadyToRender && /* @__PURE__ */ React.createElement(PanelComponent, {
203
+ id: panelId,
204
+ data,
205
+ title,
206
+ timeRange,
207
+ timeZone,
208
+ options,
209
+ fieldConfig,
210
+ transparent: false,
211
+ width: innerWidth,
212
+ height: innerHeight,
213
+ renderCounter: _renderCounter,
214
+ replaceVariables: model.interpolate,
215
+ onOptionsChange: model.onOptionsChange,
216
+ onFieldConfigChange: model.onFieldConfigChange,
217
+ onChangeTimeRange: model.onTimeRangeChange,
218
+ eventBus: context.eventBus
219
+ }))))))));
220
+ }
221
+ function useDataWithSeriesLimit(data, seriesLimit, showAllSeries) {
222
+ return useMemo(() => {
223
+ if (!(data == null ? void 0 : data.series) || !seriesLimit || showAllSeries) {
224
+ return data;
225
+ }
226
+ return __spreadProps(__spreadValues({}, data), {
227
+ series: data.series.slice(0, seriesLimit)
228
+ });
229
+ }, [data, seriesLimit, showAllSeries]);
230
+ }
231
+ function getDragClasses(panel) {
232
+ var _a, _b;
233
+ const parentLayout = sceneGraph.getLayout(panel);
234
+ const isDraggable = parentLayout == null ? void 0 : parentLayout.isDraggable();
235
+ if (!parentLayout || !isDraggable || itemDraggingDisabled(panel, parentLayout)) {
236
+ return { dragClass: "", dragClassCancel: "" };
237
+ }
238
+ return { dragClass: (_a = parentLayout.getDragClass) == null ? void 0 : _a.call(parentLayout), dragClassCancel: (_b = parentLayout == null ? void 0 : parentLayout.getDragClassCancel) == null ? void 0 : _b.call(parentLayout) };
239
+ }
240
+ function itemDraggingDisabled(item, layout) {
241
+ let ancestor = item.parent;
242
+ while (ancestor && ancestor !== layout) {
243
+ if ("isDraggable" in ancestor.state && ancestor.state.isDraggable === false) {
244
+ return true;
245
+ }
246
+ ancestor = ancestor.parent;
247
+ }
248
+ return false;
249
+ }
250
+ function getChromeStatusMessage(data, pluginLoadingError) {
251
+ if (pluginLoadingError) {
252
+ return pluginLoadingError;
253
+ }
254
+ let message = data.error ? data.error.message : void 0;
255
+ if (data.errors) {
256
+ message = data.errors.map((e) => e.message).join(", ");
257
+ }
258
+ return message;
259
+ }
260
+ const relativeWrapper = css({
261
+ position: "relative",
262
+ width: "100%",
263
+ height: "100%"
264
+ });
265
+ const absoluteWrapper = css({
266
+ position: "absolute",
267
+ width: "100%",
268
+ height: "100%"
269
+ });
270
+ const getAlertStateStyles = (theme) => {
271
+ return {
272
+ ok: css({
273
+ color: theme.colors.success.text
274
+ }),
275
+ pending: css({
276
+ color: theme.colors.warning.text
277
+ }),
278
+ alerting: css({
279
+ color: theme.colors.error.text
280
+ })
281
+ };
282
+ };
283
+
284
+ export { VizPanelRenderer };
285
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVml6UGFuZWxSZW5kZXJlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvVml6UGFuZWwvVml6UGFuZWxSZW5kZXJlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IFJlZkNhbGxiYWNrLCB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZU1lYXN1cmUgfSBmcm9tICdyZWFjdC11c2UnO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBBbGVydFN0YXRlLCBHcmFmYW5hVGhlbWUyLCBQYW5lbERhdGEsIFBsdWdpbkNvbnRleHRQcm92aWRlciwgU2V0UGFuZWxBdHRlbnRpb25FdmVudCB9IGZyb20gJ0BncmFmYW5hL2RhdGEnO1xuXG5pbXBvcnQgeyBnZXRBcHBFdmVudHMgfSBmcm9tICdAZ3JhZmFuYS9ydW50aW1lJztcbmltcG9ydCB7IFBhbmVsQ2hyb21lLCBFcnJvckJvdW5kYXJ5QWxlcnQsIFBhbmVsQ29udGV4dFByb3ZpZGVyLCBUb29sdGlwLCB1c2VTdHlsZXMyLCBJY29uIH0gZnJvbSAnQGdyYWZhbmEvdWknO1xuXG5pbXBvcnQgeyBzY2VuZUdyYXBoIH0gZnJvbSAnLi4vLi4vY29yZS9zY2VuZUdyYXBoJztcbmltcG9ydCB7IGlzU2NlbmVPYmplY3QsIFNjZW5lQ29tcG9uZW50UHJvcHMsIFNjZW5lTGF5b3V0LCBTY2VuZU9iamVjdCB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMnO1xuXG5pbXBvcnQgeyBWaXpQYW5lbCB9IGZyb20gJy4vVml6UGFuZWwnO1xuaW1wb3J0IHsgY3NzLCBjeCB9IGZyb20gJ0BlbW90aW9uL2Nzcyc7XG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBWaXpQYW5lbFNlcmllc0xpbWl0IH0gZnJvbSAnLi9WaXpQYW5lbFNlcmllc0xpbWl0JztcblxuZXhwb3J0IGZ1bmN0aW9uIFZpelBhbmVsUmVuZGVyZXIoeyBtb2RlbCB9OiBTY2VuZUNvbXBvbmVudFByb3BzPFZpelBhbmVsPikge1xuICBjb25zdCB7XG4gICAgdGl0bGUsXG4gICAgb3B0aW9ucyxcbiAgICBmaWVsZENvbmZpZyxcbiAgICBfcGx1Z2luTG9hZEVycm9yLFxuICAgIGRpc3BsYXlNb2RlLFxuICAgIGhvdmVySGVhZGVyLFxuICAgIHNob3dNZW51QWx3YXlzLFxuICAgIGhvdmVySGVhZGVyT2Zmc2V0LFxuICAgIG1lbnUsXG4gICAgaGVhZGVyQWN0aW9ucyxcbiAgICB0aXRsZUl0ZW1zLFxuICAgIHNlcmllc0xpbWl0LFxuICAgIHNlcmllc0xpbWl0U2hvd0FsbCxcbiAgICBkZXNjcmlwdGlvbixcbiAgICBjb2xsYXBzaWJsZSxcbiAgICBjb2xsYXBzZWQsXG4gICAgX3JlbmRlckNvdW50ZXIgPSAwLFxuICB9ID0gbW9kZWwudXNlU3RhdGUoKTtcbiAgY29uc3QgW3JlZiwgeyB3aWR0aCwgaGVpZ2h0IH1dID0gdXNlTWVhc3VyZSgpO1xuICBjb25zdCBhcHBFdmVudHMgPSB1c2VNZW1vKCgpID0+IGdldEFwcEV2ZW50cygpLCBbXSk7XG5cbiAgY29uc3Qgc2V0UGFuZWxBdHRlbnRpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG1vZGVsLnN0YXRlLmtleSkge1xuICAgICAgYXBwRXZlbnRzLnB1Ymxpc2gobmV3IFNldFBhbmVsQXR0ZW50aW9uRXZlbnQoeyBwYW5lbElkOiBtb2RlbC5zdGF0ZS5rZXkgfSkpO1xuICAgIH1cbiAgfSwgW21vZGVsLnN0YXRlLmtleSwgYXBwRXZlbnRzXSk7XG4gIGNvbnN0IGRlYm91bmNlZE1vdXNlTW92ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZGVib3VuY2Uoc2V0UGFuZWxBdHRlbnRpb24sIDEwMCwgeyBsZWFkaW5nOiB0cnVlLCB0cmFpbGluZzogZmFsc2UgfSksXG4gICAgW3NldFBhbmVsQXR0ZW50aW9uXVxuICApO1xuXG4gIGNvbnN0IHBsdWdpbiA9IG1vZGVsLmdldFBsdWdpbigpO1xuXG4gIGNvbnN0IHsgZHJhZ0NsYXNzLCBkcmFnQ2xhc3NDYW5jZWwgfSA9IGdldERyYWdDbGFzc2VzKG1vZGVsKTtcbiAgY29uc3QgZGF0YU9iamVjdCA9IHNjZW5lR3JhcGguZ2V0RGF0YShtb2RlbCk7XG5cbiAgY29uc3QgcmF3RGF0YSA9IGRhdGFPYmplY3QudXNlU3RhdGUoKTtcbiAgY29uc3QgZGF0YVdpdGhTZXJpZXNMaW1pdCA9IHVzZURhdGFXaXRoU2VyaWVzTGltaXQocmF3RGF0YS5kYXRhLCBzZXJpZXNMaW1pdCwgc2VyaWVzTGltaXRTaG93QWxsKTtcbiAgY29uc3QgZGF0YVdpdGhGaWVsZENvbmZpZyA9IG1vZGVsLmFwcGx5RmllbGRDb25maWcoZGF0YVdpdGhTZXJpZXNMaW1pdCk7XG4gIGNvbnN0IHNjZW5lVGltZVJhbmdlID0gc2NlbmVHcmFwaC5nZXRUaW1lUmFuZ2UobW9kZWwpO1xuICBjb25zdCB0aW1lWm9uZSA9IHNjZW5lVGltZVJhbmdlLmdldFRpbWVab25lKCk7XG4gIGNvbnN0IHRpbWVSYW5nZSA9IG1vZGVsLmdldFRpbWVSYW5nZShkYXRhV2l0aEZpZWxkQ29uZmlnKTtcblxuICAvLyBJbnRlcnBvbGF0ZSB0aXRsZVxuICBjb25zdCB0aXRsZUludGVycG9sYXRlZCA9IG1vZGVsLmludGVycG9sYXRlKHRpdGxlLCB1bmRlZmluZWQsICd0ZXh0Jyk7XG5cbiAgY29uc3QgYWxlcnRTdGF0ZVN0eWxlcyA9IHVzZVN0eWxlczIoZ2V0QWxlcnRTdGF0ZVN0eWxlcyk7XG5cbiAgaWYgKCFwbHVnaW4pIHtcbiAgICByZXR1cm4gPGRpdj5Mb2FkaW5nIHBsdWdpbiBwYW5lbC4uLjwvZGl2PjtcbiAgfVxuXG4gIGlmICghcGx1Z2luLnBhbmVsKSB7XG4gICAgcmV0dXJuIDxkaXY+UGFuZWwgcGx1Z2luIGhhcyBubyBwYW5lbCBjb21wb25lbnQ8L2Rpdj47XG4gIH1cblxuICBjb25zdCBQYW5lbENvbXBvbmVudCA9IHBsdWdpbi5wYW5lbDtcblxuICAvLyBJZiB3ZSBoYXZlIGEgcXVlcnkgcnVubmVyIG9uIG91ciBsZXZlbCBpbmZvcm0gaXQgb2YgdGhlIGNvbnRhaW5lciB3aWR0aCAodXNlZCB0byBzZXQgYXV0byBtYXggZGF0YSBwb2ludHMpXG4gIGlmIChkYXRhT2JqZWN0ICYmIGRhdGFPYmplY3Quc2V0Q29udGFpbmVyV2lkdGgpIHtcbiAgICBkYXRhT2JqZWN0LnNldENvbnRhaW5lcldpZHRoKE1hdGgucm91bmQod2lkdGgpKTtcbiAgfVxuXG4gIGxldCB0aXRsZUl0ZW1zRWxlbWVudDogUmVhY3QuUmVhY3ROb2RlW10gPSBbXTtcblxuICBpZiAodGl0bGVJdGVtcykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRpdGxlSXRlbXMpKSB7XG4gICAgICB0aXRsZUl0ZW1zRWxlbWVudCA9IHRpdGxlSXRlbXNFbGVtZW50LmNvbmNhdChcbiAgICAgICAgdGl0bGVJdGVtcy5tYXAoKHRpdGxlSXRlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiA8dGl0bGVJdGVtLkNvbXBvbmVudCBtb2RlbD17dGl0bGVJdGVtfSBrZXk9e2Ake3RpdGxlSXRlbS5zdGF0ZS5rZXl9YH0gLz47XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoaXNTY2VuZU9iamVjdCh0aXRsZUl0ZW1zKSkge1xuICAgICAgdGl0bGVJdGVtc0VsZW1lbnQucHVzaCg8dGl0bGVJdGVtcy5Db21wb25lbnQgbW9kZWw9e3RpdGxlSXRlbXN9IC8+KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGl0bGVJdGVtc0VsZW1lbnQucHVzaCh0aXRsZUl0ZW1zKTtcbiAgICB9XG4gIH1cblxuICBpZiAoc2VyaWVzTGltaXQpIHtcbiAgICB0aXRsZUl0ZW1zRWxlbWVudC5wdXNoKFxuICAgICAgPFZpelBhbmVsU2VyaWVzTGltaXRcbiAgICAgICAga2V5PVwic2VyaWVzLWxpbWl0XCJcbiAgICAgICAgZGF0YT17cmF3RGF0YS5kYXRhfVxuICAgICAgICBzZXJpZXNMaW1pdD17c2VyaWVzTGltaXR9XG4gICAgICAgIHNob3dBbGw9e3Nlcmllc0xpbWl0U2hvd0FsbH1cbiAgICAgICAgb25TaG93QWxsU2VyaWVzPXsoKSA9PiBtb2RlbC5zZXRTdGF0ZSh7IHNlcmllc0xpbWl0U2hvd0FsbDogIXNlcmllc0xpbWl0U2hvd0FsbCB9KX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIC8vIElmIHdlIGhhdmUgbG9jYWwgdGltZSByYW5nZSBzaG93IHRoYXQgaW4gcGFuZWwgaGVhZGVyXG4gIGlmIChtb2RlbC5zdGF0ZS4kdGltZVJhbmdlKSB7XG4gICAgdGl0bGVJdGVtc0VsZW1lbnQucHVzaCg8bW9kZWwuc3RhdGUuJHRpbWVSYW5nZS5Db21wb25lbnQgbW9kZWw9e21vZGVsLnN0YXRlLiR0aW1lUmFuZ2V9IGtleT17bW9kZWwuc3RhdGUua2V5fSAvPik7XG4gIH1cblxuICBpZiAoZGF0YVdpdGhGaWVsZENvbmZpZy5hbGVydFN0YXRlKSB7XG4gICAgdGl0bGVJdGVtc0VsZW1lbnQucHVzaChcbiAgICAgIDxUb29sdGlwIGNvbnRlbnQ9e2RhdGFXaXRoRmllbGRDb25maWcuYWxlcnRTdGF0ZS5zdGF0ZSA/PyAndW5rbm93bid9IGtleT17YGFsZXJ0LXN0YXRlcy1pY29uLSR7bW9kZWwuc3RhdGUua2V5fWB9PlxuICAgICAgICA8UGFuZWxDaHJvbWUuVGl0bGVJdGVtXG4gICAgICAgICAgY2xhc3NOYW1lPXtjeCh7XG4gICAgICAgICAgICBbYWxlcnRTdGF0ZVN0eWxlcy5va106IGRhdGFXaXRoRmllbGRDb25maWcuYWxlcnRTdGF0ZS5zdGF0ZSA9PT0gQWxlcnRTdGF0ZS5PSyxcbiAgICAgICAgICAgIFthbGVydFN0YXRlU3R5bGVzLnBlbmRpbmddOiBkYXRhV2l0aEZpZWxkQ29uZmlnLmFsZXJ0U3RhdGUuc3RhdGUgPT09IEFsZXJ0U3RhdGUuUGVuZGluZyxcbiAgICAgICAgICAgIFthbGVydFN0YXRlU3R5bGVzLmFsZXJ0aW5nXTogZGF0YVdpdGhGaWVsZENvbmZpZy5hbGVydFN0YXRlLnN0YXRlID09PSBBbGVydFN0YXRlLkFsZXJ0aW5nLFxuICAgICAgICAgIH0pfVxuICAgICAgICA+XG4gICAgICAgICAgPEljb25cbiAgICAgICAgICAgIG5hbWU9e2RhdGFXaXRoRmllbGRDb25maWcuYWxlcnRTdGF0ZS5zdGF0ZSA9PT0gJ2FsZXJ0aW5nJyA/ICdoZWFydC1icmVhaycgOiAnaGVhcnQnfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicGFuZWwtYWxlcnQtaWNvblwiXG4gICAgICAgICAgICBzaXplPVwibWRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUGFuZWxDaHJvbWUuVGl0bGVJdGVtPlxuICAgICAgPC9Ub29sdGlwPlxuICAgICk7XG4gIH1cblxuICBsZXQgcGFuZWxNZW51O1xuICBpZiAobWVudSkge1xuICAgIHBhbmVsTWVudSA9IDxtZW51LkNvbXBvbmVudCBtb2RlbD17bWVudX0gLz47XG4gIH1cblxuICBsZXQgYWN0aW9uc0VsZW1lbnQ6IFJlYWN0LlJlYWN0Tm9kZSB8IHVuZGVmaW5lZDtcblxuICBpZiAoaGVhZGVyQWN0aW9ucykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlckFjdGlvbnMpKSB7XG4gICAgICBhY3Rpb25zRWxlbWVudCA9IChcbiAgICAgICAgPD5cbiAgICAgICAgICB7aGVhZGVyQWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIDxhY3Rpb24uQ29tcG9uZW50IG1vZGVsPXthY3Rpb259IGtleT17YCR7YWN0aW9uLnN0YXRlLmtleX1gfSAvPjtcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoaXNTY2VuZU9iamVjdChoZWFkZXJBY3Rpb25zKSkge1xuICAgICAgYWN0aW9uc0VsZW1lbnQgPSA8aGVhZGVyQWN0aW9ucy5Db21wb25lbnQgbW9kZWw9e2hlYWRlckFjdGlvbnN9IC8+O1xuICAgIH0gZWxzZSB7XG4gICAgICBhY3Rpb25zRWxlbWVudCA9IGhlYWRlckFjdGlvbnM7XG4gICAgfVxuICB9XG5cbiAgLy8gRGF0YSBpcyBhbHdheXMgcmV0dXJuZWQuIEZvciBub24tZGF0YSBwYW5lbHMsIGVtcHR5IFBhbmVsRGF0YSBpcyByZXR1cm5lZC5cbiAgY29uc3QgZGF0YSA9IGRhdGFXaXRoRmllbGRDb25maWchO1xuXG4gIGNvbnN0IGlzUmVhZHlUb1JlbmRlciA9IGRhdGFPYmplY3QuaXNEYXRhUmVhZHlUb0Rpc3BsYXkgPyBkYXRhT2JqZWN0LmlzRGF0YVJlYWR5VG9EaXNwbGF5KCkgOiB0cnVlO1xuXG4gIGNvbnN0IGNvbnRleHQgPSBtb2RlbC5nZXRQYW5lbENvbnRleHQoKTtcbiAgY29uc3QgcGFuZWxJZCA9IG1vZGVsLmdldExlZ2FjeVBhbmVsSWQoKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtyZWxhdGl2ZVdyYXBwZXJ9PlxuICAgICAgPGRpdiByZWY9e3JlZiBhcyBSZWZDYWxsYmFjazxIVE1MRGl2RWxlbWVudD59IGNsYXNzTmFtZT17YWJzb2x1dGVXcmFwcGVyfSBkYXRhLXZpei1wYW5lbC1rZXk9e21vZGVsLnN0YXRlLmtleX0+XG4gICAgICAgIHt3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCAmJiAoXG4gICAgICAgICAgPFBhbmVsQ2hyb21lXG4gICAgICAgICAgICB0aXRsZT17dGl0bGVJbnRlcnBvbGF0ZWR9XG4gICAgICAgICAgICBkZXNjcmlwdGlvbj17ZGVzY3JpcHRpb24/LnRyaW0oKSA/IG1vZGVsLmdldERlc2NyaXB0aW9uIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgbG9hZGluZ1N0YXRlPXtkYXRhLnN0YXRlfVxuICAgICAgICAgICAgc3RhdHVzTWVzc2FnZT17Z2V0Q2hyb21lU3RhdHVzTWVzc2FnZShkYXRhLCBfcGx1Z2luTG9hZEVycm9yKX1cbiAgICAgICAgICAgIHN0YXR1c01lc3NhZ2VPbkNsaWNrPXttb2RlbC5vblN0YXR1c01lc3NhZ2VDbGlja31cbiAgICAgICAgICAgIHdpZHRoPXt3aWR0aH1cbiAgICAgICAgICAgIGhlaWdodD17aGVpZ2h0fVxuICAgICAgICAgICAgZGlzcGxheU1vZGU9e2Rpc3BsYXlNb2RlfVxuICAgICAgICAgICAgLy9AdHMtZXhwZWN0LWVycm9yIFJlbW92ZSB3aGVuIDExLjQgaXMgcmVsZWFzZWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9ncmFmYW5hL2dyYWZhbmEvcHVsbC85Njg2OFxuICAgICAgICAgICAgc2hvd01lbnVBbHdheXM9e3Nob3dNZW51QWx3YXlzfVxuICAgICAgICAgICAgaG92ZXJIZWFkZXI9e2hvdmVySGVhZGVyfVxuICAgICAgICAgICAgaG92ZXJIZWFkZXJPZmZzZXQ9e2hvdmVySGVhZGVyT2Zmc2V0fVxuICAgICAgICAgICAgdGl0bGVJdGVtcz17dGl0bGVJdGVtc0VsZW1lbnR9XG4gICAgICAgICAgICBkcmFnQ2xhc3M9e2RyYWdDbGFzc31cbiAgICAgICAgICAgIGFjdGlvbnM9e2FjdGlvbnNFbGVtZW50fVxuICAgICAgICAgICAgZHJhZ0NsYXNzQ2FuY2VsPXtkcmFnQ2xhc3NDYW5jZWx9XG4gICAgICAgICAgICBwYWRkaW5nPXtwbHVnaW4ubm9QYWRkaW5nID8gJ25vbmUnIDogJ21kJ31cbiAgICAgICAgICAgIG1lbnU9e3BhbmVsTWVudX1cbiAgICAgICAgICAgIG9uQ2FuY2VsUXVlcnk9e21vZGVsLm9uQ2FuY2VsUXVlcnl9XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBvbkZvY3VzPXtzZXRQYW5lbEF0dGVudGlvbn1cbiAgICAgICAgICAgIG9uTW91c2VFbnRlcj17c2V0UGFuZWxBdHRlbnRpb259XG4gICAgICAgICAgICBvbk1vdXNlTW92ZT17ZGVib3VuY2VkTW91c2VNb3ZlfVxuICAgICAgICAgICAgY29sbGFwc2libGU9e2NvbGxhcHNpYmxlfVxuICAgICAgICAgICAgY29sbGFwc2VkPXtjb2xsYXBzZWR9XG4gICAgICAgICAgICBvblRvZ2dsZUNvbGxhcHNlPXttb2RlbC5vblRvZ2dsZUNvbGxhcHNlfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHsoaW5uZXJXaWR0aCwgaW5uZXJIZWlnaHQpID0+IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8RXJyb3JCb3VuZGFyeUFsZXJ0IGRlcGVuZGVuY2llcz17W3BsdWdpbiwgZGF0YV19PlxuICAgICAgICAgICAgICAgICAgPFBsdWdpbkNvbnRleHRQcm92aWRlciBtZXRhPXtwbHVnaW4ubWV0YX0+XG4gICAgICAgICAgICAgICAgICAgIDxQYW5lbENvbnRleHRQcm92aWRlciB2YWx1ZT17Y29udGV4dH0+XG4gICAgICAgICAgICAgICAgICAgICAge2lzUmVhZHlUb1JlbmRlciAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8UGFuZWxDb21wb25lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e3BhbmVsSWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9e2RhdGF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXt0aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZVJhbmdlPXt0aW1lUmFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVab25lPXt0aW1lWm9uZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRDb25maWc9e2ZpZWxkQ29uZmlnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BhcmVudD17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXtpbm5lcldpZHRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9e2lubmVySGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJDb3VudGVyPXtfcmVuZGVyQ291bnRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVZhcmlhYmxlcz17bW9kZWwuaW50ZXJwb2xhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uT3B0aW9uc0NoYW5nZT17bW9kZWwub25PcHRpb25zQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZpZWxkQ29uZmlnQ2hhbmdlPXttb2RlbC5vbkZpZWxkQ29uZmlnQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZVRpbWVSYW5nZT17bW9kZWwub25UaW1lUmFuZ2VDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50QnVzPXtjb250ZXh0LmV2ZW50QnVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L1BhbmVsQ29udGV4dFByb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgPC9QbHVnaW5Db250ZXh0UHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9FcnJvckJvdW5kYXJ5QWxlcnQ+XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1BhbmVsQ2hyb21lPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIHVzZURhdGFXaXRoU2VyaWVzTGltaXQoZGF0YTogUGFuZWxEYXRhIHwgdW5kZWZpbmVkLCBzZXJpZXNMaW1pdD86IG51bWJlciwgc2hvd0FsbFNlcmllcz86IGJvb2xlYW4pIHtcbiAgcmV0dXJuIHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghZGF0YT8uc2VyaWVzIHx8ICFzZXJpZXNMaW1pdCB8fCBzaG93QWxsU2VyaWVzKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGF0YSxcbiAgICAgIHNlcmllczogZGF0YS5zZXJpZXMuc2xpY2UoMCwgc2VyaWVzTGltaXQpLFxuICAgIH07XG4gIH0sIFtkYXRhLCBzZXJpZXNMaW1pdCwgc2hvd0FsbFNlcmllc10pO1xufVxuXG5mdW5jdGlvbiBnZXREcmFnQ2xhc3NlcyhwYW5lbDogVml6UGFuZWwpIHtcbiAgY29uc3QgcGFyZW50TGF5b3V0ID0gc2NlbmVHcmFwaC5nZXRMYXlvdXQocGFuZWwpO1xuICBjb25zdCBpc0RyYWdnYWJsZSA9IHBhcmVudExheW91dD8uaXNEcmFnZ2FibGUoKTtcblxuICBpZiAoIXBhcmVudExheW91dCB8fCAhaXNEcmFnZ2FibGUgfHwgaXRlbURyYWdnaW5nRGlzYWJsZWQocGFuZWwsIHBhcmVudExheW91dCkpIHtcbiAgICByZXR1cm4geyBkcmFnQ2xhc3M6ICcnLCBkcmFnQ2xhc3NDYW5jZWw6ICcnIH07XG4gIH1cblxuICByZXR1cm4geyBkcmFnQ2xhc3M6IHBhcmVudExheW91dC5nZXREcmFnQ2xhc3M/LigpLCBkcmFnQ2xhc3NDYW5jZWw6IHBhcmVudExheW91dD8uZ2V0RHJhZ0NsYXNzQ2FuY2VsPy4oKSB9O1xufVxuXG4vKipcbiAqIFdhbGtzIHVwIHRoZSBwYXJlbnQgY2hhaW4gdW50aWwgaXQgaGl0cyB0aGUgbGF5b3V0IG9iamVjdCwgdHJ5aW5nIHRvIGZpbmQgdGhlIGNsb3Nlc3QgU2NlbmVHcmlkSXRlbUxpa2UgYW5jZXN0b3IuXG4gKiBJdCBpcyBub3QgYWx3YXlzIHRoZSBkaXJlY3QgcGFyZW50LCBiZWNhdXNlIHRoZSBWaXpQYW5lbCBjYW4gYmUgd3JhcHBlZCBpbiBvdGhlciBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBpdGVtRHJhZ2dpbmdEaXNhYmxlZChpdGVtOiBTY2VuZU9iamVjdCwgbGF5b3V0OiBTY2VuZUxheW91dCkge1xuICBsZXQgYW5jZXN0b3IgPSBpdGVtLnBhcmVudDtcblxuICB3aGlsZSAoYW5jZXN0b3IgJiYgYW5jZXN0b3IgIT09IGxheW91dCkge1xuICAgIGlmICgnaXNEcmFnZ2FibGUnIGluIGFuY2VzdG9yLnN0YXRlICYmIGFuY2VzdG9yLnN0YXRlLmlzRHJhZ2dhYmxlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnQ7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldENocm9tZVN0YXR1c01lc3NhZ2UoZGF0YTogUGFuZWxEYXRhLCBwbHVnaW5Mb2FkaW5nRXJyb3I6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICBpZiAocGx1Z2luTG9hZGluZ0Vycm9yKSB7XG4gICAgcmV0dXJuIHBsdWdpbkxvYWRpbmdFcnJvcjtcbiAgfVxuXG4gIGxldCBtZXNzYWdlID0gZGF0YS5lcnJvciA/IGRhdGEuZXJyb3IubWVzc2FnZSA6IHVuZGVmaW5lZDtcblxuICAvLyBIYW5kbGluZyBtdWx0aXBsZSBlcnJvcnMgd2l0aCBhIHNpbmdsZSBzdHJpbmcgdW50aWwgd2UgaW50ZWdyYXRlIFZpelBhbmVsIHdpdGggaW5zcGVjdG9yXG4gIGlmIChkYXRhLmVycm9ycykge1xuICAgIG1lc3NhZ2UgPSBkYXRhLmVycm9ycy5tYXAoKGUpID0+IGUubWVzc2FnZSkuam9pbignLCAnKTtcbiAgfVxuICByZXR1cm4gbWVzc2FnZTtcbn1cblxuY29uc3QgcmVsYXRpdmVXcmFwcGVyID0gY3NzKHtcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGhlaWdodDogJzEwMCUnLFxufSk7XG5cbi8qKlxuICogU2FkbHkgdGhpcyB0aGlzIGFic29sdXRlIHdyYXBwZXIgaXMgbmVlZGVkIGZvciB0aGUgcGFuZWwgdG8gYWRvcHQgc21hbGxlciBzaXplcy5cbiAqIFRoZSBjb21ibyBvZiB1c2VNZWFzdXJlIGFuZCBQYW5lbENocm9tZSBtYWtlcyB0aGUgcGFuZWwgdGFrZSB1cCB0aGUgd2lkdGggaXQgZ2V0J3MgYnV0IHRoYXQgbWFrZXMgaXQgaW1wb3NzaWJsZSB0b1xuICogVGhlbiBhZGFwdCB0byBzbWFsbGVyIHNwYWNlIChzYXkgcmVzaXppbmcgdGhlIGJyb3dzZXIgd2luZG93IG9yIHVuZG9ja2luZyBtZW51KS5cbiAqL1xuY29uc3QgYWJzb2x1dGVXcmFwcGVyID0gY3NzKHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGhlaWdodDogJzEwMCUnLFxufSk7XG5cbmNvbnN0IGdldEFsZXJ0U3RhdGVTdHlsZXMgPSAodGhlbWU6IEdyYWZhbmFUaGVtZTIpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBvazogY3NzKHtcbiAgICAgIGNvbG9yOiB0aGVtZS5jb2xvcnMuc3VjY2Vzcy50ZXh0LFxuICAgIH0pLFxuICAgIHBlbmRpbmc6IGNzcyh7XG4gICAgICBjb2xvcjogdGhlbWUuY29sb3JzLndhcm5pbmcudGV4dCxcbiAgICB9KSxcbiAgICBhbGVydGluZzogY3NzKHtcbiAgICAgIGNvbG9yOiB0aGVtZS5jb2xvcnMuZXJyb3IudGV4dCxcbiAgICB9KSxcbiAgfTtcbn07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJnQixTQUFBLGdCQUFBLENBQWlCLEVBQUUsS0FBQSxFQUF3QyxFQUFBO0FBakIzRSxFQUFBLElBQUEsRUFBQSxDQUFBO0FBa0JFLEVBQU0sTUFBQTtBQUFBLElBQ0osS0FBQTtBQUFBLElBQ0EsT0FBQTtBQUFBLElBQ0EsV0FBQTtBQUFBLElBQ0EsZ0JBQUE7QUFBQSxJQUNBLFdBQUE7QUFBQSxJQUNBLFdBQUE7QUFBQSxJQUNBLGNBQUE7QUFBQSxJQUNBLGlCQUFBO0FBQUEsSUFDQSxJQUFBO0FBQUEsSUFDQSxhQUFBO0FBQUEsSUFDQSxVQUFBO0FBQUEsSUFDQSxXQUFBO0FBQUEsSUFDQSxrQkFBQTtBQUFBLElBQ0EsV0FBQTtBQUFBLElBQ0EsV0FBQTtBQUFBLElBQ0EsU0FBQTtBQUFBLElBQ0EsY0FBaUIsR0FBQSxDQUFBO0FBQUEsR0FDbkIsR0FBSSxNQUFNLFFBQVMsRUFBQSxDQUFBO0FBQ25CLEVBQUEsTUFBTSxDQUFDLEdBQUssRUFBQSxF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
@@ -0,0 +1,45 @@
1
+ import { css } from '@emotion/css';
2
+ import { useStyles2, Icon, Tooltip, Button } from '@grafana/ui';
3
+ import React from 'react';
4
+
5
+ function VizPanelSeriesLimit({ data, showAll, seriesLimit, onShowAllSeries }) {
6
+ const styles = useStyles2(getStyles);
7
+ const seriesCount = data == null ? void 0 : data.series.length;
8
+ if (seriesCount === void 0 || seriesCount < seriesLimit) {
9
+ return null;
10
+ }
11
+ const buttonText = showAll ? "Restore limit" : `Show all ${seriesCount}`;
12
+ return /* @__PURE__ */ React.createElement("div", {
13
+ className: styles.timeSeriesDisclaimer
14
+ }, !showAll && /* @__PURE__ */ React.createElement("span", {
15
+ className: styles.warningMessage
16
+ }, /* @__PURE__ */ React.createElement(Icon, {
17
+ title: `Showing only ${seriesLimit} series`,
18
+ name: "exclamation-triangle",
19
+ "aria-hidden": "true"
20
+ })), /* @__PURE__ */ React.createElement(Tooltip, {
21
+ content: "Rendering too many series in a single panel may impact performance and make data harder to read."
22
+ }, /* @__PURE__ */ React.createElement(Button, {
23
+ variant: "secondary",
24
+ size: "sm",
25
+ onClick: onShowAllSeries
26
+ }, buttonText)));
27
+ }
28
+ const getStyles = (theme) => ({
29
+ timeSeriesDisclaimer: css({
30
+ label: "time-series-disclaimer",
31
+ display: "flex",
32
+ alignItems: "center",
33
+ gap: theme.spacing(1)
34
+ }),
35
+ warningMessage: css({
36
+ display: "flex",
37
+ alignItems: "center",
38
+ gap: theme.spacing(0.5),
39
+ color: theme.colors.warning.main,
40
+ fontSize: theme.typography.bodySmall.fontSize
41
+ })
42
+ });
43
+
44
+ export { VizPanelSeriesLimit };
45
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVml6UGFuZWxTZXJpZXNMaW1pdC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvVml6UGFuZWwvVml6UGFuZWxTZXJpZXNMaW1pdC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vY3NzJztcbmltcG9ydCB7IEdyYWZhbmFUaGVtZTIsIFBhbmVsRGF0YSB9IGZyb20gJ0BncmFmYW5hL2RhdGEnO1xuaW1wb3J0IHsgQnV0dG9uLCBJY29uLCBUb29sdGlwLCB1c2VTdHlsZXMyIH0gZnJvbSAnQGdyYWZhbmEvdWknO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBQcm9wcyB7XG4gIHNob3dBbGw/OiBib29sZWFuO1xuICBzZXJpZXNMaW1pdDogbnVtYmVyO1xuICBkYXRhPzogUGFuZWxEYXRhO1xuICBvblNob3dBbGxTZXJpZXM6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBWaXpQYW5lbFNlcmllc0xpbWl0KHsgZGF0YSwgc2hvd0FsbCwgc2VyaWVzTGltaXQsIG9uU2hvd0FsbFNlcmllcyB9OiBQcm9wcykge1xuICBjb25zdCBzdHlsZXMgPSB1c2VTdHlsZXMyKGdldFN0eWxlcyk7XG4gIGNvbnN0IHNlcmllc0NvdW50ID0gZGF0YT8uc2VyaWVzLmxlbmd0aDtcblxuICBpZiAoc2VyaWVzQ291bnQgPT09IHVuZGVmaW5lZCB8fCBzZXJpZXNDb3VudCA8IHNlcmllc0xpbWl0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBidXR0b25UZXh0ID0gc2hvd0FsbCA/ICdSZXN0b3JlIGxpbWl0JyA6IGBTaG93IGFsbCAke3Nlcmllc0NvdW50fWA7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpbWVTZXJpZXNEaXNjbGFpbWVyfT5cbiAgICAgIHshc2hvd0FsbCAmJiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLndhcm5pbmdNZXNzYWdlfT5cbiAgICAgICAgICA8SWNvbiB0aXRsZT17YFNob3dpbmcgb25seSAke3Nlcmllc0xpbWl0fSBzZXJpZXNgfSBuYW1lPVwiZXhjbGFtYXRpb24tdHJpYW5nbGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApfVxuICAgICAgPFRvb2x0aXBcbiAgICAgICAgY29udGVudD17J1JlbmRlcmluZyB0b28gbWFueSBzZXJpZXMgaW4gYSBzaW5nbGUgcGFuZWwgbWF5IGltcGFjdCBwZXJmb3JtYW5jZSBhbmQgbWFrZSBkYXRhIGhhcmRlciB0byByZWFkLid9XG4gICAgICA+XG4gICAgICAgIDxCdXR0b24gdmFyaWFudD1cInNlY29uZGFyeVwiIHNpemU9XCJzbVwiIG9uQ2xpY2s9e29uU2hvd0FsbFNlcmllc30+XG4gICAgICAgICAge2J1dHRvblRleHR9XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9Ub29sdGlwPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5jb25zdCBnZXRTdHlsZXMgPSAodGhlbWU6IEdyYWZhbmFUaGVtZTIpID0+ICh7XG4gIHRpbWVTZXJpZXNEaXNjbGFpbWVyOiBjc3Moe1xuICAgIGxhYmVsOiAndGltZS1zZXJpZXMtZGlzY2xhaW1lcicsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogdGhlbWUuc3BhY2luZygxKSxcbiAgfSksXG4gIHdhcm5pbmdNZXNzYWdlOiBjc3Moe1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBnYXA6IHRoZW1lLnNwYWNpbmcoMC41KSxcbiAgICBjb2xvcjogdGhlbWUuY29sb3JzLndhcm5pbmcubWFpbixcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5ib2R5U21hbGwuZm9udFNpemUsXG4gIH0pLFxufSk7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQVlPLFNBQVMsb0JBQW9CLEVBQUUsSUFBQSxFQUFNLE9BQVMsRUFBQSxXQUFBLEVBQWEsaUJBQTBCLEVBQUE7QUFDMUYsRUFBTSxNQUFBLE1BQUEsR0FBUyxXQUFXLFNBQVMsQ0FBQSxDQUFBO0FBQ25DLEVBQU0sTUFBQSxXQUFBLEdBQWMsNkJBQU0sTUFBTyxDQUFBLE1BQUEsQ0FBQTtBQUVqQyxFQUFJLElBQUEsV0FBQSxLQUFnQixLQUFhLENBQUEsSUFBQSxXQUFBLEdBQWMsV0FBYSxFQUFBO0FBQzFELElBQU8sT0FBQSxJQUFBLENBQUE7QUFBQSxHQUNUO0FBRUEsRUFBTSxNQUFBLFVBQUEsR0FBYSxPQUFVLEdBQUEsZUFBQSxHQUFrQixDQUFZLFNBQUEsRUFBQSxXQUFBLENBQUEsQ0FBQSxDQUFBO0FBRTNELEVBQUEsdUJBQ0csS0FBQSxDQUFBLGFBQUEsQ0FBQSxLQUFBLEVBQUE7QUFBQSxJQUFJLFdBQVcsTUFBTyxDQUFBLG9CQUFBO0FBQUEsR0FDcEIsRUFBQSxDQUFDLDJCQUNDLEtBQUEsQ0FBQSxhQUFBLENBQUEsTUFBQSxFQUFBO0FBQUEsSUFBSyxXQUFXLE1BQU8sQ0FBQSxjQUFBO0FBQUEsR0FBQSxrQkFDckIsS0FBQSxDQUFBLGFBQUEsQ0FBQSxJQUFBLEVBQUE7QUFBQSxJQUFLLE9BQU8sQ0FBZ0IsYUFBQSxFQUFBLFdBQUEsQ0FBQSxPQUFBLENBQUE7QUFBQSxJQUFzQixJQUFLLEVBQUEsc0JBQUE7QUFBQSxJQUF1QixhQUFZLEVBQUEsTUFBQTtBQUFBLEdBQU8sQ0FDcEcsbUJBRUQsS0FBQSxDQUFBLGFBQUEsQ0FBQSxPQUFBLEVBQUE7QUFBQSxJQUNDLE9BQVMsRUFBQSxrR0FBQTtBQUFBLEdBQUEsa0JBRVIsS0FBQSxDQUFBLGFBQUEsQ0FBQSxNQUFBLEVBQUE7QUFBQSxJQUFPLE9BQVEsRUFBQSxXQUFBO0FBQUEsSUFBWSxJQUFLLEVBQUEsSUFBQTtBQUFBLElBQUssT0FBUyxFQUFBLGVBQUE7QUFBQSxHQUM1QyxFQUFBLFVBQ0gsQ0FDRixDQUNGLENBQUEsQ0FBQTtBQUVKLENBQUE7QUFFQSxNQUFNLFNBQUEsR0FBWSxDQUFDLEtBQTBCLE1BQUE7QUFBQSxFQUMzQyxzQkFBc0IsR0FBSSxDQUFBO0FBQUEsSUFDeEIsS0FBTyxFQUFBLHdCQUFBO0FBQUEsSUFDUCxPQUFTLEVBQUEsTUFBQTtBQUFBLElBQ1QsVUFBWSxFQUFBLFFBQUE7QUFBQSxJQUNaLEdBQUEsRUFBSyxLQUFNLENBQUEsT0FBQSxDQUFRLENBQUMsQ0FBQTtBQUFBLEdBQ3JCLENBQUE7QUFBQSxFQUNELGdCQUFnQixHQUFJLENBQUE7QUFBQSxJQUNsQixPQUFTLEVBQUEsTUFBQTtBQUFBLElBQ1QsVUFBWSxFQUFBLFFBQUE7QUFBQSxJQUNaLEdBQUEsRUFBSyxLQUFNLENBQUEsT0FBQSxDQUFRLEdBQUcsQ0FBQTtBQUFBLElBQ3RCLEtBQUEsRUFBTyxLQUFNLENBQUEsTUFBQSxDQUFPLE9BQVEsQ0FBQSxJQUFBO0FBQUEsSUFDNUIsUUFBQSxFQUFVLEtBQU0sQ0FBQSxVQUFBLENBQVcsU0FBVSxDQUFBLFFBQUE7QUFBQSxHQUN0QyxDQUFBO0FBQ0gsQ0FBQSxDQUFBOzs7OyJ9
@@ -0,0 +1,72 @@
1
+ import { FieldMatcherID, FieldColorModeId } from '@grafana/data';
2
+
3
+ var __defProp = Object.defineProperty;
4
+ var __defProps = Object.defineProperties;
5
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
9
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10
+ var __spreadValues = (a, b) => {
11
+ for (var prop in b || (b = {}))
12
+ if (__hasOwnProp.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ if (__getOwnPropSymbols)
15
+ for (var prop of __getOwnPropSymbols(b)) {
16
+ if (__propIsEnum.call(b, prop))
17
+ __defNormalProp(a, prop, b[prop]);
18
+ }
19
+ return a;
20
+ };
21
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
22
+ const changeSeriesColorConfigFactory = (label, color, fieldConfig) => {
23
+ const { overrides } = fieldConfig;
24
+ const currentIndex = fieldConfig.overrides.findIndex((override) => {
25
+ return override.matcher.id === FieldMatcherID.byName && override.matcher.options === label;
26
+ });
27
+ if (currentIndex < 0) {
28
+ return __spreadProps(__spreadValues({}, fieldConfig), {
29
+ overrides: [...fieldConfig.overrides, createOverride(label, color)]
30
+ });
31
+ }
32
+ const overridesCopy = Array.from(overrides);
33
+ const existing = overridesCopy[currentIndex];
34
+ const propertyIndex = existing.properties.findIndex((p) => p.id === "color");
35
+ if (propertyIndex < 0) {
36
+ overridesCopy[currentIndex] = __spreadProps(__spreadValues({}, existing), {
37
+ properties: [...existing.properties, createProperty(color)]
38
+ });
39
+ return __spreadProps(__spreadValues({}, fieldConfig), {
40
+ overrides: overridesCopy
41
+ });
42
+ }
43
+ const propertiesCopy = Array.from(existing.properties);
44
+ propertiesCopy[propertyIndex] = createProperty(color);
45
+ overridesCopy[currentIndex] = __spreadProps(__spreadValues({}, existing), {
46
+ properties: propertiesCopy
47
+ });
48
+ return __spreadProps(__spreadValues({}, fieldConfig), {
49
+ overrides: overridesCopy
50
+ });
51
+ };
52
+ const createOverride = (label, color) => {
53
+ return {
54
+ matcher: {
55
+ id: FieldMatcherID.byName,
56
+ options: label
57
+ },
58
+ properties: [createProperty(color)]
59
+ };
60
+ };
61
+ const createProperty = (color) => {
62
+ return {
63
+ id: "color",
64
+ value: {
65
+ mode: FieldColorModeId.Fixed,
66
+ fixedColor: color
67
+ }
68
+ };
69
+ };
70
+
71
+ export { changeSeriesColorConfigFactory };
72
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JTZXJpZXNDb25maWdGYWN0b3J5LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9WaXpQYW5lbC9jb2xvclNlcmllc0NvbmZpZ0ZhY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29uZmlnT3ZlcnJpZGVSdWxlLFxuICBEeW5hbWljQ29uZmlnVmFsdWUsXG4gIEZpZWxkQ29sb3JNb2RlSWQsXG4gIEZpZWxkQ29uZmlnU291cmNlLFxuICBGaWVsZE1hdGNoZXJJRCxcbn0gZnJvbSAnQGdyYWZhbmEvZGF0YSc7XG5cbmV4cG9ydCBjb25zdCBjaGFuZ2VTZXJpZXNDb2xvckNvbmZpZ0ZhY3RvcnkgPSAoXG4gIGxhYmVsOiBzdHJpbmcsXG4gIGNvbG9yOiBzdHJpbmcsXG4gIGZpZWxkQ29uZmlnOiBGaWVsZENvbmZpZ1NvdXJjZVxuKTogRmllbGRDb25maWdTb3VyY2UgPT4ge1xuICBjb25zdCB7IG92ZXJyaWRlcyB9ID0gZmllbGRDb25maWc7XG4gIGNvbnN0IGN1cnJlbnRJbmRleCA9IGZpZWxkQ29uZmlnLm92ZXJyaWRlcy5maW5kSW5kZXgoKG92ZXJyaWRlKSA9PiB7XG4gICAgcmV0dXJuIG92ZXJyaWRlLm1hdGNoZXIuaWQgPT09IEZpZWxkTWF0Y2hlcklELmJ5TmFtZSAmJiBvdmVycmlkZS5tYXRjaGVyLm9wdGlvbnMgPT09IGxhYmVsO1xuICB9KTtcblxuICBpZiAoY3VycmVudEluZGV4IDwgMCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5maWVsZENvbmZpZyxcbiAgICAgIG92ZXJyaWRlczogWy4uLmZpZWxkQ29uZmlnLm92ZXJyaWRlcywgY3JlYXRlT3ZlcnJpZGUobGFiZWwsIGNvbG9yKV0sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG92ZXJyaWRlc0NvcHkgPSBBcnJheS5mcm9tKG92ZXJyaWRlcyk7XG4gIGNvbnN0IGV4aXN0aW5nID0gb3ZlcnJpZGVzQ29weVtjdXJyZW50SW5kZXhdO1xuICBjb25zdCBwcm9wZXJ0eUluZGV4ID0gZXhpc3RpbmcucHJvcGVydGllcy5maW5kSW5kZXgoKHApID0+IHAuaWQgPT09ICdjb2xvcicpO1xuXG4gIGlmIChwcm9wZXJ0eUluZGV4IDwgMCkge1xuICAgIG92ZXJyaWRlc0NvcHlbY3VycmVudEluZGV4XSA9IHtcbiAgICAgIC4uLmV4aXN0aW5nLFxuICAgICAgcHJvcGVydGllczogWy4uLmV4aXN0aW5nLnByb3BlcnRpZXMsIGNyZWF0ZVByb3BlcnR5KGNvbG9yKV0sXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5maWVsZENvbmZpZyxcbiAgICAgIG92ZXJyaWRlczogb3ZlcnJpZGVzQ29weSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgcHJvcGVydGllc0NvcHkgPSBBcnJheS5mcm9tKGV4aXN0aW5nLnByb3BlcnRpZXMpO1xuICBwcm9wZXJ0aWVzQ29weVtwcm9wZXJ0eUluZGV4XSA9IGNyZWF0ZVByb3BlcnR5KGNvbG9yKTtcblxuICBvdmVycmlkZXNDb3B5W2N1cnJlbnRJbmRleF0gPSB7XG4gICAgLi4uZXhpc3RpbmcsXG4gICAgcHJvcGVydGllczogcHJvcGVydGllc0NvcHksXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5maWVsZENvbmZpZyxcbiAgICBvdmVycmlkZXM6IG92ZXJyaWRlc0NvcHksXG4gIH07XG59O1xuXG5jb25zdCBjcmVhdGVPdmVycmlkZSA9IChsYWJlbDogc3RyaW5nLCBjb2xvcjogc3RyaW5nKTogQ29uZmlnT3ZlcnJpZGVSdWxlID0+IHtcbiAgcmV0dXJuIHtcbiAgICBtYXRjaGVyOiB7XG4gICAgICBpZDogRmllbGRNYXRjaGVySUQuYnlOYW1lLFxuICAgICAgb3B0aW9uczogbGFiZWwsXG4gICAgfSxcbiAgICBwcm9wZXJ0aWVzOiBbY3JlYXRlUHJvcGVydHkoY29sb3IpXSxcbiAgfTtcbn07XG5cbmNvbnN0IGNyZWF0ZVByb3BlcnR5ID0gKGNvbG9yOiBzdHJpbmcpOiBEeW5hbWljQ29uZmlnVmFsdWUgPT4ge1xuICByZXR1cm4ge1xuICAgIGlkOiAnY29sb3InLFxuICAgIHZhbHVlOiB7XG4gICAgICBtb2RlOiBGaWVsZENvbG9yTW9kZUlkLkZpeGVkLFxuICAgICAgZml4ZWRDb2xvcjogY29sb3IsXG4gICAgfSxcbiAgfTtcbn07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUU8sTUFBTSw4QkFBaUMsR0FBQSxDQUM1QyxLQUNBLEVBQUEsS0FBQSxFQUNBLFdBQ3NCLEtBQUE7QUFDdEIsRUFBTSxNQUFBLEVBQUUsV0FBYyxHQUFBLFdBQUEsQ0FBQTtBQUN0QixFQUFBLE1BQU0sWUFBZSxHQUFBLFdBQUEsQ0FBWSxTQUFVLENBQUEsU0FBQSxDQUFVLENBQUMsUUFBYSxLQUFBO0FBQ2pFLElBQUEsT0FBTyxTQUFTLE9BQVEsQ0FBQSxFQUFBLEtBQU8sZUFBZSxNQUFVLElBQUEsUUFBQSxDQUFTLFFBQVEsT0FBWSxLQUFBLEtBQUEsQ0FBQTtBQUFBLEdBQ3RGLENBQUEsQ0FBQTtBQUVELEVBQUEsSUFBSSxlQUFlLENBQUcsRUFBQTtBQUNwQixJQUFBLE9BQU8saUNBQ0YsV0FERSxDQUFBLEVBQUE7QUFBQSxNQUVMLFNBQUEsRUFBVyxDQUFDLEdBQUcsV0FBQSxDQUFZLFdBQVcsY0FBZSxDQUFBLEtBQUEsRUFBTyxLQUFLLENBQUMsQ0FBQTtBQUFBLEtBQ3BFLENBQUEsQ0FBQTtBQUFBLEdBQ0Y7QUFFQSxFQUFNLE1BQUEsYUFBQSxHQUFnQixLQUFNLENBQUEsSUFBQSxDQUFLLFNBQVMsQ0FBQSxDQUFBO0FBQzFDLEVBQUEsTUFBTSxXQUFXLGFBQWMsQ0FBQSxZQUFBLENBQUEsQ0FBQTtBQUMvQixFQUFNLE1BQUEsYUFBQSxHQUFnQixTQUFTLFVBQVcsQ0FBQSxTQUFBLENBQVUsQ0FBQyxDQUFNLEtBQUEsQ0FBQSxDQUFFLE9BQU8sT0FBTyxDQUFBLENBQUE7QUFFM0UsRUFBQSxJQUFJLGdCQUFnQixDQUFHLEVBQUE7QUFDckIsSUFBYyxhQUFBLENBQUEsWUFBQSxDQUFBLEdBQWdCLGlDQUN6QixRQUR5QixDQUFBLEVBQUE7QUFBQSxNQUU1QixZQUFZLENBQUMsR0FBRyxTQUFTLFVBQVksRUFBQSxjQUFBLENBQWUsS0FBSyxDQUFDLENBQUE7QUFBQSxLQUM1RCxDQUFBLENBQUE7QUFFQSxJQUFBLE9BQU8saUNBQ0YsV0FERSxDQUFBLEVBQUE7QUFBQSxNQUVMLFNBQVcsRUFBQSxhQUFBO0FBQUEsS0FDYixDQUFBLENBQUE7QUFBQSxHQUNGO0FBRUEsRUFBQSxNQUFNLGNBQWlCLEdBQUEsS0FBQSxDQUFNLElBQUssQ0FBQSxRQUFBLENBQVMsVUFBVSxDQUFBLENBQUE7QUFDckQsRUFBZSxjQUFBLENBQUEsYUFBQSxDQUFBLEdBQWlCLGVBQWUsS0FBSyxDQUFBLENBQUE7QUFFcEQsRUFBYyxhQUFBLENBQUEsWUFBQSxDQUFBLEdBQWdCLGlDQUN6QixRQUR5QixDQUFBLEVBQUE7QUFBQSxJQUU1QixVQUFZLEVBQUEsY0FBQTtBQUFBLEdBQ2QsQ0FBQSxDQUFBO0FBRUEsRUFBQSxPQUFPLGlDQUNGLFdBREUsQ0FBQSxFQUFBO0FBQUEsSUFFTCxTQUFXLEVBQUEsYUFBQTtBQUFBLEdBQ2IsQ0FBQSxDQUFBO0FBQ0YsRUFBQTtBQUVBLE1BQU0sY0FBQSxHQUFpQixDQUFDLEtBQUEsRUFBZSxLQUFzQyxLQUFBO0FBQzNFLEVBQU8sT0FBQTtBQUFBLElBQ0wsT0FBUyxFQUFBO0FBQUEsTUFDUCxJQUFJLGNBQWUsQ0FBQSxNQUFBO0FBQUEsTUFDbkIsT0FBUyxFQUFBLEtBQUE7QUFBQSxLQUNYO0FBQUEsSUFDQSxVQUFZLEVBQUEsQ0FBQyxjQUFlLENBQUEsS0FBSyxDQUFDLENBQUE7QUFBQSxHQUNwQyxDQUFBO0FBQ0YsQ0FBQSxDQUFBO0FBRUEsTUFBTSxjQUFBLEdBQWlCLENBQUMsS0FBc0MsS0FBQTtBQUM1RCxFQUFPLE9BQUE7QUFBQSxJQUNMLEVBQUksRUFBQSxPQUFBO0FBQUEsSUFDSixLQUFPLEVBQUE7QUFBQSxNQUNMLE1BQU0sZ0JBQWlCLENBQUEsS0FBQTtBQUFBLE1BQ3ZCLFVBQVksRUFBQSxLQUFBO0FBQUEsS0FDZDtBQUFBLEdBQ0YsQ0FBQTtBQUNGLENBQUE7Ozs7In0=
@@ -0,0 +1,56 @@
1
+ import { getPluginImportUtils } from '@grafana/runtime';
2
+
3
+ var __defProp = Object.defineProperty;
4
+ var __defProps = Object.defineProperties;
5
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
9
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10
+ var __spreadValues = (a, b) => {
11
+ for (var prop in b || (b = {}))
12
+ if (__hasOwnProp.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ if (__getOwnPropSymbols)
15
+ for (var prop of __getOwnPropSymbols(b)) {
16
+ if (__propIsEnum.call(b, prop))
17
+ __defNormalProp(a, prop, b[prop]);
18
+ }
19
+ return a;
20
+ };
21
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
22
+ const runtimePanelPlugins = /* @__PURE__ */ new Map();
23
+ function registerRuntimePanelPlugin({ pluginId, plugin }) {
24
+ if (runtimePanelPlugins.has(pluginId)) {
25
+ throw new Error(`A runtime panel plugin with id ${pluginId} has already been registered`);
26
+ }
27
+ plugin.meta = __spreadProps(__spreadValues({}, plugin.meta), {
28
+ id: pluginId,
29
+ name: pluginId,
30
+ module: "runtime plugin",
31
+ baseUrl: "runtime plugin",
32
+ info: {
33
+ author: {
34
+ name: "Runtime plugin " + pluginId
35
+ },
36
+ description: "",
37
+ links: [],
38
+ logos: {
39
+ large: "",
40
+ small: ""
41
+ },
42
+ screenshots: [],
43
+ updated: "",
44
+ version: ""
45
+ }
46
+ });
47
+ runtimePanelPlugins.set(pluginId, plugin);
48
+ }
49
+ function loadPanelPluginSync(pluginId) {
50
+ var _a;
51
+ const { getPanelPluginFromCache } = getPluginImportUtils();
52
+ return (_a = getPanelPluginFromCache(pluginId)) != null ? _a : runtimePanelPlugins.get(pluginId);
53
+ }
54
+
55
+ export { loadPanelPluginSync, registerRuntimePanelPlugin, runtimePanelPlugins };
56
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXJSdW50aW1lUGFuZWxQbHVnaW4uanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1ZpelBhbmVsL3JlZ2lzdGVyUnVudGltZVBhbmVsUGx1Z2luLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhbmVsUGx1Z2luLCBQbHVnaW5NZXRhSW5mbyB9IGZyb20gJ0BncmFmYW5hL2RhdGEnO1xuaW1wb3J0IHsgZ2V0UGx1Z2luSW1wb3J0VXRpbHMgfSBmcm9tICdAZ3JhZmFuYS9ydW50aW1lJztcblxuZXhwb3J0IGNvbnN0IHJ1bnRpbWVQYW5lbFBsdWdpbnMgPSBuZXcgTWFwPHN0cmluZywgUGFuZWxQbHVnaW4+KCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZVBhbmVsUGx1Z2luT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQbGVhc2Ugc3BlY2lmeSBhIHBsdWdpbklkIHRoYXQgaXMgdW5saWtlbHkgdG8gY29sbGlkZSB3aXRoIG90aGVyIHBsdWdpbnMuXG4gICAqL1xuICBwbHVnaW5JZDogc3RyaW5nO1xuICBwbHVnaW46IFBhbmVsUGx1Z2luO1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIGEgd2F5IHRvIHJlZ2lzdGVyIHJ1bnRpbWUgcGFuZWwgcGx1Z2lucy5cbiAqIFBsZWFzZSB1c2UgYSBwbHVnaW5JZCB0aGF0IGlzIHVubGlrZWx5IHRvIGNvbGxpZGUgd2l0aCBvdGhlciBwbHVnaW5zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJSdW50aW1lUGFuZWxQbHVnaW4oeyBwbHVnaW5JZCwgcGx1Z2luIH06IFJ1bnRpbWVQYW5lbFBsdWdpbk9wdGlvbnMpIHtcbiAgaWYgKHJ1bnRpbWVQYW5lbFBsdWdpbnMuaGFzKHBsdWdpbklkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQSBydW50aW1lIHBhbmVsIHBsdWdpbiB3aXRoIGlkICR7cGx1Z2luSWR9IGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZGApO1xuICB9XG5cbiAgcGx1Z2luLm1ldGEgPSB7XG4gICAgLi4ucGx1Z2luLm1ldGEsXG4gICAgaWQ6IHBsdWdpbklkLFxuICAgIG5hbWU6IHBsdWdpbklkLFxuICAgIG1vZHVsZTogJ3J1bnRpbWUgcGx1Z2luJyxcbiAgICBiYXNlVXJsOiAncnVudGltZSBwbHVnaW4nLFxuICAgIGluZm86IHtcbiAgICAgIGF1dGhvcjoge1xuICAgICAgICBuYW1lOiAnUnVudGltZSBwbHVnaW4gJyArIHBsdWdpbklkLFxuICAgICAgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGxpbmtzOiBbXSxcbiAgICAgIGxvZ29zOiB7XG4gICAgICAgIGxhcmdlOiAnJyxcbiAgICAgICAgc21hbGw6ICcnLFxuICAgICAgfSxcbiAgICAgIHNjcmVlbnNob3RzOiBbXSxcbiAgICAgIHVwZGF0ZWQ6ICcnLFxuICAgICAgdmVyc2lvbjogJycsXG4gICAgfSBhcyBQbHVnaW5NZXRhSW5mbyxcbiAgfTtcblxuICBydW50aW1lUGFuZWxQbHVnaW5zLnNldChwbHVnaW5JZCwgcGx1Z2luKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRQYW5lbFBsdWdpblN5bmMocGx1Z2luSWQ6IHN0cmluZykge1xuICBjb25zdCB7IGdldFBhbmVsUGx1Z2luRnJvbUNhY2hlIH0gPSBnZXRQbHVnaW5JbXBvcnRVdGlscygpO1xuXG4gIHJldHVybiBnZXRQYW5lbFBsdWdpbkZyb21DYWNoZShwbHVnaW5JZCkgPz8gcnVudGltZVBhbmVsUGx1Z2lucy5nZXQocGx1Z2luSWQpO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdhLE1BQUEsbUJBQUEsdUJBQTBCLEdBQXlCLEdBQUE7QUFjekQsU0FBUywwQkFBMkIsQ0FBQSxFQUFFLFFBQVUsRUFBQSxNQUFBLEVBQXFDLEVBQUE7QUFDMUYsRUFBSSxJQUFBLG1CQUFBLENBQW9CLEdBQUksQ0FBQSxRQUFRLENBQUcsRUFBQTtBQUNyQyxJQUFNLE1BQUEsSUFBSSxLQUFNLENBQUEsQ0FBQSwrQkFBQSxFQUFrQyxRQUFzQyxDQUFBLDRCQUFBLENBQUEsQ0FBQSxDQUFBO0FBQUEsR0FDMUY7QUFFQSxFQUFPLE1BQUEsQ0FBQSxJQUFBLEdBQU8sYUFDVCxDQUFBLGNBQUEsQ0FBQSxFQUFBLEVBQUEsTUFBQSxDQUFPLElBREUsQ0FBQSxFQUFBO0FBQUEsSUFFWixFQUFJLEVBQUEsUUFBQTtBQUFBLElBQ0osSUFBTSxFQUFBLFFBQUE7QUFBQSxJQUNOLE1BQVEsRUFBQSxnQkFBQTtBQUFBLElBQ1IsT0FBUyxFQUFBLGdCQUFBO0FBQUEsSUFDVCxJQUFNLEVBQUE7QUFBQSxNQUNKLE1BQVEsRUFBQTtBQUFBLFFBQ04sTUFBTSxpQkFBb0IsR0FBQSxRQUFBO0FBQUEsT0FDNUI7QUFBQSxNQUNBLFdBQWEsRUFBQSxFQUFBO0FBQUEsTUFDYixPQUFPLEVBQUM7QUFBQSxNQUNSLEtBQU8sRUFBQTtBQUFBLFFBQ0wsS0FBTyxFQUFBLEVBQUE7QUFBQSxRQUNQLEtBQU8sRUFBQSxFQUFBO0FBQUEsT0FDVDtBQUFBLE1BQ0EsYUFBYSxFQUFDO0FBQUEsTUFDZCxPQUFTLEVBQUEsRUFBQTtBQUFBLE1BQ1QsT0FBUyxFQUFBLEVBQUE7QUFBQSxLQUNYO0FBQUEsR0FDRixDQUFBLENBQUE7QUFFQSxFQUFvQixtQkFBQSxDQUFBLEdBQUEsQ0FBSSxVQUFVLE1BQU0sQ0FBQSxDQUFBO0FBQzFDLENBQUE7QUFFTyxTQUFTLG9CQUFvQixRQUFrQixFQUFBO0FBL0N0RCxFQUFBLElBQUEsRUFBQSxDQUFBO0FBZ0RFLEVBQU0sTUFBQSxFQUFFLHVCQUF3QixFQUFBLEdBQUksb0JBQXFCLEVBQUEsQ0FBQTtBQUV6RCxFQUFBLE9BQUEsQ0FBTyw2QkFBd0IsUUFBUSxDQUFBLEtBQWhDLElBQXFDLEdBQUEsRUFBQSxHQUFBLG1CQUFBLENBQW9CLElBQUksUUFBUSxDQUFBLENBQUE7QUFDOUU7Ozs7In0=