@grafana/scenes 0.7.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/core/types.ts","../src/core/events.ts","../src/core/SceneComponentWrapper.tsx","../src/core/utils.ts","../src/core/SceneObjectBase.tsx","../src/core/SceneDataNode.ts","../src/services/SceneObjectUrlSyncConfig.ts","../src/core/SceneTimeRange.tsx","../src/variables/interpolation/defaults.ts","../src/variables/types.ts","../src/variables/interpolation/fieldAccessorCache.ts","../src/variables/interpolation/ScopedVarsVariable.ts","../src/variables/constants.ts","../src/variables/interpolation/formatRegistry.ts","../src/variables/lookupVariable.ts","../src/variables/macros/types.ts","../src/variables/macros/UrlTimeRangeMacro.ts","../src/variables/macros/AllVariablesMacro.ts","../src/variables/macros/templateProxies.ts","../src/variables/macros/dataMacros.ts","../src/variables/macros/index.ts","../src/variables/interpolation/sceneInterpolator.ts","../src/core/sceneGraph.ts","../src/core/SceneTimeZoneOverride.tsx","../src/utils/getDataSource.ts","../src/variables/VariableDependencyConfig.ts","../src/utils/writeSceneLog.ts","../src/variables/utils.ts","../src/variables/VariableValueRecorder.ts","../src/querying/SceneQueryRunner.ts","../src/querying/SceneDataTransformer.ts","../src/variables/components/VariableValueSelectors.tsx","../src/variables/sets/SceneVariableSet.ts","../src/variables/variants/ConstantVariable.ts","../src/variables/components/VariableValueSelect.tsx","../src/variables/variants/MultiValueVariable.ts","../src/variables/variants/CustomVariable.tsx","../src/variables/variants/DataSourceVariable.tsx","../src/variables/variants/query/guards.ts","../src/variables/variants/query/createQueryVariableRunner.ts","../src/variables/variants/query/utils.ts","../src/variables/variants/query/toMetricFindValues.ts","../src/variables/variants/query/QueryVariable.tsx","../src/utils/metricTree.ts","../src/variables/variants/TestVariable.tsx","../src/variables/components/VariableValueInput.tsx","../src/variables/variants/TextBoxVariable.tsx","../src/services/UrlSyncManager.ts","../src/components/EmbeddedScene.tsx","../src/components/VizPanel/VizPanelRenderer.tsx","../src/components/VizPanel/seriesVisibilityConfigFactory.ts","../src/components/VizPanel/colorSeriesConfigFactory.ts","../src/components/VizPanel/registerRuntimePanelPlugin.ts","../src/components/VizPanel/VizPanel.tsx","../src/components/VizPanel/VizPanelMenu.tsx","../src/components/NestedScene.tsx","../src/components/SceneCanvasText.tsx","../src/components/SceneToolbarButton.tsx","../src/components/SceneTimePicker.tsx","../src/components/SceneRefreshPicker.tsx","../src/components/SceneByFrameRepeater.tsx","../src/components/SceneControlsSpacer.tsx","../src/components/layout/SceneFlexLayout.tsx","../src/components/layout/grid/constants.ts","../src/components/layout/grid/LazyLoader.tsx","../src/components/layout/grid/SceneGridLayoutRenderer.tsx","../src/components/SceneDragHandle.tsx","../src/components/layout/grid/SceneGridRow.tsx","../src/components/layout/grid/SceneGridLayout.tsx","../src/components/SceneApp/utils.ts","../src/components/SceneApp/SceneApp.tsx","../src/components/SceneReactObject.tsx","../src/components/SceneApp/SceneAppPageView.tsx","../src/components/SceneApp/SceneAppPage.tsx"],"sourcesContent":["import React from 'react';\nimport { MonoTypeOperatorFunction, Unsubscribable } from 'rxjs';\n\nimport {\n BusEvent,\n BusEventHandler,\n BusEventType,\n DataFrame,\n DataTransformContext,\n PanelData,\n TimeRange,\n} from '@grafana/data';\nimport { TimeZone } from '@grafana/schema';\n\nimport { SceneVariableDependencyConfigLike, SceneVariables } from '../variables/types';\n\nexport interface SceneObjectState {\n key?: string;\n $timeRange?: SceneTimeRangeLike;\n $data?: SceneDataProvider;\n $variables?: SceneVariables;\n /**\n * @experimental\n * Can be used to add extra behaviors to a scene object.\n * These are activated when the their parent scene object is activated.\n */\n $behaviors?: Array<SceneObject | SceneStatelessBehavior>;\n}\n\nexport interface SceneLayoutChildOptions {\n width?: number | string;\n height?: number | string;\n xSizing?: 'fill' | 'content';\n ySizing?: 'fill' | 'content';\n x?: number;\n y?: number;\n minWidth?: number | string;\n minHeight?: number | string;\n isDraggable?: boolean;\n isResizable?: boolean;\n}\n\nexport interface SceneComponentProps<T> {\n model: T;\n}\n\nexport type SceneComponent<TModel> = (props: SceneComponentProps<TModel>) => React.ReactElement | null;\n\nexport interface SceneDataState extends SceneObjectState {\n data?: PanelData;\n}\n\nexport interface SceneObject<TState extends SceneObjectState = SceneObjectState> {\n /** The current state */\n readonly state: TState;\n\n /** True when there is a React component mounted for this Object */\n readonly isActive: boolean;\n\n /** SceneObject parent */\n readonly parent?: SceneObject;\n\n /** This abtractions declares what variables the scene object depends on and how to handle when they change value. **/\n readonly variableDependency?: SceneVariableDependencyConfigLike;\n\n /** This abstraction declares URL sync dependencies of a scene object. **/\n readonly urlSync?: SceneObjectUrlSyncHandler;\n\n /** Subscribe to state changes */\n subscribeToState(handler: SceneStateChangedHandler<TState>): Unsubscribable;\n\n /** Subscribe to a scene event */\n subscribeToEvent<T extends BusEvent>(typeFilter: BusEventType<T>, handler: BusEventHandler<T>): Unsubscribable;\n\n /** Publish an event and optionally bubble it up the scene */\n publishEvent(event: BusEvent, bubble?: boolean): void;\n\n /** Utility hook that wraps useObservable. Used by React components to subscribes to state changes */\n useState(): TState;\n\n /** How to modify state */\n setState(state: Partial<TState>): void;\n\n /**\n * Called when the Component is mounted. This will also activate any $data, $variables or $timeRange scene object on this level.\n * Don't override this in your custom SceneObjects, instead use addActivationHandler from the constructor.\n **/\n activate(): CancelActivationHandler;\n\n /** Get the scene root */\n getRoot(): SceneObject;\n\n /** Returns a deep clone this object and all its children */\n clone(state?: Partial<TState>): this;\n\n /** A React component to use for rendering the object */\n Component(props: SceneComponentProps<SceneObject<TState>>): React.ReactElement | null;\n\n /** Force a re-render, should only be needed when variable values change */\n forceRender(): void;\n\n /**\n * Allows external code to register code that is executed on activate and deactivate. This allow you\n * to wire up scene objects that need to respond to state changes in other objects from the outside.\n **/\n addActivationHandler(handler: SceneActivationHandler): void;\n\n /**\n * Loop through state and call callback for each direct child scene object.\n * Checks 1 level deep properties and arrays. So a scene object hidden in a nested plain object will not be detected.\n */\n forEachChild(callback: (child: SceneObject) => void): void;\n}\n\nexport type SceneActivationHandler = () => SceneDeactivationHandler | void;\nexport type SceneDeactivationHandler = () => void;\n\n/**\n * Function returned by activate() that when called will deactivate the object if it's the last activator\n **/\nexport type CancelActivationHandler = () => void;\n\nexport interface SceneLayoutState extends SceneObjectState {\n children: SceneObject[];\n}\n\nexport interface SceneLayout<T extends SceneLayoutState = SceneLayoutState> extends SceneObject<T> {\n isDraggable(): boolean;\n getDragClass?(): string;\n getDragClassCancel?(): string;\n}\n\nexport interface SceneTimeRangeState extends SceneObjectState {\n from: string;\n to: string;\n fiscalYearStartMonth?: number;\n value: TimeRange;\n timeZone?: TimeZone;\n}\n\nexport interface SceneTimeRangeLike extends SceneObject<SceneTimeRangeState> {\n onTimeZoneChange(timeZone: TimeZone): void;\n onTimeRangeChange(timeRange: TimeRange): void;\n onRefresh(): void;\n getTimeZone(): TimeZone;\n}\n\nexport interface SceneObjectRef {\n ref: SceneObject;\n}\n\nexport function isSceneObject(obj: any): obj is SceneObject {\n return obj.useState !== undefined;\n}\n\nexport interface SceneObjectWithUrlSync extends SceneObject {\n getUrlState(): SceneObjectUrlValues;\n updateFromUrl(values: SceneObjectUrlValues): void;\n}\n\nexport interface SceneObjectUrlSyncHandler {\n getKeys(): string[];\n getUrlState(): SceneObjectUrlValues;\n updateFromUrl(values: SceneObjectUrlValues): void;\n}\n\nexport type SceneObjectUrlValue = string | string[] | undefined | null;\nexport type SceneObjectUrlValues = Record<string, SceneObjectUrlValue>;\n\nexport type CustomTransformOperator = (context: DataTransformContext) => MonoTypeOperatorFunction<DataFrame[]>;\nexport type SceneStateChangedHandler<TState> = (newState: TState, prevState: TState) => void;\n\nexport type DeepPartial<T> = {\n [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];\n};\n\nexport interface SceneDataProvider extends SceneObject<SceneDataState> {\n setContainerWidth?: (width: number) => void;\n}\n\nexport type SceneStatelessBehavior = (sceneObject: SceneObject) => CancelActivationHandler | void;\n","import { BusEventWithPayload } from '@grafana/data';\n\nimport { SceneObject, SceneObjectState } from './types';\n\nexport interface SceneObjectStateChangedPayload<TState extends SceneObjectState = SceneObjectState> {\n prevState: TState;\n newState: TState;\n partialUpdate: Partial<TState>;\n changedObject: SceneObject<TState>;\n}\n\nexport class SceneObjectStateChangedEvent extends BusEventWithPayload<SceneObjectStateChangedPayload> {\n public static readonly type = 'scene-object-state-change';\n}\n","import React, { useEffect } from 'react';\n\nimport { SceneComponentProps, SceneObject } from './types';\n\nfunction SceneComponentWrapperWithoutMemo<T extends SceneObject>({ model, ...otherProps }: SceneComponentProps<T>) {\n const Component = (model as any).constructor['Component'] ?? EmptyRenderer;\n const [activated, setActivated] = React.useState(false);\n\n useEffect(() => {\n setActivated(true);\n return model.activate();\n }, [model]);\n\n // By not rendering the component until the model is actiavted we make sure that parent models get activated before child models\n // Otherwise child models would be activated before parents as that is the order of React mount effects.\n // This also enables static logic to happen inside activate that can change state before the first render.\n if (!activated) {\n return null;\n }\n\n return <Component {...otherProps} model={model} />;\n}\n\nexport const SceneComponentWrapper = React.memo(SceneComponentWrapperWithoutMemo);\n\nfunction EmptyRenderer<T>(_: SceneComponentProps<T>): React.ReactElement | null {\n return null;\n}\n","import { SceneObject, SceneObjectState } from './types';\n\nimport { SceneObjectBase } from './SceneObjectBase';\n\n/**\n * Will create new SceneItem with shalled cloned state, but all states items of type SceneObject are deep cloned\n */\nexport function cloneSceneObject<T extends SceneObjectBase<TState>, TState extends SceneObjectState>(\n sceneObject: SceneObjectBase<TState>,\n withState?: Partial<TState>\n): T {\n const clonedState = { ...sceneObject.state };\n\n // Clone any SceneItems in state\n for (const key in clonedState) {\n const propValue = clonedState[key];\n if (propValue instanceof SceneObjectBase) {\n clonedState[key] = propValue.clone();\n }\n\n // Clone scene objects in arrays\n if (Array.isArray(propValue)) {\n const newArray: any = [];\n for (const child of propValue) {\n if (child instanceof SceneObjectBase) {\n newArray.push(child.clone());\n } else {\n newArray.push(child);\n }\n }\n clonedState[key] = newArray;\n }\n }\n\n Object.assign(clonedState, withState);\n\n return new (sceneObject.constructor as any)(clonedState);\n}\n\n/** Walks up the scene graph, returning the first non-undefined result of `extract` */\nexport function getClosest<T>(sceneObject: SceneObject, extract: (s: SceneObject) => T | undefined): T | undefined {\n let curSceneObject: SceneObject | undefined = sceneObject;\n let extracted: T | undefined = undefined;\n\n while (curSceneObject && !extracted) {\n extracted = extract(curSceneObject);\n curSceneObject = curSceneObject.parent;\n }\n\n return extracted;\n}\n","import { useEffect, useState } from 'react';\nimport { Subscription, Unsubscribable } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { BusEvent, BusEventHandler, BusEventType, EventBusSrv } from '@grafana/data';\nimport {\n SceneObject,\n SceneComponent,\n SceneObjectUrlSyncHandler,\n SceneStateChangedHandler,\n SceneActivationHandler,\n SceneDeactivationHandler,\n CancelActivationHandler,\n SceneObjectState,\n} from './types';\n\nimport { SceneComponentWrapper } from './SceneComponentWrapper';\nimport { SceneObjectStateChangedEvent } from './events';\nimport { cloneSceneObject } from './utils';\nimport { SceneVariableDependencyConfigLike } from '../variables/types';\n\nexport abstract class SceneObjectBase<TState extends SceneObjectState = SceneObjectState>\n implements SceneObject<TState>\n{\n private _isActive = false;\n private _state: TState;\n private _events = new EventBusSrv();\n private _activationHandlers: SceneActivationHandler[] = [];\n private _deactivationHandlers: SceneDeactivationHandler[] = [];\n\n protected _parent?: SceneObject;\n protected _subs = new Subscription();\n protected _refCount = 0;\n\n protected _variableDependency: SceneVariableDependencyConfigLike | undefined;\n protected _urlSync: SceneObjectUrlSyncHandler | undefined;\n\n public constructor(state: TState) {\n if (!state.key) {\n state.key = uuidv4();\n }\n\n this._state = Object.freeze(state);\n this._setParent();\n }\n\n /** Current state */\n public get state(): TState {\n return this._state;\n }\n\n /** True if currently being active (ie displayed for visual objects) */\n public get isActive(): boolean {\n return this._isActive;\n }\n\n /** Returns the parent, undefined for root object */\n public get parent(): SceneObject | undefined {\n return this._parent;\n }\n\n /** Returns variable dependency config */\n public get variableDependency(): SceneVariableDependencyConfigLike | undefined {\n return this._variableDependency;\n }\n\n /** Returns url sync config */\n public get urlSync(): SceneObjectUrlSyncHandler | undefined {\n return this._urlSync;\n }\n\n /**\n * Used in render functions when rendering a SceneObject.\n * Wraps the component in an EditWrapper that handles edit mode\n */\n public get Component(): SceneComponent<this> {\n return SceneComponentWrapper;\n }\n\n private _setParent() {\n this.forEachChild((child) => {\n child._parent = this;\n });\n }\n\n /**\n * Subscribe to the scene state subject\n **/\n public subscribeToState(handler: SceneStateChangedHandler<TState>): Unsubscribable {\n return this._events.subscribe(SceneObjectStateChangedEvent, (event) => {\n if (event.payload.changedObject === this) {\n handler(event.payload.newState as TState, event.payload.prevState as TState);\n }\n });\n }\n\n /**\n * Subscribe to the scene event\n **/\n public subscribeToEvent<T extends BusEvent>(eventType: BusEventType<T>, handler: BusEventHandler<T>): Unsubscribable {\n return this._events.subscribe(eventType, handler);\n }\n\n public setState(update: Partial<TState>) {\n const prevState = this._state;\n const newState: TState = {\n ...this._state,\n ...update,\n };\n\n this._state = Object.freeze(newState);\n\n this._setParent();\n\n // Bubble state change event. This is event is subscribed to by UrlSyncManager and UndoManager\n this.publishEvent(\n new SceneObjectStateChangedEvent({\n prevState,\n newState,\n partialUpdate: update,\n changedObject: this,\n }),\n true\n );\n }\n /*\n * Publish an event and optionally bubble it up the scene\n **/\n public publishEvent(event: BusEvent, bubble?: boolean) {\n this._events.publish(event);\n\n if (bubble && this.parent) {\n this.parent.publishEvent(event, bubble);\n }\n }\n\n public getRoot(): SceneObject {\n return !this._parent ? this : this._parent.getRoot();\n }\n\n private _internalActivate() {\n this._isActive = true;\n\n const { $data, $variables, $timeRange, $behaviors } = this.state;\n\n if ($timeRange && !$timeRange.isActive) {\n this._deactivationHandlers.push($timeRange.activate());\n }\n\n if ($variables && !$variables.isActive) {\n this._deactivationHandlers.push($variables.activate());\n }\n\n if ($data && !$data.isActive) {\n this._deactivationHandlers.push($data.activate());\n }\n\n if ($behaviors) {\n for (const behavior of $behaviors) {\n if (behavior instanceof SceneObjectBase) {\n this._deactivationHandlers.push(behavior.activate());\n } else if (typeof behavior === 'function') {\n const deactivationHandler = behavior(this);\n if (deactivationHandler) {\n this._deactivationHandlers.push();\n }\n }\n }\n }\n\n this._activationHandlers.forEach((handler) => {\n const result = handler();\n if (result) {\n this._deactivationHandlers.push(result);\n }\n });\n }\n\n /**\n * This is primarily called from SceneComponentWrapper when the SceneObject's Component is mounted.\n * But in some scenarios this can also be called directly from another scene object. When called manually from another scene object\n * make sure to call the returned function when the source scene object is deactivated.\n */\n public activate(): CancelActivationHandler {\n if (!this.isActive) {\n this._internalActivate();\n }\n\n this._refCount++;\n\n let called = false;\n\n return () => {\n this._refCount--;\n\n if (called) {\n const msg = `SceneObject cancelation handler returned by activate() called a second time`;\n console.error(msg, this);\n throw new Error(msg);\n }\n\n called = true;\n\n if (this._refCount === 0) {\n this._internalDeactivate();\n }\n };\n }\n\n /**\n * Called by the SceneComponentWrapper when the react component is unmounted.\n * Don't override this, instead use addActivationHandler. The activation handler can return a deactivation handler.\n */\n private _internalDeactivate(): void {\n this._isActive = false;\n\n this._deactivationHandlers.forEach((handler) => handler());\n this._deactivationHandlers = [];\n\n // Clear subscriptions and listeners\n this._events.removeAllListeners();\n this._subs.unsubscribe();\n this._subs = new Subscription();\n }\n\n /**\n * Utility hook to get and subscribe to state\n */\n public useState() {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useSceneObjectState(this);\n }\n\n /** Force a re-render, should only be needed when variable values change */\n public forceRender(): void {\n this.setState({});\n }\n\n /**\n * Will create new SceneObject with shallow-cloned state, but all state items of type SceneObject are deep cloned\n */\n public clone(withState?: Partial<TState>): this {\n return cloneSceneObject(this, withState);\n }\n\n /**\n * Allows external code to register code that is executed on activate and deactivate. This allow you\n * to wire up scene objects that need to respond to state changes in other objects from the outside.\n **/\n public addActivationHandler(handler: SceneActivationHandler) {\n this._activationHandlers.push(handler);\n }\n\n /**\n * Loop through state and call callback for each direct child scene object.\n * Checks 1 level deep properties and arrays. So a scene object hidden in a nested plain object will not be detected.\n */\n public forEachChild(callback: (child: SceneObjectBase) => void) {\n for (const propValue of Object.values(this.state)) {\n if (propValue instanceof SceneObjectBase) {\n callback(propValue);\n }\n\n if (Array.isArray(propValue)) {\n for (const child of propValue) {\n if (child instanceof SceneObjectBase) {\n callback(child);\n }\n }\n }\n }\n }\n}\n\n/**\n * This hook is always returning model.state instead of a useState that remembers the last state emitted on the subject\n * The reason for this is so that if the model instance change this function will always return the latest state.\n */\nfunction useSceneObjectState<TState extends SceneObjectState>(model: SceneObjectBase<TState>): TState {\n const [_, setState] = useState<TState>(model.state);\n const stateAtFirstRender = model.state;\n\n useEffect(() => {\n const s = model.subscribeToState(setState);\n\n // Re-render component if the state changed between first render and useEffect (mount)\n if (model.state !== stateAtFirstRender) {\n setState(model.state);\n }\n\n return () => s.unsubscribe();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [model]);\n\n return model.state;\n}\n","import { getDefaultTimeRange, PanelData } from '@grafana/data';\nimport { LoadingState } from '@grafana/schema';\n\nimport { SceneObjectBase } from './SceneObjectBase';\nimport { SceneDataProvider, SceneDataState } from './types';\n\nexport interface SceneDataNodeState extends SceneDataState {\n data: PanelData;\n}\n\nexport class SceneDataNode extends SceneObjectBase<SceneDataNodeState> implements SceneDataProvider {\n public constructor(state?: Partial<SceneDataNodeState>) {\n super({\n data: emptyPanelData,\n ...state,\n });\n }\n}\n\nexport const emptyPanelData = {\n state: LoadingState.Done,\n series: [],\n timeRange: getDefaultTimeRange(),\n};\n","import { SceneObjectUrlSyncHandler, SceneObjectWithUrlSync, SceneObjectUrlValues } from '../core/types';\n\ninterface SceneObjectUrlSyncConfigOptions {\n keys: string[];\n}\n\nexport class SceneObjectUrlSyncConfig implements SceneObjectUrlSyncHandler {\n private _keys: string[];\n\n public constructor(private _sceneObject: SceneObjectWithUrlSync, _options: SceneObjectUrlSyncConfigOptions) {\n this._keys = _options.keys;\n }\n\n public getKeys(): string[] {\n return this._keys;\n }\n\n public getUrlState(): SceneObjectUrlValues {\n return this._sceneObject.getUrlState();\n }\n\n public updateFromUrl(values: SceneObjectUrlValues): void {\n this._sceneObject.updateFromUrl(values);\n }\n}\n","import { dateMath, getTimeZone, TimeRange, toUtc } from '@grafana/data';\nimport { TimeZone } from '@grafana/schema';\n\nimport { SceneObjectUrlSyncConfig } from '../services/SceneObjectUrlSyncConfig';\n\nimport { SceneObjectBase } from './SceneObjectBase';\nimport { SceneTimeRangeLike, SceneTimeRangeState, SceneObjectUrlValues, SceneObjectUrlValue } from './types';\nimport { getClosest } from './utils';\n\nexport class SceneTimeRange extends SceneObjectBase<SceneTimeRangeState> implements SceneTimeRangeLike {\n protected _urlSync = new SceneObjectUrlSyncConfig(this, { keys: ['from', 'to'] });\n\n public constructor(state: Partial<SceneTimeRangeState> = {}) {\n const from = state.from ?? 'now-6h';\n const to = state.to ?? 'now';\n const timeZone = state.timeZone;\n const value = evaluateTimeRange(from, to, timeZone || getTimeZone());\n super({ from, to, timeZone, value, ...state });\n\n this.addActivationHandler(this._onActivate);\n }\n\n private _onActivate = () => {\n // When SceneTimeRange has no time zone provided, find closest source of time zone and subscribe to it\n if (!this.state.timeZone) {\n const timeZoneSource = this.getTimeZoneSource();\n if (timeZoneSource !== this) {\n this._subs.add(\n timeZoneSource.subscribeToState((n, p) => {\n if (n.timeZone !== undefined && n.timeZone !== p.timeZone) {\n this.setState({\n value: evaluateTimeRange(this.state.from, this.state.to, timeZoneSource.getTimeZone()),\n });\n }\n })\n );\n }\n }\n };\n\n /**\n * Will traverse up the scene graph to find the closest SceneTimeRangeLike with time zone set\n */\n private getTimeZoneSource() {\n if (!this.parent || !this.parent.parent) {\n return this;\n }\n // Find the closest source of time zone\n const source = getClosest<SceneTimeRangeLike>(this.parent.parent, (o) => {\n if (o.state.$timeRange && o.state.$timeRange.state.timeZone) {\n return o.state.$timeRange;\n }\n return undefined;\n });\n\n if (!source) {\n return this;\n }\n\n return source;\n }\n\n public getTimeZone(): TimeZone {\n // Return local time zone if provided\n if (this.state.timeZone) {\n return this.state.timeZone;\n }\n\n // Resolve higher level time zone source\n const timeZoneSource = this.getTimeZoneSource();\n if (timeZoneSource !== this) {\n return timeZoneSource.state.timeZone!;\n }\n\n // Return default time zone\n return getTimeZone();\n }\n\n public onTimeRangeChange = (timeRange: TimeRange) => {\n const update: Partial<SceneTimeRangeState> = {};\n\n if (typeof timeRange.raw.from === 'string') {\n update.from = timeRange.raw.from;\n } else {\n update.from = timeRange.raw.from.toISOString();\n }\n\n if (typeof timeRange.raw.to === 'string') {\n update.to = timeRange.raw.to;\n } else {\n update.to = timeRange.raw.to.toISOString();\n }\n\n update.value = evaluateTimeRange(update.from, update.to, this.getTimeZone());\n this.setState(update);\n };\n\n public onTimeZoneChange = (timeZone: TimeZone) => {\n this.setState({ timeZone });\n };\n\n public onRefresh = () => {\n this.setState({ value: evaluateTimeRange(this.state.from, this.state.to, this.getTimeZone()) });\n };\n\n public getUrlState() {\n return { from: this.state.from, to: this.state.to };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues) {\n // ignore if both are missing\n if (!values.to && !values.from) {\n return;\n }\n\n const update: Partial<SceneTimeRangeState> = {};\n const from = parseUrlParam(values.from);\n\n if (from) {\n update.from = from;\n }\n\n const to = parseUrlParam(values.to);\n if (to) {\n update.to = to;\n }\n\n update.value = evaluateTimeRange(update.from ?? this.state.from, update.to ?? this.state.to, this.getTimeZone());\n this.setState(update);\n }\n}\n\nfunction parseUrlParam(value: SceneObjectUrlValue): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n\n if (value.indexOf('now') !== -1) {\n return value;\n }\n\n if (value.length === 8) {\n const utcValue = toUtc(value, 'YYYYMMDD');\n if (utcValue.isValid()) {\n return utcValue.toISOString();\n }\n } else if (value.length === 15) {\n const utcValue = toUtc(value, 'YYYYMMDDTHHmmss');\n if (utcValue.isValid()) {\n return utcValue.toISOString();\n }\n } else if (value.length === 24) {\n const utcValue = toUtc(value);\n return utcValue.toISOString();\n }\n\n const epoch = parseInt(value, 10);\n if (!isNaN(epoch)) {\n return toUtc(epoch).toISOString();\n }\n\n return null;\n}\n\nexport function evaluateTimeRange(\n from: string,\n to: string,\n timeZone: TimeZone,\n fiscalYearStartMonth?: number\n): TimeRange {\n return {\n from: dateMath.parse(from, false, timeZone, fiscalYearStartMonth)!,\n to: dateMath.parse(to, true, timeZone, fiscalYearStartMonth)!,\n raw: {\n from: from,\n to: to,\n },\n };\n}\n","import { SceneDataNode } from '../../core/SceneDataNode';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneTimeRange } from '../../core/SceneTimeRange';\nimport { SceneVariable, SceneVariables, SceneVariableSetState, SceneVariableState } from '../types';\n\nexport const EmptyDataNode = new SceneDataNode();\nexport const DefaultTimeRange = new SceneTimeRange();\n\n/**\n * Since this is used from sceneGraph.getVariables we cannot reference SceneVariableSet here as it would create a circular reference\n */\nexport class EmptyVariableSetImpl extends SceneObjectBase<SceneVariableSetState> implements SceneVariables {\n public constructor() {\n super({ variables: [] });\n }\n\n public getByName(name: string): SceneVariable<SceneVariableState> | undefined {\n return undefined;\n }\n\n public isVariableLoadingOrWaitingToUpdate(variable: SceneVariable<SceneVariableState>): boolean {\n return false;\n }\n}\n\nexport const EmptyVariableSet = new EmptyVariableSetImpl();\n","import { Observable } from 'rxjs';\n\nimport { BusEventWithPayload } from '@grafana/data';\nimport { VariableType, VariableHide } from '@grafana/schema';\n\nimport { SceneObject, SceneObjectState } from '../core/types';\n\nexport interface SceneVariableState extends SceneObjectState {\n type: VariableType;\n name: string;\n label?: string;\n hide?: VariableHide;\n skipUrlSync?: boolean;\n loading?: boolean;\n error?: any | null;\n description?: string | null;\n}\n\nexport interface SceneVariable<TState extends SceneVariableState = SceneVariableState> extends SceneObject<TState> {\n /**\n * This function is called on activation or when a dependency changes.\n */\n validateAndUpdate?(): Observable<ValidateAndUpdateResult>;\n\n /**\n * Should return the value for the given field path\n */\n getValue(fieldPath?: string): VariableValue | undefined | null;\n\n /**\n * Should return the value display text, used by the \"text\" formatter\n * Example: ${podId:text}\n * Useful for variables that have non user friendly values but friendly display text names.\n */\n getValueText?(fieldPath?: string): string;\n}\n\nexport type VariableValue = VariableValueSingle | VariableValueSingle[];\n\nexport type VariableValueSingle = string | boolean | number | CustomVariableValue;\n\n/**\n * This is for edge case values like the custom \"allValue\" that should not be escaped/formatted like other values\n * The custom all value usually contain wildcards that should not be escaped.\n */\nexport interface CustomVariableValue {\n /**\n * The format name or function used in the expression\n */\n formatter(formatNameOrFn?: string | VariableCustomFormatterFn): string;\n}\n\nexport interface ValidateAndUpdateResult {}\nexport interface VariableValueOption {\n label: string;\n value: VariableValueSingle;\n}\n\nexport interface SceneVariableSetState extends SceneObjectState {\n variables: SceneVariable[];\n}\n\nexport interface SceneVariables extends SceneObject<SceneVariableSetState> {\n /**\n * Will look for and return variable matching name\n */\n getByName(name: string): SceneVariable | undefined;\n /**\n * Will return true if the variable is loading or waiting for an update to complete.\n */\n isVariableLoadingOrWaitingToUpdate(variable: SceneVariable): boolean;\n}\n\nexport class SceneVariableValueChangedEvent extends BusEventWithPayload<SceneVariable> {\n public static type = 'scene-variable-changed-value';\n}\n\nexport interface SceneVariableDependencyConfigLike {\n /** Return all variable names this object depend on */\n getNames(): Set<string>;\n\n /** Used to check for dependency on a specific variable */\n hasDependencyOn(name: string): boolean;\n\n /**\n * Will be called when the VariableSet have completed an update process\n **/\n variableUpdatesCompleted(changedVariables: Set<SceneVariable>): void;\n}\n\n/**\n * Used in CustomFormatterFn\n */\nexport interface CustomFormatterVariable {\n name: string;\n type: VariableType;\n multi?: boolean;\n includeAll?: boolean;\n}\n\nexport type VariableCustomFormatterFn = (\n value: unknown,\n legacyVariableModel: Partial<CustomFormatterVariable>,\n legacyDefaultFormatter?: VariableCustomFormatterFn\n) => string;\n\nexport type InterpolationFormatParameter = string | VariableCustomFormatterFn | undefined;\n\nexport function isCustomVariableValue(value: VariableValue): value is CustomVariableValue {\n return typeof value === 'object' && 'formatter' in value;\n}\n","import { property } from 'lodash';\n\ninterface FieldAccessorCache {\n [key: string]: (obj: object) => any;\n}\n\nlet fieldAccessorCache: FieldAccessorCache = {};\n\nexport function getFieldAccessor(fieldPath: string) {\n const accessor = fieldAccessorCache[fieldPath];\n if (accessor) {\n return accessor;\n }\n\n return (fieldAccessorCache[fieldPath] = property(fieldPath));\n}\n","import { ScopedVar } from '@grafana/data';\n\nimport { VariableValue } from '../types';\n\nimport { FormatVariable } from './formatRegistry';\nimport { getFieldAccessor } from './fieldAccessorCache';\n\nexport class ScopedVarsVariable implements FormatVariable {\n public state: { name: string; value: ScopedVar; type: string };\n\n public constructor(name: string, value: ScopedVar) {\n this.state = { name, value, type: 'scopedvar' };\n }\n\n public getValue(fieldPath: string): VariableValue {\n let { value } = this.state;\n let realValue = value.value;\n\n if (fieldPath) {\n realValue = getFieldAccessor(fieldPath)(value.value);\n } else {\n realValue = value.value;\n }\n\n if (realValue === 'string' || realValue === 'number' || realValue === 'boolean') {\n return realValue;\n }\n\n return String(realValue);\n }\n\n public getValueText(): string {\n const { value } = this.state;\n\n if (value.text != null) {\n return String(value.text);\n }\n\n return String(value);\n }\n}\n\nlet scopedVarsVariable: ScopedVarsVariable | undefined;\n\n/**\n * Reuses a single instance to avoid unnecessary memory allocations\n */\nexport function getSceneVariableForScopedVar(name: string, value: ScopedVar): FormatVariable {\n if (!scopedVarsVariable) {\n scopedVarsVariable = new ScopedVarsVariable(name, value);\n } else {\n scopedVarsVariable.state.name = name;\n scopedVarsVariable.state.value = value;\n }\n\n return scopedVarsVariable;\n}\n","export const ALL_VARIABLE_TEXT = 'All';\nexport const ALL_VARIABLE_VALUE = '$__all';\nexport const NONE_VARIABLE_TEXT = 'None';\nexport const NONE_VARIABLE_VALUE = '';\n\n// Grafana core source: https://github.com/grafana/grafana/blob/main/public/app/features/variables/utils.ts#L23\n/*\n * This regex matches 3 types of variable reference with an optional format specifier\n * \\$(\\w+) $var1\n * \\[\\[(\\w+?)(?::(\\w+))?\\]\\] [[var2]] or [[var2:fmt2]]\n * \\${(\\w+)(?::(\\w+))?} ${var3} or ${var3:fmt3}\n */\nexport const VARIABLE_REGEX = /\\$(\\w+)|\\[\\[(\\w+?)(?::(\\w+))?\\]\\]|\\${(\\w+)(?:\\.([^:^\\}]+))?(?::([^\\}]+))?}/g;\n","import { isArray, map, replace } from 'lodash';\n\nimport { dateTime, Registry, RegistryItem, textUtil, escapeRegex } from '@grafana/data';\nimport { VariableType, VariableFormatID } from '@grafana/schema';\n\nimport { VariableValue, VariableValueSingle } from '../types';\nimport { ALL_VARIABLE_VALUE } from '../constants';\n\nexport interface FormatRegistryItem extends RegistryItem {\n formatter(value: VariableValue, args: string[], variable: FormatVariable): string;\n}\n\n/**\n * Slimmed down version of the SceneVariable interface so that it only contains what the formatters actually use.\n * This is useful as we have some implementations of this interface that does not need to be full scene objects.\n * For example ScopedVarsVariable and LegacyVariableWrapper.\n */\nexport interface FormatVariable {\n state: {\n name: string;\n type: VariableType | string;\n isMulti?: boolean;\n includeAll?: boolean;\n };\n\n getValue(fieldPath?: string): VariableValue | undefined | null;\n getValueText?(fieldPath?: string): string;\n}\n\nexport const formatRegistry = new Registry<FormatRegistryItem>(() => {\n const formats: FormatRegistryItem[] = [\n {\n id: VariableFormatID.Lucene,\n name: 'Lucene',\n description: 'Values are lucene escaped and multi-valued variables generate an OR expression',\n formatter: (value) => {\n if (typeof value === 'string') {\n return luceneEscape(value);\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '__empty__';\n }\n const quotedValues = map(value, (val: string) => {\n return '\"' + luceneEscape(val) + '\"';\n });\n return '(' + quotedValues.join(' OR ') + ')';\n } else {\n return luceneEscape(`${value}`);\n }\n },\n },\n {\n id: VariableFormatID.Raw,\n name: 'raw',\n description: 'Keep value as is',\n formatter: (value) => String(value),\n },\n {\n id: VariableFormatID.Regex,\n name: 'Regex',\n description: 'Values are regex escaped and multi-valued variables generate a (<value>|<value>) expression',\n formatter: (value) => {\n if (typeof value === 'string') {\n return escapeRegex(value);\n }\n\n if (Array.isArray(value)) {\n const escapedValues = value.map((item) => {\n if (typeof item === 'string') {\n return escapeRegex(item);\n } else {\n return escapeRegex(String(item));\n }\n });\n\n if (escapedValues.length === 1) {\n return escapedValues[0];\n }\n\n return '(' + escapedValues.join('|') + ')';\n }\n\n return escapeRegex(`${value}`);\n },\n },\n {\n id: VariableFormatID.Pipe,\n name: 'Pipe',\n description: 'Values are separated by | character',\n formatter: (value) => {\n if (typeof value === 'string') {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.join('|');\n }\n\n return `${value}`;\n },\n },\n {\n id: VariableFormatID.Distributed,\n name: 'Distributed',\n description: 'Multiple values are formatted like variable=value',\n formatter: (value, args, variable) => {\n if (typeof value === 'string') {\n return value;\n }\n\n if (Array.isArray(value)) {\n value = map(value, (val: string, index: number) => {\n if (index !== 0) {\n return variable.state.name + '=' + val;\n } else {\n return val;\n }\n });\n\n return value.join(',');\n }\n\n return `${value}`;\n },\n },\n {\n id: VariableFormatID.CSV,\n name: 'Csv',\n description: 'Comma-separated values',\n formatter: (value) => {\n if (typeof value === 'string') {\n return value;\n }\n\n if (isArray(value)) {\n return value.join(',');\n }\n\n return String(value);\n },\n },\n {\n id: VariableFormatID.HTML,\n name: 'HTML',\n description: 'HTML escaping of values',\n formatter: (value) => {\n if (typeof value === 'string') {\n return textUtil.escapeHtml(value);\n }\n\n if (isArray(value)) {\n return textUtil.escapeHtml(value.join(', '));\n }\n\n return textUtil.escapeHtml(String(value));\n },\n },\n {\n id: VariableFormatID.JSON,\n name: 'JSON',\n description: 'JSON stringify value',\n formatter: (value) => {\n if (typeof value === 'string') {\n return value;\n }\n return JSON.stringify(value);\n },\n },\n {\n id: VariableFormatID.PercentEncode,\n name: 'Percent encode',\n description: 'Useful for URL escaping values',\n formatter: (value) => {\n // like glob, but url escaped\n if (isArray(value)) {\n return encodeURIComponentStrict('{' + value.join(',') + '}');\n }\n\n return encodeURIComponentStrict(value);\n },\n },\n {\n id: VariableFormatID.SingleQuote,\n name: 'Single quote',\n description: 'Single quoted values',\n formatter: (value) => {\n // escape single quotes with backslash\n const regExp = new RegExp(`'`, 'g');\n\n if (isArray(value)) {\n return map(value, (v: string) => `'${replace(v, regExp, `\\\\'`)}'`).join(',');\n }\n\n let strVal = typeof value === 'string' ? value : String(value);\n return `'${replace(strVal, regExp, `\\\\'`)}'`;\n },\n },\n {\n id: VariableFormatID.DoubleQuote,\n name: 'Double quote',\n description: 'Double quoted values',\n formatter: (value) => {\n // escape double quotes with backslash\n const regExp = new RegExp('\"', 'g');\n if (isArray(value)) {\n return map(value, (v: string) => `\"${replace(v, regExp, '\\\\\"')}\"`).join(',');\n }\n\n let strVal = typeof value === 'string' ? value : String(value);\n return `\"${replace(strVal, regExp, '\\\\\"')}\"`;\n },\n },\n {\n id: VariableFormatID.SQLString,\n name: 'SQL string',\n description: 'SQL string quoting and commas for use in IN statements and other scenarios',\n formatter: (value) => {\n // escape single quotes by pairing them\n const regExp = new RegExp(`'`, 'g');\n if (isArray(value)) {\n return map(value, (v: string) => `'${replace(v, regExp, \"''\")}'`).join(',');\n }\n\n let strVal = typeof value === 'string' ? value : String(value);\n return `'${replace(strVal, regExp, \"''\")}'`;\n },\n },\n {\n id: VariableFormatID.Date,\n name: 'Date',\n description: 'Format date in different ways',\n formatter: (value, args) => {\n let nrValue = NaN;\n\n if (typeof value === 'number') {\n nrValue = value;\n } else if (typeof value === 'string') {\n nrValue = parseInt(value, 10);\n }\n\n if (isNaN(nrValue)) {\n return 'NaN';\n }\n\n const arg = args[0] ?? 'iso';\n switch (arg) {\n case 'ms':\n return String(value);\n case 'seconds':\n return `${Math.round(nrValue! / 1000)}`;\n case 'iso':\n return dateTime(nrValue).toISOString();\n default:\n if ((args || []).length > 1) {\n return dateTime(nrValue).format(args.join(':'));\n }\n return dateTime(nrValue).format(arg);\n }\n },\n },\n {\n id: VariableFormatID.Glob,\n name: 'Glob',\n description: 'Format multi-valued variables using glob syntax, example {value1,value2}',\n formatter: (value) => {\n if (isArray(value) && value.length > 1) {\n return '{' + value.join(',') + '}';\n }\n return String(value);\n },\n },\n {\n id: VariableFormatID.Text,\n name: 'Text',\n description: 'Format variables in their text representation. Example in multi-variable scenario A + B + C.',\n formatter: (value, _args, variable) => {\n if (variable.getValueText) {\n return variable.getValueText();\n }\n\n return String(value);\n },\n },\n {\n id: VariableFormatID.QueryParam,\n name: 'Query parameter',\n description:\n 'Format variables as URL parameters. Example in multi-variable scenario A + B + C => var-foo=A&var-foo=B&var-foo=C.',\n formatter: (value, _args, variable) => {\n if (Array.isArray(value)) {\n return value.map((v) => formatQueryParameter(variable.state.name, v)).join('&');\n }\n return formatQueryParameter(variable.state.name, value);\n },\n },\n {\n id: VariableFormatID.UriEncode,\n name: 'Percent encode as URI',\n description: 'Useful for URL escaping values, taking into URI syntax characters',\n formatter: (value: VariableValue) => {\n if (isArray(value)) {\n return encodeURIStrict('{' + value.join(',') + '}');\n }\n\n return encodeURIStrict(value);\n },\n },\n ];\n\n return formats;\n});\n\nfunction luceneEscape(value: string) {\n if (isNaN(+value) === false) {\n return value;\n }\n\n return value.replace(/([\\!\\*\\+\\-\\=<>\\s\\&\\|\\(\\)\\[\\]\\{\\}\\^\\~\\?\\:\\\\/\"])/g, '\\\\$1');\n}\n\n/**\n * encode string according to RFC 3986; in contrast to encodeURIComponent()\n * also the sub-delims \"!\", \"'\", \"(\", \")\" and \"*\" are encoded;\n * unicode handling uses UTF-8 as in ECMA-262.\n */\nfunction encodeURIComponentStrict(str: VariableValueSingle) {\n if (typeof str === 'object') {\n str = String(str);\n }\n\n return replaceSpecialCharactersToASCII(encodeURIComponent(str));\n}\n\nconst encodeURIStrict = (str: VariableValueSingle): string =>\n replaceSpecialCharactersToASCII(encodeURI(String(str)));\n\nconst replaceSpecialCharactersToASCII = (value: string): string => value.replace(/[!'()*]/g, (c) => {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n});\n\nfunction formatQueryParameter(name: string, value: VariableValueSingle): string {\n return `var-${name}=${encodeURIComponentStrict(value)}`;\n}\n\nexport function isAllValue(value: VariableValueSingle) {\n return value === ALL_VARIABLE_VALUE || (Array.isArray(value) && value[0] === ALL_VARIABLE_VALUE);\n}\n","import { SceneObject } from '../core/types';\nimport { SceneVariable } from './types';\n\n/**\n * Will walk the scene object graph up to the root looking for the first variable with the specified name\n */\nexport function lookupVariable(name: string, sceneObject: SceneObject): SceneVariable | null {\n const variables = sceneObject.state.$variables;\n if (!variables) {\n if (sceneObject.parent) {\n return lookupVariable(name, sceneObject.parent);\n } else {\n return null;\n }\n }\n\n const found = variables.getByName(name);\n if (found) {\n return found;\n } else if (sceneObject.parent) {\n return lookupVariable(name, sceneObject.parent);\n }\n\n return null;\n}\n","import { ScopedVars } from '@grafana/data';\nimport { SceneObject } from '../../core/types';\nimport { FormatVariable } from '../interpolation/formatRegistry';\nimport { CustomVariableValue } from '../types';\n\nexport interface MacroVariableConstructor {\n new (name: string, sceneObject: SceneObject, fullMatch: string, scopedVars?: ScopedVars): FormatVariable;\n}\n\n/**\n * The sceneInterpolator will detect if getValue returns VariableValueCustom and will skip the normal formatting\n * This is useful as otherwise we would url encode macros like $__all_variables twice.\n */\nexport class SkipFormattingValue implements CustomVariableValue {\n public constructor(private _value: string) {}\n\n public formatter(): string {\n return this._value;\n }\n}\n","import { urlUtil } from '@grafana/data';\nimport { SceneObject, SceneTimeRangeLike } from '../../core/types';\nimport { FormatVariable } from '../interpolation/formatRegistry';\nimport { DefaultTimeRange } from '../interpolation/defaults';\nimport { SkipFormattingValue } from './types';\n\nexport class UrlTimeRangeMacro implements FormatVariable {\n public state: { name: string; type: string };\n private _sceneObject: SceneObject;\n\n public constructor(name: string, sceneObject: SceneObject) {\n this.state = { name: name, type: 'url_variable' };\n this._sceneObject = sceneObject;\n }\n\n public getValue(): SkipFormattingValue {\n const timeRange = getTimeRange(this._sceneObject);\n const urlState = timeRange.urlSync?.getUrlState();\n return new SkipFormattingValue(urlUtil.toUrlParams(urlState));\n }\n\n public getValueText?(): string {\n return '';\n }\n}\n\nfunction getTimeRange(sceneObject: SceneObject): SceneTimeRangeLike {\n const { $timeRange } = sceneObject.state;\n if ($timeRange) {\n return $timeRange;\n }\n\n if (sceneObject.parent) {\n return getTimeRange(sceneObject.parent);\n }\n\n return DefaultTimeRange;\n}\n","import { SceneObject } from '../../core/types';\nimport { isCustomVariableValue, SceneVariable } from '../types';\nimport { formatRegistry, FormatVariable } from '../interpolation/formatRegistry';\nimport { SkipFormattingValue } from './types';\nimport { VariableFormatID } from '@grafana/schema';\n\nexport class AllVariablesMacro implements FormatVariable {\n public state: { name: string; type: string };\n private _sceneObject: SceneObject;\n\n public constructor(name: string, sceneObject: SceneObject) {\n this.state = { name, type: 'url_variable' };\n this._sceneObject = sceneObject;\n }\n\n public getValue(): SkipFormattingValue {\n const allVars = collectAllVariables(this._sceneObject);\n const format = formatRegistry.get(VariableFormatID.QueryParam);\n const params: string[] = [];\n\n for (const name of Object.keys(allVars)) {\n const variable = allVars[name];\n const value = variable.getValue();\n\n if (!value) {\n continue;\n }\n\n if (isCustomVariableValue(value)) {\n params.push(value.formatter(VariableFormatID.QueryParam));\n } else {\n params.push(format.formatter(value, [], variable));\n }\n }\n\n return new SkipFormattingValue(params.join('&'));\n }\n\n public getValueText?(): string {\n return '';\n }\n}\n\nfunction collectAllVariables(\n sceneObject: SceneObject,\n record: Record<string, SceneVariable> = {}\n): Record<string, SceneVariable> {\n if (sceneObject.state.$variables) {\n for (const variable of sceneObject.state.$variables.state.variables) {\n if (variable.state.skipUrlSync) {\n continue;\n }\n\n if (!record[variable.state.name]) {\n record[variable.state.name] = variable;\n }\n }\n }\n\n if (sceneObject.parent) {\n collectAllVariables(sceneObject.parent, record);\n }\n\n return record;\n}\n","import { Field, DataFrame, getFieldDisplayName, formatLabels } from '@grafana/data';\n\n/**\n * This object is created often, and only used when tmplates exist. Using a proxy lets us delay\n * calculations of the more complex structures (label names) until they are actually used\n */\nexport function getTemplateProxyForField(field: Field, frame?: DataFrame, frames?: DataFrame[]): any {\n return new Proxy(\n {}, // This object shows up in test snapshots\n {\n get: (obj, key) => {\n if (key === 'name') {\n return field.name;\n }\n\n if (key === 'displayName') {\n return getFieldDisplayName(field, frame, frames);\n }\n\n if (key === 'labels' || key === 'formattedLabels') {\n // formattedLabels deprecated\n if (!field.labels) {\n return '';\n }\n return {\n ...field.labels,\n __values: Object.values(field.labels).sort().join(', '),\n toString: () => {\n return formatLabels(field.labels!, '', true);\n },\n };\n }\n return undefined;\n },\n }\n );\n}\n","import {\n FieldType,\n formattedValueToString,\n getDisplayProcessor,\n ScopedVars,\n DataContextScopedVar,\n getFieldDisplayValuesProxy,\n getFrameDisplayName,\n} from '@grafana/data';\nimport { SceneObject } from '../../core/types';\nimport { getFieldAccessor } from '../interpolation/fieldAccessorCache';\nimport { FormatVariable } from '../interpolation/formatRegistry';\nimport { VariableValue } from '../types';\nimport { getTemplateProxyForField } from './templateProxies';\n\n/**\n * This macro handles the ${__value.*} interpolation\n * match represents the regex match and is the full expression, example `${varname.fieldpath}`\n * Macros can return the match when they identify that there required data context is not provided.\n * This leaves the expression intact so that it can be interpolated later when the data context is available.\n */\nexport class ValueMacro implements FormatVariable {\n public state: { name: string; type: string };\n\n public constructor(name: string, sceneObject: SceneObject, private _match: string, private _scopedVars?: ScopedVars) {\n this.state = { name, type: '__value' };\n }\n\n public getValue(fieldPath?: string): VariableValue {\n const dataContext: DataContextScopedVar | undefined = this._scopedVars?.__dataContext;\n if (!dataContext) {\n return this._match;\n }\n\n const { frame, rowIndex, field, calculatedValue } = dataContext.value;\n\n if (calculatedValue) {\n switch (fieldPath) {\n case 'numeric':\n return calculatedValue.numeric;\n case 'raw':\n return calculatedValue.numeric;\n case 'time':\n return '';\n case 'text':\n default:\n return formattedValueToString(calculatedValue);\n }\n }\n\n if (rowIndex == null) {\n return this._match;\n }\n\n if (fieldPath === 'time') {\n const timeField = frame.fields.find((f) => f.type === FieldType.time);\n return timeField ? timeField.values.get(rowIndex) : undefined;\n }\n\n if (!field) {\n return this._match;\n }\n\n const value = field.values.get(rowIndex);\n if (fieldPath === 'raw') {\n return value;\n }\n\n const displayProcessor = field.display ?? fallbackDisplayProcessor;\n const result = displayProcessor(value);\n\n switch (fieldPath) {\n case 'numeric':\n return result.numeric;\n case 'text':\n default:\n return formattedValueToString(result);\n }\n }\n\n public getValueText?(): string {\n return '';\n }\n}\n\nconst fallbackDisplayProcessor = getDisplayProcessor();\n\n/**\n * This macro handles the ${__data.*} interpolation. This is a bit poorly named as most of the\n * expressions that this macro evaluates are really \"row\" based values enabling you to access\n * values in other fields on the same row.\n */\nexport class DataMacro implements FormatVariable {\n public state: { name: string; type: string };\n\n public constructor(name: string, sceneObject: SceneObject, private _match: string, private _scopedVars?: ScopedVars) {\n this.state = { name, type: '__data' };\n }\n\n public getValue(fieldPath?: string): VariableValue {\n const dataContext = this._scopedVars?.__dataContext;\n if (!dataContext || !fieldPath) {\n return this._match;\n }\n\n const { frame, rowIndex } = dataContext.value;\n\n if (rowIndex === undefined || fieldPath === undefined) {\n return this._match;\n }\n\n const obj = {\n name: frame.name,\n refId: frame.refId,\n fields: getFieldDisplayValuesProxy({ frame, rowIndex }),\n };\n\n return getFieldAccessor(fieldPath)(obj) ?? '';\n }\n\n public getValueText?(): string {\n return '';\n }\n}\n\n/**\n * This macro handles the ${__series.name} interpolation.\n */\nexport class SeriesMacro implements FormatVariable {\n public state: { name: string; type: string };\n\n public constructor(name: string, sceneObject: SceneObject, private _match: string, private _scopedVars?: ScopedVars) {\n this.state = { name, type: '__series' };\n }\n\n public getValue(fieldPath?: string): VariableValue {\n const dataContext = this._scopedVars?.__dataContext;\n if (!dataContext || !fieldPath) {\n return this._match;\n }\n\n if (fieldPath !== 'name') {\n return this._match;\n }\n\n const { frame, frameIndex } = dataContext.value;\n return getFrameDisplayName(frame, frameIndex);\n }\n\n public getValueText?(): string {\n return '';\n }\n}\n\n/**\n * This macro handles the ${__field.*} interpolation. These do not require a data context.\n * And can be easily used in field config options like displayName.\n */\nexport class FieldMacro implements FormatVariable {\n public state: { name: string; type: string };\n\n public constructor(name: string, sceneObject: SceneObject, private _match: string, private _scopedVars?: ScopedVars) {\n this.state = { name, type: '__field' };\n }\n\n public getValue(fieldPath?: string): VariableValue {\n const dataContext = this._scopedVars?.__dataContext;\n if (!dataContext || !fieldPath) {\n return this._match;\n }\n\n if (fieldPath === undefined || fieldPath === '') {\n return this._match;\n }\n\n const { frame, field, data } = dataContext.value;\n const obj = getTemplateProxyForField(field, frame, data);\n\n return getFieldAccessor(fieldPath)(obj) ?? '';\n }\n\n public getValueText?(): string {\n return '';\n }\n}\n","import { DataLinkBuiltInVars } from '@grafana/data';\nimport { MacroVariableConstructor } from './types';\nimport { UrlTimeRangeMacro } from './UrlTimeRangeMacro';\nimport { AllVariablesMacro } from './AllVariablesMacro';\nimport { DataMacro, FieldMacro, SeriesMacro, ValueMacro } from './dataMacros';\n\nexport const macrosIndex: Record<string, MacroVariableConstructor> = {\n [DataLinkBuiltInVars.includeVars]: AllVariablesMacro,\n [DataLinkBuiltInVars.keepTime]: UrlTimeRangeMacro,\n ['__value']: ValueMacro,\n ['__data']: DataMacro,\n ['__series']: SeriesMacro,\n ['__field']: FieldMacro,\n};\n","import { ScopedVars } from '@grafana/data';\nimport { VariableType, VariableFormatID } from '@grafana/schema';\n\nimport { SceneObject } from '../../core/types';\nimport { InterpolationFormatParameter, isCustomVariableValue, VariableValue } from '../types';\n\nimport { getSceneVariableForScopedVar } from './ScopedVarsVariable';\nimport { formatRegistry, FormatVariable } from './formatRegistry';\nimport { VARIABLE_REGEX } from '../constants';\nimport { lookupVariable } from '../lookupVariable';\nimport { macrosIndex } from '../macros';\n\n/**\n * This function will try to parse and replace any variable expression found in the target string. The sceneObject will be used as the source of variables. It will\n * use the scene graph and walk up the parent tree until it finds the closest variable.\n *\n * ScopedVars should not really be needed much in the new scene architecture as they can be added to the local scene node instead of passed in interpolate function.\n * It is supported here for backward compatibility and some edge cases where adding scoped vars to local scene node is not practical.\n */\nexport function sceneInterpolator(\n sceneObject: SceneObject,\n target: string | undefined | null,\n scopedVars?: ScopedVars,\n format?: InterpolationFormatParameter\n): string {\n if (!target) {\n return target ?? '';\n }\n\n VARIABLE_REGEX.lastIndex = 0;\n\n return target.replace(VARIABLE_REGEX, (match, var1, var2, fmt2, var3, fieldPath, fmt3) => {\n const variableName = var1 || var2 || var3;\n const fmt = fmt2 || fmt3 || format;\n const variable = lookupFormatVariable(variableName, match, scopedVars, sceneObject);\n\n if (!variable) {\n return match;\n }\n\n return formatValue(variable, variable.getValue(fieldPath), fmt);\n });\n}\n\nfunction lookupFormatVariable(\n name: string,\n match: string,\n scopedVars: ScopedVars | undefined,\n sceneObject: SceneObject\n): FormatVariable | null {\n const scopedVar = scopedVars?.[name];\n\n if (scopedVar) {\n return getSceneVariableForScopedVar(name, scopedVar);\n }\n\n const variable = lookupVariable(name, sceneObject);\n if (variable) {\n return variable;\n }\n\n if (macrosIndex[name]) {\n return new macrosIndex[name](name, sceneObject, match, scopedVars);\n }\n\n return null;\n}\n\nfunction formatValue(\n variable: FormatVariable,\n value: VariableValue | undefined | null,\n formatNameOrFn?: InterpolationFormatParameter\n): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n // Variable can return a custom value that handles formatting\n // This is useful for customAllValue and macros that return values that are already formatted or need special formatting\n if (isCustomVariableValue(value)) {\n return value.formatter(formatNameOrFn);\n }\n\n // if it's an object transform value to string\n if (!Array.isArray(value) && typeof value === 'object') {\n value = `${value}`;\n }\n\n if (typeof formatNameOrFn === 'function') {\n return formatNameOrFn(value, {\n name: variable.state.name,\n type: variable.state.type as VariableType,\n multi: variable.state.isMulti,\n includeAll: variable.state.includeAll,\n });\n }\n\n let args: string[] = [];\n\n if (!formatNameOrFn) {\n formatNameOrFn = VariableFormatID.Glob;\n } else {\n // some formats have arguments that come after ':' character\n args = formatNameOrFn.split(':');\n if (args.length > 1) {\n formatNameOrFn = args[0];\n args = args.slice(1);\n } else {\n args = [];\n }\n }\n\n let formatter = formatRegistry.getIfExists(formatNameOrFn);\n\n if (!formatter) {\n console.error(`Variable format ${formatNameOrFn} not found. Using glob format as fallback.`);\n formatter = formatRegistry.get(VariableFormatID.Glob);\n }\n\n return formatter.formatter(value, args, variable);\n}\n","import { ScopedVars } from '@grafana/data';\nimport { DefaultTimeRange, EmptyDataNode, EmptyVariableSet } from '../variables/interpolation/defaults';\n\nimport { sceneInterpolator } from '../variables/interpolation/sceneInterpolator';\nimport { VariableCustomFormatterFn, SceneVariables } from '../variables/types';\n\nimport { SceneDataState, SceneLayout, SceneObject, SceneTimeRangeLike } from './types';\nimport { lookupVariable } from '../variables/lookupVariable';\nimport { getClosest } from './utils';\n\n/**\n * Get the closest node with variables\n */\nexport function getVariables(sceneObject: SceneObject): SceneVariables {\n return getClosest(sceneObject, (s) => s.state.$variables) ?? EmptyVariableSet;\n}\n\n/**\n * Will walk up the scene object graph to the closest $data scene object\n */\nexport function getData(sceneObject: SceneObject): SceneObject<SceneDataState> {\n return getClosest(sceneObject, (s) => s.state.$data) ?? EmptyDataNode;\n}\n\n/**\n * Will walk up the scene object graph to the closest $timeRange scene object\n */\nexport function getTimeRange(sceneObject: SceneObject): SceneTimeRangeLike {\n return getClosest(sceneObject, (s) => s.state.$timeRange) ?? DefaultTimeRange;\n}\n\nfunction isSceneLayout(s: SceneObject): s is SceneLayout {\n return 'isDraggable' in s;\n}\n\n/**\n * Will walk up the scene object graph to the closest $layout scene object\n */\nexport function getLayout(scene: SceneObject): SceneLayout {\n const parent = getClosest(scene, (s) => (isSceneLayout(s) ? s : undefined));\n if (parent) {\n return parent;\n }\n\n throw new Error('No layout found in scene tree');\n}\n\n/**\n * Interpolates the given string using the current scene object as context. *\n */\nexport function interpolate(\n sceneObject: SceneObject,\n value: string | undefined | null,\n scopedVars?: ScopedVars,\n format?: string | VariableCustomFormatterFn\n): string {\n if (value === '' || value == null) {\n return '';\n }\n\n return sceneInterpolator(sceneObject, value, scopedVars, format);\n}\n\n/**\n * Checks if the variable is currently loading or waiting to update\n */\nexport function hasVariableDependencyInLoadingState(sceneObject: SceneObject) {\n if (!sceneObject.variableDependency) {\n return false;\n }\n\n for (const name of sceneObject.variableDependency.getNames()) {\n const variable = lookupVariable(name, sceneObject);\n if (!variable) {\n continue;\n }\n\n const set = variable.parent as SceneVariables;\n return set.isVariableLoadingOrWaitingToUpdate(variable);\n }\n\n return false;\n}\n\nfunction findObjectInternal(\n scene: SceneObject,\n check: (obj: SceneObject) => boolean,\n alreadySearchedChild?: SceneObject,\n shouldSearchUp?: boolean\n): SceneObject | null {\n if (check(scene)) {\n return scene;\n }\n\n let found: SceneObject | null = null;\n\n scene.forEachChild((child) => {\n if (child === alreadySearchedChild) {\n return;\n }\n\n let maybe = findObjectInternal(child, check);\n if (maybe) {\n found = maybe;\n }\n });\n\n if (found) {\n return found;\n }\n\n if (shouldSearchUp && scene.parent) {\n return findObjectInternal(scene.parent, check, scene, true);\n }\n\n return null;\n}\n\n/**\n * This will search the full scene graph, starting with the scene node passed in, then walking up the parent chain. *\n */\nexport function findObject(scene: SceneObject, check: (obj: SceneObject) => boolean): SceneObject | null {\n return findObjectInternal(scene, check, undefined, true);\n}\n\nexport const sceneGraph = {\n getVariables,\n getData,\n getTimeRange,\n getLayout,\n interpolate,\n lookupVariable,\n hasVariableDependencyInLoadingState,\n findObject,\n};\n","import { TimeRange } from '@grafana/data';\nimport { TimeZone } from '@grafana/schema';\nimport { sceneGraph } from './sceneGraph';\nimport { SceneObjectBase } from './SceneObjectBase';\nimport { evaluateTimeRange } from './SceneTimeRange';\nimport { SceneTimeRangeLike, SceneTimeRangeState } from './types';\n\ninterface SceneTimeZoneOverrideState extends SceneTimeRangeState {\n timeZone: TimeZone;\n}\n\nexport class SceneTimeZoneOverride extends SceneObjectBase<SceneTimeZoneOverrideState> implements SceneTimeRangeLike {\n public constructor(state: Omit<SceneTimeZoneOverrideState, 'from' | 'to' | 'value'>) {\n super({\n ...state,\n timeZone: state.timeZone,\n // Fake time range, it's actually provided via closest time range object on activation\n from: 'now-6h',\n to: 'now',\n value: evaluateTimeRange('now-6h', 'now', state.timeZone),\n });\n\n this.addActivationHandler(this._activationHandler);\n }\n\n private getTimeRangeObject() {\n if (!this.parent || !this.parent.parent) {\n throw new Error('SceneTimeZoneOverride must be used within $timeRange scope');\n }\n\n return sceneGraph.getTimeRange(this.parent.parent);\n }\n\n private _activationHandler = () => {\n const timeRangeObject = this.getTimeRangeObject();\n const { from, to } = timeRangeObject.state;\n this.setState({\n from,\n to,\n value: evaluateTimeRange(from, to, this.state.timeZone),\n });\n\n this._subs.add(\n timeRangeObject.subscribeToState((n) => {\n this.setState({\n from: n.from,\n to: n.to,\n value: evaluateTimeRange(n.from, n.to, this.state.timeZone),\n });\n })\n );\n };\n\n public getTimeZone(): TimeZone {\n return this.state.timeZone;\n }\n public onTimeRangeChange(timeRange: TimeRange): void {\n const timeRangeObject = this.getTimeRangeObject();\n timeRangeObject.onTimeRangeChange(timeRange);\n }\n\n public onTimeZoneChange(timeZone: string): void {\n this.setState({ timeZone, value: evaluateTimeRange(this.state.from, this.state.to, timeZone) });\n }\n\n public onRefresh(): void {\n const timeRangeObject = this.getTimeRangeObject();\n timeRangeObject.onRefresh();\n }\n}\n","import { DataSourceApi, ScopedVars } from '@grafana/data';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { DataSourceRef } from '@grafana/schema';\n\nexport async function getDataSource(\n datasource: DataSourceRef | undefined,\n scopedVars: ScopedVars\n): Promise<DataSourceApi> {\n if (datasource && (datasource as any).query) {\n return datasource as DataSourceApi;\n }\n\n return await getDataSourceSrv().get(datasource as string, scopedVars);\n}\n","import { SceneObject, SceneObjectState } from '../core/types';\nimport { VARIABLE_REGEX } from './constants';\n\nimport { SceneVariable, SceneVariableDependencyConfigLike } from './types';\n\ninterface VariableDependencyConfigOptions<TState extends SceneObjectState> {\n /**\n * State paths to scan / extract variable dependencies from. Leave empty to scan all paths.\n */\n statePaths?: Array<keyof TState>;\n /**\n * Optional way to customize how to handle when a dependent variable changes\n * If not specified the default behavior is to trigger a re-render\n */\n onReferencedVariableValueChanged?: () => void;\n\n /**\n * Optional way to customize how to handle when the variable system has completed an update\n */\n onVariableUpdatesCompleted?: (changedVariables: Set<SceneVariable>, dependencyChanged: boolean) => void;\n}\n\nexport class VariableDependencyConfig<TState extends SceneObjectState> implements SceneVariableDependencyConfigLike {\n private _state: TState | undefined;\n private _dependencies = new Set<string>();\n private _statePaths?: Array<keyof TState>;\n\n public scanCount = 0;\n\n public constructor(\n private _sceneObject: SceneObject<TState>,\n private _options: VariableDependencyConfigOptions<TState>\n ) {\n this._statePaths = _options.statePaths;\n }\n\n /**\n * Used to check for dependency on a specific variable\n */\n public hasDependencyOn(name: string): boolean {\n return this.getNames().has(name);\n }\n\n /**\n * This is called whenever any set of variables have new values. It up to this implementation to check if it's relevant given the current dependencies.\n */\n public variableUpdatesCompleted(changedVariables: Set<SceneVariable>) {\n const deps = this.getNames();\n let dependencyChanged = false;\n\n for (const variable of changedVariables) {\n if (deps.has(variable.state.name)) {\n dependencyChanged = true;\n break;\n }\n }\n\n // If custom handler is always called to let the scene object know that SceneVariableSet has completed processing variables\n if (this._options.onVariableUpdatesCompleted) {\n this._options.onVariableUpdatesCompleted(changedVariables, dependencyChanged);\n return;\n }\n\n if (dependencyChanged) {\n if (this._options.onReferencedVariableValueChanged) {\n this._options.onReferencedVariableValueChanged();\n } else {\n this.defaultHandlerReferencedVariableValueChanged();\n }\n }\n }\n\n /**\n * Only way to force a re-render is to update state right now\n */\n private defaultHandlerReferencedVariableValueChanged = () => {\n this._sceneObject.forceRender();\n };\n\n public getNames(): Set<string> {\n const prevState = this._state;\n const newState = (this._state = this._sceneObject.state);\n\n if (!prevState) {\n // First time we always scan for dependencies\n this.scanStateForDependencies(this._state);\n return this._dependencies;\n }\n\n // Second time we only scan if state is a different and if any specific state path has changed\n if (newState !== prevState) {\n if (this._statePaths) {\n for (const path of this._statePaths) {\n if (newState[path] !== prevState[path]) {\n this.scanStateForDependencies(newState);\n break;\n }\n }\n } else {\n this.scanStateForDependencies(newState);\n }\n }\n\n return this._dependencies;\n }\n\n private scanStateForDependencies(state: TState) {\n this._dependencies.clear();\n this.scanCount += 1;\n\n if (this._statePaths) {\n for (const path of this._statePaths) {\n const value = state[path];\n if (value) {\n this.extractVariablesFrom(value);\n }\n }\n } else {\n this.extractVariablesFrom(state);\n }\n }\n\n private extractVariablesFrom(value: unknown) {\n VARIABLE_REGEX.lastIndex = 0;\n\n const stringToCheck = typeof value !== 'string' ? safeStringifyValue(value) : value;\n\n const matches = stringToCheck.matchAll(VARIABLE_REGEX);\n if (!matches) {\n return;\n }\n\n for (const match of matches) {\n const [, var1, var2, , var3] = match;\n const variableName = var1 || var2 || var3;\n this._dependencies.add(variableName);\n }\n }\n}\n\nconst safeStringifyValue = (value: unknown) => {\n try {\n return JSON.stringify(value, null);\n } catch (error) {\n console.error(error);\n }\n\n return '';\n};\n","export function writeSceneLog(logger: string, message: string, ...rest: unknown[]) {\n if ((window as any).grafanaSceneLogging) {\n console.log(`${logger}: `, message, ...rest);\n }\n}\n","import { isEqual } from 'lodash';\nimport { VariableValue } from './types';\n\nexport function isVariableValueEqual(a: VariableValue | null | undefined, b: VariableValue | null | undefined) {\n if (a === b) {\n return true;\n }\n\n return isEqual(a, b);\n}\n","import { sceneGraph } from '../core/sceneGraph';\nimport { SceneObject } from '../core/types';\nimport { SceneVariable, VariableValue } from './types';\nimport { isVariableValueEqual } from './utils';\n\n/**\n * Useful for remembering variable values to know if they have changed\n **/\nexport class VariableValueRecorder {\n private _values = new Map<SceneVariable, VariableValue | undefined | null>();\n\n public recordCurrentDependencyValuesForSceneObject(sceneObject: SceneObject) {\n this.clearValues();\n\n for (const variableName of sceneObject.variableDependency!.getNames()) {\n const variable = sceneGraph.lookupVariable(variableName, sceneObject);\n if (variable) {\n this._values.set(variable, variable.getValue());\n }\n }\n }\n\n public clearValues() {\n this._values.clear();\n }\n\n public hasValues(): boolean {\n return !!this._values;\n }\n\n public recordCurrentValue(variable: SceneVariable) {\n this._values.set(variable, variable.getValue());\n }\n\n public hasRecordedValue(variable: SceneVariable): boolean {\n return this._values.has(variable);\n }\n\n public hasValueChanged(variable: SceneVariable): boolean {\n if (this._values.has(variable)) {\n const value = this._values.get(variable);\n if (!isVariableValueEqual(value, variable.getValue())) {\n return true;\n }\n }\n\n return false;\n }\n\n public hasDependenciesChanged(sceneObject: SceneObject): boolean {\n if (!this._values) {\n return false;\n }\n\n for (const variableName of sceneObject.variableDependency!.getNames()) {\n const variable = sceneGraph.lookupVariable(variableName, sceneObject);\n if (variable && this._values.has(variable)) {\n const value = this._values.get(variable);\n if (!isVariableValueEqual(value, variable.getValue())) {\n return true;\n }\n }\n }\n\n return false;\n }\n}\n","import { cloneDeep } from 'lodash';\nimport { Unsubscribable } from 'rxjs';\n\nimport { DataQuery, DataSourceRef } from '@grafana/schema';\n\nimport { CoreApp, DataQueryRequest, PanelData, preProcessPanelData, rangeUtil, ScopedVar } from '@grafana/data';\nimport { getRunRequest } from '@grafana/runtime';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneDataProvider, SceneObjectState, SceneTimeRangeLike } from '../core/types';\nimport { getDataSource } from '../utils/getDataSource';\nimport { VariableDependencyConfig } from '../variables/VariableDependencyConfig';\nimport { SceneVariable } from '../variables/types';\nimport { writeSceneLog } from '../utils/writeSceneLog';\nimport { VariableValueRecorder } from '../variables/VariableValueRecorder';\nimport { emptyPanelData } from '../core/SceneDataNode';\n\nlet counter = 100;\n\nexport function getNextRequestId() {\n return 'SQR' + counter++;\n}\n\nexport interface QueryRunnerState extends SceneObjectState {\n data?: PanelData;\n queries: DataQueryExtended[];\n datasource?: DataSourceRef;\n minInterval?: string;\n maxDataPoints?: number;\n // Non persisted state\n maxDataPointsFromWidth?: boolean;\n isWaitingForVariables?: boolean;\n}\n\nexport interface DataQueryExtended extends DataQuery {\n [key: string]: any;\n}\n\nexport class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> implements SceneDataProvider {\n private _querySub?: Unsubscribable;\n private _containerWidth?: number;\n private _variableValueRecorder = new VariableValueRecorder();\n\n protected _variableDependency: VariableDependencyConfig<QueryRunnerState> = new VariableDependencyConfig(this, {\n statePaths: ['queries', 'datasource'],\n onVariableUpdatesCompleted: (variables, dependencyChanged) =>\n this.onVariableUpdatesCompleted(variables, dependencyChanged),\n });\n\n public constructor(initialState: QueryRunnerState) {\n super(initialState);\n\n this.addActivationHandler(() => this._onActivate());\n }\n\n private _onActivate() {\n const timeRange = sceneGraph.getTimeRange(this);\n\n this._subs.add(\n timeRange.subscribeToState(() => {\n this.runWithTimeRange(timeRange);\n })\n );\n\n if (this.shouldRunQueriesOnActivate()) {\n this.runQueries();\n }\n\n return () => this._onDeactivate();\n }\n\n /**\n * Handles some tricky cases where we need to run queries even when they have not changed in case\n * the query execution on activate was stopped due to VariableSet still not having processed all variables.\n */\n private onVariableUpdatesCompleted(_variablesThatHaveChanged: Set<SceneVariable>, dependencyChanged: boolean) {\n if (this.state.isWaitingForVariables && this.shouldRunQueriesOnActivate()) {\n this.runQueries();\n return;\n }\n\n if (dependencyChanged) {\n this.runQueries();\n }\n }\n\n private shouldRunQueriesOnActivate() {\n // If no maxDataPoints specified we might need to wait for container width to be set from the outside\n if (!this.state.maxDataPoints && this.state.maxDataPointsFromWidth && !this._containerWidth) {\n return false;\n }\n\n if (this._variableValueRecorder.hasDependenciesChanged(this)) {\n writeSceneLog(\n 'SceneQueryRunner',\n 'Variable dependency changed while inactive, shouldRunQueriesOnActivate returns true'\n );\n return true;\n }\n\n // If we already have data, no need\n // TODO validate that time range is similar and if not we should run queries again\n if (this.state.data) {\n return false;\n }\n\n return true;\n }\n\n private _onDeactivate(): void {\n if (this._querySub) {\n this._querySub.unsubscribe();\n this._querySub = undefined;\n }\n\n this._variableValueRecorder.recordCurrentDependencyValuesForSceneObject(this);\n }\n\n public setContainerWidth(width: number) {\n // If we don't have a width we should run queries\n if (!this._containerWidth && width > 0) {\n this._containerWidth = width;\n\n // If we don't have maxDataPoints specifically set and maxDataPointsFromWidth is true\n if (this.state.maxDataPointsFromWidth && !this.state.maxDataPoints) {\n // As this is called from render path we need to wait for next tick before running queries\n setTimeout(() => {\n if (this.isActive && !this._querySub) {\n this.runQueries();\n }\n }, 0);\n }\n } else {\n // if the updated container width is bigger than 0 let's remember the width until next query issue\n if (width > 0) {\n this._containerWidth = width;\n }\n }\n }\n\n public runQueries() {\n const timeRange = sceneGraph.getTimeRange(this);\n this.runWithTimeRange(timeRange);\n }\n\n private getMaxDataPoints() {\n return this.state.maxDataPoints ?? this._containerWidth ?? 500;\n }\n\n private async runWithTimeRange(timeRange: SceneTimeRangeLike) {\n // Skip executing queries if variable dependency is in loading state\n if (sceneGraph.hasVariableDependencyInLoadingState(this)) {\n writeSceneLog('SceneQueryRunner', 'Variable dependency is in loading state, skipping query execution');\n this.setState({ isWaitingForVariables: true });\n return;\n }\n\n // If we where waiting for variables clear that flag\n if (this.state.isWaitingForVariables) {\n this.setState({ isWaitingForVariables: false });\n }\n\n const { minInterval, queries } = this.state;\n const sceneObjectScopedVar: Record<string, ScopedVar<SceneQueryRunner>> = {\n __sceneObject: { text: '__sceneObject', value: this },\n };\n\n // Simple path when no queries exist\n if (!queries?.length) {\n this._setNoDataState();\n return;\n }\n\n const request: DataQueryRequest = {\n app: CoreApp.Dashboard,\n requestId: getNextRequestId(),\n timezone: timeRange.getTimeZone(),\n panelId: 1,\n range: timeRange.state.value,\n interval: '1s',\n intervalMs: 1000,\n targets: cloneDeep(queries),\n maxDataPoints: this.getMaxDataPoints(),\n scopedVars: sceneObjectScopedVar,\n startTime: Date.now(),\n };\n\n try {\n const datasource = this.state.datasource ?? findFirstDatasource(request.targets);\n const ds = await getDataSource(datasource, request.scopedVars);\n\n // Attach the data source name to each query\n request.targets = request.targets.map((query) => {\n if (!query.datasource) {\n query.datasource = ds.getRef();\n }\n return query;\n });\n\n // TODO interpolate minInterval\n const lowerIntervalLimit = minInterval ? minInterval : ds.interval;\n const norm = rangeUtil.calculateInterval(timeRange.state.value, request.maxDataPoints!, lowerIntervalLimit);\n\n // make shallow copy of scoped vars,\n // and add built in variables interval and interval_ms\n request.scopedVars = Object.assign({}, request.scopedVars, {\n __interval: { text: norm.interval, value: norm.interval },\n __interval_ms: { text: norm.intervalMs.toString(), value: norm.intervalMs },\n });\n\n request.interval = norm.interval;\n request.intervalMs = norm.intervalMs;\n\n const runRequest = getRunRequest();\n\n writeSceneLog('SceneQueryRunner', 'Starting runRequest', this.state.key);\n\n this._querySub = runRequest(ds, request).subscribe(this.onDataReceived);\n } catch (err) {\n console.error('PanelQueryRunner Error', err);\n }\n }\n\n private onDataReceived = (data: PanelData) => {\n const preProcessedData = preProcessPanelData(data, this.state.data);\n this.setState({ data: preProcessedData });\n };\n\n private _setNoDataState() {\n if (this.state.data !== emptyPanelData) {\n this.setState({ data: emptyPanelData });\n }\n }\n}\n\nexport function findFirstDatasource(targets: DataQuery[]): DataSourceRef | undefined {\n return targets.find((t) => t.datasource !== null)?.datasource ?? undefined;\n}\n","import { DataTransformerConfig, PanelData, transformDataFrame } from '@grafana/data';\nimport { map, Unsubscribable } from 'rxjs';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { CustomTransformOperator, SceneDataProvider, SceneDataState } from '../core/types';\nimport { VariableDependencyConfig } from '../variables/VariableDependencyConfig';\n\nexport interface SceneDataTransformerState extends SceneDataState {\n /**\n * Array of standard transformation configs and custom transform operators\n */\n transformations: Array<DataTransformerConfig | CustomTransformOperator>;\n}\n\n/**\n * You can use this as a $data object. It can either transform an inner $data DataProvider or if that is not set it will\n * subscribe to a DataProvider higher up in the scene graph and transform its data.\n *\n * The transformations array supports custom (runtime defined) transformation as well as declarative core transformations.\n * You can manually re-process the transformations by calling reprocessTransformations(). This is useful if you have\n * transformations that depend on other scene object states.\n */\nexport class SceneDataTransformer extends SceneObjectBase<SceneDataTransformerState> implements SceneDataProvider {\n private _transformSub?: Unsubscribable;\n\n /**\n * Scan transformations for variable usage and re-process transforms when a variable values change\n */\n protected _variableDependency: VariableDependencyConfig<SceneDataTransformerState> = new VariableDependencyConfig(\n this,\n {\n statePaths: ['transformations'],\n onReferencedVariableValueChanged: () => this.reprocessTransformations(),\n }\n );\n\n public constructor(state: SceneDataTransformerState) {\n super(state);\n\n this.addActivationHandler(() => this.activationHandler());\n }\n\n private activationHandler() {\n const sourceData = this.getSourceData();\n\n this._subs.add(sourceData.subscribeToState((state) => this.transform(state.data)));\n\n if (sourceData.state.data) {\n this.transform(sourceData.state.data);\n }\n\n return () => {\n if (this._transformSub) {\n this._transformSub.unsubscribe();\n }\n };\n }\n\n private getSourceData(): SceneDataProvider {\n if (this.state.$data) {\n return this.state.$data;\n }\n\n if (!this.parent || !this.parent.parent) {\n throw new Error('SceneDataTransformer must either have $data set on it or have a parent.parent with $data');\n }\n\n return sceneGraph.getData(this.parent.parent);\n }\n\n public setContainerWidth(width: number) {\n if (this.state.$data && this.state.$data.setContainerWidth) {\n this.state.$data.setContainerWidth(width);\n }\n }\n\n public reprocessTransformations() {\n this.transform(this.getSourceData().state.data);\n }\n\n private transform(data: PanelData | undefined) {\n const transformations = this.state.transformations || [];\n\n if (transformations.length === 0 || !data) {\n this.setState({ data });\n return;\n }\n\n if (this._transformSub) {\n this._transformSub.unsubscribe();\n }\n\n const ctx = {\n interpolate: (value: string) => {\n return sceneGraph.interpolate(this, value, data.request?.scopedVars);\n },\n };\n\n this._transformSub = transformDataFrame(transformations, data.series, ctx)\n .pipe(map((series) => ({ ...data, series })))\n .subscribe((data) => this.setState({ data }));\n }\n}\n","import React from 'react';\n\nimport { GrafanaTheme2, VariableHide } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { SceneComponentProps, SceneObject, SceneObjectState } from '../../core/types';\nimport { SceneVariableState } from '../types';\nimport { css } from '@emotion/css';\n\nexport class VariableValueSelectors extends SceneObjectBase<SceneObjectState> {\n public static Component = VariableValueSelectorsRenderer;\n}\n\nfunction VariableValueSelectorsRenderer({ model }: SceneComponentProps<VariableValueSelectors>) {\n const variables = sceneGraph.getVariables(model)!.useState();\n const styles = useStyles2(getStyles);\n\n return (\n <>\n {variables.variables.map((variable) => (\n <VariableValueSelectWrapper key={variable.state.key} variable={variable} styles={styles} />\n ))}\n </>\n );\n}\n\nfunction VariableValueSelectWrapper({\n variable,\n styles,\n}: {\n variable: SceneObject<SceneVariableState>;\n styles: VariableLabelStyles;\n}) {\n const state = variable.useState();\n\n if (state.hide === VariableHide.hideVariable) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <VariableLabel state={state} styles={styles} />\n <variable.Component model={variable} />\n </div>\n );\n}\n\nfunction VariableLabel({ state, styles }: { state: SceneVariableState; styles: VariableLabelStyles }) {\n if (state.hide === VariableHide.hideLabel) {\n return null;\n }\n\n const elementId = `var-${state.key}`;\n const labelOrName = state.label ?? state.name;\n\n if (state.description) {\n return (\n <Tooltip content={state.description} placement={'bottom'}>\n <label\n className={styles.variableLabel}\n data-testid={selectors.pages.Dashboard.SubMenu.submenuItemLabels(labelOrName)}\n htmlFor={elementId}\n >\n {labelOrName}\n </label>\n </Tooltip>\n );\n }\n\n return (\n <label\n className={styles.variableLabel}\n data-testid={selectors.pages.Dashboard.SubMenu.submenuItemLabels(labelOrName)}\n htmlFor={elementId}\n >\n {labelOrName}\n </label>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n container: css({\n display: 'flex',\n }),\n variableLabel: css({\n background: theme.isDark ? theme.colors.background.primary : theme.colors.background.secondary,\n display: `flex`,\n alignItems: 'center',\n padding: theme.spacing(0, 1),\n fontWeight: theme.typography.fontWeightMedium,\n fontSize: theme.typography.bodySmall.fontSize,\n height: theme.spacing(theme.components.height.md),\n lineHeight: theme.spacing(theme.components.height.md),\n borderRadius: theme.shape.borderRadius(1),\n border: `1px solid ${theme.components.input.borderColor}`,\n position: 'relative',\n // To make the border line up with the input border\n right: -1,\n }),\n});\n\ntype VariableLabelStyles = ReturnType<typeof getStyles>;\n","import { VariableRefresh } from '@grafana/data';\nimport { Unsubscribable } from 'rxjs';\nimport { sceneGraph } from '../../core/sceneGraph';\n\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneObject } from '../../core/types';\nimport { writeSceneLog } from '../../utils/writeSceneLog';\nimport { SceneVariable, SceneVariables, SceneVariableSetState, SceneVariableValueChangedEvent } from '../types';\nimport { VariableValueRecorder } from '../VariableValueRecorder';\n\nexport class SceneVariableSet extends SceneObjectBase<SceneVariableSetState> implements SceneVariables {\n /** Variables that have changed in since the activation or since the first manual value change */\n private _variablesThatHaveChanged = new Set<SceneVariable>();\n\n /** Variables that are scheduled to be validated and updated */\n private _variablesToUpdate = new Set<SceneVariable>();\n\n /** Variables currently updating */\n private _updating = new Map<SceneVariable, VariableUpdateInProgress>();\n\n private _variableValueRecorder = new VariableValueRecorder();\n\n public getByName(name: string): SceneVariable | undefined {\n // TODO: Replace with index\n return this.state.variables.find((x) => x.state.name === name);\n }\n\n public constructor(state: SceneVariableSetState) {\n super(state);\n\n this.addActivationHandler(this._onActivate);\n }\n\n /**\n * Subscribes to child variable value changes, and starts the variable value validation process\n */\n private _onActivate = () => {\n const timeRange = sceneGraph.getTimeRange(this);\n // Subscribe to changes to child variables\n this._subs.add(\n this.subscribeToEvent(SceneVariableValueChangedEvent, (event) => this._handleVariableValueChanged(event.payload))\n );\n\n this._subs.add(\n timeRange.subscribeToState(() => {\n this._refreshTimeRangeBasedVariables();\n })\n );\n\n // Subscribe to state changes\n this._subs.add(this.subscribeToState(this._onStateChanged));\n\n this._checkForVariablesThatChangedWhileInactive();\n\n // Add all variables that need updating to queue\n for (const variable of this.state.variables) {\n if (this._variableNeedsUpdate(variable)) {\n this._variablesToUpdate.add(variable);\n }\n }\n\n this._updateNextBatch();\n\n // Return deactivation handler;\n return this._onDeactivate;\n };\n\n /**\n * Add all variables that depend on the changed variable to the update queue\n */\n private _refreshTimeRangeBasedVariables() {\n for (const variable of this.state.variables) {\n if ('refresh' in variable.state && variable.state.refresh === VariableRefresh.onTimeRangeChanged) {\n this._variablesToUpdate.add(variable);\n }\n }\n\n this._updateNextBatch();\n }\n\n /**\n * Cancel all currently running updates\n */\n private _onDeactivate = () => {\n for (const update of this._updating.values()) {\n update.subscription?.unsubscribe();\n }\n\n // Remember current variable values\n for (const variable of this.state.variables) {\n // if the current variable is not in queue to update and validate and not being actively updated then the value is ok\n if (!this._variablesToUpdate.has(variable) && !this._updating.has(variable)) {\n this._variableValueRecorder.recordCurrentValue(variable);\n }\n }\n\n this._variablesToUpdate.clear();\n this._updating.clear();\n };\n\n /**\n * Look for new variables that need to be initialized\n */\n private _onStateChanged = (newState: SceneVariableSetState, oldState: SceneVariableSetState) => {\n const variablesToUpdateCountStart = this._variablesToUpdate.size;\n\n // Check for removed variables\n for (const variable of oldState.variables) {\n if (!newState.variables.includes(variable)) {\n const updating = this._updating.get(variable);\n if (updating?.subscription) {\n updating.subscription.unsubscribe();\n }\n this._updating.delete(variable);\n this._variablesToUpdate.delete(variable);\n }\n }\n\n // Check for new variables\n for (const variable of newState.variables) {\n if (!oldState.variables.includes(variable)) {\n if (this._variableNeedsUpdate(variable)) {\n this._variablesToUpdate.add(variable);\n }\n }\n }\n\n // Only start a new batch if there was no batch already running\n if (variablesToUpdateCountStart === 0 && this._variablesToUpdate.size > 0) {\n this._updateNextBatch();\n }\n };\n\n /**\n * If variables changed while in in-active state we don't get any change events, so we need to check for that here.\n */\n private _checkForVariablesThatChangedWhileInactive() {\n if (!this._variableValueRecorder.hasValues()) {\n return;\n }\n\n for (const variable of this.state.variables) {\n if (this._variableValueRecorder.hasValueChanged(variable)) {\n writeVariableTraceLog(variable, 'Changed while in-active');\n this._addDependentVariablesToUpdateQueue(variable);\n }\n }\n }\n\n private _variableNeedsUpdate(variable: SceneVariable): boolean {\n if (!variable.validateAndUpdate) {\n return false;\n }\n\n // If we have recorded valid value (even if it has changed since we do not need to re-validate this variable)\n if (this._variableValueRecorder.hasRecordedValue(variable)) {\n writeVariableTraceLog(variable, 'Skipping updateAndValidate current value valid');\n return false;\n }\n\n return true;\n }\n\n /**\n * This loops through variablesToUpdate and update all that can.\n * If one has a dependency that is currently in variablesToUpdate it will be skipped for now.\n */\n private _updateNextBatch() {\n // If we have nothing more to update and variable values changed we need to update scene objects that depend on these variables\n if (this._variablesToUpdate.size === 0) {\n this._notifyDependentSceneObjects();\n return;\n }\n\n for (const variable of this._variablesToUpdate) {\n if (!variable.validateAndUpdate) {\n throw new Error('Variable added to variablesToUpdate but does not have validateAndUpdate');\n }\n\n // Ignore it if it's already started\n if (this._updating.has(variable)) {\n continue;\n }\n\n // Wait for variables that has dependencies that also needs updates\n if (this._hasDependendencyInUpdateQueue(variable)) {\n continue;\n }\n\n const variableToUpdate: VariableUpdateInProgress = {\n variable,\n };\n\n this._updating.set(variable, variableToUpdate);\n writeVariableTraceLog(variable, 'updateAndValidate started');\n\n variableToUpdate.subscription = variable.validateAndUpdate().subscribe({\n next: () => this._validateAndUpdateCompleted(variable),\n error: (err) => this._handleVariableError(variable, err),\n });\n }\n }\n\n /**\n * A variable has completed it's update process. This could mean that variables that depend on it can now be updated in turn.\n */\n private _validateAndUpdateCompleted(variable: SceneVariable) {\n const update = this._updating.get(variable);\n update?.subscription?.unsubscribe();\n\n this._updating.delete(variable);\n this._variablesToUpdate.delete(variable);\n\n writeVariableTraceLog(variable, 'updateAndValidate completed');\n\n this._updateNextBatch();\n }\n\n /**\n * TODO handle this properly (and show error in UI).\n * Not sure if this should be handled here on in MultiValueVariable\n */\n private _handleVariableError(variable: SceneVariable, err: Error) {\n const update = this._updating.get(variable);\n update?.subscription?.unsubscribe();\n\n this._updating.delete(variable);\n this._variablesToUpdate.delete(variable);\n variable.setState({ loading: false, error: err });\n\n writeVariableTraceLog(variable, 'updateAndValidate error', err);\n }\n\n /**\n * Checks if the variable has any dependencies that is currently in variablesToUpdate\n */\n private _hasDependendencyInUpdateQueue(variable: SceneVariable) {\n if (!variable.variableDependency) {\n return false;\n }\n\n for (const otherVariable of this._variablesToUpdate.values()) {\n if (variable.variableDependency?.hasDependencyOn(otherVariable.state.name)) {\n return true;\n }\n }\n\n return false;\n }\n\n private _handleVariableValueChanged(variableThatChanged: SceneVariable) {\n this._variablesThatHaveChanged.add(variableThatChanged);\n\n // Ignore this change if it is currently updating\n if (this._updating.has(variableThatChanged)) {\n return;\n }\n\n this._addDependentVariablesToUpdateQueue(variableThatChanged);\n this._updateNextBatch();\n }\n\n private _addDependentVariablesToUpdateQueue(variableThatChanged: SceneVariable) {\n for (const otherVariable of this.state.variables) {\n if (otherVariable.variableDependency) {\n if (otherVariable.variableDependency.hasDependencyOn(variableThatChanged.state.name)) {\n writeVariableTraceLog(otherVariable, 'Added to update queue, dependant variable value changed');\n this._variablesToUpdate.add(otherVariable);\n }\n }\n }\n }\n\n /**\n * Walk scene object graph and update all objects that depend on variables that have changed\n */\n private _notifyDependentSceneObjects() {\n if (!this.parent) {\n return;\n }\n\n this._traverseSceneAndNotify(this.parent);\n this._variablesThatHaveChanged.clear();\n }\n\n /**\n * Recursivly walk the full scene object graph and notify all objects with dependencies that include any of changed variables\n */\n private _traverseSceneAndNotify(sceneObject: SceneObject) {\n // No need to notify variables under this SceneVariableSet\n if (this === sceneObject) {\n return;\n }\n\n // Skip non active scene objects\n if (!sceneObject.isActive) {\n return;\n }\n\n if (sceneObject.variableDependency) {\n sceneObject.variableDependency.variableUpdatesCompleted(this._variablesThatHaveChanged);\n }\n\n sceneObject.forEachChild((child) => this._traverseSceneAndNotify(child));\n }\n\n /**\n * Return true if variable is waiting to update or currently updating\n */\n public isVariableLoadingOrWaitingToUpdate(variable: SceneVariable) {\n // If we have not activated yet then variables are not up to date\n if (!this.isActive) {\n return true;\n }\n\n return this._variablesToUpdate.has(variable) || this._updating.has(variable);\n }\n}\n\nexport interface VariableUpdateInProgress {\n variable: SceneVariable;\n subscription?: Unsubscribable;\n}\n\nfunction writeVariableTraceLog(variable: SceneVariable, message: string, err?: Error) {\n writeSceneLog('SceneVariableSet', `Variable[${variable.state.name}]: ${message}`, err);\n}\n","import { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneVariable, SceneVariableState, VariableValue } from '../types';\n\nexport interface ConstantVariableState extends SceneVariableState {\n value: string;\n}\n\nexport class ConstantVariable\n extends SceneObjectBase<ConstantVariableState>\n implements SceneVariable<ConstantVariableState>\n{\n public constructor(initialState: Partial<ConstantVariableState>) {\n super({\n type: 'constant',\n value: '',\n name: '',\n ...initialState,\n skipUrlSync: true,\n });\n }\n public getValue(): VariableValue {\n return this.state.value;\n }\n}\n","import { isArray } from 'lodash';\nimport React from 'react';\n\nimport { MultiSelect, Select } from '@grafana/ui';\n\nimport { SceneComponentProps } from '../../core/types';\nimport { MultiValueVariable } from '../variants/MultiValueVariable';\n\nexport function VariableValueSelect({ model }: SceneComponentProps<MultiValueVariable>) {\n const { value, key, loading } = model.useState();\n\n return (\n <Select\n id={key}\n placeholder=\"Select value\"\n width=\"auto\"\n value={value}\n allowCustomValue\n tabSelectsValue={false}\n isLoading={loading}\n options={model.getOptionsForSelect()}\n onChange={(newValue) => {\n model.changeValueTo(newValue.value!, newValue.label!);\n }}\n />\n );\n}\n\nexport function VariableValueSelectMulti({ model }: SceneComponentProps<MultiValueVariable>) {\n const { value, key, loading } = model.useState();\n const arrayValue = isArray(value) ? value : [value];\n\n return (\n <MultiSelect\n id={key}\n placeholder=\"Select value\"\n width=\"auto\"\n value={arrayValue}\n tabSelectsValue={false}\n allowCustomValue\n isLoading={loading}\n options={model.getOptionsForSelect()}\n closeMenuOnSelect={false}\n isClearable={true}\n onOpenMenu={() => {}}\n onChange={(newValue) => {\n model.changeValueTo(\n newValue.map((v) => v.value!),\n newValue.map((v) => v.label!)\n );\n }}\n />\n );\n}\n\nexport function renderSelectForVariable(model: MultiValueVariable) {\n if (model.state.isMulti) {\n return <VariableValueSelectMulti model={model} />;\n } else {\n return <VariableValueSelect model={model} />;\n }\n}\n","import { isEqual } from 'lodash';\nimport { map, Observable } from 'rxjs';\n\nimport { ALL_VARIABLE_TEXT, ALL_VARIABLE_VALUE } from '../constants';\n\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneObject, SceneObjectUrlSyncHandler, SceneObjectUrlValues } from '../../core/types';\nimport {\n SceneVariable,\n SceneVariableValueChangedEvent,\n SceneVariableState,\n ValidateAndUpdateResult,\n VariableValue,\n VariableValueOption,\n VariableValueSingle,\n CustomVariableValue,\n VariableCustomFormatterFn,\n} from '../types';\nimport { formatRegistry } from '../interpolation/formatRegistry';\nimport { VariableFormatID } from '@grafana/schema';\n\nexport interface MultiValueVariableState extends SceneVariableState {\n value: VariableValue; // old current.text\n text: VariableValue; // old current.value\n options: VariableValueOption[];\n isMulti?: boolean;\n includeAll?: boolean;\n defaultToAll?: boolean;\n allValue?: string;\n placeholder?: string;\n}\n\nexport interface VariableGetOptionsArgs {\n searchFilter?: string;\n}\n\nexport abstract class MultiValueVariable<TState extends MultiValueVariableState = MultiValueVariableState>\n extends SceneObjectBase<TState>\n implements SceneVariable<TState>\n{\n protected _urlSync: SceneObjectUrlSyncHandler = new MultiValueUrlSyncHandler(this);\n\n /**\n * The source of value options.\n */\n public abstract getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]>;\n\n /**\n * This function is called on when SceneVariableSet is activated or when a dependency changes.\n */\n public validateAndUpdate(): Observable<ValidateAndUpdateResult> {\n return this.getValueOptions({}).pipe(\n map((options) => {\n this.updateValueGivenNewOptions(options);\n return {};\n })\n );\n }\n\n /**\n * Check if current value is valid given new options. If not update the value.\n */\n private updateValueGivenNewOptions(options: VariableValueOption[]) {\n const stateUpdate: Partial<MultiValueVariableState> = {\n options,\n loading: false,\n value: this.state.value,\n text: this.state.text,\n };\n\n if (options.length === 0) {\n // TODO handle the no value state\n } else if (this.hasAllValue()) {\n // If value is set to All then we keep it set to All but just store the options\n } else if (this.state.isMulti) {\n // If we are a multi valued variable validate the current values are among the options\n const currentValues = Array.isArray(this.state.value) ? this.state.value : [this.state.value];\n const validValues = currentValues.filter((v) => options.find((o) => o.value === v));\n\n // If no valid values pick the first option\n if (validValues.length === 0) {\n const defaultState = this.getDefaultMultiState(options);\n stateUpdate.value = defaultState.value;\n stateUpdate.text = defaultState.text;\n }\n // We have valid values, if it's different from current valid values update current values\n else if (!isEqual(validValues, this.state.value)) {\n const validTexts = validValues.map((v) => options.find((o) => o.value === v)!.label);\n stateUpdate.value = validValues;\n stateUpdate.text = validTexts;\n }\n } else {\n // Single valued variable\n const foundCurrent = options.find((x) => x.value === this.state.value);\n if (!foundCurrent) {\n if (this.state.defaultToAll) {\n stateUpdate.value = ALL_VARIABLE_VALUE;\n stateUpdate.text = ALL_VARIABLE_TEXT;\n } else {\n // Current value is not valid. Set to first of the available options\n stateUpdate.value = options[0].value;\n stateUpdate.text = options[0].label;\n }\n }\n }\n\n // Remember current value and text\n const { value: prevValue, text: prevText } = this.state;\n\n // Perform state change\n this.setStateHelper(stateUpdate);\n\n // Publish value changed event only if value changed\n if (stateUpdate.value !== prevValue || stateUpdate.text !== prevText || this.hasAllValue()) {\n this.publishEvent(new SceneVariableValueChangedEvent(this), true);\n }\n }\n\n public getValue(): VariableValue {\n if (this.hasAllValue()) {\n if (this.state.allValue) {\n return new CustomAllValue(this.state.allValue, this);\n }\n\n return this.state.options.map((x) => x.value);\n }\n\n return this.state.value;\n }\n\n public getValueText(): string {\n if (this.hasAllValue()) {\n return ALL_VARIABLE_TEXT;\n }\n\n if (Array.isArray(this.state.text)) {\n return this.state.text.join(' + ');\n }\n\n return String(this.state.text);\n }\n\n private hasAllValue() {\n const value = this.state.value;\n return value === ALL_VARIABLE_VALUE || (Array.isArray(value) && value[0] === ALL_VARIABLE_VALUE);\n }\n\n private getDefaultMultiState(options: VariableValueOption[]) {\n if (this.state.defaultToAll) {\n return { value: [ALL_VARIABLE_VALUE], text: [ALL_VARIABLE_TEXT] };\n } else {\n return { value: [options[0].value], text: [options[0].label] };\n }\n }\n\n /**\n * Change the value and publish SceneVariableValueChangedEvent event\n */\n public changeValueTo(value: VariableValue, text?: VariableValue) {\n // Igore if there is no change\n if (value === this.state.value && text === this.state.text) {\n return;\n }\n\n if (!text) {\n if (Array.isArray(value)) {\n text = value.map((v) => this.findLabelTextForValue(v));\n } else {\n text = this.findLabelTextForValue(value);\n }\n }\n\n if (Array.isArray(value)) {\n // If we are a multi valued variable is cleared (empty array) we need to set the default empty state\n if (value.length === 0) {\n const state = this.getDefaultMultiState(this.state.options);\n value = state.value;\n text = state.text;\n }\n\n // If last value is the All value then replace all with it\n if (value[value.length - 1] === ALL_VARIABLE_VALUE) {\n value = [ALL_VARIABLE_VALUE];\n text = [ALL_VARIABLE_TEXT];\n }\n // If the first value is the ALL value and we have other values, then remove the All value\n else if (value[0] === ALL_VARIABLE_VALUE && value.length > 1) {\n value.shift();\n if (Array.isArray(text)) {\n text.shift();\n }\n }\n }\n\n this.setStateHelper({ value, text, loading: false });\n this.publishEvent(new SceneVariableValueChangedEvent(this), true);\n }\n\n private findLabelTextForValue(value: VariableValueSingle): VariableValueSingle {\n const option = this.state.options.find((x) => x.value === value);\n if (option) {\n return option.label;\n }\n\n const optionByLabel = this.state.options.find((x) => x.label === value);\n if (optionByLabel) {\n return optionByLabel.label;\n }\n\n return value;\n }\n\n /**\n * This helper function is to counter the contravariance of setState\n */\n private setStateHelper(state: Partial<MultiValueVariableState>) {\n const test: SceneObject<MultiValueVariableState> = this;\n test.setState(state);\n }\n\n public getOptionsForSelect(): VariableValueOption[] {\n let options = this.state.options;\n\n if (this.state.includeAll) {\n options = [{ value: ALL_VARIABLE_VALUE, label: ALL_VARIABLE_TEXT }, ...options];\n }\n\n if (!Array.isArray(this.state.value)) {\n const current = options.find((x) => x.value === this.state.value);\n if (!current) {\n options = [{ value: this.state.value, label: String(this.state.text) }, ...options];\n }\n }\n\n return options;\n }\n}\n\nexport class MultiValueUrlSyncHandler<TState extends MultiValueVariableState = MultiValueVariableState>\n implements SceneObjectUrlSyncHandler\n{\n public constructor(private _sceneObject: MultiValueVariable<TState>) {}\n\n private getKey(): string {\n return `var-${this._sceneObject.state.name}`;\n }\n\n public getKeys(): string[] {\n return [this.getKey()];\n }\n\n public getUrlState(): SceneObjectUrlValues {\n let urlValue: string | string[] | null = null;\n let value = this._sceneObject.state.value;\n\n if (Array.isArray(value)) {\n urlValue = value.map(String);\n } else {\n urlValue = String(value);\n }\n\n return { [this.getKey()]: urlValue };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues): void {\n const urlValue = values[this.getKey()];\n\n if (urlValue != null) {\n this._sceneObject.changeValueTo(urlValue);\n }\n }\n}\n\n/**\n * Variable getValue can return this to skip any subsequent formatting.\n * This is useful for custom all values that should not be escaped/formatted.\n */\nexport class CustomAllValue implements CustomVariableValue {\n public constructor(private _value: string, private _variable: SceneVariable) {}\n\n public formatter(formatNameOrFn?: string | VariableCustomFormatterFn): string {\n if (formatNameOrFn === VariableFormatID.Text) {\n return ALL_VARIABLE_TEXT;\n }\n\n if (formatNameOrFn === VariableFormatID.PercentEncode) {\n return formatRegistry.get(VariableFormatID.PercentEncode).formatter(this._value, [], this._variable);\n }\n\n if (formatNameOrFn === VariableFormatID.QueryParam) {\n return formatRegistry.get(VariableFormatID.QueryParam).formatter(ALL_VARIABLE_TEXT, [], this._variable);\n }\n\n return this._value;\n }\n}\n","import { Observable, of } from 'rxjs';\n\nimport { SceneComponentProps } from '../../core/types';\nimport { VariableDependencyConfig } from '../VariableDependencyConfig';\nimport { renderSelectForVariable } from '../components/VariableValueSelect';\nimport { VariableValueOption } from '../types';\n\nimport { MultiValueVariable, MultiValueVariableState, VariableGetOptionsArgs } from './MultiValueVariable';\n\nexport interface CustomVariableState extends MultiValueVariableState {\n query: string;\n}\n\nexport class CustomVariable extends MultiValueVariable<CustomVariableState> {\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['query'],\n });\n\n public constructor(initialState: Partial<CustomVariableState>) {\n super({\n type: 'custom',\n query: '',\n value: '',\n text: '',\n options: [],\n name: '',\n ...initialState,\n });\n }\n\n public getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]> {\n const match = this.state.query.match(/(?:\\\\,|[^,])+/g) ?? [];\n const options = match.map((text) => {\n text = text.replace(/\\\\,/g, ',');\n const textMatch = /^(.+)\\s:\\s(.+)$/g.exec(text) ?? [];\n if (textMatch.length === 3) {\n const [, key, value] = textMatch;\n return { label: key.trim(), value: value.trim() };\n } else {\n return { label: text.trim(), value: text.trim() };\n }\n });\n\n return of(options);\n }\n\n public static Component = ({ model }: SceneComponentProps<MultiValueVariable>) => {\n return renderSelectForVariable(model);\n };\n}\n","import { Observable, of } from 'rxjs';\n\nimport { stringToJsRegex, DataSourceInstanceSettings } from '@grafana/data';\nimport { getDataSourceSrv } from '@grafana/runtime';\n\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { SceneComponentProps } from '../../core/types';\nimport { VariableDependencyConfig } from '../VariableDependencyConfig';\nimport { renderSelectForVariable } from '../components/VariableValueSelect';\nimport { VariableValueOption } from '../types';\n\nimport { MultiValueVariable, MultiValueVariableState, VariableGetOptionsArgs } from './MultiValueVariable';\n\nexport interface DataSourceVariableState extends MultiValueVariableState {\n /**\n * Include all data source instances with this plugin id\n */\n pluginId: string;\n /**\n * Filter data source instances based on name\n */\n regex: string;\n}\n\nexport class DataSourceVariable extends MultiValueVariable<DataSourceVariableState> {\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['regex'],\n });\n\n public constructor(initialState: Partial<DataSourceVariableState>) {\n super({\n type: 'datasource',\n value: '',\n text: '',\n options: [],\n name: '',\n regex: '',\n pluginId: '',\n ...initialState,\n });\n }\n\n public getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]> {\n if (!this.state.pluginId) {\n return of([]);\n }\n\n const dataSourceTypes = this.getDataSourceTypes();\n\n let regex;\n if (this.state.regex) {\n const interpolated = sceneGraph.interpolate(this, this.state.regex, undefined, 'regex');\n regex = stringToJsRegex(interpolated);\n }\n\n const options: VariableValueOption[] = [];\n\n for (let i = 0; i < dataSourceTypes.length; i++) {\n const source = dataSourceTypes[i];\n // must match on type\n if (source.meta.id !== this.state.pluginId) {\n continue;\n }\n\n if (isValid(source, regex)) {\n options.push({ label: source.name, value: source.name });\n }\n\n if (isDefault(source, regex)) {\n options.push({ label: 'default', value: 'default' });\n }\n }\n\n if (options.length === 0) {\n options.push({ label: 'No data sources found', value: '' });\n }\n\n return of(options);\n }\n\n private getDataSourceTypes(): DataSourceInstanceSettings[] {\n return getDataSourceSrv().getList({ metrics: true, variables: false });\n }\n\n public static Component = ({ model }: SceneComponentProps<MultiValueVariable>) => {\n return renderSelectForVariable(model);\n };\n}\n\nfunction isValid(source: DataSourceInstanceSettings, regex?: RegExp) {\n if (!regex) {\n return true;\n }\n\n return regex.exec(source.name);\n}\n\nfunction isDefault(source: DataSourceInstanceSettings, regex?: RegExp) {\n if (!source.isDefault) {\n return false;\n }\n\n if (!regex) {\n return true;\n }\n\n return regex.exec('default');\n}\n","import {\n DataQuery,\n DataSourceJsonData,\n DataSourceApi,\n MetricFindValue,\n VariableSupportType,\n StandardVariableQuery,\n DataQueryRequest,\n DataQueryResponse,\n QueryEditorProps,\n} from '@grafana/data';\nimport { TemplateSrv } from '@grafana/runtime';\nimport { ComponentType } from 'react';\n\nimport { Observable } from 'rxjs';\n\n/**\n * Interfaces and guards below are copied from core.\n * Not exposing via grafana/data as these are not intended to be used in context other than variables.\n */\n\ninterface DataSourceWithLegacyVariableSupport<\n TQuery extends DataQuery = DataQuery,\n TOptions extends DataSourceJsonData = DataSourceJsonData\n> extends DataSourceApi<TQuery, TOptions> {\n metricFindQuery(query: any, options?: any): Promise<MetricFindValue[]>;\n variables: undefined;\n}\n\ninterface DataSourceWithStandardVariableSupport<\n TQuery extends DataQuery = DataQuery,\n TOptions extends DataSourceJsonData = DataSourceJsonData\n> extends DataSourceApi<TQuery, TOptions> {\n variables: {\n getType(): VariableSupportType;\n toDataQuery(query: StandardVariableQuery): TQuery;\n query(request: DataQueryRequest<TQuery>): Observable<DataQueryResponse>;\n };\n}\n\ninterface DataSourceWithCustomVariableSupport<\n TQuery extends DataQuery = DataQuery,\n TOptions extends DataSourceJsonData = DataSourceJsonData\n> extends DataSourceApi<TQuery, TOptions> {\n variables: {\n getType(): VariableSupportType;\n editor: VariableQueryEditorType;\n query(request: DataQueryRequest<TQuery>): Observable<DataQueryResponse>;\n };\n}\n\ninterface VariableQueryEditorProps {\n query: any;\n onChange: (query: any, definition: string) => void;\n datasource: any;\n templateSrv: TemplateSrv;\n}\n\ntype VariableQueryEditorType<\n TQuery extends DataQuery = DataQuery,\n TOptions extends DataSourceJsonData = DataSourceJsonData\n> = ComponentType<VariableQueryEditorProps> | ComponentType<QueryEditorProps<any, TQuery, TOptions, any>> | null;\n\nexport const hasLegacyVariableSupport = <\n TQuery extends DataQuery = DataQuery,\n TOptions extends DataSourceJsonData = DataSourceJsonData\n>(\n datasource: DataSourceApi<TQuery, TOptions>\n): datasource is DataSourceWithLegacyVariableSupport<TQuery, TOptions> => {\n return Boolean(datasource.metricFindQuery) && !Boolean(datasource.variables);\n};\n\nexport const hasStandardVariableSupport = <\n TQuery extends DataQuery = DataQuery,\n TOptions extends DataSourceJsonData = DataSourceJsonData\n>(\n datasource: DataSourceApi<TQuery, TOptions>\n): datasource is DataSourceWithStandardVariableSupport<TQuery, TOptions> => {\n if (!datasource.variables) {\n return false;\n }\n\n if (datasource.variables.getType() !== VariableSupportType.Standard) {\n return false;\n }\n\n const variableSupport = datasource.variables;\n return 'toDataQuery' in variableSupport && Boolean(variableSupport.toDataQuery);\n};\n\nexport const hasCustomVariableSupport = <\n TQuery extends DataQuery = DataQuery,\n TOptions extends DataSourceJsonData = DataSourceJsonData\n>(\n datasource: DataSourceApi<TQuery, TOptions>\n): datasource is DataSourceWithCustomVariableSupport<TQuery, TOptions> => {\n if (!datasource.variables) {\n return false;\n }\n\n if (datasource.variables.getType() !== VariableSupportType.Custom) {\n return false;\n }\n\n const variableSupport = datasource.variables;\n return (\n 'query' in variableSupport &&\n 'editor' in variableSupport &&\n Boolean(variableSupport.query) &&\n Boolean(variableSupport.editor)\n );\n};\n","import { from, mergeMap, Observable, of } from 'rxjs';\n\nimport {\n DataQuery,\n DataQueryRequest,\n DataSourceApi,\n getDefaultTimeRange,\n LoadingState,\n PanelData,\n} from '@grafana/data';\nimport { getRunRequest } from '@grafana/runtime';\n\nimport { hasCustomVariableSupport, hasLegacyVariableSupport, hasStandardVariableSupport } from './guards';\n\nimport { QueryVariable } from './QueryVariable';\n\nexport interface RunnerArgs {\n searchFilter?: string;\n variable: QueryVariable;\n}\n\nexport interface QueryRunner {\n getTarget: (variable: QueryVariable) => DataQuery;\n runRequest: (args: RunnerArgs, request: DataQueryRequest) => Observable<PanelData>;\n}\n\nclass StandardQueryRunner implements QueryRunner {\n public constructor(private datasource: DataSourceApi, private _runRequest = getRunRequest()) {}\n\n public getTarget(variable: QueryVariable) {\n if (hasStandardVariableSupport(this.datasource)) {\n return this.datasource.variables.toDataQuery(variable.state.query);\n }\n\n throw new Error(\"Couldn't create a target with supplied arguments.\");\n }\n\n public runRequest(_: RunnerArgs, request: DataQueryRequest) {\n if (!hasStandardVariableSupport(this.datasource)) {\n return getEmptyMetricFindValueObservable();\n }\n\n if (!this.datasource.variables.query) {\n return this._runRequest(this.datasource, request);\n }\n\n return this._runRequest(this.datasource, request, this.datasource.variables.query);\n }\n}\n\nclass LegacyQueryRunner implements QueryRunner {\n public constructor(private datasource: DataSourceApi) {}\n\n public getTarget(variable: QueryVariable) {\n if (hasLegacyVariableSupport(this.datasource)) {\n return variable.state.query;\n }\n\n throw new Error(\"Couldn't create a target with supplied arguments.\");\n }\n\n public runRequest({ variable }: RunnerArgs, request: DataQueryRequest) {\n if (!hasLegacyVariableSupport(this.datasource)) {\n return getEmptyMetricFindValueObservable();\n }\n\n return from(\n this.datasource.metricFindQuery(variable.state.query, {\n ...request,\n // variable is used by SQL common data source\n variable: {\n name: variable.state.name,\n type: variable.state.type,\n },\n // TODO: add support for search filter\n // searchFilter\n })\n ).pipe(\n mergeMap((values) => {\n if (!values || !values.length) {\n return getEmptyMetricFindValueObservable();\n }\n\n const series: any = values;\n return of({ series, state: LoadingState.Done, timeRange: request.range });\n })\n );\n }\n}\n\nclass CustomQueryRunner implements QueryRunner {\n public constructor(private datasource: DataSourceApi, private _runRequest = getRunRequest()) {}\n\n public getTarget(variable: QueryVariable) {\n if (hasCustomVariableSupport(this.datasource)) {\n return variable.state.query;\n }\n\n throw new Error(\"Couldn't create a target with supplied arguments.\");\n }\n\n public runRequest(_: RunnerArgs, request: DataQueryRequest) {\n if (!hasCustomVariableSupport(this.datasource)) {\n return getEmptyMetricFindValueObservable();\n }\n\n if (!this.datasource.variables.query) {\n return this._runRequest(this.datasource, request);\n }\n return this._runRequest(this.datasource, request, this.datasource.variables.query);\n }\n}\n\nfunction getEmptyMetricFindValueObservable(): Observable<PanelData> {\n return of({ state: LoadingState.Done, series: [], timeRange: getDefaultTimeRange() });\n}\n\nfunction createQueryVariableRunnerFactory(datasource: DataSourceApi): QueryRunner {\n if (hasStandardVariableSupport(datasource)) {\n return new StandardQueryRunner(datasource, getRunRequest());\n }\n\n if (hasLegacyVariableSupport(datasource)) {\n return new LegacyQueryRunner(datasource);\n }\n\n if (hasCustomVariableSupport(datasource)) {\n return new CustomQueryRunner(datasource);\n }\n\n throw new Error(`Couldn't create a query runner for datasource ${datasource.type}`);\n}\n\nexport let createQueryVariableRunner = createQueryVariableRunnerFactory;\n\n/**\n * Use only in tests\n */\nexport function setCreateQueryVariableRunnerFactory(fn: (datasource: DataSourceApi) => QueryRunner) {\n createQueryVariableRunner = fn;\n}\n","import { isNumber, sortBy, toLower, uniqBy } from 'lodash';\n\nimport { stringToJsRegex, VariableSort } from '@grafana/data';\n\nimport { VariableValueOption } from '../../types';\n\nexport const metricNamesToVariableValues = (variableRegEx: string, sort: VariableSort, metricNames: any[]) => {\n let regex;\n let options: VariableValueOption[] = [];\n\n if (variableRegEx) {\n regex = stringToJsRegex(variableRegEx);\n }\n\n for (let i = 0; i < metricNames.length; i++) {\n const item = metricNames[i];\n let text = item.text === undefined || item.text === null ? item.value : item.text;\n let value = item.value === undefined || item.value === null ? item.text : item.value;\n\n if (isNumber(value)) {\n value = value.toString();\n }\n\n if (isNumber(text)) {\n text = text.toString();\n }\n\n if (regex) {\n const matches = getAllMatches(value, regex);\n if (!matches.length) {\n continue;\n }\n\n const valueGroup = matches.find((m) => m.groups && m.groups.value);\n const textGroup = matches.find((m) => m.groups && m.groups.text);\n const firstMatch = matches.find((m) => m.length > 1);\n const manyMatches = matches.length > 1 && firstMatch;\n\n if (valueGroup || textGroup) {\n value = valueGroup?.groups?.value ?? textGroup?.groups?.text;\n text = textGroup?.groups?.text ?? valueGroup?.groups?.value;\n } else if (manyMatches) {\n for (let j = 0; j < matches.length; j++) {\n const match = matches[j];\n options.push({ label: match[1], value: match[1] });\n }\n continue;\n } else if (firstMatch) {\n text = firstMatch[1];\n value = firstMatch[1];\n }\n }\n\n options.push({ label: text, value: value });\n }\n\n options = uniqBy(options, 'value');\n return sortVariableValues(options, sort);\n};\n\nconst getAllMatches = (str: string, regex: RegExp): RegExpExecArray[] => {\n const results: RegExpExecArray[] = [];\n let matches = null;\n\n regex.lastIndex = 0;\n\n do {\n matches = regex.exec(str);\n if (matches) {\n results.push(matches);\n }\n } while (regex.global && matches && matches[0] !== '' && matches[0] !== undefined);\n\n return results;\n};\n\nexport const sortVariableValues = (options: any[], sortOrder: VariableSort) => {\n if (sortOrder === VariableSort.disabled) {\n return options;\n }\n\n const sortType = Math.ceil(sortOrder / 2);\n const reverseSort = sortOrder % 2 === 0;\n\n if (sortType === 1) {\n options = sortBy(options, 'text');\n } else if (sortType === 2) {\n options = sortBy(options, (opt) => {\n if (!opt.text) {\n return -1;\n }\n\n const matches = opt.text.match(/.*?(\\d+).*/);\n if (!matches || matches.length < 2) {\n return -1;\n } else {\n return parseInt(matches[1], 10);\n }\n });\n } else if (sortType === 3) {\n options = sortBy(options, (opt) => {\n return toLower(opt.text);\n });\n }\n\n if (reverseSort) {\n options = options.reverse();\n }\n\n return options;\n};\n","import {\n FieldType,\n getFieldDisplayName,\n isDataFrame,\n MetricFindValue,\n PanelData,\n getProcessedDataFrames,\n} from '@grafana/data';\nimport { map, OperatorFunction } from 'rxjs';\n\nexport function toMetricFindValues(): OperatorFunction<PanelData, MetricFindValue[]> {\n return (source) =>\n source.pipe(\n map((panelData) => {\n const frames = panelData.series;\n if (!frames || !frames.length) {\n return [];\n }\n\n if (areMetricFindValues(frames)) {\n return frames;\n }\n\n const processedDataFrames = getProcessedDataFrames(frames);\n const metrics: MetricFindValue[] = [];\n\n let valueIndex = -1;\n let textIndex = -1;\n let stringIndex = -1;\n let expandableIndex = -1;\n\n for (const frame of processedDataFrames) {\n for (let index = 0; index < frame.fields.length; index++) {\n const field = frame.fields[index];\n const fieldName = getFieldDisplayName(field, frame, frames).toLowerCase();\n\n if (field.type === FieldType.string && stringIndex === -1) {\n stringIndex = index;\n }\n\n if (fieldName === 'text' && field.type === FieldType.string && textIndex === -1) {\n textIndex = index;\n }\n\n if (fieldName === 'value' && field.type === FieldType.string && valueIndex === -1) {\n valueIndex = index;\n }\n\n if (\n fieldName === 'expandable' &&\n (field.type === FieldType.boolean || field.type === FieldType.number) &&\n expandableIndex === -1\n ) {\n expandableIndex = index;\n }\n }\n }\n\n if (stringIndex === -1) {\n throw new Error(\"Couldn't find any field of type string in the results.\");\n }\n\n for (const frame of frames) {\n for (let index = 0; index < frame.length; index++) {\n const expandable = expandableIndex !== -1 ? frame.fields[expandableIndex].values.get(index) : undefined;\n const string = frame.fields[stringIndex].values.get(index);\n const text = textIndex !== -1 ? frame.fields[textIndex].values.get(index) : null;\n const value = valueIndex !== -1 ? frame.fields[valueIndex].values.get(index) : null;\n\n if (valueIndex === -1 && textIndex === -1) {\n metrics.push({ text: string, value: string, expandable });\n continue;\n }\n\n if (valueIndex === -1 && textIndex !== -1) {\n metrics.push({ text, value: text, expandable });\n continue;\n }\n\n if (valueIndex !== -1 && textIndex === -1) {\n metrics.push({ text: value, value, expandable });\n continue;\n }\n\n metrics.push({ text, value, expandable });\n }\n }\n\n return metrics;\n })\n );\n}\n\nfunction areMetricFindValues(data: any[]): data is MetricFindValue[] {\n if (!data) {\n return false;\n }\n\n if (!data.length) {\n return true;\n }\n\n const firstValue: any = data[0];\n\n if (isDataFrame(firstValue)) {\n return false;\n }\n\n for (const firstValueKey in firstValue) {\n if (!firstValue.hasOwnProperty(firstValueKey)) {\n continue;\n }\n\n if (\n firstValue[firstValueKey] !== null &&\n typeof firstValue[firstValueKey] !== 'string' &&\n typeof firstValue[firstValueKey] !== 'number'\n ) {\n continue;\n }\n\n const key = firstValueKey.toLowerCase();\n\n if (key === 'text' || key === 'value') {\n return true;\n }\n }\n\n return false;\n}\n","import React from 'react';\nimport { Observable, of, filter, take, mergeMap, catchError, throwError, from } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n CoreApp,\n DataQuery,\n DataQueryRequest,\n DataSourceRef,\n getDefaultTimeRange,\n LoadingState,\n PanelData,\n ScopedVars,\n VariableRefresh,\n VariableSort,\n} from '@grafana/data';\n\nimport { sceneGraph } from '../../../core/sceneGraph';\nimport { SceneComponentProps } from '../../../core/types';\nimport { VariableDependencyConfig } from '../../VariableDependencyConfig';\nimport { VariableValueSelect } from '../../components/VariableValueSelect';\nimport { VariableValueOption } from '../../types';\nimport { MultiValueVariable, MultiValueVariableState, VariableGetOptionsArgs } from '../MultiValueVariable';\n\nimport { createQueryVariableRunner } from './createQueryVariableRunner';\nimport { metricNamesToVariableValues } from './utils';\nimport { toMetricFindValues } from './toMetricFindValues';\nimport { getDataSource } from '../../../utils/getDataSource';\n\nexport interface QueryVariableState extends MultiValueVariableState {\n type: 'query';\n datasource: DataSourceRef | null;\n query: any;\n regex: string;\n refresh: VariableRefresh;\n sort: VariableSort;\n}\n\nexport class QueryVariable extends MultiValueVariable<QueryVariableState> {\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['regex', 'query', 'datasource'],\n });\n\n public constructor(initialState: Partial<QueryVariableState>) {\n super({\n type: 'query',\n name: '',\n value: '',\n text: '',\n query: '',\n options: [],\n datasource: null,\n regex: '',\n refresh: VariableRefresh.onDashboardLoad,\n sort: VariableSort.alphabeticalAsc,\n ...initialState,\n });\n }\n\n public getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]> {\n if (this.state.query === '' || !this.state.datasource) {\n return of([]);\n }\n\n this.setState({ loading: true });\n\n return from(\n getDataSource(this.state.datasource, {\n __sceneObject: { text: '__sceneObject', value: this },\n })\n ).pipe(\n mergeMap((ds) => {\n const runner = createQueryVariableRunner(ds);\n const target = runner.getTarget(this);\n const request = this.getRequest(target);\n return runner.runRequest({ variable: this }, request).pipe(\n filter((data) => data.state === LoadingState.Done || data.state === LoadingState.Error), // we only care about done or error for now\n take(1), // take the first result, using first caused a bug where it in some situations throw an uncaught error because of no results had been received yet\n mergeMap((data: PanelData) => {\n if (data.state === LoadingState.Error) {\n return throwError(() => data.error);\n }\n return of(data);\n }),\n toMetricFindValues(),\n mergeMap((values) => {\n let regex = '';\n if (this.state.regex) {\n regex = sceneGraph.interpolate(this, this.state.regex, undefined, 'regex');\n }\n return of(metricNamesToVariableValues(regex, this.state.sort, values));\n }),\n catchError((error) => {\n if (error.cancelled) {\n return of([]);\n }\n return throwError(() => error);\n })\n );\n })\n );\n }\n\n private getRequest(target: DataQuery) {\n // TODO: add support for search filter\n // const { searchFilter } = this.state.searchFilter;\n // const searchFilterScope = { searchFilter: { text: searchFilter, value: searchFilter } };\n // const searchFilterAsVars = searchFilter ? searchFilterScope : {};\n const scopedVars: ScopedVars = {\n // ...searchFilterAsVars,\n __sceneObject: { text: '__sceneObject', value: this },\n };\n\n const range =\n this.state.refresh === VariableRefresh.onTimeRangeChanged\n ? sceneGraph.getTimeRange(this).state.value\n : getDefaultTimeRange();\n\n const request: DataQueryRequest = {\n app: CoreApp.Dashboard,\n requestId: uuidv4(),\n timezone: '',\n range,\n interval: '',\n intervalMs: 0,\n targets: [target],\n scopedVars,\n startTime: Date.now(),\n };\n return request;\n }\n\n public static Component = ({ model }: SceneComponentProps<MultiValueVariable>) => {\n return <VariableValueSelect model={model} />;\n };\n}\n","export interface TreeNode {\n name: string;\n children: TreeNode[];\n}\n\n/*\n * Builds a nested tree like\n * [\n * {\n * name: 'A',\n * children: [\n * { name: 'AA', children: [] },\n * { name: 'AB', children: [] },\n * ]\n * }\n * ]\n */\nfunction buildMetricTree(parent: string, depth: number): TreeNode[] {\n const chars = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'];\n const children: TreeNode[] = [];\n\n if (depth > 5) {\n return [];\n }\n\n for (const letter of chars) {\n const nodeName = `${parent}${letter}`;\n children.push({\n name: nodeName,\n children: buildMetricTree(nodeName, depth + 1),\n });\n }\n\n return children;\n}\n\nfunction queryTree(children: TreeNode[], query: string[], queryIndex: number): TreeNode[] {\n if (queryIndex >= query.length) {\n return children;\n }\n\n if (query[queryIndex] === '*') {\n return children;\n }\n\n const nodeQuery = query[queryIndex];\n let result: TreeNode[] = [];\n let namesToMatch = [nodeQuery];\n\n // handle glob queries\n if (nodeQuery.startsWith('{')) {\n namesToMatch = nodeQuery.replace(/\\{|\\}/g, '').split(',');\n }\n\n for (const node of children) {\n for (const nameToMatch of namesToMatch) {\n if (nameToMatch.indexOf('*') !== -1) {\n const pattern = nameToMatch.replace('*', '');\n const regex = new RegExp(`^${pattern}.*`, 'gi');\n if (regex.test(node.name)) {\n result = result.concat(queryTree([node], query, queryIndex + 1));\n }\n } else if (node.name === nameToMatch) {\n result = result.concat(queryTree(node.children, query, queryIndex + 1));\n }\n }\n }\n\n return result;\n}\n\nexport function queryMetricTree(query: string): TreeNode[] {\n if (query.indexOf('value') === 0) {\n return [{ name: query, children: [] }];\n }\n\n const children = buildMetricTree('', 0);\n return queryTree(children, query.split('.'), 0);\n}\n","import { Observable, Subject } from 'rxjs';\n\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { SceneComponentProps } from '../../core/types';\nimport { queryMetricTree } from '../../utils/metricTree';\nimport { VariableDependencyConfig } from '../VariableDependencyConfig';\nimport { renderSelectForVariable } from '../components/VariableValueSelect';\nimport { VariableValueOption } from '../types';\n\nimport { MultiValueVariable, MultiValueVariableState, VariableGetOptionsArgs } from './MultiValueVariable';\nimport { VariableRefresh } from '@grafana/data';\n\nexport interface TestVariableState extends MultiValueVariableState {\n query: string;\n delayMs?: number;\n issuedQuery?: string;\n refresh?: VariableRefresh;\n}\n\n/**\n * This variable is only designed for unit tests and potentially e2e tests.\n */\nexport class TestVariable extends MultiValueVariable<TestVariableState> {\n private completeUpdate = new Subject<number>();\n public isGettingValues = true;\n public getValueOptionsCount = 0;\n\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['query'],\n });\n\n public constructor(initialState: Partial<TestVariableState>) {\n super({\n type: 'custom',\n name: 'Test',\n value: 'Value',\n text: 'Text',\n query: 'Query',\n options: [],\n refresh: VariableRefresh.onDashboardLoad,\n ...initialState,\n });\n }\n\n public getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]> {\n const { delayMs } = this.state;\n\n this.getValueOptionsCount += 1;\n\n return new Observable<VariableValueOption[]>((observer) => {\n this.setState({ loading: true });\n\n const sub = this.completeUpdate.subscribe({\n next: () => {\n observer.next(this.issueQuery());\n },\n });\n\n let timeout: NodeJS.Timeout | undefined;\n\n if (delayMs) {\n timeout = setTimeout(() => this.signalUpdateCompleted(), delayMs);\n }\n\n this.isGettingValues = true;\n\n return () => {\n sub.unsubscribe();\n clearTimeout(timeout);\n this.isGettingValues = false;\n };\n });\n }\n\n private issueQuery() {\n const interpolatedQuery = sceneGraph.interpolate(this, this.state.query);\n const options = queryMetricTree(interpolatedQuery).map((x) => ({ label: x.name, value: x.name }));\n\n this.setState({\n issuedQuery: interpolatedQuery,\n options,\n });\n\n return options;\n }\n\n /** Useful from tests */\n public signalUpdateCompleted() {\n this.completeUpdate.next(1);\n }\n\n public static Component = ({ model }: SceneComponentProps<MultiValueVariable>) => {\n return renderSelectForVariable(model);\n };\n}\n","import React, { useState, useCallback } from 'react';\n\nimport { Input } from '@grafana/ui';\n\nimport { SceneComponentProps } from '../../core/types';\nimport { TextBoxVariable } from '../variants/TextBoxVariable';\nimport { useDebounce } from 'react-use';\n\nexport function VariableValueInput({ model }: SceneComponentProps<TextBoxVariable>) {\n const { value, key, loading } = model.useState();\n const [textValue, setTextValue] = useState(value);\n useDebounce(\n () => {\n model.setValue(textValue);\n },\n 250,\n [textValue]\n );\n\n const onChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setTextValue(e.target.value);\n },\n [setTextValue]\n );\n\n return <Input id={key} placeholder=\"Enter variable value\" value={textValue} loading={loading} onChange={onChange} />;\n}\n","import React from 'react';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneComponentProps, SceneObjectUrlSyncHandler, SceneObjectUrlValues } from '../../core/types';\nimport { SceneObjectUrlSyncConfig } from '../../services/SceneObjectUrlSyncConfig';\nimport { VariableValueInput } from '../components/VariableValueInput';\nimport { SceneVariable, SceneVariableState, SceneVariableValueChangedEvent, VariableValue } from '../types';\n\nexport interface TextBoxVariableState extends SceneVariableState {\n value: string;\n}\n\nexport class TextBoxVariable\n extends SceneObjectBase<TextBoxVariableState>\n implements SceneVariable<TextBoxVariableState>\n{\n protected _urlSync: SceneObjectUrlSyncHandler;\n\n public constructor(initialState: Partial<TextBoxVariableState>) {\n super({\n type: 'textbox',\n value: '',\n name: '',\n ...initialState,\n });\n\n this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: [this.getKey()] });\n }\n\n public getValue(): VariableValue {\n return this.state.value;\n }\n\n public setValue(newValue: string) {\n this.setState({ value: newValue });\n this.publishEvent(new SceneVariableValueChangedEvent(this), true);\n }\n\n private getKey(): string {\n return `var-${this.state.name}`;\n }\n\n public getUrlState() {\n return { [this.getKey()]: this.state.value };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues) {\n const update: Partial<TextBoxVariableState> = {};\n const val = values[this.getKey()];\n if (typeof val === 'string') {\n update.value = val;\n }\n\n this.setState(update);\n }\n\n public static Component = ({ model }: SceneComponentProps<TextBoxVariable>) => {\n return <VariableValueInput model={model} />;\n };\n}\n","import { Location, UnregisterCallback } from 'history';\nimport { isEqual } from 'lodash';\n\nimport { locationService } from '@grafana/runtime';\n\nimport { SceneObjectStateChangedEvent } from '../core/events';\nimport { SceneObject, SceneObjectUrlValue, SceneObjectUrlValues } from '../core/types';\nimport { writeSceneLog } from '../utils/writeSceneLog';\nimport { Unsubscribable } from 'rxjs';\n\nexport interface UrlSyncManagerLike {\n initSync(root: SceneObject): void;\n cleanUp(root: SceneObject): void;\n}\n\nexport class UrlSyncManager implements UrlSyncManagerLike {\n private urlKeyMapper = new UniqueUrlKeyMapper();\n private _sceneRoot!: SceneObject;\n private _stateSub: Unsubscribable | null = null;\n private _locationSub?: UnregisterCallback | null = null;\n\n /**\n * Updates the current scene state to match URL state.\n */\n public initSync(root: SceneObject) {\n if (!this._locationSub) {\n writeSceneLog('UrlSyncManager', 'New location listen');\n this._locationSub = locationService.getHistory().listen(this._onLocationUpdate);\n }\n\n if (this._stateSub) {\n writeSceneLog('UrlSyncManager', 'Unregister previous scene state subscription', this._sceneRoot.state.key);\n this._stateSub.unsubscribe();\n }\n\n this._sceneRoot = root;\n this._stateSub = root.subscribeToEvent(SceneObjectStateChangedEvent, this._onStateChanged);\n\n this.syncFrom(this._sceneRoot);\n }\n\n public cleanUp(root: SceneObject) {\n // Ignore this if we have a new or different root\n if (this._sceneRoot !== root) {\n return;\n }\n\n writeSceneLog('UrlSyncManager', 'Clean up');\n\n if (this._locationSub) {\n this._locationSub();\n writeSceneLog('UrlSyncManager', 'Unregister history listen');\n this._locationSub = null;\n }\n\n if (this._stateSub) {\n this._stateSub.unsubscribe();\n this._stateSub = null;\n writeSceneLog(\n 'UrlSyncManager',\n 'Root deactived, unsub to state',\n 'same key',\n this._sceneRoot.state.key === root.state.key\n );\n }\n }\n\n public syncFrom(sceneObj: SceneObject) {\n const urlParams = locationService.getSearch();\n // The index is always from the root\n this.urlKeyMapper.rebuldIndex(this._sceneRoot);\n this._syncSceneStateFromUrl(sceneObj, urlParams);\n }\n\n private _onLocationUpdate = (location: Location) => {\n const urlParams = new URLSearchParams(location.search);\n // Rebuild key mapper index before starting sync\n this.urlKeyMapper.rebuldIndex(this._sceneRoot);\n // Sync scene state tree from url\n this._syncSceneStateFromUrl(this._sceneRoot, urlParams);\n };\n\n private _onStateChanged = ({ payload }: SceneObjectStateChangedEvent) => {\n const changedObject = payload.changedObject;\n\n if (changedObject.urlSync) {\n const newUrlState = changedObject.urlSync.getUrlState();\n\n const searchParams = locationService.getSearch();\n const mappedUpdated: SceneObjectUrlValues = {};\n\n this.urlKeyMapper.rebuldIndex(this._sceneRoot);\n\n for (const [key, newUrlValue] of Object.entries(newUrlState)) {\n const uniqueKey = this.urlKeyMapper.getUniqueKey(key, changedObject);\n const currentUrlValue = searchParams.getAll(uniqueKey);\n\n if (!isUrlValueEqual(currentUrlValue, newUrlValue)) {\n mappedUpdated[uniqueKey] = newUrlValue;\n }\n }\n\n if (Object.keys(mappedUpdated).length > 0) {\n locationService.partial(mappedUpdated, true);\n }\n }\n };\n\n private _syncSceneStateFromUrl(sceneObject: SceneObject, urlParams: URLSearchParams) {\n if (sceneObject.urlSync) {\n const urlState: SceneObjectUrlValues = {};\n const currentState = sceneObject.urlSync.getUrlState();\n\n for (const key of sceneObject.urlSync.getKeys()) {\n const uniqueKey = this.urlKeyMapper.getUniqueKey(key, sceneObject);\n const newValue = urlParams.getAll(uniqueKey);\n const currentValue = currentState[key];\n\n if (isUrlValueEqual(newValue, currentValue)) {\n continue;\n }\n\n if (newValue.length > 0) {\n if (Array.isArray(currentValue)) {\n urlState[key] = newValue;\n } else {\n urlState[key] = newValue[0];\n }\n } else {\n // mark this key as having no url state\n urlState[key] = null;\n }\n }\n\n if (Object.keys(urlState).length > 0) {\n sceneObject.urlSync.updateFromUrl(urlState);\n }\n }\n\n sceneObject.forEachChild((child) => this._syncSceneStateFromUrl(child, urlParams));\n }\n}\n\ninterface SceneObjectWithDepth {\n sceneObject: SceneObject;\n depth: number;\n}\nclass UniqueUrlKeyMapper {\n private index = new Map<string, SceneObjectWithDepth[]>();\n\n public getUniqueKey(key: string, obj: SceneObject) {\n const objectsWithKey = this.index.get(key);\n if (!objectsWithKey) {\n throw new Error(\"Cannot find any scene object that uses the key '\" + key + \"'\");\n }\n\n const address = objectsWithKey.findIndex((o) => o.sceneObject === obj);\n if (address > 0) {\n return `${key}-${address + 1}`;\n }\n\n return key;\n }\n\n public rebuldIndex(root: SceneObject) {\n this.index.clear();\n this.buildIndex(root, 0);\n }\n\n private buildIndex(sceneObject: SceneObject, depth: number) {\n if (sceneObject.urlSync) {\n for (const key of sceneObject.urlSync.getKeys()) {\n const hit = this.index.get(key);\n if (hit) {\n hit.push({ sceneObject, depth });\n hit.sort((a, b) => a.depth - b.depth);\n } else {\n this.index.set(key, [{ sceneObject, depth }]);\n }\n }\n }\n\n sceneObject.forEachChild((child) => this.buildIndex(child, depth + 1));\n }\n}\n\nexport function isUrlValueEqual(currentUrlValue: string[], newUrlValue: SceneObjectUrlValue): boolean {\n if (currentUrlValue.length === 0 && newUrlValue == null) {\n return true;\n }\n\n if (!Array.isArray(newUrlValue) && currentUrlValue?.length === 1) {\n return newUrlValue === currentUrlValue[0];\n }\n\n if (newUrlValue?.length === 0 && currentUrlValue === null) {\n return true;\n }\n\n // We have two arrays, lets compare them\n return isEqual(currentUrlValue, newUrlValue);\n}\n\nlet urlSyncManager: UrlSyncManagerLike | undefined;\n\nexport function getUrlSyncManager(): UrlSyncManagerLike {\n if (!urlSyncManager) {\n urlSyncManager = new UrlSyncManager();\n }\n\n return urlSyncManager;\n}\n","import { css } from '@emotion/css';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport React from 'react';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { SceneComponentProps, SceneObjectState, SceneObject } from '../core/types';\nimport { getUrlSyncManager } from '../services/UrlSyncManager';\n\nexport interface EmbeddedSceneState extends SceneObjectState {\n /**\n * The main content of the scene (usually a SceneFlexLayout)\n */\n body: SceneObject;\n /**\n * Top row of variable selectors, filters, time pickers and custom actions.\n */\n controls?: SceneObject[];\n}\n\nexport class EmbeddedScene extends SceneObjectBase<EmbeddedSceneState> {\n public static Component = EmbeddedSceneRenderer;\n\n public constructor(state: EmbeddedSceneState) {\n super(state);\n\n this.addActivationHandler(() => {\n return () => getUrlSyncManager().cleanUp(this);\n });\n }\n\n /**\n * initUrlSync should be called before the scene is rendered to ensure that objects are in sync\n * before they get activated. This saves some unnecessary re-renders and makes sure variables\n * queries are issued as needed. If your using SceneAppPage you will not need to call this as\n * url sync is handled on the SceneAppPage level not this level.\n */\n public initUrlSync() {\n getUrlSyncManager().initSync(this);\n }\n}\n\nfunction EmbeddedSceneRenderer({ model }: SceneComponentProps<EmbeddedScene>) {\n const { body, controls } = model.useState();\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.container}>\n {controls && (\n <div className={styles.controls}>\n {controls.map((control) => (\n <control.Component key={control.state.key} model={control} />\n ))}\n </div>\n )}\n <div className={styles.body}>\n <body.Component model={body} />\n </div>\n </div>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n container: css({\n flexGrow: 1,\n display: 'flex',\n gap: theme.spacing(2),\n minHeight: '100%',\n flexDirection: 'column',\n }),\n body: css({\n flexGrow: 1,\n display: 'flex',\n gap: '8px',\n }),\n controls: css({\n display: 'flex',\n gap: theme.spacing(1),\n alignItems: 'center',\n flexWrap: 'wrap',\n }),\n };\n}\n","import React, { RefCallback } from 'react';\nimport { useMeasure } from 'react-use';\n\nimport { PanelData, PluginContextProvider } from '@grafana/data';\nimport { getAppEvents } from '@grafana/runtime';\nimport { PanelChrome, ErrorBoundaryAlert, PanelContextProvider } from '@grafana/ui';\n\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { isSceneObject, SceneComponentProps } from '../../core/types';\n\nimport { VizPanel } from './VizPanel';\n\nexport function VizPanelRenderer({ model }: SceneComponentProps<VizPanel>) {\n const {\n title,\n description,\n options,\n fieldConfig,\n pluginLoadError,\n $data,\n displayMode,\n hoverHeader,\n menu,\n headerActions,\n ...state\n } = model.useState();\n const [ref, { width, height }] = useMeasure();\n const plugin = model.getPlugin();\n const parentLayout = sceneGraph.getLayout(model);\n\n // If parent has enabled dragging and we have not explicitly disabled it then dragging is enabled\n const isDraggable = parentLayout.isDraggable() && (state.isDraggable ?? true);\n const dragClass = isDraggable && parentLayout.getDragClass ? parentLayout.getDragClass() : '';\n const dragClassCancel = isDraggable && parentLayout.getDragClassCancel ? parentLayout.getDragClassCancel() : '';\n const rawData = sceneGraph.getData(model).useState();\n const dataWithFieldConfig = model.applyFieldConfig(rawData.data);\n\n // Interpolate title\n const titleInterpolated = model.interpolate(title, undefined, 'text');\n\n // Not sure we need to subscribe to this state\n const timeZone = sceneGraph.getTimeRange(model).getTimeZone();\n\n if (pluginLoadError) {\n return <div>Failed to load plugin: {pluginLoadError}</div>;\n }\n\n if (!plugin) {\n return <div>Loading plugin panel...</div>;\n }\n\n if (!plugin.panel) {\n return <div>Panel plugin has no panel component</div>;\n }\n\n const PanelComponent = plugin.panel;\n\n // If we have a query runner on our level inform it of the container width (used to set auto max data points)\n if ($data && $data.setContainerWidth) {\n $data.setContainerWidth(width);\n }\n\n const titleItems: React.ReactNode[] = [];\n\n // If we have local time range show that in panel header\n if (model.state.$timeRange) {\n titleItems.push(<model.state.$timeRange.Component model={model.state.$timeRange} />);\n }\n\n let panelMenu;\n if (menu) {\n panelMenu = <menu.Component model={menu} />;\n }\n\n let actionsElement: React.ReactNode | undefined;\n\n if (headerActions) {\n if (isSceneObject(headerActions)) {\n actionsElement = <headerActions.Component model={headerActions} />;\n } else {\n actionsElement = headerActions;\n }\n }\n\n // Data is always returned. For non-data panels, empty PanelData is returned.\n const data = dataWithFieldConfig!;\n\n return (\n <div ref={ref as RefCallback<HTMLDivElement>} style={{ position: 'absolute', width: '100%', height: '100%' }}>\n {width > 0 && height > 0 && (\n <PanelChrome\n title={titleInterpolated}\n description={description ? () => model.interpolate(description) : ''}\n loadingState={data.state}\n statusMessage={getChromeStatusMessage(data, pluginLoadError)}\n width={width}\n height={height}\n displayMode={displayMode}\n hoverHeader={hoverHeader}\n titleItems={titleItems}\n dragClass={dragClass}\n actions={actionsElement}\n dragClassCancel={dragClassCancel}\n padding={plugin.noPadding ? 'none' : 'md'}\n menu={panelMenu}\n >\n {(innerWidth, innerHeight) => (\n <>\n <ErrorBoundaryAlert dependencies={[plugin, data]}>\n <PluginContextProvider meta={plugin.meta}>\n <PanelContextProvider value={model.getPanelContext()}>\n <PanelComponent\n id={1}\n data={data}\n title={title}\n timeRange={data.timeRange}\n timeZone={timeZone}\n options={options}\n fieldConfig={fieldConfig}\n transparent={false}\n width={innerWidth}\n height={innerHeight}\n renderCounter={0}\n replaceVariables={model.interpolate}\n onOptionsChange={model.onOptionsChange}\n onFieldConfigChange={model.onFieldConfigChange}\n onChangeTimeRange={model.onChangeTimeRange}\n eventBus={getAppEvents()}\n />\n </PanelContextProvider>\n </PluginContextProvider>\n </ErrorBoundaryAlert>\n </>\n )}\n </PanelChrome>\n )}\n </div>\n );\n}\n\nfunction getChromeStatusMessage(data: PanelData, pluginLoadingError: string | undefined) {\n if (pluginLoadingError) {\n return pluginLoadingError;\n }\n\n return data.error ? data.error.message : undefined;\n}\n","import {\n ByNamesMatcherMode,\n ConfigOverrideRule,\n DataFrame,\n DynamicConfigValue,\n FieldConfigSource,\n FieldMatcherID,\n fieldMatchers,\n FieldType,\n getFieldDisplayName,\n isSystemOverrideWithRef,\n SystemConfigOverrideRule,\n} from '@grafana/data';\nimport { SeriesVisibilityChangeMode } from '@grafana/ui';\n\nconst displayOverrideRef = 'hideSeriesFrom';\nconst isHideSeriesOverride = isSystemOverrideWithRef(displayOverrideRef);\n\nexport function seriesVisibilityConfigFactory(\n label: string,\n mode: SeriesVisibilityChangeMode,\n fieldConfig: FieldConfigSource,\n data: DataFrame[]\n): FieldConfigSource {\n const { overrides } = fieldConfig;\n\n const displayName = label;\n const currentIndex = overrides.findIndex(isHideSeriesOverride);\n\n if (currentIndex < 0) {\n if (mode === SeriesVisibilityChangeMode.ToggleSelection) {\n const override = createOverride([displayName, ...getNamesOfHiddenFields(overrides, data)]);\n\n return {\n ...fieldConfig,\n overrides: [...fieldConfig.overrides, override],\n };\n }\n\n const displayNames = getDisplayNames(data, displayName);\n const override = createOverride(displayNames);\n\n return {\n ...fieldConfig,\n overrides: [...fieldConfig.overrides, override],\n };\n }\n\n const overridesCopy = Array.from(overrides);\n const [current] = overridesCopy.splice(currentIndex, 1) as SystemConfigOverrideRule[];\n\n if (mode === SeriesVisibilityChangeMode.ToggleSelection) {\n let existing = getExistingDisplayNames(current);\n const nameOfHiddenFields = getNamesOfHiddenFields(overridesCopy, data);\n\n if (nameOfHiddenFields.length > 0) {\n existing = existing.filter((el) => nameOfHiddenFields.indexOf(el) < 0);\n }\n\n if (existing[0] === displayName && existing.length === 1) {\n return {\n ...fieldConfig,\n overrides: overridesCopy,\n };\n }\n\n const override = createOverride([displayName, ...nameOfHiddenFields]);\n\n return {\n ...fieldConfig,\n overrides: [...overridesCopy, override],\n };\n }\n\n const override = createExtendedOverride(current, displayName);\n\n if (allFieldsAreExcluded(override, data)) {\n return {\n ...fieldConfig,\n overrides: overridesCopy,\n };\n }\n\n return {\n ...fieldConfig,\n overrides: [...overridesCopy, override],\n };\n}\n\nfunction createOverride(\n names: string[],\n mode = ByNamesMatcherMode.exclude,\n property?: DynamicConfigValue\n): SystemConfigOverrideRule {\n property = property ?? {\n id: 'custom.hideFrom',\n value: {\n viz: true,\n legend: false,\n tooltip: false,\n },\n };\n\n return {\n __systemRef: displayOverrideRef,\n matcher: {\n id: FieldMatcherID.byNames,\n options: {\n mode: mode,\n names: names,\n prefix: mode === ByNamesMatcherMode.exclude ? 'All except:' : undefined,\n readOnly: true,\n },\n },\n properties: [\n {\n ...property,\n value: {\n viz: true,\n legend: false,\n tooltip: false,\n },\n },\n ],\n };\n}\n\nconst createExtendedOverride = (\n current: SystemConfigOverrideRule,\n displayName: string,\n mode = ByNamesMatcherMode.exclude\n): SystemConfigOverrideRule => {\n const property = current.properties.find((p) => p.id === 'custom.hideFrom');\n const existing = getExistingDisplayNames(current);\n const index = existing.findIndex((name) => name === displayName);\n\n if (index < 0) {\n existing.push(displayName);\n } else {\n existing.splice(index, 1);\n }\n\n return createOverride(existing, mode, property);\n};\n\nconst getExistingDisplayNames = (rule: SystemConfigOverrideRule): string[] => {\n const names = rule.matcher.options?.names;\n if (!Array.isArray(names)) {\n return [];\n }\n return [...names];\n};\n\nconst allFieldsAreExcluded = (override: SystemConfigOverrideRule, data: DataFrame[]): boolean => {\n return getExistingDisplayNames(override).length === getDisplayNames(data).length;\n};\n\nconst getDisplayNames = (data: DataFrame[], excludeName?: string): string[] => {\n const unique = new Set<string>();\n\n for (const frame of data) {\n for (const field of frame.fields) {\n if (field.type !== FieldType.number) {\n continue;\n }\n\n const name = getFieldDisplayName(field, frame, data);\n\n if (name === excludeName) {\n continue;\n }\n\n unique.add(name);\n }\n }\n\n return Array.from(unique);\n};\n\nconst getNamesOfHiddenFields = (overrides: ConfigOverrideRule[], data: DataFrame[]): string[] => {\n let names: string[] = [];\n\n for (const override of overrides) {\n const property = override.properties.find((p) => p.id === 'custom.hideFrom');\n\n if (property !== undefined && property.value?.legend === true) {\n const info = fieldMatchers.get(override.matcher.id);\n const matcher = info.get(override.matcher.options);\n\n for (const frame of data) {\n for (const field of frame.fields) {\n if (field.type !== FieldType.number) {\n continue;\n }\n\n const name = getFieldDisplayName(field, frame, data);\n\n if (matcher(field, frame, data)) {\n names.push(name);\n }\n }\n }\n }\n }\n\n return names;\n};\n","import {\n ConfigOverrideRule,\n DynamicConfigValue,\n FieldColorModeId,\n FieldConfigSource,\n FieldMatcherID,\n} from '@grafana/data';\n\nexport const changeSeriesColorConfigFactory = (\n label: string,\n color: string,\n fieldConfig: FieldConfigSource\n): FieldConfigSource => {\n const { overrides } = fieldConfig;\n const currentIndex = fieldConfig.overrides.findIndex((override) => {\n return override.matcher.id === FieldMatcherID.byName && override.matcher.options === label;\n });\n\n if (currentIndex < 0) {\n return {\n ...fieldConfig,\n overrides: [...fieldConfig.overrides, createOverride(label, color)],\n };\n }\n\n const overridesCopy = Array.from(overrides);\n const existing = overridesCopy[currentIndex];\n const propertyIndex = existing.properties.findIndex((p) => p.id === 'color');\n\n if (propertyIndex < 0) {\n overridesCopy[currentIndex] = {\n ...existing,\n properties: [...existing.properties, createProperty(color)],\n };\n\n return {\n ...fieldConfig,\n overrides: overridesCopy,\n };\n }\n\n const propertiesCopy = Array.from(existing.properties);\n propertiesCopy[propertyIndex] = createProperty(color);\n\n overridesCopy[currentIndex] = {\n ...existing,\n properties: propertiesCopy,\n };\n\n return {\n ...fieldConfig,\n overrides: overridesCopy,\n };\n};\n\nconst createOverride = (label: string, color: string): ConfigOverrideRule => {\n return {\n matcher: {\n id: FieldMatcherID.byName,\n options: label,\n },\n properties: [createProperty(color)],\n };\n};\n\nconst createProperty = (color: string): DynamicConfigValue => {\n return {\n id: 'color',\n value: {\n mode: FieldColorModeId.Fixed,\n fixedColor: color,\n },\n };\n};\n","import { PanelPlugin, PluginMetaInfo } from '@grafana/data';\nimport { getPluginImportUtils } from '@grafana/runtime';\n\nexport const runtimePanelPlugins = new Map<string, PanelPlugin>();\n\nexport interface RuntimePanelPluginOptions {\n /**\n * Please specify a pluginId that is unlikely to collide with other plugins.\n */\n pluginId: string;\n plugin: PanelPlugin;\n}\n\n/**\n * Provides a way to register runtime panel plugins.\n * Please use a pluginId that is unlikely to collide with other plugins.\n */\nexport function registerRuntimePanelPlugin({ pluginId, plugin }: RuntimePanelPluginOptions) {\n if (runtimePanelPlugins.has(pluginId)) {\n throw new Error(`A runtime panel plugin with id ${pluginId} has already been registered`);\n }\n\n plugin.meta = {\n ...plugin.meta,\n id: pluginId,\n name: pluginId,\n module: 'runtime plugin',\n baseUrl: 'runtime plugin',\n info: {\n author: {\n name: 'Runtime plugin ' + pluginId,\n },\n description: '',\n links: [],\n logos: {\n large: '',\n small: '',\n },\n screenshots: [],\n updated: '',\n version: '',\n } as PluginMetaInfo,\n };\n\n runtimePanelPlugins.set(pluginId, plugin);\n}\n\nexport function loadPanelPluginSync(pluginId: string) {\n const { getPanelPluginFromCache } = getPluginImportUtils();\n\n return getPanelPluginFromCache(pluginId) ?? runtimePanelPlugins.get(pluginId);\n}\n","import {\n AbsoluteTimeRange,\n FieldConfigSource,\n PanelModel,\n PanelPlugin,\n toUtc,\n getPanelOptionsWithDefaults,\n ScopedVars,\n InterpolateFunction,\n CoreApp,\n DashboardCursorSync,\n PanelData,\n compareArrayValues,\n compareDataFrameStructures,\n applyFieldOverrides,\n} from '@grafana/data';\nimport { PanelContext, SeriesVisibilityChangeMode, VizLegendOptions } from '@grafana/ui';\nimport { config, getAppEvents, getPluginImportUtils } from '@grafana/runtime';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { DeepPartial, SceneObject, SceneObjectState } from '../../core/types';\n\nimport { VizPanelRenderer } from './VizPanelRenderer';\nimport { VizPanelMenu } from './VizPanelMenu';\nimport { VariableDependencyConfig } from '../../variables/VariableDependencyConfig';\nimport { VariableCustomFormatterFn } from '../../variables/types';\nimport { seriesVisibilityConfigFactory } from './seriesVisibilityConfigFactory';\nimport { emptyPanelData } from '../../core/SceneDataNode';\nimport { changeSeriesColorConfigFactory } from './colorSeriesConfigFactory';\nimport { loadPanelPluginSync } from './registerRuntimePanelPlugin';\n\nexport interface VizPanelState<TOptions = {}, TFieldConfig = {}> extends SceneObjectState {\n title: string;\n description?: string;\n /**\n * This is usually a plugin id that references a core plugin or an external plugin. But this can also reference a\n * runtime registered PanelPlugin registered via function registerScenePanelPlugin.\n */\n pluginId: string;\n options: DeepPartial<TOptions>;\n fieldConfig: FieldConfigSource<DeepPartial<TFieldConfig>>;\n pluginVersion?: string;\n displayMode?: 'default' | 'transparent';\n hoverHeader?: boolean;\n menu?: VizPanelMenu;\n isDraggable?: boolean;\n isResizable?: boolean;\n headerActions?: React.ReactNode | SceneObject;\n // internal state\n pluginLoadError?: string;\n pluginInstanceState?: any;\n}\n\nexport class VizPanel<TOptions = {}, TFieldConfig = {}> extends SceneObjectBase<VizPanelState<TOptions, TFieldConfig>> {\n public static Component = VizPanelRenderer;\n\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['title', 'options', 'fieldConfig'],\n });\n\n // Not part of state as this is not serializable\n private _plugin?: PanelPlugin;\n private _panelContext: PanelContext;\n private _prevData?: PanelData;\n private _dataWithFieldConfig?: PanelData;\n private _structureRev: number = 0;\n\n public constructor(state: Partial<VizPanelState<TOptions, TFieldConfig>>) {\n super({\n options: {},\n fieldConfig: { defaults: {}, overrides: [] },\n title: 'Title',\n pluginId: 'timeseries',\n ...state,\n });\n\n this._panelContext = {\n eventBus: getAppEvents(),\n app: CoreApp.Unknown, // TODO,\n sync: () => DashboardCursorSync.Off, // TODO\n onSeriesColorChange: this._onSeriesColorChange,\n onToggleSeriesVisibility: this._onSeriesVisibilityChange,\n onToggleLegendSort: this._onToggleLegendSort,\n onInstanceStateChange: this._onInstanceStateChange,\n // onAnnotationCreate: this.onAnnotationCreate,\n // onAnnotationUpdate: this.onAnnotationUpdate,\n // onAnnotationDelete: this.onAnnotationDelete,\n // canAddAnnotations: props.dashboard.canAddAnnotations.bind(props.dashboard),\n // canEditAnnotations: props.dashboard.canEditAnnotations.bind(props.dashboard),\n // canDeleteAnnotations: props.dashboard.canDeleteAnnotations.bind(props.dashboard),\n };\n\n this.addActivationHandler(() => {\n this._onActivate();\n });\n }\n\n private _onActivate() {\n if (!this._plugin) {\n this._loadPlugin(this.state.pluginId);\n }\n }\n\n private _loadPlugin(pluginId: string) {\n const plugin = loadPanelPluginSync(pluginId);\n\n if (plugin) {\n this._pluginLoaded(plugin);\n } else {\n const { importPanelPlugin } = getPluginImportUtils();\n\n importPanelPlugin(pluginId)\n .then((result) => this._pluginLoaded(result))\n .catch((err: Error) => {\n this.setState({ pluginLoadError: err.message });\n });\n }\n }\n\n private _pluginLoaded(plugin: PanelPlugin) {\n const { options, fieldConfig, title, pluginVersion } = this.state;\n\n const panel: PanelModel = {\n title,\n options,\n fieldConfig,\n id: 1,\n type: plugin.meta.id,\n pluginVersion: pluginVersion,\n };\n\n const currentVersion = this._getPluginVersion(plugin);\n\n if (plugin.onPanelMigration) {\n if (currentVersion !== this.state.pluginVersion) {\n // These migration handlers also mutate panel.fieldConfig to migrate fieldConfig\n panel.options = plugin.onPanelMigration(panel);\n }\n }\n\n const withDefaults = getPanelOptionsWithDefaults({\n plugin,\n currentOptions: panel.options,\n currentFieldConfig: panel.fieldConfig,\n isAfterPluginChange: false,\n });\n\n this._plugin = plugin;\n\n this.setState({\n options: withDefaults.options,\n fieldConfig: withDefaults.fieldConfig,\n pluginVersion: currentVersion,\n });\n }\n\n private _getPluginVersion(plugin: PanelPlugin): string {\n return plugin && plugin.meta.info.version ? plugin.meta.info.version : config.buildInfo.version;\n }\n\n public getPlugin(): PanelPlugin | undefined {\n return this._plugin;\n }\n\n public getPanelContext(): PanelContext {\n return this._panelContext;\n }\n\n public onChangeTimeRange = (timeRange: AbsoluteTimeRange) => {\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n sceneTimeRange.onTimeRangeChange({\n raw: {\n from: toUtc(timeRange.from),\n to: toUtc(timeRange.to),\n },\n from: toUtc(timeRange.from),\n to: toUtc(timeRange.to),\n });\n };\n\n public onOptionsChange = (options: TOptions) => {\n this.setState({ options });\n };\n\n public onFieldConfigChange = (fieldConfig: FieldConfigSource<TFieldConfig>) => {\n this.setState({ fieldConfig });\n };\n\n public interpolate = ((value: string, scoped?: ScopedVars, format?: string | VariableCustomFormatterFn) => {\n return sceneGraph.interpolate(this, value, scoped, format);\n }) as InterpolateFunction;\n\n /**\n * Called from the react render path to apply the field config to the data provided by the data provider\n */\n public applyFieldConfig(rawData?: PanelData): PanelData {\n const plugin = this._plugin!;\n\n if (!plugin || plugin.meta.skipDataQuery || !rawData) {\n // TODO setup time range subscription instead\n return emptyPanelData;\n }\n\n const fieldConfigRegistry = plugin.fieldConfigRegistry;\n const prevFrames = this._prevData?.series;\n const newFrames = rawData?.series;\n\n if (\n rawData.structureRev == null &&\n newFrames &&\n prevFrames &&\n !compareArrayValues(newFrames, prevFrames, compareDataFrameStructures)\n ) {\n this._structureRev++;\n }\n\n this._dataWithFieldConfig = {\n ...rawData,\n structureRev: this._structureRev,\n series: applyFieldOverrides({\n data: newFrames,\n fieldConfig: this.state.fieldConfig,\n fieldConfigRegistry,\n replaceVariables: this.interpolate,\n theme: config.theme2,\n timeZone: rawData.request?.timezone,\n }),\n };\n\n return this._dataWithFieldConfig;\n }\n\n /**\n * Panel context functions\n */\n private _onSeriesColorChange = (label: string, color: string) => {\n this.onFieldConfigChange(changeSeriesColorConfigFactory(label, color, this.state.fieldConfig));\n };\n\n private _onSeriesVisibilityChange = (label: string, mode: SeriesVisibilityChangeMode) => {\n if (!this._dataWithFieldConfig) {\n return;\n }\n\n this.onFieldConfigChange(\n seriesVisibilityConfigFactory(label, mode, this.state.fieldConfig, this._dataWithFieldConfig.series)\n );\n };\n\n private _onInstanceStateChange = (state: any) => {\n this.setState({ pluginInstanceState: state });\n };\n\n private _onToggleLegendSort = (sortKey: string) => {\n const legendOptions: VizLegendOptions = (this.state.options as any).legend;\n\n // We don't want to do anything when legend options are not available\n if (!legendOptions) {\n return;\n }\n\n let sortDesc = legendOptions.sortDesc;\n let sortBy = legendOptions.sortBy;\n if (sortKey !== sortBy) {\n sortDesc = undefined;\n }\n\n // if already sort ascending, disable sorting\n if (sortDesc === false) {\n sortBy = undefined;\n sortDesc = undefined;\n } else {\n sortDesc = !sortDesc;\n sortBy = sortKey;\n }\n\n this.onOptionsChange({\n ...this.state.options,\n legend: { ...legendOptions, sortBy, sortDesc },\n } as TOptions);\n };\n}\n","import React from 'react';\nimport { PanelMenuItem } from '@grafana/data';\nimport { Menu } from '@grafana/ui';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneComponentProps, SceneObjectState } from '../../core/types';\n\ninterface VizPanelMenuState extends SceneObjectState {\n items?: PanelMenuItem[];\n}\n\nexport class VizPanelMenu extends SceneObjectBase<VizPanelMenuState> {\n static Component = VizPanelMenuRenderer;\n\n // Allows adding menu items dynamically\n public addItem(item: PanelMenuItem) {\n this.setState({\n items: this.state.items ? [...this.state.items, item] : [item],\n });\n }\n\n // Allows replacing all menu items\n public setItems(items: PanelMenuItem[]) {\n this.setState({\n items,\n });\n }\n}\n\nfunction VizPanelMenuRenderer({ model }: SceneComponentProps<VizPanelMenu>) {\n const { items } = model.useState();\n\n const renderItems = (items: PanelMenuItem[]) => {\n return items.map((item) =>\n item.type === 'divider' ? (\n <Menu.Divider key={item.text} />\n ) : (\n <Menu.Item\n key={item.text}\n label={item.text}\n icon={item.iconClassName}\n childItems={item.subMenu ? renderItems(item.subMenu) : undefined}\n url={item.href}\n onClick={item.onClick}\n shortcut={item.shortcut}\n />\n )\n );\n };\n if (!items) {\n return null;\n }\n\n return <Menu>{renderItems(items)}</Menu>;\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Stack } from '@grafana/experimental';\nimport { Button, ToolbarButton, useStyles2 } from '@grafana/ui';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { SceneObject, SceneComponentProps, SceneLayout, SceneObjectState } from '../core/types';\n\ninterface NestedSceneState extends SceneObjectState {\n title: string;\n isCollapsed?: boolean;\n canCollapse?: boolean;\n canRemove?: boolean;\n body: SceneLayout;\n actions?: SceneObject[];\n}\n\n/**\n * @internal\n * POC status, don't use this yet\n */\nexport class NestedScene extends SceneObjectBase<NestedSceneState> {\n public static Component = NestedSceneRenderer;\n\n public onToggle = () => {\n this.setState({\n isCollapsed: !this.state.isCollapsed,\n });\n };\n\n /** Removes itself from its parent's children array */\n public onRemove = () => {\n const parent = this.parent!;\n\n if (isSceneLayoutItem(parent)) {\n parent.setState({\n body: undefined,\n });\n }\n };\n}\n\nexport function NestedSceneRenderer({ model }: SceneComponentProps<NestedScene>) {\n const { title, isCollapsed, canCollapse, canRemove, body, actions } = model.useState();\n const styles = useStyles2(getStyles);\n\n const toolbarActions = (actions ?? []).map((action) => <action.Component key={action.state.key} model={action} />);\n\n if (canRemove) {\n toolbarActions.push(\n <ToolbarButton\n icon=\"times\"\n variant={'default'}\n onClick={model.onRemove}\n key=\"remove-button\"\n aria-label=\"Remove scene\"\n />\n );\n }\n\n return (\n <div className={styles.row}>\n <div className={styles.rowHeader}>\n <Stack gap={0}>\n <div className={styles.title} role=\"heading\" aria-level={1}>\n {title}\n </div>\n {canCollapse && (\n <div className={styles.toggle}>\n <Button\n size=\"sm\"\n icon={isCollapsed ? 'angle-down' : 'angle-up'}\n fill=\"text\"\n variant=\"secondary\"\n aria-label={isCollapsed ? 'Expand scene' : 'Collapse scene'}\n onClick={model.onToggle}\n />\n </div>\n )}\n </Stack>\n <div className={styles.actions}>{toolbarActions}</div>\n </div>\n {!isCollapsed && <body.Component model={body} />}\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n row: css({\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n gap: theme.spacing(1),\n cursor: 'pointer',\n }),\n toggle: css({}),\n title: css({\n fontSize: theme.typography.h5.fontSize,\n }),\n rowHeader: css({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(2),\n }),\n actions: css({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n justifyContent: 'flex-end',\n flexGrow: 1,\n }),\n});\n\nfunction isSceneLayoutItem(x: SceneObject): x is SceneObject<SceneObjectState & { body: SceneObject | undefined }> {\n return 'body' in x.state;\n}\n","import React from 'react';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneComponentProps, SceneObjectState } from '../core/types';\nimport { VariableDependencyConfig } from '../variables/VariableDependencyConfig';\nimport { useTheme2 } from '@grafana/ui';\nimport { css } from '@emotion/css';\n\nexport interface SceneCanvasTextState extends SceneObjectState {\n text: string;\n fontSize?: number;\n align?: 'left' | 'center' | 'right';\n spacing?: number;\n}\n\n/**\n * Not a really useful component, just an example of how to create one\n * @internal\n */\nexport class SceneCanvasText extends SceneObjectBase<SceneCanvasTextState> {\n protected _variableDependency = new VariableDependencyConfig(this, { statePaths: ['text'] });\n\n public static Component = ({ model }: SceneComponentProps<SceneCanvasText>) => {\n const { text, fontSize = 20, align = 'left', key, spacing } = model.useState();\n const theme = useTheme2();\n\n const style = css({\n fontSize: fontSize,\n display: 'flex',\n flexGrow: 1,\n alignItems: 'center',\n padding: spacing ? theme.spacing(spacing, 0) : undefined,\n justifyContent: align,\n });\n\n return (\n <div className={style} data-testid={key}>\n {sceneGraph.interpolate(model, text)}\n </div>\n );\n };\n}\n","import React from 'react';\n\nimport { IconName, Input, ToolbarButton } from '@grafana/ui';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { SceneComponentProps, SceneObjectState } from '../core/types';\n\nexport interface ToolbarButtonState extends SceneObjectState {\n icon: IconName;\n onClick: () => void;\n}\n\nexport class SceneToolbarButton extends SceneObjectBase<ToolbarButtonState> {\n public static Component = ({ model }: SceneComponentProps<SceneToolbarButton>) => {\n const state = model.useState();\n\n return <ToolbarButton onClick={state.onClick} icon={state.icon} />;\n };\n}\n\nexport interface SceneToolbarInputState extends SceneObjectState {\n value?: string;\n onChange: (value: number) => void;\n}\n\nexport class SceneToolbarInput extends SceneObjectBase<SceneToolbarInputState> {\n public static Component = ({ model }: SceneComponentProps<SceneToolbarInput>) => {\n const state = model.useState();\n\n return (\n <Input\n defaultValue={state.value}\n width={8}\n onBlur={(evt) => {\n model.state.onChange(parseInt(evt.currentTarget.value, 10));\n }}\n />\n );\n };\n}\n","import React from 'react';\n\nimport { TimeRangePicker } from '@grafana/ui';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneComponentProps, SceneObjectState } from '../core/types';\n\nexport interface SceneTimePickerState extends SceneObjectState {\n hidePicker?: boolean;\n isOnCanvas?: boolean;\n}\n\nexport class SceneTimePicker extends SceneObjectBase<SceneTimePickerState> {\n public static Component = SceneTimePickerRenderer;\n}\n\nfunction SceneTimePickerRenderer({ model }: SceneComponentProps<SceneTimePicker>) {\n const { hidePicker, isOnCanvas } = model.useState();\n const timeRange = sceneGraph.getTimeRange(model);\n const timeZone = timeRange.getTimeZone();\n const timeRangeState = timeRange.useState();\n\n if (hidePicker) {\n return null;\n }\n\n return (\n <TimeRangePicker\n isOnCanvas={isOnCanvas}\n value={timeRangeState.value}\n onChange={timeRange.onTimeRangeChange}\n timeZone={timeZone}\n fiscalYearStartMonth={0}\n onMoveBackward={() => {}}\n onMoveForward={() => {}}\n onZoom={() => {}}\n onChangeTimeZone={timeRange.onTimeZoneChange}\n onChangeFiscalYearStartMonth={() => {}}\n />\n );\n}\n","import React from 'react';\n\nimport { rangeUtil } from '@grafana/data';\nimport { RefreshPicker } from '@grafana/ui';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneComponentProps, SceneObjectState, SceneObjectUrlValues } from '../core/types';\nimport { SceneObjectUrlSyncConfig } from '../services/SceneObjectUrlSyncConfig';\n\nexport const DEFAULT_INTERVALS = ['5s', '10s', '30s', '1m', '5m', '15m', '30m', '1h', '2h', '1d'];\n\nexport interface SceneRefreshPickerState extends SceneObjectState {\n // Refresh interval, e.g. 5s, 1m, 2h\n refresh: string;\n // List of allowed refresh intervals, e.g. ['5s', '1m']\n intervals?: string[];\n isOnCanvas?: boolean;\n}\n\nexport class SceneRefreshPicker extends SceneObjectBase<SceneRefreshPickerState> {\n public static Component = SceneRefreshPickerRenderer;\n protected _urlSync = new SceneObjectUrlSyncConfig(this, { keys: ['refresh'] });\n\n private _intervalTimer: ReturnType<typeof setInterval> | undefined;\n\n public constructor(state: Partial<SceneRefreshPickerState>) {\n super({\n refresh: '',\n ...state,\n intervals: state.intervals ?? DEFAULT_INTERVALS,\n });\n\n this.addActivationHandler(() => {\n this.setupIntervalTimer();\n\n return () => {\n if (this._intervalTimer) {\n clearInterval(this._intervalTimer);\n }\n };\n });\n }\n\n public onRefresh = () => {\n const timeRange = sceneGraph.getTimeRange(this);\n\n if (this._intervalTimer) {\n clearInterval(this._intervalTimer);\n }\n\n timeRange.onRefresh();\n this.setupIntervalTimer();\n };\n\n public onIntervalChanged = (interval: string) => {\n this.setState({ refresh: interval });\n this.setupIntervalTimer();\n };\n\n public getUrlState() {\n return {\n refresh: this.state.refresh,\n };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues) {\n const refresh = values.refresh;\n\n if (refresh && typeof refresh === 'string') {\n this.setState({\n refresh,\n });\n }\n }\n\n private setupIntervalTimer = () => {\n const timeRange = sceneGraph.getTimeRange(this);\n const { refresh, intervals } = this.state;\n\n if (this._intervalTimer || refresh === '') {\n clearInterval(this._intervalTimer);\n }\n\n if (refresh === '') {\n return;\n }\n\n // When the provided interval is not allowed\n if (intervals && !intervals.includes(refresh)) {\n return;\n }\n\n const intervalMs = rangeUtil.intervalToMs(refresh);\n\n this._intervalTimer = setInterval(() => {\n timeRange.onRefresh();\n }, intervalMs);\n };\n}\n\nexport function SceneRefreshPickerRenderer({ model }: SceneComponentProps<SceneRefreshPicker>) {\n const { refresh, intervals, isOnCanvas } = model.useState();\n\n return (\n <RefreshPicker\n value={refresh}\n intervals={intervals}\n onRefresh={model.onRefresh}\n onIntervalChanged={model.onIntervalChanged}\n isOnCanvas={isOnCanvas}\n />\n );\n}\n","import React from 'react';\n\nimport { LoadingState, PanelData, DataFrame } from '@grafana/data';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneComponentProps, SceneObjectState } from '../core/types';\nimport { SceneFlexItem, SceneFlexLayout } from './layout/SceneFlexLayout';\n\ninterface SceneByFrameRepeaterState extends SceneObjectState {\n body: SceneFlexLayout;\n getLayoutChild(data: PanelData, frame: DataFrame, frameIndex: number): SceneFlexItem;\n}\n\nexport class SceneByFrameRepeater extends SceneObjectBase<SceneByFrameRepeaterState> {\n public constructor(state: SceneByFrameRepeaterState) {\n super(state);\n\n this.addActivationHandler(() => {\n this._subs.add(\n sceneGraph.getData(this).subscribeToState((data) => {\n if (data.data?.state === LoadingState.Done) {\n this.performRepeat(data.data);\n }\n })\n );\n });\n }\n\n private performRepeat(data: PanelData) {\n const newChildren: SceneFlexItem[] = [];\n\n for (let seriesIndex = 0; seriesIndex < data.series.length; seriesIndex++) {\n const layoutChild = this.state.getLayoutChild(data, data.series[seriesIndex], seriesIndex);\n newChildren.push(layoutChild);\n }\n\n this.state.body.setState({ children: newChildren });\n }\n\n public static Component = ({ model }: SceneComponentProps<SceneByFrameRepeater>) => {\n const { body } = model.useState();\n return <body.Component model={body} />;\n };\n}\n","import React from 'react';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { SceneComponentProps } from '../core/types';\n\nexport class SceneControlsSpacer extends SceneObjectBase<{}> {\n public constructor() {\n super({});\n }\n\n public static Component = (_props: SceneComponentProps<SceneControlsSpacer>) => {\n return <div style={{ flexGrow: 1 }} />;\n };\n}\n","import { css, CSSObject } from '@emotion/css';\nimport { config } from '@grafana/runtime';\nimport React, { ComponentType, CSSProperties, useMemo } from 'react';\n\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneComponentProps, SceneLayout, SceneObjectState, SceneObject } from '../../core/types';\n\nexport interface SceneFlexItemStateLike extends SceneFlexItemPlacement, SceneObjectState {}\n\nexport interface SceneFlexItemLike extends SceneObject<SceneFlexItemStateLike> {}\n\ninterface SceneFlexLayoutState extends SceneObjectState, SceneFlexItemPlacement {\n children: SceneFlexItemLike[];\n}\n\nexport class SceneFlexLayout extends SceneObjectBase<SceneFlexLayoutState> implements SceneLayout {\n public static Component = SceneFlexLayoutRenderer;\n\n public toggleDirection() {\n this.setState({\n direction: this.state.direction === 'row' ? 'column' : 'row',\n });\n }\n\n public isDraggable(): boolean {\n return false;\n }\n}\n\nfunction SceneFlexLayoutRenderer({ model, parentState }: SceneFlexItemRenderProps<SceneFlexLayout>) {\n const { children, isHidden } = model.useState();\n const style = useLayoutStyle(model.state, parentState);\n\n if (isHidden) {\n return null;\n }\n\n return (\n <div className={style}>\n {children.map((item) => {\n const Component = item.Component as ComponentType<SceneFlexItemRenderProps<SceneObject>>;\n return <Component key={item.state.key} model={item} parentState={model.state} />;\n })}\n </div>\n );\n}\n\nexport interface SceneFlexItemPlacement {\n wrap?: CSSProperties['flexWrap'];\n direction?: CSSProperties['flexDirection'];\n width?: CSSProperties['width'];\n height?: CSSProperties['height'];\n minWidth?: CSSProperties['minWidth'];\n minHeight?: CSSProperties['minHeight'];\n maxWidth?: CSSProperties['maxWidth'];\n maxHeight?: CSSProperties['maxHeight'];\n xSizing?: 'fill' | 'content';\n ySizing?: 'fill' | 'content';\n /**\n * True when the item should rendered but not visible.\n * Useful for conditional display of layout items\n */\n isHidden?: boolean;\n\n /**\n * Set direction for smaller screens. This defaults to column.\n * This equals media query theme.breakpoints.down('md')\n */\n md?: SceneFlexItemPlacement;\n}\n\nexport interface SceneFlexItemState extends SceneFlexItemPlacement, SceneObjectState {\n body: SceneObject | undefined;\n}\n\ninterface SceneFlexItemRenderProps<T> extends SceneComponentProps<T> {\n parentState?: SceneFlexItemPlacement;\n}\n\nexport class SceneFlexItem extends SceneObjectBase<SceneFlexItemState> {\n public static Component = SceneFlexItemRenderer;\n}\n\nfunction SceneFlexItemRenderer({ model, parentState }: SceneFlexItemRenderProps<SceneFlexItem>) {\n if (!parentState) {\n throw new Error('SceneFlexItem must be a child of SceneFlexLayout');\n }\n\n const { body, isHidden } = model.useState();\n const style = useLayoutItemStyle(model.state, parentState);\n\n if (!body || isHidden) {\n return null;\n }\n\n return (\n <div className={style}>\n <body.Component model={body} />\n </div>\n );\n}\nfunction applyItemStyles(style: CSSObject, state: SceneFlexItemPlacement, parentState: SceneFlexItemPlacement) {\n const parentDirection = parentState.direction ?? 'row';\n const { xSizing = 'fill', ySizing = 'fill' } = state;\n\n style.display = 'flex';\n style.position = 'relative';\n style.flexDirection = parentDirection;\n\n if (parentDirection === 'column') {\n if (state.height) {\n style.height = state.height;\n } else {\n style.flexGrow = ySizing === 'fill' ? 1 : 0;\n }\n\n if (state.width) {\n style.width = state.width;\n } else {\n style.alignSelf = xSizing === 'fill' ? 'stretch' : 'flex-start';\n }\n } else {\n if (state.height) {\n style.height = state.height;\n } else {\n style.alignSelf = ySizing === 'fill' ? 'stretch' : 'flex-start';\n }\n\n if (state.width) {\n style.width = state.width;\n } else {\n style.flexGrow = xSizing === 'fill' ? 1 : 0;\n }\n }\n\n style.minWidth = state.minWidth;\n style.maxWidth = state.maxWidth;\n style.maxHeight = state.maxHeight;\n\n // For responsive layouts to work we default use the minHeight or height of the parent\n style.minHeight = state.minHeight ?? parentState.minHeight;\n style.height = state.height ?? parentState.height;\n\n return style;\n}\n\nfunction useLayoutItemStyle(state: SceneFlexItemState, parentState: SceneFlexItemPlacement) {\n return useMemo(() => {\n const theme = config.theme2;\n const style = applyItemStyles({}, state, parentState);\n\n // Unset maxWidth for small screens by default\n style[theme.breakpoints.down('md')] = {\n maxWidth: state.md?.maxWidth ?? 'unset',\n maxHeight: state.md?.maxHeight ?? 'unset',\n height: state.md?.height ?? parentState.md?.height,\n width: state.md?.width ?? parentState.md?.width,\n };\n\n return css(style);\n }, [state, parentState]);\n}\n\nfunction useLayoutStyle(state: SceneFlexLayoutState, parentState?: SceneFlexItemPlacement) {\n return useMemo(() => {\n const { direction = 'row', wrap } = state;\n // only need breakpoints so accessing theme from config instead of context is ok\n const theme = config.theme2;\n\n const style: CSSObject = {};\n\n if (parentState) {\n applyItemStyles(style, state, parentState);\n } else {\n style.display = 'flex';\n style.flexGrow = 1;\n }\n\n style.flexDirection = direction;\n style.gap = '8px';\n style.flexWrap = wrap || 'nowrap';\n style.alignContent = 'baseline';\n style.minHeight = style.minHeight || 0;\n\n style[theme.breakpoints.down('md')] = {\n flexDirection: state.md?.direction ?? 'column',\n maxWidth: state.md?.maxWidth ?? 'unset',\n maxHeight: state.md?.maxHeight ?? 'unset',\n height: state.md?.height ?? 'unset',\n width: state.md?.width ?? 'unset',\n };\n\n return css(style);\n }, [parentState, state]);\n}\n","export const DEFAULT_PANEL_SPAN = 4;\nexport const GRID_CELL_HEIGHT = 30;\nexport const GRID_CELL_VMARGIN = 8;\nexport const GRID_COLUMN_COUNT = 24;\n","import React, { useRef, useState } from 'react';\nimport { useEffectOnce } from 'react-use';\n\nimport { uniqueId } from 'lodash';\n\nexport function useUniqueId(): string {\n const idRefLazy = useRef<string | undefined>(undefined);\n idRefLazy.current ??= uniqueId();\n return idRefLazy.current;\n}\n\nexport interface Props extends Omit<React.HTMLProps<HTMLDivElement>, 'onChange'> {\n children: React.ReactNode | (({ isInView }: { isInView: boolean }) => React.ReactNode);\n width?: number;\n height?: number;\n onLoad?: () => void;\n onChange?: (isInView: boolean) => void;\n}\n\nexport function LazyLoader({ children, width, height, onLoad, onChange, style, ...rest }: Props) {\n const id = useUniqueId();\n const [loaded, setLoaded] = useState(false);\n const [isInView, setIsInView] = useState(false);\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n useEffectOnce(() => {\n LazyLoader.addCallback(id, (entry) => {\n if (!loaded && entry.isIntersecting) {\n setLoaded(true);\n onLoad?.();\n }\n\n setIsInView(entry.isIntersecting);\n onChange?.(entry.isIntersecting);\n });\n\n const wrapperEl = wrapperRef.current;\n\n if (wrapperEl) {\n LazyLoader.observer.observe(wrapperEl);\n }\n\n return () => {\n delete LazyLoader.callbacks[id];\n wrapperEl && LazyLoader.observer.unobserve(wrapperEl);\n if (Object.keys(LazyLoader.callbacks).length === 0) {\n LazyLoader.observer.disconnect();\n }\n };\n });\n\n return (\n <div id={id} ref={wrapperRef} style={{ ...style, width, height }} {...rest}>\n {loaded && (typeof children === 'function' ? children({ isInView }) : children)}\n </div>\n );\n}\n\nLazyLoader.callbacks = {} as Record<string, (e: IntersectionObserverEntry) => void>;\nLazyLoader.addCallback = (id: string, c: (e: IntersectionObserverEntry) => void) => (LazyLoader.callbacks[id] = c);\nLazyLoader.observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n LazyLoader.callbacks[entry.target.id](entry);\n }\n },\n { rootMargin: '100px' }\n);\n","import React from 'react';\nimport ReactGridLayout from 'react-grid-layout';\nimport AutoSizer from 'react-virtualized-auto-sizer';\nimport { SceneComponentProps } from '../../../core/types';\nimport { GRID_CELL_VMARGIN, GRID_COLUMN_COUNT, GRID_CELL_HEIGHT } from './constants';\nimport { LazyLoader, Props } from './LazyLoader';\nimport { SceneGridLayout } from './SceneGridLayout';\nimport { SceneGridItemLike } from './types';\n\nexport function SceneGridLayoutRenderer({ model }: SceneComponentProps<SceneGridLayout>) {\n const { children, isLazy } = model.useState();\n const LazyWrapper = isLazy ? LazyLoader : ({ style, children }: Props) => <div style={style}>{children}</div>;\n validateChildrenSize(children);\n\n return (\n <AutoSizer disableHeight>\n {({ width }) => {\n if (width === 0) {\n return null;\n }\n\n const layout = model.buildGridLayout(width);\n\n const cellWidth = (width - (GRID_COLUMN_COUNT - 1) * GRID_CELL_VMARGIN) / GRID_COLUMN_COUNT;\n return (\n /**\n * The children is using a width of 100% so we need to guarantee that it is wrapped\n * in an element that has the calculated size given by the AutoSizer. The AutoSizer\n * has a width of 0 and will let its content overflow its div.\n */\n <div style={{ width: `${width}px`, height: '100%' }}>\n <ReactGridLayout\n width={width}\n /*\n Disable draggable if mobile device, solving an issue with unintentionally\n moving panels. https://github.com/grafana/grafana/issues/18497\n theme.breakpoints.md = 769\n */\n isDraggable={width > 768}\n isResizable={false}\n containerPadding={[0, 0]}\n useCSSTransforms={false}\n margin={[GRID_CELL_VMARGIN, GRID_CELL_VMARGIN]}\n cols={GRID_COLUMN_COUNT}\n rowHeight={GRID_CELL_HEIGHT}\n draggableHandle={`.grid-drag-handle-${model.state.key}`}\n draggableCancel=\".grid-drag-cancel\"\n // @ts-ignore: ignoring for now until we make the size type numbers-only\n layout={layout}\n onDragStop={model.onDragStop}\n onResizeStop={model.onResizeStop}\n onLayoutChange={model.onLayoutChange}\n isBounded={false}\n >\n {layout.map((gridItem) => {\n const sceneChild = model.getSceneLayoutChild(gridItem.i)!;\n const pixelWidth = cellToPixelSize(sceneChild.state.width ?? 0, cellWidth, GRID_CELL_VMARGIN);\n const pixelHeight = cellToPixelSize(sceneChild.state.height ?? 0, GRID_CELL_HEIGHT, GRID_CELL_VMARGIN);\n\n // Need a wrapper around LazyLoader as ReactGridLayout expects a\n // class component to give a ref to.\n return (\n <div style={{ display: 'flex' }} key={sceneChild.state.key}>\n <LazyWrapper width={pixelWidth} height={pixelHeight} style={{ display: 'flex' }}>\n <sceneChild.Component model={sceneChild} key={sceneChild.state.key} />\n </LazyWrapper>\n </div>\n );\n })}\n </ReactGridLayout>\n </div>\n );\n }}\n </AutoSizer>\n );\n}\n\nfunction validateChildrenSize(children: SceneGridItemLike[]) {\n if (\n children.some(\n (c) =>\n c.state.height === undefined ||\n c.state.width === undefined ||\n c.state.x === undefined ||\n c.state.y === undefined\n )\n ) {\n throw new Error('All children must have a size specified');\n }\n}\n\nfunction cellToPixelSize(sizeInCells: number, sizeOfCellInPx: number, margin = 0) {\n return Math.max(Math.round(sizeInCells * (sizeOfCellInPx + margin) - margin), 0);\n}\n","import React from 'react';\n\nimport { Icon } from '@grafana/ui';\n\nexport function SceneDragHandle({ className, dragClass }: { className?: string; dragClass: string }) {\n return (\n <div\n className={`${className} ${dragClass}`}\n style={{\n width: '20px',\n height: '20px',\n cursor: 'move',\n }}\n >\n <Icon name=\"draggabledots\" />\n </div>\n );\n}\n","import { css, cx } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Icon, useStyles2 } from '@grafana/ui';\n\nimport { SceneObjectBase } from '../../../core/SceneObjectBase';\nimport { SceneComponentProps, SceneObjectUrlValues } from '../../../core/types';\nimport { SceneObjectUrlSyncConfig } from '../../../services/SceneObjectUrlSyncConfig';\nimport { SceneDragHandle } from '../../SceneDragHandle';\n\nimport { SceneGridLayout } from './SceneGridLayout';\nimport { GRID_COLUMN_COUNT } from './constants';\nimport { SceneGridItemLike, SceneGridItemStateLike } from './types';\n\nexport interface SceneGridRowState extends SceneGridItemStateLike {\n title: string;\n isCollapsible?: boolean;\n isCollapsed?: boolean;\n children: SceneGridItemLike[];\n}\n\nexport class SceneGridRow extends SceneObjectBase<SceneGridRowState> {\n public static Component = SceneGridRowRenderer;\n\n protected _urlSync = new SceneObjectUrlSyncConfig(this, { keys: ['rowc'] });\n\n public constructor(state: Partial<SceneGridRowState>) {\n super({\n children: state.children || [],\n isCollapsible: state.isCollapsible || true,\n title: state.title || '',\n isDraggable: state.isDraggable || true,\n isResizable: state.isResizable || false,\n ...state,\n x: 0,\n height: 1,\n width: GRID_COLUMN_COUNT,\n });\n }\n\n public getGridLayout(): SceneGridLayout {\n const layout = this.parent;\n\n if (!layout || !(layout instanceof SceneGridLayout)) {\n throw new Error('SceneGridRow must be a child of SceneGridLayout');\n }\n\n return layout;\n }\n\n public onCollapseToggle = () => {\n if (!this.state.isCollapsible) {\n return;\n }\n\n this.getGridLayout().toggleRow(this);\n };\n\n public getUrlState() {\n return { rowc: this.state.isCollapsed ? '1' : '0' };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues) {\n const isCollapsed = values.rowc === '1';\n if (isCollapsed !== this.state.isCollapsed) {\n this.onCollapseToggle();\n }\n }\n}\n\nexport function SceneGridRowRenderer({ model }: SceneComponentProps<SceneGridRow>) {\n const styles = useStyles2(getSceneGridRowStyles);\n const { isCollapsible, isCollapsed, title, isDraggable } = model.useState();\n const dragHandle = <SceneDragHandle dragClass={model.getGridLayout().getDragClass()} />;\n\n return (\n <div className={styles.row}>\n <div className={cx(styles.rowHeader, isCollapsed && styles.rowHeaderCollapsed)}>\n <button onClick={model.onCollapseToggle} className={styles.rowTitleButton}>\n {isCollapsible && <Icon name={isCollapsed ? 'angle-right' : 'angle-down'} />}\n <span className={styles.rowTitle}>{title}</span>\n </button>\n {isDraggable && isCollapsed && <div>{dragHandle}</div>}\n </div>\n </div>\n );\n}\n\nconst getSceneGridRowStyles = (theme: GrafanaTheme2) => {\n return {\n row: css({\n width: '100%',\n height: '100%',\n position: 'relative',\n zIndex: 0,\n display: 'flex',\n flexDirection: 'column',\n }),\n rowHeader: css({\n width: '100%',\n height: '30px',\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: '8px',\n border: `1px solid transparent`,\n }),\n rowTitleButton: css({\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n background: 'transparent',\n border: 'none',\n gap: theme.spacing(1),\n }),\n rowHeaderCollapsed: css({\n marginBottom: '0px',\n background: theme.colors.background.primary,\n border: `1px solid ${theme.colors.border.weak}`,\n borderRadius: theme.shape.borderRadius(1),\n }),\n rowTitle: css({\n fontSize: theme.typography.h5.fontSize,\n fontWeight: theme.typography.fontWeightMedium,\n }),\n };\n};\n","import React from 'react';\nimport ReactGridLayout from 'react-grid-layout';\n\nimport { SceneObjectBase } from '../../../core/SceneObjectBase';\nimport { SceneComponentProps, SceneLayout, SceneObject, SceneObjectState } from '../../../core/types';\nimport { DEFAULT_PANEL_SPAN } from './constants';\nimport { SceneGridLayoutRenderer } from './SceneGridLayoutRenderer';\n\nimport { SceneGridRow } from './SceneGridRow';\nimport { SceneGridItemLike, SceneGridItemPlacement, SceneGridItemStateLike } from './types';\n\ninterface SceneGridLayoutState extends SceneObjectState {\n /**\n * Turn on or off dragging for all items. Indiviadual items can still disabled via isDraggable property\n **/\n isDraggable?: boolean;\n isLazy?: boolean;\n children: SceneGridItemLike[];\n}\n\nexport class SceneGridLayout extends SceneObjectBase<SceneGridLayoutState> implements SceneLayout {\n public static Component = SceneGridLayoutRenderer;\n\n private _skipOnLayoutChange = false;\n\n public constructor(state: SceneGridLayoutState) {\n super({\n ...state,\n isDraggable: true,\n children: sortChildrenByPosition(state.children),\n });\n }\n\n /**\n * SceneLayout interface. Used for example by VizPanelRenderer\n */\n public isDraggable(): boolean {\n return this.state.isDraggable ?? false;\n }\n\n public getDragClass() {\n return `grid-drag-handle-${this.state.key}`;\n }\n\n public getDragClassCancel() {\n return `grid-drag-cancel`;\n }\n\n public toggleRow(row: SceneGridRow) {\n const isCollapsed = row.state.isCollapsed;\n\n if (!isCollapsed) {\n row.setState({ isCollapsed: true });\n // To force re-render\n this.setState({});\n return;\n }\n\n const rowChildren = row.state.children;\n\n if (rowChildren.length === 0) {\n row.setState({ isCollapsed: false });\n this.setState({});\n return;\n }\n\n // Ok we are expanding row. We need to update row children y pos (incase they are incorrect) and push items below down\n // Code copied from DashboardModel toggleRow()\n\n const rowY = row.state.y!;\n const firstPanelYPos = rowChildren[0].state.y ?? rowY;\n const yDiff = firstPanelYPos - (rowY + 1);\n\n // y max will represent the bottom y pos after all panels have been added\n // needed to know home much panels below should be pushed down\n let yMax = rowY;\n\n for (const panel of rowChildren) {\n // set the y gridPos if it wasn't already set\n const newSize = { ...panel.state };\n newSize.y = newSize.y ?? rowY;\n // make sure y is adjusted (in case row moved while collapsed)\n newSize.y -= yDiff;\n if (newSize.y! > panel.state.y!) {\n panel.setState(newSize);\n }\n // update insert post and y max\n yMax = Math.max(yMax, Number(newSize.y!) + Number(newSize.height!));\n }\n\n const pushDownAmount = yMax - rowY - 1;\n\n // push panels below down\n for (const child of this.state.children) {\n if (child.state.y! > rowY) {\n this.pushChildDown(child, pushDownAmount);\n }\n\n if (isSceneGridRow(child) && child !== row) {\n for (const rowChild of child.state.children) {\n if (rowChild.state.y! > rowY) {\n this.pushChildDown(rowChild, pushDownAmount);\n }\n }\n }\n }\n\n row.setState({ isCollapsed: false });\n // Trigger re-render\n this.setState({});\n }\n\n public onLayoutChange = (layout: ReactGridLayout.Layout[]) => {\n if (this._skipOnLayoutChange) {\n // Layout has been updated by other RTL handler already\n this._skipOnLayoutChange = false;\n return;\n }\n\n for (const item of layout) {\n const child = this.getSceneLayoutChild(item.i);\n\n const nextSize: SceneGridItemPlacement = {\n x: item.x,\n y: item.y,\n width: item.w,\n height: item.h,\n };\n\n if (!isItemSizeEqual(child.state, nextSize)) {\n child.setState({\n ...nextSize,\n });\n }\n }\n\n this.setState({ children: sortChildrenByPosition(this.state.children) });\n };\n\n /**\n * Will also scan row children and return child of the row\n */\n public getSceneLayoutChild(key: string) {\n for (const child of this.state.children) {\n if (child.state.key === key) {\n return child;\n }\n\n if (child instanceof SceneGridRow) {\n for (const rowChild of child.state.children) {\n if (rowChild.state.key === key) {\n return rowChild;\n }\n }\n }\n }\n\n throw new Error('Scene layout child not found for GridItem');\n }\n\n public onResizeStop: ReactGridLayout.ItemCallback = (_, o, n) => {\n const child = this.getSceneLayoutChild(n.i);\n child.setState({\n width: n.w,\n height: n.h,\n });\n };\n\n private pushChildDown(child: SceneGridItemLike, amount: number) {\n child.setState({\n y: child.state.y! + amount,\n });\n }\n\n /**\n * We assume the layout array is storted according to y pos, and walk upwards until we find a row.\n * If it is collapsed there is no row to add it to. The default is then to return the SceneGridLayout itself\n */\n private findGridItemSceneParent(layout: ReactGridLayout.Layout[], startAt: number): SceneGridRow | SceneGridLayout {\n for (let i = startAt; i >= 0; i--) {\n const gridItem = layout[i];\n const sceneChild = this.getSceneLayoutChild(gridItem.i);\n\n if (sceneChild instanceof SceneGridRow) {\n // the closest row is collapsed return null\n if (sceneChild.state.isCollapsed) {\n return this;\n }\n\n return sceneChild;\n }\n }\n\n return this;\n }\n\n /**\n * This likely needs a slighltly different approach. Where we clone or deactivate or and re-activate the moved child\n */\n public moveChildTo(child: SceneGridItemLike, target: SceneGridLayout | SceneGridRow) {\n const currentParent = child.parent!;\n let rootChildren = this.state.children;\n\n const newChild = child.clone({ key: child.state.key });\n\n // Remove from current parent row\n if (currentParent instanceof SceneGridRow) {\n const newRow = currentParent.clone({\n children: currentParent.state.children.filter((c) => c.state.key !== child.state.key),\n });\n\n // new children with new row\n rootChildren = rootChildren.map((c) => (c === currentParent ? newRow : c));\n\n // if target is also a row\n if (target instanceof SceneGridRow) {\n const targetRow = target.clone({ children: [...target.state.children, newChild] });\n rootChildren = rootChildren.map((c) => (c === target ? targetRow : c));\n } else {\n // target is the main grid\n rootChildren = [...rootChildren, newChild];\n }\n } else {\n if (!(target instanceof SceneGridLayout)) {\n // current parent is the main grid remove it from there\n rootChildren = rootChildren.filter((c) => c.state.key !== child.state.key);\n // Clone the target row and add the child\n const targetRow = target.clone({ children: [...target.state.children, newChild] });\n // Replace row with new row\n rootChildren = rootChildren.map((c) => (c === target ? targetRow : c));\n }\n }\n\n return rootChildren;\n }\n\n public onDragStop: ReactGridLayout.ItemCallback = (gridLayout, o, updatedItem) => {\n const sceneChild = this.getSceneLayoutChild(updatedItem.i)!;\n\n // Need to resort the grid layout based on new position (needed to to find the new parent)\n gridLayout = sortGridLayout(gridLayout);\n\n // Update children positions if they have changed\n for (let i = 0; i < gridLayout.length; i++) {\n const gridItem = gridLayout[i];\n const child = this.getSceneLayoutChild(gridItem.i)!;\n const childSize = child.state;\n\n if (childSize?.x !== gridItem.x || childSize?.y !== gridItem.y) {\n child.setState({\n x: gridItem.x,\n y: gridItem.y,\n });\n }\n }\n\n // Update the parent if the child if it has moved to a row or back to the grid\n const indexOfUpdatedItem = gridLayout.findIndex((item) => item.i === updatedItem.i);\n const newParent = this.findGridItemSceneParent(gridLayout, indexOfUpdatedItem - 1);\n let newChildren = this.state.children;\n\n if (newParent !== sceneChild.parent) {\n newChildren = this.moveChildTo(sceneChild, newParent);\n }\n\n this.setState({ children: sortChildrenByPosition(newChildren) });\n this._skipOnLayoutChange = true;\n };\n\n private toGridCell(child: SceneGridItemLike): ReactGridLayout.Layout {\n const size = child.state;\n\n let x = size.x ?? 0;\n let y = size.y ?? 0;\n const w = Number.isInteger(Number(size.width)) ? Number(size.width) : DEFAULT_PANEL_SPAN;\n const h = Number.isInteger(Number(size.height)) ? Number(size.height) : DEFAULT_PANEL_SPAN;\n\n let isDraggable = Boolean(child.state.isDraggable);\n let isResizable = Boolean(child.state.isResizable);\n\n if (child instanceof SceneGridRow) {\n isDraggable = child.state.isCollapsed ? true : false;\n isResizable = false;\n }\n\n return { i: child.state.key!, x, y, h, w, isResizable, isDraggable };\n }\n\n public buildGridLayout(width: number): ReactGridLayout.Layout[] {\n let cells: ReactGridLayout.Layout[] = [];\n\n for (const child of this.state.children) {\n cells.push(this.toGridCell(child));\n\n if (child instanceof SceneGridRow && !child.state.isCollapsed) {\n for (const rowChild of child.state.children) {\n cells.push(this.toGridCell(rowChild));\n }\n }\n }\n\n // Sort by position\n cells = sortGridLayout(cells);\n\n if (width < 768) {\n // We should not persist the mobile layout\n this._skipOnLayoutChange = true;\n return cells.map((cell) => ({ ...cell, w: 24 }));\n }\n\n this._skipOnLayoutChange = false;\n\n return cells;\n }\n}\n\ninterface SceneGridItemState extends SceneGridItemStateLike {\n body: SceneObject | undefined;\n}\nexport class SceneGridItem extends SceneObjectBase<SceneGridItemState> implements SceneGridItemLike {\n static Component = SceneGridItemRenderer;\n}\n\nfunction SceneGridItemRenderer({ model }: SceneComponentProps<SceneGridItem>) {\n const { body } = model.useState();\n const parent = model.parent;\n\n if (parent && !isSceneGridLayout(parent) && !isSceneGridRow(parent)) {\n throw new Error('SceneGridItem must be a child of SceneGridLayout or SceneGridRow');\n }\n\n if (!body) {\n return null;\n }\n\n return <body.Component model={body} />;\n}\n\nfunction isItemSizeEqual(a: SceneGridItemPlacement, b: SceneGridItemPlacement) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\nfunction sortChildrenByPosition(children: SceneGridItemLike[]) {\n return [...children].sort((a, b) => {\n return a.state.y! - b.state.y! || a.state.x! - b.state.x!;\n });\n}\n\nfunction sortGridLayout(layout: ReactGridLayout.Layout[]) {\n return [...layout].sort((a, b) => a.y - b.y || a.x! - b.x);\n}\n\nfunction isSceneGridRow(child: SceneObject): child is SceneGridRow {\n return child instanceof SceneGridRow;\n}\n\nfunction isSceneGridLayout(child: SceneObject): child is SceneGridLayout {\n return child instanceof SceneGridLayout;\n}\n","import { RouteComponentProps, useLocation } from 'react-router-dom';\n\nimport { UrlQueryMap, urlUtil } from '@grafana/data';\nimport { locationSearchToObject } from '@grafana/runtime';\nimport { SceneObject } from '../../core/types';\nimport React from 'react';\n\nexport function useAppQueryParams(): UrlQueryMap {\n const location = useLocation();\n return locationSearchToObject(location.search || '');\n}\n\nexport function getLinkUrlWithAppUrlState(path: string, params: UrlQueryMap, preserveParams?: string[]): string {\n // make a copy of params as the renderUrl function mutates the object\n const paramsCopy = { ...params };\n\n if (preserveParams) {\n for (const key of Object.keys(paramsCopy)) {\n // if param is not in preserveParams, remove it\n if (!preserveParams.includes(key)) {\n delete paramsCopy[key];\n }\n }\n }\n\n return urlUtil.renderUrl(path, paramsCopy);\n}\n\nexport function renderSceneComponentWithRouteProps(sceneObject: SceneObject, routeProps: RouteComponentProps) {\n return React.createElement(sceneObject.Component, { model: sceneObject, routeProps: routeProps });\n}\n","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\n\nimport { SceneComponentProps } from '../../core/types';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneAppState } from './types';\nimport { renderSceneComponentWithRouteProps } from './utils';\n\n/**\n * Responsible for top level pages routing\n */\nexport class SceneApp extends SceneObjectBase<SceneAppState> {\n public static Component = ({ model }: SceneComponentProps<SceneApp>) => {\n const { pages } = model.useState();\n\n return (\n <Switch>\n {pages.map((page) => (\n <Route\n key={page.state.url}\n exact={false}\n path={page.state.url}\n render={(props) => renderSceneComponentWithRouteProps(page, props)}\n ></Route>\n ))}\n </Switch>\n );\n };\n}\n","import React from 'react';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { SceneComponentProps, SceneObjectState } from '../core/types';\n\nexport interface SceneReactObjectState<TProps = {}> extends SceneObjectState {\n /**\n * React component to render\n */\n component?: React.ComponentType<TProps>;\n /**\n * Props to pass to the component\n */\n props?: TProps;\n /**\n * Alternative to component and props is just to pass a React node\n */\n reactNode?: React.ReactNode;\n}\n\n/**\n * A utility object that can be used to render any React component or ReactNode\n */\nexport class SceneReactObject extends SceneObjectBase<SceneReactObjectState> {\n public static Component = ({ model }: SceneComponentProps<SceneReactObject>) => {\n const { component: Component, props, reactNode } = model.useState();\n\n if (Component) {\n return <Component {...props} />;\n }\n\n if (reactNode) {\n return reactNode;\n }\n\n return null;\n };\n}\n","import { NavModelItem, UrlQueryMap } from '@grafana/data';\nimport { PluginPage } from '@grafana/runtime';\nimport React, { useLayoutEffect, useState } from 'react';\n\nimport { RouteComponentProps } from 'react-router-dom';\nimport { SceneObject } from '../../core/types';\nimport { SceneAppPage } from './SceneAppPage';\nimport { SceneAppDrilldownView, SceneAppPageLike } from './types';\nimport { getLinkUrlWithAppUrlState, renderSceneComponentWithRouteProps, useAppQueryParams } from './utils';\n\nexport interface Props {\n page: SceneAppPageLike;\n // activeTab?: SceneAppPageLike;\n routeProps: RouteComponentProps;\n}\n\nexport function SceneAppPageView({ page, routeProps }: Props) {\n const containerPage = getParentPageIfTab(page);\n const containerState = containerPage.useState();\n const params = useAppQueryParams();\n const scene = page.getScene(routeProps.match);\n const [initialized, setInitialized] = useState(false);\n\n useLayoutEffect(() => {\n // Before rendering scene components, we are making sure the URL sync is enabled for.\n if (!initialized) {\n containerPage.initializeScene(scene);\n setInitialized(true);\n }\n }, [initialized, scene, containerPage]);\n\n if (!initialized) {\n return null;\n }\n\n const pageNav: NavModelItem = {\n text: containerState.title,\n subTitle: containerState.subTitle,\n img: containerState.titleImg,\n icon: containerState.titleIcon,\n url: getLinkUrlWithAppUrlState(containerState.url, params, containerState.preserveUrlKeys),\n hideFromBreadcrumbs: containerState.hideFromBreadcrumbs,\n parentItem: getParentBreadcrumbs(\n containerState.getParentPage ? containerState.getParentPage() : page.parent,\n params\n ),\n };\n\n if (containerState.tabs) {\n pageNav.children = containerState.tabs.map((tab) => {\n return {\n text: tab.state.title,\n active: page === tab,\n url: getLinkUrlWithAppUrlState(tab.state.url, params, tab.state.preserveUrlKeys),\n parentItem: pageNav,\n };\n });\n }\n\n let pageActions: React.ReactNode = undefined;\n if (containerState.controls) {\n pageActions = containerState.controls.map((control) => (\n <control.Component model={control} key={control.state.key} />\n ));\n }\n\n return (\n <PluginPage pageNav={pageNav} actions={pageActions} renderTitle={containerState.renderTitle}>\n <scene.Component model={scene} />\n </PluginPage>\n );\n}\n\n/**\n * For pages that are \"tabs\" this will return the parent page\n */\nfunction getParentPageIfTab(page: SceneAppPageLike) {\n if (page.parent instanceof SceneAppPage) {\n return page.parent;\n }\n\n return page;\n}\n\nfunction getParentBreadcrumbs(parent: SceneObject | undefined, params: UrlQueryMap): NavModelItem | undefined {\n if (parent instanceof SceneAppPage) {\n return {\n text: parent.state.title,\n url: getLinkUrlWithAppUrlState(parent.state.url, params, parent.state.preserveUrlKeys),\n hideFromBreadcrumbs: parent.state.hideFromBreadcrumbs,\n parentItem: getParentBreadcrumbs(\n parent.state.getParentPage ? parent.state.getParentPage() : parent.parent,\n params\n ),\n };\n }\n\n return undefined;\n}\n\nexport interface SceneAppDrilldownViewRenderProps {\n drilldown: SceneAppDrilldownView;\n parent: SceneAppPageLike;\n routeProps: RouteComponentProps;\n}\n\nexport function SceneAppDrilldownViewRender({ drilldown, parent, routeProps }: SceneAppDrilldownViewRenderProps) {\n return renderSceneComponentWithRouteProps(parent.getDrilldownPage(drilldown, routeProps.match), routeProps);\n}\n","import React from 'react';\nimport { Route, RouteComponentProps, Switch } from 'react-router-dom';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneComponentProps } from '../../core/types';\nimport { getUrlSyncManager } from '../../services/UrlSyncManager';\nimport { EmbeddedScene } from '../EmbeddedScene';\nimport { SceneFlexItem, SceneFlexLayout } from '../layout/SceneFlexLayout';\nimport { SceneReactObject } from '../SceneReactObject';\nimport { SceneAppDrilldownViewRender, SceneAppPageView } from './SceneAppPageView';\nimport { SceneAppDrilldownView, SceneAppPageLike, SceneAppPageState, SceneRouteMatch } from './types';\nimport { renderSceneComponentWithRouteProps } from './utils';\n\n/**\n * Responsible for page's drilldown & tabs routing\n */\nexport class SceneAppPage extends SceneObjectBase<SceneAppPageState> implements SceneAppPageLike {\n public static Component = SceneAppPageRenderer;\n private _sceneCache = new Map<string, EmbeddedScene>();\n private _drilldownCache = new Map<string, SceneAppPageLike>();\n\n public constructor(state: SceneAppPageState) {\n super(state);\n\n this.addActivationHandler(() => {\n return () => getUrlSyncManager().cleanUp(this);\n });\n }\n\n public initializeScene(scene: EmbeddedScene) {\n this.setState({ initializedScene: scene });\n getUrlSyncManager().initSync(this);\n }\n\n public getScene(routeMatch: SceneRouteMatch): EmbeddedScene {\n let scene = this._sceneCache.get(routeMatch.url);\n\n if (scene) {\n return scene;\n }\n\n if (!this.state.getScene) {\n throw new Error('Missing getScene on SceneAppPage ' + this.state.title);\n }\n\n scene = this.state.getScene(routeMatch);\n this._sceneCache.set(routeMatch.url, scene);\n\n return scene;\n }\n\n public getDrilldownPage(drilldown: SceneAppDrilldownView, routeMatch: SceneRouteMatch<{}>): SceneAppPageLike {\n let page = this._drilldownCache.get(routeMatch!.url);\n if (page) {\n return page;\n }\n\n page = drilldown.getPage(routeMatch, this);\n this._drilldownCache.set(routeMatch!.url, page);\n\n return page;\n }\n}\n\nexport interface SceneAppPageRendererProps extends SceneComponentProps<SceneAppPage> {\n routeProps: RouteComponentProps;\n}\n\nfunction SceneAppPageRenderer({ model, routeProps }: SceneAppPageRendererProps) {\n const { tabs, drilldowns } = model.useState();\n const routes: React.ReactNode[] = [];\n\n if (tabs && tabs.length > 0) {\n for (let tabIndex = 0; tabIndex < tabs.length; tabIndex++) {\n const tab = tabs[tabIndex];\n\n // Add first tab as a default route, this makes it possible for the first tab to render with the url of the parent page\n if (tabIndex === 0) {\n routes.push(\n <Route\n exact={true}\n key={model.state.url}\n path={model.state.routePath ?? model.state.url}\n render={(props) => renderSceneComponentWithRouteProps(tab, props)}\n ></Route>\n );\n }\n\n routes.push(\n <Route\n exact={true}\n key={tab.state.url}\n path={tab.state.routePath ?? tab.state.url}\n render={(props) => renderSceneComponentWithRouteProps(tab, props)}\n ></Route>\n );\n\n if (tab.state.drilldowns) {\n for (const drilldown of tab.state.drilldowns) {\n routes.push(\n <Route\n exact={false}\n key={drilldown.routePath}\n path={drilldown.routePath}\n render={(props) => <SceneAppDrilldownViewRender drilldown={drilldown} parent={tab} routeProps={props} />}\n ></Route>\n );\n }\n }\n }\n\n routes.push(getFallbackRoute(model, routeProps));\n\n return <Switch>{routes}</Switch>;\n }\n\n if (drilldowns) {\n for (const drilldown of drilldowns) {\n routes.push(\n <Route\n key={drilldown.routePath}\n exact={false}\n path={drilldown.routePath}\n render={(props) => <SceneAppDrilldownViewRender drilldown={drilldown} parent={model} routeProps={props} />}\n ></Route>\n );\n }\n }\n\n if (isCurrentPageRouteMatch(model, routeProps.match)) {\n return <SceneAppPageView page={model} routeProps={routeProps} />;\n }\n\n routes.push(getFallbackRoute(model, routeProps));\n\n return <Switch>{routes}</Switch>;\n}\n\nfunction getFallbackRoute(page: SceneAppPage, routeProps: RouteComponentProps) {\n return (\n <Route\n key={'fallback route'}\n render={(props) => {\n const fallbackPage = getDefaultFallbackPage();\n return <SceneAppPageView page={fallbackPage} routeProps={routeProps} />;\n }}\n ></Route>\n );\n}\n\nfunction isCurrentPageRouteMatch(page: SceneAppPage, match: SceneRouteMatch) {\n if (!match.isExact) {\n return false;\n }\n\n // current page matches the route url\n if (match.url === page.state.url) {\n return true;\n }\n\n // check if we are a tab and the first tab, then we should also render on the parent url\n if (\n page.parent instanceof SceneAppPage &&\n page.parent.state.tabs![0] === page &&\n page.parent.state.url === match.url\n ) {\n return true;\n }\n\n return false;\n}\n\nfunction getDefaultFallbackPage() {\n return new SceneAppPage({\n url: '',\n title: 'Not found',\n subTitle: 'The url did not match any page',\n getScene: () => {\n return new EmbeddedScene({\n body: new SceneFlexLayout({\n direction: 'column',\n children: [\n new SceneFlexItem({\n body: new SceneReactObject({\n component: () => {\n return (\n <div data-testid=\"default-fallback-content\">\n If you found your way here using a link then there might be a bug in this application.\n </div>\n );\n },\n }),\n }),\n ],\n }),\n });\n },\n });\n}\n"],"names":["BusEventWithPayload","__objRest","_a","React","useEffect","__spreadValues","EventBusSrv","Subscription","uuidv4","useState","LoadingState","getDefaultTimeRange","getTimeZone","toUtc","dateMath","property","Registry","VariableFormatID","map","escapeRegex","isArray","textUtil","replace","dateTime","getTimeRange","urlUtil","getFieldDisplayName","__spreadProps","formatLabels","formattedValueToString","FieldType","getDisplayProcessor","getFieldDisplayValuesProxy","getFrameDisplayName","DataLinkBuiltInVars","getDataSourceSrv","isEqual","data","preProcessPanelData","CoreApp","cloneDeep","rangeUtil","getRunRequest","transformDataFrame","useStyles2","getStyles","VariableHide","Tooltip","selectors","css","VariableRefresh","Select","MultiSelect","of","stringToJsRegex","VariableSupportType","from","mergeMap","isNumber","uniqBy","VariableSort","sortBy","toLower","getProcessedDataFrames","isDataFrame","filter","take","throwError","catchError","Subject","Observable","useDebounce","useCallback","Input","locationService","useMeasure","PanelChrome","ErrorBoundaryAlert","PluginContextProvider","PanelContextProvider","getAppEvents","isSystemOverrideWithRef","SeriesVisibilityChangeMode","override","createOverride","ByNamesMatcherMode","FieldMatcherID","fieldMatchers","FieldColorModeId","getPluginImportUtils","DashboardCursorSync","getPanelOptionsWithDefaults","config","compareArrayValues","compareDataFrameStructures","applyFieldOverrides","items","Menu","ToolbarButton","Stack","Button","useTheme2","TimeRangePicker","RefreshPicker","useMemo","useRef","uniqueId","useEffectOnce","children","AutoSizer","ReactGridLayout","Icon","cx","useLocation","locationSearchToObject","Switch","Route","useLayoutEffect","PluginPage"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/core/types.ts","../src/core/events.ts","../src/core/SceneComponentWrapper.tsx","../src/core/utils.ts","../src/core/SceneObjectBase.tsx","../src/core/SceneDataNode.ts","../src/services/SceneObjectUrlSyncConfig.ts","../src/core/SceneTimeRange.tsx","../src/variables/interpolation/defaults.ts","../src/variables/types.ts","../src/variables/interpolation/fieldAccessorCache.ts","../src/variables/interpolation/ScopedVarsVariable.ts","../src/variables/constants.ts","../src/variables/interpolation/formatRegistry.ts","../src/variables/lookupVariable.ts","../src/variables/macros/types.ts","../src/variables/macros/UrlTimeRangeMacro.ts","../src/variables/macros/AllVariablesMacro.ts","../src/variables/macros/templateProxies.ts","../src/variables/macros/dataMacros.ts","../src/variables/macros/index.ts","../src/variables/interpolation/sceneInterpolator.ts","../src/core/sceneGraph.ts","../src/core/SceneTimeZoneOverride.tsx","../src/utils/getDataSource.ts","../src/variables/VariableDependencyConfig.ts","../src/utils/writeSceneLog.ts","../src/variables/utils.ts","../src/variables/VariableValueRecorder.ts","../src/querying/SceneQueryRunner.ts","../src/querying/SceneDataTransformer.ts","../src/variables/components/VariableValueSelectors.tsx","../src/variables/sets/SceneVariableSet.ts","../src/variables/variants/ConstantVariable.ts","../src/variables/components/VariableValueSelect.tsx","../src/variables/variants/MultiValueVariable.ts","../src/variables/variants/CustomVariable.tsx","../src/variables/variants/DataSourceVariable.tsx","../src/variables/variants/query/guards.ts","../src/variables/variants/query/createQueryVariableRunner.ts","../src/variables/variants/query/utils.ts","../src/variables/variants/query/toMetricFindValues.ts","../src/variables/variants/query/QueryVariable.tsx","../src/utils/metricTree.ts","../src/variables/variants/TestVariable.tsx","../src/variables/components/VariableValueInput.tsx","../src/variables/variants/TextBoxVariable.tsx","../src/services/UrlSyncManager.ts","../src/components/EmbeddedScene.tsx","../src/components/VizPanel/VizPanelRenderer.tsx","../src/components/VizPanel/seriesVisibilityConfigFactory.ts","../src/components/VizPanel/colorSeriesConfigFactory.ts","../src/components/VizPanel/registerRuntimePanelPlugin.ts","../src/components/VizPanel/VizPanel.tsx","../src/components/VizPanel/VizPanelMenu.tsx","../src/components/NestedScene.tsx","../src/components/SceneCanvasText.tsx","../src/components/SceneToolbarButton.tsx","../src/components/SceneTimePicker.tsx","../src/components/SceneRefreshPicker.tsx","../src/components/SceneByFrameRepeater.tsx","../src/components/SceneControlsSpacer.tsx","../src/components/layout/SceneFlexLayout.tsx","../src/components/layout/grid/constants.ts","../src/components/layout/grid/LazyLoader.tsx","../src/components/layout/grid/SceneGridLayoutRenderer.tsx","../src/components/SceneDragHandle.tsx","../src/components/layout/grid/SceneGridRow.tsx","../src/components/layout/grid/SceneGridLayout.tsx","../src/components/SceneApp/utils.ts","../src/components/SceneApp/SceneApp.tsx","../src/components/SceneReactObject.tsx","../src/components/SceneApp/SceneAppPageView.tsx","../src/components/SceneApp/SceneAppPage.tsx"],"sourcesContent":["import React from 'react';\nimport { MonoTypeOperatorFunction, Unsubscribable } from 'rxjs';\n\nimport {\n BusEvent,\n BusEventHandler,\n BusEventType,\n DataFrame,\n DataTransformContext,\n PanelData,\n TimeRange,\n} from '@grafana/data';\nimport { TimeZone } from '@grafana/schema';\n\nimport { SceneVariableDependencyConfigLike, SceneVariables } from '../variables/types';\n\nexport interface SceneObjectState {\n key?: string;\n $timeRange?: SceneTimeRangeLike;\n $data?: SceneDataProvider;\n $variables?: SceneVariables;\n /**\n * @experimental\n * Can be used to add extra behaviors to a scene object.\n * These are activated when the their parent scene object is activated.\n */\n $behaviors?: Array<SceneObject | SceneStatelessBehavior>;\n}\n\nexport interface SceneLayoutChildOptions {\n width?: number | string;\n height?: number | string;\n xSizing?: 'fill' | 'content';\n ySizing?: 'fill' | 'content';\n x?: number;\n y?: number;\n minWidth?: number | string;\n minHeight?: number | string;\n isDraggable?: boolean;\n isResizable?: boolean;\n}\n\nexport interface SceneComponentProps<T> {\n model: T;\n}\n\nexport type SceneComponent<TModel> = (props: SceneComponentProps<TModel>) => React.ReactElement | null;\n\nexport interface SceneDataState extends SceneObjectState {\n data?: PanelData;\n}\n\nexport interface SceneObject<TState extends SceneObjectState = SceneObjectState> {\n /** The current state */\n readonly state: TState;\n\n /** True when there is a React component mounted for this Object */\n readonly isActive: boolean;\n\n /** SceneObject parent */\n readonly parent?: SceneObject;\n\n /** This abtractions declares what variables the scene object depends on and how to handle when they change value. **/\n readonly variableDependency?: SceneVariableDependencyConfigLike;\n\n /** This abstraction declares URL sync dependencies of a scene object. **/\n readonly urlSync?: SceneObjectUrlSyncHandler;\n\n /** Subscribe to state changes */\n subscribeToState(handler: SceneStateChangedHandler<TState>): Unsubscribable;\n\n /** Subscribe to a scene event */\n subscribeToEvent<T extends BusEvent>(typeFilter: BusEventType<T>, handler: BusEventHandler<T>): Unsubscribable;\n\n /** Publish an event and optionally bubble it up the scene */\n publishEvent(event: BusEvent, bubble?: boolean): void;\n\n /** Utility hook that wraps useObservable. Used by React components to subscribes to state changes */\n useState(): TState;\n\n /** How to modify state */\n setState(state: Partial<TState>): void;\n\n /**\n * Called when the Component is mounted. This will also activate any $data, $variables or $timeRange scene object on this level.\n * Don't override this in your custom SceneObjects, instead use addActivationHandler from the constructor.\n **/\n activate(): CancelActivationHandler;\n\n /** Get the scene root */\n getRoot(): SceneObject;\n\n /** Returns a deep clone this object and all its children */\n clone(state?: Partial<TState>): this;\n\n /** A React component to use for rendering the object */\n Component(props: SceneComponentProps<SceneObject<TState>>): React.ReactElement | null;\n\n /** Force a re-render, should only be needed when variable values change */\n forceRender(): void;\n\n /**\n * Allows external code to register code that is executed on activate and deactivate. This allow you\n * to wire up scene objects that need to respond to state changes in other objects from the outside.\n **/\n addActivationHandler(handler: SceneActivationHandler): void;\n\n /**\n * Loop through state and call callback for each direct child scene object.\n * Checks 1 level deep properties and arrays. So a scene object hidden in a nested plain object will not be detected.\n */\n forEachChild(callback: (child: SceneObject) => void): void;\n}\n\nexport type SceneActivationHandler = () => SceneDeactivationHandler | void;\nexport type SceneDeactivationHandler = () => void;\n\n/**\n * Function returned by activate() that when called will deactivate the object if it's the last activator\n **/\nexport type CancelActivationHandler = () => void;\n\nexport interface SceneLayoutState extends SceneObjectState {\n children: SceneObject[];\n}\n\nexport interface SceneLayout<T extends SceneLayoutState = SceneLayoutState> extends SceneObject<T> {\n isDraggable(): boolean;\n getDragClass?(): string;\n getDragClassCancel?(): string;\n}\n\nexport interface SceneTimeRangeState extends SceneObjectState {\n from: string;\n to: string;\n fiscalYearStartMonth?: number;\n value: TimeRange;\n timeZone?: TimeZone;\n}\n\nexport interface SceneTimeRangeLike extends SceneObject<SceneTimeRangeState> {\n onTimeZoneChange(timeZone: TimeZone): void;\n onTimeRangeChange(timeRange: TimeRange): void;\n onRefresh(): void;\n getTimeZone(): TimeZone;\n}\n\nexport interface SceneObjectRef {\n ref: SceneObject;\n}\n\nexport function isSceneObject(obj: any): obj is SceneObject {\n return obj.useState !== undefined;\n}\n\nexport interface SceneObjectWithUrlSync extends SceneObject {\n getUrlState(): SceneObjectUrlValues;\n updateFromUrl(values: SceneObjectUrlValues): void;\n}\n\nexport interface SceneObjectUrlSyncHandler {\n getKeys(): string[];\n getUrlState(): SceneObjectUrlValues;\n updateFromUrl(values: SceneObjectUrlValues): void;\n}\n\nexport type SceneObjectUrlValue = string | string[] | undefined | null;\nexport type SceneObjectUrlValues = Record<string, SceneObjectUrlValue>;\n\nexport type CustomTransformOperator = (context: DataTransformContext) => MonoTypeOperatorFunction<DataFrame[]>;\nexport type SceneStateChangedHandler<TState> = (newState: TState, prevState: TState) => void;\n\nexport type DeepPartial<T> = {\n [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];\n};\n\nexport interface SceneDataProvider extends SceneObject<SceneDataState> {\n setContainerWidth?: (width: number) => void;\n}\n\nexport type SceneStatelessBehavior = (sceneObject: SceneObject) => CancelActivationHandler | void;\n","import { BusEventWithPayload } from '@grafana/data';\n\nimport { SceneObject, SceneObjectState } from './types';\n\nexport interface SceneObjectStateChangedPayload<TState extends SceneObjectState = SceneObjectState> {\n prevState: TState;\n newState: TState;\n partialUpdate: Partial<TState>;\n changedObject: SceneObject<TState>;\n}\n\nexport class SceneObjectStateChangedEvent extends BusEventWithPayload<SceneObjectStateChangedPayload> {\n public static readonly type = 'scene-object-state-change';\n}\n","import React, { useEffect } from 'react';\n\nimport { SceneComponentProps, SceneObject } from './types';\n\nfunction SceneComponentWrapperWithoutMemo<T extends SceneObject>({ model, ...otherProps }: SceneComponentProps<T>) {\n const Component = (model as any).constructor['Component'] ?? EmptyRenderer;\n const [activated, setActivated] = React.useState(false);\n\n useEffect(() => {\n setActivated(true);\n return model.activate();\n }, [model]);\n\n // By not rendering the component until the model is actiavted we make sure that parent models get activated before child models\n // Otherwise child models would be activated before parents as that is the order of React mount effects.\n // This also enables static logic to happen inside activate that can change state before the first render.\n if (!activated) {\n return null;\n }\n\n return <Component {...otherProps} model={model} />;\n}\n\nexport const SceneComponentWrapper = React.memo(SceneComponentWrapperWithoutMemo);\n\nfunction EmptyRenderer<T>(_: SceneComponentProps<T>): React.ReactElement | null {\n return null;\n}\n","import { SceneObject, SceneObjectState } from './types';\n\nimport { SceneObjectBase } from './SceneObjectBase';\n\n/**\n * Will create new SceneItem with shalled cloned state, but all states items of type SceneObject are deep cloned\n */\nexport function cloneSceneObject<T extends SceneObjectBase<TState>, TState extends SceneObjectState>(\n sceneObject: SceneObjectBase<TState>,\n withState?: Partial<TState>\n): T {\n const clonedState = { ...sceneObject.state };\n\n // Clone any SceneItems in state\n for (const key in clonedState) {\n const propValue = clonedState[key];\n if (propValue instanceof SceneObjectBase) {\n clonedState[key] = propValue.clone();\n }\n\n // Clone scene objects in arrays\n if (Array.isArray(propValue)) {\n const newArray: any = [];\n for (const child of propValue) {\n if (child instanceof SceneObjectBase) {\n newArray.push(child.clone());\n } else {\n newArray.push(child);\n }\n }\n clonedState[key] = newArray;\n }\n }\n\n Object.assign(clonedState, withState);\n\n return new (sceneObject.constructor as any)(clonedState);\n}\n\n/** Walks up the scene graph, returning the first non-undefined result of `extract` */\nexport function getClosest<T>(sceneObject: SceneObject, extract: (s: SceneObject) => T | undefined): T | undefined {\n let curSceneObject: SceneObject | undefined = sceneObject;\n let extracted: T | undefined = undefined;\n\n while (curSceneObject && !extracted) {\n extracted = extract(curSceneObject);\n curSceneObject = curSceneObject.parent;\n }\n\n return extracted;\n}\n","import { useEffect, useState } from 'react';\nimport { Subscription, Unsubscribable } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { BusEvent, BusEventHandler, BusEventType, EventBusSrv } from '@grafana/data';\nimport {\n SceneObject,\n SceneComponent,\n SceneObjectUrlSyncHandler,\n SceneStateChangedHandler,\n SceneActivationHandler,\n SceneDeactivationHandler,\n CancelActivationHandler,\n SceneObjectState,\n} from './types';\n\nimport { SceneComponentWrapper } from './SceneComponentWrapper';\nimport { SceneObjectStateChangedEvent } from './events';\nimport { cloneSceneObject } from './utils';\nimport { SceneVariableDependencyConfigLike } from '../variables/types';\n\nexport abstract class SceneObjectBase<TState extends SceneObjectState = SceneObjectState>\n implements SceneObject<TState>\n{\n private _isActive = false;\n private _state: TState;\n private _events = new EventBusSrv();\n private _activationHandlers: SceneActivationHandler[] = [];\n private _deactivationHandlers: SceneDeactivationHandler[] = [];\n\n protected _parent?: SceneObject;\n protected _subs = new Subscription();\n protected _refCount = 0;\n\n protected _variableDependency: SceneVariableDependencyConfigLike | undefined;\n protected _urlSync: SceneObjectUrlSyncHandler | undefined;\n\n public constructor(state: TState) {\n if (!state.key) {\n state.key = uuidv4();\n }\n\n this._state = Object.freeze(state);\n this._setParent();\n }\n\n /** Current state */\n public get state(): TState {\n return this._state;\n }\n\n /** True if currently being active (ie displayed for visual objects) */\n public get isActive(): boolean {\n return this._isActive;\n }\n\n /** Returns the parent, undefined for root object */\n public get parent(): SceneObject | undefined {\n return this._parent;\n }\n\n /** Returns variable dependency config */\n public get variableDependency(): SceneVariableDependencyConfigLike | undefined {\n return this._variableDependency;\n }\n\n /** Returns url sync config */\n public get urlSync(): SceneObjectUrlSyncHandler | undefined {\n return this._urlSync;\n }\n\n /**\n * Used in render functions when rendering a SceneObject.\n * Wraps the component in an EditWrapper that handles edit mode\n */\n public get Component(): SceneComponent<this> {\n return SceneComponentWrapper;\n }\n\n private _setParent() {\n this.forEachChild((child) => {\n child._parent = this;\n });\n }\n\n /**\n * Subscribe to the scene state subject\n **/\n public subscribeToState(handler: SceneStateChangedHandler<TState>): Unsubscribable {\n return this._events.subscribe(SceneObjectStateChangedEvent, (event) => {\n if (event.payload.changedObject === this) {\n handler(event.payload.newState as TState, event.payload.prevState as TState);\n }\n });\n }\n\n /**\n * Subscribe to the scene event\n **/\n public subscribeToEvent<T extends BusEvent>(eventType: BusEventType<T>, handler: BusEventHandler<T>): Unsubscribable {\n return this._events.subscribe(eventType, handler);\n }\n\n public setState(update: Partial<TState>) {\n const prevState = this._state;\n const newState: TState = {\n ...this._state,\n ...update,\n };\n\n this._state = Object.freeze(newState);\n\n this._setParent();\n\n // Bubble state change event. This is event is subscribed to by UrlSyncManager and UndoManager\n this.publishEvent(\n new SceneObjectStateChangedEvent({\n prevState,\n newState,\n partialUpdate: update,\n changedObject: this,\n }),\n true\n );\n }\n /*\n * Publish an event and optionally bubble it up the scene\n **/\n public publishEvent(event: BusEvent, bubble?: boolean) {\n this._events.publish(event);\n\n if (bubble && this.parent) {\n this.parent.publishEvent(event, bubble);\n }\n }\n\n public getRoot(): SceneObject {\n return !this._parent ? this : this._parent.getRoot();\n }\n\n private _internalActivate() {\n this._isActive = true;\n\n const { $data, $variables, $timeRange, $behaviors } = this.state;\n\n if ($timeRange && !$timeRange.isActive) {\n this._deactivationHandlers.push($timeRange.activate());\n }\n\n if ($variables && !$variables.isActive) {\n this._deactivationHandlers.push($variables.activate());\n }\n\n if ($data && !$data.isActive) {\n this._deactivationHandlers.push($data.activate());\n }\n\n if ($behaviors) {\n for (const behavior of $behaviors) {\n if (behavior instanceof SceneObjectBase) {\n this._deactivationHandlers.push(behavior.activate());\n } else if (typeof behavior === 'function') {\n const deactivationHandler = behavior(this);\n if (deactivationHandler) {\n this._deactivationHandlers.push();\n }\n }\n }\n }\n\n this._activationHandlers.forEach((handler) => {\n const result = handler();\n if (result) {\n this._deactivationHandlers.push(result);\n }\n });\n }\n\n /**\n * This is primarily called from SceneComponentWrapper when the SceneObject's Component is mounted.\n * But in some scenarios this can also be called directly from another scene object. When called manually from another scene object\n * make sure to call the returned function when the source scene object is deactivated.\n */\n public activate(): CancelActivationHandler {\n if (!this.isActive) {\n this._internalActivate();\n }\n\n this._refCount++;\n\n let called = false;\n\n return () => {\n this._refCount--;\n\n if (called) {\n const msg = `SceneObject cancelation handler returned by activate() called a second time`;\n console.error(msg, this);\n throw new Error(msg);\n }\n\n called = true;\n\n if (this._refCount === 0) {\n this._internalDeactivate();\n }\n };\n }\n\n /**\n * Called by the SceneComponentWrapper when the react component is unmounted.\n * Don't override this, instead use addActivationHandler. The activation handler can return a deactivation handler.\n */\n private _internalDeactivate(): void {\n this._isActive = false;\n\n this._deactivationHandlers.forEach((handler) => handler());\n this._deactivationHandlers = [];\n\n // Clear subscriptions and listeners\n this._events.removeAllListeners();\n this._subs.unsubscribe();\n this._subs = new Subscription();\n }\n\n /**\n * Utility hook to get and subscribe to state\n */\n public useState() {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useSceneObjectState(this);\n }\n\n /** Force a re-render, should only be needed when variable values change */\n public forceRender(): void {\n this.setState({});\n }\n\n /**\n * Will create new SceneObject with shallow-cloned state, but all state items of type SceneObject are deep cloned\n */\n public clone(withState?: Partial<TState>): this {\n return cloneSceneObject(this, withState);\n }\n\n /**\n * Allows external code to register code that is executed on activate and deactivate. This allow you\n * to wire up scene objects that need to respond to state changes in other objects from the outside.\n **/\n public addActivationHandler(handler: SceneActivationHandler) {\n this._activationHandlers.push(handler);\n }\n\n /**\n * Loop through state and call callback for each direct child scene object.\n * Checks 1 level deep properties and arrays. So a scene object hidden in a nested plain object will not be detected.\n */\n public forEachChild(callback: (child: SceneObjectBase) => void) {\n for (const propValue of Object.values(this.state)) {\n if (propValue instanceof SceneObjectBase) {\n callback(propValue);\n }\n\n if (Array.isArray(propValue)) {\n for (const child of propValue) {\n if (child instanceof SceneObjectBase) {\n callback(child);\n }\n }\n }\n }\n }\n}\n\n/**\n * This hook is always returning model.state instead of a useState that remembers the last state emitted on the subject\n * The reason for this is so that if the model instance change this function will always return the latest state.\n */\nfunction useSceneObjectState<TState extends SceneObjectState>(model: SceneObjectBase<TState>): TState {\n const [_, setState] = useState<TState>(model.state);\n const stateAtFirstRender = model.state;\n\n useEffect(() => {\n const s = model.subscribeToState(setState);\n\n // Re-render component if the state changed between first render and useEffect (mount)\n if (model.state !== stateAtFirstRender) {\n setState(model.state);\n }\n\n return () => s.unsubscribe();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [model]);\n\n return model.state;\n}\n","import { getDefaultTimeRange, PanelData } from '@grafana/data';\nimport { LoadingState } from '@grafana/schema';\n\nimport { SceneObjectBase } from './SceneObjectBase';\nimport { SceneDataProvider, SceneDataState } from './types';\n\nexport interface SceneDataNodeState extends SceneDataState {\n data: PanelData;\n}\n\nexport class SceneDataNode extends SceneObjectBase<SceneDataNodeState> implements SceneDataProvider {\n public constructor(state?: Partial<SceneDataNodeState>) {\n super({\n data: emptyPanelData,\n ...state,\n });\n }\n}\n\nexport const emptyPanelData = {\n state: LoadingState.Done,\n series: [],\n timeRange: getDefaultTimeRange(),\n};\n","import { SceneObjectUrlSyncHandler, SceneObjectWithUrlSync, SceneObjectUrlValues } from '../core/types';\n\ninterface SceneObjectUrlSyncConfigOptions {\n keys: string[];\n}\n\nexport class SceneObjectUrlSyncConfig implements SceneObjectUrlSyncHandler {\n private _keys: string[];\n\n public constructor(private _sceneObject: SceneObjectWithUrlSync, _options: SceneObjectUrlSyncConfigOptions) {\n this._keys = _options.keys;\n }\n\n public getKeys(): string[] {\n return this._keys;\n }\n\n public getUrlState(): SceneObjectUrlValues {\n return this._sceneObject.getUrlState();\n }\n\n public updateFromUrl(values: SceneObjectUrlValues): void {\n this._sceneObject.updateFromUrl(values);\n }\n}\n","import { dateMath, getTimeZone, TimeRange, toUtc } from '@grafana/data';\nimport { TimeZone } from '@grafana/schema';\n\nimport { SceneObjectUrlSyncConfig } from '../services/SceneObjectUrlSyncConfig';\n\nimport { SceneObjectBase } from './SceneObjectBase';\nimport { SceneTimeRangeLike, SceneTimeRangeState, SceneObjectUrlValues, SceneObjectUrlValue } from './types';\nimport { getClosest } from './utils';\n\nexport class SceneTimeRange extends SceneObjectBase<SceneTimeRangeState> implements SceneTimeRangeLike {\n protected _urlSync = new SceneObjectUrlSyncConfig(this, { keys: ['from', 'to'] });\n\n public constructor(state: Partial<SceneTimeRangeState> = {}) {\n const from = state.from ?? 'now-6h';\n const to = state.to ?? 'now';\n const timeZone = state.timeZone;\n const value = evaluateTimeRange(from, to, timeZone || getTimeZone());\n super({ from, to, timeZone, value, ...state });\n\n this.addActivationHandler(this._onActivate);\n }\n\n private _onActivate = () => {\n // When SceneTimeRange has no time zone provided, find closest source of time zone and subscribe to it\n if (!this.state.timeZone) {\n const timeZoneSource = this.getTimeZoneSource();\n if (timeZoneSource !== this) {\n this._subs.add(\n timeZoneSource.subscribeToState((n, p) => {\n if (n.timeZone !== undefined && n.timeZone !== p.timeZone) {\n this.setState({\n value: evaluateTimeRange(this.state.from, this.state.to, timeZoneSource.getTimeZone()),\n });\n }\n })\n );\n }\n }\n };\n\n /**\n * Will traverse up the scene graph to find the closest SceneTimeRangeLike with time zone set\n */\n private getTimeZoneSource() {\n if (!this.parent || !this.parent.parent) {\n return this;\n }\n // Find the closest source of time zone\n const source = getClosest<SceneTimeRangeLike>(this.parent.parent, (o) => {\n if (o.state.$timeRange && o.state.$timeRange.state.timeZone) {\n return o.state.$timeRange;\n }\n return undefined;\n });\n\n if (!source) {\n return this;\n }\n\n return source;\n }\n\n public getTimeZone(): TimeZone {\n // Return local time zone if provided\n if (this.state.timeZone) {\n return this.state.timeZone;\n }\n\n // Resolve higher level time zone source\n const timeZoneSource = this.getTimeZoneSource();\n if (timeZoneSource !== this) {\n return timeZoneSource.state.timeZone!;\n }\n\n // Return default time zone\n return getTimeZone();\n }\n\n public onTimeRangeChange = (timeRange: TimeRange) => {\n const update: Partial<SceneTimeRangeState> = {};\n\n if (typeof timeRange.raw.from === 'string') {\n update.from = timeRange.raw.from;\n } else {\n update.from = timeRange.raw.from.toISOString();\n }\n\n if (typeof timeRange.raw.to === 'string') {\n update.to = timeRange.raw.to;\n } else {\n update.to = timeRange.raw.to.toISOString();\n }\n\n update.value = evaluateTimeRange(update.from, update.to, this.getTimeZone());\n this.setState(update);\n };\n\n public onTimeZoneChange = (timeZone: TimeZone) => {\n this.setState({ timeZone });\n };\n\n public onRefresh = () => {\n this.setState({ value: evaluateTimeRange(this.state.from, this.state.to, this.getTimeZone()) });\n };\n\n public getUrlState() {\n return { from: this.state.from, to: this.state.to };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues) {\n // ignore if both are missing\n if (!values.to && !values.from) {\n return;\n }\n\n const update: Partial<SceneTimeRangeState> = {};\n const from = parseUrlParam(values.from);\n\n if (from) {\n update.from = from;\n }\n\n const to = parseUrlParam(values.to);\n if (to) {\n update.to = to;\n }\n\n update.value = evaluateTimeRange(update.from ?? this.state.from, update.to ?? this.state.to, this.getTimeZone());\n this.setState(update);\n }\n}\n\nfunction parseUrlParam(value: SceneObjectUrlValue): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n\n if (value.indexOf('now') !== -1) {\n return value;\n }\n\n if (value.length === 8) {\n const utcValue = toUtc(value, 'YYYYMMDD');\n if (utcValue.isValid()) {\n return utcValue.toISOString();\n }\n } else if (value.length === 15) {\n const utcValue = toUtc(value, 'YYYYMMDDTHHmmss');\n if (utcValue.isValid()) {\n return utcValue.toISOString();\n }\n } else if (value.length === 24) {\n const utcValue = toUtc(value);\n return utcValue.toISOString();\n }\n\n const epoch = parseInt(value, 10);\n if (!isNaN(epoch)) {\n return toUtc(epoch).toISOString();\n }\n\n return null;\n}\n\nexport function evaluateTimeRange(\n from: string,\n to: string,\n timeZone: TimeZone,\n fiscalYearStartMonth?: number\n): TimeRange {\n return {\n from: dateMath.parse(from, false, timeZone, fiscalYearStartMonth)!,\n to: dateMath.parse(to, true, timeZone, fiscalYearStartMonth)!,\n raw: {\n from: from,\n to: to,\n },\n };\n}\n","import { SceneDataNode } from '../../core/SceneDataNode';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneTimeRange } from '../../core/SceneTimeRange';\nimport { SceneVariable, SceneVariables, SceneVariableSetState, SceneVariableState } from '../types';\n\nexport const EmptyDataNode = new SceneDataNode();\nexport const DefaultTimeRange = new SceneTimeRange();\n\n/**\n * Since this is used from sceneGraph.getVariables we cannot reference SceneVariableSet here as it would create a circular reference\n */\nexport class EmptyVariableSetImpl extends SceneObjectBase<SceneVariableSetState> implements SceneVariables {\n public constructor() {\n super({ variables: [] });\n }\n\n public getByName(name: string): SceneVariable<SceneVariableState> | undefined {\n return undefined;\n }\n\n public isVariableLoadingOrWaitingToUpdate(variable: SceneVariable<SceneVariableState>): boolean {\n return false;\n }\n}\n\nexport const EmptyVariableSet = new EmptyVariableSetImpl();\n","import { Observable } from 'rxjs';\n\nimport { BusEventWithPayload } from '@grafana/data';\nimport { VariableType, VariableHide } from '@grafana/schema';\n\nimport { SceneObject, SceneObjectState } from '../core/types';\n\nexport interface SceneVariableState extends SceneObjectState {\n type: VariableType;\n name: string;\n label?: string;\n hide?: VariableHide;\n skipUrlSync?: boolean;\n loading?: boolean;\n error?: any | null;\n description?: string | null;\n}\n\nexport interface SceneVariable<TState extends SceneVariableState = SceneVariableState> extends SceneObject<TState> {\n /**\n * This function is called on activation or when a dependency changes.\n */\n validateAndUpdate?(): Observable<ValidateAndUpdateResult>;\n\n /**\n * Should return the value for the given field path\n */\n getValue(fieldPath?: string): VariableValue | undefined | null;\n\n /**\n * Should return the value display text, used by the \"text\" formatter\n * Example: ${podId:text}\n * Useful for variables that have non user friendly values but friendly display text names.\n */\n getValueText?(fieldPath?: string): string;\n}\n\nexport type VariableValue = VariableValueSingle | VariableValueSingle[];\n\nexport type VariableValueSingle = string | boolean | number | CustomVariableValue;\n\n/**\n * This is for edge case values like the custom \"allValue\" that should not be escaped/formatted like other values\n * The custom all value usually contain wildcards that should not be escaped.\n */\nexport interface CustomVariableValue {\n /**\n * The format name or function used in the expression\n */\n formatter(formatNameOrFn?: string | VariableCustomFormatterFn): string;\n}\n\nexport interface ValidateAndUpdateResult {}\nexport interface VariableValueOption {\n label: string;\n value: VariableValueSingle;\n}\n\nexport interface SceneVariableSetState extends SceneObjectState {\n variables: SceneVariable[];\n}\n\nexport interface SceneVariables extends SceneObject<SceneVariableSetState> {\n /**\n * Will look for and return variable matching name\n */\n getByName(name: string): SceneVariable | undefined;\n /**\n * Will return true if the variable is loading or waiting for an update to complete.\n */\n isVariableLoadingOrWaitingToUpdate(variable: SceneVariable): boolean;\n}\n\nexport class SceneVariableValueChangedEvent extends BusEventWithPayload<SceneVariable> {\n public static type = 'scene-variable-changed-value';\n}\n\nexport interface SceneVariableDependencyConfigLike {\n /** Return all variable names this object depend on */\n getNames(): Set<string>;\n\n /** Used to check for dependency on a specific variable */\n hasDependencyOn(name: string): boolean;\n\n /**\n * Will be called when the VariableSet have completed an update process\n **/\n variableUpdatesCompleted(changedVariables: Set<SceneVariable>): void;\n}\n\n/**\n * Used in CustomFormatterFn\n */\nexport interface CustomFormatterVariable {\n name: string;\n type: VariableType;\n multi?: boolean;\n includeAll?: boolean;\n}\n\nexport type VariableCustomFormatterFn = (\n value: unknown,\n legacyVariableModel: Partial<CustomFormatterVariable>,\n legacyDefaultFormatter?: VariableCustomFormatterFn\n) => string;\n\nexport type InterpolationFormatParameter = string | VariableCustomFormatterFn | undefined;\n\nexport function isCustomVariableValue(value: VariableValue): value is CustomVariableValue {\n return typeof value === 'object' && 'formatter' in value;\n}\n","import { property } from 'lodash';\n\ninterface FieldAccessorCache {\n [key: string]: (obj: object) => any;\n}\n\nlet fieldAccessorCache: FieldAccessorCache = {};\n\nexport function getFieldAccessor(fieldPath: string) {\n const accessor = fieldAccessorCache[fieldPath];\n if (accessor) {\n return accessor;\n }\n\n return (fieldAccessorCache[fieldPath] = property(fieldPath));\n}\n","import { ScopedVar } from '@grafana/data';\n\nimport { VariableValue } from '../types';\n\nimport { FormatVariable } from './formatRegistry';\nimport { getFieldAccessor } from './fieldAccessorCache';\n\nexport class ScopedVarsVariable implements FormatVariable {\n public state: { name: string; value: ScopedVar; type: string };\n\n public constructor(name: string, value: ScopedVar) {\n this.state = { name, value, type: 'scopedvar' };\n }\n\n public getValue(fieldPath: string): VariableValue {\n let { value } = this.state;\n let realValue = value.value;\n\n if (fieldPath) {\n realValue = getFieldAccessor(fieldPath)(value.value);\n } else {\n realValue = value.value;\n }\n\n if (realValue === 'string' || realValue === 'number' || realValue === 'boolean') {\n return realValue;\n }\n\n return String(realValue);\n }\n\n public getValueText(): string {\n const { value } = this.state;\n\n if (value.text != null) {\n return String(value.text);\n }\n\n return String(value);\n }\n}\n\nlet scopedVarsVariable: ScopedVarsVariable | undefined;\n\n/**\n * Reuses a single instance to avoid unnecessary memory allocations\n */\nexport function getSceneVariableForScopedVar(name: string, value: ScopedVar): FormatVariable {\n if (!scopedVarsVariable) {\n scopedVarsVariable = new ScopedVarsVariable(name, value);\n } else {\n scopedVarsVariable.state.name = name;\n scopedVarsVariable.state.value = value;\n }\n\n return scopedVarsVariable;\n}\n","export const ALL_VARIABLE_TEXT = 'All';\nexport const ALL_VARIABLE_VALUE = '$__all';\nexport const NONE_VARIABLE_TEXT = 'None';\nexport const NONE_VARIABLE_VALUE = '';\n\n// Grafana core source: https://github.com/grafana/grafana/blob/main/public/app/features/variables/utils.ts#L23\n/*\n * This regex matches 3 types of variable reference with an optional format specifier\n * \\$(\\w+) $var1\n * \\[\\[(\\w+?)(?::(\\w+))?\\]\\] [[var2]] or [[var2:fmt2]]\n * \\${(\\w+)(?::(\\w+))?} ${var3} or ${var3:fmt3}\n */\nexport const VARIABLE_REGEX = /\\$(\\w+)|\\[\\[(\\w+?)(?::(\\w+))?\\]\\]|\\${(\\w+)(?:\\.([^:^\\}]+))?(?::([^\\}]+))?}/g;\n","import { isArray, map, replace } from 'lodash';\n\nimport { dateTime, Registry, RegistryItem, textUtil, escapeRegex } from '@grafana/data';\nimport { VariableType, VariableFormatID } from '@grafana/schema';\n\nimport { VariableValue, VariableValueSingle } from '../types';\nimport { ALL_VARIABLE_VALUE } from '../constants';\n\nexport interface FormatRegistryItem extends RegistryItem {\n formatter(value: VariableValue, args: string[], variable: FormatVariable): string;\n}\n\n/**\n * Slimmed down version of the SceneVariable interface so that it only contains what the formatters actually use.\n * This is useful as we have some implementations of this interface that does not need to be full scene objects.\n * For example ScopedVarsVariable and LegacyVariableWrapper.\n */\nexport interface FormatVariable {\n state: {\n name: string;\n type: VariableType | string;\n isMulti?: boolean;\n includeAll?: boolean;\n };\n\n getValue(fieldPath?: string): VariableValue | undefined | null;\n getValueText?(fieldPath?: string): string;\n}\n\nexport const formatRegistry = new Registry<FormatRegistryItem>(() => {\n const formats: FormatRegistryItem[] = [\n {\n id: VariableFormatID.Lucene,\n name: 'Lucene',\n description: 'Values are lucene escaped and multi-valued variables generate an OR expression',\n formatter: (value) => {\n if (typeof value === 'string') {\n return luceneEscape(value);\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '__empty__';\n }\n const quotedValues = map(value, (val: string) => {\n return '\"' + luceneEscape(val) + '\"';\n });\n return '(' + quotedValues.join(' OR ') + ')';\n } else {\n return luceneEscape(`${value}`);\n }\n },\n },\n {\n id: VariableFormatID.Raw,\n name: 'raw',\n description: 'Keep value as is',\n formatter: (value) => String(value),\n },\n {\n id: VariableFormatID.Regex,\n name: 'Regex',\n description: 'Values are regex escaped and multi-valued variables generate a (<value>|<value>) expression',\n formatter: (value) => {\n if (typeof value === 'string') {\n return escapeRegex(value);\n }\n\n if (Array.isArray(value)) {\n const escapedValues = value.map((item) => {\n if (typeof item === 'string') {\n return escapeRegex(item);\n } else {\n return escapeRegex(String(item));\n }\n });\n\n if (escapedValues.length === 1) {\n return escapedValues[0];\n }\n\n return '(' + escapedValues.join('|') + ')';\n }\n\n return escapeRegex(`${value}`);\n },\n },\n {\n id: VariableFormatID.Pipe,\n name: 'Pipe',\n description: 'Values are separated by | character',\n formatter: (value) => {\n if (typeof value === 'string') {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.join('|');\n }\n\n return `${value}`;\n },\n },\n {\n id: VariableFormatID.Distributed,\n name: 'Distributed',\n description: 'Multiple values are formatted like variable=value',\n formatter: (value, args, variable) => {\n if (typeof value === 'string') {\n return value;\n }\n\n if (Array.isArray(value)) {\n value = map(value, (val: string, index: number) => {\n if (index !== 0) {\n return variable.state.name + '=' + val;\n } else {\n return val;\n }\n });\n\n return value.join(',');\n }\n\n return `${value}`;\n },\n },\n {\n id: VariableFormatID.CSV,\n name: 'Csv',\n description: 'Comma-separated values',\n formatter: (value) => {\n if (typeof value === 'string') {\n return value;\n }\n\n if (isArray(value)) {\n return value.join(',');\n }\n\n return String(value);\n },\n },\n {\n id: VariableFormatID.HTML,\n name: 'HTML',\n description: 'HTML escaping of values',\n formatter: (value) => {\n if (typeof value === 'string') {\n return textUtil.escapeHtml(value);\n }\n\n if (isArray(value)) {\n return textUtil.escapeHtml(value.join(', '));\n }\n\n return textUtil.escapeHtml(String(value));\n },\n },\n {\n id: VariableFormatID.JSON,\n name: 'JSON',\n description: 'JSON stringify value',\n formatter: (value) => {\n if (typeof value === 'string') {\n return value;\n }\n return JSON.stringify(value);\n },\n },\n {\n id: VariableFormatID.PercentEncode,\n name: 'Percent encode',\n description: 'Useful for URL escaping values',\n formatter: (value) => {\n // like glob, but url escaped\n if (isArray(value)) {\n return encodeURIComponentStrict('{' + value.join(',') + '}');\n }\n\n return encodeURIComponentStrict(value);\n },\n },\n {\n id: VariableFormatID.SingleQuote,\n name: 'Single quote',\n description: 'Single quoted values',\n formatter: (value) => {\n // escape single quotes with backslash\n const regExp = new RegExp(`'`, 'g');\n\n if (isArray(value)) {\n return map(value, (v: string) => `'${replace(v, regExp, `\\\\'`)}'`).join(',');\n }\n\n let strVal = typeof value === 'string' ? value : String(value);\n return `'${replace(strVal, regExp, `\\\\'`)}'`;\n },\n },\n {\n id: VariableFormatID.DoubleQuote,\n name: 'Double quote',\n description: 'Double quoted values',\n formatter: (value) => {\n // escape double quotes with backslash\n const regExp = new RegExp('\"', 'g');\n if (isArray(value)) {\n return map(value, (v: string) => `\"${replace(v, regExp, '\\\\\"')}\"`).join(',');\n }\n\n let strVal = typeof value === 'string' ? value : String(value);\n return `\"${replace(strVal, regExp, '\\\\\"')}\"`;\n },\n },\n {\n id: VariableFormatID.SQLString,\n name: 'SQL string',\n description: 'SQL string quoting and commas for use in IN statements and other scenarios',\n formatter: (value) => {\n // escape single quotes by pairing them\n const regExp = new RegExp(`'`, 'g');\n if (isArray(value)) {\n return map(value, (v: string) => `'${replace(v, regExp, \"''\")}'`).join(',');\n }\n\n let strVal = typeof value === 'string' ? value : String(value);\n return `'${replace(strVal, regExp, \"''\")}'`;\n },\n },\n {\n id: VariableFormatID.Date,\n name: 'Date',\n description: 'Format date in different ways',\n formatter: (value, args) => {\n let nrValue = NaN;\n\n if (typeof value === 'number') {\n nrValue = value;\n } else if (typeof value === 'string') {\n nrValue = parseInt(value, 10);\n }\n\n if (isNaN(nrValue)) {\n return 'NaN';\n }\n\n const arg = args[0] ?? 'iso';\n switch (arg) {\n case 'ms':\n return String(value);\n case 'seconds':\n return `${Math.round(nrValue! / 1000)}`;\n case 'iso':\n return dateTime(nrValue).toISOString();\n default:\n if ((args || []).length > 1) {\n return dateTime(nrValue).format(args.join(':'));\n }\n return dateTime(nrValue).format(arg);\n }\n },\n },\n {\n id: VariableFormatID.Glob,\n name: 'Glob',\n description: 'Format multi-valued variables using glob syntax, example {value1,value2}',\n formatter: (value) => {\n if (isArray(value) && value.length > 1) {\n return '{' + value.join(',') + '}';\n }\n return String(value);\n },\n },\n {\n id: VariableFormatID.Text,\n name: 'Text',\n description: 'Format variables in their text representation. Example in multi-variable scenario A + B + C.',\n formatter: (value, _args, variable) => {\n if (variable.getValueText) {\n return variable.getValueText();\n }\n\n return String(value);\n },\n },\n {\n id: VariableFormatID.QueryParam,\n name: 'Query parameter',\n description:\n 'Format variables as URL parameters. Example in multi-variable scenario A + B + C => var-foo=A&var-foo=B&var-foo=C.',\n formatter: (value, _args, variable) => {\n if (Array.isArray(value)) {\n return value.map((v) => formatQueryParameter(variable.state.name, v)).join('&');\n }\n return formatQueryParameter(variable.state.name, value);\n },\n },\n {\n id: VariableFormatID.UriEncode,\n name: 'Percent encode as URI',\n description: 'Useful for URL escaping values, taking into URI syntax characters',\n formatter: (value: VariableValue) => {\n if (isArray(value)) {\n return encodeURIStrict('{' + value.join(',') + '}');\n }\n\n return encodeURIStrict(value);\n },\n },\n ];\n\n return formats;\n});\n\nfunction luceneEscape(value: string) {\n if (isNaN(+value) === false) {\n return value;\n }\n\n return value.replace(/([\\!\\*\\+\\-\\=<>\\s\\&\\|\\(\\)\\[\\]\\{\\}\\^\\~\\?\\:\\\\/\"])/g, '\\\\$1');\n}\n\n/**\n * encode string according to RFC 3986; in contrast to encodeURIComponent()\n * also the sub-delims \"!\", \"'\", \"(\", \")\" and \"*\" are encoded;\n * unicode handling uses UTF-8 as in ECMA-262.\n */\nfunction encodeURIComponentStrict(str: VariableValueSingle) {\n if (typeof str === 'object') {\n str = String(str);\n }\n\n return replaceSpecialCharactersToASCII(encodeURIComponent(str));\n}\n\nconst encodeURIStrict = (str: VariableValueSingle): string =>\n replaceSpecialCharactersToASCII(encodeURI(String(str)));\n\nconst replaceSpecialCharactersToASCII = (value: string): string => value.replace(/[!'()*]/g, (c) => {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n});\n\nfunction formatQueryParameter(name: string, value: VariableValueSingle): string {\n return `var-${name}=${encodeURIComponentStrict(value)}`;\n}\n\nexport function isAllValue(value: VariableValueSingle) {\n return value === ALL_VARIABLE_VALUE || (Array.isArray(value) && value[0] === ALL_VARIABLE_VALUE);\n}\n","import { SceneObject } from '../core/types';\nimport { SceneVariable } from './types';\n\n/**\n * Will walk the scene object graph up to the root looking for the first variable with the specified name\n */\nexport function lookupVariable(name: string, sceneObject: SceneObject): SceneVariable | null {\n const variables = sceneObject.state.$variables;\n if (!variables) {\n if (sceneObject.parent) {\n return lookupVariable(name, sceneObject.parent);\n } else {\n return null;\n }\n }\n\n const found = variables.getByName(name);\n if (found) {\n return found;\n } else if (sceneObject.parent) {\n return lookupVariable(name, sceneObject.parent);\n }\n\n return null;\n}\n","import { ScopedVars } from '@grafana/data';\nimport { SceneObject } from '../../core/types';\nimport { FormatVariable } from '../interpolation/formatRegistry';\nimport { CustomVariableValue } from '../types';\n\nexport interface MacroVariableConstructor {\n new (name: string, sceneObject: SceneObject, fullMatch: string, scopedVars?: ScopedVars): FormatVariable;\n}\n\n/**\n * The sceneInterpolator will detect if getValue returns VariableValueCustom and will skip the normal formatting\n * This is useful as otherwise we would url encode macros like $__all_variables twice.\n */\nexport class SkipFormattingValue implements CustomVariableValue {\n public constructor(private _value: string) {}\n\n public formatter(): string {\n return this._value;\n }\n}\n","import { urlUtil } from '@grafana/data';\nimport { SceneObject, SceneTimeRangeLike } from '../../core/types';\nimport { FormatVariable } from '../interpolation/formatRegistry';\nimport { DefaultTimeRange } from '../interpolation/defaults';\nimport { SkipFormattingValue } from './types';\n\nexport class UrlTimeRangeMacro implements FormatVariable {\n public state: { name: string; type: string };\n private _sceneObject: SceneObject;\n\n public constructor(name: string, sceneObject: SceneObject) {\n this.state = { name: name, type: 'url_variable' };\n this._sceneObject = sceneObject;\n }\n\n public getValue(): SkipFormattingValue {\n const timeRange = getTimeRange(this._sceneObject);\n const urlState = timeRange.urlSync?.getUrlState();\n return new SkipFormattingValue(urlUtil.toUrlParams(urlState));\n }\n\n public getValueText?(): string {\n return '';\n }\n}\n\nfunction getTimeRange(sceneObject: SceneObject): SceneTimeRangeLike {\n const { $timeRange } = sceneObject.state;\n if ($timeRange) {\n return $timeRange;\n }\n\n if (sceneObject.parent) {\n return getTimeRange(sceneObject.parent);\n }\n\n return DefaultTimeRange;\n}\n","import { SceneObject } from '../../core/types';\nimport { isCustomVariableValue, SceneVariable } from '../types';\nimport { formatRegistry, FormatVariable } from '../interpolation/formatRegistry';\nimport { SkipFormattingValue } from './types';\nimport { VariableFormatID } from '@grafana/schema';\n\nexport class AllVariablesMacro implements FormatVariable {\n public state: { name: string; type: string };\n private _sceneObject: SceneObject;\n\n public constructor(name: string, sceneObject: SceneObject) {\n this.state = { name, type: 'url_variable' };\n this._sceneObject = sceneObject;\n }\n\n public getValue(): SkipFormattingValue {\n const allVars = collectAllVariables(this._sceneObject);\n const format = formatRegistry.get(VariableFormatID.QueryParam);\n const params: string[] = [];\n\n for (const name of Object.keys(allVars)) {\n const variable = allVars[name];\n const value = variable.getValue();\n\n if (!value) {\n continue;\n }\n\n if (isCustomVariableValue(value)) {\n params.push(value.formatter(VariableFormatID.QueryParam));\n } else {\n params.push(format.formatter(value, [], variable));\n }\n }\n\n return new SkipFormattingValue(params.join('&'));\n }\n\n public getValueText?(): string {\n return '';\n }\n}\n\nfunction collectAllVariables(\n sceneObject: SceneObject,\n record: Record<string, SceneVariable> = {}\n): Record<string, SceneVariable> {\n if (sceneObject.state.$variables) {\n for (const variable of sceneObject.state.$variables.state.variables) {\n if (variable.state.skipUrlSync) {\n continue;\n }\n\n if (!record[variable.state.name]) {\n record[variable.state.name] = variable;\n }\n }\n }\n\n if (sceneObject.parent) {\n collectAllVariables(sceneObject.parent, record);\n }\n\n return record;\n}\n","import { Field, DataFrame, getFieldDisplayName, formatLabels } from '@grafana/data';\n\n/**\n * This object is created often, and only used when tmplates exist. Using a proxy lets us delay\n * calculations of the more complex structures (label names) until they are actually used\n */\nexport function getTemplateProxyForField(field: Field, frame?: DataFrame, frames?: DataFrame[]): any {\n return new Proxy(\n {}, // This object shows up in test snapshots\n {\n get: (obj, key) => {\n if (key === 'name') {\n return field.name;\n }\n\n if (key === 'displayName') {\n return getFieldDisplayName(field, frame, frames);\n }\n\n if (key === 'labels' || key === 'formattedLabels') {\n // formattedLabels deprecated\n if (!field.labels) {\n return '';\n }\n return {\n ...field.labels,\n __values: Object.values(field.labels).sort().join(', '),\n toString: () => {\n return formatLabels(field.labels!, '', true);\n },\n };\n }\n return undefined;\n },\n }\n );\n}\n","import {\n FieldType,\n formattedValueToString,\n getDisplayProcessor,\n ScopedVars,\n DataContextScopedVar,\n getFieldDisplayValuesProxy,\n getFrameDisplayName,\n} from '@grafana/data';\nimport { SceneObject } from '../../core/types';\nimport { getFieldAccessor } from '../interpolation/fieldAccessorCache';\nimport { FormatVariable } from '../interpolation/formatRegistry';\nimport { VariableValue } from '../types';\nimport { getTemplateProxyForField } from './templateProxies';\n\n/**\n * This macro handles the ${__value.*} interpolation\n * match represents the regex match and is the full expression, example `${varname.fieldpath}`\n * Macros can return the match when they identify that there required data context is not provided.\n * This leaves the expression intact so that it can be interpolated later when the data context is available.\n */\nexport class ValueMacro implements FormatVariable {\n public state: { name: string; type: string };\n\n public constructor(name: string, sceneObject: SceneObject, private _match: string, private _scopedVars?: ScopedVars) {\n this.state = { name, type: '__value' };\n }\n\n public getValue(fieldPath?: string): VariableValue {\n const dataContext: DataContextScopedVar | undefined = this._scopedVars?.__dataContext;\n if (!dataContext) {\n return this._match;\n }\n\n const { frame, rowIndex, field, calculatedValue } = dataContext.value;\n\n if (calculatedValue) {\n switch (fieldPath) {\n case 'numeric':\n return calculatedValue.numeric;\n case 'raw':\n return calculatedValue.numeric;\n case 'time':\n return '';\n case 'text':\n default:\n return formattedValueToString(calculatedValue);\n }\n }\n\n if (rowIndex == null) {\n return this._match;\n }\n\n if (fieldPath === 'time') {\n const timeField = frame.fields.find((f) => f.type === FieldType.time);\n return timeField ? timeField.values.get(rowIndex) : undefined;\n }\n\n if (!field) {\n return this._match;\n }\n\n const value = field.values.get(rowIndex);\n if (fieldPath === 'raw') {\n return value;\n }\n\n const displayProcessor = field.display ?? fallbackDisplayProcessor;\n const result = displayProcessor(value);\n\n switch (fieldPath) {\n case 'numeric':\n return result.numeric;\n case 'text':\n default:\n return formattedValueToString(result);\n }\n }\n\n public getValueText?(): string {\n return '';\n }\n}\n\nconst fallbackDisplayProcessor = getDisplayProcessor();\n\n/**\n * This macro handles the ${__data.*} interpolation. This is a bit poorly named as most of the\n * expressions that this macro evaluates are really \"row\" based values enabling you to access\n * values in other fields on the same row.\n */\nexport class DataMacro implements FormatVariable {\n public state: { name: string; type: string };\n\n public constructor(name: string, sceneObject: SceneObject, private _match: string, private _scopedVars?: ScopedVars) {\n this.state = { name, type: '__data' };\n }\n\n public getValue(fieldPath?: string): VariableValue {\n const dataContext = this._scopedVars?.__dataContext;\n if (!dataContext || !fieldPath) {\n return this._match;\n }\n\n const { frame, rowIndex } = dataContext.value;\n\n if (rowIndex === undefined || fieldPath === undefined) {\n return this._match;\n }\n\n const obj = {\n name: frame.name,\n refId: frame.refId,\n fields: getFieldDisplayValuesProxy({ frame, rowIndex }),\n };\n\n return getFieldAccessor(fieldPath)(obj) ?? '';\n }\n\n public getValueText?(): string {\n return '';\n }\n}\n\n/**\n * This macro handles the ${__series.name} interpolation.\n */\nexport class SeriesMacro implements FormatVariable {\n public state: { name: string; type: string };\n\n public constructor(name: string, sceneObject: SceneObject, private _match: string, private _scopedVars?: ScopedVars) {\n this.state = { name, type: '__series' };\n }\n\n public getValue(fieldPath?: string): VariableValue {\n const dataContext = this._scopedVars?.__dataContext;\n if (!dataContext || !fieldPath) {\n return this._match;\n }\n\n if (fieldPath !== 'name') {\n return this._match;\n }\n\n const { frame, frameIndex } = dataContext.value;\n return getFrameDisplayName(frame, frameIndex);\n }\n\n public getValueText?(): string {\n return '';\n }\n}\n\n/**\n * This macro handles the ${__field.*} interpolation. These do not require a data context.\n * And can be easily used in field config options like displayName.\n */\nexport class FieldMacro implements FormatVariable {\n public state: { name: string; type: string };\n\n public constructor(name: string, sceneObject: SceneObject, private _match: string, private _scopedVars?: ScopedVars) {\n this.state = { name, type: '__field' };\n }\n\n public getValue(fieldPath?: string): VariableValue {\n const dataContext = this._scopedVars?.__dataContext;\n if (!dataContext || !fieldPath) {\n return this._match;\n }\n\n if (fieldPath === undefined || fieldPath === '') {\n return this._match;\n }\n\n const { frame, field, data } = dataContext.value;\n const obj = getTemplateProxyForField(field, frame, data);\n\n return getFieldAccessor(fieldPath)(obj) ?? '';\n }\n\n public getValueText?(): string {\n return '';\n }\n}\n","import { DataLinkBuiltInVars } from '@grafana/data';\nimport { MacroVariableConstructor } from './types';\nimport { UrlTimeRangeMacro } from './UrlTimeRangeMacro';\nimport { AllVariablesMacro } from './AllVariablesMacro';\nimport { DataMacro, FieldMacro, SeriesMacro, ValueMacro } from './dataMacros';\n\nexport const macrosIndex: Record<string, MacroVariableConstructor> = {\n [DataLinkBuiltInVars.includeVars]: AllVariablesMacro,\n [DataLinkBuiltInVars.keepTime]: UrlTimeRangeMacro,\n ['__value']: ValueMacro,\n ['__data']: DataMacro,\n ['__series']: SeriesMacro,\n ['__field']: FieldMacro,\n};\n","import { ScopedVars } from '@grafana/data';\nimport { VariableType, VariableFormatID } from '@grafana/schema';\n\nimport { SceneObject } from '../../core/types';\nimport { InterpolationFormatParameter, isCustomVariableValue, VariableValue } from '../types';\n\nimport { getSceneVariableForScopedVar } from './ScopedVarsVariable';\nimport { formatRegistry, FormatVariable } from './formatRegistry';\nimport { VARIABLE_REGEX } from '../constants';\nimport { lookupVariable } from '../lookupVariable';\nimport { macrosIndex } from '../macros';\n\n/**\n * This function will try to parse and replace any variable expression found in the target string. The sceneObject will be used as the source of variables. It will\n * use the scene graph and walk up the parent tree until it finds the closest variable.\n *\n * ScopedVars should not really be needed much in the new scene architecture as they can be added to the local scene node instead of passed in interpolate function.\n * It is supported here for backward compatibility and some edge cases where adding scoped vars to local scene node is not practical.\n */\nexport function sceneInterpolator(\n sceneObject: SceneObject,\n target: string | undefined | null,\n scopedVars?: ScopedVars,\n format?: InterpolationFormatParameter\n): string {\n if (!target) {\n return target ?? '';\n }\n\n VARIABLE_REGEX.lastIndex = 0;\n\n return target.replace(VARIABLE_REGEX, (match, var1, var2, fmt2, var3, fieldPath, fmt3) => {\n const variableName = var1 || var2 || var3;\n const fmt = fmt2 || fmt3 || format;\n const variable = lookupFormatVariable(variableName, match, scopedVars, sceneObject);\n\n if (!variable) {\n return match;\n }\n\n return formatValue(variable, variable.getValue(fieldPath), fmt);\n });\n}\n\nfunction lookupFormatVariable(\n name: string,\n match: string,\n scopedVars: ScopedVars | undefined,\n sceneObject: SceneObject\n): FormatVariable | null {\n const scopedVar = scopedVars?.[name];\n\n if (scopedVar) {\n return getSceneVariableForScopedVar(name, scopedVar);\n }\n\n const variable = lookupVariable(name, sceneObject);\n if (variable) {\n return variable;\n }\n\n if (macrosIndex[name]) {\n return new macrosIndex[name](name, sceneObject, match, scopedVars);\n }\n\n return null;\n}\n\nfunction formatValue(\n variable: FormatVariable,\n value: VariableValue | undefined | null,\n formatNameOrFn?: InterpolationFormatParameter\n): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n // Variable can return a custom value that handles formatting\n // This is useful for customAllValue and macros that return values that are already formatted or need special formatting\n if (isCustomVariableValue(value)) {\n return value.formatter(formatNameOrFn);\n }\n\n // if it's an object transform value to string\n if (!Array.isArray(value) && typeof value === 'object') {\n value = `${value}`;\n }\n\n if (typeof formatNameOrFn === 'function') {\n return formatNameOrFn(value, {\n name: variable.state.name,\n type: variable.state.type as VariableType,\n multi: variable.state.isMulti,\n includeAll: variable.state.includeAll,\n });\n }\n\n let args: string[] = [];\n\n if (!formatNameOrFn) {\n formatNameOrFn = VariableFormatID.Glob;\n } else {\n // some formats have arguments that come after ':' character\n args = formatNameOrFn.split(':');\n if (args.length > 1) {\n formatNameOrFn = args[0];\n args = args.slice(1);\n } else {\n args = [];\n }\n }\n\n let formatter = formatRegistry.getIfExists(formatNameOrFn);\n\n if (!formatter) {\n console.error(`Variable format ${formatNameOrFn} not found. Using glob format as fallback.`);\n formatter = formatRegistry.get(VariableFormatID.Glob);\n }\n\n return formatter.formatter(value, args, variable);\n}\n","import { ScopedVars } from '@grafana/data';\nimport { DefaultTimeRange, EmptyDataNode, EmptyVariableSet } from '../variables/interpolation/defaults';\n\nimport { sceneInterpolator } from '../variables/interpolation/sceneInterpolator';\nimport { VariableCustomFormatterFn, SceneVariables } from '../variables/types';\n\nimport { SceneDataState, SceneLayout, SceneObject, SceneTimeRangeLike } from './types';\nimport { lookupVariable } from '../variables/lookupVariable';\nimport { getClosest } from './utils';\n\n/**\n * Get the closest node with variables\n */\nexport function getVariables(sceneObject: SceneObject): SceneVariables {\n return getClosest(sceneObject, (s) => s.state.$variables) ?? EmptyVariableSet;\n}\n\n/**\n * Will walk up the scene object graph to the closest $data scene object\n */\nexport function getData(sceneObject: SceneObject): SceneObject<SceneDataState> {\n return getClosest(sceneObject, (s) => s.state.$data) ?? EmptyDataNode;\n}\n\n/**\n * Will walk up the scene object graph to the closest $timeRange scene object\n */\nexport function getTimeRange(sceneObject: SceneObject): SceneTimeRangeLike {\n return getClosest(sceneObject, (s) => s.state.$timeRange) ?? DefaultTimeRange;\n}\n\nfunction isSceneLayout(s: SceneObject): s is SceneLayout {\n return 'isDraggable' in s;\n}\n\n/**\n * Will walk up the scene object graph to the closest $layout scene object\n */\nexport function getLayout(scene: SceneObject): SceneLayout {\n const parent = getClosest(scene, (s) => (isSceneLayout(s) ? s : undefined));\n if (parent) {\n return parent;\n }\n\n throw new Error('No layout found in scene tree');\n}\n\n/**\n * Interpolates the given string using the current scene object as context. *\n */\nexport function interpolate(\n sceneObject: SceneObject,\n value: string | undefined | null,\n scopedVars?: ScopedVars,\n format?: string | VariableCustomFormatterFn\n): string {\n if (value === '' || value == null) {\n return '';\n }\n\n return sceneInterpolator(sceneObject, value, scopedVars, format);\n}\n\n/**\n * Checks if the variable is currently loading or waiting to update\n */\nexport function hasVariableDependencyInLoadingState(sceneObject: SceneObject) {\n if (!sceneObject.variableDependency) {\n return false;\n }\n\n for (const name of sceneObject.variableDependency.getNames()) {\n const variable = lookupVariable(name, sceneObject);\n if (!variable) {\n continue;\n }\n\n const set = variable.parent as SceneVariables;\n return set.isVariableLoadingOrWaitingToUpdate(variable);\n }\n\n return false;\n}\n\nfunction findObjectInternal(\n scene: SceneObject,\n check: (obj: SceneObject) => boolean,\n alreadySearchedChild?: SceneObject,\n shouldSearchUp?: boolean\n): SceneObject | null {\n if (check(scene)) {\n return scene;\n }\n\n let found: SceneObject | null = null;\n\n scene.forEachChild((child) => {\n if (child === alreadySearchedChild) {\n return;\n }\n\n let maybe = findObjectInternal(child, check);\n if (maybe) {\n found = maybe;\n }\n });\n\n if (found) {\n return found;\n }\n\n if (shouldSearchUp && scene.parent) {\n return findObjectInternal(scene.parent, check, scene, true);\n }\n\n return null;\n}\n\n/**\n * This will search the full scene graph, starting with the scene node passed in, then walking up the parent chain. *\n */\nexport function findObject(scene: SceneObject, check: (obj: SceneObject) => boolean): SceneObject | null {\n return findObjectInternal(scene, check, undefined, true);\n}\n\nexport const sceneGraph = {\n getVariables,\n getData,\n getTimeRange,\n getLayout,\n interpolate,\n lookupVariable,\n hasVariableDependencyInLoadingState,\n findObject,\n};\n","import { TimeRange } from '@grafana/data';\nimport { TimeZone } from '@grafana/schema';\nimport { sceneGraph } from './sceneGraph';\nimport { SceneObjectBase } from './SceneObjectBase';\nimport { evaluateTimeRange } from './SceneTimeRange';\nimport { SceneTimeRangeLike, SceneTimeRangeState } from './types';\n\ninterface SceneTimeZoneOverrideState extends SceneTimeRangeState {\n timeZone: TimeZone;\n}\n\nexport class SceneTimeZoneOverride extends SceneObjectBase<SceneTimeZoneOverrideState> implements SceneTimeRangeLike {\n public constructor(state: Omit<SceneTimeZoneOverrideState, 'from' | 'to' | 'value'>) {\n super({\n ...state,\n timeZone: state.timeZone,\n // Fake time range, it's actually provided via closest time range object on activation\n from: 'now-6h',\n to: 'now',\n value: evaluateTimeRange('now-6h', 'now', state.timeZone),\n });\n\n this.addActivationHandler(this._activationHandler);\n }\n\n private getTimeRangeObject() {\n if (!this.parent || !this.parent.parent) {\n throw new Error('SceneTimeZoneOverride must be used within $timeRange scope');\n }\n\n return sceneGraph.getTimeRange(this.parent.parent);\n }\n\n private _activationHandler = () => {\n const timeRangeObject = this.getTimeRangeObject();\n const { from, to } = timeRangeObject.state;\n this.setState({\n from,\n to,\n value: evaluateTimeRange(from, to, this.state.timeZone),\n });\n\n this._subs.add(\n timeRangeObject.subscribeToState((n) => {\n this.setState({\n from: n.from,\n to: n.to,\n value: evaluateTimeRange(n.from, n.to, this.state.timeZone),\n });\n })\n );\n };\n\n public getTimeZone(): TimeZone {\n return this.state.timeZone;\n }\n public onTimeRangeChange(timeRange: TimeRange): void {\n const timeRangeObject = this.getTimeRangeObject();\n timeRangeObject.onTimeRangeChange(timeRange);\n }\n\n public onTimeZoneChange(timeZone: string): void {\n this.setState({ timeZone, value: evaluateTimeRange(this.state.from, this.state.to, timeZone) });\n }\n\n public onRefresh(): void {\n const timeRangeObject = this.getTimeRangeObject();\n timeRangeObject.onRefresh();\n }\n}\n","import { DataSourceApi, ScopedVars } from '@grafana/data';\nimport { getDataSourceSrv } from '@grafana/runtime';\nimport { DataSourceRef } from '@grafana/schema';\n\nexport async function getDataSource(\n datasource: DataSourceRef | undefined,\n scopedVars: ScopedVars\n): Promise<DataSourceApi> {\n if (datasource && (datasource as any).query) {\n return datasource as DataSourceApi;\n }\n\n return await getDataSourceSrv().get(datasource as string, scopedVars);\n}\n","import { SceneObject, SceneObjectState } from '../core/types';\nimport { VARIABLE_REGEX } from './constants';\n\nimport { SceneVariable, SceneVariableDependencyConfigLike } from './types';\n\ninterface VariableDependencyConfigOptions<TState extends SceneObjectState> {\n /**\n * State paths to scan / extract variable dependencies from. Leave empty to scan all paths.\n */\n statePaths?: Array<keyof TState>;\n /**\n * Optional way to customize how to handle when a dependent variable changes\n * If not specified the default behavior is to trigger a re-render\n */\n onReferencedVariableValueChanged?: () => void;\n\n /**\n * Optional way to customize how to handle when the variable system has completed an update\n */\n onVariableUpdatesCompleted?: (changedVariables: Set<SceneVariable>, dependencyChanged: boolean) => void;\n}\n\nexport class VariableDependencyConfig<TState extends SceneObjectState> implements SceneVariableDependencyConfigLike {\n private _state: TState | undefined;\n private _dependencies = new Set<string>();\n private _statePaths?: Array<keyof TState>;\n\n public scanCount = 0;\n\n public constructor(\n private _sceneObject: SceneObject<TState>,\n private _options: VariableDependencyConfigOptions<TState>\n ) {\n this._statePaths = _options.statePaths;\n }\n\n /**\n * Used to check for dependency on a specific variable\n */\n public hasDependencyOn(name: string): boolean {\n return this.getNames().has(name);\n }\n\n /**\n * This is called whenever any set of variables have new values. It up to this implementation to check if it's relevant given the current dependencies.\n */\n public variableUpdatesCompleted(changedVariables: Set<SceneVariable>) {\n const deps = this.getNames();\n let dependencyChanged = false;\n\n for (const variable of changedVariables) {\n if (deps.has(variable.state.name)) {\n dependencyChanged = true;\n break;\n }\n }\n\n // If custom handler is always called to let the scene object know that SceneVariableSet has completed processing variables\n if (this._options.onVariableUpdatesCompleted) {\n this._options.onVariableUpdatesCompleted(changedVariables, dependencyChanged);\n return;\n }\n\n if (dependencyChanged) {\n if (this._options.onReferencedVariableValueChanged) {\n this._options.onReferencedVariableValueChanged();\n } else {\n this.defaultHandlerReferencedVariableValueChanged();\n }\n }\n }\n\n /**\n * Only way to force a re-render is to update state right now\n */\n private defaultHandlerReferencedVariableValueChanged = () => {\n this._sceneObject.forceRender();\n };\n\n public getNames(): Set<string> {\n const prevState = this._state;\n const newState = (this._state = this._sceneObject.state);\n\n if (!prevState) {\n // First time we always scan for dependencies\n this.scanStateForDependencies(this._state);\n return this._dependencies;\n }\n\n // Second time we only scan if state is a different and if any specific state path has changed\n if (newState !== prevState) {\n if (this._statePaths) {\n for (const path of this._statePaths) {\n if (newState[path] !== prevState[path]) {\n this.scanStateForDependencies(newState);\n break;\n }\n }\n } else {\n this.scanStateForDependencies(newState);\n }\n }\n\n return this._dependencies;\n }\n\n private scanStateForDependencies(state: TState) {\n this._dependencies.clear();\n this.scanCount += 1;\n\n if (this._statePaths) {\n for (const path of this._statePaths) {\n const value = state[path];\n if (value) {\n this.extractVariablesFrom(value);\n }\n }\n } else {\n this.extractVariablesFrom(state);\n }\n }\n\n private extractVariablesFrom(value: unknown) {\n VARIABLE_REGEX.lastIndex = 0;\n\n const stringToCheck = typeof value !== 'string' ? safeStringifyValue(value) : value;\n\n const matches = stringToCheck.matchAll(VARIABLE_REGEX);\n if (!matches) {\n return;\n }\n\n for (const match of matches) {\n const [, var1, var2, , var3] = match;\n const variableName = var1 || var2 || var3;\n this._dependencies.add(variableName);\n }\n }\n}\n\nconst safeStringifyValue = (value: unknown) => {\n try {\n return JSON.stringify(value, null);\n } catch (error) {\n console.error(error);\n }\n\n return '';\n};\n","export function writeSceneLog(logger: string, message: string, ...rest: unknown[]) {\n if ((window as any).grafanaSceneLogging) {\n console.log(`${logger}: `, message, ...rest);\n }\n}\n","import { isEqual } from 'lodash';\nimport { VariableValue } from './types';\n\nexport function isVariableValueEqual(a: VariableValue | null | undefined, b: VariableValue | null | undefined) {\n if (a === b) {\n return true;\n }\n\n return isEqual(a, b);\n}\n","import { sceneGraph } from '../core/sceneGraph';\nimport { SceneObject } from '../core/types';\nimport { SceneVariable, VariableValue } from './types';\nimport { isVariableValueEqual } from './utils';\n\n/**\n * Useful for remembering variable values to know if they have changed\n **/\nexport class VariableValueRecorder {\n private _values = new Map<SceneVariable, VariableValue | undefined | null>();\n\n public recordCurrentDependencyValuesForSceneObject(sceneObject: SceneObject) {\n this.clearValues();\n\n for (const variableName of sceneObject.variableDependency!.getNames()) {\n const variable = sceneGraph.lookupVariable(variableName, sceneObject);\n if (variable) {\n this._values.set(variable, variable.getValue());\n }\n }\n }\n\n public clearValues() {\n this._values.clear();\n }\n\n public hasValues(): boolean {\n return !!this._values;\n }\n\n public recordCurrentValue(variable: SceneVariable) {\n this._values.set(variable, variable.getValue());\n }\n\n public hasRecordedValue(variable: SceneVariable): boolean {\n return this._values.has(variable);\n }\n\n public hasValueChanged(variable: SceneVariable): boolean {\n if (this._values.has(variable)) {\n const value = this._values.get(variable);\n if (!isVariableValueEqual(value, variable.getValue())) {\n return true;\n }\n }\n\n return false;\n }\n\n public hasDependenciesChanged(sceneObject: SceneObject): boolean {\n if (!this._values) {\n return false;\n }\n\n for (const variableName of sceneObject.variableDependency!.getNames()) {\n const variable = sceneGraph.lookupVariable(variableName, sceneObject);\n if (variable && this._values.has(variable)) {\n const value = this._values.get(variable);\n if (!isVariableValueEqual(value, variable.getValue())) {\n return true;\n }\n }\n }\n\n return false;\n }\n}\n","import { cloneDeep } from 'lodash';\nimport { Unsubscribable } from 'rxjs';\n\nimport { DataQuery, DataSourceRef } from '@grafana/schema';\n\nimport { CoreApp, DataQueryRequest, PanelData, preProcessPanelData, rangeUtil, ScopedVar } from '@grafana/data';\nimport { getRunRequest } from '@grafana/runtime';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneDataProvider, SceneObjectState, SceneTimeRangeLike } from '../core/types';\nimport { getDataSource } from '../utils/getDataSource';\nimport { VariableDependencyConfig } from '../variables/VariableDependencyConfig';\nimport { SceneVariable } from '../variables/types';\nimport { writeSceneLog } from '../utils/writeSceneLog';\nimport { VariableValueRecorder } from '../variables/VariableValueRecorder';\nimport { emptyPanelData } from '../core/SceneDataNode';\n\nlet counter = 100;\n\nexport function getNextRequestId() {\n return 'SQR' + counter++;\n}\n\nexport interface QueryRunnerState extends SceneObjectState {\n data?: PanelData;\n queries: DataQueryExtended[];\n datasource?: DataSourceRef;\n minInterval?: string;\n maxDataPoints?: number;\n // Non persisted state\n maxDataPointsFromWidth?: boolean;\n isWaitingForVariables?: boolean;\n}\n\nexport interface DataQueryExtended extends DataQuery {\n [key: string]: any;\n}\n\nexport class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> implements SceneDataProvider {\n private _querySub?: Unsubscribable;\n private _containerWidth?: number;\n private _variableValueRecorder = new VariableValueRecorder();\n\n protected _variableDependency: VariableDependencyConfig<QueryRunnerState> = new VariableDependencyConfig(this, {\n statePaths: ['queries', 'datasource'],\n onVariableUpdatesCompleted: (variables, dependencyChanged) =>\n this.onVariableUpdatesCompleted(variables, dependencyChanged),\n });\n\n public constructor(initialState: QueryRunnerState) {\n super(initialState);\n\n this.addActivationHandler(() => this._onActivate());\n }\n\n private _onActivate() {\n const timeRange = sceneGraph.getTimeRange(this);\n\n this._subs.add(\n timeRange.subscribeToState(() => {\n this.runWithTimeRange(timeRange);\n })\n );\n\n if (this.shouldRunQueriesOnActivate()) {\n this.runQueries();\n }\n\n return () => this._onDeactivate();\n }\n\n /**\n * Handles some tricky cases where we need to run queries even when they have not changed in case\n * the query execution on activate was stopped due to VariableSet still not having processed all variables.\n */\n private onVariableUpdatesCompleted(_variablesThatHaveChanged: Set<SceneVariable>, dependencyChanged: boolean) {\n if (this.state.isWaitingForVariables && this.shouldRunQueriesOnActivate()) {\n this.runQueries();\n return;\n }\n\n if (dependencyChanged) {\n this.runQueries();\n }\n }\n\n private shouldRunQueriesOnActivate() {\n // If no maxDataPoints specified we might need to wait for container width to be set from the outside\n if (!this.state.maxDataPoints && this.state.maxDataPointsFromWidth && !this._containerWidth) {\n return false;\n }\n\n if (this._variableValueRecorder.hasDependenciesChanged(this)) {\n writeSceneLog(\n 'SceneQueryRunner',\n 'Variable dependency changed while inactive, shouldRunQueriesOnActivate returns true'\n );\n return true;\n }\n\n // If we already have data, no need\n // TODO validate that time range is similar and if not we should run queries again\n if (this.state.data) {\n return false;\n }\n\n return true;\n }\n\n private _onDeactivate(): void {\n if (this._querySub) {\n this._querySub.unsubscribe();\n this._querySub = undefined;\n }\n\n this._variableValueRecorder.recordCurrentDependencyValuesForSceneObject(this);\n }\n\n public setContainerWidth(width: number) {\n // If we don't have a width we should run queries\n if (!this._containerWidth && width > 0) {\n this._containerWidth = width;\n\n // If we don't have maxDataPoints specifically set and maxDataPointsFromWidth is true\n if (this.state.maxDataPointsFromWidth && !this.state.maxDataPoints) {\n // As this is called from render path we need to wait for next tick before running queries\n setTimeout(() => {\n if (this.isActive && !this._querySub) {\n this.runQueries();\n }\n }, 0);\n }\n } else {\n // if the updated container width is bigger than 0 let's remember the width until next query issue\n if (width > 0) {\n this._containerWidth = width;\n }\n }\n }\n\n public runQueries() {\n const timeRange = sceneGraph.getTimeRange(this);\n this.runWithTimeRange(timeRange);\n }\n\n private getMaxDataPoints() {\n return this.state.maxDataPoints ?? this._containerWidth ?? 500;\n }\n\n private async runWithTimeRange(timeRange: SceneTimeRangeLike) {\n // Skip executing queries if variable dependency is in loading state\n if (sceneGraph.hasVariableDependencyInLoadingState(this)) {\n writeSceneLog('SceneQueryRunner', 'Variable dependency is in loading state, skipping query execution');\n this.setState({ isWaitingForVariables: true });\n return;\n }\n\n // If we where waiting for variables clear that flag\n if (this.state.isWaitingForVariables) {\n this.setState({ isWaitingForVariables: false });\n }\n\n const { minInterval, queries } = this.state;\n const sceneObjectScopedVar: Record<string, ScopedVar<SceneQueryRunner>> = {\n __sceneObject: { text: '__sceneObject', value: this },\n };\n\n // Simple path when no queries exist\n if (!queries?.length) {\n this._setNoDataState();\n return;\n }\n\n const request: DataQueryRequest = {\n app: CoreApp.Dashboard,\n requestId: getNextRequestId(),\n timezone: timeRange.getTimeZone(),\n panelId: 1,\n range: timeRange.state.value,\n interval: '1s',\n intervalMs: 1000,\n targets: cloneDeep(queries),\n maxDataPoints: this.getMaxDataPoints(),\n scopedVars: sceneObjectScopedVar,\n startTime: Date.now(),\n };\n\n try {\n const datasource = this.state.datasource ?? findFirstDatasource(request.targets);\n const ds = await getDataSource(datasource, request.scopedVars);\n\n // Attach the data source name to each query\n request.targets = request.targets.map((query) => {\n if (!query.datasource) {\n query.datasource = ds.getRef();\n }\n return query;\n });\n\n // TODO interpolate minInterval\n const lowerIntervalLimit = minInterval ? minInterval : ds.interval;\n const norm = rangeUtil.calculateInterval(timeRange.state.value, request.maxDataPoints!, lowerIntervalLimit);\n\n // make shallow copy of scoped vars,\n // and add built in variables interval and interval_ms\n request.scopedVars = Object.assign({}, request.scopedVars, {\n __interval: { text: norm.interval, value: norm.interval },\n __interval_ms: { text: norm.intervalMs.toString(), value: norm.intervalMs },\n });\n\n request.interval = norm.interval;\n request.intervalMs = norm.intervalMs;\n\n const runRequest = getRunRequest();\n\n writeSceneLog('SceneQueryRunner', 'Starting runRequest', this.state.key);\n\n this._querySub = runRequest(ds, request).subscribe(this.onDataReceived);\n } catch (err) {\n console.error('PanelQueryRunner Error', err);\n }\n }\n\n private onDataReceived = (data: PanelData) => {\n const preProcessedData = preProcessPanelData(data, this.state.data);\n this.setState({ data: preProcessedData });\n };\n\n private _setNoDataState() {\n if (this.state.data !== emptyPanelData) {\n this.setState({ data: emptyPanelData });\n }\n }\n}\n\nexport function findFirstDatasource(targets: DataQuery[]): DataSourceRef | undefined {\n return targets.find((t) => t.datasource !== null)?.datasource ?? undefined;\n}\n","import { DataTransformerConfig, PanelData, transformDataFrame } from '@grafana/data';\nimport { map, Unsubscribable } from 'rxjs';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { CustomTransformOperator, SceneDataProvider, SceneDataState } from '../core/types';\nimport { VariableDependencyConfig } from '../variables/VariableDependencyConfig';\n\nexport interface SceneDataTransformerState extends SceneDataState {\n /**\n * Array of standard transformation configs and custom transform operators\n */\n transformations: Array<DataTransformerConfig | CustomTransformOperator>;\n}\n\n/**\n * You can use this as a $data object. It can either transform an inner $data DataProvider or if that is not set it will\n * subscribe to a DataProvider higher up in the scene graph and transform its data.\n *\n * The transformations array supports custom (runtime defined) transformation as well as declarative core transformations.\n * You can manually re-process the transformations by calling reprocessTransformations(). This is useful if you have\n * transformations that depend on other scene object states.\n */\nexport class SceneDataTransformer extends SceneObjectBase<SceneDataTransformerState> implements SceneDataProvider {\n private _transformSub?: Unsubscribable;\n\n /**\n * Scan transformations for variable usage and re-process transforms when a variable values change\n */\n protected _variableDependency: VariableDependencyConfig<SceneDataTransformerState> = new VariableDependencyConfig(\n this,\n {\n statePaths: ['transformations'],\n onReferencedVariableValueChanged: () => this.reprocessTransformations(),\n }\n );\n\n public constructor(state: SceneDataTransformerState) {\n super(state);\n\n this.addActivationHandler(() => this.activationHandler());\n }\n\n private activationHandler() {\n const sourceData = this.getSourceData();\n\n this._subs.add(sourceData.subscribeToState((state) => this.transform(state.data)));\n\n if (sourceData.state.data) {\n this.transform(sourceData.state.data);\n }\n\n return () => {\n if (this._transformSub) {\n this._transformSub.unsubscribe();\n }\n };\n }\n\n private getSourceData(): SceneDataProvider {\n if (this.state.$data) {\n return this.state.$data;\n }\n\n if (!this.parent || !this.parent.parent) {\n throw new Error('SceneDataTransformer must either have $data set on it or have a parent.parent with $data');\n }\n\n return sceneGraph.getData(this.parent.parent);\n }\n\n public setContainerWidth(width: number) {\n if (this.state.$data && this.state.$data.setContainerWidth) {\n this.state.$data.setContainerWidth(width);\n }\n }\n\n public reprocessTransformations() {\n this.transform(this.getSourceData().state.data);\n }\n\n private transform(data: PanelData | undefined) {\n const transformations = this.state.transformations || [];\n\n if (transformations.length === 0 || !data) {\n this.setState({ data });\n return;\n }\n\n if (this._transformSub) {\n this._transformSub.unsubscribe();\n }\n\n const ctx = {\n interpolate: (value: string) => {\n return sceneGraph.interpolate(this, value, data.request?.scopedVars);\n },\n };\n\n this._transformSub = transformDataFrame(transformations, data.series, ctx)\n .pipe(map((series) => ({ ...data, series })))\n .subscribe((data) => this.setState({ data }));\n }\n}\n","import React from 'react';\n\nimport { GrafanaTheme2, VariableHide } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { SceneComponentProps, SceneObject, SceneObjectState } from '../../core/types';\nimport { SceneVariableState } from '../types';\nimport { css } from '@emotion/css';\n\nexport class VariableValueSelectors extends SceneObjectBase<SceneObjectState> {\n public static Component = VariableValueSelectorsRenderer;\n}\n\nfunction VariableValueSelectorsRenderer({ model }: SceneComponentProps<VariableValueSelectors>) {\n const variables = sceneGraph.getVariables(model)!.useState();\n const styles = useStyles2(getStyles);\n\n return (\n <>\n {variables.variables.map((variable) => (\n <VariableValueSelectWrapper key={variable.state.key} variable={variable} styles={styles} />\n ))}\n </>\n );\n}\n\nfunction VariableValueSelectWrapper({\n variable,\n styles,\n}: {\n variable: SceneObject<SceneVariableState>;\n styles: VariableLabelStyles;\n}) {\n const state = variable.useState();\n\n if (state.hide === VariableHide.hideVariable) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <VariableLabel state={state} styles={styles} />\n <variable.Component model={variable} />\n </div>\n );\n}\n\nfunction VariableLabel({ state, styles }: { state: SceneVariableState; styles: VariableLabelStyles }) {\n if (state.hide === VariableHide.hideLabel) {\n return null;\n }\n\n const elementId = `var-${state.key}`;\n const labelOrName = state.label ?? state.name;\n\n if (state.description) {\n return (\n <Tooltip content={state.description} placement={'bottom'}>\n <label\n className={styles.variableLabel}\n data-testid={selectors.pages.Dashboard.SubMenu.submenuItemLabels(labelOrName)}\n htmlFor={elementId}\n >\n {labelOrName}\n </label>\n </Tooltip>\n );\n }\n\n return (\n <label\n className={styles.variableLabel}\n data-testid={selectors.pages.Dashboard.SubMenu.submenuItemLabels(labelOrName)}\n htmlFor={elementId}\n >\n {labelOrName}\n </label>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n container: css({\n display: 'flex',\n }),\n variableLabel: css({\n background: theme.isDark ? theme.colors.background.primary : theme.colors.background.secondary,\n display: `flex`,\n alignItems: 'center',\n padding: theme.spacing(0, 1),\n fontWeight: theme.typography.fontWeightMedium,\n fontSize: theme.typography.bodySmall.fontSize,\n height: theme.spacing(theme.components.height.md),\n lineHeight: theme.spacing(theme.components.height.md),\n borderRadius: theme.shape.borderRadius(1),\n border: `1px solid ${theme.components.input.borderColor}`,\n position: 'relative',\n // To make the border line up with the input border\n right: -1,\n }),\n});\n\ntype VariableLabelStyles = ReturnType<typeof getStyles>;\n","import { VariableRefresh } from '@grafana/data';\nimport { Unsubscribable } from 'rxjs';\nimport { sceneGraph } from '../../core/sceneGraph';\n\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneObject } from '../../core/types';\nimport { writeSceneLog } from '../../utils/writeSceneLog';\nimport { SceneVariable, SceneVariables, SceneVariableSetState, SceneVariableValueChangedEvent } from '../types';\nimport { VariableValueRecorder } from '../VariableValueRecorder';\n\nexport class SceneVariableSet extends SceneObjectBase<SceneVariableSetState> implements SceneVariables {\n /** Variables that have changed in since the activation or since the first manual value change */\n private _variablesThatHaveChanged = new Set<SceneVariable>();\n\n /** Variables that are scheduled to be validated and updated */\n private _variablesToUpdate = new Set<SceneVariable>();\n\n /** Variables currently updating */\n private _updating = new Map<SceneVariable, VariableUpdateInProgress>();\n\n private _variableValueRecorder = new VariableValueRecorder();\n\n public getByName(name: string): SceneVariable | undefined {\n // TODO: Replace with index\n return this.state.variables.find((x) => x.state.name === name);\n }\n\n public constructor(state: SceneVariableSetState) {\n super(state);\n\n this.addActivationHandler(this._onActivate);\n }\n\n /**\n * Subscribes to child variable value changes, and starts the variable value validation process\n */\n private _onActivate = () => {\n const timeRange = sceneGraph.getTimeRange(this);\n // Subscribe to changes to child variables\n this._subs.add(\n this.subscribeToEvent(SceneVariableValueChangedEvent, (event) => this._handleVariableValueChanged(event.payload))\n );\n\n this._subs.add(\n timeRange.subscribeToState(() => {\n this._refreshTimeRangeBasedVariables();\n })\n );\n\n // Subscribe to state changes\n this._subs.add(this.subscribeToState(this._onStateChanged));\n\n this._checkForVariablesThatChangedWhileInactive();\n\n // Add all variables that need updating to queue\n for (const variable of this.state.variables) {\n if (this._variableNeedsUpdate(variable)) {\n this._variablesToUpdate.add(variable);\n }\n }\n\n this._updateNextBatch();\n\n // Return deactivation handler;\n return this._onDeactivate;\n };\n\n /**\n * Add all variables that depend on the changed variable to the update queue\n */\n private _refreshTimeRangeBasedVariables() {\n for (const variable of this.state.variables) {\n if ('refresh' in variable.state && variable.state.refresh === VariableRefresh.onTimeRangeChanged) {\n this._variablesToUpdate.add(variable);\n }\n }\n\n this._updateNextBatch();\n }\n\n /**\n * Cancel all currently running updates\n */\n private _onDeactivate = () => {\n for (const update of this._updating.values()) {\n update.subscription?.unsubscribe();\n }\n\n // Remember current variable values\n for (const variable of this.state.variables) {\n // if the current variable is not in queue to update and validate and not being actively updated then the value is ok\n if (!this._variablesToUpdate.has(variable) && !this._updating.has(variable)) {\n this._variableValueRecorder.recordCurrentValue(variable);\n }\n }\n\n this._variablesToUpdate.clear();\n this._updating.clear();\n };\n\n /**\n * Look for new variables that need to be initialized\n */\n private _onStateChanged = (newState: SceneVariableSetState, oldState: SceneVariableSetState) => {\n const variablesToUpdateCountStart = this._variablesToUpdate.size;\n\n // Check for removed variables\n for (const variable of oldState.variables) {\n if (!newState.variables.includes(variable)) {\n const updating = this._updating.get(variable);\n if (updating?.subscription) {\n updating.subscription.unsubscribe();\n }\n this._updating.delete(variable);\n this._variablesToUpdate.delete(variable);\n }\n }\n\n // Check for new variables\n for (const variable of newState.variables) {\n if (!oldState.variables.includes(variable)) {\n if (this._variableNeedsUpdate(variable)) {\n this._variablesToUpdate.add(variable);\n }\n }\n }\n\n // Only start a new batch if there was no batch already running\n if (variablesToUpdateCountStart === 0 && this._variablesToUpdate.size > 0) {\n this._updateNextBatch();\n }\n };\n\n /**\n * If variables changed while in in-active state we don't get any change events, so we need to check for that here.\n */\n private _checkForVariablesThatChangedWhileInactive() {\n if (!this._variableValueRecorder.hasValues()) {\n return;\n }\n\n for (const variable of this.state.variables) {\n if (this._variableValueRecorder.hasValueChanged(variable)) {\n writeVariableTraceLog(variable, 'Changed while in-active');\n this._addDependentVariablesToUpdateQueue(variable);\n }\n }\n }\n\n private _variableNeedsUpdate(variable: SceneVariable): boolean {\n if (!variable.validateAndUpdate) {\n return false;\n }\n\n // If we have recorded valid value (even if it has changed since we do not need to re-validate this variable)\n if (this._variableValueRecorder.hasRecordedValue(variable)) {\n writeVariableTraceLog(variable, 'Skipping updateAndValidate current value valid');\n return false;\n }\n\n return true;\n }\n\n /**\n * This loops through variablesToUpdate and update all that can.\n * If one has a dependency that is currently in variablesToUpdate it will be skipped for now.\n */\n private _updateNextBatch() {\n // If we have nothing more to update and variable values changed we need to update scene objects that depend on these variables\n if (this._variablesToUpdate.size === 0) {\n this._notifyDependentSceneObjects();\n return;\n }\n\n for (const variable of this._variablesToUpdate) {\n if (!variable.validateAndUpdate) {\n throw new Error('Variable added to variablesToUpdate but does not have validateAndUpdate');\n }\n\n // Ignore it if it's already started\n if (this._updating.has(variable)) {\n continue;\n }\n\n // Wait for variables that has dependencies that also needs updates\n if (this._hasDependendencyInUpdateQueue(variable)) {\n continue;\n }\n\n const variableToUpdate: VariableUpdateInProgress = {\n variable,\n };\n\n this._updating.set(variable, variableToUpdate);\n writeVariableTraceLog(variable, 'updateAndValidate started');\n\n variableToUpdate.subscription = variable.validateAndUpdate().subscribe({\n next: () => this._validateAndUpdateCompleted(variable),\n error: (err) => this._handleVariableError(variable, err),\n });\n }\n }\n\n /**\n * A variable has completed it's update process. This could mean that variables that depend on it can now be updated in turn.\n */\n private _validateAndUpdateCompleted(variable: SceneVariable) {\n const update = this._updating.get(variable);\n update?.subscription?.unsubscribe();\n\n this._updating.delete(variable);\n this._variablesToUpdate.delete(variable);\n\n writeVariableTraceLog(variable, 'updateAndValidate completed');\n\n this._updateNextBatch();\n }\n\n /**\n * TODO handle this properly (and show error in UI).\n * Not sure if this should be handled here on in MultiValueVariable\n */\n private _handleVariableError(variable: SceneVariable, err: Error) {\n const update = this._updating.get(variable);\n update?.subscription?.unsubscribe();\n\n this._updating.delete(variable);\n this._variablesToUpdate.delete(variable);\n variable.setState({ loading: false, error: err });\n\n writeVariableTraceLog(variable, 'updateAndValidate error', err);\n }\n\n /**\n * Checks if the variable has any dependencies that is currently in variablesToUpdate\n */\n private _hasDependendencyInUpdateQueue(variable: SceneVariable) {\n if (!variable.variableDependency) {\n return false;\n }\n\n for (const otherVariable of this._variablesToUpdate.values()) {\n if (variable.variableDependency?.hasDependencyOn(otherVariable.state.name)) {\n return true;\n }\n }\n\n return false;\n }\n\n private _handleVariableValueChanged(variableThatChanged: SceneVariable) {\n this._variablesThatHaveChanged.add(variableThatChanged);\n\n // Ignore this change if it is currently updating\n if (this._updating.has(variableThatChanged)) {\n return;\n }\n\n this._addDependentVariablesToUpdateQueue(variableThatChanged);\n this._updateNextBatch();\n }\n\n private _addDependentVariablesToUpdateQueue(variableThatChanged: SceneVariable) {\n for (const otherVariable of this.state.variables) {\n if (otherVariable.variableDependency) {\n if (otherVariable.variableDependency.hasDependencyOn(variableThatChanged.state.name)) {\n writeVariableTraceLog(otherVariable, 'Added to update queue, dependant variable value changed');\n this._variablesToUpdate.add(otherVariable);\n }\n }\n }\n }\n\n /**\n * Walk scene object graph and update all objects that depend on variables that have changed\n */\n private _notifyDependentSceneObjects() {\n if (!this.parent) {\n return;\n }\n\n this._traverseSceneAndNotify(this.parent);\n this._variablesThatHaveChanged.clear();\n }\n\n /**\n * Recursivly walk the full scene object graph and notify all objects with dependencies that include any of changed variables\n */\n private _traverseSceneAndNotify(sceneObject: SceneObject) {\n // No need to notify variables under this SceneVariableSet\n if (this === sceneObject) {\n return;\n }\n\n // Skip non active scene objects\n if (!sceneObject.isActive) {\n return;\n }\n\n if (sceneObject.variableDependency) {\n sceneObject.variableDependency.variableUpdatesCompleted(this._variablesThatHaveChanged);\n }\n\n sceneObject.forEachChild((child) => this._traverseSceneAndNotify(child));\n }\n\n /**\n * Return true if variable is waiting to update or currently updating\n */\n public isVariableLoadingOrWaitingToUpdate(variable: SceneVariable) {\n // If we have not activated yet then variables are not up to date\n if (!this.isActive) {\n return true;\n }\n\n return this._variablesToUpdate.has(variable) || this._updating.has(variable);\n }\n}\n\nexport interface VariableUpdateInProgress {\n variable: SceneVariable;\n subscription?: Unsubscribable;\n}\n\nfunction writeVariableTraceLog(variable: SceneVariable, message: string, err?: Error) {\n writeSceneLog('SceneVariableSet', `Variable[${variable.state.name}]: ${message}`, err);\n}\n","import { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneVariable, SceneVariableState, VariableValue } from '../types';\n\nexport interface ConstantVariableState extends SceneVariableState {\n value: string;\n}\n\nexport class ConstantVariable\n extends SceneObjectBase<ConstantVariableState>\n implements SceneVariable<ConstantVariableState>\n{\n public constructor(initialState: Partial<ConstantVariableState>) {\n super({\n type: 'constant',\n value: '',\n name: '',\n ...initialState,\n skipUrlSync: true,\n });\n }\n public getValue(): VariableValue {\n return this.state.value;\n }\n}\n","import { isArray } from 'lodash';\nimport React from 'react';\n\nimport { MultiSelect, Select } from '@grafana/ui';\n\nimport { SceneComponentProps } from '../../core/types';\nimport { MultiValueVariable } from '../variants/MultiValueVariable';\n\nexport function VariableValueSelect({ model }: SceneComponentProps<MultiValueVariable>) {\n const { value, key, loading } = model.useState();\n\n return (\n <Select\n id={key}\n placeholder=\"Select value\"\n width=\"auto\"\n value={value}\n allowCustomValue\n tabSelectsValue={false}\n isLoading={loading}\n options={model.getOptionsForSelect()}\n onChange={(newValue) => {\n model.changeValueTo(newValue.value!, newValue.label!);\n }}\n />\n );\n}\n\nexport function VariableValueSelectMulti({ model }: SceneComponentProps<MultiValueVariable>) {\n const { value, key, loading } = model.useState();\n const arrayValue = isArray(value) ? value : [value];\n\n return (\n <MultiSelect\n id={key}\n placeholder=\"Select value\"\n width=\"auto\"\n value={arrayValue}\n tabSelectsValue={false}\n allowCustomValue\n isLoading={loading}\n options={model.getOptionsForSelect()}\n closeMenuOnSelect={false}\n isClearable={true}\n onOpenMenu={() => {}}\n onChange={(newValue) => {\n model.changeValueTo(\n newValue.map((v) => v.value!),\n newValue.map((v) => v.label!)\n );\n }}\n />\n );\n}\n\nexport function renderSelectForVariable(model: MultiValueVariable) {\n if (model.state.isMulti) {\n return <VariableValueSelectMulti model={model} />;\n } else {\n return <VariableValueSelect model={model} />;\n }\n}\n","import { isEqual } from 'lodash';\nimport { map, Observable } from 'rxjs';\n\nimport { ALL_VARIABLE_TEXT, ALL_VARIABLE_VALUE } from '../constants';\n\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneObject, SceneObjectUrlSyncHandler, SceneObjectUrlValues } from '../../core/types';\nimport {\n SceneVariable,\n SceneVariableValueChangedEvent,\n SceneVariableState,\n ValidateAndUpdateResult,\n VariableValue,\n VariableValueOption,\n VariableValueSingle,\n CustomVariableValue,\n VariableCustomFormatterFn,\n} from '../types';\nimport { formatRegistry } from '../interpolation/formatRegistry';\nimport { VariableFormatID } from '@grafana/schema';\n\nexport interface MultiValueVariableState extends SceneVariableState {\n value: VariableValue; // old current.text\n text: VariableValue; // old current.value\n options: VariableValueOption[];\n isMulti?: boolean;\n includeAll?: boolean;\n defaultToAll?: boolean;\n allValue?: string;\n placeholder?: string;\n}\n\nexport interface VariableGetOptionsArgs {\n searchFilter?: string;\n}\n\nexport abstract class MultiValueVariable<TState extends MultiValueVariableState = MultiValueVariableState>\n extends SceneObjectBase<TState>\n implements SceneVariable<TState>\n{\n protected _urlSync: SceneObjectUrlSyncHandler = new MultiValueUrlSyncHandler(this);\n\n /**\n * The source of value options.\n */\n public abstract getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]>;\n\n /**\n * This function is called on when SceneVariableSet is activated or when a dependency changes.\n */\n public validateAndUpdate(): Observable<ValidateAndUpdateResult> {\n return this.getValueOptions({}).pipe(\n map((options) => {\n this.updateValueGivenNewOptions(options);\n return {};\n })\n );\n }\n\n /**\n * Check if current value is valid given new options. If not update the value.\n */\n private updateValueGivenNewOptions(options: VariableValueOption[]) {\n const stateUpdate: Partial<MultiValueVariableState> = {\n options,\n loading: false,\n value: this.state.value,\n text: this.state.text,\n };\n\n if (options.length === 0) {\n // TODO handle the no value state\n } else if (this.hasAllValue()) {\n // If value is set to All then we keep it set to All but just store the options\n } else if (this.state.isMulti) {\n // If we are a multi valued variable validate the current values are among the options\n const currentValues = Array.isArray(this.state.value) ? this.state.value : [this.state.value];\n const validValues = currentValues.filter((v) => options.find((o) => o.value === v));\n\n // If no valid values pick the first option\n if (validValues.length === 0) {\n const defaultState = this.getDefaultMultiState(options);\n stateUpdate.value = defaultState.value;\n stateUpdate.text = defaultState.text;\n }\n // We have valid values, if it's different from current valid values update current values\n else if (!isEqual(validValues, this.state.value)) {\n const validTexts = validValues.map((v) => options.find((o) => o.value === v)!.label);\n stateUpdate.value = validValues;\n stateUpdate.text = validTexts;\n }\n } else {\n // Single valued variable\n const foundCurrent = options.find((x) => x.value === this.state.value);\n if (!foundCurrent) {\n if (this.state.defaultToAll) {\n stateUpdate.value = ALL_VARIABLE_VALUE;\n stateUpdate.text = ALL_VARIABLE_TEXT;\n } else {\n // Current value is not valid. Set to first of the available options\n stateUpdate.value = options[0].value;\n stateUpdate.text = options[0].label;\n }\n }\n }\n\n // Remember current value and text\n const { value: prevValue, text: prevText } = this.state;\n\n // Perform state change\n this.setStateHelper(stateUpdate);\n\n // Publish value changed event only if value changed\n if (stateUpdate.value !== prevValue || stateUpdate.text !== prevText || this.hasAllValue()) {\n this.publishEvent(new SceneVariableValueChangedEvent(this), true);\n }\n }\n\n public getValue(): VariableValue {\n if (this.hasAllValue()) {\n if (this.state.allValue) {\n return new CustomAllValue(this.state.allValue, this);\n }\n\n return this.state.options.map((x) => x.value);\n }\n\n return this.state.value;\n }\n\n public getValueText(): string {\n if (this.hasAllValue()) {\n return ALL_VARIABLE_TEXT;\n }\n\n if (Array.isArray(this.state.text)) {\n return this.state.text.join(' + ');\n }\n\n return String(this.state.text);\n }\n\n private hasAllValue() {\n const value = this.state.value;\n return value === ALL_VARIABLE_VALUE || (Array.isArray(value) && value[0] === ALL_VARIABLE_VALUE);\n }\n\n private getDefaultMultiState(options: VariableValueOption[]) {\n if (this.state.defaultToAll) {\n return { value: [ALL_VARIABLE_VALUE], text: [ALL_VARIABLE_TEXT] };\n } else {\n return { value: [options[0].value], text: [options[0].label] };\n }\n }\n\n /**\n * Change the value and publish SceneVariableValueChangedEvent event\n */\n public changeValueTo(value: VariableValue, text?: VariableValue) {\n // Igore if there is no change\n if (value === this.state.value && text === this.state.text) {\n return;\n }\n\n if (!text) {\n if (Array.isArray(value)) {\n text = value.map((v) => this.findLabelTextForValue(v));\n } else {\n text = this.findLabelTextForValue(value);\n }\n }\n\n if (Array.isArray(value)) {\n // If we are a multi valued variable is cleared (empty array) we need to set the default empty state\n if (value.length === 0) {\n const state = this.getDefaultMultiState(this.state.options);\n value = state.value;\n text = state.text;\n }\n\n // If last value is the All value then replace all with it\n if (value[value.length - 1] === ALL_VARIABLE_VALUE) {\n value = [ALL_VARIABLE_VALUE];\n text = [ALL_VARIABLE_TEXT];\n }\n // If the first value is the ALL value and we have other values, then remove the All value\n else if (value[0] === ALL_VARIABLE_VALUE && value.length > 1) {\n value.shift();\n if (Array.isArray(text)) {\n text.shift();\n }\n }\n }\n\n this.setStateHelper({ value, text, loading: false });\n this.publishEvent(new SceneVariableValueChangedEvent(this), true);\n }\n\n private findLabelTextForValue(value: VariableValueSingle): VariableValueSingle {\n const option = this.state.options.find((x) => x.value === value);\n if (option) {\n return option.label;\n }\n\n const optionByLabel = this.state.options.find((x) => x.label === value);\n if (optionByLabel) {\n return optionByLabel.label;\n }\n\n return value;\n }\n\n /**\n * This helper function is to counter the contravariance of setState\n */\n private setStateHelper(state: Partial<MultiValueVariableState>) {\n const test: SceneObject<MultiValueVariableState> = this;\n test.setState(state);\n }\n\n public getOptionsForSelect(): VariableValueOption[] {\n let options = this.state.options;\n\n if (this.state.includeAll) {\n options = [{ value: ALL_VARIABLE_VALUE, label: ALL_VARIABLE_TEXT }, ...options];\n }\n\n if (!Array.isArray(this.state.value)) {\n const current = options.find((x) => x.value === this.state.value);\n if (!current) {\n options = [{ value: this.state.value, label: String(this.state.text) }, ...options];\n }\n }\n\n return options;\n }\n}\n\nexport class MultiValueUrlSyncHandler<TState extends MultiValueVariableState = MultiValueVariableState>\n implements SceneObjectUrlSyncHandler\n{\n public constructor(private _sceneObject: MultiValueVariable<TState>) {}\n\n private getKey(): string {\n return `var-${this._sceneObject.state.name}`;\n }\n\n public getKeys(): string[] {\n return [this.getKey()];\n }\n\n public getUrlState(): SceneObjectUrlValues {\n let urlValue: string | string[] | null = null;\n let value = this._sceneObject.state.value;\n\n if (Array.isArray(value)) {\n urlValue = value.map(String);\n } else {\n urlValue = String(value);\n }\n\n return { [this.getKey()]: urlValue };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues): void {\n const urlValue = values[this.getKey()];\n\n if (urlValue != null) {\n this._sceneObject.changeValueTo(urlValue);\n }\n }\n}\n\n/**\n * Variable getValue can return this to skip any subsequent formatting.\n * This is useful for custom all values that should not be escaped/formatted.\n */\nexport class CustomAllValue implements CustomVariableValue {\n public constructor(private _value: string, private _variable: SceneVariable) {}\n\n public formatter(formatNameOrFn?: string | VariableCustomFormatterFn): string {\n if (formatNameOrFn === VariableFormatID.Text) {\n return ALL_VARIABLE_TEXT;\n }\n\n if (formatNameOrFn === VariableFormatID.PercentEncode) {\n return formatRegistry.get(VariableFormatID.PercentEncode).formatter(this._value, [], this._variable);\n }\n\n if (formatNameOrFn === VariableFormatID.QueryParam) {\n return formatRegistry.get(VariableFormatID.QueryParam).formatter(ALL_VARIABLE_TEXT, [], this._variable);\n }\n\n return this._value;\n }\n}\n","import { Observable, of } from 'rxjs';\n\nimport { SceneComponentProps } from '../../core/types';\nimport { VariableDependencyConfig } from '../VariableDependencyConfig';\nimport { renderSelectForVariable } from '../components/VariableValueSelect';\nimport { VariableValueOption } from '../types';\n\nimport { MultiValueVariable, MultiValueVariableState, VariableGetOptionsArgs } from './MultiValueVariable';\n\nexport interface CustomVariableState extends MultiValueVariableState {\n query: string;\n}\n\nexport class CustomVariable extends MultiValueVariable<CustomVariableState> {\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['query'],\n });\n\n public constructor(initialState: Partial<CustomVariableState>) {\n super({\n type: 'custom',\n query: '',\n value: '',\n text: '',\n options: [],\n name: '',\n ...initialState,\n });\n }\n\n public getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]> {\n const match = this.state.query.match(/(?:\\\\,|[^,])+/g) ?? [];\n const options = match.map((text) => {\n text = text.replace(/\\\\,/g, ',');\n const textMatch = /^(.+)\\s:\\s(.+)$/g.exec(text) ?? [];\n if (textMatch.length === 3) {\n const [, key, value] = textMatch;\n return { label: key.trim(), value: value.trim() };\n } else {\n return { label: text.trim(), value: text.trim() };\n }\n });\n\n return of(options);\n }\n\n public static Component = ({ model }: SceneComponentProps<MultiValueVariable>) => {\n return renderSelectForVariable(model);\n };\n}\n","import { Observable, of } from 'rxjs';\n\nimport { stringToJsRegex, DataSourceInstanceSettings } from '@grafana/data';\nimport { getDataSourceSrv } from '@grafana/runtime';\n\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { SceneComponentProps } from '../../core/types';\nimport { VariableDependencyConfig } from '../VariableDependencyConfig';\nimport { renderSelectForVariable } from '../components/VariableValueSelect';\nimport { VariableValueOption } from '../types';\n\nimport { MultiValueVariable, MultiValueVariableState, VariableGetOptionsArgs } from './MultiValueVariable';\n\nexport interface DataSourceVariableState extends MultiValueVariableState {\n /**\n * Include all data source instances with this plugin id\n */\n pluginId: string;\n /**\n * Filter data source instances based on name\n */\n regex: string;\n}\n\nexport class DataSourceVariable extends MultiValueVariable<DataSourceVariableState> {\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['regex'],\n });\n\n public constructor(initialState: Partial<DataSourceVariableState>) {\n super({\n type: 'datasource',\n value: '',\n text: '',\n options: [],\n name: '',\n regex: '',\n pluginId: '',\n ...initialState,\n });\n }\n\n public getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]> {\n if (!this.state.pluginId) {\n return of([]);\n }\n\n const dataSourceTypes = this.getDataSourceTypes();\n\n let regex;\n if (this.state.regex) {\n const interpolated = sceneGraph.interpolate(this, this.state.regex, undefined, 'regex');\n regex = stringToJsRegex(interpolated);\n }\n\n const options: VariableValueOption[] = [];\n\n for (let i = 0; i < dataSourceTypes.length; i++) {\n const source = dataSourceTypes[i];\n // must match on type\n if (source.meta.id !== this.state.pluginId) {\n continue;\n }\n\n if (isValid(source, regex)) {\n options.push({ label: source.name, value: source.name });\n }\n\n if (isDefault(source, regex)) {\n options.push({ label: 'default', value: 'default' });\n }\n }\n\n if (options.length === 0) {\n options.push({ label: 'No data sources found', value: '' });\n }\n\n return of(options);\n }\n\n private getDataSourceTypes(): DataSourceInstanceSettings[] {\n return getDataSourceSrv().getList({ metrics: true, variables: false });\n }\n\n public static Component = ({ model }: SceneComponentProps<MultiValueVariable>) => {\n return renderSelectForVariable(model);\n };\n}\n\nfunction isValid(source: DataSourceInstanceSettings, regex?: RegExp) {\n if (!regex) {\n return true;\n }\n\n return regex.exec(source.name);\n}\n\nfunction isDefault(source: DataSourceInstanceSettings, regex?: RegExp) {\n if (!source.isDefault) {\n return false;\n }\n\n if (!regex) {\n return true;\n }\n\n return regex.exec('default');\n}\n","import {\n DataQuery,\n DataSourceJsonData,\n DataSourceApi,\n MetricFindValue,\n VariableSupportType,\n StandardVariableQuery,\n DataQueryRequest,\n DataQueryResponse,\n QueryEditorProps,\n} from '@grafana/data';\nimport { TemplateSrv } from '@grafana/runtime';\nimport { ComponentType } from 'react';\n\nimport { Observable } from 'rxjs';\n\n/**\n * Interfaces and guards below are copied from core.\n * Not exposing via grafana/data as these are not intended to be used in context other than variables.\n */\n\ninterface DataSourceWithLegacyVariableSupport<\n TQuery extends DataQuery = DataQuery,\n TOptions extends DataSourceJsonData = DataSourceJsonData\n> extends DataSourceApi<TQuery, TOptions> {\n metricFindQuery(query: any, options?: any): Promise<MetricFindValue[]>;\n variables: undefined;\n}\n\ninterface DataSourceWithStandardVariableSupport<\n TQuery extends DataQuery = DataQuery,\n TOptions extends DataSourceJsonData = DataSourceJsonData\n> extends DataSourceApi<TQuery, TOptions> {\n variables: {\n getType(): VariableSupportType;\n toDataQuery(query: StandardVariableQuery): TQuery;\n query(request: DataQueryRequest<TQuery>): Observable<DataQueryResponse>;\n };\n}\n\ninterface DataSourceWithCustomVariableSupport<\n TQuery extends DataQuery = DataQuery,\n TOptions extends DataSourceJsonData = DataSourceJsonData\n> extends DataSourceApi<TQuery, TOptions> {\n variables: {\n getType(): VariableSupportType;\n editor: VariableQueryEditorType;\n query(request: DataQueryRequest<TQuery>): Observable<DataQueryResponse>;\n };\n}\n\ninterface VariableQueryEditorProps {\n query: any;\n onChange: (query: any, definition: string) => void;\n datasource: any;\n templateSrv: TemplateSrv;\n}\n\ntype VariableQueryEditorType<\n TQuery extends DataQuery = DataQuery,\n TOptions extends DataSourceJsonData = DataSourceJsonData\n> = ComponentType<VariableQueryEditorProps> | ComponentType<QueryEditorProps<any, TQuery, TOptions, any>> | null;\n\nexport const hasLegacyVariableSupport = <\n TQuery extends DataQuery = DataQuery,\n TOptions extends DataSourceJsonData = DataSourceJsonData\n>(\n datasource: DataSourceApi<TQuery, TOptions>\n): datasource is DataSourceWithLegacyVariableSupport<TQuery, TOptions> => {\n return Boolean(datasource.metricFindQuery) && !Boolean(datasource.variables);\n};\n\nexport const hasStandardVariableSupport = <\n TQuery extends DataQuery = DataQuery,\n TOptions extends DataSourceJsonData = DataSourceJsonData\n>(\n datasource: DataSourceApi<TQuery, TOptions>\n): datasource is DataSourceWithStandardVariableSupport<TQuery, TOptions> => {\n if (!datasource.variables) {\n return false;\n }\n\n if (datasource.variables.getType() !== VariableSupportType.Standard) {\n return false;\n }\n\n const variableSupport = datasource.variables;\n return 'toDataQuery' in variableSupport && Boolean(variableSupport.toDataQuery);\n};\n\nexport const hasCustomVariableSupport = <\n TQuery extends DataQuery = DataQuery,\n TOptions extends DataSourceJsonData = DataSourceJsonData\n>(\n datasource: DataSourceApi<TQuery, TOptions>\n): datasource is DataSourceWithCustomVariableSupport<TQuery, TOptions> => {\n if (!datasource.variables) {\n return false;\n }\n\n if (datasource.variables.getType() !== VariableSupportType.Custom) {\n return false;\n }\n\n const variableSupport = datasource.variables;\n return (\n 'query' in variableSupport &&\n 'editor' in variableSupport &&\n Boolean(variableSupport.query) &&\n Boolean(variableSupport.editor)\n );\n};\n","import { from, mergeMap, Observable, of } from 'rxjs';\n\nimport {\n DataQuery,\n DataQueryRequest,\n DataSourceApi,\n getDefaultTimeRange,\n LoadingState,\n PanelData,\n} from '@grafana/data';\nimport { getRunRequest } from '@grafana/runtime';\n\nimport { hasCustomVariableSupport, hasLegacyVariableSupport, hasStandardVariableSupport } from './guards';\n\nimport { QueryVariable } from './QueryVariable';\n\nexport interface RunnerArgs {\n searchFilter?: string;\n variable: QueryVariable;\n}\n\nexport interface QueryRunner {\n getTarget: (variable: QueryVariable) => DataQuery;\n runRequest: (args: RunnerArgs, request: DataQueryRequest) => Observable<PanelData>;\n}\n\nclass StandardQueryRunner implements QueryRunner {\n public constructor(private datasource: DataSourceApi, private _runRequest = getRunRequest()) {}\n\n public getTarget(variable: QueryVariable) {\n if (hasStandardVariableSupport(this.datasource)) {\n return this.datasource.variables.toDataQuery(variable.state.query);\n }\n\n throw new Error(\"Couldn't create a target with supplied arguments.\");\n }\n\n public runRequest(_: RunnerArgs, request: DataQueryRequest) {\n if (!hasStandardVariableSupport(this.datasource)) {\n return getEmptyMetricFindValueObservable();\n }\n\n if (!this.datasource.variables.query) {\n return this._runRequest(this.datasource, request);\n }\n\n return this._runRequest(this.datasource, request, this.datasource.variables.query);\n }\n}\n\nclass LegacyQueryRunner implements QueryRunner {\n public constructor(private datasource: DataSourceApi) {}\n\n public getTarget(variable: QueryVariable) {\n if (hasLegacyVariableSupport(this.datasource)) {\n return variable.state.query;\n }\n\n throw new Error(\"Couldn't create a target with supplied arguments.\");\n }\n\n public runRequest({ variable }: RunnerArgs, request: DataQueryRequest) {\n if (!hasLegacyVariableSupport(this.datasource)) {\n return getEmptyMetricFindValueObservable();\n }\n\n return from(\n this.datasource.metricFindQuery(variable.state.query, {\n ...request,\n // variable is used by SQL common data source\n variable: {\n name: variable.state.name,\n type: variable.state.type,\n },\n // TODO: add support for search filter\n // searchFilter\n })\n ).pipe(\n mergeMap((values) => {\n if (!values || !values.length) {\n return getEmptyMetricFindValueObservable();\n }\n\n const series: any = values;\n return of({ series, state: LoadingState.Done, timeRange: request.range });\n })\n );\n }\n}\n\nclass CustomQueryRunner implements QueryRunner {\n public constructor(private datasource: DataSourceApi, private _runRequest = getRunRequest()) {}\n\n public getTarget(variable: QueryVariable) {\n if (hasCustomVariableSupport(this.datasource)) {\n return variable.state.query;\n }\n\n throw new Error(\"Couldn't create a target with supplied arguments.\");\n }\n\n public runRequest(_: RunnerArgs, request: DataQueryRequest) {\n if (!hasCustomVariableSupport(this.datasource)) {\n return getEmptyMetricFindValueObservable();\n }\n\n if (!this.datasource.variables.query) {\n return this._runRequest(this.datasource, request);\n }\n return this._runRequest(this.datasource, request, this.datasource.variables.query);\n }\n}\n\nfunction getEmptyMetricFindValueObservable(): Observable<PanelData> {\n return of({ state: LoadingState.Done, series: [], timeRange: getDefaultTimeRange() });\n}\n\nfunction createQueryVariableRunnerFactory(datasource: DataSourceApi): QueryRunner {\n if (hasStandardVariableSupport(datasource)) {\n return new StandardQueryRunner(datasource, getRunRequest());\n }\n\n if (hasLegacyVariableSupport(datasource)) {\n return new LegacyQueryRunner(datasource);\n }\n\n if (hasCustomVariableSupport(datasource)) {\n return new CustomQueryRunner(datasource);\n }\n\n throw new Error(`Couldn't create a query runner for datasource ${datasource.type}`);\n}\n\nexport let createQueryVariableRunner = createQueryVariableRunnerFactory;\n\n/**\n * Use only in tests\n */\nexport function setCreateQueryVariableRunnerFactory(fn: (datasource: DataSourceApi) => QueryRunner) {\n createQueryVariableRunner = fn;\n}\n","import { isNumber, sortBy, toLower, uniqBy } from 'lodash';\n\nimport { stringToJsRegex, VariableSort } from '@grafana/data';\n\nimport { VariableValueOption } from '../../types';\n\nexport const metricNamesToVariableValues = (variableRegEx: string, sort: VariableSort, metricNames: any[]) => {\n let regex;\n let options: VariableValueOption[] = [];\n\n if (variableRegEx) {\n regex = stringToJsRegex(variableRegEx);\n }\n\n for (let i = 0; i < metricNames.length; i++) {\n const item = metricNames[i];\n let text = item.text === undefined || item.text === null ? item.value : item.text;\n let value = item.value === undefined || item.value === null ? item.text : item.value;\n\n if (isNumber(value)) {\n value = value.toString();\n }\n\n if (isNumber(text)) {\n text = text.toString();\n }\n\n if (regex) {\n const matches = getAllMatches(value, regex);\n if (!matches.length) {\n continue;\n }\n\n const valueGroup = matches.find((m) => m.groups && m.groups.value);\n const textGroup = matches.find((m) => m.groups && m.groups.text);\n const firstMatch = matches.find((m) => m.length > 1);\n const manyMatches = matches.length > 1 && firstMatch;\n\n if (valueGroup || textGroup) {\n value = valueGroup?.groups?.value ?? textGroup?.groups?.text;\n text = textGroup?.groups?.text ?? valueGroup?.groups?.value;\n } else if (manyMatches) {\n for (let j = 0; j < matches.length; j++) {\n const match = matches[j];\n options.push({ label: match[1], value: match[1] });\n }\n continue;\n } else if (firstMatch) {\n text = firstMatch[1];\n value = firstMatch[1];\n }\n }\n\n options.push({ label: text, value: value });\n }\n\n options = uniqBy(options, 'value');\n return sortVariableValues(options, sort);\n};\n\nconst getAllMatches = (str: string, regex: RegExp): RegExpExecArray[] => {\n const results: RegExpExecArray[] = [];\n let matches = null;\n\n regex.lastIndex = 0;\n\n do {\n matches = regex.exec(str);\n if (matches) {\n results.push(matches);\n }\n } while (regex.global && matches && matches[0] !== '' && matches[0] !== undefined);\n\n return results;\n};\n\nexport const sortVariableValues = (options: any[], sortOrder: VariableSort) => {\n if (sortOrder === VariableSort.disabled) {\n return options;\n }\n\n const sortType = Math.ceil(sortOrder / 2);\n const reverseSort = sortOrder % 2 === 0;\n\n if (sortType === 1) {\n options = sortBy(options, 'text');\n } else if (sortType === 2) {\n options = sortBy(options, (opt) => {\n if (!opt.text) {\n return -1;\n }\n\n const matches = opt.text.match(/.*?(\\d+).*/);\n if (!matches || matches.length < 2) {\n return -1;\n } else {\n return parseInt(matches[1], 10);\n }\n });\n } else if (sortType === 3) {\n options = sortBy(options, (opt) => {\n return toLower(opt.text);\n });\n }\n\n if (reverseSort) {\n options = options.reverse();\n }\n\n return options;\n};\n","import {\n FieldType,\n getFieldDisplayName,\n isDataFrame,\n MetricFindValue,\n PanelData,\n getProcessedDataFrames,\n} from '@grafana/data';\nimport { map, OperatorFunction } from 'rxjs';\n\nexport function toMetricFindValues(): OperatorFunction<PanelData, MetricFindValue[]> {\n return (source) =>\n source.pipe(\n map((panelData) => {\n const frames = panelData.series;\n if (!frames || !frames.length) {\n return [];\n }\n\n if (areMetricFindValues(frames)) {\n return frames;\n }\n\n const processedDataFrames = getProcessedDataFrames(frames);\n const metrics: MetricFindValue[] = [];\n\n let valueIndex = -1;\n let textIndex = -1;\n let stringIndex = -1;\n let expandableIndex = -1;\n\n for (const frame of processedDataFrames) {\n for (let index = 0; index < frame.fields.length; index++) {\n const field = frame.fields[index];\n const fieldName = getFieldDisplayName(field, frame, frames).toLowerCase();\n\n if (field.type === FieldType.string && stringIndex === -1) {\n stringIndex = index;\n }\n\n if (fieldName === 'text' && field.type === FieldType.string && textIndex === -1) {\n textIndex = index;\n }\n\n if (fieldName === 'value' && field.type === FieldType.string && valueIndex === -1) {\n valueIndex = index;\n }\n\n if (\n fieldName === 'expandable' &&\n (field.type === FieldType.boolean || field.type === FieldType.number) &&\n expandableIndex === -1\n ) {\n expandableIndex = index;\n }\n }\n }\n\n if (stringIndex === -1) {\n throw new Error(\"Couldn't find any field of type string in the results.\");\n }\n\n for (const frame of frames) {\n for (let index = 0; index < frame.length; index++) {\n const expandable = expandableIndex !== -1 ? frame.fields[expandableIndex].values.get(index) : undefined;\n const string = frame.fields[stringIndex].values.get(index);\n const text = textIndex !== -1 ? frame.fields[textIndex].values.get(index) : null;\n const value = valueIndex !== -1 ? frame.fields[valueIndex].values.get(index) : null;\n\n if (valueIndex === -1 && textIndex === -1) {\n metrics.push({ text: string, value: string, expandable });\n continue;\n }\n\n if (valueIndex === -1 && textIndex !== -1) {\n metrics.push({ text, value: text, expandable });\n continue;\n }\n\n if (valueIndex !== -1 && textIndex === -1) {\n metrics.push({ text: value, value, expandable });\n continue;\n }\n\n metrics.push({ text, value, expandable });\n }\n }\n\n return metrics;\n })\n );\n}\n\nfunction areMetricFindValues(data: any[]): data is MetricFindValue[] {\n if (!data) {\n return false;\n }\n\n if (!data.length) {\n return true;\n }\n\n const firstValue: any = data[0];\n\n if (isDataFrame(firstValue)) {\n return false;\n }\n\n for (const firstValueKey in firstValue) {\n if (!firstValue.hasOwnProperty(firstValueKey)) {\n continue;\n }\n\n if (\n firstValue[firstValueKey] !== null &&\n typeof firstValue[firstValueKey] !== 'string' &&\n typeof firstValue[firstValueKey] !== 'number'\n ) {\n continue;\n }\n\n const key = firstValueKey.toLowerCase();\n\n if (key === 'text' || key === 'value') {\n return true;\n }\n }\n\n return false;\n}\n","import React from 'react';\nimport { Observable, of, filter, take, mergeMap, catchError, throwError, from } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n CoreApp,\n DataQuery,\n DataQueryRequest,\n DataSourceRef,\n getDefaultTimeRange,\n LoadingState,\n PanelData,\n ScopedVars,\n VariableRefresh,\n VariableSort,\n} from '@grafana/data';\n\nimport { sceneGraph } from '../../../core/sceneGraph';\nimport { SceneComponentProps } from '../../../core/types';\nimport { VariableDependencyConfig } from '../../VariableDependencyConfig';\nimport { VariableValueSelect } from '../../components/VariableValueSelect';\nimport { VariableValueOption } from '../../types';\nimport { MultiValueVariable, MultiValueVariableState, VariableGetOptionsArgs } from '../MultiValueVariable';\n\nimport { createQueryVariableRunner } from './createQueryVariableRunner';\nimport { metricNamesToVariableValues } from './utils';\nimport { toMetricFindValues } from './toMetricFindValues';\nimport { getDataSource } from '../../../utils/getDataSource';\n\nexport interface QueryVariableState extends MultiValueVariableState {\n type: 'query';\n datasource: DataSourceRef | null;\n query: any;\n regex: string;\n refresh: VariableRefresh;\n sort: VariableSort;\n}\n\nexport class QueryVariable extends MultiValueVariable<QueryVariableState> {\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['regex', 'query', 'datasource'],\n });\n\n public constructor(initialState: Partial<QueryVariableState>) {\n super({\n type: 'query',\n name: '',\n value: '',\n text: '',\n query: '',\n options: [],\n datasource: null,\n regex: '',\n refresh: VariableRefresh.onDashboardLoad,\n sort: VariableSort.alphabeticalAsc,\n ...initialState,\n });\n }\n\n public getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]> {\n if (this.state.query === '' || !this.state.datasource) {\n return of([]);\n }\n\n this.setState({ loading: true });\n\n return from(\n getDataSource(this.state.datasource, {\n __sceneObject: { text: '__sceneObject', value: this },\n })\n ).pipe(\n mergeMap((ds) => {\n const runner = createQueryVariableRunner(ds);\n const target = runner.getTarget(this);\n const request = this.getRequest(target);\n return runner.runRequest({ variable: this }, request).pipe(\n filter((data) => data.state === LoadingState.Done || data.state === LoadingState.Error), // we only care about done or error for now\n take(1), // take the first result, using first caused a bug where it in some situations throw an uncaught error because of no results had been received yet\n mergeMap((data: PanelData) => {\n if (data.state === LoadingState.Error) {\n return throwError(() => data.error);\n }\n return of(data);\n }),\n toMetricFindValues(),\n mergeMap((values) => {\n let regex = '';\n if (this.state.regex) {\n regex = sceneGraph.interpolate(this, this.state.regex, undefined, 'regex');\n }\n return of(metricNamesToVariableValues(regex, this.state.sort, values));\n }),\n catchError((error) => {\n if (error.cancelled) {\n return of([]);\n }\n return throwError(() => error);\n })\n );\n })\n );\n }\n\n private getRequest(target: DataQuery) {\n // TODO: add support for search filter\n // const { searchFilter } = this.state.searchFilter;\n // const searchFilterScope = { searchFilter: { text: searchFilter, value: searchFilter } };\n // const searchFilterAsVars = searchFilter ? searchFilterScope : {};\n const scopedVars: ScopedVars = {\n // ...searchFilterAsVars,\n __sceneObject: { text: '__sceneObject', value: this },\n };\n\n const range =\n this.state.refresh === VariableRefresh.onTimeRangeChanged\n ? sceneGraph.getTimeRange(this).state.value\n : getDefaultTimeRange();\n\n const request: DataQueryRequest = {\n app: CoreApp.Dashboard,\n requestId: uuidv4(),\n timezone: '',\n range,\n interval: '',\n intervalMs: 0,\n targets: [target],\n scopedVars,\n startTime: Date.now(),\n };\n return request;\n }\n\n public static Component = ({ model }: SceneComponentProps<MultiValueVariable>) => {\n return <VariableValueSelect model={model} />;\n };\n}\n","export interface TreeNode {\n name: string;\n children: TreeNode[];\n}\n\n/*\n * Builds a nested tree like\n * [\n * {\n * name: 'A',\n * children: [\n * { name: 'AA', children: [] },\n * { name: 'AB', children: [] },\n * ]\n * }\n * ]\n */\nfunction buildMetricTree(parent: string, depth: number): TreeNode[] {\n const chars = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'];\n const children: TreeNode[] = [];\n\n if (depth > 5) {\n return [];\n }\n\n for (const letter of chars) {\n const nodeName = `${parent}${letter}`;\n children.push({\n name: nodeName,\n children: buildMetricTree(nodeName, depth + 1),\n });\n }\n\n return children;\n}\n\nfunction queryTree(children: TreeNode[], query: string[], queryIndex: number): TreeNode[] {\n if (queryIndex >= query.length) {\n return children;\n }\n\n if (query[queryIndex] === '*') {\n return children;\n }\n\n const nodeQuery = query[queryIndex];\n let result: TreeNode[] = [];\n let namesToMatch = [nodeQuery];\n\n // handle glob queries\n if (nodeQuery.startsWith('{')) {\n namesToMatch = nodeQuery.replace(/\\{|\\}/g, '').split(',');\n }\n\n for (const node of children) {\n for (const nameToMatch of namesToMatch) {\n if (nameToMatch.indexOf('*') !== -1) {\n const pattern = nameToMatch.replace('*', '');\n const regex = new RegExp(`^${pattern}.*`, 'gi');\n if (regex.test(node.name)) {\n result = result.concat(queryTree([node], query, queryIndex + 1));\n }\n } else if (node.name === nameToMatch) {\n result = result.concat(queryTree(node.children, query, queryIndex + 1));\n }\n }\n }\n\n return result;\n}\n\nexport function queryMetricTree(query: string): TreeNode[] {\n if (query.indexOf('value') === 0) {\n return [{ name: query, children: [] }];\n }\n\n const children = buildMetricTree('', 0);\n return queryTree(children, query.split('.'), 0);\n}\n","import { Observable, Subject } from 'rxjs';\n\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { SceneComponentProps } from '../../core/types';\nimport { queryMetricTree } from '../../utils/metricTree';\nimport { VariableDependencyConfig } from '../VariableDependencyConfig';\nimport { renderSelectForVariable } from '../components/VariableValueSelect';\nimport { VariableValueOption } from '../types';\n\nimport { MultiValueVariable, MultiValueVariableState, VariableGetOptionsArgs } from './MultiValueVariable';\nimport { VariableRefresh } from '@grafana/data';\n\nexport interface TestVariableState extends MultiValueVariableState {\n query: string;\n delayMs?: number;\n issuedQuery?: string;\n refresh?: VariableRefresh;\n}\n\n/**\n * This variable is only designed for unit tests and potentially e2e tests.\n */\nexport class TestVariable extends MultiValueVariable<TestVariableState> {\n private completeUpdate = new Subject<number>();\n public isGettingValues = true;\n public getValueOptionsCount = 0;\n\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['query'],\n });\n\n public constructor(initialState: Partial<TestVariableState>) {\n super({\n type: 'custom',\n name: 'Test',\n value: 'Value',\n text: 'Text',\n query: 'Query',\n options: [],\n refresh: VariableRefresh.onDashboardLoad,\n ...initialState,\n });\n }\n\n public getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]> {\n const { delayMs } = this.state;\n\n this.getValueOptionsCount += 1;\n\n return new Observable<VariableValueOption[]>((observer) => {\n this.setState({ loading: true });\n\n const sub = this.completeUpdate.subscribe({\n next: () => {\n observer.next(this.issueQuery());\n },\n });\n\n let timeout: NodeJS.Timeout | undefined;\n\n if (delayMs) {\n timeout = setTimeout(() => this.signalUpdateCompleted(), delayMs);\n }\n\n this.isGettingValues = true;\n\n return () => {\n sub.unsubscribe();\n clearTimeout(timeout);\n this.isGettingValues = false;\n };\n });\n }\n\n private issueQuery() {\n const interpolatedQuery = sceneGraph.interpolate(this, this.state.query);\n const options = queryMetricTree(interpolatedQuery).map((x) => ({ label: x.name, value: x.name }));\n\n this.setState({\n issuedQuery: interpolatedQuery,\n options,\n });\n\n return options;\n }\n\n /** Useful from tests */\n public signalUpdateCompleted() {\n this.completeUpdate.next(1);\n }\n\n public static Component = ({ model }: SceneComponentProps<MultiValueVariable>) => {\n return renderSelectForVariable(model);\n };\n}\n","import React, { useState, useCallback } from 'react';\n\nimport { Input } from '@grafana/ui';\n\nimport { SceneComponentProps } from '../../core/types';\nimport { TextBoxVariable } from '../variants/TextBoxVariable';\nimport { useDebounce } from 'react-use';\n\nexport function VariableValueInput({ model }: SceneComponentProps<TextBoxVariable>) {\n const { value, key, loading } = model.useState();\n const [textValue, setTextValue] = useState(value);\n useDebounce(\n () => {\n model.setValue(textValue);\n },\n 250,\n [textValue]\n );\n\n const onChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setTextValue(e.target.value);\n },\n [setTextValue]\n );\n\n return <Input id={key} placeholder=\"Enter variable value\" value={textValue} loading={loading} onChange={onChange} />;\n}\n","import React from 'react';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneComponentProps, SceneObjectUrlSyncHandler, SceneObjectUrlValues } from '../../core/types';\nimport { SceneObjectUrlSyncConfig } from '../../services/SceneObjectUrlSyncConfig';\nimport { VariableValueInput } from '../components/VariableValueInput';\nimport { SceneVariable, SceneVariableState, SceneVariableValueChangedEvent, VariableValue } from '../types';\n\nexport interface TextBoxVariableState extends SceneVariableState {\n value: string;\n}\n\nexport class TextBoxVariable\n extends SceneObjectBase<TextBoxVariableState>\n implements SceneVariable<TextBoxVariableState>\n{\n protected _urlSync: SceneObjectUrlSyncHandler;\n\n public constructor(initialState: Partial<TextBoxVariableState>) {\n super({\n type: 'textbox',\n value: '',\n name: '',\n ...initialState,\n });\n\n this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: [this.getKey()] });\n }\n\n public getValue(): VariableValue {\n return this.state.value;\n }\n\n public setValue(newValue: string) {\n this.setState({ value: newValue });\n this.publishEvent(new SceneVariableValueChangedEvent(this), true);\n }\n\n private getKey(): string {\n return `var-${this.state.name}`;\n }\n\n public getUrlState() {\n return { [this.getKey()]: this.state.value };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues) {\n const update: Partial<TextBoxVariableState> = {};\n const val = values[this.getKey()];\n if (typeof val === 'string') {\n update.value = val;\n }\n\n this.setState(update);\n }\n\n public static Component = ({ model }: SceneComponentProps<TextBoxVariable>) => {\n return <VariableValueInput model={model} />;\n };\n}\n","import { Location, UnregisterCallback } from 'history';\nimport { isEqual } from 'lodash';\n\nimport { locationService } from '@grafana/runtime';\n\nimport { SceneObjectStateChangedEvent } from '../core/events';\nimport { SceneObject, SceneObjectUrlValue, SceneObjectUrlValues } from '../core/types';\nimport { writeSceneLog } from '../utils/writeSceneLog';\nimport { Unsubscribable } from 'rxjs';\n\nexport interface UrlSyncManagerLike {\n initSync(root: SceneObject): void;\n cleanUp(root: SceneObject): void;\n}\n\nexport class UrlSyncManager implements UrlSyncManagerLike {\n private urlKeyMapper = new UniqueUrlKeyMapper();\n private _sceneRoot!: SceneObject;\n private _stateSub: Unsubscribable | null = null;\n private _locationSub?: UnregisterCallback | null = null;\n\n /**\n * Updates the current scene state to match URL state.\n */\n public initSync(root: SceneObject) {\n if (!this._locationSub) {\n writeSceneLog('UrlSyncManager', 'New location listen');\n this._locationSub = locationService.getHistory().listen(this._onLocationUpdate);\n }\n\n if (this._stateSub) {\n writeSceneLog('UrlSyncManager', 'Unregister previous scene state subscription', this._sceneRoot.state.key);\n this._stateSub.unsubscribe();\n }\n\n this._sceneRoot = root;\n this._stateSub = root.subscribeToEvent(SceneObjectStateChangedEvent, this._onStateChanged);\n\n this.syncFrom(this._sceneRoot);\n }\n\n public cleanUp(root: SceneObject) {\n // Ignore this if we have a new or different root\n if (this._sceneRoot !== root) {\n return;\n }\n\n writeSceneLog('UrlSyncManager', 'Clean up');\n\n if (this._locationSub) {\n this._locationSub();\n writeSceneLog('UrlSyncManager', 'Unregister history listen');\n this._locationSub = null;\n }\n\n if (this._stateSub) {\n this._stateSub.unsubscribe();\n this._stateSub = null;\n writeSceneLog(\n 'UrlSyncManager',\n 'Root deactived, unsub to state',\n 'same key',\n this._sceneRoot.state.key === root.state.key\n );\n }\n }\n\n public syncFrom(sceneObj: SceneObject) {\n const urlParams = locationService.getSearch();\n // The index is always from the root\n this.urlKeyMapper.rebuldIndex(this._sceneRoot);\n this._syncSceneStateFromUrl(sceneObj, urlParams);\n }\n\n private _onLocationUpdate = (location: Location) => {\n const urlParams = new URLSearchParams(location.search);\n // Rebuild key mapper index before starting sync\n this.urlKeyMapper.rebuldIndex(this._sceneRoot);\n // Sync scene state tree from url\n this._syncSceneStateFromUrl(this._sceneRoot, urlParams);\n };\n\n private _onStateChanged = ({ payload }: SceneObjectStateChangedEvent) => {\n const changedObject = payload.changedObject;\n\n if (changedObject.urlSync) {\n const newUrlState = changedObject.urlSync.getUrlState();\n\n const searchParams = locationService.getSearch();\n const mappedUpdated: SceneObjectUrlValues = {};\n\n this.urlKeyMapper.rebuldIndex(this._sceneRoot);\n\n for (const [key, newUrlValue] of Object.entries(newUrlState)) {\n const uniqueKey = this.urlKeyMapper.getUniqueKey(key, changedObject);\n const currentUrlValue = searchParams.getAll(uniqueKey);\n\n if (!isUrlValueEqual(currentUrlValue, newUrlValue)) {\n mappedUpdated[uniqueKey] = newUrlValue;\n }\n }\n\n if (Object.keys(mappedUpdated).length > 0) {\n locationService.partial(mappedUpdated, true);\n }\n }\n };\n\n private _syncSceneStateFromUrl(sceneObject: SceneObject, urlParams: URLSearchParams) {\n if (sceneObject.urlSync) {\n const urlState: SceneObjectUrlValues = {};\n const currentState = sceneObject.urlSync.getUrlState();\n\n for (const key of sceneObject.urlSync.getKeys()) {\n const uniqueKey = this.urlKeyMapper.getUniqueKey(key, sceneObject);\n const newValue = urlParams.getAll(uniqueKey);\n const currentValue = currentState[key];\n\n if (isUrlValueEqual(newValue, currentValue)) {\n continue;\n }\n\n if (newValue.length > 0) {\n if (Array.isArray(currentValue)) {\n urlState[key] = newValue;\n } else {\n urlState[key] = newValue[0];\n }\n } else {\n // mark this key as having no url state\n urlState[key] = null;\n }\n }\n\n if (Object.keys(urlState).length > 0) {\n sceneObject.urlSync.updateFromUrl(urlState);\n }\n }\n\n sceneObject.forEachChild((child) => this._syncSceneStateFromUrl(child, urlParams));\n }\n}\n\ninterface SceneObjectWithDepth {\n sceneObject: SceneObject;\n depth: number;\n}\nclass UniqueUrlKeyMapper {\n private index = new Map<string, SceneObjectWithDepth[]>();\n\n public getUniqueKey(key: string, obj: SceneObject) {\n const objectsWithKey = this.index.get(key);\n if (!objectsWithKey) {\n throw new Error(\"Cannot find any scene object that uses the key '\" + key + \"'\");\n }\n\n const address = objectsWithKey.findIndex((o) => o.sceneObject === obj);\n if (address > 0) {\n return `${key}-${address + 1}`;\n }\n\n return key;\n }\n\n public rebuldIndex(root: SceneObject) {\n this.index.clear();\n this.buildIndex(root, 0);\n }\n\n private buildIndex(sceneObject: SceneObject, depth: number) {\n if (sceneObject.urlSync) {\n for (const key of sceneObject.urlSync.getKeys()) {\n const hit = this.index.get(key);\n if (hit) {\n hit.push({ sceneObject, depth });\n hit.sort((a, b) => a.depth - b.depth);\n } else {\n this.index.set(key, [{ sceneObject, depth }]);\n }\n }\n }\n\n sceneObject.forEachChild((child) => this.buildIndex(child, depth + 1));\n }\n}\n\nexport function isUrlValueEqual(currentUrlValue: string[], newUrlValue: SceneObjectUrlValue): boolean {\n if (currentUrlValue.length === 0 && newUrlValue == null) {\n return true;\n }\n\n if (!Array.isArray(newUrlValue) && currentUrlValue?.length === 1) {\n return newUrlValue === currentUrlValue[0];\n }\n\n if (newUrlValue?.length === 0 && currentUrlValue === null) {\n return true;\n }\n\n // We have two arrays, lets compare them\n return isEqual(currentUrlValue, newUrlValue);\n}\n\nlet urlSyncManager: UrlSyncManagerLike | undefined;\n\nexport function getUrlSyncManager(): UrlSyncManagerLike {\n if (!urlSyncManager) {\n urlSyncManager = new UrlSyncManager();\n }\n\n return urlSyncManager;\n}\n","import { css } from '@emotion/css';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport React from 'react';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { SceneComponentProps, SceneObjectState, SceneObject } from '../core/types';\nimport { getUrlSyncManager } from '../services/UrlSyncManager';\n\nexport interface EmbeddedSceneState extends SceneObjectState {\n /**\n * The main content of the scene (usually a SceneFlexLayout)\n */\n body: SceneObject;\n /**\n * Top row of variable selectors, filters, time pickers and custom actions.\n */\n controls?: SceneObject[];\n}\n\nexport class EmbeddedScene extends SceneObjectBase<EmbeddedSceneState> {\n public static Component = EmbeddedSceneRenderer;\n\n public constructor(state: EmbeddedSceneState) {\n super(state);\n\n this.addActivationHandler(() => {\n return () => getUrlSyncManager().cleanUp(this);\n });\n }\n\n /**\n * initUrlSync should be called before the scene is rendered to ensure that objects are in sync\n * before they get activated. This saves some unnecessary re-renders and makes sure variables\n * queries are issued as needed. If your using SceneAppPage you will not need to call this as\n * url sync is handled on the SceneAppPage level not this level.\n */\n public initUrlSync() {\n getUrlSyncManager().initSync(this);\n }\n}\n\nfunction EmbeddedSceneRenderer({ model }: SceneComponentProps<EmbeddedScene>) {\n const { body, controls } = model.useState();\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.container}>\n {controls && (\n <div className={styles.controls}>\n {controls.map((control) => (\n <control.Component key={control.state.key} model={control} />\n ))}\n </div>\n )}\n <div className={styles.body}>\n <body.Component model={body} />\n </div>\n </div>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n container: css({\n flexGrow: 1,\n display: 'flex',\n gap: theme.spacing(2),\n minHeight: '100%',\n flexDirection: 'column',\n }),\n body: css({\n flexGrow: 1,\n display: 'flex',\n gap: '8px',\n }),\n controls: css({\n display: 'flex',\n gap: theme.spacing(1),\n alignItems: 'center',\n flexWrap: 'wrap',\n }),\n };\n}\n","import React, { RefCallback } from 'react';\nimport { useMeasure } from 'react-use';\n\nimport { PanelData, PluginContextProvider } from '@grafana/data';\nimport { getAppEvents } from '@grafana/runtime';\nimport { PanelChrome, ErrorBoundaryAlert, PanelContextProvider } from '@grafana/ui';\n\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { isSceneObject, SceneComponentProps } from '../../core/types';\n\nimport { VizPanel } from './VizPanel';\n\nexport function VizPanelRenderer({ model }: SceneComponentProps<VizPanel>) {\n const {\n title,\n description,\n options,\n fieldConfig,\n pluginLoadError,\n $data,\n displayMode,\n hoverHeader,\n menu,\n headerActions,\n ...state\n } = model.useState();\n const [ref, { width, height }] = useMeasure();\n const plugin = model.getPlugin();\n const parentLayout = sceneGraph.getLayout(model);\n\n // If parent has enabled dragging and we have not explicitly disabled it then dragging is enabled\n const isDraggable = parentLayout.isDraggable() && (state.isDraggable ?? true);\n const dragClass = isDraggable && parentLayout.getDragClass ? parentLayout.getDragClass() : '';\n const dragClassCancel = isDraggable && parentLayout.getDragClassCancel ? parentLayout.getDragClassCancel() : '';\n const rawData = sceneGraph.getData(model).useState();\n const dataWithFieldConfig = model.applyFieldConfig(rawData.data);\n\n // Interpolate title\n const titleInterpolated = model.interpolate(title, undefined, 'text');\n\n // Not sure we need to subscribe to this state\n const timeZone = sceneGraph.getTimeRange(model).getTimeZone();\n\n if (pluginLoadError) {\n return <div>Failed to load plugin: {pluginLoadError}</div>;\n }\n\n if (!plugin) {\n return <div>Loading plugin panel...</div>;\n }\n\n if (!plugin.panel) {\n return <div>Panel plugin has no panel component</div>;\n }\n\n const PanelComponent = plugin.panel;\n\n // If we have a query runner on our level inform it of the container width (used to set auto max data points)\n if ($data && $data.setContainerWidth) {\n $data.setContainerWidth(width);\n }\n\n const titleItems: React.ReactNode[] = [];\n\n // If we have local time range show that in panel header\n if (model.state.$timeRange) {\n titleItems.push(<model.state.$timeRange.Component model={model.state.$timeRange} />);\n }\n\n let panelMenu;\n if (menu) {\n panelMenu = <menu.Component model={menu} />;\n }\n\n let actionsElement: React.ReactNode | undefined;\n\n if (headerActions) {\n if (isSceneObject(headerActions)) {\n actionsElement = <headerActions.Component model={headerActions} />;\n } else {\n actionsElement = headerActions;\n }\n }\n\n // Data is always returned. For non-data panels, empty PanelData is returned.\n const data = dataWithFieldConfig!;\n\n return (\n <div ref={ref as RefCallback<HTMLDivElement>} style={{ position: 'absolute', width: '100%', height: '100%' }}>\n {width > 0 && height > 0 && (\n <PanelChrome\n title={titleInterpolated}\n description={description ? () => model.interpolate(description) : ''}\n loadingState={data.state}\n statusMessage={getChromeStatusMessage(data, pluginLoadError)}\n width={width}\n height={height}\n displayMode={displayMode}\n hoverHeader={hoverHeader}\n titleItems={titleItems}\n dragClass={dragClass}\n actions={actionsElement}\n dragClassCancel={dragClassCancel}\n padding={plugin.noPadding ? 'none' : 'md'}\n menu={panelMenu}\n >\n {(innerWidth, innerHeight) => (\n <>\n <ErrorBoundaryAlert dependencies={[plugin, data]}>\n <PluginContextProvider meta={plugin.meta}>\n <PanelContextProvider value={model.getPanelContext()}>\n <PanelComponent\n id={1}\n data={data}\n title={title}\n timeRange={data.timeRange}\n timeZone={timeZone}\n options={options}\n fieldConfig={fieldConfig}\n transparent={false}\n width={innerWidth}\n height={innerHeight}\n renderCounter={0}\n replaceVariables={model.interpolate}\n onOptionsChange={model.onOptionsChange}\n onFieldConfigChange={model.onFieldConfigChange}\n onChangeTimeRange={model.onChangeTimeRange}\n eventBus={getAppEvents()}\n />\n </PanelContextProvider>\n </PluginContextProvider>\n </ErrorBoundaryAlert>\n </>\n )}\n </PanelChrome>\n )}\n </div>\n );\n}\n\nfunction getChromeStatusMessage(data: PanelData, pluginLoadingError: string | undefined) {\n if (pluginLoadingError) {\n return pluginLoadingError;\n }\n\n return data.error ? data.error.message : undefined;\n}\n","import {\n ByNamesMatcherMode,\n ConfigOverrideRule,\n DataFrame,\n DynamicConfigValue,\n FieldConfigSource,\n FieldMatcherID,\n fieldMatchers,\n FieldType,\n getFieldDisplayName,\n isSystemOverrideWithRef,\n SystemConfigOverrideRule,\n} from '@grafana/data';\nimport { SeriesVisibilityChangeMode } from '@grafana/ui';\n\nconst displayOverrideRef = 'hideSeriesFrom';\nconst isHideSeriesOverride = isSystemOverrideWithRef(displayOverrideRef);\n\nexport function seriesVisibilityConfigFactory(\n label: string,\n mode: SeriesVisibilityChangeMode,\n fieldConfig: FieldConfigSource,\n data: DataFrame[]\n): FieldConfigSource {\n const { overrides } = fieldConfig;\n\n const displayName = label;\n const currentIndex = overrides.findIndex(isHideSeriesOverride);\n\n if (currentIndex < 0) {\n if (mode === SeriesVisibilityChangeMode.ToggleSelection) {\n const override = createOverride([displayName, ...getNamesOfHiddenFields(overrides, data)]);\n\n return {\n ...fieldConfig,\n overrides: [...fieldConfig.overrides, override],\n };\n }\n\n const displayNames = getDisplayNames(data, displayName);\n const override = createOverride(displayNames);\n\n return {\n ...fieldConfig,\n overrides: [...fieldConfig.overrides, override],\n };\n }\n\n const overridesCopy = Array.from(overrides);\n const [current] = overridesCopy.splice(currentIndex, 1) as SystemConfigOverrideRule[];\n\n if (mode === SeriesVisibilityChangeMode.ToggleSelection) {\n let existing = getExistingDisplayNames(current);\n const nameOfHiddenFields = getNamesOfHiddenFields(overridesCopy, data);\n\n if (nameOfHiddenFields.length > 0) {\n existing = existing.filter((el) => nameOfHiddenFields.indexOf(el) < 0);\n }\n\n if (existing[0] === displayName && existing.length === 1) {\n return {\n ...fieldConfig,\n overrides: overridesCopy,\n };\n }\n\n const override = createOverride([displayName, ...nameOfHiddenFields]);\n\n return {\n ...fieldConfig,\n overrides: [...overridesCopy, override],\n };\n }\n\n const override = createExtendedOverride(current, displayName);\n\n if (allFieldsAreExcluded(override, data)) {\n return {\n ...fieldConfig,\n overrides: overridesCopy,\n };\n }\n\n return {\n ...fieldConfig,\n overrides: [...overridesCopy, override],\n };\n}\n\nfunction createOverride(\n names: string[],\n mode = ByNamesMatcherMode.exclude,\n property?: DynamicConfigValue\n): SystemConfigOverrideRule {\n property = property ?? {\n id: 'custom.hideFrom',\n value: {\n viz: true,\n legend: false,\n tooltip: false,\n },\n };\n\n return {\n __systemRef: displayOverrideRef,\n matcher: {\n id: FieldMatcherID.byNames,\n options: {\n mode: mode,\n names: names,\n prefix: mode === ByNamesMatcherMode.exclude ? 'All except:' : undefined,\n readOnly: true,\n },\n },\n properties: [\n {\n ...property,\n value: {\n viz: true,\n legend: false,\n tooltip: false,\n },\n },\n ],\n };\n}\n\nconst createExtendedOverride = (\n current: SystemConfigOverrideRule,\n displayName: string,\n mode = ByNamesMatcherMode.exclude\n): SystemConfigOverrideRule => {\n const property = current.properties.find((p) => p.id === 'custom.hideFrom');\n const existing = getExistingDisplayNames(current);\n const index = existing.findIndex((name) => name === displayName);\n\n if (index < 0) {\n existing.push(displayName);\n } else {\n existing.splice(index, 1);\n }\n\n return createOverride(existing, mode, property);\n};\n\nconst getExistingDisplayNames = (rule: SystemConfigOverrideRule): string[] => {\n const names = rule.matcher.options?.names;\n if (!Array.isArray(names)) {\n return [];\n }\n return [...names];\n};\n\nconst allFieldsAreExcluded = (override: SystemConfigOverrideRule, data: DataFrame[]): boolean => {\n return getExistingDisplayNames(override).length === getDisplayNames(data).length;\n};\n\nconst getDisplayNames = (data: DataFrame[], excludeName?: string): string[] => {\n const unique = new Set<string>();\n\n for (const frame of data) {\n for (const field of frame.fields) {\n if (field.type !== FieldType.number) {\n continue;\n }\n\n const name = getFieldDisplayName(field, frame, data);\n\n if (name === excludeName) {\n continue;\n }\n\n unique.add(name);\n }\n }\n\n return Array.from(unique);\n};\n\nconst getNamesOfHiddenFields = (overrides: ConfigOverrideRule[], data: DataFrame[]): string[] => {\n let names: string[] = [];\n\n for (const override of overrides) {\n const property = override.properties.find((p) => p.id === 'custom.hideFrom');\n\n if (property !== undefined && property.value?.legend === true) {\n const info = fieldMatchers.get(override.matcher.id);\n const matcher = info.get(override.matcher.options);\n\n for (const frame of data) {\n for (const field of frame.fields) {\n if (field.type !== FieldType.number) {\n continue;\n }\n\n const name = getFieldDisplayName(field, frame, data);\n\n if (matcher(field, frame, data)) {\n names.push(name);\n }\n }\n }\n }\n }\n\n return names;\n};\n","import {\n ConfigOverrideRule,\n DynamicConfigValue,\n FieldColorModeId,\n FieldConfigSource,\n FieldMatcherID,\n} from '@grafana/data';\n\nexport const changeSeriesColorConfigFactory = (\n label: string,\n color: string,\n fieldConfig: FieldConfigSource\n): FieldConfigSource => {\n const { overrides } = fieldConfig;\n const currentIndex = fieldConfig.overrides.findIndex((override) => {\n return override.matcher.id === FieldMatcherID.byName && override.matcher.options === label;\n });\n\n if (currentIndex < 0) {\n return {\n ...fieldConfig,\n overrides: [...fieldConfig.overrides, createOverride(label, color)],\n };\n }\n\n const overridesCopy = Array.from(overrides);\n const existing = overridesCopy[currentIndex];\n const propertyIndex = existing.properties.findIndex((p) => p.id === 'color');\n\n if (propertyIndex < 0) {\n overridesCopy[currentIndex] = {\n ...existing,\n properties: [...existing.properties, createProperty(color)],\n };\n\n return {\n ...fieldConfig,\n overrides: overridesCopy,\n };\n }\n\n const propertiesCopy = Array.from(existing.properties);\n propertiesCopy[propertyIndex] = createProperty(color);\n\n overridesCopy[currentIndex] = {\n ...existing,\n properties: propertiesCopy,\n };\n\n return {\n ...fieldConfig,\n overrides: overridesCopy,\n };\n};\n\nconst createOverride = (label: string, color: string): ConfigOverrideRule => {\n return {\n matcher: {\n id: FieldMatcherID.byName,\n options: label,\n },\n properties: [createProperty(color)],\n };\n};\n\nconst createProperty = (color: string): DynamicConfigValue => {\n return {\n id: 'color',\n value: {\n mode: FieldColorModeId.Fixed,\n fixedColor: color,\n },\n };\n};\n","import { PanelPlugin, PluginMetaInfo } from '@grafana/data';\nimport { getPluginImportUtils } from '@grafana/runtime';\n\nexport const runtimePanelPlugins = new Map<string, PanelPlugin>();\n\nexport interface RuntimePanelPluginOptions {\n /**\n * Please specify a pluginId that is unlikely to collide with other plugins.\n */\n pluginId: string;\n plugin: PanelPlugin;\n}\n\n/**\n * Provides a way to register runtime panel plugins.\n * Please use a pluginId that is unlikely to collide with other plugins.\n */\nexport function registerRuntimePanelPlugin({ pluginId, plugin }: RuntimePanelPluginOptions) {\n if (runtimePanelPlugins.has(pluginId)) {\n throw new Error(`A runtime panel plugin with id ${pluginId} has already been registered`);\n }\n\n plugin.meta = {\n ...plugin.meta,\n id: pluginId,\n name: pluginId,\n module: 'runtime plugin',\n baseUrl: 'runtime plugin',\n info: {\n author: {\n name: 'Runtime plugin ' + pluginId,\n },\n description: '',\n links: [],\n logos: {\n large: '',\n small: '',\n },\n screenshots: [],\n updated: '',\n version: '',\n } as PluginMetaInfo,\n };\n\n runtimePanelPlugins.set(pluginId, plugin);\n}\n\nexport function loadPanelPluginSync(pluginId: string) {\n const { getPanelPluginFromCache } = getPluginImportUtils();\n\n return getPanelPluginFromCache(pluginId) ?? runtimePanelPlugins.get(pluginId);\n}\n","import {\n AbsoluteTimeRange,\n FieldConfigSource,\n PanelModel,\n PanelPlugin,\n toUtc,\n getPanelOptionsWithDefaults,\n ScopedVars,\n InterpolateFunction,\n CoreApp,\n DashboardCursorSync,\n PanelData,\n compareArrayValues,\n compareDataFrameStructures,\n applyFieldOverrides,\n} from '@grafana/data';\nimport { PanelContext, SeriesVisibilityChangeMode, VizLegendOptions } from '@grafana/ui';\nimport { config, getAppEvents, getPluginImportUtils } from '@grafana/runtime';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { DeepPartial, SceneObject, SceneObjectState } from '../../core/types';\n\nimport { VizPanelRenderer } from './VizPanelRenderer';\nimport { VizPanelMenu } from './VizPanelMenu';\nimport { VariableDependencyConfig } from '../../variables/VariableDependencyConfig';\nimport { VariableCustomFormatterFn } from '../../variables/types';\nimport { seriesVisibilityConfigFactory } from './seriesVisibilityConfigFactory';\nimport { emptyPanelData } from '../../core/SceneDataNode';\nimport { changeSeriesColorConfigFactory } from './colorSeriesConfigFactory';\nimport { loadPanelPluginSync } from './registerRuntimePanelPlugin';\n\nexport interface VizPanelState<TOptions = {}, TFieldConfig = {}> extends SceneObjectState {\n title: string;\n description?: string;\n /**\n * This is usually a plugin id that references a core plugin or an external plugin. But this can also reference a\n * runtime registered PanelPlugin registered via function registerScenePanelPlugin.\n */\n pluginId: string;\n options: DeepPartial<TOptions>;\n fieldConfig: FieldConfigSource<DeepPartial<TFieldConfig>>;\n pluginVersion?: string;\n displayMode?: 'default' | 'transparent';\n hoverHeader?: boolean;\n menu?: VizPanelMenu;\n isDraggable?: boolean;\n isResizable?: boolean;\n headerActions?: React.ReactNode | SceneObject;\n // internal state\n pluginLoadError?: string;\n pluginInstanceState?: any;\n}\n\nexport class VizPanel<TOptions = {}, TFieldConfig = {}> extends SceneObjectBase<VizPanelState<TOptions, TFieldConfig>> {\n public static Component = VizPanelRenderer;\n\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['title', 'options', 'fieldConfig'],\n });\n\n // Not part of state as this is not serializable\n private _plugin?: PanelPlugin;\n private _panelContext: PanelContext;\n private _prevData?: PanelData;\n private _dataWithFieldConfig?: PanelData;\n private _structureRev: number = 0;\n\n public constructor(state: Partial<VizPanelState<TOptions, TFieldConfig>>) {\n super({\n options: {},\n fieldConfig: { defaults: {}, overrides: [] },\n title: 'Title',\n pluginId: 'timeseries',\n ...state,\n });\n\n this._panelContext = {\n eventBus: getAppEvents(),\n app: CoreApp.Unknown, // TODO,\n sync: () => DashboardCursorSync.Off, // TODO\n onSeriesColorChange: this._onSeriesColorChange,\n onToggleSeriesVisibility: this._onSeriesVisibilityChange,\n onToggleLegendSort: this._onToggleLegendSort,\n onInstanceStateChange: this._onInstanceStateChange,\n // onAnnotationCreate: this.onAnnotationCreate,\n // onAnnotationUpdate: this.onAnnotationUpdate,\n // onAnnotationDelete: this.onAnnotationDelete,\n // canAddAnnotations: props.dashboard.canAddAnnotations.bind(props.dashboard),\n // canEditAnnotations: props.dashboard.canEditAnnotations.bind(props.dashboard),\n // canDeleteAnnotations: props.dashboard.canDeleteAnnotations.bind(props.dashboard),\n };\n\n this.addActivationHandler(() => {\n this._onActivate();\n });\n }\n\n private _onActivate() {\n if (!this._plugin) {\n this._loadPlugin(this.state.pluginId);\n }\n }\n\n private _loadPlugin(pluginId: string) {\n const plugin = loadPanelPluginSync(pluginId);\n\n if (plugin) {\n this._pluginLoaded(plugin);\n } else {\n const { importPanelPlugin } = getPluginImportUtils();\n\n importPanelPlugin(pluginId)\n .then((result) => this._pluginLoaded(result))\n .catch((err: Error) => {\n this.setState({ pluginLoadError: err.message });\n });\n }\n }\n\n private _pluginLoaded(plugin: PanelPlugin) {\n const { options, fieldConfig, title, pluginVersion } = this.state;\n\n const panel: PanelModel = {\n title,\n options,\n fieldConfig,\n id: 1,\n type: plugin.meta.id,\n pluginVersion: pluginVersion,\n };\n\n const currentVersion = this._getPluginVersion(plugin);\n\n if (plugin.onPanelMigration) {\n if (currentVersion !== this.state.pluginVersion) {\n // These migration handlers also mutate panel.fieldConfig to migrate fieldConfig\n panel.options = plugin.onPanelMigration(panel);\n }\n }\n\n const withDefaults = getPanelOptionsWithDefaults({\n plugin,\n currentOptions: panel.options,\n currentFieldConfig: panel.fieldConfig,\n isAfterPluginChange: false,\n });\n\n this._plugin = plugin;\n\n this.setState({\n options: withDefaults.options,\n fieldConfig: withDefaults.fieldConfig,\n pluginVersion: currentVersion,\n });\n }\n\n private _getPluginVersion(plugin: PanelPlugin): string {\n return plugin && plugin.meta.info.version ? plugin.meta.info.version : config.buildInfo.version;\n }\n\n public getPlugin(): PanelPlugin | undefined {\n return this._plugin;\n }\n\n public getPanelContext(): PanelContext {\n return this._panelContext;\n }\n\n public onChangeTimeRange = (timeRange: AbsoluteTimeRange) => {\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n sceneTimeRange.onTimeRangeChange({\n raw: {\n from: toUtc(timeRange.from),\n to: toUtc(timeRange.to),\n },\n from: toUtc(timeRange.from),\n to: toUtc(timeRange.to),\n });\n };\n\n public onOptionsChange = (options: TOptions) => {\n this.setState({ options });\n };\n\n public onFieldConfigChange = (fieldConfig: FieldConfigSource<TFieldConfig>) => {\n this.setState({ fieldConfig });\n };\n\n public interpolate = ((value: string, scoped?: ScopedVars, format?: string | VariableCustomFormatterFn) => {\n return sceneGraph.interpolate(this, value, scoped, format);\n }) as InterpolateFunction;\n\n /**\n * Called from the react render path to apply the field config to the data provided by the data provider\n */\n public applyFieldConfig(rawData?: PanelData): PanelData {\n const plugin = this._plugin!;\n\n if (!plugin || plugin.meta.skipDataQuery || !rawData) {\n // TODO setup time range subscription instead\n return emptyPanelData;\n }\n\n const fieldConfigRegistry = plugin.fieldConfigRegistry;\n const prevFrames = this._prevData?.series;\n const newFrames = rawData?.series;\n\n if (\n rawData.structureRev == null &&\n newFrames &&\n prevFrames &&\n !compareArrayValues(newFrames, prevFrames, compareDataFrameStructures)\n ) {\n this._structureRev++;\n }\n\n this._dataWithFieldConfig = {\n ...rawData,\n structureRev: this._structureRev,\n series: applyFieldOverrides({\n data: newFrames,\n fieldConfig: this.state.fieldConfig,\n fieldConfigRegistry,\n replaceVariables: this.interpolate,\n theme: config.theme2,\n timeZone: rawData.request?.timezone,\n }),\n };\n\n return this._dataWithFieldConfig;\n }\n\n /**\n * Panel context functions\n */\n private _onSeriesColorChange = (label: string, color: string) => {\n this.onFieldConfigChange(changeSeriesColorConfigFactory(label, color, this.state.fieldConfig));\n };\n\n private _onSeriesVisibilityChange = (label: string, mode: SeriesVisibilityChangeMode) => {\n if (!this._dataWithFieldConfig) {\n return;\n }\n\n this.onFieldConfigChange(\n seriesVisibilityConfigFactory(label, mode, this.state.fieldConfig, this._dataWithFieldConfig.series)\n );\n };\n\n private _onInstanceStateChange = (state: any) => {\n this.setState({ pluginInstanceState: state });\n };\n\n private _onToggleLegendSort = (sortKey: string) => {\n const legendOptions: VizLegendOptions = (this.state.options as any).legend;\n\n // We don't want to do anything when legend options are not available\n if (!legendOptions) {\n return;\n }\n\n let sortDesc = legendOptions.sortDesc;\n let sortBy = legendOptions.sortBy;\n if (sortKey !== sortBy) {\n sortDesc = undefined;\n }\n\n // if already sort ascending, disable sorting\n if (sortDesc === false) {\n sortBy = undefined;\n sortDesc = undefined;\n } else {\n sortDesc = !sortDesc;\n sortBy = sortKey;\n }\n\n this.onOptionsChange({\n ...this.state.options,\n legend: { ...legendOptions, sortBy, sortDesc },\n } as TOptions);\n };\n}\n","import React from 'react';\nimport { PanelMenuItem } from '@grafana/data';\nimport { Menu } from '@grafana/ui';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneComponentProps, SceneObjectState } from '../../core/types';\n\ninterface VizPanelMenuState extends SceneObjectState {\n items?: PanelMenuItem[];\n}\n\nexport class VizPanelMenu extends SceneObjectBase<VizPanelMenuState> {\n static Component = VizPanelMenuRenderer;\n\n // Allows adding menu items dynamically\n public addItem(item: PanelMenuItem) {\n this.setState({\n items: this.state.items ? [...this.state.items, item] : [item],\n });\n }\n\n // Allows replacing all menu items\n public setItems(items: PanelMenuItem[]) {\n this.setState({\n items,\n });\n }\n}\n\nfunction VizPanelMenuRenderer({ model }: SceneComponentProps<VizPanelMenu>) {\n const { items } = model.useState();\n\n const renderItems = (items: PanelMenuItem[]) => {\n return items.map((item) =>\n item.type === 'divider' ? (\n <Menu.Divider key={item.text} />\n ) : (\n <Menu.Item\n key={item.text}\n label={item.text}\n icon={item.iconClassName}\n childItems={item.subMenu ? renderItems(item.subMenu) : undefined}\n url={item.href}\n onClick={item.onClick}\n shortcut={item.shortcut}\n />\n )\n );\n };\n if (!items) {\n return null;\n }\n\n return <Menu>{renderItems(items)}</Menu>;\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Stack } from '@grafana/experimental';\nimport { Button, ToolbarButton, useStyles2 } from '@grafana/ui';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { SceneObject, SceneComponentProps, SceneLayout, SceneObjectState } from '../core/types';\n\ninterface NestedSceneState extends SceneObjectState {\n title: string;\n isCollapsed?: boolean;\n canCollapse?: boolean;\n canRemove?: boolean;\n body: SceneLayout;\n actions?: SceneObject[];\n}\n\n/**\n * @internal\n * POC status, don't use this yet\n */\nexport class NestedScene extends SceneObjectBase<NestedSceneState> {\n public static Component = NestedSceneRenderer;\n\n public onToggle = () => {\n this.setState({\n isCollapsed: !this.state.isCollapsed,\n });\n };\n\n /** Removes itself from its parent's children array */\n public onRemove = () => {\n const parent = this.parent!;\n\n if (isSceneLayoutItem(parent)) {\n parent.setState({\n body: undefined,\n });\n }\n };\n}\n\nexport function NestedSceneRenderer({ model }: SceneComponentProps<NestedScene>) {\n const { title, isCollapsed, canCollapse, canRemove, body, actions } = model.useState();\n const styles = useStyles2(getStyles);\n\n const toolbarActions = (actions ?? []).map((action) => <action.Component key={action.state.key} model={action} />);\n\n if (canRemove) {\n toolbarActions.push(\n <ToolbarButton\n icon=\"times\"\n variant={'default'}\n onClick={model.onRemove}\n key=\"remove-button\"\n aria-label=\"Remove scene\"\n />\n );\n }\n\n return (\n <div className={styles.row}>\n <div className={styles.rowHeader}>\n <Stack gap={0}>\n <div className={styles.title} role=\"heading\" aria-level={1}>\n {title}\n </div>\n {canCollapse && (\n <div className={styles.toggle}>\n <Button\n size=\"sm\"\n icon={isCollapsed ? 'angle-down' : 'angle-up'}\n fill=\"text\"\n variant=\"secondary\"\n aria-label={isCollapsed ? 'Expand scene' : 'Collapse scene'}\n onClick={model.onToggle}\n />\n </div>\n )}\n </Stack>\n <div className={styles.actions}>{toolbarActions}</div>\n </div>\n {!isCollapsed && <body.Component model={body} />}\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n row: css({\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n gap: theme.spacing(1),\n cursor: 'pointer',\n }),\n toggle: css({}),\n title: css({\n fontSize: theme.typography.h5.fontSize,\n }),\n rowHeader: css({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(2),\n }),\n actions: css({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n justifyContent: 'flex-end',\n flexGrow: 1,\n }),\n});\n\nfunction isSceneLayoutItem(x: SceneObject): x is SceneObject<SceneObjectState & { body: SceneObject | undefined }> {\n return 'body' in x.state;\n}\n","import React from 'react';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneComponentProps, SceneObjectState } from '../core/types';\nimport { VariableDependencyConfig } from '../variables/VariableDependencyConfig';\nimport { useTheme2 } from '@grafana/ui';\nimport { css } from '@emotion/css';\n\nexport interface SceneCanvasTextState extends SceneObjectState {\n text: string;\n fontSize?: number;\n align?: 'left' | 'center' | 'right';\n spacing?: number;\n}\n\n/**\n * Not a really useful component, just an example of how to create one\n * @internal\n */\nexport class SceneCanvasText extends SceneObjectBase<SceneCanvasTextState> {\n protected _variableDependency = new VariableDependencyConfig(this, { statePaths: ['text'] });\n\n public static Component = ({ model }: SceneComponentProps<SceneCanvasText>) => {\n const { text, fontSize = 20, align = 'left', key, spacing } = model.useState();\n const theme = useTheme2();\n\n const style = css({\n fontSize: fontSize,\n display: 'flex',\n flexGrow: 1,\n alignItems: 'center',\n padding: spacing ? theme.spacing(spacing, 0) : undefined,\n justifyContent: align,\n });\n\n return (\n <div className={style} data-testid={key}>\n {sceneGraph.interpolate(model, text)}\n </div>\n );\n };\n}\n","import React from 'react';\n\nimport { IconName, Input, ToolbarButton } from '@grafana/ui';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { SceneComponentProps, SceneObjectState } from '../core/types';\n\nexport interface ToolbarButtonState extends SceneObjectState {\n icon: IconName;\n onClick: () => void;\n}\n\nexport class SceneToolbarButton extends SceneObjectBase<ToolbarButtonState> {\n public static Component = ({ model }: SceneComponentProps<SceneToolbarButton>) => {\n const state = model.useState();\n\n return <ToolbarButton onClick={state.onClick} icon={state.icon} />;\n };\n}\n\nexport interface SceneToolbarInputState extends SceneObjectState {\n value?: string;\n onChange: (value: number) => void;\n}\n\nexport class SceneToolbarInput extends SceneObjectBase<SceneToolbarInputState> {\n public static Component = ({ model }: SceneComponentProps<SceneToolbarInput>) => {\n const state = model.useState();\n\n return (\n <Input\n defaultValue={state.value}\n width={8}\n onBlur={(evt) => {\n model.state.onChange(parseInt(evt.currentTarget.value, 10));\n }}\n />\n );\n };\n}\n","import React from 'react';\n\nimport { TimeRangePicker } from '@grafana/ui';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneComponentProps, SceneObjectState } from '../core/types';\n\nexport interface SceneTimePickerState extends SceneObjectState {\n hidePicker?: boolean;\n isOnCanvas?: boolean;\n}\n\nexport class SceneTimePicker extends SceneObjectBase<SceneTimePickerState> {\n public static Component = SceneTimePickerRenderer;\n}\n\nfunction SceneTimePickerRenderer({ model }: SceneComponentProps<SceneTimePicker>) {\n const { hidePicker, isOnCanvas } = model.useState();\n const timeRange = sceneGraph.getTimeRange(model);\n const timeZone = timeRange.getTimeZone();\n const timeRangeState = timeRange.useState();\n\n if (hidePicker) {\n return null;\n }\n\n return (\n <TimeRangePicker\n isOnCanvas={isOnCanvas}\n value={timeRangeState.value}\n onChange={timeRange.onTimeRangeChange}\n timeZone={timeZone}\n fiscalYearStartMonth={0}\n onMoveBackward={() => {}}\n onMoveForward={() => {}}\n onZoom={() => {}}\n onChangeTimeZone={timeRange.onTimeZoneChange}\n onChangeFiscalYearStartMonth={() => {}}\n />\n );\n}\n","import React from 'react';\n\nimport { rangeUtil } from '@grafana/data';\nimport { RefreshPicker } from '@grafana/ui';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneComponentProps, SceneObjectState, SceneObjectUrlValues } from '../core/types';\nimport { SceneObjectUrlSyncConfig } from '../services/SceneObjectUrlSyncConfig';\n\nexport const DEFAULT_INTERVALS = ['5s', '10s', '30s', '1m', '5m', '15m', '30m', '1h', '2h', '1d'];\n\nexport interface SceneRefreshPickerState extends SceneObjectState {\n // Refresh interval, e.g. 5s, 1m, 2h\n refresh: string;\n // List of allowed refresh intervals, e.g. ['5s', '1m']\n intervals?: string[];\n isOnCanvas?: boolean;\n}\n\nexport class SceneRefreshPicker extends SceneObjectBase<SceneRefreshPickerState> {\n public static Component = SceneRefreshPickerRenderer;\n protected _urlSync = new SceneObjectUrlSyncConfig(this, { keys: ['refresh'] });\n\n private _intervalTimer: ReturnType<typeof setInterval> | undefined;\n\n public constructor(state: Partial<SceneRefreshPickerState>) {\n super({\n refresh: '',\n ...state,\n intervals: state.intervals ?? DEFAULT_INTERVALS,\n });\n\n this.addActivationHandler(() => {\n this.setupIntervalTimer();\n\n return () => {\n if (this._intervalTimer) {\n clearInterval(this._intervalTimer);\n }\n };\n });\n }\n\n public onRefresh = () => {\n const timeRange = sceneGraph.getTimeRange(this);\n\n if (this._intervalTimer) {\n clearInterval(this._intervalTimer);\n }\n\n timeRange.onRefresh();\n this.setupIntervalTimer();\n };\n\n public onIntervalChanged = (interval: string) => {\n this.setState({ refresh: interval });\n this.setupIntervalTimer();\n };\n\n public getUrlState() {\n return {\n refresh: this.state.refresh,\n };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues) {\n const refresh = values.refresh;\n\n if (refresh && typeof refresh === 'string') {\n this.setState({\n refresh,\n });\n }\n }\n\n private setupIntervalTimer = () => {\n const timeRange = sceneGraph.getTimeRange(this);\n const { refresh, intervals } = this.state;\n\n if (this._intervalTimer || refresh === '') {\n clearInterval(this._intervalTimer);\n }\n\n if (refresh === '') {\n return;\n }\n\n // When the provided interval is not allowed\n if (intervals && !intervals.includes(refresh)) {\n return;\n }\n\n const intervalMs = rangeUtil.intervalToMs(refresh);\n\n this._intervalTimer = setInterval(() => {\n timeRange.onRefresh();\n }, intervalMs);\n };\n}\n\nexport function SceneRefreshPickerRenderer({ model }: SceneComponentProps<SceneRefreshPicker>) {\n const { refresh, intervals, isOnCanvas } = model.useState();\n\n return (\n <RefreshPicker\n value={refresh}\n intervals={intervals}\n onRefresh={model.onRefresh}\n onIntervalChanged={model.onIntervalChanged}\n isOnCanvas={isOnCanvas}\n />\n );\n}\n","import React from 'react';\n\nimport { LoadingState, PanelData, DataFrame } from '@grafana/data';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneComponentProps, SceneObjectState } from '../core/types';\nimport { SceneFlexItem, SceneFlexLayout } from './layout/SceneFlexLayout';\n\ninterface SceneByFrameRepeaterState extends SceneObjectState {\n body: SceneFlexLayout;\n getLayoutChild(data: PanelData, frame: DataFrame, frameIndex: number): SceneFlexItem;\n}\n\nexport class SceneByFrameRepeater extends SceneObjectBase<SceneByFrameRepeaterState> {\n public constructor(state: SceneByFrameRepeaterState) {\n super(state);\n\n this.addActivationHandler(() => {\n this._subs.add(\n sceneGraph.getData(this).subscribeToState((data) => {\n if (data.data?.state === LoadingState.Done) {\n this.performRepeat(data.data);\n }\n })\n );\n });\n }\n\n private performRepeat(data: PanelData) {\n const newChildren: SceneFlexItem[] = [];\n\n for (let seriesIndex = 0; seriesIndex < data.series.length; seriesIndex++) {\n const layoutChild = this.state.getLayoutChild(data, data.series[seriesIndex], seriesIndex);\n newChildren.push(layoutChild);\n }\n\n this.state.body.setState({ children: newChildren });\n }\n\n public static Component = ({ model }: SceneComponentProps<SceneByFrameRepeater>) => {\n const { body } = model.useState();\n return <body.Component model={body} />;\n };\n}\n","import React from 'react';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { SceneComponentProps } from '../core/types';\n\nexport class SceneControlsSpacer extends SceneObjectBase<{}> {\n public constructor() {\n super({});\n }\n\n public static Component = (_props: SceneComponentProps<SceneControlsSpacer>) => {\n return <div style={{ flexGrow: 1 }} />;\n };\n}\n","import { css, CSSObject } from '@emotion/css';\nimport { config } from '@grafana/runtime';\nimport React, { ComponentType, CSSProperties, useMemo } from 'react';\n\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneComponentProps, SceneLayout, SceneObjectState, SceneObject } from '../../core/types';\n\nexport interface SceneFlexItemStateLike extends SceneFlexItemPlacement, SceneObjectState {}\n\nexport interface SceneFlexItemLike extends SceneObject<SceneFlexItemStateLike> {}\n\ninterface SceneFlexLayoutState extends SceneObjectState, SceneFlexItemPlacement {\n children: SceneFlexItemLike[];\n}\n\nexport class SceneFlexLayout extends SceneObjectBase<SceneFlexLayoutState> implements SceneLayout {\n public static Component = SceneFlexLayoutRenderer;\n\n public toggleDirection() {\n this.setState({\n direction: this.state.direction === 'row' ? 'column' : 'row',\n });\n }\n\n public isDraggable(): boolean {\n return false;\n }\n}\n\nfunction SceneFlexLayoutRenderer({ model, parentState }: SceneFlexItemRenderProps<SceneFlexLayout>) {\n const { children, isHidden } = model.useState();\n const style = useLayoutStyle(model.state, parentState);\n\n if (isHidden) {\n return null;\n }\n\n return (\n <div className={style}>\n {children.map((item) => {\n const Component = item.Component as ComponentType<SceneFlexItemRenderProps<SceneObject>>;\n return <Component key={item.state.key} model={item} parentState={model.state} />;\n })}\n </div>\n );\n}\n\nexport interface SceneFlexItemPlacement {\n wrap?: CSSProperties['flexWrap'];\n direction?: CSSProperties['flexDirection'];\n width?: CSSProperties['width'];\n height?: CSSProperties['height'];\n minWidth?: CSSProperties['minWidth'];\n minHeight?: CSSProperties['minHeight'];\n maxWidth?: CSSProperties['maxWidth'];\n maxHeight?: CSSProperties['maxHeight'];\n xSizing?: 'fill' | 'content';\n ySizing?: 'fill' | 'content';\n /**\n * True when the item should rendered but not visible.\n * Useful for conditional display of layout items\n */\n isHidden?: boolean;\n\n /**\n * Set direction for smaller screens. This defaults to column.\n * This equals media query theme.breakpoints.down('md')\n */\n md?: SceneFlexItemPlacement;\n}\n\nexport interface SceneFlexItemState extends SceneFlexItemPlacement, SceneObjectState {\n body: SceneObject | undefined;\n}\n\ninterface SceneFlexItemRenderProps<T> extends SceneComponentProps<T> {\n parentState?: SceneFlexItemPlacement;\n}\n\nexport class SceneFlexItem extends SceneObjectBase<SceneFlexItemState> {\n public static Component = SceneFlexItemRenderer;\n}\n\nfunction SceneFlexItemRenderer({ model, parentState }: SceneFlexItemRenderProps<SceneFlexItem>) {\n if (!parentState) {\n throw new Error('SceneFlexItem must be a child of SceneFlexLayout');\n }\n\n const { body, isHidden } = model.useState();\n const style = useLayoutItemStyle(model.state, parentState);\n\n if (!body || isHidden) {\n return null;\n }\n\n return (\n <div className={style}>\n <body.Component model={body} />\n </div>\n );\n}\nfunction applyItemStyles(style: CSSObject, state: SceneFlexItemPlacement, parentState: SceneFlexItemPlacement) {\n const parentDirection = parentState.direction ?? 'row';\n const { xSizing = 'fill', ySizing = 'fill' } = state;\n\n style.display = 'flex';\n style.position = 'relative';\n style.flexDirection = parentDirection;\n\n if (parentDirection === 'column') {\n if (state.height) {\n style.height = state.height;\n } else {\n style.flexGrow = ySizing === 'fill' ? 1 : 0;\n }\n\n if (state.width) {\n style.width = state.width;\n } else {\n style.alignSelf = xSizing === 'fill' ? 'stretch' : 'flex-start';\n }\n } else {\n if (state.height) {\n style.height = state.height;\n } else {\n style.alignSelf = ySizing === 'fill' ? 'stretch' : 'flex-start';\n }\n\n if (state.width) {\n style.width = state.width;\n } else {\n style.flexGrow = xSizing === 'fill' ? 1 : 0;\n }\n }\n\n style.minWidth = state.minWidth;\n style.maxWidth = state.maxWidth;\n style.maxHeight = state.maxHeight;\n\n // For responsive layouts to work we default use the minHeight or height of the parent\n style.minHeight = state.minHeight ?? parentState.minHeight;\n style.height = state.height ?? parentState.height;\n\n return style;\n}\n\nfunction useLayoutItemStyle(state: SceneFlexItemState, parentState: SceneFlexItemPlacement) {\n return useMemo(() => {\n const theme = config.theme2;\n const style = applyItemStyles({}, state, parentState);\n\n // Unset maxWidth for small screens by default\n style[theme.breakpoints.down('md')] = {\n maxWidth: state.md?.maxWidth ?? 'unset',\n maxHeight: state.md?.maxHeight ?? 'unset',\n height: state.md?.height ?? parentState.md?.height,\n width: state.md?.width ?? parentState.md?.width,\n };\n\n return css(style);\n }, [state, parentState]);\n}\n\nfunction useLayoutStyle(state: SceneFlexLayoutState, parentState?: SceneFlexItemPlacement) {\n return useMemo(() => {\n const { direction = 'row', wrap } = state;\n // only need breakpoints so accessing theme from config instead of context is ok\n const theme = config.theme2;\n\n const style: CSSObject = {};\n\n if (parentState) {\n applyItemStyles(style, state, parentState);\n } else {\n style.display = 'flex';\n style.flexGrow = 1;\n }\n\n style.flexDirection = direction;\n style.gap = '8px';\n style.flexWrap = wrap || 'nowrap';\n style.alignContent = 'baseline';\n style.minHeight = style.minHeight || 0;\n\n style[theme.breakpoints.down('md')] = {\n flexDirection: state.md?.direction ?? 'column',\n maxWidth: state.md?.maxWidth ?? 'unset',\n maxHeight: state.md?.maxHeight ?? 'unset',\n height: state.md?.height ?? 'unset',\n width: state.md?.width ?? 'unset',\n };\n\n return css(style);\n }, [parentState, state]);\n}\n","export const DEFAULT_PANEL_SPAN = 4;\nexport const GRID_CELL_HEIGHT = 30;\nexport const GRID_CELL_VMARGIN = 8;\nexport const GRID_COLUMN_COUNT = 24;\n","import React, { useRef, useState } from 'react';\nimport { useEffectOnce } from 'react-use';\n\nimport { uniqueId } from 'lodash';\n\nexport function useUniqueId(): string {\n const idRefLazy = useRef<string | undefined>(undefined);\n idRefLazy.current ??= uniqueId();\n return idRefLazy.current;\n}\n\nexport interface Props extends Omit<React.HTMLProps<HTMLDivElement>, 'onChange'> {\n children: React.ReactNode | (({ isInView }: { isInView: boolean }) => React.ReactNode);\n width?: number;\n height?: number;\n onLoad?: () => void;\n onChange?: (isInView: boolean) => void;\n}\n\nexport function LazyLoader({ children, width, height, onLoad, onChange, style, ...rest }: Props) {\n const id = useUniqueId();\n const [loaded, setLoaded] = useState(false);\n const [isInView, setIsInView] = useState(false);\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n useEffectOnce(() => {\n LazyLoader.addCallback(id, (entry) => {\n if (!loaded && entry.isIntersecting) {\n setLoaded(true);\n onLoad?.();\n }\n\n setIsInView(entry.isIntersecting);\n onChange?.(entry.isIntersecting);\n });\n\n const wrapperEl = wrapperRef.current;\n\n if (wrapperEl) {\n LazyLoader.observer.observe(wrapperEl);\n }\n\n return () => {\n delete LazyLoader.callbacks[id];\n wrapperEl && LazyLoader.observer.unobserve(wrapperEl);\n if (Object.keys(LazyLoader.callbacks).length === 0) {\n LazyLoader.observer.disconnect();\n }\n };\n });\n\n return (\n <div id={id} ref={wrapperRef} style={{ ...style, width, height }} {...rest}>\n {loaded && (typeof children === 'function' ? children({ isInView }) : children)}\n </div>\n );\n}\n\nLazyLoader.callbacks = {} as Record<string, (e: IntersectionObserverEntry) => void>;\nLazyLoader.addCallback = (id: string, c: (e: IntersectionObserverEntry) => void) => (LazyLoader.callbacks[id] = c);\nLazyLoader.observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n LazyLoader.callbacks[entry.target.id](entry);\n }\n },\n { rootMargin: '100px' }\n);\n","import React from 'react';\nimport ReactGridLayout from 'react-grid-layout';\nimport AutoSizer from 'react-virtualized-auto-sizer';\nimport { SceneComponentProps } from '../../../core/types';\nimport { GRID_CELL_VMARGIN, GRID_COLUMN_COUNT, GRID_CELL_HEIGHT } from './constants';\nimport { LazyLoader, Props } from './LazyLoader';\nimport { SceneGridLayout } from './SceneGridLayout';\nimport { SceneGridItemLike } from './types';\n\nexport function SceneGridLayoutRenderer({ model }: SceneComponentProps<SceneGridLayout>) {\n const { children, isLazy } = model.useState();\n const LazyWrapper = isLazy ? LazyLoader : ({ style, children }: Props) => <div style={style}>{children}</div>;\n validateChildrenSize(children);\n\n return (\n <AutoSizer disableHeight>\n {({ width }) => {\n if (width === 0) {\n return null;\n }\n\n const layout = model.buildGridLayout(width);\n\n const cellWidth = (width - (GRID_COLUMN_COUNT - 1) * GRID_CELL_VMARGIN) / GRID_COLUMN_COUNT;\n return (\n /**\n * The children is using a width of 100% so we need to guarantee that it is wrapped\n * in an element that has the calculated size given by the AutoSizer. The AutoSizer\n * has a width of 0 and will let its content overflow its div.\n */\n <div style={{ width: `${width}px`, height: '100%' }}>\n <ReactGridLayout\n width={width}\n /*\n Disable draggable if mobile device, solving an issue with unintentionally\n moving panels. https://github.com/grafana/grafana/issues/18497\n theme.breakpoints.md = 769\n */\n isDraggable={width > 768}\n isResizable={false}\n containerPadding={[0, 0]}\n useCSSTransforms={false}\n margin={[GRID_CELL_VMARGIN, GRID_CELL_VMARGIN]}\n cols={GRID_COLUMN_COUNT}\n rowHeight={GRID_CELL_HEIGHT}\n draggableHandle={`.grid-drag-handle-${model.state.key}`}\n draggableCancel=\".grid-drag-cancel\"\n // @ts-ignore: ignoring for now until we make the size type numbers-only\n layout={layout}\n onDragStop={model.onDragStop}\n onResizeStop={model.onResizeStop}\n onLayoutChange={model.onLayoutChange}\n isBounded={false}\n >\n {layout.map((gridItem) => {\n const sceneChild = model.getSceneLayoutChild(gridItem.i)!;\n const pixelWidth = cellToPixelSize(sceneChild.state.width ?? 0, cellWidth, GRID_CELL_VMARGIN);\n const pixelHeight = cellToPixelSize(sceneChild.state.height ?? 0, GRID_CELL_HEIGHT, GRID_CELL_VMARGIN);\n\n // Need a wrapper around LazyLoader as ReactGridLayout expects a\n // class component to give a ref to.\n return (\n <div style={{ display: 'flex' }} key={sceneChild.state.key}>\n <LazyWrapper width={pixelWidth} height={pixelHeight} style={{ display: 'flex' }}>\n <sceneChild.Component model={sceneChild} key={sceneChild.state.key} />\n </LazyWrapper>\n </div>\n );\n })}\n </ReactGridLayout>\n </div>\n );\n }}\n </AutoSizer>\n );\n}\n\nfunction validateChildrenSize(children: SceneGridItemLike[]) {\n if (\n children.some(\n (c) =>\n c.state.height === undefined ||\n c.state.width === undefined ||\n c.state.x === undefined ||\n c.state.y === undefined\n )\n ) {\n throw new Error('All children must have a size specified');\n }\n}\n\nfunction cellToPixelSize(sizeInCells: number, sizeOfCellInPx: number, margin = 0) {\n return Math.max(Math.round(sizeInCells * (sizeOfCellInPx + margin) - margin), 0);\n}\n","import React from 'react';\n\nimport { Icon } from '@grafana/ui';\n\nexport function SceneDragHandle({ className, dragClass }: { className?: string; dragClass: string }) {\n return (\n <div\n className={`${className} ${dragClass}`}\n style={{\n width: '20px',\n height: '20px',\n cursor: 'move',\n }}\n >\n <Icon name=\"draggabledots\" />\n </div>\n );\n}\n","import { css, cx } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Icon, useStyles2 } from '@grafana/ui';\n\nimport { SceneObjectBase } from '../../../core/SceneObjectBase';\nimport { SceneComponentProps, SceneObjectUrlValues } from '../../../core/types';\nimport { SceneObjectUrlSyncConfig } from '../../../services/SceneObjectUrlSyncConfig';\nimport { SceneDragHandle } from '../../SceneDragHandle';\n\nimport { SceneGridLayout } from './SceneGridLayout';\nimport { GRID_COLUMN_COUNT } from './constants';\nimport { SceneGridItemLike, SceneGridItemStateLike } from './types';\n\nexport interface SceneGridRowState extends SceneGridItemStateLike {\n title: string;\n isCollapsible?: boolean;\n isCollapsed?: boolean;\n children: SceneGridItemLike[];\n}\n\nexport class SceneGridRow extends SceneObjectBase<SceneGridRowState> {\n public static Component = SceneGridRowRenderer;\n\n protected _urlSync = new SceneObjectUrlSyncConfig(this, { keys: ['rowc'] });\n\n public constructor(state: Partial<SceneGridRowState>) {\n super({\n children: state.children || [],\n isCollapsible: state.isCollapsible || true,\n title: state.title || '',\n isDraggable: state.isDraggable || true,\n isResizable: state.isResizable || false,\n ...state,\n x: 0,\n height: 1,\n width: GRID_COLUMN_COUNT,\n });\n }\n\n public getGridLayout(): SceneGridLayout {\n const layout = this.parent;\n\n if (!layout || !(layout instanceof SceneGridLayout)) {\n throw new Error('SceneGridRow must be a child of SceneGridLayout');\n }\n\n return layout;\n }\n\n public onCollapseToggle = () => {\n if (!this.state.isCollapsible) {\n return;\n }\n\n this.getGridLayout().toggleRow(this);\n };\n\n public getUrlState() {\n return { rowc: this.state.isCollapsed ? '1' : '0' };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues) {\n const isCollapsed = values.rowc === '1';\n if (isCollapsed !== this.state.isCollapsed) {\n this.onCollapseToggle();\n }\n }\n}\n\nexport function SceneGridRowRenderer({ model }: SceneComponentProps<SceneGridRow>) {\n const styles = useStyles2(getSceneGridRowStyles);\n const { isCollapsible, isCollapsed, title, isDraggable } = model.useState();\n const dragHandle = <SceneDragHandle dragClass={model.getGridLayout().getDragClass()} />;\n\n return (\n <div className={styles.row}>\n <div className={cx(styles.rowHeader, isCollapsed && styles.rowHeaderCollapsed)}>\n <button onClick={model.onCollapseToggle} className={styles.rowTitleButton}>\n {isCollapsible && <Icon name={isCollapsed ? 'angle-right' : 'angle-down'} />}\n <span className={styles.rowTitle}>{title}</span>\n </button>\n {isDraggable && isCollapsed && <div>{dragHandle}</div>}\n </div>\n </div>\n );\n}\n\nconst getSceneGridRowStyles = (theme: GrafanaTheme2) => {\n return {\n row: css({\n width: '100%',\n height: '100%',\n position: 'relative',\n zIndex: 0,\n display: 'flex',\n flexDirection: 'column',\n }),\n rowHeader: css({\n width: '100%',\n height: '30px',\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: '8px',\n border: `1px solid transparent`,\n }),\n rowTitleButton: css({\n display: 'flex',\n alignItems: 'center',\n cursor: 'pointer',\n background: 'transparent',\n border: 'none',\n gap: theme.spacing(1),\n }),\n rowHeaderCollapsed: css({\n marginBottom: '0px',\n background: theme.colors.background.primary,\n border: `1px solid ${theme.colors.border.weak}`,\n borderRadius: theme.shape.borderRadius(1),\n }),\n rowTitle: css({\n fontSize: theme.typography.h5.fontSize,\n fontWeight: theme.typography.fontWeightMedium,\n }),\n };\n};\n","import React from 'react';\nimport ReactGridLayout from 'react-grid-layout';\n\nimport { SceneObjectBase } from '../../../core/SceneObjectBase';\nimport { SceneComponentProps, SceneLayout, SceneObject, SceneObjectState } from '../../../core/types';\nimport { DEFAULT_PANEL_SPAN } from './constants';\nimport { SceneGridLayoutRenderer } from './SceneGridLayoutRenderer';\n\nimport { SceneGridRow } from './SceneGridRow';\nimport { SceneGridItemLike, SceneGridItemPlacement, SceneGridItemStateLike } from './types';\n\ninterface SceneGridLayoutState extends SceneObjectState {\n /**\n * Turn on or off dragging for all items. Indiviadual items can still disabled via isDraggable property\n **/\n isDraggable?: boolean;\n isLazy?: boolean;\n children: SceneGridItemLike[];\n}\n\nexport class SceneGridLayout extends SceneObjectBase<SceneGridLayoutState> implements SceneLayout {\n public static Component = SceneGridLayoutRenderer;\n\n private _skipOnLayoutChange = false;\n\n public constructor(state: SceneGridLayoutState) {\n super({\n ...state,\n isDraggable: true,\n children: sortChildrenByPosition(state.children),\n });\n }\n\n /**\n * SceneLayout interface. Used for example by VizPanelRenderer\n */\n public isDraggable(): boolean {\n return this.state.isDraggable ?? false;\n }\n\n public getDragClass() {\n return `grid-drag-handle-${this.state.key}`;\n }\n\n public getDragClassCancel() {\n return `grid-drag-cancel`;\n }\n\n public toggleRow(row: SceneGridRow) {\n const isCollapsed = row.state.isCollapsed;\n\n if (!isCollapsed) {\n row.setState({ isCollapsed: true });\n // To force re-render\n this.setState({});\n return;\n }\n\n const rowChildren = row.state.children;\n\n if (rowChildren.length === 0) {\n row.setState({ isCollapsed: false });\n this.setState({});\n return;\n }\n\n // Ok we are expanding row. We need to update row children y pos (incase they are incorrect) and push items below down\n // Code copied from DashboardModel toggleRow()\n\n const rowY = row.state.y!;\n const firstPanelYPos = rowChildren[0].state.y ?? rowY;\n const yDiff = firstPanelYPos - (rowY + 1);\n\n // y max will represent the bottom y pos after all panels have been added\n // needed to know home much panels below should be pushed down\n let yMax = rowY;\n\n for (const panel of rowChildren) {\n // set the y gridPos if it wasn't already set\n const newSize = { ...panel.state };\n newSize.y = newSize.y ?? rowY;\n // make sure y is adjusted (in case row moved while collapsed)\n newSize.y -= yDiff;\n if (newSize.y! > panel.state.y!) {\n panel.setState(newSize);\n }\n // update insert post and y max\n yMax = Math.max(yMax, Number(newSize.y!) + Number(newSize.height!));\n }\n\n const pushDownAmount = yMax - rowY - 1;\n\n // push panels below down\n for (const child of this.state.children) {\n if (child.state.y! > rowY) {\n this.pushChildDown(child, pushDownAmount);\n }\n\n if (isSceneGridRow(child) && child !== row) {\n for (const rowChild of child.state.children) {\n if (rowChild.state.y! > rowY) {\n this.pushChildDown(rowChild, pushDownAmount);\n }\n }\n }\n }\n\n row.setState({ isCollapsed: false });\n // Trigger re-render\n this.setState({});\n }\n\n public onLayoutChange = (layout: ReactGridLayout.Layout[]) => {\n if (this._skipOnLayoutChange) {\n // Layout has been updated by other RTL handler already\n this._skipOnLayoutChange = false;\n return;\n }\n\n for (const item of layout) {\n const child = this.getSceneLayoutChild(item.i);\n\n const nextSize: SceneGridItemPlacement = {\n x: item.x,\n y: item.y,\n width: item.w,\n height: item.h,\n };\n\n if (!isItemSizeEqual(child.state, nextSize)) {\n child.setState({\n ...nextSize,\n });\n }\n }\n\n this.setState({ children: sortChildrenByPosition(this.state.children) });\n };\n\n /**\n * Will also scan row children and return child of the row\n */\n public getSceneLayoutChild(key: string) {\n for (const child of this.state.children) {\n if (child.state.key === key) {\n return child;\n }\n\n if (child instanceof SceneGridRow) {\n for (const rowChild of child.state.children) {\n if (rowChild.state.key === key) {\n return rowChild;\n }\n }\n }\n }\n\n throw new Error('Scene layout child not found for GridItem');\n }\n\n public onResizeStop: ReactGridLayout.ItemCallback = (_, o, n) => {\n const child = this.getSceneLayoutChild(n.i);\n child.setState({\n width: n.w,\n height: n.h,\n });\n };\n\n private pushChildDown(child: SceneGridItemLike, amount: number) {\n child.setState({\n y: child.state.y! + amount,\n });\n }\n\n /**\n * We assume the layout array is storted according to y pos, and walk upwards until we find a row.\n * If it is collapsed there is no row to add it to. The default is then to return the SceneGridLayout itself\n */\n private findGridItemSceneParent(layout: ReactGridLayout.Layout[], startAt: number): SceneGridRow | SceneGridLayout {\n for (let i = startAt; i >= 0; i--) {\n const gridItem = layout[i];\n const sceneChild = this.getSceneLayoutChild(gridItem.i);\n\n if (sceneChild instanceof SceneGridRow) {\n // the closest row is collapsed return null\n if (sceneChild.state.isCollapsed) {\n return this;\n }\n\n return sceneChild;\n }\n }\n\n return this;\n }\n\n /**\n * This likely needs a slighltly different approach. Where we clone or deactivate or and re-activate the moved child\n */\n public moveChildTo(child: SceneGridItemLike, target: SceneGridLayout | SceneGridRow) {\n const currentParent = child.parent!;\n let rootChildren = this.state.children;\n\n const newChild = child.clone({ key: child.state.key });\n\n // Remove from current parent row\n if (currentParent instanceof SceneGridRow) {\n const newRow = currentParent.clone({\n children: currentParent.state.children.filter((c) => c.state.key !== child.state.key),\n });\n\n // new children with new row\n rootChildren = rootChildren.map((c) => (c === currentParent ? newRow : c));\n\n // if target is also a row\n if (target instanceof SceneGridRow) {\n const targetRow = target.clone({ children: [...target.state.children, newChild] });\n rootChildren = rootChildren.map((c) => (c === target ? targetRow : c));\n } else {\n // target is the main grid\n rootChildren = [...rootChildren, newChild];\n }\n } else {\n if (!(target instanceof SceneGridLayout)) {\n // current parent is the main grid remove it from there\n rootChildren = rootChildren.filter((c) => c.state.key !== child.state.key);\n // Clone the target row and add the child\n const targetRow = target.clone({ children: [...target.state.children, newChild] });\n // Replace row with new row\n rootChildren = rootChildren.map((c) => (c === target ? targetRow : c));\n }\n }\n\n return rootChildren;\n }\n\n public onDragStop: ReactGridLayout.ItemCallback = (gridLayout, o, updatedItem) => {\n const sceneChild = this.getSceneLayoutChild(updatedItem.i)!;\n\n // Need to resort the grid layout based on new position (needed to to find the new parent)\n gridLayout = sortGridLayout(gridLayout);\n\n // Update children positions if they have changed\n for (let i = 0; i < gridLayout.length; i++) {\n const gridItem = gridLayout[i];\n const child = this.getSceneLayoutChild(gridItem.i)!;\n const childSize = child.state;\n\n if (childSize?.x !== gridItem.x || childSize?.y !== gridItem.y) {\n child.setState({\n x: gridItem.x,\n y: gridItem.y,\n });\n }\n }\n\n // Update the parent if the child if it has moved to a row or back to the grid\n const indexOfUpdatedItem = gridLayout.findIndex((item) => item.i === updatedItem.i);\n const newParent = this.findGridItemSceneParent(gridLayout, indexOfUpdatedItem - 1);\n let newChildren = this.state.children;\n\n if (newParent !== sceneChild.parent) {\n newChildren = this.moveChildTo(sceneChild, newParent);\n }\n\n this.setState({ children: sortChildrenByPosition(newChildren) });\n this._skipOnLayoutChange = true;\n };\n\n private toGridCell(child: SceneGridItemLike): ReactGridLayout.Layout {\n const size = child.state;\n\n let x = size.x ?? 0;\n let y = size.y ?? 0;\n const w = Number.isInteger(Number(size.width)) ? Number(size.width) : DEFAULT_PANEL_SPAN;\n const h = Number.isInteger(Number(size.height)) ? Number(size.height) : DEFAULT_PANEL_SPAN;\n\n let isDraggable = Boolean(child.state.isDraggable);\n let isResizable = Boolean(child.state.isResizable);\n\n if (child instanceof SceneGridRow) {\n isDraggable = child.state.isCollapsed ? true : false;\n isResizable = false;\n }\n\n return { i: child.state.key!, x, y, h, w, isResizable, isDraggable };\n }\n\n public buildGridLayout(width: number): ReactGridLayout.Layout[] {\n let cells: ReactGridLayout.Layout[] = [];\n\n for (const child of this.state.children) {\n cells.push(this.toGridCell(child));\n\n if (child instanceof SceneGridRow && !child.state.isCollapsed) {\n for (const rowChild of child.state.children) {\n cells.push(this.toGridCell(rowChild));\n }\n }\n }\n\n // Sort by position\n cells = sortGridLayout(cells);\n\n if (width < 768) {\n // We should not persist the mobile layout\n this._skipOnLayoutChange = true;\n return cells.map((cell) => ({ ...cell, w: 24 }));\n }\n\n this._skipOnLayoutChange = false;\n\n return cells;\n }\n}\n\ninterface SceneGridItemState extends SceneGridItemStateLike {\n body: SceneObject | undefined;\n}\nexport class SceneGridItem extends SceneObjectBase<SceneGridItemState> implements SceneGridItemLike {\n static Component = SceneGridItemRenderer;\n}\n\nfunction SceneGridItemRenderer({ model }: SceneComponentProps<SceneGridItem>) {\n const { body } = model.useState();\n const parent = model.parent;\n\n if (parent && !isSceneGridLayout(parent) && !isSceneGridRow(parent)) {\n throw new Error('SceneGridItem must be a child of SceneGridLayout or SceneGridRow');\n }\n\n if (!body) {\n return null;\n }\n\n return <body.Component model={body} />;\n}\n\nfunction isItemSizeEqual(a: SceneGridItemPlacement, b: SceneGridItemPlacement) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\nfunction sortChildrenByPosition(children: SceneGridItemLike[]) {\n return [...children].sort((a, b) => {\n return a.state.y! - b.state.y! || a.state.x! - b.state.x!;\n });\n}\n\nfunction sortGridLayout(layout: ReactGridLayout.Layout[]) {\n return [...layout].sort((a, b) => a.y - b.y || a.x! - b.x);\n}\n\nfunction isSceneGridRow(child: SceneObject): child is SceneGridRow {\n return child instanceof SceneGridRow;\n}\n\nfunction isSceneGridLayout(child: SceneObject): child is SceneGridLayout {\n return child instanceof SceneGridLayout;\n}\n","import { RouteComponentProps, useLocation } from 'react-router-dom';\n\nimport { UrlQueryMap, urlUtil } from '@grafana/data';\nimport { locationSearchToObject } from '@grafana/runtime';\nimport { SceneObject } from '../../core/types';\nimport React from 'react';\n\nexport function useAppQueryParams(): UrlQueryMap {\n const location = useLocation();\n return locationSearchToObject(location.search || '');\n}\n\nexport function getLinkUrlWithAppUrlState(path: string, params: UrlQueryMap, preserveParams?: string[]): string {\n // make a copy of params as the renderUrl function mutates the object\n const paramsCopy = { ...params };\n\n if (preserveParams) {\n for (const key of Object.keys(paramsCopy)) {\n // if param is not in preserveParams, remove it\n if (!preserveParams.includes(key)) {\n delete paramsCopy[key];\n }\n }\n }\n\n return urlUtil.renderUrl(path, paramsCopy);\n}\n\nexport function renderSceneComponentWithRouteProps(sceneObject: SceneObject, routeProps: RouteComponentProps) {\n return React.createElement(sceneObject.Component, { model: sceneObject, routeProps: routeProps });\n}\n","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\n\nimport { SceneComponentProps } from '../../core/types';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneAppState } from './types';\nimport { renderSceneComponentWithRouteProps } from './utils';\n\n/**\n * Responsible for top level pages routing\n */\nexport class SceneApp extends SceneObjectBase<SceneAppState> {\n public static Component = ({ model }: SceneComponentProps<SceneApp>) => {\n const { pages } = model.useState();\n\n return (\n <Switch>\n {pages.map((page) => (\n <Route\n key={page.state.url}\n exact={false}\n path={page.state.url}\n render={(props) => renderSceneComponentWithRouteProps(page, props)}\n ></Route>\n ))}\n </Switch>\n );\n };\n}\n","import React from 'react';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { SceneComponentProps, SceneObjectState } from '../core/types';\n\nexport interface SceneReactObjectState<TProps = {}> extends SceneObjectState {\n /**\n * React component to render\n */\n component?: React.ComponentType<TProps>;\n /**\n * Props to pass to the component\n */\n props?: TProps;\n /**\n * Alternative to component and props is just to pass a React node\n */\n reactNode?: React.ReactNode;\n}\n\n/**\n * A utility object that can be used to render any React component or ReactNode\n */\nexport class SceneReactObject<TProps = {}> extends SceneObjectBase<SceneReactObjectState<TProps>> {\n public static Component = ({ model }: SceneComponentProps<SceneReactObject>) => {\n const { component: Component, props, reactNode } = model.useState();\n\n if (Component) {\n return <Component {...props} />;\n }\n\n if (reactNode) {\n return reactNode;\n }\n\n return null;\n };\n}\n","import { NavModelItem, UrlQueryMap } from '@grafana/data';\nimport { PluginPage } from '@grafana/runtime';\nimport React, { useLayoutEffect, useState } from 'react';\n\nimport { RouteComponentProps } from 'react-router-dom';\nimport { SceneObject } from '../../core/types';\nimport { SceneAppPage } from './SceneAppPage';\nimport { SceneAppDrilldownView, SceneAppPageLike } from './types';\nimport { getLinkUrlWithAppUrlState, renderSceneComponentWithRouteProps, useAppQueryParams } from './utils';\n\nexport interface Props {\n page: SceneAppPageLike;\n // activeTab?: SceneAppPageLike;\n routeProps: RouteComponentProps;\n}\n\nexport function SceneAppPageView({ page, routeProps }: Props) {\n const containerPage = getParentPageIfTab(page);\n const containerState = containerPage.useState();\n const params = useAppQueryParams();\n const scene = page.getScene(routeProps.match);\n const [initialized, setInitialized] = useState(false);\n\n useLayoutEffect(() => {\n // Before rendering scene components, we are making sure the URL sync is enabled for.\n if (!initialized) {\n containerPage.initializeScene(scene);\n setInitialized(true);\n }\n }, [initialized, scene, containerPage]);\n\n if (!initialized) {\n return null;\n }\n\n const pageNav: NavModelItem = {\n text: containerState.title,\n subTitle: containerState.subTitle,\n img: containerState.titleImg,\n icon: containerState.titleIcon,\n url: getLinkUrlWithAppUrlState(containerState.url, params, containerState.preserveUrlKeys),\n hideFromBreadcrumbs: containerState.hideFromBreadcrumbs,\n parentItem: getParentBreadcrumbs(\n containerState.getParentPage ? containerState.getParentPage() : containerPage.parent,\n params\n ),\n };\n\n if (containerState.tabs) {\n pageNav.children = containerState.tabs.map((tab) => {\n return {\n text: tab.state.title,\n active: page === tab,\n url: getLinkUrlWithAppUrlState(tab.state.url, params, tab.state.preserveUrlKeys),\n parentItem: pageNav,\n };\n });\n }\n\n let pageActions: React.ReactNode = undefined;\n if (containerState.controls) {\n pageActions = containerState.controls.map((control) => (\n <control.Component model={control} key={control.state.key} />\n ));\n }\n\n return (\n <PluginPage pageNav={pageNav} actions={pageActions} renderTitle={containerState.renderTitle}>\n <scene.Component model={scene} />\n </PluginPage>\n );\n}\n\n/**\n * For pages that are \"tabs\" this will return the parent page\n */\nfunction getParentPageIfTab(page: SceneAppPageLike) {\n if (page.parent instanceof SceneAppPage) {\n return page.parent;\n }\n\n return page;\n}\n\nfunction getParentBreadcrumbs(parent: SceneObject | undefined, params: UrlQueryMap): NavModelItem | undefined {\n if (parent instanceof SceneAppPage) {\n return {\n text: parent.state.title,\n url: getLinkUrlWithAppUrlState(parent.state.url, params, parent.state.preserveUrlKeys),\n hideFromBreadcrumbs: parent.state.hideFromBreadcrumbs,\n parentItem: getParentBreadcrumbs(\n parent.state.getParentPage ? parent.state.getParentPage() : parent.parent,\n params\n ),\n };\n }\n\n return undefined;\n}\n\nexport interface SceneAppDrilldownViewRenderProps {\n drilldown: SceneAppDrilldownView;\n parent: SceneAppPageLike;\n routeProps: RouteComponentProps;\n}\n\nexport function SceneAppDrilldownViewRender({ drilldown, parent, routeProps }: SceneAppDrilldownViewRenderProps) {\n return renderSceneComponentWithRouteProps(parent.getDrilldownPage(drilldown, routeProps.match), routeProps);\n}\n","import React from 'react';\nimport { Route, RouteComponentProps, Switch } from 'react-router-dom';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { SceneComponentProps } from '../../core/types';\nimport { getUrlSyncManager } from '../../services/UrlSyncManager';\nimport { EmbeddedScene } from '../EmbeddedScene';\nimport { SceneFlexItem, SceneFlexLayout } from '../layout/SceneFlexLayout';\nimport { SceneReactObject } from '../SceneReactObject';\nimport { SceneAppDrilldownViewRender, SceneAppPageView } from './SceneAppPageView';\nimport { SceneAppDrilldownView, SceneAppPageLike, SceneAppPageState, SceneRouteMatch } from './types';\nimport { renderSceneComponentWithRouteProps } from './utils';\n\n/**\n * Responsible for page's drilldown & tabs routing\n */\nexport class SceneAppPage extends SceneObjectBase<SceneAppPageState> implements SceneAppPageLike {\n public static Component = SceneAppPageRenderer;\n private _sceneCache = new Map<string, EmbeddedScene>();\n private _drilldownCache = new Map<string, SceneAppPageLike>();\n\n public constructor(state: SceneAppPageState) {\n super(state);\n\n this.addActivationHandler(() => {\n return () => getUrlSyncManager().cleanUp(this);\n });\n }\n\n public initializeScene(scene: EmbeddedScene) {\n this.setState({ initializedScene: scene });\n getUrlSyncManager().initSync(this);\n }\n\n public getScene(routeMatch: SceneRouteMatch): EmbeddedScene {\n let scene = this._sceneCache.get(routeMatch.url);\n\n if (scene) {\n return scene;\n }\n\n if (!this.state.getScene) {\n throw new Error('Missing getScene on SceneAppPage ' + this.state.title);\n }\n\n scene = this.state.getScene(routeMatch);\n this._sceneCache.set(routeMatch.url, scene);\n\n return scene;\n }\n\n public getDrilldownPage(drilldown: SceneAppDrilldownView, routeMatch: SceneRouteMatch<{}>): SceneAppPageLike {\n let page = this._drilldownCache.get(routeMatch!.url);\n if (page) {\n return page;\n }\n\n page = drilldown.getPage(routeMatch, this);\n this._drilldownCache.set(routeMatch!.url, page);\n\n return page;\n }\n}\n\nexport interface SceneAppPageRendererProps extends SceneComponentProps<SceneAppPage> {\n routeProps: RouteComponentProps;\n}\n\nfunction SceneAppPageRenderer({ model, routeProps }: SceneAppPageRendererProps) {\n const { tabs, drilldowns } = model.useState();\n const routes: React.ReactNode[] = [];\n\n if (tabs && tabs.length > 0) {\n for (let tabIndex = 0; tabIndex < tabs.length; tabIndex++) {\n const tab = tabs[tabIndex];\n\n // Add first tab as a default route, this makes it possible for the first tab to render with the url of the parent page\n if (tabIndex === 0) {\n routes.push(\n <Route\n exact={true}\n key={model.state.url}\n path={model.state.routePath ?? model.state.url}\n render={(props) => renderSceneComponentWithRouteProps(tab, props)}\n ></Route>\n );\n }\n\n routes.push(\n <Route\n exact={true}\n key={tab.state.url}\n path={tab.state.routePath ?? tab.state.url}\n render={(props) => renderSceneComponentWithRouteProps(tab, props)}\n ></Route>\n );\n\n if (tab.state.drilldowns) {\n for (const drilldown of tab.state.drilldowns) {\n routes.push(\n <Route\n exact={false}\n key={drilldown.routePath}\n path={drilldown.routePath}\n render={(props) => <SceneAppDrilldownViewRender drilldown={drilldown} parent={tab} routeProps={props} />}\n ></Route>\n );\n }\n }\n }\n\n routes.push(getFallbackRoute(model, routeProps));\n\n return <Switch>{routes}</Switch>;\n }\n\n if (drilldowns) {\n for (const drilldown of drilldowns) {\n routes.push(\n <Route\n key={drilldown.routePath}\n exact={false}\n path={drilldown.routePath}\n render={(props) => <SceneAppDrilldownViewRender drilldown={drilldown} parent={model} routeProps={props} />}\n ></Route>\n );\n }\n }\n\n if (isCurrentPageRouteMatch(model, routeProps.match)) {\n return <SceneAppPageView page={model} routeProps={routeProps} />;\n }\n\n routes.push(getFallbackRoute(model, routeProps));\n\n return <Switch>{routes}</Switch>;\n}\n\nfunction getFallbackRoute(page: SceneAppPage, routeProps: RouteComponentProps) {\n return (\n <Route\n key={'fallback route'}\n render={(props) => {\n const fallbackPage = getDefaultFallbackPage();\n return <SceneAppPageView page={fallbackPage} routeProps={routeProps} />;\n }}\n ></Route>\n );\n}\n\nfunction isCurrentPageRouteMatch(page: SceneAppPage, match: SceneRouteMatch) {\n if (!match.isExact) {\n return false;\n }\n\n // current page matches the route url\n if (match.url === page.state.url) {\n return true;\n }\n\n // check if we are a tab and the first tab, then we should also render on the parent url\n if (\n page.parent instanceof SceneAppPage &&\n page.parent.state.tabs![0] === page &&\n page.parent.state.url === match.url\n ) {\n return true;\n }\n\n return false;\n}\n\nfunction getDefaultFallbackPage() {\n return new SceneAppPage({\n url: '',\n title: 'Not found',\n subTitle: 'The url did not match any page',\n getScene: () => {\n return new EmbeddedScene({\n body: new SceneFlexLayout({\n direction: 'column',\n children: [\n new SceneFlexItem({\n body: new SceneReactObject({\n component: () => {\n return (\n <div data-testid=\"default-fallback-content\">\n If you found your way here using a link then there might be a bug in this application.\n </div>\n );\n },\n }),\n }),\n ],\n }),\n });\n },\n });\n}\n"],"names":["BusEventWithPayload","__objRest","_a","React","useEffect","__spreadValues","EventBusSrv","Subscription","uuidv4","useState","LoadingState","getDefaultTimeRange","getTimeZone","toUtc","dateMath","property","Registry","VariableFormatID","map","escapeRegex","isArray","textUtil","replace","dateTime","getTimeRange","urlUtil","getFieldDisplayName","__spreadProps","formatLabels","formattedValueToString","FieldType","getDisplayProcessor","getFieldDisplayValuesProxy","getFrameDisplayName","DataLinkBuiltInVars","getDataSourceSrv","isEqual","data","preProcessPanelData","CoreApp","cloneDeep","rangeUtil","getRunRequest","transformDataFrame","useStyles2","getStyles","VariableHide","Tooltip","selectors","css","VariableRefresh","Select","MultiSelect","of","stringToJsRegex","VariableSupportType","from","mergeMap","isNumber","uniqBy","VariableSort","sortBy","toLower","getProcessedDataFrames","isDataFrame","filter","take","throwError","catchError","Subject","Observable","useDebounce","useCallback","Input","locationService","useMeasure","PanelChrome","ErrorBoundaryAlert","PluginContextProvider","PanelContextProvider","getAppEvents","isSystemOverrideWithRef","SeriesVisibilityChangeMode","override","createOverride","ByNamesMatcherMode","FieldMatcherID","fieldMatchers","FieldColorModeId","getPluginImportUtils","DashboardCursorSync","getPanelOptionsWithDefaults","config","compareArrayValues","compareDataFrameStructures","applyFieldOverrides","items","Menu","ToolbarButton","Stack","Button","useTheme2","TimeRangePicker","RefreshPicker","useMemo","useRef","uniqueId","useEffectOnce","children","AutoSizer","ReactGridLayout","Icon","cx","useLocation","locationSearchToObject","Switch","Route","useLayoutEffect","PluginPage"],"mappings":"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"}