@grafana/scenes-react 8.9.6--canary.1567.28860887668.0 → 8.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ # v8.10.0 (Tue Jul 07 2026)
2
+
3
+ #### 🚀 Enhancement
4
+
5
+ - VizPanel: Add support for new subtitle prop [#1565](https://github.com/grafana/scenes/pull/1565) ([@torkelo](https://github.com/torkelo))
6
+
7
+ #### Authors: 1
8
+
9
+ - Torkel Ödegaard ([@torkelo](https://github.com/torkelo))
10
+
11
+ ---
12
+
1
13
  # v8.9.3 (Thu Jul 02 2026)
2
14
 
3
15
  #### 🐛 Bug Fix
@@ -15,6 +15,7 @@ function VizPanel(props) {
15
15
  displayMode,
16
16
  hoverHeader,
17
17
  hoverHeaderOffset,
18
+ subtitle,
18
19
  headerActions,
19
20
  menu,
20
21
  titleItems,
@@ -33,6 +34,7 @@ function VizPanel(props) {
33
34
  key,
34
35
  pluginId: viz.pluginId,
35
36
  title,
37
+ subtitle,
36
38
  titleItems,
37
39
  description,
38
40
  options: viz.options,
@@ -63,6 +65,9 @@ function VizPanel(props) {
63
65
  if (description !== prevProps.description) {
64
66
  stateUpdate.description = description;
65
67
  }
68
+ if (subtitle !== prevProps.subtitle) {
69
+ stateUpdate.subtitle = subtitle;
70
+ }
66
71
  if (displayMode !== prevProps.displayMode) {
67
72
  stateUpdate.displayMode = displayMode;
68
73
  }
@@ -132,7 +137,8 @@ function VizPanel(props) {
132
137
  seriesLimitShowAll,
133
138
  collapsible,
134
139
  collapsed,
135
- prevProps
140
+ prevProps,
141
+ subtitle
136
142
  ]);
137
143
  return /* @__PURE__ */ React.createElement(panel.Component, { model: panel });
138
144
  }
@@ -1 +1 @@
1
- {"version":3,"file":"VizPanel.js","sources":["../../../src/components/VizPanel.tsx"],"sourcesContent":["import React, { useEffect, useId } from 'react';\nimport {\n VizPanelMenu,\n SceneDataProvider,\n VizPanel as VizPanelObject,\n VizPanelState,\n VizConfig,\n DataProviderProxy,\n SceneDataNode,\n} from '@grafana/scenes';\nimport { usePrevious } from 'react-use';\nimport { getPanelOptionsWithDefaults } from '@grafana/data';\nimport { PanelContext } from '@grafana/ui';\nimport { writeSceneLog } from '../utils';\nimport { useSceneContext } from '../hooks/hooks';\nimport { useAddToScene } from '../contexts/SceneContextObject';\n\nexport interface VizPanelProps {\n title: string;\n description?: string;\n dataProvider?: SceneDataProvider;\n viz: VizConfig;\n displayMode?: 'default' | 'transparent';\n hoverHeader?: boolean;\n hoverHeaderOffset?: number;\n menu?: VizPanelMenu;\n titleItems?: React.ReactNode;\n seriesLimit?: number;\n seriesLimitShowAll?: boolean;\n headerActions?: React.ReactNode;\n extendPanelContext?: (vizPanel: VizPanelObject, context: PanelContext) => void;\n collapsible?: boolean;\n collapsed?: boolean;\n}\n\nexport function VizPanel(props: VizPanelProps) {\n const {\n title,\n description,\n viz,\n dataProvider,\n displayMode,\n hoverHeader,\n hoverHeaderOffset,\n headerActions,\n menu,\n titleItems,\n extendPanelContext,\n seriesLimit,\n seriesLimitShowAll,\n collapsible,\n collapsed,\n } = props;\n\n const scene = useSceneContext();\n const key = useId();\n const prevProps = usePrevious(props);\n\n let panel = scene.findByKey<VizPanelObject>(key);\n\n if (!panel) {\n panel = new VizPanelObject({\n key: key,\n pluginId: viz.pluginId,\n title: title,\n titleItems: titleItems,\n description: description,\n options: viz.options,\n fieldConfig: viz.fieldConfig,\n pluginVersion: viz.pluginVersion,\n $data: getDataProviderForVizPanel(dataProvider),\n displayMode: displayMode,\n hoverHeader: hoverHeader,\n hoverHeaderOffset: hoverHeaderOffset,\n headerActions: headerActions,\n menu: menu,\n extendPanelContext: extendPanelContext,\n collapsible: collapsible,\n collapsed: collapsed,\n seriesLimit: seriesLimit,\n seriesLimitShowAll: seriesLimitShowAll,\n });\n }\n\n useAddToScene(panel, scene);\n\n // Update options\n useEffect(() => {\n const stateUpdate: Partial<VizPanelState> = {};\n\n if (!prevProps) {\n return;\n }\n\n if (title !== prevProps.title) {\n stateUpdate.title = title;\n }\n\n if (description !== prevProps.description) {\n stateUpdate.description = description;\n }\n\n if (displayMode !== prevProps.displayMode) {\n stateUpdate.displayMode = displayMode;\n }\n\n if (hoverHeader !== prevProps.hoverHeader) {\n stateUpdate.hoverHeader = hoverHeader;\n }\n\n if (hoverHeaderOffset !== prevProps.hoverHeaderOffset) {\n stateUpdate.hoverHeaderOffset = hoverHeaderOffset;\n }\n\n if (menu !== prevProps.menu) {\n stateUpdate.menu = menu;\n }\n\n if (titleItems !== prevProps.titleItems) {\n stateUpdate.titleItems = titleItems;\n }\n\n if (headerActions !== prevProps.headerActions) {\n stateUpdate.headerActions = headerActions;\n }\n\n if (dataProvider !== prevProps.dataProvider) {\n stateUpdate.$data = getDataProviderForVizPanel(dataProvider);\n }\n\n if (seriesLimit !== prevProps.seriesLimit) {\n stateUpdate.seriesLimit = seriesLimit;\n }\n\n if (seriesLimitShowAll !== prevProps.seriesLimitShowAll) {\n stateUpdate.seriesLimitShowAll = seriesLimitShowAll;\n }\n\n if (collapsible !== prevProps.collapsible) {\n stateUpdate.collapsible = collapsible;\n }\n\n if (collapsed !== prevProps.collapsed) {\n stateUpdate.collapsed = collapsed;\n }\n\n if (viz !== prevProps.viz) {\n if (viz.pluginId === prevProps.viz.pluginId) {\n const plugin = panel.getPlugin();\n if (plugin) {\n const optionsWithDefaults = getPanelOptionsWithDefaults({\n plugin,\n currentOptions: viz.options,\n currentFieldConfig: viz.fieldConfig,\n isAfterPluginChange: false,\n });\n stateUpdate.options = optionsWithDefaults.options;\n stateUpdate.fieldConfig = optionsWithDefaults.fieldConfig;\n\n panel.clearFieldConfigCache();\n }\n }\n }\n\n if (Object.keys(stateUpdate).length > 0) {\n panel.setState(stateUpdate);\n writeSceneLog('VizPanel', 'Updating VizPanel state', stateUpdate);\n }\n }, [\n panel,\n title,\n description,\n displayMode,\n hoverHeader,\n hoverHeaderOffset,\n headerActions,\n menu,\n titleItems,\n viz,\n dataProvider,\n seriesLimit,\n seriesLimitShowAll,\n collapsible,\n collapsed,\n prevProps,\n ]);\n\n return <panel.Component model={panel} />;\n}\n\n/**\n * Since the useQueryRunner attaches query runners to the scene context their parent is already set\n * This proxy is to work around that.\n * TODO: Figure out a better way to handle this'\n */\nfunction getDataProviderForVizPanel(data: SceneDataProvider | undefined): SceneDataProvider | undefined {\n if (data && !(data instanceof SceneDataNode)) {\n return new DataProviderProxy({ source: data.getRef() });\n }\n return data;\n}\n"],"names":["VizPanelObject"],"mappings":"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"}
1
+ {"version":3,"file":"VizPanel.js","sources":["../../../src/components/VizPanel.tsx"],"sourcesContent":["import React, { useEffect, useId } from 'react';\nimport {\n VizPanelMenu,\n SceneDataProvider,\n VizPanel as VizPanelObject,\n VizPanelState,\n VizConfig,\n DataProviderProxy,\n SceneDataNode,\n} from '@grafana/scenes';\nimport { usePrevious } from 'react-use';\nimport { getPanelOptionsWithDefaults } from '@grafana/data';\nimport { PanelContext } from '@grafana/ui';\nimport { writeSceneLog } from '../utils';\nimport { useSceneContext } from '../hooks/hooks';\nimport { useAddToScene } from '../contexts/SceneContextObject';\n\nexport interface VizPanelProps {\n title: string;\n description?: string;\n subtitle?: string;\n dataProvider?: SceneDataProvider;\n viz: VizConfig;\n displayMode?: 'default' | 'transparent';\n hoverHeader?: boolean;\n hoverHeaderOffset?: number;\n menu?: VizPanelMenu;\n titleItems?: React.ReactNode;\n seriesLimit?: number;\n seriesLimitShowAll?: boolean;\n headerActions?: React.ReactNode;\n extendPanelContext?: (vizPanel: VizPanelObject, context: PanelContext) => void;\n collapsible?: boolean;\n collapsed?: boolean;\n}\n\nexport function VizPanel(props: VizPanelProps) {\n const {\n title,\n description,\n viz,\n dataProvider,\n displayMode,\n hoverHeader,\n hoverHeaderOffset,\n subtitle,\n headerActions,\n menu,\n titleItems,\n extendPanelContext,\n seriesLimit,\n seriesLimitShowAll,\n collapsible,\n collapsed,\n } = props;\n\n const scene = useSceneContext();\n const key = useId();\n const prevProps = usePrevious(props);\n\n let panel = scene.findByKey<VizPanelObject>(key);\n\n if (!panel) {\n panel = new VizPanelObject({\n key: key,\n pluginId: viz.pluginId,\n title: title,\n subtitle: subtitle,\n titleItems: titleItems,\n description: description,\n options: viz.options,\n fieldConfig: viz.fieldConfig,\n pluginVersion: viz.pluginVersion,\n $data: getDataProviderForVizPanel(dataProvider),\n displayMode: displayMode,\n hoverHeader: hoverHeader,\n hoverHeaderOffset: hoverHeaderOffset,\n headerActions: headerActions,\n menu: menu,\n extendPanelContext: extendPanelContext,\n collapsible: collapsible,\n collapsed: collapsed,\n seriesLimit: seriesLimit,\n seriesLimitShowAll: seriesLimitShowAll,\n });\n }\n\n useAddToScene(panel, scene);\n\n // Update options\n useEffect(() => {\n const stateUpdate: Partial<VizPanelState> = {};\n\n if (!prevProps) {\n return;\n }\n\n if (title !== prevProps.title) {\n stateUpdate.title = title;\n }\n\n if (description !== prevProps.description) {\n stateUpdate.description = description;\n }\n\n if (subtitle !== prevProps.subtitle) {\n stateUpdate.subtitle = subtitle;\n }\n\n if (displayMode !== prevProps.displayMode) {\n stateUpdate.displayMode = displayMode;\n }\n\n if (hoverHeader !== prevProps.hoverHeader) {\n stateUpdate.hoverHeader = hoverHeader;\n }\n\n if (hoverHeaderOffset !== prevProps.hoverHeaderOffset) {\n stateUpdate.hoverHeaderOffset = hoverHeaderOffset;\n }\n\n if (menu !== prevProps.menu) {\n stateUpdate.menu = menu;\n }\n\n if (titleItems !== prevProps.titleItems) {\n stateUpdate.titleItems = titleItems;\n }\n\n if (headerActions !== prevProps.headerActions) {\n stateUpdate.headerActions = headerActions;\n }\n\n if (dataProvider !== prevProps.dataProvider) {\n stateUpdate.$data = getDataProviderForVizPanel(dataProvider);\n }\n\n if (seriesLimit !== prevProps.seriesLimit) {\n stateUpdate.seriesLimit = seriesLimit;\n }\n\n if (seriesLimitShowAll !== prevProps.seriesLimitShowAll) {\n stateUpdate.seriesLimitShowAll = seriesLimitShowAll;\n }\n\n if (collapsible !== prevProps.collapsible) {\n stateUpdate.collapsible = collapsible;\n }\n\n if (collapsed !== prevProps.collapsed) {\n stateUpdate.collapsed = collapsed;\n }\n\n if (viz !== prevProps.viz) {\n if (viz.pluginId === prevProps.viz.pluginId) {\n const plugin = panel.getPlugin();\n if (plugin) {\n const optionsWithDefaults = getPanelOptionsWithDefaults({\n plugin,\n currentOptions: viz.options,\n currentFieldConfig: viz.fieldConfig,\n isAfterPluginChange: false,\n });\n stateUpdate.options = optionsWithDefaults.options;\n stateUpdate.fieldConfig = optionsWithDefaults.fieldConfig;\n\n panel.clearFieldConfigCache();\n }\n }\n }\n\n if (Object.keys(stateUpdate).length > 0) {\n panel.setState(stateUpdate);\n writeSceneLog('VizPanel', 'Updating VizPanel state', stateUpdate);\n }\n }, [\n panel,\n title,\n description,\n displayMode,\n hoverHeader,\n hoverHeaderOffset,\n headerActions,\n menu,\n titleItems,\n viz,\n dataProvider,\n seriesLimit,\n seriesLimitShowAll,\n collapsible,\n collapsed,\n prevProps,\n subtitle,\n ]);\n\n return <panel.Component model={panel} />;\n}\n\n/**\n * Since the useQueryRunner attaches query runners to the scene context their parent is already set\n * This proxy is to work around that.\n * TODO: Figure out a better way to handle this'\n */\nfunction getDataProviderForVizPanel(data: SceneDataProvider | undefined): SceneDataProvider | undefined {\n if (data && !(data instanceof SceneDataNode)) {\n return new DataProviderProxy({ source: data.getRef() });\n }\n return data;\n}\n"],"names":["VizPanelObject"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -88,6 +88,7 @@ declare function VariableControl({ name, hideLabel, layout }: Props$3): React.JS
88
88
  interface VizPanelProps {
89
89
  title: string;
90
90
  description?: string;
91
+ subtitle?: string;
91
92
  dataProvider?: SceneDataProvider;
92
93
  viz: VizConfig;
93
94
  displayMode?: 'default' | 'transparent';
package/dist/index.js CHANGED
@@ -389,6 +389,7 @@ function VizPanel(props) {
389
389
  displayMode,
390
390
  hoverHeader,
391
391
  hoverHeaderOffset,
392
+ subtitle,
392
393
  headerActions,
393
394
  menu,
394
395
  titleItems,
@@ -407,6 +408,7 @@ function VizPanel(props) {
407
408
  key,
408
409
  pluginId: viz.pluginId,
409
410
  title,
411
+ subtitle,
410
412
  titleItems,
411
413
  description,
412
414
  options: viz.options,
@@ -437,6 +439,9 @@ function VizPanel(props) {
437
439
  if (description !== prevProps.description) {
438
440
  stateUpdate.description = description;
439
441
  }
442
+ if (subtitle !== prevProps.subtitle) {
443
+ stateUpdate.subtitle = subtitle;
444
+ }
440
445
  if (displayMode !== prevProps.displayMode) {
441
446
  stateUpdate.displayMode = displayMode;
442
447
  }
@@ -506,7 +511,8 @@ function VizPanel(props) {
506
511
  seriesLimitShowAll,
507
512
  collapsible,
508
513
  collapsed,
509
- prevProps
514
+ prevProps,
515
+ subtitle
510
516
  ]);
511
517
  return /* @__PURE__ */ React__default.default.createElement(panel.Component, { model: panel });
512
518
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils.ts","../src/contexts/SceneContextObject.tsx","../src/contexts/SceneContextProvider.tsx","../src/hooks/hooks.ts","../src/caching/SceneObjectCache.ts","../src/hooks/useSceneObject.ts","../src/hooks/useQueryRunner.ts","../src/hooks/useDataTransformer.ts","../src/components/TimeRangePicker.tsx","../src/components/VariableControl.tsx","../src/components/VizPanel.tsx","../src/components/RefreshPicker.tsx","../src/components/DataLayerControl.tsx","../src/variables/CustomVariable.tsx","../src/variables/AdHocFiltersVariable.tsx","../src/variables/DataSourceVariable.tsx","../src/variables/QueryVariable.tsx","../src/variables/LocalValueVariable.tsx","../src/variables/GroupByVariable.tsx","../src/contexts/BreadcrumbContext.tsx","../src/hooks/useVariableValues.ts","../src/hooks/useQueryVariable.ts","../src/hooks/useVariableValue.ts","../src/components/AnnotationLayer.tsx","../src/interoperability/EmbeddedSceneWithContext.tsx","../src/components/VizGridLayout.tsx","../src/components/SceneFlexLayoutContext.ts","../src/components/SceneFlexItem.tsx","../src/components/SceneFlexLayout.tsx"],"sourcesContent":["export function writeSceneLog(logger: string, message: string, ...rest: unknown[]) {\n let loggingEnabled = false;\n\n if (typeof window !== 'undefined') {\n loggingEnabled = localStorage.getItem('grafana.debug.scenes') === 'true';\n }\n\n if (loggingEnabled) {\n console.log(`${logger}: `, message, ...rest);\n }\n}\n","import {\n SceneObjectBase,\n SceneObject,\n SceneObjectState,\n SceneVariable,\n SceneVariableSet,\n NewSceneObjectAddedEvent,\n} from '@grafana/scenes';\nimport { writeSceneLog } from '../utils';\nimport { useEffect } from 'react';\n\nexport interface SceneContextObjectState extends SceneObjectState {\n childContexts?: SceneContextObject[];\n children: SceneObject[];\n}\n\nexport class SceneContextObject extends SceneObjectBase<SceneContextObjectState> {\n public constructor(state?: Partial<SceneContextObjectState>) {\n super({\n ...state,\n children: state?.children ?? [],\n childContexts: state?.childContexts ?? [],\n });\n }\n\n public addToScene(obj: SceneObject) {\n this.publishEvent(new NewSceneObjectAddedEvent(obj), true);\n\n this.setState({ children: [...this.state.children, obj] });\n writeSceneLog('SceneContext', `Adding to scene: ${obj.constructor.name} key: ${obj.state.key}`);\n\n const deactivate = obj.activate();\n\n return () => {\n writeSceneLog('SceneContext', `Removing from scene: ${obj.constructor.name} key: ${obj.state.key}`);\n this.setState({ children: this.state.children.filter((x) => x !== obj) });\n\n deactivate();\n };\n }\n\n public findByKey<T>(key: string): T | undefined {\n return this.state.children.find((x) => x.state.key === key) as T;\n }\n\n public findVariable<T>(name: string): T | undefined {\n const variables = this.state.$variables as SceneVariableSet;\n if (!variables) {\n return;\n }\n\n return variables.getByName(name) as T;\n }\n\n public addVariable(variable: SceneVariable) {\n let set = this.state.$variables as SceneVariableSet;\n\n this.publishEvent(new NewSceneObjectAddedEvent(variable), true);\n\n if (set) {\n set.setState({ variables: [...set.state.variables, variable] });\n } else {\n set = new SceneVariableSet({ variables: [variable] });\n this.setState({ $variables: set });\n }\n\n writeSceneLog('SceneContext', `Adding variable: ${variable.constructor.name} key: ${variable.state.key}`);\n\n return () => {\n set.setState({ variables: set.state.variables.filter((x) => x !== variable) });\n writeSceneLog('SceneContext', `Removing variable: ${variable.constructor.name} key: ${variable.state.key}`);\n };\n }\n\n public addChildContext(ctx: SceneContextObject) {\n this.publishEvent(new NewSceneObjectAddedEvent(ctx), true);\n\n this.setState({ childContexts: [...(this.state.childContexts ?? []), ctx] });\n\n writeSceneLog('SceneContext', `Adding child context: ${ctx.constructor.name} key: ${ctx.state.key}`);\n }\n\n public removeChildContext(ctx: SceneContextObject) {\n this.setState({\n childContexts: this.state.childContexts?.filter((context) => ctx !== context),\n });\n\n writeSceneLog('SceneContext', `Remvoing child context: ${ctx.constructor.name} key: ${ctx.state.key}`);\n }\n}\n\nexport function useAddToScene(obj: SceneObject, ctx: SceneContextObject) {\n // Old behavior\n if (!SceneObjectBase.RENDER_BEFORE_ACTIVATION_DEFAULT) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => ctx.addToScene(obj), [ctx, obj]);\n return;\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n const deactivate = obj.activate();\n\n return () => {\n writeSceneLog('SceneContext', `Removing from scene: ${obj.constructor.name} key: ${obj.state.key}`);\n ctx.setState({ children: ctx.state.children.filter((x) => x !== obj) });\n\n deactivate();\n };\n }, [ctx, obj]);\n\n // Check if scene contains object instance\n if (ctx.state.children.includes(obj)) {\n return;\n }\n\n // This is technically a state change during render. We have to add it to the state tree right away in order to render the object on the first pass\n // Should be ok as nothing subscribes to SceneContextObject state changes and the NewSceneObjectAddedEvent is syncing url state to obj state\n ctx.publishEvent(new NewSceneObjectAddedEvent(obj), true);\n ctx.setState({ children: [...ctx.state.children, obj] });\n\n writeSceneLog('SceneContext', `Adding to scene: ${obj.constructor.name} key: ${obj.state.key}`);\n}\n","import React, { createContext, useContext, useEffect, useState } from 'react';\nimport { SceneTimeRangeState, SceneTimeRange, behaviors, UrlSyncContextProvider } from '@grafana/scenes';\n\nimport { SceneContextObject, SceneContextObjectState } from './SceneContextObject';\n\nexport const SceneContext = createContext<SceneContextObject | null>(null);\n\nexport interface SceneContextProviderProps {\n /**\n * Only the initial time range, cannot be used to update time range\n **/\n timeRange?: Partial<SceneTimeRangeState>;\n /**\n * This makes it possbile to view running state of queries via\n * refresh picker and also cancel all queries in the scene.\n */\n withQueryController?: boolean;\n /**\n * Children\n */\n children: React.ReactNode;\n}\n\n/**\n * Wrapps the react children in a SceneContext\n */\nexport function SceneContextProvider({ children, timeRange, withQueryController }: SceneContextProviderProps) {\n const parentContext = useContext(SceneContext);\n const [childContext, setChildContext] = useState<SceneContextObject | undefined>();\n\n // Becasue timeRange is not part of useEffect dependencies\n const initialTimeRange = timeRange;\n\n useEffect(() => {\n const state: SceneContextObjectState = { children: [] };\n\n if (withQueryController) {\n state.$behaviors = [new behaviors.SceneQueryController()];\n }\n\n if (initialTimeRange) {\n state.$timeRange = new SceneTimeRange(initialTimeRange);\n }\n\n const childContext = new SceneContextObject(state);\n\n if (parentContext) {\n parentContext.addChildContext(childContext);\n }\n\n const deactivate = childContext.activate();\n setChildContext(childContext);\n\n return () => {\n deactivate();\n\n if (parentContext) {\n parentContext.removeChildContext(childContext);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [parentContext, withQueryController]);\n\n if (!childContext) {\n return null;\n }\n\n const innerProvider = <SceneContext.Provider value={childContext}>{children}</SceneContext.Provider>;\n\n if (parentContext) {\n return innerProvider;\n }\n\n // For root context we wrap the provider in a UrlSyncWrapper that handles the hook that updates state on location changes\n return (\n <UrlSyncContextProvider scene={childContext} updateUrlOnInit={true} createBrowserHistorySteps={true}>\n {innerProvider}\n </UrlSyncContextProvider>\n );\n}\n","import { useCallback, useContext, useEffect, useState } from 'react';\nimport { SceneContext } from '../contexts/SceneContextProvider';\nimport { TimeRange } from '@grafana/data';\nimport {\n SceneVariable,\n SceneVariableValueChangedEvent,\n VariableValue,\n sceneGraph,\n SceneTimeRangeLike,\n} from '@grafana/scenes';\nimport { Subscription } from 'rxjs';\n\nexport function useSceneContext() {\n const scene = useContext(SceneContext);\n if (!scene) {\n throw new Error('Cannot find a SceneContext');\n }\n\n return scene;\n}\n\nexport function useTimeRange(): [TimeRange, SceneTimeRangeLike] {\n const scene = useSceneContext();\n const sceneTimeRange = sceneGraph.getTimeRange(scene);\n const { value } = sceneTimeRange.useState();\n\n return [value, sceneTimeRange];\n}\n\n/**\n * Only returns the variables on the closest context level.\n * We could modify it to extract all variables from the full context tree.\n */\nexport function useVariables(): SceneVariable[] {\n const scene = useSceneContext();\n const variables = sceneGraph.getVariables(scene);\n return variables.useState().variables;\n}\n\nexport interface UseUpdateWhenSceneChangesOptions {\n /** Variable names */\n variables?: string[];\n timeRange?: boolean;\n}\n\nexport interface UseUpdateWhenSceneChangesReason {\n variableName?: string;\n variableValue?: VariableValue | undefined | null;\n timeRange?: TimeRange;\n}\n\n/**\n * A utility hook to re-render the calling react component when specified variables or time range changes\n */\nexport function useUpdateWhenSceneChanges({ timeRange, variables = [] }: UseUpdateWhenSceneChangesOptions) {\n const scene = useSceneContext();\n const [updateReason, setUpdateReason] = useState<UseUpdateWhenSceneChangesReason>();\n\n useEffect(() => {\n const subscriptions = new Subscription();\n\n if (variables && variables.length > 0) {\n for (const v of variables) {\n const variable = sceneGraph.lookupVariable(v, scene);\n if (variable) {\n subscriptions.add(\n variable.subscribeToEvent(SceneVariableValueChangedEvent, () => {\n setUpdateReason({ variableName: variable.state.name, variableValue: variable.getValue() });\n })\n );\n }\n }\n }\n\n if (timeRange) {\n const tr = sceneGraph.getTimeRange(scene);\n tr.subscribeToState((newState, oldState) => {\n if (newState.value !== oldState.value) {\n setUpdateReason({ timeRange: newState.value });\n }\n });\n }\n\n return () => subscriptions.unsubscribe();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [scene, timeRange, ...variables]);\n\n return updateReason;\n}\n\n/**\n * Mainly a utility hook to re-render the calling react component when specified variables or time range changes\n */\nexport function useVariableInterpolator(options: UseUpdateWhenSceneChangesOptions) {\n const scene = useSceneContext();\n\n useUpdateWhenSceneChanges(options);\n\n return useCallback(\n (str: string) => {\n return sceneGraph.interpolate(scene, str);\n },\n [scene]\n );\n}\n","import { SceneObject } from '@grafana/scenes';\nimport { isPlainObject } from 'lodash';\nimport { LRUCache } from 'lru-cache';\n\nexport type CacheKey = CacheKeyPart | CacheKeyPart[];\n\nexport type CacheKeyPart = string | number | object | boolean;\n\nexport type SceneObjectConstructor = { new (...args: never[]): SceneObject };\n\nexport class SceneObjectCache {\n #cache: LRUCache<string, SceneObject>;\n #objectRefIds = new WeakMap<any, number>();\n #objectRefIdCounter = 0;\n\n public constructor() {\n this.#cache = new LRUCache({\n max: 500,\n ttl: 1000 * 60 * 5,\n });\n }\n\n public add(keyHash: string, object: SceneObject) {\n this.#cache.set(keyHash, object);\n }\n\n public get<T>(keyHash: string): T | undefined {\n return this.#cache.get(keyHash) as T;\n }\n\n public getHashKey(key: CacheKey, type: SceneObjectConstructor): string {\n if (Array.isArray(key)) {\n return `${type.name}-${key.map((k) => this.getHashKeyElement(k)).join()}`;\n }\n\n return `${type.name}-${this.getHashKeyElement(key)}`;\n }\n\n public getByRefHashKey(obj: unknown) {\n let objectRefId = this.#objectRefIds.get(obj);\n if (objectRefId == null) {\n objectRefId = this.#objectRefIdCounter++;\n this.#objectRefIds.set(obj, objectRefId);\n }\n\n return objectRefId;\n }\n\n private getHashKeyElement<T>(key: CacheKey) {\n if (typeof key === 'string' || typeof key === 'boolean' || typeof key === 'number') {\n return key;\n }\n\n return getObjectHash(key);\n }\n}\n\nlet cache: SceneObjectCache | undefined;\n\nexport function getSceneObjectCache(): SceneObjectCache {\n if (cache) {\n return cache;\n }\n\n return (cache = new SceneObjectCache());\n}\n\n/**\n * Returns a unique hash key string for the given object reference.\n */\nexport function cacheByRef(value: unknown) {\n const cache = getSceneObjectCache();\n return cache.getByRefHashKey(value);\n}\n\nexport function getObjectHash(obj: unknown): string {\n return JSON.stringify(obj, (_, val) =>\n isPlainObject(val)\n ? Object.keys(val)\n .sort()\n .reduce((result, key) => {\n result[key] = val[key];\n return result;\n }, {} as any)\n : val\n );\n}\n","import { useId } from 'react';\nimport { SceneObject, sceneGraph } from '@grafana/scenes';\nimport { useSceneContext } from './hooks';\nimport { CacheKey, SceneObjectConstructor, getSceneObjectCache } from '../caching/SceneObjectCache';\nimport { useAddToScene } from '../contexts/SceneContextObject';\n\nexport interface UseSceneObjectProps<T extends SceneObject> {\n factory: (key: string) => T;\n cacheKey?: CacheKey;\n objectConstructor: SceneObjectConstructor;\n}\n\n/**\n * Helper hook that handles adding and removing the scene object from the scene object graph.\n * Also handles the lookup of the object from the cache if a cache key is provided.\n */\nexport function useSceneObject<T extends SceneObject>(options: UseSceneObjectProps<T>) {\n const scene = useSceneContext();\n const key = useId();\n const cache = getSceneObjectCache();\n let cacheKeyHash = options.cacheKey ? cache.getHashKey(options.cacheKey, options.objectConstructor) : undefined;\n\n let obj = scene.findByKey<T>(key);\n\n if (!obj && cacheKeyHash) {\n obj = cache.get<T>(cacheKeyHash);\n\n if (obj && obj.parent !== scene) {\n // Before clearing parent make sure the object is not already in the scene\n if (sceneGraph.findObject(scene, (sceneObj) => sceneObj === obj)) {\n console.error('A scene object cache key matched an object that is already in the scene');\n obj = undefined;\n // Setting this to undefined so that we later do not add/overwrite the object that is already in the scene\n cacheKeyHash = undefined;\n } else {\n obj.clearParent();\n }\n }\n }\n\n if (!obj) {\n obj = options.factory(key);\n if (cacheKeyHash) {\n cache.add(cacheKeyHash, obj);\n }\n }\n\n useAddToScene(obj, scene);\n\n return obj;\n}\n","import { useEffect } from 'react';\nimport { SceneDataQuery, SceneQueryRunner } from '@grafana/scenes';\nimport { DataSourceRef } from '@grafana/schema';\nimport { isEqual } from 'lodash';\nimport { CacheKey } from '../caching/SceneObjectCache';\nimport { useSceneObject } from './useSceneObject';\n\nexport interface UseQueryOptions {\n queries: SceneDataQuery[];\n maxDataPoints?: number;\n datasource?: DataSourceRef;\n cacheKey?: CacheKey;\n liveStreaming?: boolean;\n maxDataPointsFromWidth?: boolean;\n minInterval?: string;\n /**\n * Optional prefix for the requestId. When set, request IDs will be formatted as `{requestIdPrefix}{counter}`.\n * Useful for identifying requests from specific panels or components.\n */\n requestIdPrefix?: string;\n}\n\n/**\n * Maintains the state of SceneQueryRunner in the scene\n *\n * @example // To access query results do\n * const query = useQueryRunner(...);\n * const { data } = query.useState();\n */\nexport function useQueryRunner(options: UseQueryOptions): SceneQueryRunner {\n const queryRunner = useSceneObject({\n factory: (key) =>\n new SceneQueryRunner({\n key: key,\n queries: options.queries,\n maxDataPoints: options.maxDataPoints,\n datasource: options.datasource,\n liveStreaming: options.liveStreaming,\n maxDataPointsFromWidth: options.maxDataPointsFromWidth,\n minInterval: options.minInterval,\n requestIdPrefix: options.requestIdPrefix,\n }),\n objectConstructor: SceneQueryRunner,\n cacheKey: options.cacheKey,\n });\n\n // Update queries when they change\n useEffect(() => {\n if (!isEqual(queryRunner.state.queries, options.queries)) {\n queryRunner.setState({ queries: options.queries });\n queryRunner.runQueries();\n }\n }, [queryRunner, options]);\n\n return queryRunner;\n}\n","import {\n CustomTransformerDefinition,\n DataProviderProxy,\n SceneDataProvider,\n SceneDataTransformer,\n} from '@grafana/scenes';\nimport { useSceneContext } from './hooks';\nimport { useEffect, useId } from 'react';\nimport { isEqual } from 'lodash';\nimport { DataTransformerConfig } from '@grafana/schema';\nimport { useAddToScene } from '../contexts/SceneContextObject';\n\nexport interface UseDataTransformerOptions {\n transformations: Array<DataTransformerConfig | CustomTransformerDefinition>;\n data: SceneDataProvider;\n}\n\nexport function useDataTransformer(options: UseDataTransformerOptions) {\n const scene = useSceneContext();\n const key = useId();\n\n let dataTransformer = scene.findByKey<SceneDataTransformer>(key);\n\n if (!dataTransformer) {\n dataTransformer = new SceneDataTransformer({\n key: key,\n $data: new DataProviderProxy({ source: options.data.getRef() }),\n transformations: options.transformations,\n });\n }\n\n useAddToScene(dataTransformer, scene);\n\n useEffect(() => {\n if (!isEqual(dataTransformer.state.transformations, options.transformations)) {\n dataTransformer.setState({ transformations: options.transformations });\n dataTransformer.reprocessTransformations();\n }\n }, [dataTransformer, options.transformations]);\n\n return dataTransformer;\n}\n","import { TimeRangePicker as TimeRangePickerUI } from '@grafana/ui';\nimport React from 'react';\nimport { useTimeRange } from '../hooks/hooks';\n\nexport interface Props {}\n\nexport function TimeRangePicker(props: Props) {\n const [value, sceneTimeRange] = useTimeRange();\n\n return (\n <TimeRangePickerUI\n isOnCanvas={true}\n value={value}\n onChange={sceneTimeRange.onTimeRangeChange}\n timeZone={sceneTimeRange.getTimeZone()}\n onMoveBackward={() => {}}\n onMoveForward={() => {}}\n onZoom={() => {}}\n onChangeTimeZone={() => {}}\n onChangeFiscalYearStartMonth={() => {}}\n />\n );\n}\n","import React from 'react';\nimport { ControlsLayout, sceneGraph, VariableValueSelectWrapper } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\n\nexport interface Props {\n name: string;\n hideLabel?: boolean;\n layout?: ControlsLayout;\n}\n\nexport function VariableControl({ name, hideLabel, layout }: Props) {\n const scene = useSceneContext();\n const variable = sceneGraph.lookupVariable(name, scene);\n\n if (!variable) {\n return <div>Variable {name} not found</div>;\n }\n\n return (\n <VariableValueSelectWrapper key={variable.state.key} variable={variable} hideLabel={hideLabel} layout={layout} />\n );\n}\n","import React, { useEffect, useId } from 'react';\nimport {\n VizPanelMenu,\n SceneDataProvider,\n VizPanel as VizPanelObject,\n VizPanelState,\n VizConfig,\n DataProviderProxy,\n SceneDataNode,\n} from '@grafana/scenes';\nimport { usePrevious } from 'react-use';\nimport { getPanelOptionsWithDefaults } from '@grafana/data';\nimport { PanelContext } from '@grafana/ui';\nimport { writeSceneLog } from '../utils';\nimport { useSceneContext } from '../hooks/hooks';\nimport { useAddToScene } from '../contexts/SceneContextObject';\n\nexport interface VizPanelProps {\n title: string;\n description?: string;\n dataProvider?: SceneDataProvider;\n viz: VizConfig;\n displayMode?: 'default' | 'transparent';\n hoverHeader?: boolean;\n hoverHeaderOffset?: number;\n menu?: VizPanelMenu;\n titleItems?: React.ReactNode;\n seriesLimit?: number;\n seriesLimitShowAll?: boolean;\n headerActions?: React.ReactNode;\n extendPanelContext?: (vizPanel: VizPanelObject, context: PanelContext) => void;\n collapsible?: boolean;\n collapsed?: boolean;\n}\n\nexport function VizPanel(props: VizPanelProps) {\n const {\n title,\n description,\n viz,\n dataProvider,\n displayMode,\n hoverHeader,\n hoverHeaderOffset,\n headerActions,\n menu,\n titleItems,\n extendPanelContext,\n seriesLimit,\n seriesLimitShowAll,\n collapsible,\n collapsed,\n } = props;\n\n const scene = useSceneContext();\n const key = useId();\n const prevProps = usePrevious(props);\n\n let panel = scene.findByKey<VizPanelObject>(key);\n\n if (!panel) {\n panel = new VizPanelObject({\n key: key,\n pluginId: viz.pluginId,\n title: title,\n titleItems: titleItems,\n description: description,\n options: viz.options,\n fieldConfig: viz.fieldConfig,\n pluginVersion: viz.pluginVersion,\n $data: getDataProviderForVizPanel(dataProvider),\n displayMode: displayMode,\n hoverHeader: hoverHeader,\n hoverHeaderOffset: hoverHeaderOffset,\n headerActions: headerActions,\n menu: menu,\n extendPanelContext: extendPanelContext,\n collapsible: collapsible,\n collapsed: collapsed,\n seriesLimit: seriesLimit,\n seriesLimitShowAll: seriesLimitShowAll,\n });\n }\n\n useAddToScene(panel, scene);\n\n // Update options\n useEffect(() => {\n const stateUpdate: Partial<VizPanelState> = {};\n\n if (!prevProps) {\n return;\n }\n\n if (title !== prevProps.title) {\n stateUpdate.title = title;\n }\n\n if (description !== prevProps.description) {\n stateUpdate.description = description;\n }\n\n if (displayMode !== prevProps.displayMode) {\n stateUpdate.displayMode = displayMode;\n }\n\n if (hoverHeader !== prevProps.hoverHeader) {\n stateUpdate.hoverHeader = hoverHeader;\n }\n\n if (hoverHeaderOffset !== prevProps.hoverHeaderOffset) {\n stateUpdate.hoverHeaderOffset = hoverHeaderOffset;\n }\n\n if (menu !== prevProps.menu) {\n stateUpdate.menu = menu;\n }\n\n if (titleItems !== prevProps.titleItems) {\n stateUpdate.titleItems = titleItems;\n }\n\n if (headerActions !== prevProps.headerActions) {\n stateUpdate.headerActions = headerActions;\n }\n\n if (dataProvider !== prevProps.dataProvider) {\n stateUpdate.$data = getDataProviderForVizPanel(dataProvider);\n }\n\n if (seriesLimit !== prevProps.seriesLimit) {\n stateUpdate.seriesLimit = seriesLimit;\n }\n\n if (seriesLimitShowAll !== prevProps.seriesLimitShowAll) {\n stateUpdate.seriesLimitShowAll = seriesLimitShowAll;\n }\n\n if (collapsible !== prevProps.collapsible) {\n stateUpdate.collapsible = collapsible;\n }\n\n if (collapsed !== prevProps.collapsed) {\n stateUpdate.collapsed = collapsed;\n }\n\n if (viz !== prevProps.viz) {\n if (viz.pluginId === prevProps.viz.pluginId) {\n const plugin = panel.getPlugin();\n if (plugin) {\n const optionsWithDefaults = getPanelOptionsWithDefaults({\n plugin,\n currentOptions: viz.options,\n currentFieldConfig: viz.fieldConfig,\n isAfterPluginChange: false,\n });\n stateUpdate.options = optionsWithDefaults.options;\n stateUpdate.fieldConfig = optionsWithDefaults.fieldConfig;\n\n panel.clearFieldConfigCache();\n }\n }\n }\n\n if (Object.keys(stateUpdate).length > 0) {\n panel.setState(stateUpdate);\n writeSceneLog('VizPanel', 'Updating VizPanel state', stateUpdate);\n }\n }, [\n panel,\n title,\n description,\n displayMode,\n hoverHeader,\n hoverHeaderOffset,\n headerActions,\n menu,\n titleItems,\n viz,\n dataProvider,\n seriesLimit,\n seriesLimitShowAll,\n collapsible,\n collapsed,\n prevProps,\n ]);\n\n return <panel.Component model={panel} />;\n}\n\n/**\n * Since the useQueryRunner attaches query runners to the scene context their parent is already set\n * This proxy is to work around that.\n * TODO: Figure out a better way to handle this'\n */\nfunction getDataProviderForVizPanel(data: SceneDataProvider | undefined): SceneDataProvider | undefined {\n if (data && !(data instanceof SceneDataNode)) {\n return new DataProviderProxy({ source: data.getRef() });\n }\n return data;\n}\n","import React, { useEffect, useId } from 'react';\nimport { useSceneContext } from '../hooks/hooks';\nimport { SceneRefreshPicker, SceneRefreshPickerState } from '@grafana/scenes';\nimport { usePrevious } from 'react-use';\nimport { useAddToScene } from '../contexts/SceneContextObject';\n\nexport interface Props {\n refresh?: string;\n withText?: boolean;\n}\n\nexport function RefreshPicker(props: Props) {\n const scene = useSceneContext();\n const key = useId();\n const prevProps = usePrevious(props);\n\n let picker = scene.findByKey<SceneRefreshPicker>(key);\n\n if (!picker) {\n picker = new SceneRefreshPicker({\n key: key,\n ...props,\n });\n }\n\n useAddToScene(picker, scene);\n\n // Update options\n useEffect(() => {\n const stateUpdate: Partial<SceneRefreshPickerState> = {};\n\n if (!prevProps) {\n return;\n }\n\n if (props.refresh !== prevProps.refresh) {\n stateUpdate.refresh = props.refresh;\n }\n\n if (props.withText !== prevProps.withText) {\n stateUpdate.withText = props.withText;\n }\n\n picker.setState(stateUpdate);\n }, [picker, props, prevProps]);\n\n return <picker.Component model={picker} />;\n}\n","import React from 'react';\nimport { SceneDataLayerProvider, SceneDataLayerSet, sceneGraph, ControlsLabel } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\nimport { useStyles2 } from '@grafana/ui';\nimport { css } from '@emotion/css';\nimport { LoadingState } from '@grafana/data';\n\nexport interface Props {\n name: string;\n}\n\nexport function DataLayerControl({ name }: Props) {\n const scene = useSceneContext();\n const styles = useStyles2(getStyles);\n const layerSets = sceneGraph.getDataLayers(scene);\n\n const layer = getLayer(layerSets, name);\n const isLoading = Boolean(layer && layer.state.data?.state === LoadingState.Loading);\n\n if (!layer) {\n return <div>Annotation {name} not found</div>;\n }\n\n return (\n <div className={styles.container}>\n <ControlsLabel\n htmlFor={`data-layer-${layer.state.key}`}\n isLoading={isLoading}\n onCancel={() => layer.cancelQuery?.()}\n label={layer.state.name}\n description={layer.state.description}\n error={layer.state.data?.errors?.[0].message}\n />\n <layer.Component model={layer} />\n </div>\n );\n}\n\nconst getStyles = () => ({\n container: css({\n display: 'flex',\n }),\n});\n\nfunction getLayer(layers: SceneDataLayerProvider[], name: string): SceneDataLayerProvider | undefined {\n for (let i = 0; i < layers.length; i++) {\n const layer = (layers[i] as SceneDataLayerSet).state.layers.find((layer) => layer.state.name === name);\n\n if (layer) {\n return layer;\n }\n }\n\n return undefined;\n}\n","import React, { useEffect, useState } from 'react';\nimport { CustomVariable as CustomVariableObject } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\nimport { VariableProps } from './types';\n\nexport interface CustomVariableProps extends VariableProps {\n query: string;\n isMulti?: boolean;\n includeAll?: boolean;\n children: React.ReactNode;\n}\n\nexport function CustomVariable({\n query,\n name,\n label,\n hide,\n initialValue,\n isMulti,\n includeAll,\n skipUrlSync,\n allValue,\n children,\n}: CustomVariableProps): React.ReactNode {\n const scene = useSceneContext();\n const [variableAdded, setVariableAdded] = useState<boolean>();\n\n let variable: CustomVariableObject | undefined = scene.findVariable(name);\n\n if (!variable) {\n variable = new CustomVariableObject({\n name,\n label,\n query,\n value: initialValue,\n isMulti,\n includeAll,\n hide,\n skipUrlSync,\n allValue,\n });\n }\n\n useEffect(() => {\n const removeFn = scene.addVariable(variable);\n setVariableAdded(true);\n return removeFn;\n }, [variable, scene, name]);\n\n useEffect(() => {\n variable?.setState({\n label,\n query,\n hide,\n isMulti,\n includeAll,\n skipUrlSync,\n allValue,\n });\n }, [skipUrlSync, allValue, hide, includeAll, isMulti, label, query, variable]);\n\n // Need to block child rendering until the variable is added so that child components like RVariableSelect find the variable\n if (!variableAdded) {\n return null;\n }\n\n return children;\n}\n","import React, { useEffect, useState } from 'react';\nimport {\n AdHocFiltersVariable as AdHocFiltersVariableObject,\n type AdHocFilterWithLabels,\n type ControlsLayout,\n} from '@grafana/scenes';\nimport type { MetricFindValue } from '@grafana/data';\nimport type { DataSourceRef } from '@grafana/schema';\nimport { isEqual } from 'lodash';\n\nimport { useSceneContext } from '../hooks/hooks';\nimport { VariableProps } from './types';\n\nexport interface AdHocFiltersVariableProps extends VariableProps {\n datasource?: DataSourceRef | null;\n filters?: AdHocFilterWithLabels[];\n baseFilters?: AdHocFilterWithLabels[];\n originFilters?: AdHocFilterWithLabels[];\n readOnly?: boolean;\n layout?: ControlsLayout | 'combobox';\n addFilterButtonText?: string;\n tagKeyRegexFilter?: RegExp;\n defaultKeys?: MetricFindValue[];\n filterExpression?: string;\n expressionBuilder?: (filters: AdHocFilterWithLabels[]) => string;\n getTagKeysProvider?: any;\n getTagValuesProvider?: any;\n supportsMultiValueOperators?: boolean;\n useQueriesAsFilterForOptions?: boolean;\n allowCustomValue?: boolean;\n onAddCustomValue?: any;\n collapsible?: boolean;\n drilldownRecommendationsEnabled?: boolean;\n\n /**\n * `applyMode` is only used during variable construction.\n * If you need to change it, remount this component.\n */\n applyMode?: 'auto' | 'manual';\n children: React.ReactNode;\n}\n\nexport function AdHocFiltersVariable({\n name,\n label,\n hide,\n skipUrlSync,\n children,\n datasource = null,\n filters,\n baseFilters,\n originFilters,\n readOnly,\n layout,\n addFilterButtonText,\n tagKeyRegexFilter,\n defaultKeys,\n filterExpression,\n expressionBuilder,\n getTagKeysProvider,\n getTagValuesProvider,\n supportsMultiValueOperators,\n useQueriesAsFilterForOptions,\n allowCustomValue,\n onAddCustomValue,\n collapsible,\n drilldownRecommendationsEnabled,\n applyMode,\n}: AdHocFiltersVariableProps): React.ReactNode {\n const scene = useSceneContext();\n const [variableAdded, setVariableAdded] = useState<boolean>();\n\n let variable: AdHocFiltersVariableObject | undefined = scene.findVariable(name);\n\n if (!variable) {\n variable = new AdHocFiltersVariableObject({\n name,\n label,\n hide,\n skipUrlSync,\n datasource,\n filters: filters ?? [],\n baseFilters,\n originFilters,\n applyMode,\n readOnly,\n layout,\n addFilterButtonText,\n tagKeyRegexFilter,\n defaultKeys,\n filterExpression,\n expressionBuilder,\n getTagKeysProvider,\n getTagValuesProvider,\n supportsMultiValueOperators,\n useQueriesAsFilterForOptions,\n allowCustomValue,\n onAddCustomValue,\n collapsible,\n drilldownRecommendationsEnabled,\n });\n }\n\n useEffect(() => {\n const removeFn = scene.addVariable(variable);\n setVariableAdded(true);\n return removeFn;\n }, [variable, scene, name]);\n\n useEffect(() => {\n if (!variableAdded) {\n return;\n }\n\n if (\n variable.state.name === name &&\n variable.state.label === label &&\n variable.state.hide === hide &&\n variable.state.skipUrlSync === skipUrlSync &&\n isEqual(variable.state.datasource, datasource) &&\n isEqual(variable.state.baseFilters, baseFilters) &&\n (filters === undefined || isEqual(variable.state.filters, filters)) &&\n variable.state.readOnly === readOnly &&\n variable.state.layout === layout &&\n variable.state.addFilterButtonText === addFilterButtonText &&\n isEqual(variable.state.tagKeyRegexFilter, tagKeyRegexFilter) &&\n isEqual(variable.state.defaultKeys, defaultKeys) &&\n variable.state.filterExpression === filterExpression &&\n variable.state.expressionBuilder === expressionBuilder &&\n variable.state.getTagKeysProvider === getTagKeysProvider &&\n variable.state.getTagValuesProvider === getTagValuesProvider &&\n variable.state.supportsMultiValueOperators === supportsMultiValueOperators &&\n variable.state.useQueriesAsFilterForOptions === useQueriesAsFilterForOptions &&\n variable.state.allowCustomValue === allowCustomValue &&\n variable.state.onAddCustomValue === onAddCustomValue &&\n variable.state.collapsible === collapsible &&\n variable.state.drilldownRecommendationsEnabled === drilldownRecommendationsEnabled\n ) {\n return;\n }\n\n variable.setState({\n name,\n label,\n hide,\n skipUrlSync,\n datasource,\n ...(filters !== undefined && { filters }),\n baseFilters,\n readOnly,\n layout,\n addFilterButtonText,\n tagKeyRegexFilter,\n defaultKeys,\n filterExpression,\n expressionBuilder,\n getTagKeysProvider,\n getTagValuesProvider,\n supportsMultiValueOperators,\n useQueriesAsFilterForOptions,\n allowCustomValue,\n onAddCustomValue,\n collapsible,\n drilldownRecommendationsEnabled,\n });\n }, [\n addFilterButtonText,\n allowCustomValue,\n baseFilters,\n filters,\n collapsible,\n datasource,\n defaultKeys,\n drilldownRecommendationsEnabled,\n expressionBuilder,\n getTagKeysProvider,\n getTagValuesProvider,\n hide,\n label,\n layout,\n name,\n onAddCustomValue,\n readOnly,\n filterExpression,\n skipUrlSync,\n supportsMultiValueOperators,\n tagKeyRegexFilter,\n useQueriesAsFilterForOptions,\n variable,\n variableAdded,\n ]);\n\n // Need to block child rendering until the variable is added so that child components can find the variable.\n if (!variableAdded) {\n return null;\n }\n\n return children;\n}\n","import React, { useEffect, useState } from 'react';\nimport { DataSourceVariable as DataSourceVariableObject } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\nimport { VariableRefresh, VariableSort } from '@grafana/schema';\nimport { VariableProps } from './types';\n\nexport interface DataSourceVariableProps extends VariableProps {\n pluginId: string;\n regex?: string;\n refresh?: VariableRefresh;\n sort?: VariableSort;\n isMulti?: boolean;\n includeAll?: boolean;\n children: React.ReactNode;\n}\n\nexport function DataSourceVariable({\n pluginId,\n regex,\n name,\n label,\n hide,\n initialValue,\n isMulti,\n includeAll,\n skipUrlSync,\n allValue,\n children,\n}: DataSourceVariableProps): React.ReactNode {\n const scene = useSceneContext();\n const [variableAdded, setVariableAdded] = useState<boolean>();\n\n let variable: DataSourceVariableObject | undefined = scene.findVariable(name);\n\n if (!variable) {\n variable = new DataSourceVariableObject({\n pluginId,\n regex,\n name,\n label,\n value: initialValue,\n isMulti,\n hide,\n includeAll,\n skipUrlSync,\n allValue,\n });\n }\n\n useEffect(() => {\n const removeFn = scene.addVariable(variable);\n setVariableAdded(true);\n return removeFn;\n }, [variable, scene, name]);\n\n useEffect(() => {\n if (!variableAdded) {\n return;\n }\n\n if (\n variable.state.pluginId === pluginId &&\n variable.state.regex === regex &&\n variable.state.label === label &&\n variable.state.hide === hide &&\n variable.state.includeAll === includeAll &&\n variable.state.skipUrlSync === skipUrlSync &&\n variable.state.allValue === allValue\n ) {\n return;\n }\n\n variable.setState({\n pluginId,\n regex,\n label,\n hide,\n includeAll,\n skipUrlSync,\n allValue,\n });\n\n variable.refreshOptions();\n }, [skipUrlSync, allValue, hide, includeAll, label, pluginId, regex, variable, variableAdded]);\n\n // Need to block child rendering until the variable is added so that child components like RVariableSelect find the variable\n if (!variableAdded) {\n return null;\n }\n\n return children;\n}\n","import React, { useEffect, useState } from 'react';\nimport { QueryVariable as QueryVariableObject, SceneDataQuery } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\nimport { DataSourceRef, VariableRefresh, VariableSort } from '@grafana/schema';\nimport { VariableProps } from './types';\nimport { isEqual } from 'lodash';\n\nexport interface QueryVariableProps extends VariableProps {\n query: string | SceneDataQuery;\n datasource: DataSourceRef | null;\n regex?: string;\n refresh?: VariableRefresh;\n sort?: VariableSort;\n isMulti?: boolean;\n includeAll?: boolean;\n children: React.ReactNode;\n}\n\nexport function QueryVariable({\n query,\n name,\n datasource,\n label,\n hide,\n regex,\n refresh,\n sort,\n initialValue,\n isMulti,\n includeAll,\n skipUrlSync,\n allValue,\n children,\n}: QueryVariableProps): React.ReactNode {\n const scene = useSceneContext();\n const [variableAdded, setVariableAdded] = useState<boolean>();\n\n let variable: QueryVariableObject | undefined = scene.findVariable(name);\n\n if (!variable) {\n variable = new QueryVariableObject({\n name,\n label,\n query,\n datasource,\n refresh,\n sort,\n regex,\n value: initialValue,\n isMulti,\n hide,\n includeAll,\n skipUrlSync,\n allValue,\n });\n }\n\n useEffect(() => {\n const removeFn = scene.addVariable(variable);\n setVariableAdded(true);\n return removeFn;\n }, [variable, scene, name]);\n\n useEffect(() => {\n if (!variableAdded) {\n return;\n }\n\n if (\n isEqual(variable.state.query, query) &&\n isEqual(variable.state.datasource, datasource) &&\n variable.state.regex === regex &&\n variable.state.label === label &&\n variable.state.hide === hide &&\n variable.state.includeAll === includeAll &&\n variable.state.refresh === refresh &&\n variable.state.sort === sort &&\n variable.state.skipUrlSync === skipUrlSync &&\n variable.state.allValue === allValue\n ) {\n return;\n }\n\n variable.setState({\n label,\n query,\n datasource,\n refresh,\n sort,\n regex,\n hide,\n includeAll,\n skipUrlSync,\n allValue,\n });\n\n variable.refreshOptions();\n }, [\n skipUrlSync,\n allValue,\n datasource,\n hide,\n includeAll,\n label,\n query,\n refresh,\n regex,\n sort,\n variable,\n variableAdded,\n ]);\n\n // Need to block child rendering until the variable is added so that child components like RVariableSelect find the variable\n if (!variableAdded) {\n return null;\n }\n\n return children;\n}\n","import React, { useEffect, useState } from 'react';\nimport { LocalValueVariable as LocalValueVariableObject, type VariableValue } from '@grafana/scenes';\nimport { isEqual } from 'lodash';\n\nimport { useSceneContext } from '../hooks/hooks';\nimport { VariableProps } from './types';\n\nexport interface LocalValueVariableProps extends VariableProps {\n value?: VariableValue;\n text?: VariableValue;\n properties?: Record<string, any>;\n isMulti?: boolean;\n includeAll?: boolean;\n children: React.ReactNode;\n}\n\nexport function LocalValueVariable({\n name,\n label,\n hide,\n skipUrlSync,\n value,\n text,\n properties,\n isMulti,\n includeAll,\n children,\n}: LocalValueVariableProps): React.ReactNode {\n const scene = useSceneContext();\n const [variableAdded, setVariableAdded] = useState<boolean>();\n\n let variable: LocalValueVariableObject | undefined = scene.findVariable(name);\n\n if (!variable) {\n variable = new LocalValueVariableObject({\n name,\n label,\n hide,\n skipUrlSync,\n value,\n text,\n properties,\n isMulti,\n includeAll,\n });\n }\n\n useEffect(() => {\n const removeFn = scene.addVariable(variable);\n setVariableAdded(true);\n return removeFn;\n }, [variable, scene, name]);\n\n useEffect(() => {\n if (!variableAdded) {\n return;\n }\n\n if (\n variable.state.name === name &&\n variable.state.label === label &&\n variable.state.hide === hide &&\n variable.state.skipUrlSync === skipUrlSync &&\n isEqual(variable.state.value, value) &&\n isEqual(variable.state.text, text) &&\n isEqual(variable.state.properties, properties) &&\n variable.state.isMulti === isMulti &&\n variable.state.includeAll === includeAll\n ) {\n return;\n }\n\n variable.setState({\n name,\n label,\n hide,\n skipUrlSync,\n value,\n text,\n properties,\n isMulti,\n includeAll,\n });\n }, [includeAll, hide, isMulti, label, name, properties, skipUrlSync, text, value, variable, variableAdded]);\n\n if (!variableAdded) {\n return null;\n }\n\n return children;\n}\n","import React, { useEffect, useState } from 'react';\nimport { GroupByVariable as GroupByVariableObject, type ControlsLayout, type VariableValue } from '@grafana/scenes';\nimport type { AdHocVariableFilter, MetricFindValue } from '@grafana/data';\nimport type { DataSourceRef } from '@grafana/schema';\nimport { isEqual } from 'lodash';\n\nimport { useSceneContext } from '../hooks/hooks';\nimport { VariableProps } from './types';\n\nexport interface GroupByVariableProps extends VariableProps {\n datasource?: DataSourceRef | null;\n baseFilters?: AdHocVariableFilter[];\n defaultOptions?: MetricFindValue[];\n defaultValue?: { text: VariableValue; value: VariableValue };\n restorable?: boolean;\n readOnly?: boolean;\n layout?: ControlsLayout;\n applyMode?: 'auto' | 'manual';\n tagKeyRegexFilter?: RegExp;\n getTagKeysProvider?: any;\n drilldownRecommendationsEnabled?: boolean;\n /** Allow typing custom values in the selector. Defaults to true in scenes. */\n allowCustomValue?: boolean;\n /** Allow selecting multiple keys. Defaults to true in scenes. */\n isMulti?: boolean;\n /** Include an \"All\" option. */\n includeAll?: boolean;\n /** How many values to show before collapsing to +N. Defaults to 5 in scenes. */\n maxVisibleValues?: number;\n /** When clearing selection, set value to [] instead of keeping previous. Defaults to true in scenes. */\n noValueOnClear?: boolean;\n children: React.ReactNode;\n}\n\nexport function GroupByVariable({\n name,\n label,\n hide,\n skipUrlSync,\n initialValue,\n datasource = null,\n baseFilters,\n defaultOptions,\n defaultValue,\n restorable,\n readOnly,\n layout,\n applyMode,\n tagKeyRegexFilter,\n getTagKeysProvider,\n drilldownRecommendationsEnabled,\n allowCustomValue,\n isMulti,\n includeAll,\n maxVisibleValues,\n noValueOnClear,\n children,\n}: GroupByVariableProps): React.ReactNode {\n const scene = useSceneContext();\n const [variableAdded, setVariableAdded] = useState<boolean>();\n\n let variable: GroupByVariableObject | undefined = scene.findVariable(name);\n\n if (!variable) {\n variable = new GroupByVariableObject({\n name,\n label,\n hide,\n skipUrlSync,\n datasource,\n ...(initialValue !== undefined && {\n value: Array.isArray(initialValue) ? initialValue : [initialValue],\n }),\n baseFilters,\n defaultOptions,\n defaultValue,\n restorable,\n readOnly,\n layout,\n applyMode,\n tagKeyRegexFilter,\n getTagKeysProvider,\n drilldownRecommendationsEnabled,\n allowCustomValue,\n isMulti,\n includeAll,\n maxVisibleValues,\n noValueOnClear,\n });\n }\n\n useEffect(() => {\n const removeFn = scene.addVariable(variable);\n setVariableAdded(true);\n return removeFn;\n }, [variable, scene, name]);\n\n useEffect(() => {\n if (!variableAdded) {\n return;\n }\n\n if (\n variable.state.name === name &&\n variable.state.label === label &&\n variable.state.hide === hide &&\n variable.state.skipUrlSync === skipUrlSync &&\n isEqual(variable.state.datasource, datasource) &&\n isEqual(variable.state.baseFilters, baseFilters) &&\n variable.state.restorable === restorable &&\n variable.state.readOnly === readOnly &&\n variable.state.layout === layout &&\n variable.state.applyMode === applyMode &&\n isEqual(variable.state.tagKeyRegexFilter, tagKeyRegexFilter) &&\n variable.state.getTagKeysProvider === getTagKeysProvider &&\n variable.state.drilldownRecommendationsEnabled === drilldownRecommendationsEnabled &&\n variable.state.allowCustomValue === allowCustomValue &&\n variable.state.isMulti === isMulti &&\n variable.state.includeAll === includeAll &&\n variable.state.maxVisibleValues === maxVisibleValues &&\n variable.state.noValueOnClear === noValueOnClear\n ) {\n return;\n }\n\n variable.setState({\n name,\n label,\n hide,\n skipUrlSync,\n datasource,\n baseFilters,\n restorable,\n readOnly,\n layout,\n applyMode,\n tagKeyRegexFilter,\n getTagKeysProvider,\n drilldownRecommendationsEnabled,\n allowCustomValue,\n isMulti,\n includeAll,\n maxVisibleValues,\n noValueOnClear,\n });\n }, [\n allowCustomValue,\n applyMode,\n baseFilters,\n datasource,\n drilldownRecommendationsEnabled,\n getTagKeysProvider,\n hide,\n includeAll,\n isMulti,\n label,\n layout,\n maxVisibleValues,\n name,\n noValueOnClear,\n readOnly,\n restorable,\n skipUrlSync,\n tagKeyRegexFilter,\n variable,\n variableAdded,\n ]);\n\n if (!variableAdded) {\n return null;\n }\n\n return children;\n}\n","import { NavModelItem, UrlQueryMap, urlUtil } from '@grafana/data';\nimport { locationSearchToObject, locationService } from '@grafana/runtime';\nimport React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { useTimeRange, useVariables } from '../hooks/hooks';\n\n/**\n * Code and concepts copied from https://github.com/grafana/hackathon-2023-12-grafana-react/blob/main/src/grafana-react\n *\n * These contexts & components needs some more thought and naming considerations, just a quick proof of concept for now.\n */\n\ntype BreadcrumbItem = Pick<NavModelItem, 'text' | 'url'>;\n\nexport interface BreadcrumbContextValue {\n breadcrumbs: BreadcrumbItem[];\n addBreadcrumb(breadcrumb: BreadcrumbItem): void;\n removeBreadcrumb(breadcrumb: BreadcrumbItem): void;\n}\n\nexport const BreadcrumbContext = createContext<BreadcrumbContextValue>({\n breadcrumbs: [],\n addBreadcrumb: () => {},\n removeBreadcrumb: () => {},\n});\n\nexport function BreadcrumbProvider({ children }: { children: React.ReactNode }) {\n const [breadcrumbs, setBreadcrumbs] = useState<BreadcrumbItem[]>([]);\n\n return (\n <BreadcrumbContext.Provider\n value={{\n breadcrumbs,\n addBreadcrumb: useCallback((breadcrumb: BreadcrumbItem) => setBreadcrumbs((prev) => [...prev, breadcrumb]), []),\n removeBreadcrumb: useCallback(\n (breadcrumb: BreadcrumbItem) => setBreadcrumbs((prev) => prev.filter((b) => b.url !== breadcrumb.url)),\n []\n ),\n }}\n >\n {children}\n </BreadcrumbContext.Provider>\n );\n}\n\nexport interface BreadcrumbProps {\n text: string;\n path: string;\n extraKeys?: string[];\n}\n\nexport function Breadcrumb({ text, path, extraKeys }: BreadcrumbProps): React.ReactNode {\n const { addBreadcrumb, removeBreadcrumb } = useContext(BreadcrumbContext);\n\n const buildUrl = useUrlBuilder();\n\n useEffect(() => {\n const breadcrumb = {\n text,\n url: buildUrl(path, extraKeys),\n };\n\n addBreadcrumb(breadcrumb);\n\n return () => {\n removeBreadcrumb(breadcrumb);\n };\n }, [text, path, extraKeys, addBreadcrumb, buildUrl, removeBreadcrumb]);\n\n return null;\n}\n\nfunction useUrlBuilder() {\n const queryParams = useQueryParams()[0];\n const variables = useVariables();\n const [_, timeRange] = useTimeRange();\n\n return useCallback(\n (urlBase: string, extraKeys: string[] | undefined) => {\n const params: UrlQueryMap = {};\n\n for (const v of variables) {\n if (v.urlSync && !v.state.skipUrlSync) {\n const state = v.urlSync.getUrlState();\n Object.assign(params, state);\n }\n }\n\n if (timeRange.urlSync) {\n const state = timeRange.urlSync.getUrlState();\n Object.assign(params, state);\n }\n\n if (extraKeys) {\n for (const extra of extraKeys) {\n if (queryParams[extra]) {\n params[extra] = queryParams[extra];\n }\n }\n }\n\n return urlUtil.renderUrl(urlBase, params);\n },\n [variables, queryParams, timeRange]\n );\n}\n\nfunction useQueryParams(): [UrlQueryMap, (values: UrlQueryMap, replace?: boolean) => void] {\n const { search } = useLocation();\n const queryParams = useMemo(() => locationSearchToObject(search || ''), [search]);\n const update = useCallback((values: UrlQueryMap, replace?: boolean) => locationService.partial(values, replace), []);\n return [queryParams, update];\n}\n","import { SceneVariables, VariableValueSingle, sceneGraph } from '@grafana/scenes';\nimport { useSceneContext } from './hooks';\n\nexport function useVariableValues<T = VariableValueSingle>(name: string): [T[] | undefined, boolean] {\n const scene = useSceneContext();\n const variable = sceneGraph.lookupVariable(name, scene);\n\n if (!variable) {\n return [undefined, false];\n }\n\n variable.useState();\n\n const set = variable.parent as SceneVariables;\n const isLoading = set.isVariableLoadingOrWaitingToUpdate(variable);\n let value = variable.getValue();\n\n if (value == null) {\n return [undefined, isLoading];\n }\n\n if (!Array.isArray(value)) {\n value = [value];\n }\n\n return [value as T[], isLoading];\n}\n","import { QueryVariable, SceneDataQuery, sceneGraph } from '@grafana/scenes';\nimport { useSceneContext } from './hooks';\nimport { useEffect } from 'react';\nimport { isEqual } from 'lodash';\n\ninterface QueryVariableOptions {\n name: string;\n datasource: string;\n query: string | SceneDataQuery;\n regex?: string;\n}\n\n/**\n * A custom hook that creates or updates a `QueryVariable` in the scene context.\n *\n * @param {QueryVariableOptions} options - Options for configuring the `QueryVariable`.\n * @returns {QueryVariable | null} The `QueryVariable` instance or `null`.\n *\n * @example\n * // Usage example\n * const variable = useQueryVariable({\n * name: \"myQueryVariable\",\n * datasource: \"gdev-testdata\",\n * query: \"*\",\n * regex: \".*someFilter.*\"\n * });\n *\n * // Returns a QueryVariable instance or null if not a valid QueryVariable\n * if (variable) {\n * console.log(\"Variable added to the scene:\", variable);\n * }\n */\nexport function useQueryVariable(options: QueryVariableOptions): QueryVariable | null {\n const scene = useSceneContext();\n let variable = sceneGraph.lookupVariable(options.name, scene);\n\n if (!variable) {\n variable = new QueryVariable({\n name: options.name,\n datasource: { uid: options.datasource },\n query: options.query,\n regex: options.regex,\n });\n }\n\n if (!(variable instanceof QueryVariable)) {\n variable = null;\n }\n\n useEffect(() => {\n if (variable) {\n scene.addVariable(variable);\n }\n }, [variable, scene]);\n\n useEffect(() => {\n if (\n variable?.state.datasource?.uid !== options.datasource ||\n !isEqual(variable?.state.query, options.query) ||\n variable?.state.regex !== options.regex\n ) {\n variable?.setState({ datasource: { uid: options.datasource }, query: options.query, regex: options.regex });\n variable?.refreshOptions();\n }\n }, [options, variable]);\n\n return variable;\n}\n","import { MultiValueVariable, SceneVariables, VariableValueSingle, sceneGraph } from '@grafana/scenes';\nimport { useSceneContext } from './hooks';\n\nexport function useVariableValue<T = VariableValueSingle>(name: string): [T | undefined, boolean] {\n const scene = useSceneContext();\n const variable = sceneGraph.lookupVariable(name, scene);\n\n if (!variable || (variable instanceof MultiValueVariable && variable.state.isMulti === true)) {\n return [undefined, false];\n }\n\n variable.useState();\n\n const set = variable.parent as SceneVariables;\n const isLoading = set.isVariableLoadingOrWaitingToUpdate(variable);\n let value = variable.getValue();\n\n if (value == null) {\n return [undefined, isLoading];\n }\n\n return [value as T, isLoading];\n}\n","import React, { useEffect, useState } from 'react';\nimport { useSceneContext } from '../hooks/hooks';\nimport { AnnotationQuery } from '@grafana/data';\nimport { SceneDataLayerSet, dataLayers } from '@grafana/scenes';\nimport { SceneContextObject } from '../contexts/SceneContextObject';\nimport { writeSceneLog } from '../utils';\n\nexport interface AnnotationLayerSetProps {\n name: string;\n query: AnnotationQuery;\n children: React.ReactNode;\n}\n\nexport function AnnotationLayer({ name, query, children }: AnnotationLayerSetProps): React.ReactNode {\n const scene = useSceneContext();\n const [annotationAdded, setAnnotationAdded] = useState<boolean>();\n\n let annotation: dataLayers.AnnotationsDataLayer | undefined = findAnnotationLayer(scene, name);\n\n if (!annotation) {\n annotation = new dataLayers.AnnotationsDataLayer({ name, query });\n }\n\n useEffect(() => {\n const removeFn = addAnnotationLayer(scene, annotation);\n setAnnotationAdded(true);\n return removeFn;\n }, [scene, name, annotation]);\n\n useEffect(() => {\n // Handle prop changes\n }, [annotationAdded]);\n\n if (!annotationAdded) {\n return null;\n }\n\n return children;\n}\n\nfunction findAnnotationLayer<T>(scene: SceneContextObject, name: string): T | undefined {\n const annotations = scene.state.$data as SceneDataLayerSet;\n\n if (!annotations) {\n return;\n }\n\n return annotations.state.layers.find((anno) => anno.state.name === name) as T;\n}\n\nfunction addAnnotationLayer(scene: SceneContextObject, layer: dataLayers.AnnotationsDataLayer) {\n let set = scene.state.$data as SceneDataLayerSet;\n\n if (set) {\n set.setState({ layers: [...set.state.layers, layer] });\n } else {\n set = new SceneDataLayerSet({ layers: [layer] });\n scene.setState({ $data: set });\n }\n\n writeSceneLog('SceneContext', `Adding annotation data layer: ${layer.state.name} key: ${layer.state.key}`);\n\n return () => {\n set.setState({ layers: set.state.layers.filter((x) => x !== layer) });\n writeSceneLog('SceneContext', `Removing annotation data layer: ${layer.state.name} key: ${layer.state.key}`);\n };\n}\n","import React from 'react';\nimport { EmbeddedScene, EmbeddedSceneState, SceneComponentProps } from '@grafana/scenes';\nimport { SceneContext } from '../contexts/SceneContextProvider';\nimport { SceneContextObject } from '../contexts/SceneContextObject';\n\nexport class EmbeddedSceneWithContext extends EmbeddedScene {\n public constructor(state: EmbeddedSceneState) {\n super({ ...state, context: new SceneContextObject() });\n }\n\n public static Component = ({ model }: SceneComponentProps<EmbeddedSceneWithContext>) => {\n return (\n <SceneContext.Provider value={model.state.context as SceneContextObject}>\n <EmbeddedScene.Component model={model} />\n </SceneContext.Provider>\n );\n };\n}\n","import { useTheme2 } from '@grafana/ui';\nimport React, { CSSProperties } from 'react';\n\nexport interface Props {\n minWidth?: number;\n minHeight?: number;\n children: React.ReactNode;\n}\n\n/**\n * Simple css grid layout for visualizations\n */\nexport function VizGridLayout({ children, minWidth = 400, minHeight = 320 }: Props) {\n const theme = useTheme2();\n const style: CSSProperties = {\n display: 'grid',\n flexGrow: 1,\n gridTemplateColumns: `repeat(auto-fit, minmax(${minWidth}px, 1fr))`,\n gridAutoRows: `minmax(${minHeight}px, auto)`,\n columnGap: theme.spacing(1),\n rowGap: theme.spacing(1),\n };\n\n return <div style={style}>{children}</div>;\n}\n","import { createContext } from 'react';\nimport type { SceneFlexItem, SceneFlexLayout } from '@grafana/scenes';\n\nexport interface SceneFlexLayoutRegistry {\n layout: SceneFlexLayout;\n register: (id: string, item: SceneFlexItem, order: number) => void;\n unregister: (id: string) => void;\n}\n\nexport const SceneFlexLayoutContext = createContext<SceneFlexLayoutRegistry | null>(null);\n","import React, { useContext, useEffect, useId, useRef } from 'react';\nimport { isEqual } from 'lodash';\nimport { SceneFlexItem as SceneFlexItemObject, SceneReactObject, type SceneFlexItemPlacement } from '@grafana/scenes';\n\nimport { SceneFlexLayoutContext } from './SceneFlexLayoutContext';\n\nexport interface SceneFlexItemProps extends SceneFlexItemPlacement {\n children: React.ReactNode;\n}\n\nexport function SceneFlexItem(props: SceneFlexItemProps) {\n const ctx = useContext(SceneFlexLayoutContext);\n const key = useId();\n\n const { children } = props;\n const { wrap, direction, width, height, minWidth, minHeight, maxWidth, maxHeight, xSizing, ySizing, isHidden, md } =\n props;\n const order = (props as SceneFlexItemProps & { __order?: number }).__order ?? 0;\n\n if (!ctx) {\n throw new Error('SceneFlexItem must be a child of SceneFlexLayout');\n }\n\n const itemRef = useRef<SceneFlexItemObject>();\n\n if (!itemRef.current) {\n itemRef.current = new SceneFlexItemObject({\n key,\n body: new SceneReactObject({ reactNode: children }),\n wrap,\n direction,\n width,\n height,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n xSizing,\n ySizing,\n isHidden,\n md,\n });\n }\n\n const item = itemRef.current;\n\n // Register/unregister with parent layout\n const mountedRef = useRef(false);\n\n useEffect(() => {\n ctx.register(key, item, order);\n mountedRef.current = true;\n\n return () => {\n mountedRef.current = false;\n ctx.unregister(key);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ctx, item, key]);\n\n // Keep ordering up to date when parent changes React order.\n useEffect(() => {\n if (!mountedRef.current) {\n return;\n }\n\n ctx.register(key, item, order);\n }, [ctx, item, key, order]);\n\n // Sync placement props\n useEffect(() => {\n const nextPlacement: SceneFlexItemPlacement = {\n wrap,\n direction,\n width,\n height,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n xSizing,\n ySizing,\n isHidden,\n md,\n };\n\n if (\n item.state.wrap === nextPlacement.wrap &&\n item.state.direction === nextPlacement.direction &&\n item.state.width === nextPlacement.width &&\n item.state.height === nextPlacement.height &&\n item.state.minWidth === nextPlacement.minWidth &&\n item.state.minHeight === nextPlacement.minHeight &&\n item.state.maxWidth === nextPlacement.maxWidth &&\n item.state.maxHeight === nextPlacement.maxHeight &&\n item.state.xSizing === nextPlacement.xSizing &&\n item.state.ySizing === nextPlacement.ySizing &&\n item.state.isHidden === nextPlacement.isHidden &&\n isEqual(item.state.md, nextPlacement.md)\n ) {\n return;\n }\n\n item.setState(nextPlacement);\n }, [item, direction, height, isHidden, maxHeight, maxWidth, md, minHeight, minWidth, width, wrap, xSizing, ySizing]);\n\n // Sync item body (React node)\n const body = item.state.body as SceneReactObject | undefined;\n\n useEffect(() => {\n if (!body) {\n return;\n }\n\n if (body.state.reactNode === children) {\n return;\n }\n\n body.setState({ reactNode: children });\n }, [body, children]);\n\n // Rendering happens via SceneFlexLayout's renderer.\n return null;\n}\n","import React, { useCallback, useEffect, useId, useMemo, useRef } from 'react';\nimport { isEqual } from 'lodash';\nimport {\n SceneFlexItem as SceneFlexItemObject,\n SceneFlexLayout as SceneFlexLayoutObject,\n type SceneFlexItemPlacement,\n} from '@grafana/scenes';\n\nimport { useSceneContext } from '../hooks/hooks';\nimport { SceneFlexItem, type SceneFlexItemProps } from './SceneFlexItem';\nimport { SceneFlexLayoutContext } from './SceneFlexLayoutContext';\nimport { useAddToScene } from '../contexts/SceneContextObject';\n\nexport interface SceneFlexLayoutProps extends SceneFlexItemPlacement {\n children: React.ReactNode;\n}\n\ntype RegistryEntry = { item: SceneFlexItemObject; order: number };\n\nexport function SceneFlexLayout(props: SceneFlexLayoutProps) {\n const scene = useSceneContext();\n const key = useId();\n const { wrap, direction, width, height, minWidth, minHeight, maxWidth, maxHeight, xSizing, ySizing, isHidden, md } =\n props;\n\n let layout = scene.findByKey<SceneFlexLayoutObject>(key);\n\n if (!layout) {\n layout = new SceneFlexLayoutObject({\n key,\n children: [],\n wrap,\n direction,\n width,\n height,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n xSizing,\n ySizing,\n isHidden,\n md,\n });\n }\n\n useAddToScene(layout, scene);\n\n // Keep layout placement props in sync (but do not touch children here).\n useEffect(() => {\n const nextPlacement: SceneFlexItemPlacement = {\n wrap,\n direction,\n width,\n height,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n xSizing,\n ySizing,\n isHidden,\n md,\n };\n\n if (\n layout.state.wrap === nextPlacement.wrap &&\n layout.state.direction === nextPlacement.direction &&\n layout.state.width === nextPlacement.width &&\n layout.state.height === nextPlacement.height &&\n layout.state.minWidth === nextPlacement.minWidth &&\n layout.state.minHeight === nextPlacement.minHeight &&\n layout.state.maxWidth === nextPlacement.maxWidth &&\n layout.state.maxHeight === nextPlacement.maxHeight &&\n layout.state.xSizing === nextPlacement.xSizing &&\n layout.state.ySizing === nextPlacement.ySizing &&\n layout.state.isHidden === nextPlacement.isHidden &&\n isEqual(layout.state.md, nextPlacement.md)\n ) {\n return;\n }\n\n layout.setState(nextPlacement);\n }, [\n layout,\n direction,\n height,\n isHidden,\n maxHeight,\n maxWidth,\n md,\n minHeight,\n minWidth,\n width,\n wrap,\n xSizing,\n ySizing,\n ]);\n\n const registryRef = useRef<Map<string, RegistryEntry>>(new Map());\n\n const updateLayoutChildren = useCallback(() => {\n const entries = Array.from(registryRef.current.values()).sort((a, b) => {\n if (a.order !== b.order) {\n return a.order - b.order;\n }\n // `key` is guaranteed at runtime, but typed optional in `SceneObjectState`.\n return (a.item.state.key ?? '').localeCompare(b.item.state.key ?? '');\n });\n\n const nextChildren = entries.map((e) => e.item);\n const currentChildren = layout.state.children;\n\n if (\n currentChildren.length === nextChildren.length &&\n currentChildren.every((child, idx) => child === nextChildren[idx])\n ) {\n return;\n }\n\n layout.setState({ children: nextChildren });\n }, [layout]);\n\n const register = useCallback(\n (id: string, item: SceneFlexItemObject, order: number) => {\n registryRef.current.set(id, { item, order });\n updateLayoutChildren();\n },\n [updateLayoutChildren]\n );\n\n const unregister = useCallback(\n (id: string) => {\n registryRef.current.delete(id);\n updateLayoutChildren();\n },\n [updateLayoutChildren]\n );\n\n const ctxValue = useMemo(() => {\n return { layout, register, unregister };\n }, [layout, register, unregister]);\n\n const flexItemChildren = useMemo(() => {\n const items = collectFlexItemElements(props.children);\n return items.map((el, idx) => {\n // Ensure stable keys for React list rendering (also avoids warnings when consumers omit keys).\n const key = el.key ?? `__scene_flex_item_${idx}`;\n return React.cloneElement(el, { key, __order: idx } as any);\n });\n }, [props.children]);\n\n return (\n <SceneFlexLayoutContext.Provider value={ctxValue}>\n <layout.Component model={layout} />\n {flexItemChildren}\n </SceneFlexLayoutContext.Provider>\n );\n}\n\nfunction collectFlexItemElements(children: React.ReactNode): Array<React.ReactElement<SceneFlexItemProps>> {\n const result: Array<React.ReactElement<SceneFlexItemProps>> = [];\n\n React.Children.forEach(children, (child) => {\n if (!child) {\n return;\n }\n\n if (React.isValidElement(child) && child.type === React.Fragment) {\n result.push(...collectFlexItemElements(child.props.children));\n return;\n }\n\n if (React.isValidElement(child) && child.type === SceneFlexItem) {\n result.push(child as React.ReactElement<SceneFlexItemProps>);\n return;\n }\n });\n\n return result;\n}\n"],"names":["SceneObjectBase","NewSceneObjectAddedEvent","SceneVariableSet","useEffect","createContext","useContext","useState","behaviors","SceneTimeRange","childContext","React","UrlSyncContextProvider","sceneGraph","Subscription","SceneVariableValueChangedEvent","useCallback","LRUCache","isPlainObject","useId","SceneQueryRunner","isEqual","SceneDataTransformer","DataProviderProxy","TimeRangePickerUI","VariableValueSelectWrapper","usePrevious","VizPanelObject","getPanelOptionsWithDefaults","SceneDataNode","SceneRefreshPicker","useStyles2","LoadingState","ControlsLabel","_a","css","layer","CustomVariableObject","AdHocFiltersVariableObject","DataSourceVariableObject","QueryVariableObject","LocalValueVariableObject","GroupByVariableObject","urlUtil","useLocation","useMemo","locationSearchToObject","locationService","QueryVariable","MultiValueVariable","dataLayers","SceneDataLayerSet","EmbeddedScene","useTheme2","useRef","SceneFlexItemObject","SceneReactObject","SceneFlexLayoutObject","key"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils.ts","../src/contexts/SceneContextObject.tsx","../src/contexts/SceneContextProvider.tsx","../src/hooks/hooks.ts","../src/caching/SceneObjectCache.ts","../src/hooks/useSceneObject.ts","../src/hooks/useQueryRunner.ts","../src/hooks/useDataTransformer.ts","../src/components/TimeRangePicker.tsx","../src/components/VariableControl.tsx","../src/components/VizPanel.tsx","../src/components/RefreshPicker.tsx","../src/components/DataLayerControl.tsx","../src/variables/CustomVariable.tsx","../src/variables/AdHocFiltersVariable.tsx","../src/variables/DataSourceVariable.tsx","../src/variables/QueryVariable.tsx","../src/variables/LocalValueVariable.tsx","../src/variables/GroupByVariable.tsx","../src/contexts/BreadcrumbContext.tsx","../src/hooks/useVariableValues.ts","../src/hooks/useQueryVariable.ts","../src/hooks/useVariableValue.ts","../src/components/AnnotationLayer.tsx","../src/interoperability/EmbeddedSceneWithContext.tsx","../src/components/VizGridLayout.tsx","../src/components/SceneFlexLayoutContext.ts","../src/components/SceneFlexItem.tsx","../src/components/SceneFlexLayout.tsx"],"sourcesContent":["export function writeSceneLog(logger: string, message: string, ...rest: unknown[]) {\n let loggingEnabled = false;\n\n if (typeof window !== 'undefined') {\n loggingEnabled = localStorage.getItem('grafana.debug.scenes') === 'true';\n }\n\n if (loggingEnabled) {\n console.log(`${logger}: `, message, ...rest);\n }\n}\n","import {\n SceneObjectBase,\n SceneObject,\n SceneObjectState,\n SceneVariable,\n SceneVariableSet,\n NewSceneObjectAddedEvent,\n} from '@grafana/scenes';\nimport { writeSceneLog } from '../utils';\nimport { useEffect } from 'react';\n\nexport interface SceneContextObjectState extends SceneObjectState {\n childContexts?: SceneContextObject[];\n children: SceneObject[];\n}\n\nexport class SceneContextObject extends SceneObjectBase<SceneContextObjectState> {\n public constructor(state?: Partial<SceneContextObjectState>) {\n super({\n ...state,\n children: state?.children ?? [],\n childContexts: state?.childContexts ?? [],\n });\n }\n\n public addToScene(obj: SceneObject) {\n this.publishEvent(new NewSceneObjectAddedEvent(obj), true);\n\n this.setState({ children: [...this.state.children, obj] });\n writeSceneLog('SceneContext', `Adding to scene: ${obj.constructor.name} key: ${obj.state.key}`);\n\n const deactivate = obj.activate();\n\n return () => {\n writeSceneLog('SceneContext', `Removing from scene: ${obj.constructor.name} key: ${obj.state.key}`);\n this.setState({ children: this.state.children.filter((x) => x !== obj) });\n\n deactivate();\n };\n }\n\n public findByKey<T>(key: string): T | undefined {\n return this.state.children.find((x) => x.state.key === key) as T;\n }\n\n public findVariable<T>(name: string): T | undefined {\n const variables = this.state.$variables as SceneVariableSet;\n if (!variables) {\n return;\n }\n\n return variables.getByName(name) as T;\n }\n\n public addVariable(variable: SceneVariable) {\n let set = this.state.$variables as SceneVariableSet;\n\n this.publishEvent(new NewSceneObjectAddedEvent(variable), true);\n\n if (set) {\n set.setState({ variables: [...set.state.variables, variable] });\n } else {\n set = new SceneVariableSet({ variables: [variable] });\n this.setState({ $variables: set });\n }\n\n writeSceneLog('SceneContext', `Adding variable: ${variable.constructor.name} key: ${variable.state.key}`);\n\n return () => {\n set.setState({ variables: set.state.variables.filter((x) => x !== variable) });\n writeSceneLog('SceneContext', `Removing variable: ${variable.constructor.name} key: ${variable.state.key}`);\n };\n }\n\n public addChildContext(ctx: SceneContextObject) {\n this.publishEvent(new NewSceneObjectAddedEvent(ctx), true);\n\n this.setState({ childContexts: [...(this.state.childContexts ?? []), ctx] });\n\n writeSceneLog('SceneContext', `Adding child context: ${ctx.constructor.name} key: ${ctx.state.key}`);\n }\n\n public removeChildContext(ctx: SceneContextObject) {\n this.setState({\n childContexts: this.state.childContexts?.filter((context) => ctx !== context),\n });\n\n writeSceneLog('SceneContext', `Remvoing child context: ${ctx.constructor.name} key: ${ctx.state.key}`);\n }\n}\n\nexport function useAddToScene(obj: SceneObject, ctx: SceneContextObject) {\n // Old behavior\n if (!SceneObjectBase.RENDER_BEFORE_ACTIVATION_DEFAULT) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => ctx.addToScene(obj), [ctx, obj]);\n return;\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n const deactivate = obj.activate();\n\n return () => {\n writeSceneLog('SceneContext', `Removing from scene: ${obj.constructor.name} key: ${obj.state.key}`);\n ctx.setState({ children: ctx.state.children.filter((x) => x !== obj) });\n\n deactivate();\n };\n }, [ctx, obj]);\n\n // Check if scene contains object instance\n if (ctx.state.children.includes(obj)) {\n return;\n }\n\n // This is technically a state change during render. We have to add it to the state tree right away in order to render the object on the first pass\n // Should be ok as nothing subscribes to SceneContextObject state changes and the NewSceneObjectAddedEvent is syncing url state to obj state\n ctx.publishEvent(new NewSceneObjectAddedEvent(obj), true);\n ctx.setState({ children: [...ctx.state.children, obj] });\n\n writeSceneLog('SceneContext', `Adding to scene: ${obj.constructor.name} key: ${obj.state.key}`);\n}\n","import React, { createContext, useContext, useEffect, useState } from 'react';\nimport { SceneTimeRangeState, SceneTimeRange, behaviors, UrlSyncContextProvider } from '@grafana/scenes';\n\nimport { SceneContextObject, SceneContextObjectState } from './SceneContextObject';\n\nexport const SceneContext = createContext<SceneContextObject | null>(null);\n\nexport interface SceneContextProviderProps {\n /**\n * Only the initial time range, cannot be used to update time range\n **/\n timeRange?: Partial<SceneTimeRangeState>;\n /**\n * This makes it possbile to view running state of queries via\n * refresh picker and also cancel all queries in the scene.\n */\n withQueryController?: boolean;\n /**\n * Children\n */\n children: React.ReactNode;\n}\n\n/**\n * Wrapps the react children in a SceneContext\n */\nexport function SceneContextProvider({ children, timeRange, withQueryController }: SceneContextProviderProps) {\n const parentContext = useContext(SceneContext);\n const [childContext, setChildContext] = useState<SceneContextObject | undefined>();\n\n // Becasue timeRange is not part of useEffect dependencies\n const initialTimeRange = timeRange;\n\n useEffect(() => {\n const state: SceneContextObjectState = { children: [] };\n\n if (withQueryController) {\n state.$behaviors = [new behaviors.SceneQueryController()];\n }\n\n if (initialTimeRange) {\n state.$timeRange = new SceneTimeRange(initialTimeRange);\n }\n\n const childContext = new SceneContextObject(state);\n\n if (parentContext) {\n parentContext.addChildContext(childContext);\n }\n\n const deactivate = childContext.activate();\n setChildContext(childContext);\n\n return () => {\n deactivate();\n\n if (parentContext) {\n parentContext.removeChildContext(childContext);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [parentContext, withQueryController]);\n\n if (!childContext) {\n return null;\n }\n\n const innerProvider = <SceneContext.Provider value={childContext}>{children}</SceneContext.Provider>;\n\n if (parentContext) {\n return innerProvider;\n }\n\n // For root context we wrap the provider in a UrlSyncWrapper that handles the hook that updates state on location changes\n return (\n <UrlSyncContextProvider scene={childContext} updateUrlOnInit={true} createBrowserHistorySteps={true}>\n {innerProvider}\n </UrlSyncContextProvider>\n );\n}\n","import { useCallback, useContext, useEffect, useState } from 'react';\nimport { SceneContext } from '../contexts/SceneContextProvider';\nimport { TimeRange } from '@grafana/data';\nimport {\n SceneVariable,\n SceneVariableValueChangedEvent,\n VariableValue,\n sceneGraph,\n SceneTimeRangeLike,\n} from '@grafana/scenes';\nimport { Subscription } from 'rxjs';\n\nexport function useSceneContext() {\n const scene = useContext(SceneContext);\n if (!scene) {\n throw new Error('Cannot find a SceneContext');\n }\n\n return scene;\n}\n\nexport function useTimeRange(): [TimeRange, SceneTimeRangeLike] {\n const scene = useSceneContext();\n const sceneTimeRange = sceneGraph.getTimeRange(scene);\n const { value } = sceneTimeRange.useState();\n\n return [value, sceneTimeRange];\n}\n\n/**\n * Only returns the variables on the closest context level.\n * We could modify it to extract all variables from the full context tree.\n */\nexport function useVariables(): SceneVariable[] {\n const scene = useSceneContext();\n const variables = sceneGraph.getVariables(scene);\n return variables.useState().variables;\n}\n\nexport interface UseUpdateWhenSceneChangesOptions {\n /** Variable names */\n variables?: string[];\n timeRange?: boolean;\n}\n\nexport interface UseUpdateWhenSceneChangesReason {\n variableName?: string;\n variableValue?: VariableValue | undefined | null;\n timeRange?: TimeRange;\n}\n\n/**\n * A utility hook to re-render the calling react component when specified variables or time range changes\n */\nexport function useUpdateWhenSceneChanges({ timeRange, variables = [] }: UseUpdateWhenSceneChangesOptions) {\n const scene = useSceneContext();\n const [updateReason, setUpdateReason] = useState<UseUpdateWhenSceneChangesReason>();\n\n useEffect(() => {\n const subscriptions = new Subscription();\n\n if (variables && variables.length > 0) {\n for (const v of variables) {\n const variable = sceneGraph.lookupVariable(v, scene);\n if (variable) {\n subscriptions.add(\n variable.subscribeToEvent(SceneVariableValueChangedEvent, () => {\n setUpdateReason({ variableName: variable.state.name, variableValue: variable.getValue() });\n })\n );\n }\n }\n }\n\n if (timeRange) {\n const tr = sceneGraph.getTimeRange(scene);\n tr.subscribeToState((newState, oldState) => {\n if (newState.value !== oldState.value) {\n setUpdateReason({ timeRange: newState.value });\n }\n });\n }\n\n return () => subscriptions.unsubscribe();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [scene, timeRange, ...variables]);\n\n return updateReason;\n}\n\n/**\n * Mainly a utility hook to re-render the calling react component when specified variables or time range changes\n */\nexport function useVariableInterpolator(options: UseUpdateWhenSceneChangesOptions) {\n const scene = useSceneContext();\n\n useUpdateWhenSceneChanges(options);\n\n return useCallback(\n (str: string) => {\n return sceneGraph.interpolate(scene, str);\n },\n [scene]\n );\n}\n","import { SceneObject } from '@grafana/scenes';\nimport { isPlainObject } from 'lodash';\nimport { LRUCache } from 'lru-cache';\n\nexport type CacheKey = CacheKeyPart | CacheKeyPart[];\n\nexport type CacheKeyPart = string | number | object | boolean;\n\nexport type SceneObjectConstructor = { new (...args: never[]): SceneObject };\n\nexport class SceneObjectCache {\n #cache: LRUCache<string, SceneObject>;\n #objectRefIds = new WeakMap<any, number>();\n #objectRefIdCounter = 0;\n\n public constructor() {\n this.#cache = new LRUCache({\n max: 500,\n ttl: 1000 * 60 * 5,\n });\n }\n\n public add(keyHash: string, object: SceneObject) {\n this.#cache.set(keyHash, object);\n }\n\n public get<T>(keyHash: string): T | undefined {\n return this.#cache.get(keyHash) as T;\n }\n\n public getHashKey(key: CacheKey, type: SceneObjectConstructor): string {\n if (Array.isArray(key)) {\n return `${type.name}-${key.map((k) => this.getHashKeyElement(k)).join()}`;\n }\n\n return `${type.name}-${this.getHashKeyElement(key)}`;\n }\n\n public getByRefHashKey(obj: unknown) {\n let objectRefId = this.#objectRefIds.get(obj);\n if (objectRefId == null) {\n objectRefId = this.#objectRefIdCounter++;\n this.#objectRefIds.set(obj, objectRefId);\n }\n\n return objectRefId;\n }\n\n private getHashKeyElement<T>(key: CacheKey) {\n if (typeof key === 'string' || typeof key === 'boolean' || typeof key === 'number') {\n return key;\n }\n\n return getObjectHash(key);\n }\n}\n\nlet cache: SceneObjectCache | undefined;\n\nexport function getSceneObjectCache(): SceneObjectCache {\n if (cache) {\n return cache;\n }\n\n return (cache = new SceneObjectCache());\n}\n\n/**\n * Returns a unique hash key string for the given object reference.\n */\nexport function cacheByRef(value: unknown) {\n const cache = getSceneObjectCache();\n return cache.getByRefHashKey(value);\n}\n\nexport function getObjectHash(obj: unknown): string {\n return JSON.stringify(obj, (_, val) =>\n isPlainObject(val)\n ? Object.keys(val)\n .sort()\n .reduce((result, key) => {\n result[key] = val[key];\n return result;\n }, {} as any)\n : val\n );\n}\n","import { useId } from 'react';\nimport { SceneObject, sceneGraph } from '@grafana/scenes';\nimport { useSceneContext } from './hooks';\nimport { CacheKey, SceneObjectConstructor, getSceneObjectCache } from '../caching/SceneObjectCache';\nimport { useAddToScene } from '../contexts/SceneContextObject';\n\nexport interface UseSceneObjectProps<T extends SceneObject> {\n factory: (key: string) => T;\n cacheKey?: CacheKey;\n objectConstructor: SceneObjectConstructor;\n}\n\n/**\n * Helper hook that handles adding and removing the scene object from the scene object graph.\n * Also handles the lookup of the object from the cache if a cache key is provided.\n */\nexport function useSceneObject<T extends SceneObject>(options: UseSceneObjectProps<T>) {\n const scene = useSceneContext();\n const key = useId();\n const cache = getSceneObjectCache();\n let cacheKeyHash = options.cacheKey ? cache.getHashKey(options.cacheKey, options.objectConstructor) : undefined;\n\n let obj = scene.findByKey<T>(key);\n\n if (!obj && cacheKeyHash) {\n obj = cache.get<T>(cacheKeyHash);\n\n if (obj && obj.parent !== scene) {\n // Before clearing parent make sure the object is not already in the scene\n if (sceneGraph.findObject(scene, (sceneObj) => sceneObj === obj)) {\n console.error('A scene object cache key matched an object that is already in the scene');\n obj = undefined;\n // Setting this to undefined so that we later do not add/overwrite the object that is already in the scene\n cacheKeyHash = undefined;\n } else {\n obj.clearParent();\n }\n }\n }\n\n if (!obj) {\n obj = options.factory(key);\n if (cacheKeyHash) {\n cache.add(cacheKeyHash, obj);\n }\n }\n\n useAddToScene(obj, scene);\n\n return obj;\n}\n","import { useEffect } from 'react';\nimport { SceneDataQuery, SceneQueryRunner } from '@grafana/scenes';\nimport { DataSourceRef } from '@grafana/schema';\nimport { isEqual } from 'lodash';\nimport { CacheKey } from '../caching/SceneObjectCache';\nimport { useSceneObject } from './useSceneObject';\n\nexport interface UseQueryOptions {\n queries: SceneDataQuery[];\n maxDataPoints?: number;\n datasource?: DataSourceRef;\n cacheKey?: CacheKey;\n liveStreaming?: boolean;\n maxDataPointsFromWidth?: boolean;\n minInterval?: string;\n /**\n * Optional prefix for the requestId. When set, request IDs will be formatted as `{requestIdPrefix}{counter}`.\n * Useful for identifying requests from specific panels or components.\n */\n requestIdPrefix?: string;\n}\n\n/**\n * Maintains the state of SceneQueryRunner in the scene\n *\n * @example // To access query results do\n * const query = useQueryRunner(...);\n * const { data } = query.useState();\n */\nexport function useQueryRunner(options: UseQueryOptions): SceneQueryRunner {\n const queryRunner = useSceneObject({\n factory: (key) =>\n new SceneQueryRunner({\n key: key,\n queries: options.queries,\n maxDataPoints: options.maxDataPoints,\n datasource: options.datasource,\n liveStreaming: options.liveStreaming,\n maxDataPointsFromWidth: options.maxDataPointsFromWidth,\n minInterval: options.minInterval,\n requestIdPrefix: options.requestIdPrefix,\n }),\n objectConstructor: SceneQueryRunner,\n cacheKey: options.cacheKey,\n });\n\n // Update queries when they change\n useEffect(() => {\n if (!isEqual(queryRunner.state.queries, options.queries)) {\n queryRunner.setState({ queries: options.queries });\n queryRunner.runQueries();\n }\n }, [queryRunner, options]);\n\n return queryRunner;\n}\n","import {\n CustomTransformerDefinition,\n DataProviderProxy,\n SceneDataProvider,\n SceneDataTransformer,\n} from '@grafana/scenes';\nimport { useSceneContext } from './hooks';\nimport { useEffect, useId } from 'react';\nimport { isEqual } from 'lodash';\nimport { DataTransformerConfig } from '@grafana/schema';\nimport { useAddToScene } from '../contexts/SceneContextObject';\n\nexport interface UseDataTransformerOptions {\n transformations: Array<DataTransformerConfig | CustomTransformerDefinition>;\n data: SceneDataProvider;\n}\n\nexport function useDataTransformer(options: UseDataTransformerOptions) {\n const scene = useSceneContext();\n const key = useId();\n\n let dataTransformer = scene.findByKey<SceneDataTransformer>(key);\n\n if (!dataTransformer) {\n dataTransformer = new SceneDataTransformer({\n key: key,\n $data: new DataProviderProxy({ source: options.data.getRef() }),\n transformations: options.transformations,\n });\n }\n\n useAddToScene(dataTransformer, scene);\n\n useEffect(() => {\n if (!isEqual(dataTransformer.state.transformations, options.transformations)) {\n dataTransformer.setState({ transformations: options.transformations });\n dataTransformer.reprocessTransformations();\n }\n }, [dataTransformer, options.transformations]);\n\n return dataTransformer;\n}\n","import { TimeRangePicker as TimeRangePickerUI } from '@grafana/ui';\nimport React from 'react';\nimport { useTimeRange } from '../hooks/hooks';\n\nexport interface Props {}\n\nexport function TimeRangePicker(props: Props) {\n const [value, sceneTimeRange] = useTimeRange();\n\n return (\n <TimeRangePickerUI\n isOnCanvas={true}\n value={value}\n onChange={sceneTimeRange.onTimeRangeChange}\n timeZone={sceneTimeRange.getTimeZone()}\n onMoveBackward={() => {}}\n onMoveForward={() => {}}\n onZoom={() => {}}\n onChangeTimeZone={() => {}}\n onChangeFiscalYearStartMonth={() => {}}\n />\n );\n}\n","import React from 'react';\nimport { ControlsLayout, sceneGraph, VariableValueSelectWrapper } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\n\nexport interface Props {\n name: string;\n hideLabel?: boolean;\n layout?: ControlsLayout;\n}\n\nexport function VariableControl({ name, hideLabel, layout }: Props) {\n const scene = useSceneContext();\n const variable = sceneGraph.lookupVariable(name, scene);\n\n if (!variable) {\n return <div>Variable {name} not found</div>;\n }\n\n return (\n <VariableValueSelectWrapper key={variable.state.key} variable={variable} hideLabel={hideLabel} layout={layout} />\n );\n}\n","import React, { useEffect, useId } from 'react';\nimport {\n VizPanelMenu,\n SceneDataProvider,\n VizPanel as VizPanelObject,\n VizPanelState,\n VizConfig,\n DataProviderProxy,\n SceneDataNode,\n} from '@grafana/scenes';\nimport { usePrevious } from 'react-use';\nimport { getPanelOptionsWithDefaults } from '@grafana/data';\nimport { PanelContext } from '@grafana/ui';\nimport { writeSceneLog } from '../utils';\nimport { useSceneContext } from '../hooks/hooks';\nimport { useAddToScene } from '../contexts/SceneContextObject';\n\nexport interface VizPanelProps {\n title: string;\n description?: string;\n subtitle?: string;\n dataProvider?: SceneDataProvider;\n viz: VizConfig;\n displayMode?: 'default' | 'transparent';\n hoverHeader?: boolean;\n hoverHeaderOffset?: number;\n menu?: VizPanelMenu;\n titleItems?: React.ReactNode;\n seriesLimit?: number;\n seriesLimitShowAll?: boolean;\n headerActions?: React.ReactNode;\n extendPanelContext?: (vizPanel: VizPanelObject, context: PanelContext) => void;\n collapsible?: boolean;\n collapsed?: boolean;\n}\n\nexport function VizPanel(props: VizPanelProps) {\n const {\n title,\n description,\n viz,\n dataProvider,\n displayMode,\n hoverHeader,\n hoverHeaderOffset,\n subtitle,\n headerActions,\n menu,\n titleItems,\n extendPanelContext,\n seriesLimit,\n seriesLimitShowAll,\n collapsible,\n collapsed,\n } = props;\n\n const scene = useSceneContext();\n const key = useId();\n const prevProps = usePrevious(props);\n\n let panel = scene.findByKey<VizPanelObject>(key);\n\n if (!panel) {\n panel = new VizPanelObject({\n key: key,\n pluginId: viz.pluginId,\n title: title,\n subtitle: subtitle,\n titleItems: titleItems,\n description: description,\n options: viz.options,\n fieldConfig: viz.fieldConfig,\n pluginVersion: viz.pluginVersion,\n $data: getDataProviderForVizPanel(dataProvider),\n displayMode: displayMode,\n hoverHeader: hoverHeader,\n hoverHeaderOffset: hoverHeaderOffset,\n headerActions: headerActions,\n menu: menu,\n extendPanelContext: extendPanelContext,\n collapsible: collapsible,\n collapsed: collapsed,\n seriesLimit: seriesLimit,\n seriesLimitShowAll: seriesLimitShowAll,\n });\n }\n\n useAddToScene(panel, scene);\n\n // Update options\n useEffect(() => {\n const stateUpdate: Partial<VizPanelState> = {};\n\n if (!prevProps) {\n return;\n }\n\n if (title !== prevProps.title) {\n stateUpdate.title = title;\n }\n\n if (description !== prevProps.description) {\n stateUpdate.description = description;\n }\n\n if (subtitle !== prevProps.subtitle) {\n stateUpdate.subtitle = subtitle;\n }\n\n if (displayMode !== prevProps.displayMode) {\n stateUpdate.displayMode = displayMode;\n }\n\n if (hoverHeader !== prevProps.hoverHeader) {\n stateUpdate.hoverHeader = hoverHeader;\n }\n\n if (hoverHeaderOffset !== prevProps.hoverHeaderOffset) {\n stateUpdate.hoverHeaderOffset = hoverHeaderOffset;\n }\n\n if (menu !== prevProps.menu) {\n stateUpdate.menu = menu;\n }\n\n if (titleItems !== prevProps.titleItems) {\n stateUpdate.titleItems = titleItems;\n }\n\n if (headerActions !== prevProps.headerActions) {\n stateUpdate.headerActions = headerActions;\n }\n\n if (dataProvider !== prevProps.dataProvider) {\n stateUpdate.$data = getDataProviderForVizPanel(dataProvider);\n }\n\n if (seriesLimit !== prevProps.seriesLimit) {\n stateUpdate.seriesLimit = seriesLimit;\n }\n\n if (seriesLimitShowAll !== prevProps.seriesLimitShowAll) {\n stateUpdate.seriesLimitShowAll = seriesLimitShowAll;\n }\n\n if (collapsible !== prevProps.collapsible) {\n stateUpdate.collapsible = collapsible;\n }\n\n if (collapsed !== prevProps.collapsed) {\n stateUpdate.collapsed = collapsed;\n }\n\n if (viz !== prevProps.viz) {\n if (viz.pluginId === prevProps.viz.pluginId) {\n const plugin = panel.getPlugin();\n if (plugin) {\n const optionsWithDefaults = getPanelOptionsWithDefaults({\n plugin,\n currentOptions: viz.options,\n currentFieldConfig: viz.fieldConfig,\n isAfterPluginChange: false,\n });\n stateUpdate.options = optionsWithDefaults.options;\n stateUpdate.fieldConfig = optionsWithDefaults.fieldConfig;\n\n panel.clearFieldConfigCache();\n }\n }\n }\n\n if (Object.keys(stateUpdate).length > 0) {\n panel.setState(stateUpdate);\n writeSceneLog('VizPanel', 'Updating VizPanel state', stateUpdate);\n }\n }, [\n panel,\n title,\n description,\n displayMode,\n hoverHeader,\n hoverHeaderOffset,\n headerActions,\n menu,\n titleItems,\n viz,\n dataProvider,\n seriesLimit,\n seriesLimitShowAll,\n collapsible,\n collapsed,\n prevProps,\n subtitle,\n ]);\n\n return <panel.Component model={panel} />;\n}\n\n/**\n * Since the useQueryRunner attaches query runners to the scene context their parent is already set\n * This proxy is to work around that.\n * TODO: Figure out a better way to handle this'\n */\nfunction getDataProviderForVizPanel(data: SceneDataProvider | undefined): SceneDataProvider | undefined {\n if (data && !(data instanceof SceneDataNode)) {\n return new DataProviderProxy({ source: data.getRef() });\n }\n return data;\n}\n","import React, { useEffect, useId } from 'react';\nimport { useSceneContext } from '../hooks/hooks';\nimport { SceneRefreshPicker, SceneRefreshPickerState } from '@grafana/scenes';\nimport { usePrevious } from 'react-use';\nimport { useAddToScene } from '../contexts/SceneContextObject';\n\nexport interface Props {\n refresh?: string;\n withText?: boolean;\n}\n\nexport function RefreshPicker(props: Props) {\n const scene = useSceneContext();\n const key = useId();\n const prevProps = usePrevious(props);\n\n let picker = scene.findByKey<SceneRefreshPicker>(key);\n\n if (!picker) {\n picker = new SceneRefreshPicker({\n key: key,\n ...props,\n });\n }\n\n useAddToScene(picker, scene);\n\n // Update options\n useEffect(() => {\n const stateUpdate: Partial<SceneRefreshPickerState> = {};\n\n if (!prevProps) {\n return;\n }\n\n if (props.refresh !== prevProps.refresh) {\n stateUpdate.refresh = props.refresh;\n }\n\n if (props.withText !== prevProps.withText) {\n stateUpdate.withText = props.withText;\n }\n\n picker.setState(stateUpdate);\n }, [picker, props, prevProps]);\n\n return <picker.Component model={picker} />;\n}\n","import React from 'react';\nimport { SceneDataLayerProvider, SceneDataLayerSet, sceneGraph, ControlsLabel } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\nimport { useStyles2 } from '@grafana/ui';\nimport { css } from '@emotion/css';\nimport { LoadingState } from '@grafana/data';\n\nexport interface Props {\n name: string;\n}\n\nexport function DataLayerControl({ name }: Props) {\n const scene = useSceneContext();\n const styles = useStyles2(getStyles);\n const layerSets = sceneGraph.getDataLayers(scene);\n\n const layer = getLayer(layerSets, name);\n const isLoading = Boolean(layer && layer.state.data?.state === LoadingState.Loading);\n\n if (!layer) {\n return <div>Annotation {name} not found</div>;\n }\n\n return (\n <div className={styles.container}>\n <ControlsLabel\n htmlFor={`data-layer-${layer.state.key}`}\n isLoading={isLoading}\n onCancel={() => layer.cancelQuery?.()}\n label={layer.state.name}\n description={layer.state.description}\n error={layer.state.data?.errors?.[0].message}\n />\n <layer.Component model={layer} />\n </div>\n );\n}\n\nconst getStyles = () => ({\n container: css({\n display: 'flex',\n }),\n});\n\nfunction getLayer(layers: SceneDataLayerProvider[], name: string): SceneDataLayerProvider | undefined {\n for (let i = 0; i < layers.length; i++) {\n const layer = (layers[i] as SceneDataLayerSet).state.layers.find((layer) => layer.state.name === name);\n\n if (layer) {\n return layer;\n }\n }\n\n return undefined;\n}\n","import React, { useEffect, useState } from 'react';\nimport { CustomVariable as CustomVariableObject } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\nimport { VariableProps } from './types';\n\nexport interface CustomVariableProps extends VariableProps {\n query: string;\n isMulti?: boolean;\n includeAll?: boolean;\n children: React.ReactNode;\n}\n\nexport function CustomVariable({\n query,\n name,\n label,\n hide,\n initialValue,\n isMulti,\n includeAll,\n skipUrlSync,\n allValue,\n children,\n}: CustomVariableProps): React.ReactNode {\n const scene = useSceneContext();\n const [variableAdded, setVariableAdded] = useState<boolean>();\n\n let variable: CustomVariableObject | undefined = scene.findVariable(name);\n\n if (!variable) {\n variable = new CustomVariableObject({\n name,\n label,\n query,\n value: initialValue,\n isMulti,\n includeAll,\n hide,\n skipUrlSync,\n allValue,\n });\n }\n\n useEffect(() => {\n const removeFn = scene.addVariable(variable);\n setVariableAdded(true);\n return removeFn;\n }, [variable, scene, name]);\n\n useEffect(() => {\n variable?.setState({\n label,\n query,\n hide,\n isMulti,\n includeAll,\n skipUrlSync,\n allValue,\n });\n }, [skipUrlSync, allValue, hide, includeAll, isMulti, label, query, variable]);\n\n // Need to block child rendering until the variable is added so that child components like RVariableSelect find the variable\n if (!variableAdded) {\n return null;\n }\n\n return children;\n}\n","import React, { useEffect, useState } from 'react';\nimport {\n AdHocFiltersVariable as AdHocFiltersVariableObject,\n type AdHocFilterWithLabels,\n type ControlsLayout,\n} from '@grafana/scenes';\nimport type { MetricFindValue } from '@grafana/data';\nimport type { DataSourceRef } from '@grafana/schema';\nimport { isEqual } from 'lodash';\n\nimport { useSceneContext } from '../hooks/hooks';\nimport { VariableProps } from './types';\n\nexport interface AdHocFiltersVariableProps extends VariableProps {\n datasource?: DataSourceRef | null;\n filters?: AdHocFilterWithLabels[];\n baseFilters?: AdHocFilterWithLabels[];\n originFilters?: AdHocFilterWithLabels[];\n readOnly?: boolean;\n layout?: ControlsLayout | 'combobox';\n addFilterButtonText?: string;\n tagKeyRegexFilter?: RegExp;\n defaultKeys?: MetricFindValue[];\n filterExpression?: string;\n expressionBuilder?: (filters: AdHocFilterWithLabels[]) => string;\n getTagKeysProvider?: any;\n getTagValuesProvider?: any;\n supportsMultiValueOperators?: boolean;\n useQueriesAsFilterForOptions?: boolean;\n allowCustomValue?: boolean;\n onAddCustomValue?: any;\n collapsible?: boolean;\n drilldownRecommendationsEnabled?: boolean;\n\n /**\n * `applyMode` is only used during variable construction.\n * If you need to change it, remount this component.\n */\n applyMode?: 'auto' | 'manual';\n children: React.ReactNode;\n}\n\nexport function AdHocFiltersVariable({\n name,\n label,\n hide,\n skipUrlSync,\n children,\n datasource = null,\n filters,\n baseFilters,\n originFilters,\n readOnly,\n layout,\n addFilterButtonText,\n tagKeyRegexFilter,\n defaultKeys,\n filterExpression,\n expressionBuilder,\n getTagKeysProvider,\n getTagValuesProvider,\n supportsMultiValueOperators,\n useQueriesAsFilterForOptions,\n allowCustomValue,\n onAddCustomValue,\n collapsible,\n drilldownRecommendationsEnabled,\n applyMode,\n}: AdHocFiltersVariableProps): React.ReactNode {\n const scene = useSceneContext();\n const [variableAdded, setVariableAdded] = useState<boolean>();\n\n let variable: AdHocFiltersVariableObject | undefined = scene.findVariable(name);\n\n if (!variable) {\n variable = new AdHocFiltersVariableObject({\n name,\n label,\n hide,\n skipUrlSync,\n datasource,\n filters: filters ?? [],\n baseFilters,\n originFilters,\n applyMode,\n readOnly,\n layout,\n addFilterButtonText,\n tagKeyRegexFilter,\n defaultKeys,\n filterExpression,\n expressionBuilder,\n getTagKeysProvider,\n getTagValuesProvider,\n supportsMultiValueOperators,\n useQueriesAsFilterForOptions,\n allowCustomValue,\n onAddCustomValue,\n collapsible,\n drilldownRecommendationsEnabled,\n });\n }\n\n useEffect(() => {\n const removeFn = scene.addVariable(variable);\n setVariableAdded(true);\n return removeFn;\n }, [variable, scene, name]);\n\n useEffect(() => {\n if (!variableAdded) {\n return;\n }\n\n if (\n variable.state.name === name &&\n variable.state.label === label &&\n variable.state.hide === hide &&\n variable.state.skipUrlSync === skipUrlSync &&\n isEqual(variable.state.datasource, datasource) &&\n isEqual(variable.state.baseFilters, baseFilters) &&\n (filters === undefined || isEqual(variable.state.filters, filters)) &&\n variable.state.readOnly === readOnly &&\n variable.state.layout === layout &&\n variable.state.addFilterButtonText === addFilterButtonText &&\n isEqual(variable.state.tagKeyRegexFilter, tagKeyRegexFilter) &&\n isEqual(variable.state.defaultKeys, defaultKeys) &&\n variable.state.filterExpression === filterExpression &&\n variable.state.expressionBuilder === expressionBuilder &&\n variable.state.getTagKeysProvider === getTagKeysProvider &&\n variable.state.getTagValuesProvider === getTagValuesProvider &&\n variable.state.supportsMultiValueOperators === supportsMultiValueOperators &&\n variable.state.useQueriesAsFilterForOptions === useQueriesAsFilterForOptions &&\n variable.state.allowCustomValue === allowCustomValue &&\n variable.state.onAddCustomValue === onAddCustomValue &&\n variable.state.collapsible === collapsible &&\n variable.state.drilldownRecommendationsEnabled === drilldownRecommendationsEnabled\n ) {\n return;\n }\n\n variable.setState({\n name,\n label,\n hide,\n skipUrlSync,\n datasource,\n ...(filters !== undefined && { filters }),\n baseFilters,\n readOnly,\n layout,\n addFilterButtonText,\n tagKeyRegexFilter,\n defaultKeys,\n filterExpression,\n expressionBuilder,\n getTagKeysProvider,\n getTagValuesProvider,\n supportsMultiValueOperators,\n useQueriesAsFilterForOptions,\n allowCustomValue,\n onAddCustomValue,\n collapsible,\n drilldownRecommendationsEnabled,\n });\n }, [\n addFilterButtonText,\n allowCustomValue,\n baseFilters,\n filters,\n collapsible,\n datasource,\n defaultKeys,\n drilldownRecommendationsEnabled,\n expressionBuilder,\n getTagKeysProvider,\n getTagValuesProvider,\n hide,\n label,\n layout,\n name,\n onAddCustomValue,\n readOnly,\n filterExpression,\n skipUrlSync,\n supportsMultiValueOperators,\n tagKeyRegexFilter,\n useQueriesAsFilterForOptions,\n variable,\n variableAdded,\n ]);\n\n // Need to block child rendering until the variable is added so that child components can find the variable.\n if (!variableAdded) {\n return null;\n }\n\n return children;\n}\n","import React, { useEffect, useState } from 'react';\nimport { DataSourceVariable as DataSourceVariableObject } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\nimport { VariableRefresh, VariableSort } from '@grafana/schema';\nimport { VariableProps } from './types';\n\nexport interface DataSourceVariableProps extends VariableProps {\n pluginId: string;\n regex?: string;\n refresh?: VariableRefresh;\n sort?: VariableSort;\n isMulti?: boolean;\n includeAll?: boolean;\n children: React.ReactNode;\n}\n\nexport function DataSourceVariable({\n pluginId,\n regex,\n name,\n label,\n hide,\n initialValue,\n isMulti,\n includeAll,\n skipUrlSync,\n allValue,\n children,\n}: DataSourceVariableProps): React.ReactNode {\n const scene = useSceneContext();\n const [variableAdded, setVariableAdded] = useState<boolean>();\n\n let variable: DataSourceVariableObject | undefined = scene.findVariable(name);\n\n if (!variable) {\n variable = new DataSourceVariableObject({\n pluginId,\n regex,\n name,\n label,\n value: initialValue,\n isMulti,\n hide,\n includeAll,\n skipUrlSync,\n allValue,\n });\n }\n\n useEffect(() => {\n const removeFn = scene.addVariable(variable);\n setVariableAdded(true);\n return removeFn;\n }, [variable, scene, name]);\n\n useEffect(() => {\n if (!variableAdded) {\n return;\n }\n\n if (\n variable.state.pluginId === pluginId &&\n variable.state.regex === regex &&\n variable.state.label === label &&\n variable.state.hide === hide &&\n variable.state.includeAll === includeAll &&\n variable.state.skipUrlSync === skipUrlSync &&\n variable.state.allValue === allValue\n ) {\n return;\n }\n\n variable.setState({\n pluginId,\n regex,\n label,\n hide,\n includeAll,\n skipUrlSync,\n allValue,\n });\n\n variable.refreshOptions();\n }, [skipUrlSync, allValue, hide, includeAll, label, pluginId, regex, variable, variableAdded]);\n\n // Need to block child rendering until the variable is added so that child components like RVariableSelect find the variable\n if (!variableAdded) {\n return null;\n }\n\n return children;\n}\n","import React, { useEffect, useState } from 'react';\nimport { QueryVariable as QueryVariableObject, SceneDataQuery } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\nimport { DataSourceRef, VariableRefresh, VariableSort } from '@grafana/schema';\nimport { VariableProps } from './types';\nimport { isEqual } from 'lodash';\n\nexport interface QueryVariableProps extends VariableProps {\n query: string | SceneDataQuery;\n datasource: DataSourceRef | null;\n regex?: string;\n refresh?: VariableRefresh;\n sort?: VariableSort;\n isMulti?: boolean;\n includeAll?: boolean;\n children: React.ReactNode;\n}\n\nexport function QueryVariable({\n query,\n name,\n datasource,\n label,\n hide,\n regex,\n refresh,\n sort,\n initialValue,\n isMulti,\n includeAll,\n skipUrlSync,\n allValue,\n children,\n}: QueryVariableProps): React.ReactNode {\n const scene = useSceneContext();\n const [variableAdded, setVariableAdded] = useState<boolean>();\n\n let variable: QueryVariableObject | undefined = scene.findVariable(name);\n\n if (!variable) {\n variable = new QueryVariableObject({\n name,\n label,\n query,\n datasource,\n refresh,\n sort,\n regex,\n value: initialValue,\n isMulti,\n hide,\n includeAll,\n skipUrlSync,\n allValue,\n });\n }\n\n useEffect(() => {\n const removeFn = scene.addVariable(variable);\n setVariableAdded(true);\n return removeFn;\n }, [variable, scene, name]);\n\n useEffect(() => {\n if (!variableAdded) {\n return;\n }\n\n if (\n isEqual(variable.state.query, query) &&\n isEqual(variable.state.datasource, datasource) &&\n variable.state.regex === regex &&\n variable.state.label === label &&\n variable.state.hide === hide &&\n variable.state.includeAll === includeAll &&\n variable.state.refresh === refresh &&\n variable.state.sort === sort &&\n variable.state.skipUrlSync === skipUrlSync &&\n variable.state.allValue === allValue\n ) {\n return;\n }\n\n variable.setState({\n label,\n query,\n datasource,\n refresh,\n sort,\n regex,\n hide,\n includeAll,\n skipUrlSync,\n allValue,\n });\n\n variable.refreshOptions();\n }, [\n skipUrlSync,\n allValue,\n datasource,\n hide,\n includeAll,\n label,\n query,\n refresh,\n regex,\n sort,\n variable,\n variableAdded,\n ]);\n\n // Need to block child rendering until the variable is added so that child components like RVariableSelect find the variable\n if (!variableAdded) {\n return null;\n }\n\n return children;\n}\n","import React, { useEffect, useState } from 'react';\nimport { LocalValueVariable as LocalValueVariableObject, type VariableValue } from '@grafana/scenes';\nimport { isEqual } from 'lodash';\n\nimport { useSceneContext } from '../hooks/hooks';\nimport { VariableProps } from './types';\n\nexport interface LocalValueVariableProps extends VariableProps {\n value?: VariableValue;\n text?: VariableValue;\n properties?: Record<string, any>;\n isMulti?: boolean;\n includeAll?: boolean;\n children: React.ReactNode;\n}\n\nexport function LocalValueVariable({\n name,\n label,\n hide,\n skipUrlSync,\n value,\n text,\n properties,\n isMulti,\n includeAll,\n children,\n}: LocalValueVariableProps): React.ReactNode {\n const scene = useSceneContext();\n const [variableAdded, setVariableAdded] = useState<boolean>();\n\n let variable: LocalValueVariableObject | undefined = scene.findVariable(name);\n\n if (!variable) {\n variable = new LocalValueVariableObject({\n name,\n label,\n hide,\n skipUrlSync,\n value,\n text,\n properties,\n isMulti,\n includeAll,\n });\n }\n\n useEffect(() => {\n const removeFn = scene.addVariable(variable);\n setVariableAdded(true);\n return removeFn;\n }, [variable, scene, name]);\n\n useEffect(() => {\n if (!variableAdded) {\n return;\n }\n\n if (\n variable.state.name === name &&\n variable.state.label === label &&\n variable.state.hide === hide &&\n variable.state.skipUrlSync === skipUrlSync &&\n isEqual(variable.state.value, value) &&\n isEqual(variable.state.text, text) &&\n isEqual(variable.state.properties, properties) &&\n variable.state.isMulti === isMulti &&\n variable.state.includeAll === includeAll\n ) {\n return;\n }\n\n variable.setState({\n name,\n label,\n hide,\n skipUrlSync,\n value,\n text,\n properties,\n isMulti,\n includeAll,\n });\n }, [includeAll, hide, isMulti, label, name, properties, skipUrlSync, text, value, variable, variableAdded]);\n\n if (!variableAdded) {\n return null;\n }\n\n return children;\n}\n","import React, { useEffect, useState } from 'react';\nimport { GroupByVariable as GroupByVariableObject, type ControlsLayout, type VariableValue } from '@grafana/scenes';\nimport type { AdHocVariableFilter, MetricFindValue } from '@grafana/data';\nimport type { DataSourceRef } from '@grafana/schema';\nimport { isEqual } from 'lodash';\n\nimport { useSceneContext } from '../hooks/hooks';\nimport { VariableProps } from './types';\n\nexport interface GroupByVariableProps extends VariableProps {\n datasource?: DataSourceRef | null;\n baseFilters?: AdHocVariableFilter[];\n defaultOptions?: MetricFindValue[];\n defaultValue?: { text: VariableValue; value: VariableValue };\n restorable?: boolean;\n readOnly?: boolean;\n layout?: ControlsLayout;\n applyMode?: 'auto' | 'manual';\n tagKeyRegexFilter?: RegExp;\n getTagKeysProvider?: any;\n drilldownRecommendationsEnabled?: boolean;\n /** Allow typing custom values in the selector. Defaults to true in scenes. */\n allowCustomValue?: boolean;\n /** Allow selecting multiple keys. Defaults to true in scenes. */\n isMulti?: boolean;\n /** Include an \"All\" option. */\n includeAll?: boolean;\n /** How many values to show before collapsing to +N. Defaults to 5 in scenes. */\n maxVisibleValues?: number;\n /** When clearing selection, set value to [] instead of keeping previous. Defaults to true in scenes. */\n noValueOnClear?: boolean;\n children: React.ReactNode;\n}\n\nexport function GroupByVariable({\n name,\n label,\n hide,\n skipUrlSync,\n initialValue,\n datasource = null,\n baseFilters,\n defaultOptions,\n defaultValue,\n restorable,\n readOnly,\n layout,\n applyMode,\n tagKeyRegexFilter,\n getTagKeysProvider,\n drilldownRecommendationsEnabled,\n allowCustomValue,\n isMulti,\n includeAll,\n maxVisibleValues,\n noValueOnClear,\n children,\n}: GroupByVariableProps): React.ReactNode {\n const scene = useSceneContext();\n const [variableAdded, setVariableAdded] = useState<boolean>();\n\n let variable: GroupByVariableObject | undefined = scene.findVariable(name);\n\n if (!variable) {\n variable = new GroupByVariableObject({\n name,\n label,\n hide,\n skipUrlSync,\n datasource,\n ...(initialValue !== undefined && {\n value: Array.isArray(initialValue) ? initialValue : [initialValue],\n }),\n baseFilters,\n defaultOptions,\n defaultValue,\n restorable,\n readOnly,\n layout,\n applyMode,\n tagKeyRegexFilter,\n getTagKeysProvider,\n drilldownRecommendationsEnabled,\n allowCustomValue,\n isMulti,\n includeAll,\n maxVisibleValues,\n noValueOnClear,\n });\n }\n\n useEffect(() => {\n const removeFn = scene.addVariable(variable);\n setVariableAdded(true);\n return removeFn;\n }, [variable, scene, name]);\n\n useEffect(() => {\n if (!variableAdded) {\n return;\n }\n\n if (\n variable.state.name === name &&\n variable.state.label === label &&\n variable.state.hide === hide &&\n variable.state.skipUrlSync === skipUrlSync &&\n isEqual(variable.state.datasource, datasource) &&\n isEqual(variable.state.baseFilters, baseFilters) &&\n variable.state.restorable === restorable &&\n variable.state.readOnly === readOnly &&\n variable.state.layout === layout &&\n variable.state.applyMode === applyMode &&\n isEqual(variable.state.tagKeyRegexFilter, tagKeyRegexFilter) &&\n variable.state.getTagKeysProvider === getTagKeysProvider &&\n variable.state.drilldownRecommendationsEnabled === drilldownRecommendationsEnabled &&\n variable.state.allowCustomValue === allowCustomValue &&\n variable.state.isMulti === isMulti &&\n variable.state.includeAll === includeAll &&\n variable.state.maxVisibleValues === maxVisibleValues &&\n variable.state.noValueOnClear === noValueOnClear\n ) {\n return;\n }\n\n variable.setState({\n name,\n label,\n hide,\n skipUrlSync,\n datasource,\n baseFilters,\n restorable,\n readOnly,\n layout,\n applyMode,\n tagKeyRegexFilter,\n getTagKeysProvider,\n drilldownRecommendationsEnabled,\n allowCustomValue,\n isMulti,\n includeAll,\n maxVisibleValues,\n noValueOnClear,\n });\n }, [\n allowCustomValue,\n applyMode,\n baseFilters,\n datasource,\n drilldownRecommendationsEnabled,\n getTagKeysProvider,\n hide,\n includeAll,\n isMulti,\n label,\n layout,\n maxVisibleValues,\n name,\n noValueOnClear,\n readOnly,\n restorable,\n skipUrlSync,\n tagKeyRegexFilter,\n variable,\n variableAdded,\n ]);\n\n if (!variableAdded) {\n return null;\n }\n\n return children;\n}\n","import { NavModelItem, UrlQueryMap, urlUtil } from '@grafana/data';\nimport { locationSearchToObject, locationService } from '@grafana/runtime';\nimport React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { useTimeRange, useVariables } from '../hooks/hooks';\n\n/**\n * Code and concepts copied from https://github.com/grafana/hackathon-2023-12-grafana-react/blob/main/src/grafana-react\n *\n * These contexts & components needs some more thought and naming considerations, just a quick proof of concept for now.\n */\n\ntype BreadcrumbItem = Pick<NavModelItem, 'text' | 'url'>;\n\nexport interface BreadcrumbContextValue {\n breadcrumbs: BreadcrumbItem[];\n addBreadcrumb(breadcrumb: BreadcrumbItem): void;\n removeBreadcrumb(breadcrumb: BreadcrumbItem): void;\n}\n\nexport const BreadcrumbContext = createContext<BreadcrumbContextValue>({\n breadcrumbs: [],\n addBreadcrumb: () => {},\n removeBreadcrumb: () => {},\n});\n\nexport function BreadcrumbProvider({ children }: { children: React.ReactNode }) {\n const [breadcrumbs, setBreadcrumbs] = useState<BreadcrumbItem[]>([]);\n\n return (\n <BreadcrumbContext.Provider\n value={{\n breadcrumbs,\n addBreadcrumb: useCallback((breadcrumb: BreadcrumbItem) => setBreadcrumbs((prev) => [...prev, breadcrumb]), []),\n removeBreadcrumb: useCallback(\n (breadcrumb: BreadcrumbItem) => setBreadcrumbs((prev) => prev.filter((b) => b.url !== breadcrumb.url)),\n []\n ),\n }}\n >\n {children}\n </BreadcrumbContext.Provider>\n );\n}\n\nexport interface BreadcrumbProps {\n text: string;\n path: string;\n extraKeys?: string[];\n}\n\nexport function Breadcrumb({ text, path, extraKeys }: BreadcrumbProps): React.ReactNode {\n const { addBreadcrumb, removeBreadcrumb } = useContext(BreadcrumbContext);\n\n const buildUrl = useUrlBuilder();\n\n useEffect(() => {\n const breadcrumb = {\n text,\n url: buildUrl(path, extraKeys),\n };\n\n addBreadcrumb(breadcrumb);\n\n return () => {\n removeBreadcrumb(breadcrumb);\n };\n }, [text, path, extraKeys, addBreadcrumb, buildUrl, removeBreadcrumb]);\n\n return null;\n}\n\nfunction useUrlBuilder() {\n const queryParams = useQueryParams()[0];\n const variables = useVariables();\n const [_, timeRange] = useTimeRange();\n\n return useCallback(\n (urlBase: string, extraKeys: string[] | undefined) => {\n const params: UrlQueryMap = {};\n\n for (const v of variables) {\n if (v.urlSync && !v.state.skipUrlSync) {\n const state = v.urlSync.getUrlState();\n Object.assign(params, state);\n }\n }\n\n if (timeRange.urlSync) {\n const state = timeRange.urlSync.getUrlState();\n Object.assign(params, state);\n }\n\n if (extraKeys) {\n for (const extra of extraKeys) {\n if (queryParams[extra]) {\n params[extra] = queryParams[extra];\n }\n }\n }\n\n return urlUtil.renderUrl(urlBase, params);\n },\n [variables, queryParams, timeRange]\n );\n}\n\nfunction useQueryParams(): [UrlQueryMap, (values: UrlQueryMap, replace?: boolean) => void] {\n const { search } = useLocation();\n const queryParams = useMemo(() => locationSearchToObject(search || ''), [search]);\n const update = useCallback((values: UrlQueryMap, replace?: boolean) => locationService.partial(values, replace), []);\n return [queryParams, update];\n}\n","import { SceneVariables, VariableValueSingle, sceneGraph } from '@grafana/scenes';\nimport { useSceneContext } from './hooks';\n\nexport function useVariableValues<T = VariableValueSingle>(name: string): [T[] | undefined, boolean] {\n const scene = useSceneContext();\n const variable = sceneGraph.lookupVariable(name, scene);\n\n if (!variable) {\n return [undefined, false];\n }\n\n variable.useState();\n\n const set = variable.parent as SceneVariables;\n const isLoading = set.isVariableLoadingOrWaitingToUpdate(variable);\n let value = variable.getValue();\n\n if (value == null) {\n return [undefined, isLoading];\n }\n\n if (!Array.isArray(value)) {\n value = [value];\n }\n\n return [value as T[], isLoading];\n}\n","import { QueryVariable, SceneDataQuery, sceneGraph } from '@grafana/scenes';\nimport { useSceneContext } from './hooks';\nimport { useEffect } from 'react';\nimport { isEqual } from 'lodash';\n\ninterface QueryVariableOptions {\n name: string;\n datasource: string;\n query: string | SceneDataQuery;\n regex?: string;\n}\n\n/**\n * A custom hook that creates or updates a `QueryVariable` in the scene context.\n *\n * @param {QueryVariableOptions} options - Options for configuring the `QueryVariable`.\n * @returns {QueryVariable | null} The `QueryVariable` instance or `null`.\n *\n * @example\n * // Usage example\n * const variable = useQueryVariable({\n * name: \"myQueryVariable\",\n * datasource: \"gdev-testdata\",\n * query: \"*\",\n * regex: \".*someFilter.*\"\n * });\n *\n * // Returns a QueryVariable instance or null if not a valid QueryVariable\n * if (variable) {\n * console.log(\"Variable added to the scene:\", variable);\n * }\n */\nexport function useQueryVariable(options: QueryVariableOptions): QueryVariable | null {\n const scene = useSceneContext();\n let variable = sceneGraph.lookupVariable(options.name, scene);\n\n if (!variable) {\n variable = new QueryVariable({\n name: options.name,\n datasource: { uid: options.datasource },\n query: options.query,\n regex: options.regex,\n });\n }\n\n if (!(variable instanceof QueryVariable)) {\n variable = null;\n }\n\n useEffect(() => {\n if (variable) {\n scene.addVariable(variable);\n }\n }, [variable, scene]);\n\n useEffect(() => {\n if (\n variable?.state.datasource?.uid !== options.datasource ||\n !isEqual(variable?.state.query, options.query) ||\n variable?.state.regex !== options.regex\n ) {\n variable?.setState({ datasource: { uid: options.datasource }, query: options.query, regex: options.regex });\n variable?.refreshOptions();\n }\n }, [options, variable]);\n\n return variable;\n}\n","import { MultiValueVariable, SceneVariables, VariableValueSingle, sceneGraph } from '@grafana/scenes';\nimport { useSceneContext } from './hooks';\n\nexport function useVariableValue<T = VariableValueSingle>(name: string): [T | undefined, boolean] {\n const scene = useSceneContext();\n const variable = sceneGraph.lookupVariable(name, scene);\n\n if (!variable || (variable instanceof MultiValueVariable && variable.state.isMulti === true)) {\n return [undefined, false];\n }\n\n variable.useState();\n\n const set = variable.parent as SceneVariables;\n const isLoading = set.isVariableLoadingOrWaitingToUpdate(variable);\n let value = variable.getValue();\n\n if (value == null) {\n return [undefined, isLoading];\n }\n\n return [value as T, isLoading];\n}\n","import React, { useEffect, useState } from 'react';\nimport { useSceneContext } from '../hooks/hooks';\nimport { AnnotationQuery } from '@grafana/data';\nimport { SceneDataLayerSet, dataLayers } from '@grafana/scenes';\nimport { SceneContextObject } from '../contexts/SceneContextObject';\nimport { writeSceneLog } from '../utils';\n\nexport interface AnnotationLayerSetProps {\n name: string;\n query: AnnotationQuery;\n children: React.ReactNode;\n}\n\nexport function AnnotationLayer({ name, query, children }: AnnotationLayerSetProps): React.ReactNode {\n const scene = useSceneContext();\n const [annotationAdded, setAnnotationAdded] = useState<boolean>();\n\n let annotation: dataLayers.AnnotationsDataLayer | undefined = findAnnotationLayer(scene, name);\n\n if (!annotation) {\n annotation = new dataLayers.AnnotationsDataLayer({ name, query });\n }\n\n useEffect(() => {\n const removeFn = addAnnotationLayer(scene, annotation);\n setAnnotationAdded(true);\n return removeFn;\n }, [scene, name, annotation]);\n\n useEffect(() => {\n // Handle prop changes\n }, [annotationAdded]);\n\n if (!annotationAdded) {\n return null;\n }\n\n return children;\n}\n\nfunction findAnnotationLayer<T>(scene: SceneContextObject, name: string): T | undefined {\n const annotations = scene.state.$data as SceneDataLayerSet;\n\n if (!annotations) {\n return;\n }\n\n return annotations.state.layers.find((anno) => anno.state.name === name) as T;\n}\n\nfunction addAnnotationLayer(scene: SceneContextObject, layer: dataLayers.AnnotationsDataLayer) {\n let set = scene.state.$data as SceneDataLayerSet;\n\n if (set) {\n set.setState({ layers: [...set.state.layers, layer] });\n } else {\n set = new SceneDataLayerSet({ layers: [layer] });\n scene.setState({ $data: set });\n }\n\n writeSceneLog('SceneContext', `Adding annotation data layer: ${layer.state.name} key: ${layer.state.key}`);\n\n return () => {\n set.setState({ layers: set.state.layers.filter((x) => x !== layer) });\n writeSceneLog('SceneContext', `Removing annotation data layer: ${layer.state.name} key: ${layer.state.key}`);\n };\n}\n","import React from 'react';\nimport { EmbeddedScene, EmbeddedSceneState, SceneComponentProps } from '@grafana/scenes';\nimport { SceneContext } from '../contexts/SceneContextProvider';\nimport { SceneContextObject } from '../contexts/SceneContextObject';\n\nexport class EmbeddedSceneWithContext extends EmbeddedScene {\n public constructor(state: EmbeddedSceneState) {\n super({ ...state, context: new SceneContextObject() });\n }\n\n public static Component = ({ model }: SceneComponentProps<EmbeddedSceneWithContext>) => {\n return (\n <SceneContext.Provider value={model.state.context as SceneContextObject}>\n <EmbeddedScene.Component model={model} />\n </SceneContext.Provider>\n );\n };\n}\n","import { useTheme2 } from '@grafana/ui';\nimport React, { CSSProperties } from 'react';\n\nexport interface Props {\n minWidth?: number;\n minHeight?: number;\n children: React.ReactNode;\n}\n\n/**\n * Simple css grid layout for visualizations\n */\nexport function VizGridLayout({ children, minWidth = 400, minHeight = 320 }: Props) {\n const theme = useTheme2();\n const style: CSSProperties = {\n display: 'grid',\n flexGrow: 1,\n gridTemplateColumns: `repeat(auto-fit, minmax(${minWidth}px, 1fr))`,\n gridAutoRows: `minmax(${minHeight}px, auto)`,\n columnGap: theme.spacing(1),\n rowGap: theme.spacing(1),\n };\n\n return <div style={style}>{children}</div>;\n}\n","import { createContext } from 'react';\nimport type { SceneFlexItem, SceneFlexLayout } from '@grafana/scenes';\n\nexport interface SceneFlexLayoutRegistry {\n layout: SceneFlexLayout;\n register: (id: string, item: SceneFlexItem, order: number) => void;\n unregister: (id: string) => void;\n}\n\nexport const SceneFlexLayoutContext = createContext<SceneFlexLayoutRegistry | null>(null);\n","import React, { useContext, useEffect, useId, useRef } from 'react';\nimport { isEqual } from 'lodash';\nimport { SceneFlexItem as SceneFlexItemObject, SceneReactObject, type SceneFlexItemPlacement } from '@grafana/scenes';\n\nimport { SceneFlexLayoutContext } from './SceneFlexLayoutContext';\n\nexport interface SceneFlexItemProps extends SceneFlexItemPlacement {\n children: React.ReactNode;\n}\n\nexport function SceneFlexItem(props: SceneFlexItemProps) {\n const ctx = useContext(SceneFlexLayoutContext);\n const key = useId();\n\n const { children } = props;\n const { wrap, direction, width, height, minWidth, minHeight, maxWidth, maxHeight, xSizing, ySizing, isHidden, md } =\n props;\n const order = (props as SceneFlexItemProps & { __order?: number }).__order ?? 0;\n\n if (!ctx) {\n throw new Error('SceneFlexItem must be a child of SceneFlexLayout');\n }\n\n const itemRef = useRef<SceneFlexItemObject>();\n\n if (!itemRef.current) {\n itemRef.current = new SceneFlexItemObject({\n key,\n body: new SceneReactObject({ reactNode: children }),\n wrap,\n direction,\n width,\n height,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n xSizing,\n ySizing,\n isHidden,\n md,\n });\n }\n\n const item = itemRef.current;\n\n // Register/unregister with parent layout\n const mountedRef = useRef(false);\n\n useEffect(() => {\n ctx.register(key, item, order);\n mountedRef.current = true;\n\n return () => {\n mountedRef.current = false;\n ctx.unregister(key);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ctx, item, key]);\n\n // Keep ordering up to date when parent changes React order.\n useEffect(() => {\n if (!mountedRef.current) {\n return;\n }\n\n ctx.register(key, item, order);\n }, [ctx, item, key, order]);\n\n // Sync placement props\n useEffect(() => {\n const nextPlacement: SceneFlexItemPlacement = {\n wrap,\n direction,\n width,\n height,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n xSizing,\n ySizing,\n isHidden,\n md,\n };\n\n if (\n item.state.wrap === nextPlacement.wrap &&\n item.state.direction === nextPlacement.direction &&\n item.state.width === nextPlacement.width &&\n item.state.height === nextPlacement.height &&\n item.state.minWidth === nextPlacement.minWidth &&\n item.state.minHeight === nextPlacement.minHeight &&\n item.state.maxWidth === nextPlacement.maxWidth &&\n item.state.maxHeight === nextPlacement.maxHeight &&\n item.state.xSizing === nextPlacement.xSizing &&\n item.state.ySizing === nextPlacement.ySizing &&\n item.state.isHidden === nextPlacement.isHidden &&\n isEqual(item.state.md, nextPlacement.md)\n ) {\n return;\n }\n\n item.setState(nextPlacement);\n }, [item, direction, height, isHidden, maxHeight, maxWidth, md, minHeight, minWidth, width, wrap, xSizing, ySizing]);\n\n // Sync item body (React node)\n const body = item.state.body as SceneReactObject | undefined;\n\n useEffect(() => {\n if (!body) {\n return;\n }\n\n if (body.state.reactNode === children) {\n return;\n }\n\n body.setState({ reactNode: children });\n }, [body, children]);\n\n // Rendering happens via SceneFlexLayout's renderer.\n return null;\n}\n","import React, { useCallback, useEffect, useId, useMemo, useRef } from 'react';\nimport { isEqual } from 'lodash';\nimport {\n SceneFlexItem as SceneFlexItemObject,\n SceneFlexLayout as SceneFlexLayoutObject,\n type SceneFlexItemPlacement,\n} from '@grafana/scenes';\n\nimport { useSceneContext } from '../hooks/hooks';\nimport { SceneFlexItem, type SceneFlexItemProps } from './SceneFlexItem';\nimport { SceneFlexLayoutContext } from './SceneFlexLayoutContext';\nimport { useAddToScene } from '../contexts/SceneContextObject';\n\nexport interface SceneFlexLayoutProps extends SceneFlexItemPlacement {\n children: React.ReactNode;\n}\n\ntype RegistryEntry = { item: SceneFlexItemObject; order: number };\n\nexport function SceneFlexLayout(props: SceneFlexLayoutProps) {\n const scene = useSceneContext();\n const key = useId();\n const { wrap, direction, width, height, minWidth, minHeight, maxWidth, maxHeight, xSizing, ySizing, isHidden, md } =\n props;\n\n let layout = scene.findByKey<SceneFlexLayoutObject>(key);\n\n if (!layout) {\n layout = new SceneFlexLayoutObject({\n key,\n children: [],\n wrap,\n direction,\n width,\n height,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n xSizing,\n ySizing,\n isHidden,\n md,\n });\n }\n\n useAddToScene(layout, scene);\n\n // Keep layout placement props in sync (but do not touch children here).\n useEffect(() => {\n const nextPlacement: SceneFlexItemPlacement = {\n wrap,\n direction,\n width,\n height,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n xSizing,\n ySizing,\n isHidden,\n md,\n };\n\n if (\n layout.state.wrap === nextPlacement.wrap &&\n layout.state.direction === nextPlacement.direction &&\n layout.state.width === nextPlacement.width &&\n layout.state.height === nextPlacement.height &&\n layout.state.minWidth === nextPlacement.minWidth &&\n layout.state.minHeight === nextPlacement.minHeight &&\n layout.state.maxWidth === nextPlacement.maxWidth &&\n layout.state.maxHeight === nextPlacement.maxHeight &&\n layout.state.xSizing === nextPlacement.xSizing &&\n layout.state.ySizing === nextPlacement.ySizing &&\n layout.state.isHidden === nextPlacement.isHidden &&\n isEqual(layout.state.md, nextPlacement.md)\n ) {\n return;\n }\n\n layout.setState(nextPlacement);\n }, [\n layout,\n direction,\n height,\n isHidden,\n maxHeight,\n maxWidth,\n md,\n minHeight,\n minWidth,\n width,\n wrap,\n xSizing,\n ySizing,\n ]);\n\n const registryRef = useRef<Map<string, RegistryEntry>>(new Map());\n\n const updateLayoutChildren = useCallback(() => {\n const entries = Array.from(registryRef.current.values()).sort((a, b) => {\n if (a.order !== b.order) {\n return a.order - b.order;\n }\n // `key` is guaranteed at runtime, but typed optional in `SceneObjectState`.\n return (a.item.state.key ?? '').localeCompare(b.item.state.key ?? '');\n });\n\n const nextChildren = entries.map((e) => e.item);\n const currentChildren = layout.state.children;\n\n if (\n currentChildren.length === nextChildren.length &&\n currentChildren.every((child, idx) => child === nextChildren[idx])\n ) {\n return;\n }\n\n layout.setState({ children: nextChildren });\n }, [layout]);\n\n const register = useCallback(\n (id: string, item: SceneFlexItemObject, order: number) => {\n registryRef.current.set(id, { item, order });\n updateLayoutChildren();\n },\n [updateLayoutChildren]\n );\n\n const unregister = useCallback(\n (id: string) => {\n registryRef.current.delete(id);\n updateLayoutChildren();\n },\n [updateLayoutChildren]\n );\n\n const ctxValue = useMemo(() => {\n return { layout, register, unregister };\n }, [layout, register, unregister]);\n\n const flexItemChildren = useMemo(() => {\n const items = collectFlexItemElements(props.children);\n return items.map((el, idx) => {\n // Ensure stable keys for React list rendering (also avoids warnings when consumers omit keys).\n const key = el.key ?? `__scene_flex_item_${idx}`;\n return React.cloneElement(el, { key, __order: idx } as any);\n });\n }, [props.children]);\n\n return (\n <SceneFlexLayoutContext.Provider value={ctxValue}>\n <layout.Component model={layout} />\n {flexItemChildren}\n </SceneFlexLayoutContext.Provider>\n );\n}\n\nfunction collectFlexItemElements(children: React.ReactNode): Array<React.ReactElement<SceneFlexItemProps>> {\n const result: Array<React.ReactElement<SceneFlexItemProps>> = [];\n\n React.Children.forEach(children, (child) => {\n if (!child) {\n return;\n }\n\n if (React.isValidElement(child) && child.type === React.Fragment) {\n result.push(...collectFlexItemElements(child.props.children));\n return;\n }\n\n if (React.isValidElement(child) && child.type === SceneFlexItem) {\n result.push(child as React.ReactElement<SceneFlexItemProps>);\n return;\n }\n });\n\n return result;\n}\n"],"names":["SceneObjectBase","NewSceneObjectAddedEvent","SceneVariableSet","useEffect","createContext","useContext","useState","behaviors","SceneTimeRange","childContext","React","UrlSyncContextProvider","sceneGraph","Subscription","SceneVariableValueChangedEvent","useCallback","LRUCache","isPlainObject","useId","SceneQueryRunner","isEqual","SceneDataTransformer","DataProviderProxy","TimeRangePickerUI","VariableValueSelectWrapper","usePrevious","VizPanelObject","getPanelOptionsWithDefaults","SceneDataNode","SceneRefreshPicker","useStyles2","LoadingState","ControlsLabel","_a","css","layer","CustomVariableObject","AdHocFiltersVariableObject","DataSourceVariableObject","QueryVariableObject","LocalValueVariableObject","GroupByVariableObject","urlUtil","useLocation","useMemo","locationSearchToObject","locationService","QueryVariable","MultiValueVariable","dataLayers","SceneDataLayerSet","EmbeddedScene","useTheme2","useRef","SceneFlexItemObject","SceneReactObject","SceneFlexLayoutObject","key"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grafana/scenes-react",
3
- "version": "8.9.6--canary.1567.28860887668.0",
3
+ "version": "8.10.0",
4
4
  "description": "Grafana framework for building dynamic dashboards",
5
5
  "author": "Grafana Labs",
6
6
  "license": "Apache-2.0",
@@ -48,7 +48,7 @@
48
48
  "dependencies": {
49
49
  "@emotion/css": "^11.13.5",
50
50
  "@emotion/react": "^11.14.0",
51
- "@grafana/scenes": "8.9.6--canary.1567.28860887668.0",
51
+ "@grafana/scenes": "8.10.0",
52
52
  "lodash": "^4.17.21",
53
53
  "lru-cache": "^10.2.2",
54
54
  "react-use": "^17.4.0"
@@ -90,5 +90,5 @@
90
90
  "prettier --write"
91
91
  ]
92
92
  },
93
- "gitHead": "e296875afc80c353a4fbf06e9c9ee07e74a2db71"
93
+ "gitHead": "5830b435631a52d39528c8ebf089a89a2ed2f868"
94
94
  }