@grafana/scenes 6.39.2 → 6.39.3

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 CHANGED
@@ -1,3 +1,15 @@
1
+ # v6.39.3 (Thu Oct 09 2025)
2
+
3
+ #### 🐛 Bug Fix
4
+
5
+ - Variables: Introduce a new type called "switch" [#1258](https://github.com/grafana/scenes/pull/1258) ([@leventebalogh](https://github.com/leventebalogh))
6
+
7
+ #### Authors: 1
8
+
9
+ - Levente Balogh ([@leventebalogh](https://github.com/leventebalogh))
10
+
11
+ ---
12
+
1
13
  # v6.39.2 (Wed Oct 08 2025)
2
14
 
3
15
  #### 🐛 Bug Fix
package/dist/esm/index.js CHANGED
@@ -10,7 +10,7 @@ import { isRepeatCloneOrChildOf } from './utils/utils.js';
10
10
  import { registerVariableMacro } from './variables/macros/index.js';
11
11
  import { escapeURLDelimiters, escapeLabelValueInExactSelector, escapeLabelValueInRegexSelector, renderPrometheusLabelFilters } from './variables/utils.js';
12
12
  export { escapeUrlPipeDelimiters } from './variables/utils.js';
13
- import { isGroupByVariable, isTextBoxVariable, isQueryVariable, isIntervalVariable, isDataSourceVariable, isCustomVariable, isConstantVariable, isAdHocVariable } from './variables/variants/guards.js';
13
+ import { isSwitchVariable, isGroupByVariable, isTextBoxVariable, isQueryVariable, isIntervalVariable, isDataSourceVariable, isCustomVariable, isConstantVariable, isAdHocVariable } from './variables/variants/guards.js';
14
14
  export { isDataLayer, isDataRequestEnricher, isFiltersRequestEnricher, isSceneObject } from './core/types.js';
15
15
  export { SceneObjectStateChangedEvent, UserActionEvent } from './core/events.js';
16
16
  export { sceneGraph } from './core/sceneGraph/index.js';
@@ -38,6 +38,7 @@ export { VariableValueControl } from './variables/components/VariableValueContro
38
38
  export { SceneVariableSet } from './variables/sets/SceneVariableSet.js';
39
39
  export { ConstantVariable } from './variables/variants/ConstantVariable.js';
40
40
  export { CustomVariable } from './variables/variants/CustomVariable.js';
41
+ export { SwitchVariable } from './variables/variants/SwitchVariable.js';
41
42
  export { DataSourceVariable } from './variables/variants/DataSourceVariable.js';
42
43
  export { QueryVariable } from './variables/variants/query/QueryVariable.js';
43
44
  export { TestVariable } from './variables/variants/TestVariable.js';
@@ -114,6 +115,7 @@ const sceneUtils = {
114
115
  isQueryVariable,
115
116
  isTextBoxVariable,
116
117
  isGroupByVariable,
118
+ isSwitchVariable,
117
119
  isRepeatCloneOrChildOf,
118
120
  buildPathIdFor
119
121
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { getUrlWithAppState } from './components/SceneApp/utils';\nimport { registerRuntimePanelPlugin } from './components/VizPanel/registerRuntimePanelPlugin';\nimport { cloneSceneObjectState } from './core/sceneGraph/cloneSceneObject';\nimport { registerRuntimeDataSource } from './querying/RuntimeDataSource';\nimport { getUrlState, syncStateFromSearchParams } from './services/utils';\nimport { buildPathIdFor } from './utils/pathId';\nimport { isRepeatCloneOrChildOf } from './utils/utils';\n\nimport { registerVariableMacro } from './variables/macros';\nimport {\n escapeLabelValueInExactSelector,\n escapeLabelValueInRegexSelector,\n escapeURLDelimiters,\n renderPrometheusLabelFilters,\n} from './variables/utils';\nimport {\n isAdHocVariable,\n isQueryVariable,\n isTextBoxVariable,\n isCustomVariable,\n isDataSourceVariable,\n isConstantVariable,\n isIntervalVariable,\n isGroupByVariable,\n} from './variables/variants/guards';\n\nexport * from './core/types';\nexport * from './core/events';\nexport { sceneGraph } from './core/sceneGraph';\nexport * as behaviors from './behaviors';\nexport * as dataLayers from './querying/layers';\n\nexport { SceneObjectBase, useSceneObjectState } from './core/SceneObjectBase';\nexport { SceneDataNode } from './core/SceneDataNode';\nexport { SceneTimeRange } from './core/SceneTimeRange';\nexport { SceneTimeZoneOverride } from './core/SceneTimeZoneOverride';\n\nexport { SceneQueryRunner, type QueryRunnerState } from './querying/SceneQueryRunner';\nexport { DataProviderProxy } from './querying/DataProviderProxy';\nexport {\n type ExtraQueryDescriptor,\n type ExtraQueryProvider,\n type ExtraQueryDataProcessor,\n} from './querying/ExtraQueryProvider';\nexport { SceneDataLayerSet, SceneDataLayerSetBase } from './querying/SceneDataLayerSet';\nexport { SceneDataLayerBase } from './querying/layers/SceneDataLayerBase';\nexport { SceneDataLayerControls } from './querying/layers/SceneDataLayerControls';\nexport { SceneDataTransformer, type SceneDataTransformerState } from './querying/SceneDataTransformer';\nexport { registerQueryWithController } from './querying/registerQueryWithController';\nexport { registerRuntimeDataSource, RuntimeDataSource } from './querying/RuntimeDataSource';\nexport type {\n SceneQueryControllerLike,\n SceneQueryControllerEntryType,\n SceneQueryControllerEntry,\n SceneInteractionProfileEvent,\n} from './behaviors/types';\nexport { SceneRenderProfiler } from './behaviors/SceneRenderProfiler';\n\nexport * from './variables/types';\nexport { VariableDependencyConfig } from './variables/VariableDependencyConfig';\nexport { formatRegistry, type FormatVariable } from './variables/interpolation/formatRegistry';\nexport { VariableValueSelectors } from './variables/components/VariableValueSelectors';\nexport { VariableValueControl } from './variables/components/VariableValueControl';\nexport { SceneVariableSet } from './variables/sets/SceneVariableSet';\nexport { ConstantVariable } from './variables/variants/ConstantVariable';\nexport { CustomVariable } from './variables/variants/CustomVariable';\nexport { DataSourceVariable } from './variables/variants/DataSourceVariable';\nexport { QueryVariable } from './variables/variants/query/QueryVariable';\nexport { TestVariable } from './variables/variants/TestVariable';\nexport { TextBoxVariable } from './variables/variants/TextBoxVariable';\nexport { ScopesVariable } from './variables/variants/ScopesVariable';\nexport {\n MultiValueVariable,\n type MultiValueVariableState,\n type VariableGetOptionsArgs,\n} from './variables/variants/MultiValueVariable';\nexport { LocalValueVariable } from './variables/variants/LocalValueVariable';\nexport { IntervalVariable } from './variables/variants/IntervalVariable';\nexport { AdHocFiltersVariable } from './variables/adhoc/AdHocFiltersVariable';\nexport type { AdHocFilterWithLabels } from './variables/adhoc/AdHocFiltersVariable';\nexport { GroupByVariable } from './variables/groupby/GroupByVariable';\nexport { type MacroVariableConstructor } from './variables/macros/types';\nexport { escapeUrlPipeDelimiters } from './variables/utils';\n\nexport { type UrlSyncManagerLike, UrlSyncManager, NewSceneObjectAddedEvent } from './services/UrlSyncManager';\nexport { useUrlSync } from './services/useUrlSync';\nexport { UrlSyncContextProvider } from './services/UrlSyncContextProvider';\nexport { SceneObjectUrlSyncConfig } from './services/SceneObjectUrlSyncConfig';\n\nexport { EmbeddedScene, type EmbeddedSceneState } from './components/EmbeddedScene';\nexport { VizPanel, type VizPanelState } from './components/VizPanel/VizPanel';\nexport { VizPanelMenu } from './components/VizPanel/VizPanelMenu';\nexport { VizPanelExploreButton } from './components/VizPanel/VizPanelExploreButton';\nexport { NestedScene } from './components/NestedScene';\nexport { SceneCanvasText } from './components/SceneCanvasText';\nexport { SceneToolbarButton, SceneToolbarInput } from './components/SceneToolbarButton';\nexport { SceneTimePicker } from './components/SceneTimePicker';\nexport { SceneRefreshPicker, type SceneRefreshPickerState } from './components/SceneRefreshPicker';\nexport { SceneTimeRangeTransformerBase } from './core/SceneTimeRangeTransformerBase';\nexport { SceneTimeRangeCompare } from './components/SceneTimeRangeCompare';\nexport { SceneByFrameRepeater } from './components/SceneByFrameRepeater';\nexport { SceneByVariableRepeater } from './components/SceneByVariableRepeater';\nexport { SceneControlsSpacer } from './components/SceneControlsSpacer';\nexport {\n SceneFlexLayout,\n SceneFlexItem,\n type SceneFlexItemState,\n type SceneFlexItemLike,\n} from './components/layout/SceneFlexLayout';\nexport { SceneCSSGridLayout, SceneCSSGridItem } from './components/layout/CSSGrid/SceneCSSGridLayout';\nexport { SceneGridLayout } from './components/layout/grid/SceneGridLayout';\nexport { SceneGridLayoutDragStartEvent } from './components/layout/grid/types';\nexport { SceneGridItem } from './components/layout/grid/SceneGridItem';\nexport { SceneGridRow } from './components/layout/grid/SceneGridRow';\nexport { type SceneGridItemStateLike, type SceneGridItemLike } from './components/layout/grid/types';\nexport { SplitLayout } from './components/layout/split/SplitLayout';\nexport { LazyLoader } from './components/layout/LazyLoader';\nexport {\n type SceneAppPageLike,\n type SceneRouteMatch,\n type SceneAppPageState,\n type SceneAppDrilldownView,\n type SceneAppRoute,\n} from './components/SceneApp/types';\nexport { SceneApp, useSceneApp } from './components/SceneApp/SceneApp';\nexport { SceneAppPage } from './components/SceneApp/SceneAppPage';\nexport { SceneReactObject } from './components/SceneReactObject';\nexport { SceneObjectRef } from './core/SceneObjectRef';\nexport {\n PanelBuilders,\n PanelOptionsBuilders,\n FieldConfigBuilders,\n FieldConfigOverridesBuilder,\n} from './core/PanelBuilders';\nexport { FieldConfigBuilder } from './core/PanelBuilders/FieldConfigBuilder';\nexport { VizPanelBuilder } from './core/PanelBuilders/VizPanelBuilder';\nexport { SceneDebugger } from './components/SceneDebugger/SceneDebugger';\nexport { VariableValueSelectWrapper } from './variables/components/VariableValueSelectors';\nexport { ControlsLabel } from './utils/ControlsLabel';\nexport { MultiOrSingleValueSelect } from './variables/components/VariableValueSelect';\nexport { VizConfigBuilder } from './core/PanelBuilders/VizConfigBuilder';\nexport { VizConfigBuilders } from './core/PanelBuilders/VizConfigBuilders';\nexport { type VizConfig } from './core/PanelBuilders/types';\n\nexport const sceneUtils = {\n getUrlWithAppState,\n registerRuntimePanelPlugin,\n registerRuntimeDataSource,\n registerVariableMacro,\n cloneSceneObjectState,\n syncStateFromSearchParams,\n getUrlState,\n renderPrometheusLabelFilters,\n escapeLabelValueInRegexSelector,\n escapeLabelValueInExactSelector,\n escapeURLDelimiters,\n\n // Variable guards\n isAdHocVariable,\n isConstantVariable,\n isCustomVariable,\n isDataSourceVariable,\n isIntervalVariable,\n isQueryVariable,\n isTextBoxVariable,\n isGroupByVariable,\n isRepeatCloneOrChildOf,\n buildPathIdFor,\n};\n\nexport { SafeSerializableSceneObject } from './utils/SafeSerializableSceneObject';\nexport { getExploreURL } from './utils/explore';\nexport { loadResources } from './utils/loadResources';\nexport { PATH_ID_SEPARATOR } from './utils/pathId';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgJO,MAAM,UAAa,GAAA;AAAA,EACxB,kBAAA;AAAA,EACA,0BAAA;AAAA,EACA,yBAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,WAAA;AAAA,EACA,4BAAA;AAAA,EACA,+BAAA;AAAA,EACA,+BAAA;AAAA,EACA,mBAAA;AAAA;AAAA,EAGA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { getUrlWithAppState } from './components/SceneApp/utils';\nimport { registerRuntimePanelPlugin } from './components/VizPanel/registerRuntimePanelPlugin';\nimport { cloneSceneObjectState } from './core/sceneGraph/cloneSceneObject';\nimport { registerRuntimeDataSource } from './querying/RuntimeDataSource';\nimport { getUrlState, syncStateFromSearchParams } from './services/utils';\nimport { buildPathIdFor } from './utils/pathId';\nimport { isRepeatCloneOrChildOf } from './utils/utils';\n\nimport { registerVariableMacro } from './variables/macros';\nimport {\n escapeLabelValueInExactSelector,\n escapeLabelValueInRegexSelector,\n escapeURLDelimiters,\n renderPrometheusLabelFilters,\n} from './variables/utils';\nimport {\n isAdHocVariable,\n isQueryVariable,\n isTextBoxVariable,\n isCustomVariable,\n isDataSourceVariable,\n isConstantVariable,\n isIntervalVariable,\n isGroupByVariable,\n isSwitchVariable,\n} from './variables/variants/guards';\n\nexport * from './core/types';\nexport * from './core/events';\nexport { sceneGraph } from './core/sceneGraph';\nexport * as behaviors from './behaviors';\nexport * as dataLayers from './querying/layers';\n\nexport { SceneObjectBase, useSceneObjectState } from './core/SceneObjectBase';\nexport { SceneDataNode } from './core/SceneDataNode';\nexport { SceneTimeRange } from './core/SceneTimeRange';\nexport { SceneTimeZoneOverride } from './core/SceneTimeZoneOverride';\n\nexport { SceneQueryRunner, type QueryRunnerState } from './querying/SceneQueryRunner';\nexport { DataProviderProxy } from './querying/DataProviderProxy';\nexport {\n type ExtraQueryDescriptor,\n type ExtraQueryProvider,\n type ExtraQueryDataProcessor,\n} from './querying/ExtraQueryProvider';\nexport { SceneDataLayerSet, SceneDataLayerSetBase } from './querying/SceneDataLayerSet';\nexport { SceneDataLayerBase } from './querying/layers/SceneDataLayerBase';\nexport { SceneDataLayerControls } from './querying/layers/SceneDataLayerControls';\nexport { SceneDataTransformer, type SceneDataTransformerState } from './querying/SceneDataTransformer';\nexport { registerQueryWithController } from './querying/registerQueryWithController';\nexport { registerRuntimeDataSource, RuntimeDataSource } from './querying/RuntimeDataSource';\nexport type {\n SceneQueryControllerLike,\n SceneQueryControllerEntryType,\n SceneQueryControllerEntry,\n SceneInteractionProfileEvent,\n} from './behaviors/types';\nexport { SceneRenderProfiler } from './behaviors/SceneRenderProfiler';\n\nexport * from './variables/types';\nexport { VariableDependencyConfig } from './variables/VariableDependencyConfig';\nexport { formatRegistry, type FormatVariable } from './variables/interpolation/formatRegistry';\nexport { VariableValueSelectors } from './variables/components/VariableValueSelectors';\nexport { VariableValueControl } from './variables/components/VariableValueControl';\nexport { SceneVariableSet } from './variables/sets/SceneVariableSet';\nexport { ConstantVariable } from './variables/variants/ConstantVariable';\nexport { CustomVariable } from './variables/variants/CustomVariable';\nexport { SwitchVariable } from './variables/variants/SwitchVariable';\nexport { DataSourceVariable } from './variables/variants/DataSourceVariable';\nexport { QueryVariable } from './variables/variants/query/QueryVariable';\nexport { TestVariable } from './variables/variants/TestVariable';\nexport { TextBoxVariable } from './variables/variants/TextBoxVariable';\nexport { ScopesVariable } from './variables/variants/ScopesVariable';\nexport {\n MultiValueVariable,\n type MultiValueVariableState,\n type VariableGetOptionsArgs,\n} from './variables/variants/MultiValueVariable';\nexport { LocalValueVariable } from './variables/variants/LocalValueVariable';\nexport { IntervalVariable } from './variables/variants/IntervalVariable';\nexport { AdHocFiltersVariable } from './variables/adhoc/AdHocFiltersVariable';\nexport type { AdHocFilterWithLabels } from './variables/adhoc/AdHocFiltersVariable';\nexport { GroupByVariable } from './variables/groupby/GroupByVariable';\nexport { type MacroVariableConstructor } from './variables/macros/types';\nexport { escapeUrlPipeDelimiters } from './variables/utils';\n\nexport { type UrlSyncManagerLike, UrlSyncManager, NewSceneObjectAddedEvent } from './services/UrlSyncManager';\nexport { useUrlSync } from './services/useUrlSync';\nexport { UrlSyncContextProvider } from './services/UrlSyncContextProvider';\nexport { SceneObjectUrlSyncConfig } from './services/SceneObjectUrlSyncConfig';\n\nexport { EmbeddedScene, type EmbeddedSceneState } from './components/EmbeddedScene';\nexport { VizPanel, type VizPanelState } from './components/VizPanel/VizPanel';\nexport { VizPanelMenu } from './components/VizPanel/VizPanelMenu';\nexport { VizPanelExploreButton } from './components/VizPanel/VizPanelExploreButton';\nexport { NestedScene } from './components/NestedScene';\nexport { SceneCanvasText } from './components/SceneCanvasText';\nexport { SceneToolbarButton, SceneToolbarInput } from './components/SceneToolbarButton';\nexport { SceneTimePicker } from './components/SceneTimePicker';\nexport { SceneRefreshPicker, type SceneRefreshPickerState } from './components/SceneRefreshPicker';\nexport { SceneTimeRangeTransformerBase } from './core/SceneTimeRangeTransformerBase';\nexport { SceneTimeRangeCompare } from './components/SceneTimeRangeCompare';\nexport { SceneByFrameRepeater } from './components/SceneByFrameRepeater';\nexport { SceneByVariableRepeater } from './components/SceneByVariableRepeater';\nexport { SceneControlsSpacer } from './components/SceneControlsSpacer';\nexport {\n SceneFlexLayout,\n SceneFlexItem,\n type SceneFlexItemState,\n type SceneFlexItemLike,\n} from './components/layout/SceneFlexLayout';\nexport { SceneCSSGridLayout, SceneCSSGridItem } from './components/layout/CSSGrid/SceneCSSGridLayout';\nexport { SceneGridLayout } from './components/layout/grid/SceneGridLayout';\nexport { SceneGridLayoutDragStartEvent } from './components/layout/grid/types';\nexport { SceneGridItem } from './components/layout/grid/SceneGridItem';\nexport { SceneGridRow } from './components/layout/grid/SceneGridRow';\nexport { type SceneGridItemStateLike, type SceneGridItemLike } from './components/layout/grid/types';\nexport { SplitLayout } from './components/layout/split/SplitLayout';\nexport { LazyLoader } from './components/layout/LazyLoader';\nexport {\n type SceneAppPageLike,\n type SceneRouteMatch,\n type SceneAppPageState,\n type SceneAppDrilldownView,\n type SceneAppRoute,\n} from './components/SceneApp/types';\nexport { SceneApp, useSceneApp } from './components/SceneApp/SceneApp';\nexport { SceneAppPage } from './components/SceneApp/SceneAppPage';\nexport { SceneReactObject } from './components/SceneReactObject';\nexport { SceneObjectRef } from './core/SceneObjectRef';\nexport {\n PanelBuilders,\n PanelOptionsBuilders,\n FieldConfigBuilders,\n FieldConfigOverridesBuilder,\n} from './core/PanelBuilders';\nexport { FieldConfigBuilder } from './core/PanelBuilders/FieldConfigBuilder';\nexport { VizPanelBuilder } from './core/PanelBuilders/VizPanelBuilder';\nexport { SceneDebugger } from './components/SceneDebugger/SceneDebugger';\nexport { VariableValueSelectWrapper } from './variables/components/VariableValueSelectors';\nexport { ControlsLabel } from './utils/ControlsLabel';\nexport { MultiOrSingleValueSelect } from './variables/components/VariableValueSelect';\nexport { VizConfigBuilder } from './core/PanelBuilders/VizConfigBuilder';\nexport { VizConfigBuilders } from './core/PanelBuilders/VizConfigBuilders';\nexport { type VizConfig } from './core/PanelBuilders/types';\n\nexport const sceneUtils = {\n getUrlWithAppState,\n registerRuntimePanelPlugin,\n registerRuntimeDataSource,\n registerVariableMacro,\n cloneSceneObjectState,\n syncStateFromSearchParams,\n getUrlState,\n renderPrometheusLabelFilters,\n escapeLabelValueInRegexSelector,\n escapeLabelValueInExactSelector,\n escapeURLDelimiters,\n\n // Variable guards\n isAdHocVariable,\n isConstantVariable,\n isCustomVariable,\n isDataSourceVariable,\n isIntervalVariable,\n isQueryVariable,\n isTextBoxVariable,\n isGroupByVariable,\n isSwitchVariable,\n isRepeatCloneOrChildOf,\n buildPathIdFor,\n};\n\nexport { SafeSerializableSceneObject } from './utils/SafeSerializableSceneObject';\nexport { getExploreURL } from './utils/explore';\nexport { loadResources } from './utils/loadResources';\nexport { PATH_ID_SEPARATOR } from './utils/pathId';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkJO,MAAM,UAAa,GAAA;AAAA,EACxB,kBAAA;AAAA,EACA,0BAAA;AAAA,EACA,yBAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,WAAA;AAAA,EACA,4BAAA;AAAA,EACA,+BAAA;AAAA,EACA,+BAAA;AAAA,EACA,mBAAA;AAAA;AAAA,EAGA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF;;;;"}
@@ -0,0 +1,108 @@
1
+ import React from 'react';
2
+ import { of } from 'rxjs';
3
+ import { useStyles2, Switch } from '@grafana/ui';
4
+ import { css } from '@emotion/css';
5
+ import { SceneObjectBase } from '../../core/SceneObjectBase.js';
6
+ import { SceneObjectUrlSyncConfig } from '../../services/SceneObjectUrlSyncConfig.js';
7
+ import { SceneVariableValueChangedEvent } from '../types.js';
8
+
9
+ class SwitchVariable extends SceneObjectBase {
10
+ constructor(initialState) {
11
+ super({
12
+ // TODO: remove this once switch is in the schema @leventebalogh
13
+ // @ts-expect-error - switch is a valid variable type, but not in the schema yet
14
+ type: "switch",
15
+ value: "false",
16
+ enabledValue: "true",
17
+ disabledValue: "false",
18
+ name: "",
19
+ ...initialState
20
+ });
21
+ this._prevValue = "";
22
+ this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: () => this.getKeys() });
23
+ }
24
+ /**
25
+ * This function is called on when SceneVariableSet is activated or when a dependency changes.
26
+ */
27
+ validateAndUpdate() {
28
+ const newValue = this.getValue();
29
+ if (this._prevValue !== newValue) {
30
+ this._prevValue = newValue;
31
+ this.publishEvent(new SceneVariableValueChangedEvent(this), true);
32
+ }
33
+ return of({});
34
+ }
35
+ setValue(newValue) {
36
+ if (this.getValue() === newValue) {
37
+ return;
38
+ }
39
+ if ([this.state.enabledValue, this.state.disabledValue].includes(newValue)) {
40
+ this.setState({ value: newValue });
41
+ this.publishEvent(new SceneVariableValueChangedEvent(this), true);
42
+ } else {
43
+ console.error(
44
+ `Invalid value for switch variable: "${newValue}". Valid values are: "${this.state.enabledValue}" and "${this.state.disabledValue}".`
45
+ );
46
+ }
47
+ }
48
+ getValue() {
49
+ return this.state.value;
50
+ }
51
+ isEnabled() {
52
+ return this.state.value === this.state.enabledValue;
53
+ }
54
+ isDisabled() {
55
+ return this.state.value === this.state.disabledValue;
56
+ }
57
+ getKey() {
58
+ return `var-${this.state.name}`;
59
+ }
60
+ getKeys() {
61
+ if (this.state.skipUrlSync) {
62
+ return [];
63
+ }
64
+ return [this.getKey()];
65
+ }
66
+ getUrlState() {
67
+ if (this.state.skipUrlSync) {
68
+ return {};
69
+ }
70
+ return { [this.getKey()]: this.state.value };
71
+ }
72
+ updateFromUrl(values) {
73
+ const val = values[this.getKey()];
74
+ if (typeof val === "string") {
75
+ this.setValue(val);
76
+ }
77
+ }
78
+ }
79
+ SwitchVariable.Component = SwitchVariableRenderer;
80
+ function SwitchVariableRenderer({ model }) {
81
+ const state = model.useState();
82
+ const styles = useStyles2(getStyles);
83
+ return /* @__PURE__ */ React.createElement("div", { className: styles.container }, /* @__PURE__ */ React.createElement(
84
+ Switch,
85
+ {
86
+ value: state.value === state.enabledValue,
87
+ onChange: (event) => {
88
+ model.setValue(event.currentTarget.checked ? state.enabledValue : state.disabledValue);
89
+ }
90
+ }
91
+ ));
92
+ }
93
+ function getStyles(theme) {
94
+ return {
95
+ container: css({
96
+ display: "flex",
97
+ alignItems: "center",
98
+ padding: theme.spacing(0, 1),
99
+ height: theme.spacing(theme.components.height.md),
100
+ borderRadius: theme.shape.radius.default,
101
+ border: `1px solid ${theme.components.input.borderColor}`,
102
+ background: theme.colors.background.primary
103
+ })
104
+ };
105
+ }
106
+
107
+ export { SwitchVariable };
108
+ //# sourceMappingURL=SwitchVariable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwitchVariable.js","sources":["../../../../src/variables/variants/SwitchVariable.tsx"],"sourcesContent":["import React from 'react';\nimport { Observable, of } from 'rxjs';\nimport { Switch, useStyles2 } from '@grafana/ui';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { css } from '@emotion/css';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneComponentProps, SceneObjectUrlValues } from '../../core/types';\nimport { SceneObjectUrlSyncConfig } from '../../services/SceneObjectUrlSyncConfig';\nimport {\n SceneVariable,\n SceneVariableState,\n SceneVariableValueChangedEvent,\n ValidateAndUpdateResult,\n VariableValue,\n} from '../types';\n\nexport interface SwitchVariableState extends SceneVariableState {\n value: string;\n enabledValue: string;\n disabledValue: string;\n}\n\nexport class SwitchVariable extends SceneObjectBase<SwitchVariableState> implements SceneVariable<SwitchVariableState> {\n public static Component = SwitchVariableRenderer;\n private _prevValue: VariableValue = '';\n\n public constructor(initialState: Partial<SwitchVariableState>) {\n super({\n // TODO: remove this once switch is in the schema @leventebalogh\n // @ts-expect-error - switch is a valid variable type, but not in the schema yet\n type: 'switch',\n value: 'false',\n enabledValue: 'true',\n disabledValue: 'false',\n name: '',\n ...initialState,\n });\n\n this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: () => this.getKeys() });\n }\n\n /**\n * This function is called on when SceneVariableSet is activated or when a dependency changes.\n */\n public validateAndUpdate(): Observable<ValidateAndUpdateResult> {\n const newValue = this.getValue();\n\n if (this._prevValue !== newValue) {\n this._prevValue = newValue;\n this.publishEvent(new SceneVariableValueChangedEvent(this), true);\n }\n\n return of({});\n }\n\n public setValue(newValue: string): void {\n // Ignore if there's no change\n if (this.getValue() === newValue) {\n return;\n }\n\n if ([this.state.enabledValue, this.state.disabledValue].includes(newValue)) {\n this.setState({ value: newValue });\n this.publishEvent(new SceneVariableValueChangedEvent(this), true);\n } else {\n console.error(\n `Invalid value for switch variable: \"${newValue}\". Valid values are: \"${this.state.enabledValue}\" and \"${this.state.disabledValue}\".`\n );\n }\n }\n\n public getValue(): VariableValue {\n return this.state.value;\n }\n\n public isEnabled(): boolean {\n return this.state.value === this.state.enabledValue;\n }\n\n public isDisabled(): boolean {\n return this.state.value === this.state.disabledValue;\n }\n\n private getKey(): string {\n return `var-${this.state.name}`;\n }\n\n public getKeys(): string[] {\n if (this.state.skipUrlSync) {\n return [];\n }\n\n return [this.getKey()];\n }\n\n public getUrlState(): SceneObjectUrlValues {\n if (this.state.skipUrlSync) {\n return {};\n }\n\n return { [this.getKey()]: this.state.value };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues): void {\n const val = values[this.getKey()];\n\n if (typeof val === 'string') {\n this.setValue(val);\n }\n }\n}\n\nfunction SwitchVariableRenderer({ model }: SceneComponentProps<SwitchVariable>) {\n const state = model.useState();\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.container}>\n <Switch\n value={state.value === state.enabledValue}\n onChange={(event) => {\n model.setValue(event!.currentTarget.checked ? state.enabledValue : state.disabledValue);\n }}\n />\n </div>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n container: css({\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(0, 1),\n height: theme.spacing(theme.components.height.md),\n borderRadius: theme.shape.radius.default,\n border: `1px solid ${theme.components.input.borderColor}`,\n background: theme.colors.background.primary,\n }),\n };\n}\n"],"names":[],"mappings":"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"}
@@ -22,6 +22,9 @@ function isTextBoxVariable(variable) {
22
22
  function isGroupByVariable(variable) {
23
23
  return variable.state.type === "groupby";
24
24
  }
25
+ function isSwitchVariable(variable) {
26
+ return variable.state.type === "switch";
27
+ }
25
28
 
26
- export { isAdHocVariable, isConstantVariable, isCustomVariable, isDataSourceVariable, isGroupByVariable, isIntervalVariable, isQueryVariable, isTextBoxVariable };
29
+ export { isAdHocVariable, isConstantVariable, isCustomVariable, isDataSourceVariable, isGroupByVariable, isIntervalVariable, isQueryVariable, isSwitchVariable, isTextBoxVariable };
27
30
  //# sourceMappingURL=guards.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"guards.js","sources":["../../../../src/variables/variants/guards.ts"],"sourcesContent":["import { AdHocFiltersVariable } from '../adhoc/AdHocFiltersVariable';\nimport { SceneVariable } from '../types';\nimport { ConstantVariable } from './ConstantVariable';\nimport { CustomVariable } from './CustomVariable';\nimport { DataSourceVariable } from './DataSourceVariable';\nimport { IntervalVariable } from './IntervalVariable';\nimport { TextBoxVariable } from './TextBoxVariable';\nimport { QueryVariable } from './query/QueryVariable';\nimport { GroupByVariable } from '../groupby/GroupByVariable';\n\nexport function isAdHocVariable(variable: SceneVariable): variable is AdHocFiltersVariable {\n return variable.state.type === 'adhoc';\n}\n\nexport function isConstantVariable(variable: SceneVariable): variable is ConstantVariable {\n return variable.state.type === 'constant';\n}\n\nexport function isCustomVariable(variable: SceneVariable): variable is CustomVariable {\n return variable.state.type === 'custom';\n}\n\nexport function isDataSourceVariable(variable: SceneVariable): variable is DataSourceVariable {\n return variable.state.type === 'datasource';\n}\n\nexport function isIntervalVariable(variable: SceneVariable): variable is IntervalVariable {\n return variable.state.type === 'interval';\n}\n\nexport function isQueryVariable(variable: SceneVariable): variable is QueryVariable {\n return variable.state.type === 'query';\n}\n\nexport function isTextBoxVariable(variable: SceneVariable): variable is TextBoxVariable {\n return variable.state.type === 'textbox';\n}\n\nexport function isGroupByVariable(variable: SceneVariable): variable is GroupByVariable {\n return variable.state.type === 'groupby';\n}\n"],"names":[],"mappings":"AAUO,SAAS,gBAAgB,QAA2D,EAAA;AACzF,EAAO,OAAA,QAAA,CAAS,MAAM,IAAS,KAAA,OAAA;AACjC;AAEO,SAAS,mBAAmB,QAAuD,EAAA;AACxF,EAAO,OAAA,QAAA,CAAS,MAAM,IAAS,KAAA,UAAA;AACjC;AAEO,SAAS,iBAAiB,QAAqD,EAAA;AACpF,EAAO,OAAA,QAAA,CAAS,MAAM,IAAS,KAAA,QAAA;AACjC;AAEO,SAAS,qBAAqB,QAAyD,EAAA;AAC5F,EAAO,OAAA,QAAA,CAAS,MAAM,IAAS,KAAA,YAAA;AACjC;AAEO,SAAS,mBAAmB,QAAuD,EAAA;AACxF,EAAO,OAAA,QAAA,CAAS,MAAM,IAAS,KAAA,UAAA;AACjC;AAEO,SAAS,gBAAgB,QAAoD,EAAA;AAClF,EAAO,OAAA,QAAA,CAAS,MAAM,IAAS,KAAA,OAAA;AACjC;AAEO,SAAS,kBAAkB,QAAsD,EAAA;AACtF,EAAO,OAAA,QAAA,CAAS,MAAM,IAAS,KAAA,SAAA;AACjC;AAEO,SAAS,kBAAkB,QAAsD,EAAA;AACtF,EAAO,OAAA,QAAA,CAAS,MAAM,IAAS,KAAA,SAAA;AACjC;;;;"}
1
+ {"version":3,"file":"guards.js","sources":["../../../../src/variables/variants/guards.ts"],"sourcesContent":["import { AdHocFiltersVariable } from '../adhoc/AdHocFiltersVariable';\nimport { SceneVariable } from '../types';\nimport { ConstantVariable } from './ConstantVariable';\nimport { CustomVariable } from './CustomVariable';\nimport { DataSourceVariable } from './DataSourceVariable';\nimport { IntervalVariable } from './IntervalVariable';\nimport { TextBoxVariable } from './TextBoxVariable';\nimport { QueryVariable } from './query/QueryVariable';\nimport { GroupByVariable } from '../groupby/GroupByVariable';\nimport { SwitchVariable } from './SwitchVariable';\n\nexport function isAdHocVariable(variable: SceneVariable): variable is AdHocFiltersVariable {\n return variable.state.type === 'adhoc';\n}\n\nexport function isConstantVariable(variable: SceneVariable): variable is ConstantVariable {\n return variable.state.type === 'constant';\n}\n\nexport function isCustomVariable(variable: SceneVariable): variable is CustomVariable {\n return variable.state.type === 'custom';\n}\n\nexport function isDataSourceVariable(variable: SceneVariable): variable is DataSourceVariable {\n return variable.state.type === 'datasource';\n}\n\nexport function isIntervalVariable(variable: SceneVariable): variable is IntervalVariable {\n return variable.state.type === 'interval';\n}\n\nexport function isQueryVariable(variable: SceneVariable): variable is QueryVariable {\n return variable.state.type === 'query';\n}\n\nexport function isTextBoxVariable(variable: SceneVariable): variable is TextBoxVariable {\n return variable.state.type === 'textbox';\n}\n\nexport function isGroupByVariable(variable: SceneVariable): variable is GroupByVariable {\n return variable.state.type === 'groupby';\n}\n\nexport function isSwitchVariable(variable: SceneVariable): variable is SwitchVariable {\n // TODO: remove this once switch is in the schema @leventebalogh\n // @ts-expect-error - switch is a valid variable type, but not in the schema yet\n return variable.state.type === 'switch';\n}\n"],"names":[],"mappings":"AAWO,SAAS,gBAAgB,QAA2D,EAAA;AACzF,EAAO,OAAA,QAAA,CAAS,MAAM,IAAS,KAAA,OAAA;AACjC;AAEO,SAAS,mBAAmB,QAAuD,EAAA;AACxF,EAAO,OAAA,QAAA,CAAS,MAAM,IAAS,KAAA,UAAA;AACjC;AAEO,SAAS,iBAAiB,QAAqD,EAAA;AACpF,EAAO,OAAA,QAAA,CAAS,MAAM,IAAS,KAAA,QAAA;AACjC;AAEO,SAAS,qBAAqB,QAAyD,EAAA;AAC5F,EAAO,OAAA,QAAA,CAAS,MAAM,IAAS,KAAA,YAAA;AACjC;AAEO,SAAS,mBAAmB,QAAuD,EAAA;AACxF,EAAO,OAAA,QAAA,CAAS,MAAM,IAAS,KAAA,UAAA;AACjC;AAEO,SAAS,gBAAgB,QAAoD,EAAA;AAClF,EAAO,OAAA,QAAA,CAAS,MAAM,IAAS,KAAA,OAAA;AACjC;AAEO,SAAS,kBAAkB,QAAsD,EAAA;AACtF,EAAO,OAAA,QAAA,CAAS,MAAM,IAAS,KAAA,SAAA;AACjC;AAEO,SAAS,kBAAkB,QAAsD,EAAA;AACtF,EAAO,OAAA,QAAA,CAAS,MAAM,IAAS,KAAA,SAAA;AACjC;AAEO,SAAS,iBAAiB,QAAqD,EAAA;AAGpF,EAAO,OAAA,QAAA,CAAS,MAAM,IAAS,KAAA,QAAA;AACjC;;;;"}
package/dist/index.d.ts CHANGED
@@ -1285,6 +1285,30 @@ declare class GroupByVariable extends MultiValueVariable<GroupByVariableState> {
1285
1285
  }
1286
1286
  declare function GroupByVariableRenderer({ model }: SceneComponentProps<GroupByVariable>): React__default.JSX.Element;
1287
1287
 
1288
+ interface SwitchVariableState extends SceneVariableState {
1289
+ value: string;
1290
+ enabledValue: string;
1291
+ disabledValue: string;
1292
+ }
1293
+ declare class SwitchVariable extends SceneObjectBase<SwitchVariableState> implements SceneVariable<SwitchVariableState> {
1294
+ static Component: typeof SwitchVariableRenderer;
1295
+ private _prevValue;
1296
+ constructor(initialState: Partial<SwitchVariableState>);
1297
+ /**
1298
+ * This function is called on when SceneVariableSet is activated or when a dependency changes.
1299
+ */
1300
+ validateAndUpdate(): Observable<ValidateAndUpdateResult>;
1301
+ setValue(newValue: string): void;
1302
+ getValue(): VariableValue;
1303
+ isEnabled(): boolean;
1304
+ isDisabled(): boolean;
1305
+ private getKey;
1306
+ getKeys(): string[];
1307
+ getUrlState(): SceneObjectUrlValues;
1308
+ updateFromUrl(values: SceneObjectUrlValues): void;
1309
+ }
1310
+ declare function SwitchVariableRenderer({ model }: SceneComponentProps<SwitchVariable>): React__default.JSX.Element;
1311
+
1288
1312
  declare function isAdHocVariable(variable: SceneVariable): variable is AdHocFiltersVariable;
1289
1313
  declare function isConstantVariable(variable: SceneVariable): variable is ConstantVariable;
1290
1314
  declare function isCustomVariable(variable: SceneVariable): variable is CustomVariable;
@@ -1293,6 +1317,7 @@ declare function isIntervalVariable(variable: SceneVariable): variable is Interv
1293
1317
  declare function isQueryVariable(variable: SceneVariable): variable is QueryVariable;
1294
1318
  declare function isTextBoxVariable(variable: SceneVariable): variable is TextBoxVariable;
1295
1319
  declare function isGroupByVariable(variable: SceneVariable): variable is GroupByVariable;
1320
+ declare function isSwitchVariable(variable: SceneVariable): variable is SwitchVariable;
1296
1321
 
1297
1322
  interface SceneObjectStateChangedPayload<TState extends SceneObjectState = SceneObjectState> {
1298
1323
  prevState: TState;
@@ -3201,9 +3226,10 @@ declare const sceneUtils: {
3201
3226
  isQueryVariable: typeof isQueryVariable;
3202
3227
  isTextBoxVariable: typeof isTextBoxVariable;
3203
3228
  isGroupByVariable: typeof isGroupByVariable;
3229
+ isSwitchVariable: typeof isSwitchVariable;
3204
3230
  isRepeatCloneOrChildOf: typeof isRepeatCloneOrChildOf;
3205
3231
  buildPathIdFor: typeof buildPathIdFor;
3206
3232
  };
3207
3233
 
3208
- export { AdHocFiltersVariable, ConstantVariable, ControlsLabel, CustomVariable, DataProviderProxy, DataSourceVariable, EmbeddedScene, FieldConfigBuilder, FieldConfigBuilders, FieldConfigOverridesBuilder, GroupByVariable, IntervalVariable, LazyLoader, LocalValueVariable, MultiOrSingleValueSelect, MultiValueVariable, NestedScene, NewSceneObjectAddedEvent, PATH_ID_SEPARATOR, PanelBuilders, PanelOptionsBuilders, QueryVariable, RuntimeDataSource, SafeSerializableSceneObject, SceneApp, SceneAppPage, SceneByFrameRepeater, SceneByVariableRepeater, SceneCSSGridItem, SceneCSSGridLayout, SceneCanvasText, SceneControlsSpacer, SceneDataLayerBase, SceneDataLayerControls, SceneDataLayerSet, SceneDataLayerSetBase, SceneDataNode, SceneDataTransformer, SceneDebugger, SceneFlexItem, SceneFlexLayout, SceneGridItem, SceneGridLayout, SceneGridLayoutDragStartEvent, SceneGridRow, SceneObjectBase, SceneObjectRef, SceneObjectStateChangedEvent, SceneObjectUrlSyncConfig, SceneQueryRunner, SceneReactObject, SceneRefreshPicker, SceneRenderProfiler, SceneTimePicker, SceneTimeRange, SceneTimeRangeCompare, SceneTimeRangeTransformerBase, SceneTimeZoneOverride, SceneToolbarButton, SceneToolbarInput, SceneVariableSet, SceneVariableValueChangedEvent, ScopesVariable, SplitLayout, TestVariable, TextBoxVariable, UrlSyncContextProvider, UrlSyncManager, UserActionEvent, VariableDependencyConfig, VariableValueControl, VariableValueSelectWrapper, VariableValueSelectors, VizConfigBuilder, VizConfigBuilders, VizPanel, VizPanelBuilder, VizPanelExploreButton, VizPanelMenu, index$1 as behaviors, index as dataLayers, escapeUrlPipeDelimiters, formatRegistry, getExploreURL, isCustomVariableValue, isDataLayer, isDataRequestEnricher, isFiltersRequestEnricher, isSceneObject, loadResources, registerQueryWithController, registerRuntimeDataSource, sceneGraph, sceneUtils, useSceneApp, useSceneObjectState, useUrlSync };
3234
+ export { AdHocFiltersVariable, ConstantVariable, ControlsLabel, CustomVariable, DataProviderProxy, DataSourceVariable, EmbeddedScene, FieldConfigBuilder, FieldConfigBuilders, FieldConfigOverridesBuilder, GroupByVariable, IntervalVariable, LazyLoader, LocalValueVariable, MultiOrSingleValueSelect, MultiValueVariable, NestedScene, NewSceneObjectAddedEvent, PATH_ID_SEPARATOR, PanelBuilders, PanelOptionsBuilders, QueryVariable, RuntimeDataSource, SafeSerializableSceneObject, SceneApp, SceneAppPage, SceneByFrameRepeater, SceneByVariableRepeater, SceneCSSGridItem, SceneCSSGridLayout, SceneCanvasText, SceneControlsSpacer, SceneDataLayerBase, SceneDataLayerControls, SceneDataLayerSet, SceneDataLayerSetBase, SceneDataNode, SceneDataTransformer, SceneDebugger, SceneFlexItem, SceneFlexLayout, SceneGridItem, SceneGridLayout, SceneGridLayoutDragStartEvent, SceneGridRow, SceneObjectBase, SceneObjectRef, SceneObjectStateChangedEvent, SceneObjectUrlSyncConfig, SceneQueryRunner, SceneReactObject, SceneRefreshPicker, SceneRenderProfiler, SceneTimePicker, SceneTimeRange, SceneTimeRangeCompare, SceneTimeRangeTransformerBase, SceneTimeZoneOverride, SceneToolbarButton, SceneToolbarInput, SceneVariableSet, SceneVariableValueChangedEvent, ScopesVariable, SplitLayout, SwitchVariable, TestVariable, TextBoxVariable, UrlSyncContextProvider, UrlSyncManager, UserActionEvent, VariableDependencyConfig, VariableValueControl, VariableValueSelectWrapper, VariableValueSelectors, VizConfigBuilder, VizConfigBuilders, VizPanel, VizPanelBuilder, VizPanelExploreButton, VizPanelMenu, index$1 as behaviors, index as dataLayers, escapeUrlPipeDelimiters, formatRegistry, getExploreURL, isCustomVariableValue, isDataLayer, isDataRequestEnricher, isFiltersRequestEnricher, isSceneObject, loadResources, registerQueryWithController, registerRuntimeDataSource, sceneGraph, sceneUtils, useSceneApp, useSceneObjectState, useUrlSync };
3209
3235
  export type { AdHocFilterWithLabels, CancelActivationHandler, ControlsLayout, CustomFormatterVariable, CustomTransformOperator, CustomTransformerDefinition, CustomVariableValue, DataLayerFilter, DataRequestEnricher, DeepPartial, EmbeddedSceneState, ExtraQueryDataProcessor, ExtraQueryDescriptor, ExtraQueryProvider, FiltersRequestEnricher, FormatVariable, InterpolationFormatParameter, MacroVariableConstructor, MultiValueVariableState, QueryRunnerState, SceneActivationHandler, SceneAppDrilldownView, SceneAppPageLike, SceneAppPageState, SceneAppRoute, SceneComponent, SceneComponentProps, SceneDataLayerProvider, SceneDataLayerProviderState, SceneDataProvider, SceneDataProviderResult, SceneDataQuery, SceneDataState, SceneDataTransformerState, SceneDeactivationHandler, SceneFlexItemLike, SceneFlexItemState, SceneGridItemLike, SceneGridItemStateLike, SceneInteractionProfileEvent, SceneLayout, SceneLayoutChildOptions, SceneLayoutState, SceneObject, SceneObjectState, SceneObjectStateChangedPayload, SceneObjectUrlSyncHandler, SceneObjectUrlValue, SceneObjectUrlValues, SceneObjectWithUrlSync, SceneQueryControllerEntry, SceneQueryControllerEntryType, SceneQueryControllerLike, SceneRefreshPickerState, SceneRouteMatch, SceneStateChangedHandler, SceneStatelessBehavior, SceneTimeRangeLike, SceneTimeRangeState, SceneUrlSyncOptions, SceneVariable, SceneVariableDependencyConfigLike, SceneVariableSetState, SceneVariableState, SceneVariables, UrlSyncManagerLike, UseStateHookOptions, ValidateAndUpdateResult, VariableCustomFormatterFn, VariableGetOptionsArgs, VariableValue, VariableValueOption, VariableValueSingle, VizConfig, VizPanelState };
package/dist/index.js CHANGED
@@ -3603,7 +3603,7 @@ function wrapInSafeSerializableSceneObject(sceneObject) {
3603
3603
  function DefaultGroupByCustomIndicatorContainer(props) {
3604
3604
  const { model } = props;
3605
3605
  const theme = ui.useTheme2();
3606
- const styles = getStyles$h(theme);
3606
+ const styles = getStyles$i(theme);
3607
3607
  const inputStyles = ui.getInputStyles({ theme, invalid: false });
3608
3608
  const value = lodash.isArray(model.state.value) ? model.state.value : model.state.value ? [model.state.value] : [];
3609
3609
  let buttons = [];
@@ -3685,7 +3685,7 @@ function DefaultGroupByCustomIndicatorContainer(props) {
3685
3685
  buttons
3686
3686
  );
3687
3687
  }
3688
- const getStyles$h = (theme) => ({
3688
+ const getStyles$i = (theme) => ({
3689
3689
  clearIcon: css.css({
3690
3690
  color: theme.colors.action.disabledText,
3691
3691
  cursor: "pointer",
@@ -4206,7 +4206,7 @@ function LoadingIndicator(props) {
4206
4206
  }
4207
4207
 
4208
4208
  function ControlsLabel(props) {
4209
- const styles = ui.useStyles2(getStyles$g);
4209
+ const styles = ui.useStyles2(getStyles$h);
4210
4210
  const theme = ui.useTheme2();
4211
4211
  const isVertical = props.layout === "vertical";
4212
4212
  const loadingIndicator = Boolean(props.isLoading) ? /* @__PURE__ */ React__default.default.createElement(
@@ -4253,7 +4253,7 @@ function ControlsLabel(props) {
4253
4253
  }
4254
4254
  return labelElement;
4255
4255
  }
4256
- const getStyles$g = (theme) => ({
4256
+ const getStyles$h = (theme) => ({
4257
4257
  horizontalLabel: css.css({
4258
4258
  background: theme.isDark ? theme.colors.background.primary : theme.colors.background.secondary,
4259
4259
  display: `flex`,
@@ -4306,7 +4306,7 @@ function keyLabelToOption(key, label) {
4306
4306
  const filterNoOp = () => true;
4307
4307
  function AdHocFilterRenderer({ filter, model }) {
4308
4308
  var _a, _b, _c, _d, _e;
4309
- const styles = ui.useStyles2(getStyles$f);
4309
+ const styles = ui.useStyles2(getStyles$g);
4310
4310
  const [keys, setKeys] = React.useState([]);
4311
4311
  const [values, setValues] = React.useState([]);
4312
4312
  const [isKeysLoading, setIsKeysLoading] = React.useState(false);
@@ -4533,7 +4533,7 @@ function AdHocFilterRenderer({ filter, model }) {
4533
4533
  }
4534
4534
  ));
4535
4535
  }
4536
- const getStyles$f = (theme) => ({
4536
+ const getStyles$g = (theme) => ({
4537
4537
  field: css.css({
4538
4538
  marginBottom: 0
4539
4539
  }),
@@ -4733,7 +4733,7 @@ function isFilter(filter) {
4733
4733
 
4734
4734
  const DropdownItem = React.forwardRef(
4735
4735
  function DropdownItem2({ children, active, addGroupBottomBorder, isMultiValueEdit, checked, ...rest }, ref) {
4736
- const styles = ui.useStyles2(getStyles$e);
4736
+ const styles = ui.useStyles2(getStyles$f);
4737
4737
  const id = React.useId();
4738
4738
  return /* @__PURE__ */ React__default.default.createElement(
4739
4739
  "div",
@@ -4749,7 +4749,7 @@ const DropdownItem = React.forwardRef(
4749
4749
  );
4750
4750
  }
4751
4751
  );
4752
- const getStyles$e = (theme) => ({
4752
+ const getStyles$f = (theme) => ({
4753
4753
  option: css.css({
4754
4754
  label: "grafana-select-option",
4755
4755
  top: 0,
@@ -4819,7 +4819,7 @@ const MultiValueApplyButton = ({
4819
4819
  maxOptionWidth,
4820
4820
  menuHeight
4821
4821
  }) => {
4822
- const styles = ui.useStyles2(getStyles$e);
4822
+ const styles = ui.useStyles2(getStyles$f);
4823
4823
  const floatingElementRect = floatingElement == null ? void 0 : floatingElement.getBoundingClientRect();
4824
4824
  return /* @__PURE__ */ React__default.default.createElement(
4825
4825
  "div",
@@ -5040,7 +5040,7 @@ const MultiValuePill = ({
5040
5040
  handleEditMultiValuePill
5041
5041
  }) => {
5042
5042
  var _a, _b;
5043
- const styles = ui.useStyles2(getStyles$d);
5043
+ const styles = ui.useStyles2(getStyles$e);
5044
5044
  const editMultiValuePill = React.useCallback(
5045
5045
  (e) => {
5046
5046
  e.stopPropagation();
@@ -5104,7 +5104,7 @@ const MultiValuePill = ({
5104
5104
  )
5105
5105
  );
5106
5106
  };
5107
- const getStyles$d = (theme) => ({
5107
+ const getStyles$e = (theme) => ({
5108
5108
  basePill: css.css({
5109
5109
  display: "flex",
5110
5110
  alignItems: "center",
@@ -5143,7 +5143,7 @@ const AdHocCombobox = React.forwardRef(function AdHocCombobox2({ filter, model,
5143
5143
  const [activeIndex, setActiveIndex] = React.useState(null);
5144
5144
  const [filterInputType, setInputType] = React.useState(!isAlwaysWip ? "value" : "key");
5145
5145
  const [preventFiltering, setPreventFiltering] = React.useState(!isAlwaysWip && filterInputType === "value");
5146
- const styles = ui.useStyles2(getStyles$c);
5146
+ const styles = ui.useStyles2(getStyles$d);
5147
5147
  const [filterMultiValues, setFilterMultiValues] = React.useState([]);
5148
5148
  const [_, setForceRefresh] = React.useState({});
5149
5149
  const allowCustomValue = (_a = model.state.allowCustomValue) != null ? _a : true;
@@ -5752,7 +5752,7 @@ const AdHocCombobox = React.forwardRef(function AdHocCombobox2({ filter, model,
5752
5752
  }
5753
5753
  ) : null))));
5754
5754
  });
5755
- const getStyles$c = (theme) => ({
5755
+ const getStyles$d = (theme) => ({
5756
5756
  comboboxWrapper: css.css({
5757
5757
  display: "flex",
5758
5758
  flexWrap: "wrap"
@@ -5826,7 +5826,7 @@ const getStyles$c = (theme) => ({
5826
5826
  const LABEL_MAX_VISIBLE_LENGTH = 20;
5827
5827
  function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
5828
5828
  var _a, _b, _c, _d;
5829
- const styles = ui.useStyles2(getStyles$b);
5829
+ const styles = ui.useStyles2(getStyles$c);
5830
5830
  const [viewMode, setViewMode] = React.useState(true);
5831
5831
  const [shouldFocusOnPillWrapper, setShouldFocusOnPillWrapper] = React.useState(false);
5832
5832
  const pillWrapperRef = React.useRef(null);
@@ -6004,7 +6004,7 @@ function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
6004
6004
  }
6005
6005
  );
6006
6006
  }
6007
- const getStyles$b = (theme) => ({
6007
+ const getStyles$c = (theme) => ({
6008
6008
  combinedFilterPill: css.css({
6009
6009
  display: "flex",
6010
6010
  alignItems: "center",
@@ -6088,7 +6088,7 @@ const AdHocFiltersAlwaysWipCombobox = React.forwardRef(function AdHocFiltersAlwa
6088
6088
 
6089
6089
  const AdHocFiltersComboboxRenderer = React.memo(function AdHocFiltersComboboxRenderer2({ model }) {
6090
6090
  const { originFilters, filters, readOnly } = model.useState();
6091
- const styles = ui.useStyles2(getStyles$a);
6091
+ const styles = ui.useStyles2(getStyles$b);
6092
6092
  const focusOnWipInputRef = React.useRef();
6093
6093
  return /* @__PURE__ */ React__default.default.createElement(
6094
6094
  "div",
@@ -6124,7 +6124,7 @@ const AdHocFiltersComboboxRenderer = React.memo(function AdHocFiltersComboboxRen
6124
6124
  !readOnly ? /* @__PURE__ */ React__default.default.createElement(AdHocFiltersAlwaysWipCombobox, { model, ref: focusOnWipInputRef }) : null
6125
6125
  );
6126
6126
  });
6127
- const getStyles$a = (theme) => ({
6127
+ const getStyles$b = (theme) => ({
6128
6128
  comboboxWrapper: css.css({
6129
6129
  display: "flex",
6130
6130
  flexWrap: "wrap",
@@ -6717,13 +6717,13 @@ function renderExpression(builder, filters) {
6717
6717
  }
6718
6718
  function AdHocFiltersVariableRenderer({ model }) {
6719
6719
  const { filters, readOnly, addFilterButtonText } = model.useState();
6720
- const styles = ui.useStyles2(getStyles$9);
6720
+ const styles = ui.useStyles2(getStyles$a);
6721
6721
  if (model.state.layout === "combobox") {
6722
6722
  return /* @__PURE__ */ React__default.default.createElement(AdHocFiltersComboboxRenderer, { model });
6723
6723
  }
6724
6724
  return /* @__PURE__ */ React__default.default.createElement("div", { className: styles.wrapper }, filters.filter((filter) => !filter.hidden).map((filter, index) => /* @__PURE__ */ React__default.default.createElement(React__default.default.Fragment, { key: index }, /* @__PURE__ */ React__default.default.createElement(AdHocFilterRenderer, { filter, model }))), !readOnly && /* @__PURE__ */ React__default.default.createElement(AdHocFilterBuilder, { model, key: "'builder", addFilterButtonText }));
6725
6725
  }
6726
- const getStyles$9 = (theme) => ({
6726
+ const getStyles$a = (theme) => ({
6727
6727
  wrapper: css.css({
6728
6728
  display: "flex",
6729
6729
  flexWrap: "wrap",
@@ -8615,6 +8615,9 @@ function isTextBoxVariable(variable) {
8615
8615
  function isGroupByVariable(variable) {
8616
8616
  return variable.state.type === "groupby";
8617
8617
  }
8618
+ function isSwitchVariable(variable) {
8619
+ return variable.state.type === "switch";
8620
+ }
8618
8621
 
8619
8622
  class ActWhenVariableChanged extends SceneObjectBase {
8620
8623
  constructor() {
@@ -8690,7 +8693,7 @@ function getCursorSyncScope(sceneObject) {
8690
8693
  }
8691
8694
 
8692
8695
  function VizPanelSeriesLimit({ data, showAll, seriesLimit, onShowAllSeries }) {
8693
- const styles = ui.useStyles2(getStyles$8);
8696
+ const styles = ui.useStyles2(getStyles$9);
8694
8697
  const seriesCount = data == null ? void 0 : data.series.length;
8695
8698
  if (seriesCount === void 0 || seriesCount < seriesLimit) {
8696
8699
  return null;
@@ -8720,7 +8723,7 @@ function VizPanelSeriesLimit({ data, showAll, seriesLimit, onShowAllSeries }) {
8720
8723
  /* @__PURE__ */ React__default.default.createElement(ui.Button, { variant: "secondary", size: "sm", onClick: onShowAllSeries }, buttonText)
8721
8724
  ));
8722
8725
  }
8723
- const getStyles$8 = (theme) => ({
8726
+ const getStyles$9 = (theme) => ({
8724
8727
  timeSeriesDisclaimer: css.css({
8725
8728
  label: "time-series-disclaimer",
8726
8729
  display: "flex",
@@ -8745,7 +8748,7 @@ function useUniqueId() {
8745
8748
  const LazyLoader = React__default.default.forwardRef(
8746
8749
  ({ children, onLoad, onChange, className, ...rest }, ref) => {
8747
8750
  const id = useUniqueId();
8748
- const { hideEmpty } = ui.useStyles2(getStyles$7);
8751
+ const { hideEmpty } = ui.useStyles2(getStyles$8);
8749
8752
  const [loaded, setLoaded] = React.useState(false);
8750
8753
  const [isInView, setIsInView] = React.useState(false);
8751
8754
  const innerRef = React.useRef(null);
@@ -8774,7 +8777,7 @@ const LazyLoader = React__default.default.forwardRef(
8774
8777
  return /* @__PURE__ */ React__default.default.createElement("div", { id, ref: innerRef, className: `${hideEmpty} ${className}`, ...rest }, !loaded ? i18n.t("grafana-scenes.components.lazy-loader.placeholder", "\xA0") : /* @__PURE__ */ React__default.default.createElement(LazyLoaderInViewContext.Provider, { value: isInView }, children));
8775
8778
  }
8776
8779
  );
8777
- function getStyles$7() {
8780
+ function getStyles$8() {
8778
8781
  return {
8779
8782
  hideEmpty: css.css({
8780
8783
  "&:empty": {
@@ -11135,6 +11138,104 @@ CustomVariable.Component = ({ model }) => {
11135
11138
  return /* @__PURE__ */ React__default.default.createElement(MultiOrSingleValueSelect, { model });
11136
11139
  };
11137
11140
 
11141
+ class SwitchVariable extends SceneObjectBase {
11142
+ constructor(initialState) {
11143
+ super({
11144
+ // TODO: remove this once switch is in the schema @leventebalogh
11145
+ // @ts-expect-error - switch is a valid variable type, but not in the schema yet
11146
+ type: "switch",
11147
+ value: "false",
11148
+ enabledValue: "true",
11149
+ disabledValue: "false",
11150
+ name: "",
11151
+ ...initialState
11152
+ });
11153
+ this._prevValue = "";
11154
+ this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: () => this.getKeys() });
11155
+ }
11156
+ /**
11157
+ * This function is called on when SceneVariableSet is activated or when a dependency changes.
11158
+ */
11159
+ validateAndUpdate() {
11160
+ const newValue = this.getValue();
11161
+ if (this._prevValue !== newValue) {
11162
+ this._prevValue = newValue;
11163
+ this.publishEvent(new SceneVariableValueChangedEvent(this), true);
11164
+ }
11165
+ return rxjs.of({});
11166
+ }
11167
+ setValue(newValue) {
11168
+ if (this.getValue() === newValue) {
11169
+ return;
11170
+ }
11171
+ if ([this.state.enabledValue, this.state.disabledValue].includes(newValue)) {
11172
+ this.setState({ value: newValue });
11173
+ this.publishEvent(new SceneVariableValueChangedEvent(this), true);
11174
+ } else {
11175
+ console.error(
11176
+ `Invalid value for switch variable: "${newValue}". Valid values are: "${this.state.enabledValue}" and "${this.state.disabledValue}".`
11177
+ );
11178
+ }
11179
+ }
11180
+ getValue() {
11181
+ return this.state.value;
11182
+ }
11183
+ isEnabled() {
11184
+ return this.state.value === this.state.enabledValue;
11185
+ }
11186
+ isDisabled() {
11187
+ return this.state.value === this.state.disabledValue;
11188
+ }
11189
+ getKey() {
11190
+ return `var-${this.state.name}`;
11191
+ }
11192
+ getKeys() {
11193
+ if (this.state.skipUrlSync) {
11194
+ return [];
11195
+ }
11196
+ return [this.getKey()];
11197
+ }
11198
+ getUrlState() {
11199
+ if (this.state.skipUrlSync) {
11200
+ return {};
11201
+ }
11202
+ return { [this.getKey()]: this.state.value };
11203
+ }
11204
+ updateFromUrl(values) {
11205
+ const val = values[this.getKey()];
11206
+ if (typeof val === "string") {
11207
+ this.setValue(val);
11208
+ }
11209
+ }
11210
+ }
11211
+ SwitchVariable.Component = SwitchVariableRenderer;
11212
+ function SwitchVariableRenderer({ model }) {
11213
+ const state = model.useState();
11214
+ const styles = ui.useStyles2(getStyles$7);
11215
+ return /* @__PURE__ */ React__default.default.createElement("div", { className: styles.container }, /* @__PURE__ */ React__default.default.createElement(
11216
+ ui.Switch,
11217
+ {
11218
+ value: state.value === state.enabledValue,
11219
+ onChange: (event) => {
11220
+ model.setValue(event.currentTarget.checked ? state.enabledValue : state.disabledValue);
11221
+ }
11222
+ }
11223
+ ));
11224
+ }
11225
+ function getStyles$7(theme) {
11226
+ return {
11227
+ container: css.css({
11228
+ display: "flex",
11229
+ alignItems: "center",
11230
+ padding: theme.spacing(0, 1),
11231
+ height: theme.spacing(theme.components.height.md),
11232
+ borderRadius: theme.shape.radius.default,
11233
+ border: `1px solid ${theme.components.input.borderColor}`,
11234
+ background: theme.colors.background.primary
11235
+ })
11236
+ };
11237
+ }
11238
+
11138
11239
  class DataSourceVariable extends MultiValueVariable {
11139
11240
  constructor(initialState) {
11140
11241
  super({
@@ -15317,6 +15418,7 @@ const sceneUtils = {
15317
15418
  isQueryVariable,
15318
15419
  isTextBoxVariable,
15319
15420
  isGroupByVariable,
15421
+ isSwitchVariable,
15320
15422
  isRepeatCloneOrChildOf,
15321
15423
  buildPathIdFor
15322
15424
  };
@@ -15385,6 +15487,7 @@ exports.SceneVariableSet = SceneVariableSet;
15385
15487
  exports.SceneVariableValueChangedEvent = SceneVariableValueChangedEvent;
15386
15488
  exports.ScopesVariable = ScopesVariable;
15387
15489
  exports.SplitLayout = SplitLayout;
15490
+ exports.SwitchVariable = SwitchVariable;
15388
15491
  exports.TestVariable = TestVariable;
15389
15492
  exports.TextBoxVariable = TextBoxVariable;
15390
15493
  exports.UrlSyncContextProvider = UrlSyncContextProvider;