@grafana/scenes 6.8.0 → 6.8.1
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.
- package/CHANGELOG.md +20 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/esm/components/layout/CSSGrid/SceneCSSGridItem.js +0 -33
- package/dist/esm/dist/esm/behaviors/CursorSync.js +0 -76
- package/dist/esm/dist/esm/behaviors/LiveNowTimer.js +0 -44
- package/dist/esm/dist/esm/behaviors/SceneQueryController.js +0 -14
- package/dist/esm/dist/esm/components/EmbeddedScene.js +0 -59
- package/dist/esm/dist/esm/components/NestedScene.js +0 -95
- package/dist/esm/dist/esm/components/SceneApp/SceneApp.js +0 -27
- package/dist/esm/dist/esm/components/SceneApp/SceneAppPage.js +0 -176
- package/dist/esm/dist/esm/components/SceneApp/SceneAppPageView.js +0 -104
- package/dist/esm/dist/esm/components/SceneApp/utils.js +0 -42
- package/dist/esm/dist/esm/components/SceneByFrameRepeater.js +0 -41
- package/dist/esm/dist/esm/components/SceneByVariableRepeater.js +0 -55
- package/dist/esm/dist/esm/components/SceneCanvasText.js +0 -32
- package/dist/esm/dist/esm/components/SceneControlsSpacer.js +0 -17
- package/dist/esm/dist/esm/components/SceneDebugger/DebugDetails.js +0 -82
- package/dist/esm/dist/esm/components/SceneDebugger/DebugTreeNode.js +0 -72
- package/dist/esm/dist/esm/components/SceneDebugger/SceneDebugger.js +0 -77
- package/dist/esm/dist/esm/components/SceneReactObject.js +0 -34
- package/dist/esm/dist/esm/components/SceneRefreshPicker.js +0 -205
- package/dist/esm/dist/esm/components/SceneTimePicker.js +0 -139
- package/dist/esm/dist/esm/components/SceneTimeRangeCompare.js +0 -240
- package/dist/esm/dist/esm/components/SceneToolbarButton.js +0 -33
- package/dist/esm/dist/esm/components/VizPanel/VizPanel.js +0 -406
- package/dist/esm/dist/esm/components/VizPanel/VizPanelExploreButton.js +0 -44
- package/dist/esm/dist/esm/components/VizPanel/VizPanelMenu.js +0 -59
- package/dist/esm/dist/esm/components/VizPanel/VizPanelRenderer.js +0 -285
- package/dist/esm/dist/esm/components/VizPanel/VizPanelSeriesLimit.js +0 -45
- package/dist/esm/dist/esm/components/VizPanel/colorSeriesConfigFactory.js +0 -72
- package/dist/esm/dist/esm/components/VizPanel/registerRuntimePanelPlugin.js +0 -11
- package/dist/esm/dist/esm/components/VizPanel/seriesVisibilityConfigFactory.js +0 -164
- package/dist/esm/dist/esm/components/layout/CSSGrid/SceneCSSGridLayout.js +0 -124
- package/dist/esm/dist/esm/components/layout/LazyLoader.js +0 -103
- package/dist/esm/dist/esm/components/layout/SceneFlexLayout.js +0 -135
- package/dist/esm/dist/esm/components/layout/grid/SceneGridItem.js +0 -30
- package/dist/esm/dist/esm/components/layout/grid/SceneGridLayout.js +0 -283
- package/dist/esm/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js +0 -178
- package/dist/esm/dist/esm/components/layout/grid/SceneGridRow.js +0 -190
- package/dist/esm/dist/esm/components/layout/grid/constants.js +0 -7
- package/dist/esm/dist/esm/components/layout/grid/utils.js +0 -36
- package/dist/esm/dist/esm/components/layout/split/SplitLayout.js +0 -17
- package/dist/esm/dist/esm/components/layout/split/SplitLayoutRenderer.js +0 -29
- package/dist/esm/dist/esm/components/layout/split/Splitter.js +0 -386
- package/dist/esm/dist/esm/core/SceneComponentWrapper.js +0 -57
- package/dist/esm/dist/esm/core/SceneDataNode.js +0 -43
- package/dist/esm/dist/esm/core/SceneObjectBase.js +0 -286
- package/dist/esm/dist/esm/core/SceneObjectRef.js +0 -32
- package/dist/esm/dist/esm/core/SceneTimeRange.js +0 -231
- package/dist/esm/dist/esm/core/events.js +0 -11
- package/dist/esm/dist/esm/core/sceneGraph/getTimeRange.js +0 -10
- package/dist/esm/dist/esm/core/sceneGraph/index.js +0 -25
- package/dist/esm/dist/esm/core/sceneGraph/sceneGraph.js +0 -178
- package/dist/esm/dist/esm/core/sceneGraph/utils.js +0 -64
- package/dist/esm/dist/esm/core/types.js +0 -15
- package/dist/esm/dist/esm/querying/DataLayersMerger.js +0 -46
- package/dist/esm/dist/esm/querying/ExtraQueryProvider.js +0 -6
- package/dist/esm/dist/esm/querying/RuntimeDataSource.js +0 -6
- package/dist/esm/dist/esm/querying/SceneDataLayerSet.js +0 -100
- package/dist/esm/dist/esm/querying/SceneQueryRunner.js +0 -468
- package/dist/esm/dist/esm/querying/extraQueryProcessingOperator.js +0 -46
- package/dist/esm/dist/esm/querying/getEnrichedDataRequest.js +0 -12
- package/dist/esm/dist/esm/querying/layers/SceneDataLayerBase.js +0 -112
- package/dist/esm/dist/esm/querying/layers/SceneDataLayerControls.js +0 -51
- package/dist/esm/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js +0 -130
- package/dist/esm/dist/esm/querying/layers/annotations/filterAnnotations.js +0 -85
- package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationQuery.js +0 -121
- package/dist/esm/dist/esm/querying/layers/annotations/standardAnnotationsSupport.js +0 -211
- package/dist/esm/dist/esm/querying/layers/annotations/utils.js +0 -77
- package/dist/esm/dist/esm/querying/registerQueryWithController.js +0 -41
- package/dist/esm/dist/esm/services/SceneObjectUrlSyncConfig.js +0 -30
- package/dist/esm/dist/esm/services/UniqueUrlKeyMapper.js +0 -45
- package/dist/esm/dist/esm/services/UrlSyncManager.js +0 -167
- package/dist/esm/dist/esm/services/useUrlSync.js +0 -29
- package/dist/esm/dist/esm/services/utils.js +0 -71
- package/dist/esm/dist/esm/utils/ControlsLabel.js +0 -107
- package/dist/esm/dist/esm/utils/LoadingIndicator.js +0 -19
- package/dist/esm/dist/esm/utils/SafeSerializableSceneObject.js +0 -39
- package/dist/esm/dist/esm/utils/compatibility/setWindowGrafanaSceneContext.js +0 -16
- package/dist/esm/dist/esm/utils/date.js +0 -15
- package/dist/esm/dist/esm/utils/evaluateTimeRange.js +0 -16
- package/dist/esm/dist/esm/utils/explore.js +0 -47
- package/dist/esm/dist/esm/utils/getCompareSeriesRefId.js +0 -4
- package/dist/esm/dist/esm/utils/getDataSource.js +0 -18
- package/dist/esm/dist/esm/utils/getMessageFromError.js +0 -24
- package/dist/esm/dist/esm/utils/metricTree.js +0 -53
- package/dist/esm/dist/esm/utils/parseUrlParam.js +0 -41
- package/dist/esm/dist/esm/utils/utils.js +0 -11
- package/dist/esm/dist/esm/utils/wrapInSafeSerializableSceneObject.js +0 -30
- package/dist/esm/dist/esm/utils/writeSceneLog.js +0 -12
- package/dist/esm/dist/esm/variables/VariableDependencyConfig.js +0 -150
- package/dist/esm/dist/esm/variables/VariableValueRecorder.js +0 -71
- package/dist/esm/dist/esm/variables/adhoc/AdHocFilterBuilder.js +0 -24
- package/dist/esm/dist/esm/variables/adhoc/AdHocFilterRenderer.js +0 -303
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +0 -162
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +0 -20
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +0 -640
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +0 -65
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +0 -146
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +0 -114
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +0 -68
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js +0 -146
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariable.js +0 -289
- package/dist/esm/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +0 -76
- package/dist/esm/dist/esm/variables/adhoc/getAdhocOptionSearcher.js +0 -13
- package/dist/esm/dist/esm/variables/adhoc/patchGetAdhocFilters.js +0 -47
- package/dist/esm/dist/esm/variables/components/VariableValueControl.js +0 -23
- package/dist/esm/dist/esm/variables/components/VariableValueInput.js +0 -33
- package/dist/esm/dist/esm/variables/components/VariableValueSelect.js +0 -228
- package/dist/esm/dist/esm/variables/components/VariableValueSelectors.js +0 -72
- package/dist/esm/dist/esm/variables/components/getOptionSearcher.js +0 -15
- package/dist/esm/dist/esm/variables/constants.js +0 -9
- package/dist/esm/dist/esm/variables/getEnrichedFiltersRequest.js +0 -12
- package/dist/esm/dist/esm/variables/groupby/GroupByVariable.js +0 -259
- package/dist/esm/dist/esm/variables/groupby/GroupByVariableUrlSyncHandler.js +0 -63
- package/dist/esm/dist/esm/variables/groupby/findActiveGroupByVariablesByUid.js +0 -13
- package/dist/esm/dist/esm/variables/interpolation/ScopedVarsVariable.js +0 -40
- package/dist/esm/dist/esm/variables/interpolation/defaults.js +0 -21
- package/dist/esm/dist/esm/variables/interpolation/fieldAccessorCache.js +0 -13
- package/dist/esm/dist/esm/variables/interpolation/formatRegistry.js +0 -296
- package/dist/esm/dist/esm/variables/interpolation/sceneInterpolator.js +0 -87
- package/dist/esm/dist/esm/variables/lookupVariable.js +0 -20
- package/dist/esm/dist/esm/variables/macros/AllVariablesMacro.js +0 -57
- package/dist/esm/dist/esm/variables/macros/contextMacros.js +0 -43
- package/dist/esm/dist/esm/variables/macros/dataMacros.js +0 -134
- package/dist/esm/dist/esm/variables/macros/index.js +0 -26
- package/dist/esm/dist/esm/variables/macros/templateProxies.js +0 -51
- package/dist/esm/dist/esm/variables/macros/timeMacros.js +0 -86
- package/dist/esm/dist/esm/variables/macros/types.js +0 -11
- package/dist/esm/dist/esm/variables/macros/urlMacros.js +0 -56
- package/dist/esm/dist/esm/variables/sets/SceneVariableSet.js +0 -254
- package/dist/esm/dist/esm/variables/types.js +0 -11
- package/dist/esm/dist/esm/variables/utils.js +0 -172
- package/dist/esm/dist/esm/variables/variants/ConstantVariable.js +0 -38
- package/dist/esm/dist/esm/variables/variants/CustomVariable.js +0 -60
- package/dist/esm/dist/esm/variables/variants/DataSourceVariable.js +0 -88
- package/dist/esm/dist/esm/variables/variants/IntervalVariable.js +0 -117
- package/dist/esm/dist/esm/variables/variants/MultiValueVariable.js +0 -295
- package/dist/esm/dist/esm/variables/variants/TestVariable.js +0 -117
- package/dist/esm/dist/esm/variables/variants/TextBoxVariable.js +0 -61
- package/dist/esm/dist/esm/variables/variants/query/QueryVariable.js +0 -139
- package/dist/esm/dist/esm/variables/variants/query/createQueryVariableRunner.js +0 -129
- package/dist/esm/dist/esm/variables/variants/query/guards.js +0 -28
- package/dist/esm/dist/esm/variables/variants/query/toMetricFindValues.js +0 -96
- package/dist/esm/dist/esm/variables/variants/query/utils.js +0 -124
- package/dist/esm/querying/DataProviderSharer.js +0 -39
- package/dist/esm/src/behaviors/ActWhenVariableChanged.js +0 -27
- package/dist/esm/src/behaviors/CursorSync.js +0 -76
- package/dist/esm/src/behaviors/LiveNowTimer.js +0 -44
- package/dist/esm/src/behaviors/SceneQueryController.js +0 -60
- package/dist/esm/src/behaviors/index.js +0 -5
- package/dist/esm/src/components/EmbeddedScene.js +0 -59
- package/dist/esm/src/components/NestedScene.js +0 -95
- package/dist/esm/src/components/SceneApp/SceneApp.js +0 -37
- package/dist/esm/src/components/SceneApp/SceneAppPage.js +0 -176
- package/dist/esm/src/components/SceneApp/SceneAppPageView.js +0 -104
- package/dist/esm/src/components/SceneApp/utils.js +0 -42
- package/dist/esm/src/components/SceneByFrameRepeater.js +0 -41
- package/dist/esm/src/components/SceneByVariableRepeater.js +0 -55
- package/dist/esm/src/components/SceneCanvasText.js +0 -32
- package/dist/esm/src/components/SceneControlsSpacer.js +0 -17
- package/dist/esm/src/components/SceneDebugger/DebugDetails.js +0 -82
- package/dist/esm/src/components/SceneDebugger/DebugTreeNode.js +0 -72
- package/dist/esm/src/components/SceneDebugger/SceneDebugger.js +0 -77
- package/dist/esm/src/components/SceneReactObject.js +0 -34
- package/dist/esm/src/components/SceneRefreshPicker.js +0 -205
- package/dist/esm/src/components/SceneTimePicker.js +0 -139
- package/dist/esm/src/components/SceneTimeRangeCompare.js +0 -240
- package/dist/esm/src/components/SceneToolbarButton.js +0 -33
- package/dist/esm/src/components/VizPanel/VizPanel.js +0 -406
- package/dist/esm/src/components/VizPanel/VizPanelExploreButton.js +0 -44
- package/dist/esm/src/components/VizPanel/VizPanelMenu.js +0 -59
- package/dist/esm/src/components/VizPanel/VizPanelRenderer.js +0 -285
- package/dist/esm/src/components/VizPanel/VizPanelSeriesLimit.js +0 -45
- package/dist/esm/src/components/VizPanel/colorSeriesConfigFactory.js +0 -72
- package/dist/esm/src/components/VizPanel/registerRuntimePanelPlugin.js +0 -56
- package/dist/esm/src/components/VizPanel/seriesVisibilityConfigFactory.js +0 -164
- package/dist/esm/src/components/layout/CSSGrid/SceneCSSGridLayout.js +0 -124
- package/dist/esm/src/components/layout/LazyLoader.js +0 -103
- package/dist/esm/src/components/layout/SceneFlexLayout.js +0 -135
- package/dist/esm/src/components/layout/grid/SceneGridItem.js +0 -30
- package/dist/esm/src/components/layout/grid/SceneGridLayout.js +0 -283
- package/dist/esm/src/components/layout/grid/SceneGridLayoutRenderer.js +0 -178
- package/dist/esm/src/components/layout/grid/SceneGridRow.js +0 -190
- package/dist/esm/src/components/layout/grid/constants.js +0 -7
- package/dist/esm/src/components/layout/grid/utils.js +0 -36
- package/dist/esm/src/components/layout/split/SplitLayout.js +0 -17
- package/dist/esm/src/components/layout/split/SplitLayoutRenderer.js +0 -29
- package/dist/esm/src/components/layout/split/Splitter.js +0 -386
- package/dist/esm/src/core/PanelBuilders/FieldConfigBuilder.js +0 -100
- package/dist/esm/src/core/PanelBuilders/FieldConfigBuilders.js +0 -75
- package/dist/esm/src/core/PanelBuilders/FieldConfigOverridesBuilder.js +0 -75
- package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilder.js +0 -22
- package/dist/esm/src/core/PanelBuilders/PanelOptionsBuilders.js +0 -85
- package/dist/esm/src/core/PanelBuilders/StandardFieldConfigBuilders.js +0 -52
- package/dist/esm/src/core/PanelBuilders/VizConfigBuilder.js +0 -78
- package/dist/esm/src/core/PanelBuilders/VizConfigBuilders.js +0 -114
- package/dist/esm/src/core/PanelBuilders/VizPanelBuilder.js +0 -162
- package/dist/esm/src/core/PanelBuilders/index.js +0 -116
- package/dist/esm/src/core/SceneComponentWrapper.js +0 -57
- package/dist/esm/src/core/SceneDataNode.js +0 -43
- package/dist/esm/src/core/SceneObjectBase.js +0 -286
- package/dist/esm/src/core/SceneObjectRef.js +0 -32
- package/dist/esm/src/core/SceneTimeRange.js +0 -231
- package/dist/esm/src/core/SceneTimeRangeTransformerBase.js +0 -35
- package/dist/esm/src/core/SceneTimeZoneOverride.js +0 -63
- package/dist/esm/src/core/events.js +0 -11
- package/dist/esm/src/core/sceneGraph/getTimeRange.js +0 -10
- package/dist/esm/src/core/sceneGraph/index.js +0 -25
- package/dist/esm/src/core/sceneGraph/sceneGraph.js +0 -178
- package/dist/esm/src/core/sceneGraph/utils.js +0 -64
- package/dist/esm/src/core/types.js +0 -15
- package/dist/esm/src/index.js +0 -108
- package/dist/esm/src/querying/DataLayersMerger.js +0 -46
- package/dist/esm/src/querying/DataProviderProxy.js +0 -37
- package/dist/esm/src/querying/DataProviderSharer.js +0 -108
- package/dist/esm/src/querying/ExtraQueryProvider.js +0 -6
- package/dist/esm/src/querying/RuntimeDataSource.js +0 -49
- package/dist/esm/src/querying/SceneDataLayerSet.js +0 -100
- package/dist/esm/src/querying/SceneDataTransformer.js +0 -178
- package/dist/esm/src/querying/SceneQueryRunner.js +0 -468
- package/dist/esm/src/querying/extraQueryProcessingOperator.js +0 -46
- package/dist/esm/src/querying/getEnrichedDataRequest.js +0 -12
- package/dist/esm/src/querying/layers/SceneDataLayerBase.js +0 -112
- package/dist/esm/src/querying/layers/SceneDataLayerControls.js +0 -51
- package/dist/esm/src/querying/layers/annotations/AnnotationsDataLayer.js +0 -130
- package/dist/esm/src/querying/layers/annotations/filterAnnotations.js +0 -85
- package/dist/esm/src/querying/layers/annotations/standardAnnotationQuery.js +0 -121
- package/dist/esm/src/querying/layers/annotations/standardAnnotationsSupport.js +0 -211
- package/dist/esm/src/querying/layers/annotations/utils.js +0 -77
- package/dist/esm/src/querying/layers/index.js +0 -2
- package/dist/esm/src/querying/registerQueryWithController.js +0 -41
- package/dist/esm/src/services/SceneObjectUrlSyncConfig.js +0 -30
- package/dist/esm/src/services/UniqueUrlKeyMapper.js +0 -45
- package/dist/esm/src/services/UrlSyncContextProvider.js +0 -17
- package/dist/esm/src/services/UrlSyncManager.js +0 -167
- package/dist/esm/src/services/useUrlSync.js +0 -29
- package/dist/esm/src/services/utils.js +0 -75
- package/dist/esm/src/utils/ControlsLabel.js +0 -107
- package/dist/esm/src/utils/LoadingIndicator.js +0 -19
- package/dist/esm/src/utils/SafeSerializableSceneObject.js +0 -39
- package/dist/esm/src/utils/compatibility/setWindowGrafanaSceneContext.js +0 -16
- package/dist/esm/src/utils/date.js +0 -15
- package/dist/esm/src/utils/evaluateTimeRange.js +0 -16
- package/dist/esm/src/utils/explore.js +0 -47
- package/dist/esm/src/utils/getCompareSeriesRefId.js +0 -4
- package/dist/esm/src/utils/getDataSource.js +0 -18
- package/dist/esm/src/utils/getMessageFromError.js +0 -24
- package/dist/esm/src/utils/metricTree.js +0 -53
- package/dist/esm/src/utils/parseUrlParam.js +0 -41
- package/dist/esm/src/utils/utils.js +0 -11
- package/dist/esm/src/utils/wrapInSafeSerializableSceneObject.js +0 -30
- package/dist/esm/src/utils/writeSceneLog.js +0 -12
- package/dist/esm/src/variables/VariableDependencyConfig.js +0 -150
- package/dist/esm/src/variables/VariableValueRecorder.js +0 -71
- package/dist/esm/src/variables/adhoc/AdHocFilterBuilder.js +0 -24
- package/dist/esm/src/variables/adhoc/AdHocFilterRenderer.js +0 -303
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +0 -162
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +0 -20
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +0 -640
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +0 -65
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +0 -146
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +0 -114
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +0 -68
- package/dist/esm/src/variables/adhoc/AdHocFiltersCombobox/utils.js +0 -146
- package/dist/esm/src/variables/adhoc/AdHocFiltersVariable.js +0 -289
- package/dist/esm/src/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +0 -76
- package/dist/esm/src/variables/adhoc/getAdhocOptionSearcher.js +0 -13
- package/dist/esm/src/variables/adhoc/patchGetAdhocFilters.js +0 -47
- package/dist/esm/src/variables/components/VariableValueControl.js +0 -23
- package/dist/esm/src/variables/components/VariableValueInput.js +0 -33
- package/dist/esm/src/variables/components/VariableValueSelect.js +0 -228
- package/dist/esm/src/variables/components/VariableValueSelectors.js +0 -72
- package/dist/esm/src/variables/components/getOptionSearcher.js +0 -15
- package/dist/esm/src/variables/constants.js +0 -9
- package/dist/esm/src/variables/getEnrichedFiltersRequest.js +0 -12
- package/dist/esm/src/variables/groupby/GroupByVariable.js +0 -259
- package/dist/esm/src/variables/groupby/GroupByVariableUrlSyncHandler.js +0 -63
- package/dist/esm/src/variables/groupby/findActiveGroupByVariablesByUid.js +0 -13
- package/dist/esm/src/variables/interpolation/ScopedVarsVariable.js +0 -40
- package/dist/esm/src/variables/interpolation/defaults.js +0 -21
- package/dist/esm/src/variables/interpolation/fieldAccessorCache.js +0 -13
- package/dist/esm/src/variables/interpolation/formatRegistry.js +0 -296
- package/dist/esm/src/variables/interpolation/sceneInterpolator.js +0 -87
- package/dist/esm/src/variables/lookupVariable.js +0 -20
- package/dist/esm/src/variables/macros/AllVariablesMacro.js +0 -57
- package/dist/esm/src/variables/macros/contextMacros.js +0 -43
- package/dist/esm/src/variables/macros/dataMacros.js +0 -134
- package/dist/esm/src/variables/macros/index.js +0 -35
- package/dist/esm/src/variables/macros/templateProxies.js +0 -51
- package/dist/esm/src/variables/macros/timeMacros.js +0 -86
- package/dist/esm/src/variables/macros/types.js +0 -11
- package/dist/esm/src/variables/macros/urlMacros.js +0 -56
- package/dist/esm/src/variables/sets/SceneVariableSet.js +0 -254
- package/dist/esm/src/variables/types.js +0 -11
- package/dist/esm/src/variables/utils.js +0 -172
- package/dist/esm/src/variables/variants/ConstantVariable.js +0 -38
- package/dist/esm/src/variables/variants/CustomVariable.js +0 -60
- package/dist/esm/src/variables/variants/DataSourceVariable.js +0 -88
- package/dist/esm/src/variables/variants/IntervalVariable.js +0 -117
- package/dist/esm/src/variables/variants/JsonVariable.js +0 -193
- package/dist/esm/src/variables/variants/LocalValueVariable.js +0 -56
- package/dist/esm/src/variables/variants/MultiValueVariable.js +0 -295
- package/dist/esm/src/variables/variants/TestVariable.js +0 -117
- package/dist/esm/src/variables/variants/TextBoxVariable.js +0 -61
- package/dist/esm/src/variables/variants/guards.js +0 -27
- package/dist/esm/src/variables/variants/query/QueryVariable.js +0 -139
- package/dist/esm/src/variables/variants/query/createQueryVariableRunner.js +0 -129
- package/dist/esm/src/variables/variants/query/guards.js +0 -28
- package/dist/esm/src/variables/variants/query/toMetricFindValues.js +0 -96
- package/dist/esm/src/variables/variants/query/utils.js +0 -124
- package/dist/esm/variables/variants/JsonVariable.js +0 -96
- package/dist/esm/variables/variants/json/JsonVariable.js +0 -95
- package/dist/esm/variables/variants/json/JsonVariableOptionProviders.js +0 -70
|
@@ -1,406 +0,0 @@
|
|
|
1
|
-
import { toUtc, getPanelOptionsWithDefaults, renderMarkdown, applyFieldOverrides, compareArrayValues, compareDataFrameStructures, CoreApp, DashboardCursorSync, PanelPlugin, PluginType } from '@grafana/data';
|
|
2
|
-
import { getPluginImportUtils, config, getAppEvents } from '@grafana/runtime';
|
|
3
|
-
import { SceneObjectBase } from '../../core/SceneObjectBase.js';
|
|
4
|
-
import { sceneGraph } from '../../core/sceneGraph/index.js';
|
|
5
|
-
import { VizPanelRenderer } from './VizPanelRenderer.js';
|
|
6
|
-
import { VariableDependencyConfig } from '../../variables/VariableDependencyConfig.js';
|
|
7
|
-
import { seriesVisibilityConfigFactory } from './seriesVisibilityConfigFactory.js';
|
|
8
|
-
import { emptyPanelData } from '../../core/SceneDataNode.js';
|
|
9
|
-
import { changeSeriesColorConfigFactory } from './colorSeriesConfigFactory.js';
|
|
10
|
-
import { loadPanelPluginSync } from './registerRuntimePanelPlugin.js';
|
|
11
|
-
import { getCursorSyncScope } from '../../behaviors/CursorSync.js';
|
|
12
|
-
import { mergeWith, cloneDeep, isArray, merge, isEmpty } from 'lodash';
|
|
13
|
-
import { UserActionEvent } from '../../core/events.js';
|
|
14
|
-
import { evaluateTimeRange } from '../../utils/evaluateTimeRange.js';
|
|
15
|
-
import { LiveNowTimer } from '../../behaviors/LiveNowTimer.js';
|
|
16
|
-
|
|
17
|
-
var __defProp = Object.defineProperty;
|
|
18
|
-
var __defProps = Object.defineProperties;
|
|
19
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
20
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
21
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
22
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
23
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
24
|
-
var __spreadValues = (a, b) => {
|
|
25
|
-
for (var prop in b || (b = {}))
|
|
26
|
-
if (__hasOwnProp.call(b, prop))
|
|
27
|
-
__defNormalProp(a, prop, b[prop]);
|
|
28
|
-
if (__getOwnPropSymbols)
|
|
29
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
30
|
-
if (__propIsEnum.call(b, prop))
|
|
31
|
-
__defNormalProp(a, prop, b[prop]);
|
|
32
|
-
}
|
|
33
|
-
return a;
|
|
34
|
-
};
|
|
35
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
36
|
-
class VizPanel extends SceneObjectBase {
|
|
37
|
-
constructor(state) {
|
|
38
|
-
var _a;
|
|
39
|
-
super(__spreadValues({
|
|
40
|
-
options: {},
|
|
41
|
-
fieldConfig: { defaults: {}, overrides: [] },
|
|
42
|
-
title: "Title",
|
|
43
|
-
pluginId: "timeseries",
|
|
44
|
-
_renderCounter: 0
|
|
45
|
-
}, state));
|
|
46
|
-
this._variableDependency = new VariableDependencyConfig(this, {
|
|
47
|
-
statePaths: ["title", "options", "fieldConfig"]
|
|
48
|
-
});
|
|
49
|
-
this._structureRev = 0;
|
|
50
|
-
this.onTimeRangeChange = (timeRange) => {
|
|
51
|
-
const sceneTimeRange = sceneGraph.getTimeRange(this);
|
|
52
|
-
sceneTimeRange.onTimeRangeChange({
|
|
53
|
-
raw: {
|
|
54
|
-
from: toUtc(timeRange.from),
|
|
55
|
-
to: toUtc(timeRange.to)
|
|
56
|
-
},
|
|
57
|
-
from: toUtc(timeRange.from),
|
|
58
|
-
to: toUtc(timeRange.to)
|
|
59
|
-
});
|
|
60
|
-
};
|
|
61
|
-
this.getTimeRange = (data) => {
|
|
62
|
-
const liveNowTimer = sceneGraph.findObject(this, (o) => o instanceof LiveNowTimer);
|
|
63
|
-
const sceneTimeRange = sceneGraph.getTimeRange(this);
|
|
64
|
-
if (liveNowTimer instanceof LiveNowTimer && liveNowTimer.isEnabled) {
|
|
65
|
-
return evaluateTimeRange(
|
|
66
|
-
sceneTimeRange.state.from,
|
|
67
|
-
sceneTimeRange.state.to,
|
|
68
|
-
sceneTimeRange.getTimeZone(),
|
|
69
|
-
sceneTimeRange.state.fiscalYearStartMonth,
|
|
70
|
-
sceneTimeRange.state.UNSAFE_nowDelay
|
|
71
|
-
);
|
|
72
|
-
}
|
|
73
|
-
const plugin = this.getPlugin();
|
|
74
|
-
if (plugin && !plugin.meta.skipDataQuery && data && data.timeRange) {
|
|
75
|
-
return data.timeRange;
|
|
76
|
-
}
|
|
77
|
-
return sceneTimeRange.state.value;
|
|
78
|
-
};
|
|
79
|
-
this.onTitleChange = (title) => {
|
|
80
|
-
this.setState({ title });
|
|
81
|
-
};
|
|
82
|
-
this.onDescriptionChange = (description) => {
|
|
83
|
-
this.setState({ description });
|
|
84
|
-
};
|
|
85
|
-
this.onDisplayModeChange = (displayMode) => {
|
|
86
|
-
this.setState({ displayMode });
|
|
87
|
-
};
|
|
88
|
-
this.onToggleCollapse = (collapsed) => {
|
|
89
|
-
this.setState({
|
|
90
|
-
collapsed
|
|
91
|
-
});
|
|
92
|
-
};
|
|
93
|
-
this.onOptionsChange = (optionsUpdate, replace = false, isAfterPluginChange = false) => {
|
|
94
|
-
var _a;
|
|
95
|
-
const { fieldConfig, options } = this.state;
|
|
96
|
-
const nextOptions = replace ? optionsUpdate : mergeWith(cloneDeep(options), optionsUpdate, (objValue, srcValue, key, obj) => {
|
|
97
|
-
if (isArray(srcValue)) {
|
|
98
|
-
return srcValue;
|
|
99
|
-
}
|
|
100
|
-
if (objValue !== srcValue && typeof srcValue === "undefined") {
|
|
101
|
-
obj[key] = srcValue;
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
return;
|
|
105
|
-
});
|
|
106
|
-
const withDefaults = getPanelOptionsWithDefaults({
|
|
107
|
-
plugin: this._plugin,
|
|
108
|
-
currentOptions: nextOptions,
|
|
109
|
-
currentFieldConfig: fieldConfig,
|
|
110
|
-
isAfterPluginChange
|
|
111
|
-
});
|
|
112
|
-
this.setState({
|
|
113
|
-
options: withDefaults.options,
|
|
114
|
-
_renderCounter: ((_a = this.state._renderCounter) != null ? _a : 0) + 1
|
|
115
|
-
});
|
|
116
|
-
};
|
|
117
|
-
this.onFieldConfigChange = (fieldConfigUpdate, replace) => {
|
|
118
|
-
const { fieldConfig, options } = this.state;
|
|
119
|
-
const nextFieldConfig = replace ? fieldConfigUpdate : merge(cloneDeep(fieldConfig), fieldConfigUpdate);
|
|
120
|
-
const withDefaults = getPanelOptionsWithDefaults({
|
|
121
|
-
plugin: this._plugin,
|
|
122
|
-
currentOptions: options,
|
|
123
|
-
currentFieldConfig: nextFieldConfig,
|
|
124
|
-
isAfterPluginChange: false
|
|
125
|
-
});
|
|
126
|
-
this._dataWithFieldConfig = void 0;
|
|
127
|
-
this.setState({ fieldConfig: withDefaults.fieldConfig });
|
|
128
|
-
};
|
|
129
|
-
this.interpolate = (value, scoped, format) => {
|
|
130
|
-
return sceneGraph.interpolate(this, value, scoped, format);
|
|
131
|
-
};
|
|
132
|
-
this.getDescription = () => {
|
|
133
|
-
this.publishEvent(new UserActionEvent({ origin: this, interaction: "panel-description-shown" }), true);
|
|
134
|
-
const { description } = this.state;
|
|
135
|
-
if (description) {
|
|
136
|
-
const markdown = this.interpolate(description);
|
|
137
|
-
return renderMarkdown(markdown);
|
|
138
|
-
}
|
|
139
|
-
return "";
|
|
140
|
-
};
|
|
141
|
-
this.onCancelQuery = () => {
|
|
142
|
-
var _a;
|
|
143
|
-
this.publishEvent(new UserActionEvent({ origin: this, interaction: "panel-cancel-query-clicked" }), true);
|
|
144
|
-
const data = sceneGraph.getData(this);
|
|
145
|
-
(_a = data.cancelQuery) == null ? void 0 : _a.call(data);
|
|
146
|
-
};
|
|
147
|
-
this.onStatusMessageClick = () => {
|
|
148
|
-
this.publishEvent(new UserActionEvent({ origin: this, interaction: "panel-status-message-clicked" }), true);
|
|
149
|
-
};
|
|
150
|
-
this._onSeriesColorChange = (label, color) => {
|
|
151
|
-
this.onFieldConfigChange(changeSeriesColorConfigFactory(label, color, this.state.fieldConfig));
|
|
152
|
-
};
|
|
153
|
-
this._onSeriesVisibilityChange = (label, mode) => {
|
|
154
|
-
if (!this._dataWithFieldConfig) {
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
this.onFieldConfigChange(
|
|
158
|
-
seriesVisibilityConfigFactory(label, mode, this.state.fieldConfig, this._dataWithFieldConfig.series),
|
|
159
|
-
true
|
|
160
|
-
);
|
|
161
|
-
};
|
|
162
|
-
this._onInstanceStateChange = (state) => {
|
|
163
|
-
if (this._panelContext) {
|
|
164
|
-
this._panelContext = __spreadProps(__spreadValues({}, this._panelContext), {
|
|
165
|
-
instanceState: state
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
this.setState({ _pluginInstanceState: state });
|
|
169
|
-
};
|
|
170
|
-
this._onToggleLegendSort = (sortKey) => {
|
|
171
|
-
const legendOptions = this.state.options.legend;
|
|
172
|
-
if (!legendOptions) {
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
let sortDesc = legendOptions.sortDesc;
|
|
176
|
-
let sortBy = legendOptions.sortBy;
|
|
177
|
-
if (sortKey !== sortBy) {
|
|
178
|
-
sortDesc = void 0;
|
|
179
|
-
}
|
|
180
|
-
if (sortDesc === false) {
|
|
181
|
-
sortBy = void 0;
|
|
182
|
-
sortDesc = void 0;
|
|
183
|
-
} else {
|
|
184
|
-
sortDesc = !sortDesc;
|
|
185
|
-
sortBy = sortKey;
|
|
186
|
-
}
|
|
187
|
-
this.onOptionsChange(
|
|
188
|
-
__spreadProps(__spreadValues({}, this.state.options), {
|
|
189
|
-
legend: __spreadProps(__spreadValues({}, legendOptions), { sortBy, sortDesc })
|
|
190
|
-
}),
|
|
191
|
-
true
|
|
192
|
-
);
|
|
193
|
-
};
|
|
194
|
-
this.addActivationHandler(() => {
|
|
195
|
-
this._onActivate();
|
|
196
|
-
});
|
|
197
|
-
(_a = state.menu) == null ? void 0 : _a.addActivationHandler(() => {
|
|
198
|
-
this.publishEvent(new UserActionEvent({ origin: this, interaction: "panel-menu-shown" }), true);
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
_onActivate() {
|
|
202
|
-
if (!this._plugin) {
|
|
203
|
-
this._loadPlugin(this.state.pluginId);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
forceRender() {
|
|
207
|
-
var _a;
|
|
208
|
-
this.setState({ _renderCounter: ((_a = this.state._renderCounter) != null ? _a : 0) + 1 });
|
|
209
|
-
}
|
|
210
|
-
async _loadPlugin(pluginId, overwriteOptions, overwriteFieldConfig, isAfterPluginChange) {
|
|
211
|
-
const plugin = loadPanelPluginSync(pluginId);
|
|
212
|
-
if (plugin) {
|
|
213
|
-
this._pluginLoaded(plugin, overwriteOptions, overwriteFieldConfig, isAfterPluginChange);
|
|
214
|
-
} else {
|
|
215
|
-
const { importPanelPlugin } = getPluginImportUtils();
|
|
216
|
-
try {
|
|
217
|
-
const result = await importPanelPlugin(pluginId);
|
|
218
|
-
this._pluginLoaded(result, overwriteOptions, overwriteFieldConfig, isAfterPluginChange);
|
|
219
|
-
} catch (err) {
|
|
220
|
-
this._pluginLoaded(getPanelPluginNotFound(pluginId));
|
|
221
|
-
if (err instanceof Error) {
|
|
222
|
-
this.setState({ _pluginLoadError: err.message });
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
getLegacyPanelId() {
|
|
228
|
-
const panelId = parseInt(this.state.key.replace("panel-", ""), 10);
|
|
229
|
-
if (isNaN(panelId)) {
|
|
230
|
-
return 0;
|
|
231
|
-
}
|
|
232
|
-
return panelId;
|
|
233
|
-
}
|
|
234
|
-
async _pluginLoaded(plugin, overwriteOptions, overwriteFieldConfig, isAfterPluginChange) {
|
|
235
|
-
const { options, fieldConfig, title, pluginVersion, _UNSAFE_customMigrationHandler } = this.state;
|
|
236
|
-
const panel = {
|
|
237
|
-
title,
|
|
238
|
-
options,
|
|
239
|
-
fieldConfig,
|
|
240
|
-
id: this.getLegacyPanelId(),
|
|
241
|
-
type: plugin.meta.id,
|
|
242
|
-
pluginVersion
|
|
243
|
-
};
|
|
244
|
-
if (overwriteOptions) {
|
|
245
|
-
panel.options = overwriteOptions;
|
|
246
|
-
}
|
|
247
|
-
if (overwriteFieldConfig) {
|
|
248
|
-
panel.fieldConfig = overwriteFieldConfig;
|
|
249
|
-
}
|
|
250
|
-
const currentVersion = this._getPluginVersion(plugin);
|
|
251
|
-
_UNSAFE_customMigrationHandler == null ? void 0 : _UNSAFE_customMigrationHandler(panel, plugin);
|
|
252
|
-
if (plugin.onPanelMigration && currentVersion !== pluginVersion && !isAfterPluginChange) {
|
|
253
|
-
panel.options = await plugin.onPanelMigration(panel);
|
|
254
|
-
}
|
|
255
|
-
const withDefaults = getPanelOptionsWithDefaults({
|
|
256
|
-
plugin,
|
|
257
|
-
currentOptions: panel.options,
|
|
258
|
-
currentFieldConfig: panel.fieldConfig,
|
|
259
|
-
isAfterPluginChange: isAfterPluginChange != null ? isAfterPluginChange : false
|
|
260
|
-
});
|
|
261
|
-
this._plugin = plugin;
|
|
262
|
-
this.setState({
|
|
263
|
-
options: withDefaults.options,
|
|
264
|
-
fieldConfig: withDefaults.fieldConfig,
|
|
265
|
-
pluginVersion: currentVersion,
|
|
266
|
-
pluginId: plugin.meta.id
|
|
267
|
-
});
|
|
268
|
-
if (plugin.meta.skipDataQuery) {
|
|
269
|
-
const sceneTimeRange = sceneGraph.getTimeRange(this);
|
|
270
|
-
this._subs.add(sceneTimeRange.subscribeToState(() => this.forceRender()));
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
_getPluginVersion(plugin) {
|
|
274
|
-
return plugin && plugin.meta.info.version ? plugin.meta.info.version : config.buildInfo.version;
|
|
275
|
-
}
|
|
276
|
-
getPlugin() {
|
|
277
|
-
return this._plugin;
|
|
278
|
-
}
|
|
279
|
-
getPanelContext() {
|
|
280
|
-
var _a;
|
|
281
|
-
(_a = this._panelContext) != null ? _a : this._panelContext = this.buildPanelContext();
|
|
282
|
-
return this._panelContext;
|
|
283
|
-
}
|
|
284
|
-
async changePluginType(pluginId, newOptions, newFieldConfig) {
|
|
285
|
-
var _a, _b;
|
|
286
|
-
const { options: prevOptions, fieldConfig: prevFieldConfig, pluginId: prevPluginId } = this.state;
|
|
287
|
-
this._dataWithFieldConfig = void 0;
|
|
288
|
-
const isAfterPluginChange = this.state.pluginId !== pluginId;
|
|
289
|
-
await this._loadPlugin(pluginId, newOptions != null ? newOptions : {}, newFieldConfig, isAfterPluginChange);
|
|
290
|
-
const panel = {
|
|
291
|
-
title: this.state.title,
|
|
292
|
-
options: this.state.options,
|
|
293
|
-
fieldConfig: this.state.fieldConfig,
|
|
294
|
-
id: 1,
|
|
295
|
-
type: pluginId
|
|
296
|
-
};
|
|
297
|
-
const updatedOptions = (_b = (_a = this._plugin) == null ? void 0 : _a.onPanelTypeChanged) == null ? void 0 : _b.call(_a, panel, prevPluginId, prevOptions, prevFieldConfig);
|
|
298
|
-
if (updatedOptions && !isEmpty(updatedOptions)) {
|
|
299
|
-
this.onOptionsChange(updatedOptions, true, true);
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
clearFieldConfigCache() {
|
|
303
|
-
this._dataWithFieldConfig = void 0;
|
|
304
|
-
}
|
|
305
|
-
applyFieldConfig(rawData) {
|
|
306
|
-
var _a, _b, _c, _d;
|
|
307
|
-
const plugin = this._plugin;
|
|
308
|
-
if (!plugin || plugin.meta.skipDataQuery || !rawData) {
|
|
309
|
-
return emptyPanelData;
|
|
310
|
-
}
|
|
311
|
-
if (this._prevData === rawData && this._dataWithFieldConfig) {
|
|
312
|
-
return this._dataWithFieldConfig;
|
|
313
|
-
}
|
|
314
|
-
const pluginDataSupport = plugin.dataSupport || { alertStates: false, annotations: false };
|
|
315
|
-
const fieldConfigRegistry = plugin.fieldConfigRegistry;
|
|
316
|
-
const prevFrames = (_b = (_a = this._dataWithFieldConfig) == null ? void 0 : _a.series) != null ? _b : [];
|
|
317
|
-
const newFrames = applyFieldOverrides({
|
|
318
|
-
data: rawData.series,
|
|
319
|
-
fieldConfig: this.state.fieldConfig,
|
|
320
|
-
fieldConfigRegistry,
|
|
321
|
-
replaceVariables: this.interpolate,
|
|
322
|
-
theme: config.theme2,
|
|
323
|
-
timeZone: (_c = rawData.request) == null ? void 0 : _c.timezone
|
|
324
|
-
});
|
|
325
|
-
if (!compareArrayValues(newFrames, prevFrames, compareDataFrameStructures)) {
|
|
326
|
-
this._structureRev++;
|
|
327
|
-
}
|
|
328
|
-
this._dataWithFieldConfig = __spreadProps(__spreadValues({}, rawData), {
|
|
329
|
-
structureRev: this._structureRev,
|
|
330
|
-
series: newFrames
|
|
331
|
-
});
|
|
332
|
-
if (this._dataWithFieldConfig.annotations) {
|
|
333
|
-
this._dataWithFieldConfig.annotations = applyFieldOverrides({
|
|
334
|
-
data: this._dataWithFieldConfig.annotations,
|
|
335
|
-
fieldConfig: {
|
|
336
|
-
defaults: {},
|
|
337
|
-
overrides: []
|
|
338
|
-
},
|
|
339
|
-
fieldConfigRegistry,
|
|
340
|
-
replaceVariables: this.interpolate,
|
|
341
|
-
theme: config.theme2,
|
|
342
|
-
timeZone: (_d = rawData.request) == null ? void 0 : _d.timezone
|
|
343
|
-
});
|
|
344
|
-
}
|
|
345
|
-
if (!pluginDataSupport.alertStates) {
|
|
346
|
-
this._dataWithFieldConfig.alertState = void 0;
|
|
347
|
-
}
|
|
348
|
-
if (!pluginDataSupport.annotations) {
|
|
349
|
-
this._dataWithFieldConfig.annotations = void 0;
|
|
350
|
-
}
|
|
351
|
-
this._prevData = rawData;
|
|
352
|
-
return this._dataWithFieldConfig;
|
|
353
|
-
}
|
|
354
|
-
buildPanelContext() {
|
|
355
|
-
const sync = getCursorSyncScope(this);
|
|
356
|
-
const context = {
|
|
357
|
-
eventsScope: sync ? sync.getEventsScope() : "__global_",
|
|
358
|
-
eventBus: sync ? sync.getEventsBus(this) : getAppEvents(),
|
|
359
|
-
app: CoreApp.Unknown,
|
|
360
|
-
sync: () => {
|
|
361
|
-
if (sync) {
|
|
362
|
-
return sync.state.sync;
|
|
363
|
-
}
|
|
364
|
-
return DashboardCursorSync.Off;
|
|
365
|
-
},
|
|
366
|
-
onSeriesColorChange: this._onSeriesColorChange,
|
|
367
|
-
onToggleSeriesVisibility: this._onSeriesVisibilityChange,
|
|
368
|
-
onToggleLegendSort: this._onToggleLegendSort,
|
|
369
|
-
onInstanceStateChange: this._onInstanceStateChange
|
|
370
|
-
};
|
|
371
|
-
if (this.state.extendPanelContext) {
|
|
372
|
-
this.state.extendPanelContext(this, context);
|
|
373
|
-
}
|
|
374
|
-
return context;
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
VizPanel.Component = VizPanelRenderer;
|
|
378
|
-
function getPanelPluginNotFound(id) {
|
|
379
|
-
const plugin = new PanelPlugin(() => null);
|
|
380
|
-
plugin.meta = {
|
|
381
|
-
id,
|
|
382
|
-
name: id,
|
|
383
|
-
sort: 100,
|
|
384
|
-
type: PluginType.panel,
|
|
385
|
-
module: "",
|
|
386
|
-
baseUrl: "",
|
|
387
|
-
info: {
|
|
388
|
-
author: {
|
|
389
|
-
name: ""
|
|
390
|
-
},
|
|
391
|
-
description: "",
|
|
392
|
-
links: [],
|
|
393
|
-
logos: {
|
|
394
|
-
large: "",
|
|
395
|
-
small: "public/img/grafana_icon.svg"
|
|
396
|
-
},
|
|
397
|
-
screenshots: [],
|
|
398
|
-
updated: "",
|
|
399
|
-
version: ""
|
|
400
|
-
}
|
|
401
|
-
};
|
|
402
|
-
return plugin;
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
export { VizPanel };
|
|
406
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVml6UGFuZWwuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1ZpelBhbmVsL1ZpelBhbmVsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBYnNvbHV0ZVRpbWVSYW5nZSxcbiAgRmllbGRDb25maWdTb3VyY2UsXG4gIFBhbmVsTW9kZWwsXG4gIFBhbmVsUGx1Z2luLFxuICB0b1V0YyxcbiAgZ2V0UGFuZWxPcHRpb25zV2l0aERlZmF1bHRzLFxuICBTY29wZWRWYXJzLFxuICBJbnRlcnBvbGF0ZUZ1bmN0aW9uLFxuICBDb3JlQXBwLFxuICBEYXNoYm9hcmRDdXJzb3JTeW5jLFxuICBQYW5lbERhdGEsXG4gIGNvbXBhcmVBcnJheVZhbHVlcyxcbiAgY29tcGFyZURhdGFGcmFtZVN0cnVjdHVyZXMsXG4gIGFwcGx5RmllbGRPdmVycmlkZXMsXG4gIFBsdWdpblR5cGUsXG4gIHJlbmRlck1hcmtkb3duLFxuICBQYW5lbFBsdWdpbkRhdGFTdXBwb3J0LFxufSBmcm9tICdAZ3JhZmFuYS9kYXRhJztcbmltcG9ydCB7IFBhbmVsQ29udGV4dCwgU2VyaWVzVmlzaWJpbGl0eUNoYW5nZU1vZGUsIFZpekxlZ2VuZE9wdGlvbnMgfSBmcm9tICdAZ3JhZmFuYS91aSc7XG5pbXBvcnQgeyBjb25maWcsIGdldEFwcEV2ZW50cywgZ2V0UGx1Z2luSW1wb3J0VXRpbHMgfSBmcm9tICdAZ3JhZmFuYS9ydW50aW1lJztcbmltcG9ydCB7IFNjZW5lT2JqZWN0QmFzZSB9IGZyb20gJy4uLy4uL2NvcmUvU2NlbmVPYmplY3RCYXNlJztcbmltcG9ydCB7IHNjZW5lR3JhcGggfSBmcm9tICcuLi8uLi9jb3JlL3NjZW5lR3JhcGgnO1xuaW1wb3J0IHsgRGVlcFBhcnRpYWwsIFNjZW5lT2JqZWN0LCBTY2VuZU9iamVjdFN0YXRlIH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcyc7XG5cbmltcG9ydCB7IFZpelBhbmVsUmVuZGVyZXIgfSBmcm9tICcuL1ZpelBhbmVsUmVuZGVyZXInO1xuaW1wb3J0IHsgVml6UGFuZWxNZW51IH0gZnJvbSAnLi9WaXpQYW5lbE1lbnUnO1xuaW1wb3J0IHsgVmFyaWFibGVEZXBlbmRlbmN5Q29uZmlnIH0gZnJvbSAnLi4vLi4vdmFyaWFibGVzL1ZhcmlhYmxlRGVwZW5kZW5jeUNvbmZpZyc7XG5pbXBvcnQgeyBWYXJpYWJsZUN1c3RvbUZvcm1hdHRlckZuIH0gZnJvbSAnLi4vLi4vdmFyaWFibGVzL3R5cGVzJztcbmltcG9ydCB7IHNlcmllc1Zpc2liaWxpdHlDb25maWdGYWN0b3J5IH0gZnJvbSAnLi9zZXJpZXNWaXNpYmlsaXR5Q29uZmlnRmFjdG9yeSc7XG5pbXBvcnQgeyBlbXB0eVBhbmVsRGF0YSB9IGZyb20gJy4uLy4uL2NvcmUvU2NlbmVEYXRhTm9kZSc7XG5pbXBvcnQgeyBjaGFuZ2VTZXJpZXNDb2xvckNvbmZpZ0ZhY3RvcnkgfSBmcm9tICcuL2NvbG9yU2VyaWVzQ29uZmlnRmFjdG9yeSc7XG5pbXBvcnQgeyBsb2FkUGFuZWxQbHVnaW5TeW5jIH0gZnJvbSAnLi9yZWdpc3RlclJ1bnRpbWVQYW5lbFBsdWdpbic7XG5pbXBvcnQgeyBnZXRDdXJzb3JTeW5jU2NvcGUgfSBmcm9tICcuLi8uLi9iZWhhdmlvcnMvQ3Vyc29yU3luYyc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGlzQXJyYXksIGlzRW1wdHksIG1lcmdlLCBtZXJnZVdpdGggfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgVXNlckFjdGlvbkV2ZW50IH0gZnJvbSAnLi4vLi4vY29yZS9ldmVudHMnO1xuaW1wb3J0IHsgZXZhbHVhdGVUaW1lUmFuZ2UgfSBmcm9tICcuLi8uLi91dGlscy9ldmFsdWF0ZVRpbWVSYW5nZSc7XG5pbXBvcnQgeyBMaXZlTm93VGltZXIgfSBmcm9tICcuLi8uLi9iZWhhdmlvcnMvTGl2ZU5vd1RpbWVyJztcblxuZXhwb3J0IGludGVyZmFjZSBWaXpQYW5lbFN0YXRlPFRPcHRpb25zID0ge30sIFRGaWVsZENvbmZpZyA9IHt9PiBleHRlbmRzIFNjZW5lT2JqZWN0U3RhdGUge1xuICAvKipcbiAgICogVGhpcyBpcyB1c3VhbGx5IGEgcGx1Z2luIGlkIHRoYXQgcmVmZXJlbmNlcyBhIGNvcmUgcGx1Z2luIG9yIGFuIGV4dGVybmFsIHBsdWdpbi4gQnV0IHRoaXMgY2FuIGFsc28gcmVmZXJlbmNlIGFcbiAgICogcnVudGltZSByZWdpc3RlcmVkIFBhbmVsUGx1Z2luIHJlZ2lzdGVyZWQgdmlhIGZ1bmN0aW9uIHJlZ2lzdGVyU2NlbmVQYW5lbFBsdWdpbi5cbiAgICovXG4gIHBsdWdpbklkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBvcHRpb25zOiBEZWVwUGFydGlhbDxUT3B0aW9ucz47XG4gIGZpZWxkQ29uZmlnOiBGaWVsZENvbmZpZ1NvdXJjZTxEZWVwUGFydGlhbDxURmllbGRDb25maWc+PjtcbiAgcGx1Z2luVmVyc2lvbj86IHN0cmluZztcbiAgZGlzcGxheU1vZGU/OiAnZGVmYXVsdCcgfCAndHJhbnNwYXJlbnQnO1xuICAvKipcbiAgICogT25seSBzaG93cyBoZWFkZXIgb24gaG92ZXIsIGFic29sdXRseSBwb3NpdGlvbmVkIGFib3ZlIHRoZSBwYW5lbC5cbiAgICovXG4gIGhvdmVySGVhZGVyPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE9mZnNldCBob3ZlckhlYWRlciBwb3NpdGlvbiBvbiB0aGUgeSBheGlzXG4gICAqL1xuICBob3ZlckhlYWRlck9mZnNldD86IG51bWJlcjtcbiAgLyoqXG4gICAqIE9ubHkgc2hvd3Mgdml6UGFuZWxNZW51IG9uIGhvdmVyIGlmIGZhbHNlLCBvdGhlcndpc2UgdGhlIG1lbnUgaXMgYWx3YXlzIHZpc2libGUgaW4gdGhlIGhlYWRlclxuICAgKi9cbiAgc2hvd01lbnVBbHdheXM/OiBib29sZWFuO1xuICAvKipcbiAgICogRGVmaW5lcyBhIG1lbnUgaW4gdGhlIHRvcCByaWdodCBvZiB0aGUgcGFuZWwuIFRoZSBtZW51IG9iamVjdCBpcyBvbmx5IGFjdGl2YXRlZCB3aGVuIHRoZSBkcm9wZG93biBtZW51IGl0c2VsZiBpcyBzaG93bi5cbiAgICogU28gdGhlIGJlc3Qgd2F5IHRvIGFkZCBkeW5hbWljIG1lbnUgYWN0aW9ucyBhbmQgbGlua3MgaXMgYnkgYWRkaW5nIHRoZW0gaW4gYSBiZWhhdmlvciBhdHRhY2hlZCB0byB0aGUgbWVudS5cbiAgICovXG4gIG1lbnU/OiBWaXpQYW5lbE1lbnU7XG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgbWVudSB0aGF0IHJlbmRlcnMgcGFuZWwgbGluay5cbiAgICoqL1xuICB0aXRsZUl0ZW1zPzogUmVhY3QuUmVhY3ROb2RlIHwgU2NlbmVPYmplY3QgfCBTY2VuZU9iamVjdFtdO1xuICBzZXJpZXNMaW1pdD86IG51bWJlcjtcbiAgc2VyaWVzTGltaXRTaG93QWxsPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFkZCBhY3Rpb24gdG8gdGhlIHRvcCByaWdodCBwYW5lbCBoZWFkZXJcbiAgICovXG4gIGhlYWRlckFjdGlvbnM/OiBSZWFjdC5SZWFjdE5vZGUgfCBTY2VuZU9iamVjdCB8IFNjZW5lT2JqZWN0W107XG4gIC8qKlxuICAgKiBNYWlubHkgZm9yIGFkdmFuY2VkIHVzZSBjYXNlcyB0aGF0IG5lZWQgY3VzdG9tIGhhbmRsaW5nIG9mIFBhbmVsQ29udGV4dCBjYWxsYmFja3MuXG4gICAqL1xuICBleHRlbmRQYW5lbENvbnRleHQ/OiAodml6UGFuZWw6IFZpelBhbmVsLCBjb250ZXh0OiBQYW5lbENvbnRleHQpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFNldHMgcGFuZWwgY2hyb21lIGNvbGxhcHNlZCBzdGF0ZVxuICAgKi9cbiAgY29sbGFwc2libGU/OiBib29sZWFuO1xuICBjb2xsYXBzZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIE9ubHkgZm9yIHVzZSBmcm9tIGNvcmUgdG8gaGFuZGxlIG1pZ3JhdGlvbiBmcm9tIG9sZCBhbmd1bGFyIHBhbmVsc1xuICAgKiovXG4gIF9VTlNBRkVfY3VzdG9tTWlncmF0aW9uSGFuZGxlcj86IChwYW5lbDogUGFuZWxNb2RlbCwgcGx1Z2luOiBQYW5lbFBsdWdpbikgPT4gdm9pZDtcbiAgLyoqIEludGVybmFsICovXG4gIF9wbHVnaW5Mb2FkRXJyb3I/OiBzdHJpbmc7XG4gIC8qKiBJbnRlcm5hbCAqL1xuICBfcGx1Z2luSW5zdGFuY2VTdGF0ZT86IGFueTtcbiAgX3JlbmRlckNvdW50ZXI/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBWaXpQYW5lbDxUT3B0aW9ucyA9IHt9LCBURmllbGRDb25maWcgZXh0ZW5kcyB7fSA9IHt9PiBleHRlbmRzIFNjZW5lT2JqZWN0QmFzZTxcbiAgVml6UGFuZWxTdGF0ZTxUT3B0aW9ucywgVEZpZWxkQ29uZmlnPlxuPiB7XG4gIHB1YmxpYyBzdGF0aWMgQ29tcG9uZW50ID0gVml6UGFuZWxSZW5kZXJlcjtcblxuICBwcm90ZWN0ZWQgX3ZhcmlhYmxlRGVwZW5kZW5jeSA9IG5ldyBWYXJpYWJsZURlcGVuZGVuY3lDb25maWcodGhpcywge1xuICAgIHN0YXRlUGF0aHM6IFsndGl0bGUnLCAnb3B0aW9ucycsICdmaWVsZENvbmZpZyddLFxuICB9KTtcblxuICAvLyBOb3QgcGFydCBvZiBzdGF0ZSBhcyB0aGlzIGlzIG5vdCBzZXJpYWxpemFibGVcbiAgcHJvdGVjdGVkIF9wYW5lbENvbnRleHQ/OiBQYW5lbENvbnRleHQ7XG4gIHByaXZhdGUgX3BsdWdpbj86IFBhbmVsUGx1Z2luO1xuICBwcml2YXRlIF9wcmV2RGF0YT86IFBhbmVsRGF0YTtcbiAgcHJpdmF0ZSBfZGF0YVdpdGhGaWVsZENvbmZpZz86IFBhbmVsRGF0YTtcbiAgcHJpdmF0ZSBfc3RydWN0dXJlUmV2OiBudW1iZXIgPSAwO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzdGF0ZTogUGFydGlhbDxWaXpQYW5lbFN0YXRlPFRPcHRpb25zLCBURmllbGRDb25maWc+Pikge1xuICAgIHN1cGVyKHtcbiAgICAgIG9wdGlvbnM6IHt9IGFzIFRPcHRpb25zLFxuICAgICAgZmllbGRDb25maWc6IHsgZGVmYXVsdHM6IHt9LCBvdmVycmlkZXM6IFtdIH0sXG4gICAgICB0aXRsZTogJ1RpdGxlJyxcbiAgICAgIHBsdWdpbklkOiAndGltZXNlcmllcycsXG4gICAgICBfcmVuZGVyQ291bnRlcjogMCxcbiAgICAgIC4uLnN0YXRlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRBY3RpdmF0aW9uSGFuZGxlcigoKSA9PiB7XG4gICAgICB0aGlzLl9vbkFjdGl2YXRlKCk7XG4gICAgfSk7XG5cbiAgICBzdGF0ZS5tZW51Py5hZGRBY3RpdmF0aW9uSGFuZGxlcigoKSA9PiB7XG4gICAgICB0aGlzLnB1Ymxpc2hFdmVudChuZXcgVXNlckFjdGlvbkV2ZW50KHsgb3JpZ2luOiB0aGlzLCBpbnRlcmFjdGlvbjogJ3BhbmVsLW1lbnUtc2hvd24nIH0pLCB0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX29uQWN0aXZhdGUoKSB7XG4gICAgaWYgKCF0aGlzLl9wbHVnaW4pIHtcbiAgICAgIHRoaXMuX2xvYWRQbHVnaW4odGhpcy5zdGF0ZS5wbHVnaW5JZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZvcmNlUmVuZGVyKCk6IHZvaWQge1xuICAgIC8vIEluY3JlbWVudGluZyB0aGUgcmVuZGVyIGNvdW50ZXIgbWVhbnMgVml6UmVwZWF0ZXIgYW5kIGl0cyBjaGlsZHJlbiB3aWxsIGFsc28gcmUtcmVuZGVyXG4gICAgdGhpcy5zZXRTdGF0ZSh7IF9yZW5kZXJDb3VudGVyOiAodGhpcy5zdGF0ZS5fcmVuZGVyQ291bnRlciA/PyAwKSArIDEgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9sb2FkUGx1Z2luKFxuICAgIHBsdWdpbklkOiBzdHJpbmcsXG4gICAgb3ZlcndyaXRlT3B0aW9ucz86IERlZXBQYXJ0aWFsPHt9PixcbiAgICBvdmVyd3JpdGVGaWVsZENvbmZpZz86IEZpZWxkQ29uZmlnU291cmNlLFxuICAgIGlzQWZ0ZXJQbHVnaW5DaGFuZ2U/OiBib29sZWFuXG4gICkge1xuICAgIGNvbnN0IHBsdWdpbiA9IGxvYWRQYW5lbFBsdWdpblN5bmMocGx1Z2luSWQpO1xuXG4gICAgaWYgKHBsdWdpbikge1xuICAgICAgdGhpcy5fcGx1Z2luTG9hZGVkKHBsdWdpbiwgb3ZlcndyaXRlT3B0aW9ucywgb3ZlcndyaXRlRmllbGRDb25maWcsIGlzQWZ0ZXJQbHVnaW5DaGFuZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IGltcG9ydFBhbmVsUGx1Z2luIH0gPSBnZXRQbHVnaW5JbXBvcnRVdGlscygpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbXBvcnRQYW5lbFBsdWdpbihwbHVnaW5JZCk7XG4gICAgICAgIHRoaXMuX3BsdWdpbkxvYWRlZChyZXN1bHQsIG92ZXJ3cml0ZU9wdGlvbnMsIG92ZXJ3cml0ZUZpZWxkQ29uZmlnLCBpc0FmdGVyUGx1Z2luQ2hhbmdlKTtcbiAgICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgICB0aGlzLl9wbHVnaW5Mb2FkZWQoZ2V0UGFuZWxQbHVnaW5Ob3RGb3VuZChwbHVnaW5JZCkpO1xuXG4gICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBfcGx1Z2luTG9hZEVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRMZWdhY3lQYW5lbElkKCkge1xuICAgIGNvbnN0IHBhbmVsSWQgPSBwYXJzZUludCh0aGlzLnN0YXRlLmtleSEucmVwbGFjZSgncGFuZWwtJywgJycpLCAxMCk7XG4gICAgaWYgKGlzTmFOKHBhbmVsSWQpKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFuZWxJZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3BsdWdpbkxvYWRlZChcbiAgICBwbHVnaW46IFBhbmVsUGx1Z2luLFxuICAgIG92ZXJ3cml0ZU9wdGlvbnM/OiBEZWVwUGFydGlhbDx7fT4sXG4gICAgb3ZlcndyaXRlRmllbGRDb25maWc/OiBGaWVsZENvbmZpZ1NvdXJjZSxcbiAgICBpc0FmdGVyUGx1Z2luQ2hhbmdlPzogYm9vbGVhblxuICApIHtcbiAgICBjb25zdCB7IG9wdGlvbnMsIGZpZWxkQ29uZmlnLCB0aXRsZSwgcGx1Z2luVmVyc2lvbiwgX1VOU0FGRV9jdXN0b21NaWdyYXRpb25IYW5kbGVyIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgcGFuZWw6IFBhbmVsTW9kZWwgPSB7XG4gICAgICB0aXRsZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBmaWVsZENvbmZpZyxcbiAgICAgIGlkOiB0aGlzLmdldExlZ2FjeVBhbmVsSWQoKSxcbiAgICAgIHR5cGU6IHBsdWdpbi5tZXRhLmlkLFxuICAgICAgcGx1Z2luVmVyc2lvbjogcGx1Z2luVmVyc2lvbixcbiAgICB9O1xuXG4gICAgaWYgKG92ZXJ3cml0ZU9wdGlvbnMpIHtcbiAgICAgIHBhbmVsLm9wdGlvbnMgPSBvdmVyd3JpdGVPcHRpb25zO1xuICAgIH1cblxuICAgIGlmIChvdmVyd3JpdGVGaWVsZENvbmZpZykge1xuICAgICAgcGFuZWwuZmllbGRDb25maWcgPSBvdmVyd3JpdGVGaWVsZENvbmZpZztcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VmVyc2lvbiA9IHRoaXMuX2dldFBsdWdpblZlcnNpb24ocGx1Z2luKTtcblxuICAgIF9VTlNBRkVfY3VzdG9tTWlncmF0aW9uSGFuZGxlcj8uKHBhbmVsLCBwbHVnaW4pO1xuXG4gICAgaWYgKHBsdWdpbi5vblBhbmVsTWlncmF0aW9uICYmIGN1cnJlbnRWZXJzaW9uICE9PSBwbHVnaW5WZXJzaW9uICYmICFpc0FmdGVyUGx1Z2luQ2hhbmdlKSB7XG4gICAgICAvLyBUaGVzZSBtaWdyYXRpb24gaGFuZGxlcnMgYWxzbyBtdXRhdGUgcGFuZWwuZmllbGRDb25maWcgdG8gbWlncmF0ZSBmaWVsZENvbmZpZ1xuICAgICAgcGFuZWwub3B0aW9ucyA9IGF3YWl0IHBsdWdpbi5vblBhbmVsTWlncmF0aW9uKHBhbmVsKTtcbiAgICB9XG5cbiAgICBjb25zdCB3aXRoRGVmYXVsdHMgPSBnZXRQYW5lbE9wdGlvbnNXaXRoRGVmYXVsdHMoe1xuICAgICAgcGx1Z2luLFxuICAgICAgY3VycmVudE9wdGlvbnM6IHBhbmVsLm9wdGlvbnMsXG4gICAgICBjdXJyZW50RmllbGRDb25maWc6IHBhbmVsLmZpZWxkQ29uZmlnLFxuICAgICAgaXNBZnRlclBsdWdpbkNoYW5nZTogaXNBZnRlclBsdWdpbkNoYW5nZSA/PyBmYWxzZSxcbiAgICB9KTtcblxuICAgIHRoaXMuX3BsdWdpbiA9IHBsdWdpbjtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgb3B0aW9uczogd2l0aERlZmF1bHRzLm9wdGlvbnMgYXMgRGVlcFBhcnRpYWw8VE9wdGlvbnM+LFxuICAgICAgZmllbGRDb25maWc6IHdpdGhEZWZhdWx0cy5maWVsZENvbmZpZyxcbiAgICAgIHBsdWdpblZlcnNpb246IGN1cnJlbnRWZXJzaW9uLFxuICAgICAgcGx1Z2luSWQ6IHBsdWdpbi5tZXRhLmlkLFxuICAgIH0pO1xuXG4gICAgLy8gTm9uIGRhdGEgcGFuZWxzIG5lZWRzIHRvIGJlIHJlLXJlbmRlcmVkIHdoZW4gdGltZSByYW5nZSBjaGFuZ2VcbiAgICBpZiAocGx1Z2luLm1ldGEuc2tpcERhdGFRdWVyeSkge1xuICAgICAgY29uc3Qgc2NlbmVUaW1lUmFuZ2UgPSBzY2VuZUdyYXBoLmdldFRpbWVSYW5nZSh0aGlzKTtcbiAgICAgIHRoaXMuX3N1YnMuYWRkKHNjZW5lVGltZVJhbmdlLnN1YnNjcmliZVRvU3RhdGUoKCkgPT4gdGhpcy5mb3JjZVJlbmRlcigpKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UGx1Z2luVmVyc2lvbihwbHVnaW46IFBhbmVsUGx1Z2luKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGx1Z2luICYmIHBsdWdpbi5tZXRhLmluZm8udmVyc2lvbiA/IHBsdWdpbi5tZXRhLmluZm8udmVyc2lvbiA6IGNvbmZpZy5idWlsZEluZm8udmVyc2lvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQbHVnaW4oKTogUGFuZWxQbHVnaW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wbHVnaW47XG4gIH1cblxuICBwdWJsaWMgZ2V0UGFuZWxDb250ZXh0KCk6IFBhbmVsQ29udGV4dCB7XG4gICAgdGhpcy5fcGFuZWxDb250ZXh0ID8/PSB0aGlzLmJ1aWxkUGFuZWxDb250ZXh0KCk7XG5cbiAgICByZXR1cm4gdGhpcy5fcGFuZWxDb250ZXh0ITtcbiAgfVxuXG4gIHB1YmxpYyBvblRpbWVSYW5nZUNoYW5nZSA9ICh0aW1lUmFuZ2U6IEFic29sdXRlVGltZVJhbmdlKSA9PiB7XG4gICAgY29uc3Qgc2NlbmVUaW1lUmFuZ2UgPSBzY2VuZUdyYXBoLmdldFRpbWVSYW5nZSh0aGlzKTtcbiAgICBzY2VuZVRpbWVSYW5nZS5vblRpbWVSYW5nZUNoYW5nZSh7XG4gICAgICByYXc6IHtcbiAgICAgICAgZnJvbTogdG9VdGModGltZVJhbmdlLmZyb20pLFxuICAgICAgICB0bzogdG9VdGModGltZVJhbmdlLnRvKSxcbiAgICAgIH0sXG4gICAgICBmcm9tOiB0b1V0Yyh0aW1lUmFuZ2UuZnJvbSksXG4gICAgICB0bzogdG9VdGModGltZVJhbmdlLnRvKSxcbiAgICB9KTtcbiAgfTtcblxuICBwdWJsaWMgZ2V0VGltZVJhbmdlID0gKGRhdGE/OiBQYW5lbERhdGEpID0+IHtcbiAgICBjb25zdCBsaXZlTm93VGltZXIgPSBzY2VuZUdyYXBoLmZpbmRPYmplY3QodGhpcywgKG8pID0+IG8gaW5zdGFuY2VvZiBMaXZlTm93VGltZXIpO1xuICAgIGNvbnN0IHNjZW5lVGltZVJhbmdlID0gc2NlbmVHcmFwaC5nZXRUaW1lUmFuZ2UodGhpcyk7XG4gICAgaWYgKGxpdmVOb3dUaW1lciBpbnN0YW5jZW9mIExpdmVOb3dUaW1lciAmJiBsaXZlTm93VGltZXIuaXNFbmFibGVkKSB7XG4gICAgICByZXR1cm4gZXZhbHVhdGVUaW1lUmFuZ2UoXG4gICAgICAgIHNjZW5lVGltZVJhbmdlLnN0YXRlLmZyb20sXG4gICAgICAgIHNjZW5lVGltZVJhbmdlLnN0YXRlLnRvLFxuICAgICAgICBzY2VuZVRpbWVSYW5nZS5nZXRUaW1lWm9uZSgpLFxuICAgICAgICBzY2VuZVRpbWVSYW5nZS5zdGF0ZS5maXNjYWxZZWFyU3RhcnRNb250aCxcbiAgICAgICAgc2NlbmVUaW1lUmFuZ2Uuc3RhdGUuVU5TQUZFX25vd0RlbGF5XG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMuZ2V0UGx1Z2luKCk7XG4gICAgaWYgKHBsdWdpbiAmJiAhcGx1Z2luLm1ldGEuc2tpcERhdGFRdWVyeSAmJiBkYXRhICYmIGRhdGEudGltZVJhbmdlKSB7XG4gICAgICByZXR1cm4gZGF0YS50aW1lUmFuZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjZW5lVGltZVJhbmdlLnN0YXRlLnZhbHVlO1xuICB9O1xuXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VQbHVnaW5UeXBlKHBsdWdpbklkOiBzdHJpbmcsIG5ld09wdGlvbnM/OiBEZWVwUGFydGlhbDx7fT4sIG5ld0ZpZWxkQ29uZmlnPzogRmllbGRDb25maWdTb3VyY2UpIHtcbiAgICBjb25zdCB7IG9wdGlvbnM6IHByZXZPcHRpb25zLCBmaWVsZENvbmZpZzogcHJldkZpZWxkQ29uZmlnLCBwbHVnaW5JZDogcHJldlBsdWdpbklkIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy9jbGVhciBmaWVsZCBjb25maWcgY2FjaGUgdG8gdXBkYXRlIGl0IGxhdGVyXG4gICAgdGhpcy5fZGF0YVdpdGhGaWVsZENvbmZpZyA9IHVuZGVmaW5lZDtcblxuICAgIC8vIElmIHN0YXRlLnBsdWdpbklkIGlzIGFscmVhZHkgdGhlIGNvcnJlY3QgcGx1Z2luIHdlIGRvbid0IHRyZWF0IHRoaXMgYXMgcGxhaW4gdXNlciBwYW5lbCB0eXBlIGNoYW5nZVxuICAgIGNvbnN0IGlzQWZ0ZXJQbHVnaW5DaGFuZ2UgPSB0aGlzLnN0YXRlLnBsdWdpbklkICE9PSBwbHVnaW5JZDtcbiAgICBhd2FpdCB0aGlzLl9sb2FkUGx1Z2luKHBsdWdpbklkLCBuZXdPcHRpb25zID8/IHt9LCBuZXdGaWVsZENvbmZpZywgaXNBZnRlclBsdWdpbkNoYW5nZSk7XG5cbiAgICBjb25zdCBwYW5lbDogUGFuZWxNb2RlbCA9IHtcbiAgICAgIHRpdGxlOiB0aGlzLnN0YXRlLnRpdGxlLFxuICAgICAgb3B0aW9uczogdGhpcy5zdGF0ZS5vcHRpb25zLFxuICAgICAgZmllbGRDb25maWc6IHRoaXMuc3RhdGUuZmllbGRDb25maWcsXG4gICAgICBpZDogMSxcbiAgICAgIHR5cGU6IHBsdWdpbklkLFxuICAgIH07XG5cbiAgICAvLyBvblBhbmVsVHlwZUNoYW5nZWQgaXMgbWFpbmx5IHVzZWQgYnkgcGx1Z2lucyB0byBtaWdyYXRlIGZyb20gQW5ndWxhciB0byBSZWFjdC5cbiAgICAvLyBGb3IgZXhhbXBsZSwgdGhpcyB3aWxsIG1pZ3JhdGUgb3B0aW9ucyBmcm9tICdncmFwaCcgdG8gJ3RpbWVzZXJpZXMnIGlmIHRoZSBwcmV2aW91cyBhbmQgbmV3IHBsdWdpbiBJRCBtYXRjaGVzLlxuICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0gdGhpcy5fcGx1Z2luPy5vblBhbmVsVHlwZUNoYW5nZWQ/LihwYW5lbCwgcHJldlBsdWdpbklkLCBwcmV2T3B0aW9ucywgcHJldkZpZWxkQ29uZmlnKTtcblxuICAgIGlmICh1cGRhdGVkT3B0aW9ucyAmJiAhaXNFbXB0eSh1cGRhdGVkT3B0aW9ucykpIHtcbiAgICAgIHRoaXMub25PcHRpb25zQ2hhbmdlKHVwZGF0ZWRPcHRpb25zLCB0cnVlLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25UaXRsZUNoYW5nZSA9ICh0aXRsZTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHRpdGxlIH0pO1xuICB9O1xuXG4gIHB1YmxpYyBvbkRlc2NyaXB0aW9uQ2hhbmdlID0gKGRlc2NyaXB0aW9uOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgZGVzY3JpcHRpb24gfSk7XG4gIH07XG5cbiAgcHVibGljIG9uRGlzcGxheU1vZGVDaGFuZ2UgPSAoZGlzcGxheU1vZGU6ICdkZWZhdWx0JyB8ICd0cmFuc3BhcmVudCcpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgZGlzcGxheU1vZGUgfSk7XG4gIH07XG5cbiAgcHVibGljIG9uVG9nZ2xlQ29sbGFwc2UgPSAoY29sbGFwc2VkOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjb2xsYXBzZWQsXG4gICAgfSk7XG4gIH07XG5cbiAgcHVibGljIG9uT3B0aW9uc0NoYW5nZSA9IChvcHRpb25zVXBkYXRlOiBEZWVwUGFydGlhbDxUT3B0aW9ucz4sIHJlcGxhY2UgPSBmYWxzZSwgaXNBZnRlclBsdWdpbkNoYW5nZSA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3QgeyBmaWVsZENvbmZpZywgb3B0aW9ucyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFdoZW4gcmVwbGFjZSBpcyB0cnVlLCB3ZSB3YW50IHRvIHJlcGxhY2UgdGhlIGVudGlyZSBvcHRpb25zIG9iamVjdC4gRGVmYXVsdCB3aWxsIGJlIGFwcGxpZWQuXG4gICAgY29uc3QgbmV4dE9wdGlvbnMgPSByZXBsYWNlXG4gICAgICA/IG9wdGlvbnNVcGRhdGVcbiAgICAgIDogbWVyZ2VXaXRoKGNsb25lRGVlcChvcHRpb25zKSwgb3B0aW9uc1VwZGF0ZSwgKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmopID0+IHtcbiAgICAgICAgICBpZiAoaXNBcnJheShzcmNWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzcmNWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSWYgY3VzdG9taXplciByZXR1cm5zIHVuZGVmaW5lZCwgbWVyZ2luZyBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZFxuICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gb3ZlcnJpZGUgdGhlIHZhbHVlIGluIHRoZSBvYmplY3QgaW5zdGVhZFxuICAgICAgICAgIGlmIChvYmpWYWx1ZSAhPT0gc3JjVmFsdWUgJiYgdHlwZW9mIHNyY1ZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgb2JqW2tleV0gPSBzcmNWYWx1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9KTtcblxuICAgIGNvbnN0IHdpdGhEZWZhdWx0cyA9IGdldFBhbmVsT3B0aW9uc1dpdGhEZWZhdWx0cyh7XG4gICAgICBwbHVnaW46IHRoaXMuX3BsdWdpbiEsXG4gICAgICBjdXJyZW50T3B0aW9uczogbmV4dE9wdGlvbnMsXG4gICAgICBjdXJyZW50RmllbGRDb25maWc6IGZpZWxkQ29uZmlnLFxuICAgICAgaXNBZnRlclBsdWdpbkNoYW5nZTogaXNBZnRlclBsdWdpbkNoYW5nZSxcbiAgICB9KTtcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgb3B0aW9uczogd2l0aERlZmF1bHRzLm9wdGlvbnMgYXMgRGVlcFBhcnRpYWw8VE9wdGlvbnM+LFxuICAgICAgX3JlbmRlckNvdW50ZXI6ICh0aGlzLnN0YXRlLl9yZW5kZXJDb3VudGVyID8/IDApICsgMSxcbiAgICB9KTtcbiAgfTtcblxuICBwdWJsaWMgb25GaWVsZENvbmZpZ0NoYW5nZSA9IChmaWVsZENvbmZpZ1VwZGF0ZTogRmllbGRDb25maWdTb3VyY2U8RGVlcFBhcnRpYWw8VEZpZWxkQ29uZmlnPj4sIHJlcGxhY2U/OiBib29sZWFuKSA9PiB7XG4gICAgY29uc3QgeyBmaWVsZENvbmZpZywgb3B0aW9ucyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIC8vIFdoZW4gcmVwbGFjZSBpcyB0cnVlLCB3ZSB3YW50IHRvIHJlcGxhY2UgdGhlIGVudGlyZSBmaWVsZCBjb25maWcuIERlZmF1bHQgd2lsbCBiZSBhcHBsaWVkLlxuICAgIGNvbnN0IG5leHRGaWVsZENvbmZpZyA9IHJlcGxhY2UgPyBmaWVsZENvbmZpZ1VwZGF0ZSA6IG1lcmdlKGNsb25lRGVlcChmaWVsZENvbmZpZyksIGZpZWxkQ29uZmlnVXBkYXRlKTtcblxuICAgIGNvbnN0IHdpdGhEZWZhdWx0cyA9IGdldFBhbmVsT3B0aW9uc1dpdGhEZWZhdWx0cyh7XG4gICAgICBwbHVnaW46IHRoaXMuX3BsdWdpbiEsXG4gICAgICBjdXJyZW50T3B0aW9uczogb3B0aW9ucyxcbiAgICAgIGN1cnJlbnRGaWVsZENvbmZpZzogbmV4dEZpZWxkQ29uZmlnLFxuICAgICAgaXNBZnRlclBsdWdpbkNoYW5nZTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9kYXRhV2l0aEZpZWxkQ29uZmlnID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBmaWVsZENvbmZpZzogd2l0aERlZmF1bHRzLmZpZWxkQ29uZmlnIH0pO1xuICB9O1xuXG4gIHB1YmxpYyBpbnRlcnBvbGF0ZSA9ICgodmFsdWU6IHN0cmluZywgc2NvcGVkPzogU2NvcGVkVmFycywgZm9ybWF0Pzogc3RyaW5nIHwgVmFyaWFibGVDdXN0b21Gb3JtYXR0ZXJGbikgPT4ge1xuICAgIHJldHVybiBzY2VuZUdyYXBoLmludGVycG9sYXRlKHRoaXMsIHZhbHVlLCBzY29wZWQsIGZvcm1hdCk7XG4gIH0pIGFzIEludGVycG9sYXRlRnVuY3Rpb247XG5cbiAgcHVibGljIGdldERlc2NyaXB0aW9uID0gKCkgPT4ge1xuICAgIHRoaXMucHVibGlzaEV2ZW50KG5ldyBVc2VyQWN0aW9uRXZlbnQoeyBvcmlnaW46IHRoaXMsIGludGVyYWN0aW9uOiAncGFuZWwtZGVzY3JpcHRpb24tc2hvd24nIH0pLCB0cnVlKTtcblxuICAgIGNvbnN0IHsgZGVzY3JpcHRpb24gfSA9IHRoaXMuc3RhdGU7XG4gICAgaWYgKGRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBtYXJrZG93biA9IHRoaXMuaW50ZXJwb2xhdGUoZGVzY3JpcHRpb24pO1xuICAgICAgcmV0dXJuIHJlbmRlck1hcmtkb3duKG1hcmtkb3duKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9O1xuXG4gIHB1YmxpYyBjbGVhckZpZWxkQ29uZmlnQ2FjaGUoKSB7XG4gICAgdGhpcy5fZGF0YVdpdGhGaWVsZENvbmZpZyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgZnJvbSB0aGUgcmVhY3QgcmVuZGVyIHBhdGggdG8gYXBwbHkgdGhlIGZpZWxkIGNvbmZpZyB0byB0aGUgZGF0YSBwcm92aWRlZCBieSB0aGUgZGF0YSBwcm92aWRlclxuICAgKi9cbiAgcHVibGljIGFwcGx5RmllbGRDb25maWcocmF3RGF0YT86IFBhbmVsRGF0YSk6IFBhbmVsRGF0YSB7XG4gICAgY29uc3QgcGx1Z2luID0gdGhpcy5fcGx1Z2luO1xuXG4gICAgaWYgKCFwbHVnaW4gfHwgcGx1Z2luLm1ldGEuc2tpcERhdGFRdWVyeSB8fCAhcmF3RGF0YSkge1xuICAgICAgLy8gVE9ETyBzZXR1cCB0aW1lIHJhbmdlIHN1YnNjcmlwdGlvbiBpbnN0ZWFkXG4gICAgICByZXR1cm4gZW1wdHlQYW5lbERhdGE7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGRhdGEgaXMgdGhlIHNhbWUgYXMgbGFzdCB0aW1lLCB3ZSBjYW4gc2tpcCB0aGUgZmllbGQgY29uZmlnIGFwcGx5IHN0ZXAgYW5kIGp1c3QgcmV0dXJuIHNhbWUgcmVzdWx0IGFzIGxhc3QgdGltZVxuICAgIGlmICh0aGlzLl9wcmV2RGF0YSA9PT0gcmF3RGF0YSAmJiB0aGlzLl9kYXRhV2l0aEZpZWxkQ29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGF0YVdpdGhGaWVsZENvbmZpZztcbiAgICB9XG5cbiAgICBjb25zdCBwbHVnaW5EYXRhU3VwcG9ydDogUGFuZWxQbHVnaW5EYXRhU3VwcG9ydCA9IHBsdWdpbi5kYXRhU3VwcG9ydCB8fCB7IGFsZXJ0U3RhdGVzOiBmYWxzZSwgYW5ub3RhdGlvbnM6IGZhbHNlIH07XG5cbiAgICBjb25zdCBmaWVsZENvbmZpZ1JlZ2lzdHJ5ID0gcGx1Z2luLmZpZWxkQ29uZmlnUmVnaXN0cnk7XG4gICAgY29uc3QgcHJldkZyYW1lcyA9IHRoaXMuX2RhdGFXaXRoRmllbGRDb25maWc/LnNlcmllcyA/PyBbXTtcbiAgICBjb25zdCBuZXdGcmFtZXMgPSBhcHBseUZpZWxkT3ZlcnJpZGVzKHtcbiAgICAgIGRhdGE6IHJhd0RhdGEuc2VyaWVzLFxuICAgICAgZmllbGRDb25maWc6IHRoaXMuc3RhdGUuZmllbGRDb25maWcsXG4gICAgICBmaWVsZENvbmZpZ1JlZ2lzdHJ5LFxuICAgICAgcmVwbGFjZVZhcmlhYmxlczogdGhpcy5pbnRlcnBvbGF0ZSxcbiAgICAgIHRoZW1lOiBjb25maWcudGhlbWUyLFxuICAgICAgdGltZVpvbmU6IHJhd0RhdGEucmVxdWVzdD8udGltZXpvbmUsXG4gICAgfSk7XG5cbiAgICBpZiAoIWNvbXBhcmVBcnJheVZhbHVlcyhuZXdGcmFtZXMsIHByZXZGcmFtZXMsIGNvbXBhcmVEYXRhRnJhbWVTdHJ1Y3R1cmVzKSkge1xuICAgICAgdGhpcy5fc3RydWN0dXJlUmV2Kys7XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YVdpdGhGaWVsZENvbmZpZyA9IHtcbiAgICAgIC4uLnJhd0RhdGEsXG4gICAgICBzdHJ1Y3R1cmVSZXY6IHRoaXMuX3N0cnVjdHVyZVJldixcbiAgICAgIHNlcmllczogbmV3RnJhbWVzLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5fZGF0YVdpdGhGaWVsZENvbmZpZy5hbm5vdGF0aW9ucykge1xuICAgICAgdGhpcy5fZGF0YVdpdGhGaWVsZENvbmZpZy5hbm5vdGF0aW9ucyA9IGFwcGx5RmllbGRPdmVycmlkZXMoe1xuICAgICAgICBkYXRhOiB0aGlzLl9kYXRhV2l0aEZpZWxkQ29uZmlnLmFubm90YXRpb25zLFxuICAgICAgICBmaWVsZENvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHRzOiB7fSxcbiAgICAgICAgICBvdmVycmlkZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgICBmaWVsZENvbmZpZ1JlZ2lzdHJ5LFxuICAgICAgICByZXBsYWNlVmFyaWFibGVzOiB0aGlzLmludGVycG9sYXRlLFxuICAgICAgICB0aGVtZTogY29uZmlnLnRoZW1lMixcbiAgICAgICAgdGltZVpvbmU6IHJhd0RhdGEucmVxdWVzdD8udGltZXpvbmUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXBsdWdpbkRhdGFTdXBwb3J0LmFsZXJ0U3RhdGVzKSB7XG4gICAgICB0aGlzLl9kYXRhV2l0aEZpZWxkQ29uZmlnLmFsZXJ0U3RhdGUgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFwbHVnaW5EYXRhU3VwcG9ydC5hbm5vdGF0aW9ucykge1xuICAgICAgdGhpcy5fZGF0YVdpdGhGaWVsZENvbmZpZy5hbm5vdGF0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aGlzLl9wcmV2RGF0YSA9IHJhd0RhdGE7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFXaXRoRmllbGRDb25maWc7XG4gIH1cblxuICBwdWJsaWMgb25DYW5jZWxRdWVyeSA9ICgpID0+IHtcbiAgICB0aGlzLnB1Ymxpc2hFdmVudChuZXcgVXNlckFjdGlvbkV2ZW50KHsgb3JpZ2luOiB0aGlzLCBpbnRlcmFjdGlvbjogJ3BhbmVsLWNhbmNlbC1xdWVyeS1jbGlja2VkJyB9KSwgdHJ1ZSk7XG4gICAgY29uc3QgZGF0YSA9IHNjZW5lR3JhcGguZ2V0RGF0YSh0aGlzKTtcbiAgICBkYXRhLmNhbmNlbFF1ZXJ5Py4oKTtcbiAgfTtcblxuICBwdWJsaWMgb25TdGF0dXNNZXNzYWdlQ2xpY2sgPSAoKSA9PiB7XG4gICAgdGhpcy5wdWJsaXNoRXZlbnQobmV3IFVzZXJBY3Rpb25FdmVudCh7IG9yaWdpbjogdGhpcywgaW50ZXJhY3Rpb246ICdwYW5lbC1zdGF0dXMtbWVzc2FnZS1jbGlja2VkJyB9KSwgdHJ1ZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFBhbmVsIGNvbnRleHQgZnVuY3Rpb25zXG4gICAqL1xuICBwcml2YXRlIF9vblNlcmllc0NvbG9yQ2hhbmdlID0gKGxhYmVsOiBzdHJpbmcsIGNvbG9yOiBzdHJpbmcpID0+IHtcbiAgICB0aGlzLm9uRmllbGRDb25maWdDaGFuZ2UoY2hhbmdlU2VyaWVzQ29sb3JDb25maWdGYWN0b3J5KGxhYmVsLCBjb2xvciwgdGhpcy5zdGF0ZS5maWVsZENvbmZpZykpO1xuICB9O1xuXG4gIHByaXZhdGUgX29uU2VyaWVzVmlzaWJpbGl0eUNoYW5nZSA9IChsYWJlbDogc3RyaW5nLCBtb2RlOiBTZXJpZXNWaXNpYmlsaXR5Q2hhbmdlTW9kZSkgPT4ge1xuICAgIGlmICghdGhpcy5fZGF0YVdpdGhGaWVsZENvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub25GaWVsZENvbmZpZ0NoYW5nZShcbiAgICAgIHNlcmllc1Zpc2liaWxpdHlDb25maWdGYWN0b3J5KGxhYmVsLCBtb2RlLCB0aGlzLnN0YXRlLmZpZWxkQ29uZmlnLCB0aGlzLl9kYXRhV2l0aEZpZWxkQ29uZmlnLnNlcmllcyksXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfTtcblxuICBwcml2YXRlIF9vbkluc3RhbmNlU3RhdGVDaGFuZ2UgPSAoc3RhdGU6IGFueSkgPT4ge1xuICAgIGlmICh0aGlzLl9wYW5lbENvbnRleHQpIHtcbiAgICAgIHRoaXMuX3BhbmVsQ29udGV4dCA9IHtcbiAgICAgICAgLi4udGhpcy5fcGFuZWxDb250ZXh0LFxuICAgICAgICBpbnN0YW5jZVN0YXRlOiBzdGF0ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7IF9wbHVnaW5JbnN0YW5jZVN0YXRlOiBzdGF0ZSB9KTtcbiAgfTtcblxuICBwcml2YXRlIF9vblRvZ2dsZUxlZ2VuZFNvcnQgPSAoc29ydEtleTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbGVnZW5kT3B0aW9uczogVml6TGVnZW5kT3B0aW9ucyA9ICh0aGlzLnN0YXRlLm9wdGlvbnMgYXMgYW55KS5sZWdlbmQ7XG5cbiAgICAvLyBXZSBkb24ndCB3YW50IHRvIGRvIGFueXRoaW5nIHdoZW4gbGVnZW5kIG9wdGlvbnMgYXJlIG5vdCBhdmFpbGFibGVcbiAgICBpZiAoIWxlZ2VuZE9wdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgc29ydERlc2MgPSBsZWdlbmRPcHRpb25zLnNvcnREZXNjO1xuICAgIGxldCBzb3J0QnkgPSBsZWdlbmRPcHRpb25zLnNvcnRCeTtcbiAgICBpZiAoc29ydEtleSAhPT0gc29ydEJ5KSB7XG4gICAgICBzb3J0RGVzYyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBpZiBhbHJlYWR5IHNvcnQgYXNjZW5kaW5nLCBkaXNhYmxlIHNvcnRpbmdcbiAgICBpZiAoc29ydERlc2MgPT09IGZhbHNlKSB7XG4gICAgICBzb3J0QnkgPSB1bmRlZmluZWQ7XG4gICAgICBzb3J0RGVzYyA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgc29ydERlc2MgPSAhc29ydERlc2M7XG4gICAgICBzb3J0QnkgPSBzb3J0S2V5O1xuICAgIH1cblxuICAgIHRoaXMub25PcHRpb25zQ2hhbmdlKFxuICAgICAge1xuICAgICAgICAuLi50aGlzLnN0YXRlLm9wdGlvbnMsXG4gICAgICAgIGxlZ2VuZDogeyAuLi5sZWdlbmRPcHRpb25zLCBzb3J0QnksIHNvcnREZXNjIH0sXG4gICAgICB9IGFzIFRPcHRpb25zLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH07XG5cbiAgcHJpdmF0ZSBidWlsZFBhbmVsQ29udGV4dCgpOiBQYW5lbENvbnRleHQge1xuICAgIGNvbnN0IHN5bmMgPSBnZXRDdXJzb3JTeW5jU2NvcGUodGhpcyk7XG5cbiAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgZXZlbnRzU2NvcGU6IHN5bmMgPyBzeW5jLmdldEV2ZW50c1Njb3BlKCkgOiAnX19nbG9iYWxfJyxcbiAgICAgIGV2ZW50QnVzOiBzeW5jID8gc3luYy5nZXRFdmVudHNCdXModGhpcykgOiBnZXRBcHBFdmVudHMoKSxcbiAgICAgIGFwcDogQ29yZUFwcC5Vbmtub3duLFxuICAgICAgc3luYzogKCkgPT4ge1xuICAgICAgICBpZiAoc3luYykge1xuICAgICAgICAgIHJldHVybiBzeW5jLnN0YXRlLnN5bmM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIERhc2hib2FyZEN1cnNvclN5bmMuT2ZmO1xuICAgICAgfSxcbiAgICAgIG9uU2VyaWVzQ29sb3JDaGFuZ2U6IHRoaXMuX29uU2VyaWVzQ29sb3JDaGFuZ2UsXG4gICAgICBvblRvZ2dsZVNlcmllc1Zpc2liaWxpdHk6IHRoaXMuX29uU2VyaWVzVmlzaWJpbGl0eUNoYW5nZSxcbiAgICAgIG9uVG9nZ2xlTGVnZW5kU29ydDogdGhpcy5fb25Ub2dnbGVMZWdlbmRTb3J0LFxuICAgICAgb25JbnN0YW5jZVN0YXRlQ2hhbmdlOiB0aGlzLl9vbkluc3RhbmNlU3RhdGVDaGFuZ2UsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmV4dGVuZFBhbmVsQ29udGV4dCkge1xuICAgICAgdGhpcy5zdGF0ZS5leHRlbmRQYW5lbENvbnRleHQodGhpcywgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UGFuZWxQbHVnaW5Ob3RGb3VuZChpZDogc3RyaW5nKTogUGFuZWxQbHVnaW4ge1xuICBjb25zdCBwbHVnaW4gPSBuZXcgUGFuZWxQbHVnaW4oKCkgPT4gbnVsbCk7XG5cbiAgcGx1Z2luLm1ldGEgPSB7XG4gICAgaWQ6IGlkLFxuICAgIG5hbWU6IGlkLFxuICAgIHNvcnQ6IDEwMCxcbiAgICB0eXBlOiBQbHVnaW5UeXBlLnBhbmVsLFxuICAgIG1vZHVsZTogJycsXG4gICAgYmFzZVVybDogJycsXG4gICAgaW5mbzoge1xuICAgICAgYXV0aG9yOiB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGxpbmtzOiBbXSxcbiAgICAgIGxvZ29zOiB7XG4gICAgICAgIGxhcmdlOiAnJyxcbiAgICAgICAgc21hbGw6ICdwdWJsaWMvaW1nL2dyYWZhbmFfaWNvbi5zdmcnLFxuICAgICAgfSxcbiAgICAgIHNjcmVlbnNob3RzOiBbXSxcbiAgICAgIHVwZGF0ZWQ6ICcnLFxuICAgICAgdmVyc2lvbjogJycsXG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gcGx1Z2luO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0dPLE1BQU0saUJBQThELGVBRXpFLENBQUE7QUFBQSxFQWNPLFlBQVksS0FBdUQsRUFBQTtBQXBINUUsSUFBQSxJQUFBLEVBQUEsQ0FBQTtBQXFISSxJQUFNLEtBQUEsQ0FBQSxjQUFBLENBQUE7QUFBQSxNQUNKLFNBQVMsRUFBQztBQUFBLE1BQ1YsYUFBYSxFQUFFLFFBQUEsRUFBVSxFQUFJLEVBQUEsU0FBQSxFQUFXLEVBQUcsRUFBQTtBQUFBLE1BQzNDLEtBQU8sRUFBQSxPQUFBO0FBQUEsTUFDUCxRQUFVLEVBQUEsWUFBQTtBQUFBLE1BQ1YsY0FBZ0IsRUFBQSxDQUFBO0FBQUEsS0FBQSxFQUNiLEtBQ0osQ0FBQSxDQUFBLENBQUE7QUFuQkgsSUFBVSxJQUFBLENBQUEsbUJBQUEsR0FBc0IsSUFBSSx3QkFBQSxDQUF5QixJQUFNLEVBQUE7QUFBQSxNQUNqRSxVQUFZLEVBQUEsQ0FBQyxPQUFTLEVBQUEsU0FBQSxFQUFXLGFBQWEsQ0FBQTtBQUFBLEtBQy9DLENBQUEsQ0FBQTtBQU9ELElBQUEsSUFBQSxDQUFRLGFBQXdCLEdBQUEsQ0FBQSxDQUFBO0FBMEloQyxJQUFPLElBQUEsQ0FBQSxpQkFBQSxHQUFvQixDQUFDLFNBQWlDLEtBQUE7QUFDM0QsTUFBTSxNQUFBLGNBQUEsR0FBaUIsVUFBVyxDQUFBLFlBQUEsQ0FBYSxJQUFJLENBQUEs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
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { LinkButton } from '@grafana/ui';
|
|
3
|
-
import { useAsync } from 'react-use';
|
|
4
|
-
import { SceneObjectBase } from '../../core/SceneObjectBase.js';
|
|
5
|
-
import { sceneGraph } from '../../core/sceneGraph/index.js';
|
|
6
|
-
import { getExploreURL } from '../../utils/explore.js';
|
|
7
|
-
import { useReturnToPrevious } from '@grafana/runtime';
|
|
8
|
-
|
|
9
|
-
class VizPanelExploreButton extends SceneObjectBase {
|
|
10
|
-
constructor(options = {}) {
|
|
11
|
-
super({ options });
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
VizPanelExploreButton.Component = VizPanelExploreButtonComponent;
|
|
15
|
-
function VizPanelExploreButtonComponent({ model }) {
|
|
16
|
-
const { options } = model.useState();
|
|
17
|
-
const { data } = sceneGraph.getData(model).useState();
|
|
18
|
-
const { from, to } = sceneGraph.getTimeRange(model).useState();
|
|
19
|
-
const { value: exploreLink } = useAsync(
|
|
20
|
-
async () => data ? getExploreURL(data, model, { from, to }, options.transform) : "",
|
|
21
|
-
[data, model, from, to]
|
|
22
|
-
);
|
|
23
|
-
const returnToPrevious = useReturnToPrevious();
|
|
24
|
-
if (exploreLink) {
|
|
25
|
-
return /* @__PURE__ */ React.createElement(LinkButton, {
|
|
26
|
-
key: "explore",
|
|
27
|
-
icon: "compass",
|
|
28
|
-
size: "sm",
|
|
29
|
-
variant: "secondary",
|
|
30
|
-
href: exploreLink,
|
|
31
|
-
onClick: () => {
|
|
32
|
-
var _a;
|
|
33
|
-
if (options.returnToPrevious) {
|
|
34
|
-
returnToPrevious(options.returnToPrevious.title, options.returnToPrevious.href);
|
|
35
|
-
}
|
|
36
|
-
(_a = options.onClick) == null ? void 0 : _a.call(options);
|
|
37
|
-
}
|
|
38
|
-
}, "Explore");
|
|
39
|
-
}
|
|
40
|
-
return null;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export { VizPanelExploreButton };
|
|
44
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVml6UGFuZWxFeHBsb3JlQnV0dG9uLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9WaXpQYW5lbC9WaXpQYW5lbEV4cGxvcmVCdXR0b24udHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IExpbmtCdXR0b24gfSBmcm9tICdAZ3JhZmFuYS91aSc7XG5pbXBvcnQgeyBEYXRhUXVlcnkgfSBmcm9tICdAZ3JhZmFuYS9zY2hlbWEnO1xuaW1wb3J0IHsgdXNlQXN5bmMgfSBmcm9tICdyZWFjdC11c2UnO1xuaW1wb3J0IHsgU2NlbmVDb21wb25lbnRQcm9wcywgU2NlbmVPYmplY3RTdGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgU2NlbmVPYmplY3RCYXNlIH0gZnJvbSAnLi4vLi4vY29yZS9TY2VuZU9iamVjdEJhc2UnO1xuaW1wb3J0IHsgc2NlbmVHcmFwaCB9IGZyb20gJy4uLy4uL2NvcmUvc2NlbmVHcmFwaCc7XG5pbXBvcnQgeyBnZXRFeHBsb3JlVVJMIH0gZnJvbSAnLi4vLi4vdXRpbHMvZXhwbG9yZSc7XG5pbXBvcnQgeyB1c2VSZXR1cm5Ub1ByZXZpb3VzIH0gZnJvbSAnQGdyYWZhbmEvcnVudGltZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwbG9yZUJ1dHRvbk9wdGlvbnMge1xuICAvLyBDYWxsYmFjayB0byBob29rIGluIHRyYWNraW5nIC8gYW5hbHl0aWNzXG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xuXG4gIC8vIENhbGxiYWNrIHRvIG1vZGlmeSBpbnRlcnBvbGF0ZWQgcXVlcnkgYmVmb3JlIHBhc3NpbmcgaXQgdG8gZXhwbG9yZVxuICB0cmFuc2Zvcm0/OiAocXVlcnk6IERhdGFRdWVyeSkgPT4gRGF0YVF1ZXJ5O1xuXG4gIC8vIFRpdGxlIGFuZCBocmVmIGZvciB0aGUgcmV0dXJuIHRvIHByZXZpb3VzIGJ1dHRvblxuICByZXR1cm5Ub1ByZXZpb3VzPzoge1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgaHJlZj86IHN0cmluZztcbiAgfTtcbn1cblxuaW50ZXJmYWNlIEV4cGxvcmVCdXR0b25TdGF0ZSBleHRlbmRzIFNjZW5lT2JqZWN0U3RhdGUge1xuICBvcHRpb25zOiBFeHBsb3JlQnV0dG9uT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIFZpelBhbmVsRXhwbG9yZUJ1dHRvbiBleHRlbmRzIFNjZW5lT2JqZWN0QmFzZTxFeHBsb3JlQnV0dG9uU3RhdGU+IHtcbiAgc3RhdGljIENvbXBvbmVudCA9IFZpelBhbmVsRXhwbG9yZUJ1dHRvbkNvbXBvbmVudDtcblxuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogRXhwbG9yZUJ1dHRvbk9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKHsgb3B0aW9ucyB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBWaXpQYW5lbEV4cGxvcmVCdXR0b25Db21wb25lbnQoeyBtb2RlbCB9OiBTY2VuZUNvbXBvbmVudFByb3BzPFZpelBhbmVsRXhwbG9yZUJ1dHRvbj4pIHtcbiAgY29uc3QgeyBvcHRpb25zIH0gPSBtb2RlbC51c2VTdGF0ZSgpO1xuXG4gIGNvbnN0IHsgZGF0YSB9ID0gc2NlbmVHcmFwaC5nZXREYXRhKG1vZGVsKS51c2VTdGF0ZSgpO1xuXG4gIGNvbnN0IHsgZnJvbSwgdG8gfSA9IHNjZW5lR3JhcGguZ2V0VGltZVJhbmdlKG1vZGVsKS51c2VTdGF0ZSgpO1xuXG4gIGNvbnN0IHsgdmFsdWU6IGV4cGxvcmVMaW5rIH0gPSB1c2VBc3luYyhcbiAgICBhc3luYyAoKSA9PiAoZGF0YSA/IGdldEV4cGxvcmVVUkwoZGF0YSwgbW9kZWwsIHsgZnJvbSwgdG8gfSwgb3B0aW9ucy50cmFuc2Zvcm0pIDogJycpLFxuICAgIFtkYXRhLCBtb2RlbCwgZnJvbSwgdG9dXG4gICk7XG5cbiAgY29uc3QgcmV0dXJuVG9QcmV2aW91cyA9IHVzZVJldHVyblRvUHJldmlvdXMoKTtcblxuICBpZiAoZXhwbG9yZUxpbmspIHtcbiAgICByZXR1cm4gKFxuICAgICAgPExpbmtCdXR0b25cbiAgICAgICAga2V5PVwiZXhwbG9yZVwiXG4gICAgICAgIGljb249XCJjb21wYXNzXCJcbiAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgIGhyZWY9e2V4cGxvcmVMaW5rfVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMucmV0dXJuVG9QcmV2aW91cykge1xuICAgICAgICAgICAgcmV0dXJuVG9QcmV2aW91cyhvcHRpb25zLnJldHVyblRvUHJldmlvdXMudGl0bGUsIG9wdGlvbnMucmV0dXJuVG9QcmV2aW91cy5ocmVmKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3B0aW9ucy5vbkNsaWNrPy4oKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgRXhwbG9yZVxuICAgICAgPC9MaW5rQnV0dG9uPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUE2Qk8sTUFBTSw4QkFBOEIsZUFBb0MsQ0FBQTtBQUFBLEVBR3RFLFdBQUEsQ0FBWSxPQUFnQyxHQUFBLEVBQUksRUFBQTtBQUNyRCxJQUFNLEtBQUEsQ0FBQSxFQUFFLFNBQVMsQ0FBQSxDQUFBO0FBQUEsR0FDbkI7QUFDRixDQUFBO0FBTmEscUJBQUEsQ0FDSixTQUFZLEdBQUEsOEJBQUEsQ0FBQTtBQU9yQixTQUFTLDhCQUFBLENBQStCLEVBQUUsS0FBQSxFQUFxRCxFQUFBO0FBQzdGLEVBQUEsTUFBTSxFQUFFLE9BQUEsRUFBWSxHQUFBLEtBQUEsQ0FBTSxRQUFTLEVBQUEsQ0FBQTtBQUVuQyxFQUFBLE1BQU0sRUFBRSxJQUFLLEVBQUEsR0FBSSxXQUFXLE9BQVEsQ0FBQSxLQUFLLEVBQUUsUUFBUyxFQUFBLENBQUE7QUFFcEQsRUFBTSxNQUFBLEVBQUUsTUFBTSxFQUFHLEVBQUEsR0FBSSxXQUFXLFlBQWEsQ0FBQSxLQUFLLEVBQUUsUUFBUyxFQUFBLENBQUE7QUFFN0QsRUFBTSxNQUFBLEVBQUUsS0FBTyxFQUFBLFdBQUEsRUFBZ0IsR0FBQSxRQUFBO0FBQUEsSUFDN0IsWUFBYSxJQUFPLEdBQUEsYUFBQSxDQUFjLElBQU0sRUFBQSxLQUFBLEVBQU8sRUFBRSxJQUFBLEVBQU0sRUFBRyxFQUFBLEVBQUcsT0FBUSxDQUFBLFNBQVMsQ0FBSSxHQUFBLEVBQUE7QUFBQSxJQUNsRixDQUFDLElBQUEsRUFBTSxLQUFPLEVBQUEsSUFBQSxFQUFNLEVBQUUsQ0FBQTtBQUFBLEdBQ3hCLENBQUE7QUFFQSxFQUFBLE1BQU0sbUJBQW1CLG1CQUFvQixFQUFBLENBQUE7QUFFN0MsRUFBQSxJQUFJLFdBQWEsRUFBQTtBQUNmLElBQUEsdUJBQ0csS0FBQSxDQUFBLGFBQUEsQ0FBQSxVQUFBLEVBQUE7QUFBQSxNQUNDLEdBQUksRUFBQSxTQUFBO0FBQUEsTUFDSixJQUFLLEVBQUEsU0FBQTtBQUFBLE1BQ0wsSUFBSyxFQUFBLElBQUE7QUFBQSxNQUNMLE9BQVEsRUFBQSxXQUFBO0FBQUEsTUFDUixJQUFNLEVBQUEsV0FBQTtBQUFBLE1BQ04sU0FBUyxNQUFNO0FBM0R2QixRQUFBLElBQUEsRUFBQSxDQUFBO0FBNERVLFFBQUEsSUFBSSxRQUFRLGdCQUFrQixFQUFBO0FBQzVCLFVBQUEsZ0JBQUEsQ0FBaUIsT0FBUSxDQUFBLGdCQUFBLENBQWlCLEtBQU8sRUFBQSxPQUFBLENBQVEsaUJBQWlCLElBQUksQ0FBQSxDQUFBO0FBQUEsU0FDaEY7QUFDQSxRQUFBLENBQUEsRUFBQSxHQUFBLE9BQUEsQ0FBUSxPQUFSLEtBQUEsSUFBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBLEVBQUEsQ0FBQSxJQUFBLENBQUEsT0FBQSxDQUFBLENBQUE7QUFBQSxPQUNGO0FBQUEsS0FBQSxFQUNELFNBRUQsQ0FBQSxDQUFBO0FBQUEsR0FFSjtBQUNBLEVBQU8sT0FBQSxJQUFBLENBQUE7QUFDVDs7OzsifQ==
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import React, { useEffect } from 'react';
|
|
2
|
-
import { Menu } from '@grafana/ui';
|
|
3
|
-
import { SceneObjectBase } from '../../core/SceneObjectBase.js';
|
|
4
|
-
import { selectors } from '@grafana/e2e-selectors';
|
|
5
|
-
|
|
6
|
-
class VizPanelMenu extends SceneObjectBase {
|
|
7
|
-
addItem(item) {
|
|
8
|
-
this.setState({
|
|
9
|
-
items: this.state.items ? [...this.state.items, item] : [item]
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
setItems(items) {
|
|
13
|
-
this.setState({
|
|
14
|
-
items
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
VizPanelMenu.Component = VizPanelMenuRenderer;
|
|
19
|
-
function VizPanelMenuRenderer({ model }) {
|
|
20
|
-
const { items = [] } = model.useState();
|
|
21
|
-
const ref = React.useRef(null);
|
|
22
|
-
useEffect(() => {
|
|
23
|
-
if (ref.current) {
|
|
24
|
-
ref.current.focus();
|
|
25
|
-
}
|
|
26
|
-
}, []);
|
|
27
|
-
const renderItems = (items2) => {
|
|
28
|
-
return items2.map((item) => {
|
|
29
|
-
switch (item.type) {
|
|
30
|
-
case "divider":
|
|
31
|
-
return /* @__PURE__ */ React.createElement(Menu.Divider, {
|
|
32
|
-
key: item.text
|
|
33
|
-
});
|
|
34
|
-
case "group":
|
|
35
|
-
return /* @__PURE__ */ React.createElement(Menu.Group, {
|
|
36
|
-
key: item.text,
|
|
37
|
-
label: item.text
|
|
38
|
-
}, item.subMenu ? renderItems(item.subMenu) : void 0);
|
|
39
|
-
default:
|
|
40
|
-
return /* @__PURE__ */ React.createElement(Menu.Item, {
|
|
41
|
-
key: item.text,
|
|
42
|
-
label: item.text,
|
|
43
|
-
icon: item.iconClassName,
|
|
44
|
-
childItems: item.subMenu ? renderItems(item.subMenu) : void 0,
|
|
45
|
-
url: item.href,
|
|
46
|
-
onClick: item.onClick,
|
|
47
|
-
shortcut: item.shortcut,
|
|
48
|
-
testId: selectors.components.Panels.Panel.menuItems(item.text)
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
};
|
|
53
|
-
return /* @__PURE__ */ React.createElement(Menu, {
|
|
54
|
-
ref
|
|
55
|
-
}, renderItems(items));
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export { VizPanelMenu };
|
|
59
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVml6UGFuZWxNZW51LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9WaXpQYW5lbC9WaXpQYW5lbE1lbnUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBQYW5lbE1lbnVJdGVtIH0gZnJvbSAnQGdyYWZhbmEvZGF0YSc7XG5pbXBvcnQgeyBNZW51IH0gZnJvbSAnQGdyYWZhbmEvdWknO1xuaW1wb3J0IHsgU2NlbmVPYmplY3RCYXNlIH0gZnJvbSAnLi4vLi4vY29yZS9TY2VuZU9iamVjdEJhc2UnO1xuaW1wb3J0IHsgU2NlbmVDb21wb25lbnRQcm9wcywgU2NlbmVPYmplY3RTdGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgc2VsZWN0b3JzIH0gZnJvbSAnQGdyYWZhbmEvZTJlLXNlbGVjdG9ycyc7XG5cbmludGVyZmFjZSBWaXpQYW5lbE1lbnVTdGF0ZSBleHRlbmRzIFNjZW5lT2JqZWN0U3RhdGUge1xuICBpdGVtcz86IFBhbmVsTWVudUl0ZW1bXTtcbn1cblxuZXhwb3J0IGNsYXNzIFZpelBhbmVsTWVudSBleHRlbmRzIFNjZW5lT2JqZWN0QmFzZTxWaXpQYW5lbE1lbnVTdGF0ZT4ge1xuICBzdGF0aWMgQ29tcG9uZW50ID0gVml6UGFuZWxNZW51UmVuZGVyZXI7XG5cbiAgLy8gQWxsb3dzIGFkZGluZyBtZW51IGl0ZW1zIGR5bmFtaWNhbGx5XG4gIHB1YmxpYyBhZGRJdGVtKGl0ZW06IFBhbmVsTWVudUl0ZW0pIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGl0ZW1zOiB0aGlzLnN0YXRlLml0ZW1zID8gWy4uLnRoaXMuc3RhdGUuaXRlbXMsIGl0ZW1dIDogW2l0ZW1dLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQWxsb3dzIHJlcGxhY2luZyBhbGwgbWVudSBpdGVtc1xuICBwdWJsaWMgc2V0SXRlbXMoaXRlbXM6IFBhbmVsTWVudUl0ZW1bXSkge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaXRlbXMsXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gVml6UGFuZWxNZW51UmVuZGVyZXIoeyBtb2RlbCB9OiBTY2VuZUNvbXBvbmVudFByb3BzPFZpelBhbmVsTWVudT4pIHtcbiAgY29uc3QgeyBpdGVtcyA9IFtdIH0gPSBtb2RlbC51c2VTdGF0ZSgpO1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJlZi5jdXJyZW50KSB7XG4gICAgICByZWYuY3VycmVudC5mb2N1cygpO1xuICAgIH1cbiAgfSwgW10pO1xuXG4gIGNvbnN0IHJlbmRlckl0ZW1zID0gKGl0ZW1zOiBQYW5lbE1lbnVJdGVtW10pID0+IHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgICBjYXNlICdkaXZpZGVyJzpcbiAgICAgICAgICByZXR1cm4gPE1lbnUuRGl2aWRlciBrZXk9e2l0ZW0udGV4dH0gLz47XG4gICAgICAgIGNhc2UgJ2dyb3VwJzpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPE1lbnUuR3JvdXAga2V5PXtpdGVtLnRleHR9IGxhYmVsPXtpdGVtLnRleHR9PlxuICAgICAgICAgICAgICB7aXRlbS5zdWJNZW51ID8gcmVuZGVySXRlbXMoaXRlbS5zdWJNZW51KSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIDwvTWVudS5Hcm91cD5cbiAgICAgICAgICApO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8TWVudS5JdGVtXG4gICAgICAgICAgICAgIGtleT17aXRlbS50ZXh0fVxuICAgICAgICAgICAgICBsYWJlbD17aXRlbS50ZXh0fVxuICAgICAgICAgICAgICBpY29uPXtpdGVtLmljb25DbGFzc05hbWV9XG4gICAgICAgICAgICAgIGNoaWxkSXRlbXM9e2l0ZW0uc3ViTWVudSA/IHJlbmRlckl0ZW1zKGl0ZW0uc3ViTWVudSkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIHVybD17aXRlbS5ocmVmfVxuICAgICAgICAgICAgICBvbkNsaWNrPXtpdGVtLm9uQ2xpY2t9XG4gICAgICAgICAgICAgIHNob3J0Y3V0PXtpdGVtLnNob3J0Y3V0fVxuICAgICAgICAgICAgICB0ZXN0SWQ9e3NlbGVjdG9ycy5jb21wb25lbnRzLlBhbmVscy5QYW5lbC5tZW51SXRlbXMoaXRlbS50ZXh0KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gPE1lbnUgcmVmPXtyZWZ9PntyZW5kZXJJdGVtcyhpdGVtcyl9PC9NZW51Pjtcbn1cbiJdLCJuYW1lcyI6WyJpdGVtcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFXTyxNQUFNLHFCQUFxQixlQUFtQyxDQUFBO0FBQUEsRUFJNUQsUUFBUSxJQUFxQixFQUFBO0FBQ2xDLElBQUEsSUFBQSxDQUFLLFFBQVMsQ0FBQTtBQUFBLE1BQ1osS0FBTyxFQUFBLElBQUEsQ0FBSyxLQUFNLENBQUEsS0FBQSxHQUFRLENBQUMsR0FBRyxJQUFLLENBQUEsS0FBQSxDQUFNLEtBQU8sRUFBQSxJQUFJLENBQUksR0FBQSxDQUFDLElBQUksQ0FBQTtBQUFBLEtBQzlELENBQUEsQ0FBQTtBQUFBLEdBQ0g7QUFBQSxFQUdPLFNBQVMsS0FBd0IsRUFBQTtBQUN0QyxJQUFBLElBQUEsQ0FBSyxRQUFTLENBQUE7QUFBQSxNQUNaLEtBQUE7QUFBQSxLQUNELENBQUEsQ0FBQTtBQUFBLEdBQ0g7QUFDRixDQUFBO0FBaEJhLFlBQUEsQ0FDSixTQUFZLEdBQUEsb0JBQUEsQ0FBQTtBQWlCckIsU0FBUyxvQkFBQSxDQUFxQixFQUFFLEtBQUEsRUFBNEMsRUFBQTtBQUMxRSxFQUFBLE1BQU0sRUFBRSxLQUFRLEdBQUEsRUFBRyxFQUFBLEdBQUksTUFBTSxRQUFTLEVBQUEsQ0FBQTtBQUN0QyxFQUFNLE1BQUEsR0FBQSxHQUFNLEtBQU0sQ0FBQSxNQUFBLENBQXVCLElBQUksQ0FBQSxDQUFBO0FBRTdDLEVBQUEsU0FBQSxDQUFVLE1BQU07QUFDZCxJQUFBLElBQUksSUFBSSxPQUFTLEVBQUE7QUFDZixNQUFBLEdBQUEsQ0FBSSxRQUFRLEtBQU0sRUFBQSxDQUFBO0FBQUEsS0FDcEI7QUFBQSxHQUNGLEVBQUcsRUFBRSxDQUFBLENBQUE7QUFFTCxFQUFNLE1BQUEsV0FBQSxHQUFjLENBQUNBLE1BQTJCLEtBQUE7QUFDOUMsSUFBT0EsT0FBQUEsTUFBQUEsQ0FBTSxHQUFJLENBQUEsQ0FBQyxJQUFTLEtBQUE7QUFDekIsTUFBQSxRQUFRLElBQUssQ0FBQSxJQUFBO0FBQUEsUUFDTixLQUFBLFNBQUE7QUFDSCxVQUFPLHVCQUFBLEtBQUEsQ0FBQSxhQUFBLENBQUMsS0FBSyxPQUFMLEVBQUE7QUFBQSxZQUFhLEtBQUssSUFBSyxDQUFBLElBQUE7QUFBQSxXQUFNLENBQUEsQ0FBQTtBQUFBLFFBQ2xDLEtBQUEsT0FBQTtBQUNILFVBQ0UsdUJBQUEsS0FBQSxDQUFBLGFBQUEsQ0FBQyxLQUFLLEtBQUwsRUFBQTtBQUFBLFlBQVcsS0FBSyxJQUFLLENBQUEsSUFBQTtBQUFBLFlBQU0sT0FBTyxJQUFLLENBQUEsSUFBQTtBQUFBLFdBQUEsRUFDckMsS0FBSyxPQUFVLEdBQUEsV0FBQSxDQUFZLElBQUssQ0FBQSxPQUFPLElBQUksS0FDOUMsQ0FBQSxDQUFBLENBQUE7QUFBQSxRQUFBO0FBR0YsVUFDRSx1QkFBQSxLQUFBLENBQUEsYUFBQSxDQUFDLEtBQUssSUFBTCxFQUFBO0FBQUEsWUFDQyxLQUFLLElBQUssQ0FBQSxJQUFBO0FBQUEsWUFDVixPQUFPLElBQUssQ0FBQSxJQUFBO0FBQUEsWUFDWixNQUFNLElBQUssQ0FBQSxhQUFBO0FBQUEsWUFDWCxZQUFZLElBQUssQ0FBQSxPQUFBLEdBQVUsV0FBWSxDQUFBLElBQUEsQ0FBSyxPQUFPLENBQUksR0FBQSxLQUFBLENBQUE7QUFBQSxZQUN2RCxLQUFLLElBQUssQ0FBQSxJQUFBO0FBQUEsWUFDVixTQUFTLElBQUssQ0FBQSxPQUFBO0FBQUEsWUFDZCxVQUFVLElBQUssQ0FBQSxRQUFBO0FBQUEsWUFDZixRQUFRLFNBQVUsQ0FBQSxVQUFBLENBQVcsT0FBTyxLQUFNLENBQUEsU0FBQSxDQUFVLEtBQUssSUFBSSxDQUFBO0FBQUEsV0FDL0QsQ0FBQSxDQUFBO0FBQUEsT0FBQTtBQUFBLEtBR1AsQ0FBQSxDQUFBO0FBQUEsR0FDSCxDQUFBO0FBRUEsRUFBQSx1QkFBUSxLQUFBLENBQUEsYUFBQSxDQUFBLElBQUEsRUFBQTtBQUFBLElBQUssR0FBQTtBQUFBLEdBQVcsRUFBQSxXQUFBLENBQVksS0FBSyxDQUFFLENBQUEsQ0FBQTtBQUM3Qzs7OzsifQ==
|