@grafana/scenes 8.17.0 → 8.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/dist/esm/components/VizPanel/VizPanel.js +93 -9
- package/dist/esm/components/VizPanel/VizPanel.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/querying/SceneDataTransformer.js +135 -13
- package/dist/esm/querying/SceneDataTransformer.js.map +1 -1
- package/dist/esm/querying/systemTransformations/constants.js +9 -0
- package/dist/esm/querying/systemTransformations/constants.js.map +1 -0
- package/dist/esm/querying/systemTransformations/systemTransformationProvider.js +19 -0
- package/dist/esm/querying/systemTransformations/systemTransformationProvider.js.map +1 -0
- package/dist/index.d.ts +180 -5
- package/dist/index.js +246 -21
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
# v8.18.0 (Wed Sep 16 2026)
|
|
2
|
+
|
|
3
|
+
#### 🚀 Enhancement
|
|
4
|
+
|
|
5
|
+
- SceneDataTransformer: support system and URL provided transformations [#1614](https://github.com/grafana/scenes/pull/1614) ([@dprokop](https://github.com/dprokop) [@gtk-grafana](https://github.com/gtk-grafana))
|
|
6
|
+
|
|
7
|
+
#### Authors: 2
|
|
8
|
+
|
|
9
|
+
- Dominik Prokop ([@dprokop](https://github.com/dprokop))
|
|
10
|
+
- Galen Kistler ([@gtk-grafana](https://github.com/gtk-grafana))
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
1
14
|
# v8.17.0 (Thu Sep 10 2026)
|
|
2
15
|
|
|
3
16
|
#### 🚀 Enhancement
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t } from '@grafana/i18n';
|
|
2
|
-
import { toUtc, getPanelOptionsWithDefaults, renderMarkdown, applyFieldOverrides, compareArrayValues, compareDataFrameStructures, CoreApp, DashboardCursorSync, PanelPlugin, PluginType } from '@grafana/data';
|
|
2
|
+
import { toUtc, getPanelOptionsWithDefaults, renderMarkdown, applyFieldOverrides, compareArrayValues, compareDataFrameStructures, CoreApp, DashboardCursorSync, PanelPlugin, PluginType, DataTopic } from '@grafana/data';
|
|
3
3
|
import { getPluginImportUtils, config, getAppEvents } from '@grafana/runtime';
|
|
4
4
|
import { SceneObjectBase } from '../../core/SceneObjectBase.js';
|
|
5
5
|
import { sceneGraph } from '../../core/sceneGraph/index.js';
|
|
@@ -39,6 +39,16 @@ class VizPanel extends SceneObjectBase {
|
|
|
39
39
|
}
|
|
40
40
|
});
|
|
41
41
|
this._structureRev = 0;
|
|
42
|
+
/**
|
|
43
|
+
* @internal
|
|
44
|
+
* Marks this panel as a SystemTransformationsProvider; not for app code.
|
|
45
|
+
*/
|
|
46
|
+
this.isSystemTransformationsProvider = true;
|
|
47
|
+
/**
|
|
48
|
+
* @internal
|
|
49
|
+
* Identifies this panel's tier in its data pipeline; not for app code.
|
|
50
|
+
*/
|
|
51
|
+
this.origin = "plugin";
|
|
42
52
|
this.onTimeRangeChange = (timeRange) => {
|
|
43
53
|
const sceneTimeRange = sceneGraph.getTimeRange(this);
|
|
44
54
|
sceneTimeRange.onTimeRangeChange({
|
|
@@ -227,16 +237,9 @@ class VizPanel extends SceneObjectBase {
|
|
|
227
237
|
endPluginLoadCallback == null ? void 0 : endPluginLoadCallback(plugin, true);
|
|
228
238
|
this._pluginLoaded(plugin, overwriteOptions, overwriteFieldConfig, isAfterPluginChange);
|
|
229
239
|
} else {
|
|
230
|
-
const { importPanelPlugin } = getPluginImportUtils();
|
|
231
240
|
try {
|
|
232
241
|
const endPluginLoadCallback = profiler == null ? void 0 : profiler.onPluginLoadStart(pluginId);
|
|
233
|
-
const
|
|
234
|
-
const queryControler = sceneGraph.getQueryController(this);
|
|
235
|
-
if (queryControler && queryControler.state.enableProfiling) {
|
|
236
|
-
wrapPromiseInStateObservable(panelPromise).pipe(registerQueryWithController({ type: `VizPanel/loadPlugin/${pluginId}`, origin: this })).subscribe(() => {
|
|
237
|
-
});
|
|
238
|
-
}
|
|
239
|
-
const result = await panelPromise;
|
|
242
|
+
const result = await this._importPlugin(pluginId);
|
|
240
243
|
endPluginLoadCallback == null ? void 0 : endPluginLoadCallback(result, false);
|
|
241
244
|
this._pluginLoaded(result, overwriteOptions, overwriteFieldConfig, isAfterPluginChange);
|
|
242
245
|
} catch (err) {
|
|
@@ -247,6 +250,24 @@ class VizPanel extends SceneObjectBase {
|
|
|
247
250
|
}
|
|
248
251
|
}
|
|
249
252
|
}
|
|
253
|
+
/**
|
|
254
|
+
* The only place the plugin is imported. Concurrent callers (_loadPlugin, getPluginAsync) share one import,
|
|
255
|
+
* and a rejection stays cached so a plugin that fails to load is not retried on every call.
|
|
256
|
+
*/
|
|
257
|
+
_importPlugin(pluginId) {
|
|
258
|
+
var _a;
|
|
259
|
+
if (((_a = this._pluginImport) == null ? void 0 : _a.pluginId) === pluginId) {
|
|
260
|
+
return this._pluginImport.promise;
|
|
261
|
+
}
|
|
262
|
+
const promise = getPluginImportUtils().importPanelPlugin(pluginId);
|
|
263
|
+
const queryControler = sceneGraph.getQueryController(this);
|
|
264
|
+
if (queryControler && queryControler.state.enableProfiling) {
|
|
265
|
+
wrapPromiseInStateObservable(promise).pipe(registerQueryWithController({ type: `VizPanel/loadPlugin/${pluginId}`, origin: this })).subscribe(() => {
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
this._pluginImport = { pluginId, promise };
|
|
269
|
+
return promise;
|
|
270
|
+
}
|
|
250
271
|
getLegacyPanelId() {
|
|
251
272
|
var _a, _b;
|
|
252
273
|
const parts = (_b = (_a = this.state.key) == null ? void 0 : _a.split("/")) != null ? _b : [];
|
|
@@ -315,6 +336,11 @@ class VizPanel extends SceneObjectBase {
|
|
|
315
336
|
pluginVersion: currentVersion,
|
|
316
337
|
pluginId: plugin.meta.id
|
|
317
338
|
});
|
|
339
|
+
if (this.state.applyPluginTransformations && // does panel support system transformations?
|
|
340
|
+
$data instanceof SceneDataTransformer && $data.isActive && // the plugin supplies a provider method, or a previous one did and its transformations must come back out
|
|
341
|
+
(pluginProvidesSystemTransformations(plugin) || $data.hasAppliedSystemTransformations())) {
|
|
342
|
+
$data.reprocessTransformations();
|
|
343
|
+
}
|
|
318
344
|
if (plugin.meta.skipDataQuery) {
|
|
319
345
|
const sceneTimeRange = sceneGraph.getTimeRange(this);
|
|
320
346
|
this._subs.add(sceneTimeRange.subscribeToState(() => this.forceRender()));
|
|
@@ -323,9 +349,50 @@ class VizPanel extends SceneObjectBase {
|
|
|
323
349
|
_getPluginVersion(plugin) {
|
|
324
350
|
return plugin && plugin.meta.info.version ? plugin.meta.info.version : config.buildInfo.version;
|
|
325
351
|
}
|
|
352
|
+
/**
|
|
353
|
+
* The plugin this panel has adopted, or undefined while it is still loading.
|
|
354
|
+
*/
|
|
326
355
|
getPlugin() {
|
|
327
356
|
return this._plugin;
|
|
328
357
|
}
|
|
358
|
+
/**
|
|
359
|
+
* The plugin for the current state.pluginId, importing it if it is not loaded yet. Rejects when
|
|
360
|
+
* the import does, like the host's importPanelPlugin.
|
|
361
|
+
*
|
|
362
|
+
* Unlike getPlugin this does not return undefined merely because the import has not finished, and
|
|
363
|
+
* it does not wait on the panel being activated. It does not adopt what it resolves: option
|
|
364
|
+
* migrations and the state write stay with _loadPlugin, on the render and viz change paths.
|
|
365
|
+
*/
|
|
366
|
+
getPluginAsync() {
|
|
367
|
+
const resolved = this._resolvePluginSync();
|
|
368
|
+
return resolved ? Promise.resolve(resolved) : this._importPlugin(this.state.pluginId);
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* The plugin for the current state.pluginId when it is available without importing: the one this
|
|
372
|
+
* panel adopted, or one already in the host's cache.
|
|
373
|
+
*/
|
|
374
|
+
_resolvePluginSync() {
|
|
375
|
+
var _a;
|
|
376
|
+
const { pluginId } = this.state;
|
|
377
|
+
return ((_a = this._plugin) == null ? void 0 : _a.meta.id) === pluginId ? this._plugin : loadPanelPluginSync(pluginId);
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* @internal
|
|
381
|
+
* Called by the SceneDataTransformer that discovered this panel with the frames about to enter the pipeline.
|
|
382
|
+
*/
|
|
383
|
+
getSystemTransformations({ series }) {
|
|
384
|
+
if (series.length === 0) {
|
|
385
|
+
return {};
|
|
386
|
+
}
|
|
387
|
+
const plugin = this._pluginForTransformations();
|
|
388
|
+
return plugin ? getPluginSystemTransformations(plugin, { series }) : {};
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* The plugin that contributes the transformations for this panel.
|
|
392
|
+
*/
|
|
393
|
+
_pluginForTransformations() {
|
|
394
|
+
return this.state.applyPluginTransformations ? this._resolvePluginSync() : void 0;
|
|
395
|
+
}
|
|
329
396
|
getPanelContext() {
|
|
330
397
|
var _a;
|
|
331
398
|
(_a = this._panelContext) != null ? _a : this._panelContext = this.buildPanelContext();
|
|
@@ -479,6 +546,23 @@ function getPanelPluginNotFound(id) {
|
|
|
479
546
|
};
|
|
480
547
|
return plugin;
|
|
481
548
|
}
|
|
549
|
+
function pluginProvidesSystemTransformations(plugin) {
|
|
550
|
+
return typeof plugin.getSystemTransformations === "function";
|
|
551
|
+
}
|
|
552
|
+
function getPluginSystemTransformations(plugin, ctx) {
|
|
553
|
+
var _a;
|
|
554
|
+
if (!pluginProvidesSystemTransformations(plugin)) {
|
|
555
|
+
return {};
|
|
556
|
+
}
|
|
557
|
+
const { prepend = [], append = [] } = (_a = plugin.getSystemTransformations(ctx)) != null ? _a : {};
|
|
558
|
+
return { prepend: prepend.filter(appliesToSeriesTopic), append: append.filter(appliesToSeriesTopic) };
|
|
559
|
+
}
|
|
560
|
+
function appliesToSeriesTopic(transformation) {
|
|
561
|
+
if (typeof transformation === "function") {
|
|
562
|
+
return true;
|
|
563
|
+
}
|
|
564
|
+
return transformation.topic == null || transformation.topic === DataTopic.Series;
|
|
565
|
+
}
|
|
482
566
|
|
|
483
567
|
export { VizPanel };
|
|
484
568
|
//# sourceMappingURL=VizPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VizPanel.js","sources":["../../../../src/components/VizPanel/VizPanel.tsx"],"sourcesContent":["import { t } from '@grafana/i18n';\nimport {\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 PluginType,\n renderMarkdown,\n PanelPluginDataSupport,\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';\nimport { getCursorSyncScope } from '../../behaviors/CursorSync';\nimport { cloneDeep, isArray, isEmpty, merge, mergeWith } from 'lodash';\nimport { UserActionEvent } from '../../core/events';\nimport { evaluateTimeRange } from '../../utils/evaluateTimeRange';\nimport { LiveNowTimer } from '../../behaviors/LiveNowTimer';\nimport { VizPanelRenderProfiler } from '../../performance/VizPanelRenderProfiler';\nimport { registerQueryWithController, wrapPromiseInStateObservable } from '../../querying/registerQueryWithController';\nimport { SceneDataTransformer } from '../../querying/SceneDataTransformer';\nimport { SceneQueryRunner } from '../../querying/SceneQueryRunner';\nimport { buildPathIdFor } from '../../utils/pathId';\n\nexport interface VizPanelState<TOptions = {}, TFieldConfig = {}> extends SceneObjectState {\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 title: string;\n /** Shown in info icon tooltip next to the title, supports markdown */\n description?: string;\n /** Shown as text below the title, supports markdown */\n subtitle?: string;\n options: DeepPartial<TOptions>;\n fieldConfig: FieldConfigSource<DeepPartial<TFieldConfig>>;\n pluginVersion?: string;\n displayMode?: 'default' | 'transparent';\n /**\n * Only shows header on hover, absolutly positioned above the panel.\n */\n hoverHeader?: boolean;\n /**\n * Offset hoverHeader position on the y axis\n */\n hoverHeaderOffset?: number;\n /**\n * Allows adding elements to the subheader of the panel.\n */\n subHeader?: React.ReactNode | SceneObject | SceneObject[];\n /**\n * Only shows vizPanelMenu on hover if false, otherwise the menu is always visible in the header\n */\n showMenuAlways?: boolean;\n /**\n * Defines a menu in the top right of the panel. The menu object is only activated when the dropdown menu itself is shown.\n * So the best way to add dynamic menu actions and links is by adding them in a behavior attached to the menu.\n */\n menu?: VizPanelMenu;\n /**\n * Defines a menu that renders panel link.\n **/\n titleItems?: React.ReactNode | SceneObject | SceneObject[];\n seriesLimit?: number;\n seriesLimitShowAll?: boolean;\n /**\n * Add action to the top right panel header\n */\n headerActions?: React.ReactNode | SceneObject | SceneObject[];\n /**\n * Mainly for advanced use cases that need custom handling of PanelContext callbacks.\n */\n extendPanelContext?: (vizPanel: VizPanel, context: PanelContext) => void;\n\n /**\n * @internal\n * experimental / temporary\n *\n * clears field.values arrays of previous/stale/retained series and annotations frames in PanelData\n *\n * see https://github.com/facebook/react/issues/36176\n * see https://github.com/grafana/grafana/pull/121682\n * see https://github.com/grafana/grafana/pull/120190\n **/\n _UNSAFE_clearPreviousFieldValues?: boolean;\n\n /**\n * Sets panel chrome collapsed state\n */\n collapsible?: boolean;\n collapsed?: boolean;\n /** Marks object as a repeated object and a key pointer to source object */\n repeatSourceKey?: string;\n /**\n * @internal\n * Only for use from core to handle migration from old angular panels\n **/\n _UNSAFE_customMigrationHandler?: (panel: PanelModel, plugin: PanelPlugin) => void;\n /** Internal */\n _pluginLoadError?: string;\n /** Internal */\n _pluginInstanceState?: any;\n _renderCounter?: number;\n}\n\nexport class VizPanel<TOptions = {}, TFieldConfig extends {} = {}> extends SceneObjectBase<\n VizPanelState<TOptions, TFieldConfig>\n> {\n public static Component = VizPanelRenderer;\n\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['title', 'options', 'fieldConfig'],\n onReferencedVariableValueChanged: () => {\n this.clearFieldConfigCache();\n this.forceRender();\n },\n });\n\n // Not part of state as this is not serializable\n protected _panelContext?: PanelContext;\n private _plugin?: PanelPlugin;\n private _prevData?: PanelData;\n private _dataWithFieldConfig?: PanelData;\n private _structureRev = 0;\n\n public constructor(state: Partial<VizPanelState<TOptions, TFieldConfig>>) {\n super({\n options: {} as TOptions,\n fieldConfig: { defaults: {}, overrides: [] },\n title: t('grafana-scenes.components.viz-panel.title.title', 'Title'),\n pluginId: 'timeseries',\n _renderCounter: 0,\n ...state,\n });\n\n this.addActivationHandler(() => {\n this._onActivate();\n });\n\n state.menu?.addActivationHandler(() => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-menu-shown' }), true);\n });\n }\n\n /**\n * Get the VizPanelRenderProfiler behavior if attached\n */\n public getProfiler(): VizPanelRenderProfiler | undefined {\n if (!this.state.$behaviors) {\n return undefined;\n }\n\n for (const behavior of this.state.$behaviors) {\n if (behavior instanceof VizPanelRenderProfiler) {\n return behavior;\n }\n }\n\n return undefined;\n }\n\n private _onActivate() {\n if (!this._plugin) {\n this._loadPlugin(this.state.pluginId);\n }\n }\n\n public forceRender(): void {\n // Incrementing the render counter means VizRepeater and its children will also re-render\n this.setState({ _renderCounter: (this.state._renderCounter ?? 0) + 1 });\n }\n\n private async _loadPlugin(\n pluginId: string,\n overwriteOptions?: DeepPartial<{}>,\n overwriteFieldConfig?: FieldConfigSource,\n isAfterPluginChange?: boolean\n ) {\n const profiler = this.getProfiler();\n const plugin = loadPanelPluginSync(pluginId);\n\n if (plugin) {\n // Plugin was loaded from cache\n const endPluginLoadCallback = profiler?.onPluginLoadStart(pluginId);\n endPluginLoadCallback?.(plugin, true);\n this._pluginLoaded(plugin, overwriteOptions, overwriteFieldConfig, isAfterPluginChange);\n } else {\n const { importPanelPlugin } = getPluginImportUtils();\n\n try {\n // Start profiling plugin load - get end callback\n const endPluginLoadCallback = profiler?.onPluginLoadStart(pluginId);\n\n const panelPromise = importPanelPlugin(pluginId);\n\n const queryControler = sceneGraph.getQueryController(this);\n if (queryControler && queryControler.state.enableProfiling) {\n wrapPromiseInStateObservable(panelPromise)\n .pipe(registerQueryWithController({ type: `VizPanel/loadPlugin/${pluginId}`, origin: this }))\n .subscribe(() => {});\n }\n\n const result = await panelPromise;\n\n // End profiling plugin load (not from cache)\n endPluginLoadCallback?.(result, false);\n\n this._pluginLoaded(result, overwriteOptions, overwriteFieldConfig, isAfterPluginChange);\n } catch (err: unknown) {\n this._pluginLoaded(getPanelPluginNotFound(pluginId));\n\n if (err instanceof Error) {\n this.setState({ _pluginLoadError: err.message });\n }\n }\n }\n }\n\n public getLegacyPanelId() {\n /**\n * The `/` part is here because a panel key can be in a clone chain\n * A clone chain looks like `panel-1-clone-0/grid-item-5/panel-14` where the last part is the panel key\n */\n const parts = this.state.key?.split('/') ?? [];\n\n if (parts.length === 0) {\n return 0;\n }\n\n const part = parts[parts.length - 1];\n const panelId = parseInt(part!.replace('panel-', ''), 10);\n\n if (isNaN(panelId)) {\n return 0;\n }\n\n return panelId;\n }\n\n /**\n * Unique id string that includes local variable values (for repeated panels)\n */\n public getPathId() {\n return buildPathIdFor(this);\n }\n\n private async _pluginLoaded(\n plugin: PanelPlugin,\n overwriteOptions?: DeepPartial<{}>,\n overwriteFieldConfig?: FieldConfigSource,\n isAfterPluginChange?: boolean\n ) {\n const { options, fieldConfig, title, pluginVersion, _UNSAFE_customMigrationHandler } = this.state;\n\n const panel: PanelModel = {\n title,\n options,\n fieldConfig,\n id: this.getLegacyPanelId(),\n type: plugin.meta.id,\n pluginVersion: pluginVersion,\n };\n\n if (overwriteOptions) {\n panel.options = overwriteOptions;\n }\n\n if (overwriteFieldConfig) {\n panel.fieldConfig = overwriteFieldConfig;\n }\n\n const currentVersion = this._getPluginVersion(plugin);\n\n _UNSAFE_customMigrationHandler?.(panel, plugin);\n\n //@ts-expect-error (TODO: remove after upgrading with https://github.com/grafana/grafana/pull/108998)\n const needsMigration = currentVersion !== pluginVersion || plugin.shouldMigrate?.(panel);\n\n if (plugin.onPanelMigration && needsMigration && !isAfterPluginChange) {\n // These migration handlers also mutate panel.fieldConfig to migrate fieldConfig\n panel.options = await plugin.onPanelMigration(panel);\n }\n\n // Some panels mutate the transformations on the panel as part of migrations.\n // Unfortunately, these mutations are not available until the panel plugin is loaded.\n // At this time, the data provider is already set, so this is the easiest way to fix it.\n let $data = this.state.$data;\n if (panel.transformations && $data) {\n if ($data instanceof SceneDataTransformer) {\n $data.setState({ transformations: panel.transformations });\n } else if ($data instanceof SceneQueryRunner) {\n $data.clearParent();\n $data = new SceneDataTransformer({\n transformations: panel.transformations,\n $data,\n });\n }\n }\n\n const withDefaults = getPanelOptionsWithDefaults({\n plugin,\n currentOptions: panel.options,\n currentFieldConfig: panel.fieldConfig,\n isAfterPluginChange: isAfterPluginChange ?? false,\n });\n\n this._plugin = plugin;\n\n this.setState({\n $data,\n options: withDefaults.options as DeepPartial<TOptions>,\n fieldConfig: withDefaults.fieldConfig,\n pluginVersion: currentVersion,\n pluginId: plugin.meta.id,\n });\n\n // Non data panels needs to be re-rendered when time range change\n if (plugin.meta.skipDataQuery) {\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n this._subs.add(sceneTimeRange.subscribeToState(() => this.forceRender()));\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 this._panelContext ??= this.buildPanelContext();\n\n return this._panelContext!;\n }\n\n public onTimeRangeChange = (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 getTimeRange = (data?: PanelData) => {\n const liveNowTimer = sceneGraph.findObject(this, (o) => o instanceof LiveNowTimer);\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n\n if (liveNowTimer instanceof LiveNowTimer && liveNowTimer.isEnabled) {\n return evaluateTimeRange(\n sceneTimeRange.state.from,\n sceneTimeRange.state.to,\n sceneTimeRange.getTimeZone(),\n sceneTimeRange.state.fiscalYearStartMonth,\n sceneTimeRange.state.UNSAFE_nowDelay,\n sceneTimeRange.state.weekStart\n );\n }\n\n const plugin = this.getPlugin();\n if (plugin && !plugin.meta.skipDataQuery && data && data.timeRange) {\n return data.timeRange;\n }\n\n return sceneTimeRange.state.value;\n };\n\n public async changePluginType(pluginId: string, newOptions?: DeepPartial<{}>, newFieldConfig?: FieldConfigSource) {\n const { options: prevOptions, fieldConfig: prevFieldConfig, pluginId: prevPluginId } = this.state;\n\n //clear field config cache to update it later\n this._dataWithFieldConfig = undefined;\n\n // If state.pluginId is already the correct plugin we don't treat this as plain user panel type change\n const isAfterPluginChange = this.state.pluginId !== pluginId;\n await this._loadPlugin(pluginId, newOptions ?? {}, newFieldConfig, isAfterPluginChange);\n\n const panel: PanelModel = {\n title: this.state.title,\n options: this.state.options,\n fieldConfig: this.state.fieldConfig,\n id: 1,\n type: pluginId,\n };\n\n // onPanelTypeChanged is mainly used by plugins to migrate from Angular to React.\n // For example, this will migrate options from 'graph' to 'timeseries' if the previous and new plugin ID matches.\n const updatedOptions = this._plugin?.onPanelTypeChanged?.(panel, prevPluginId, prevOptions, prevFieldConfig);\n\n if (updatedOptions && !isEmpty(updatedOptions)) {\n this.onOptionsChange(updatedOptions, true, true);\n }\n }\n\n public onTitleChange = (title: string) => {\n this.setState({ title });\n };\n\n public onDescriptionChange = (description: string) => {\n this.setState({ description });\n };\n\n public onDisplayModeChange = (displayMode: 'default' | 'transparent') => {\n this.setState({ displayMode });\n };\n\n public onToggleCollapse = (collapsed: boolean) => {\n this.setState({\n collapsed,\n });\n };\n\n public onOptionsChange = (optionsUpdate: DeepPartial<TOptions>, replace = false, isAfterPluginChange = false) => {\n const { fieldConfig, options } = this.state;\n\n // When replace is true, we want to replace the entire options object. Default will be applied.\n const nextOptions = replace\n ? optionsUpdate\n : mergeWith(cloneDeep(options), optionsUpdate, (objValue, srcValue, key, obj) => {\n if (isArray(srcValue)) {\n return srcValue;\n }\n // If customizer returns undefined, merging is handled by the method instead\n // so we need to override the value in the object instead\n if (objValue !== srcValue && typeof srcValue === 'undefined') {\n obj[key] = srcValue;\n return;\n }\n return;\n });\n\n const withDefaults = getPanelOptionsWithDefaults({\n plugin: this._plugin!,\n currentOptions: nextOptions,\n currentFieldConfig: fieldConfig,\n isAfterPluginChange: isAfterPluginChange,\n });\n\n this.setState({\n options: withDefaults.options as DeepPartial<TOptions>,\n _renderCounter: (this.state._renderCounter ?? 0) + 1,\n });\n };\n\n public onFieldConfigChange = (fieldConfigUpdate: FieldConfigSource<DeepPartial<TFieldConfig>>, replace?: boolean) => {\n const { fieldConfig, options } = this.state;\n\n // When replace is true, we want to replace the entire field config. Default will be applied.\n const nextFieldConfig = replace ? fieldConfigUpdate : merge(cloneDeep(fieldConfig), fieldConfigUpdate);\n\n const withDefaults = getPanelOptionsWithDefaults({\n plugin: this._plugin!,\n currentOptions: options,\n currentFieldConfig: nextFieldConfig,\n isAfterPluginChange: false,\n });\n\n this._dataWithFieldConfig = undefined;\n this.setState({ fieldConfig: withDefaults.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 public getDescription = () => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-description-shown' }), true);\n\n const { description } = this.state;\n if (description) {\n const markdown = this.interpolate(description);\n return renderMarkdown(markdown);\n }\n return '';\n };\n\n public clearFieldConfigCache() {\n this._dataWithFieldConfig = undefined;\n }\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 timestamp = performance.now();\n const plugin = this._plugin;\n\n const profiler = this.getProfiler();\n\n if (!plugin || plugin.meta.skipDataQuery || !rawData) {\n // TODO setup time range subscription instead\n return emptyPanelData;\n }\n\n // SceneQueryRunner preserves series array identity when frames haven't changed, but\n // still emits new PanelData on state transitions (onDataReceived). Detect this and skip\n // the expensive applyFieldOverrides step.\n if (this._prevData && this._dataWithFieldConfig) {\n if (this._prevData === rawData) {\n return this._dataWithFieldConfig;\n }\n if (this._prevData.series === rawData.series) {\n this._prevData = rawData;\n this._dataWithFieldConfig = {\n ...rawData,\n structureRev: this._dataWithFieldConfig.structureRev,\n series: this._dataWithFieldConfig.series,\n };\n return this._dataWithFieldConfig;\n }\n }\n\n // Start profiling data processing - get end callback\n const endFieldConfigCallback = profiler?.onFieldConfigStart(timestamp);\n\n const pluginDataSupport: PanelPluginDataSupport = plugin.dataSupport || { alertStates: false, annotations: false };\n\n const fieldConfigRegistry = plugin.fieldConfigRegistry;\n const prevFrames = this._dataWithFieldConfig?.series ?? [];\n const newFrames = applyFieldOverrides({\n data: rawData.series,\n fieldConfig: this.state.fieldConfig,\n fieldConfigRegistry,\n replaceVariables: this.interpolate,\n theme: config.theme2,\n timeZone: rawData.request?.timezone,\n // @ts-ignore - @grafana/data is getting this type in Grafana 13.\n featureToggles: config.featureToggles,\n });\n\n if (!compareArrayValues(newFrames, prevFrames, compareDataFrameStructures)) {\n this._structureRev++;\n }\n\n this._dataWithFieldConfig = {\n ...rawData,\n structureRev: this._structureRev,\n series: newFrames,\n };\n\n if (this._dataWithFieldConfig.annotations) {\n this._dataWithFieldConfig.annotations = applyFieldOverrides({\n data: this._dataWithFieldConfig.annotations,\n fieldConfig: {\n defaults: {},\n overrides: [],\n },\n fieldConfigRegistry,\n replaceVariables: this.interpolate,\n theme: config.theme2,\n timeZone: rawData.request?.timezone,\n // @ts-ignore - @grafana/data is getting this type in Grafana 13.\n featureToggles: config.featureToggles,\n });\n }\n\n if (!pluginDataSupport.alertStates) {\n this._dataWithFieldConfig.alertState = undefined;\n }\n\n if (!pluginDataSupport.annotations) {\n this._dataWithFieldConfig.annotations = undefined;\n }\n\n this._prevData = rawData;\n\n // End profiling data processing\n if (profiler) {\n endFieldConfigCallback?.(performance.now());\n }\n\n return this._dataWithFieldConfig;\n }\n\n public onCancelQuery = () => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-cancel-query-clicked' }), true);\n const data = sceneGraph.getData(this);\n data.cancelQuery?.();\n };\n\n public onStatusMessageClick = () => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-status-message-clicked' }), true);\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 true\n );\n };\n\n private _onInstanceStateChange = (state: any) => {\n if (this._panelContext) {\n this._panelContext = {\n ...this._panelContext,\n instanceState: state,\n };\n }\n\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 {\n ...this.state.options,\n legend: { ...legendOptions, sortBy, sortDesc },\n } as TOptions,\n true\n );\n };\n\n public clone(withState?: Partial<VizPanelState>) {\n // Clear _pluginInstanceState and _pluginLoadError as it's not safe to clone\n return super.clone({ _pluginInstanceState: undefined, _pluginLoadError: undefined, ...withState });\n }\n\n private buildPanelContext(): PanelContext {\n const sync = getCursorSyncScope(this);\n\n const context = {\n eventsScope: sync ? sync.getEventsScope() : '__global_',\n eventBus: sync ? sync.getEventsBus(this) : getAppEvents(),\n app: CoreApp.Unknown,\n sync: () => {\n if (sync) {\n return sync.state.sync;\n }\n return DashboardCursorSync.Off;\n },\n onSeriesColorChange: this._onSeriesColorChange,\n onToggleSeriesVisibility: this._onSeriesVisibilityChange,\n onToggleLegendSort: this._onToggleLegendSort,\n onInstanceStateChange: this._onInstanceStateChange,\n };\n\n if (this.state.extendPanelContext) {\n this.state.extendPanelContext(this, context);\n }\n\n return context;\n }\n}\n\nfunction getPanelPluginNotFound(id: string): PanelPlugin {\n const plugin = new PanelPlugin(() => null);\n\n plugin.meta = {\n id: id,\n name: id,\n sort: 100,\n type: PluginType.panel,\n module: '',\n baseUrl: '',\n info: {\n author: {\n name: '',\n },\n description: '',\n links: [],\n logos: {\n large: '',\n small: 'public/img/grafana_icon.svg',\n },\n screenshots: [],\n updated: '',\n version: '',\n },\n };\n\n return plugin;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VizPanel.js","sources":["../../../../src/components/VizPanel/VizPanel.tsx"],"sourcesContent":["import { t } from '@grafana/i18n';\nimport {\n AbsoluteTimeRange,\n DataFrame,\n DataTopic,\n DataTransformerConfig,\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 PluginType,\n renderMarkdown,\n PanelPluginDataSupport,\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 { CustomTransformerDefinition, 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';\nimport { getCursorSyncScope } from '../../behaviors/CursorSync';\nimport { cloneDeep, isArray, isEmpty, merge, mergeWith } from 'lodash';\nimport { UserActionEvent } from '../../core/events';\nimport { evaluateTimeRange } from '../../utils/evaluateTimeRange';\nimport { LiveNowTimer } from '../../behaviors/LiveNowTimer';\nimport { VizPanelRenderProfiler } from '../../performance/VizPanelRenderProfiler';\nimport { registerQueryWithController, wrapPromiseInStateObservable } from '../../querying/registerQueryWithController';\nimport { SceneDataTransformer } from '../../querying/SceneDataTransformer';\nimport { SceneQueryRunner } from '../../querying/SceneQueryRunner';\nimport { buildPathIdFor } from '../../utils/pathId';\nimport {\n SystemTransformationsProvider,\n TransformationOrigin,\n} from '../../querying/systemTransformations/systemTransformationTypes';\n\nexport interface VizPanelState<TOptions = {}, TFieldConfig = {}> extends SceneObjectState {\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 title: string;\n /** Shown in info icon tooltip next to the title, supports markdown */\n description?: string;\n /** Shown as text below the title, supports markdown */\n subtitle?: string;\n options: DeepPartial<TOptions>;\n fieldConfig: FieldConfigSource<DeepPartial<TFieldConfig>>;\n pluginVersion?: string;\n displayMode?: 'default' | 'transparent';\n /**\n * Only shows header on hover, absolutly positioned above the panel.\n */\n hoverHeader?: boolean;\n /**\n * Offset hoverHeader position on the y axis\n */\n hoverHeaderOffset?: number;\n /**\n * Allows adding elements to the subheader of the panel.\n */\n subHeader?: React.ReactNode | SceneObject | SceneObject[];\n /**\n * Only shows vizPanelMenu on hover if false, otherwise the menu is always visible in the header\n */\n showMenuAlways?: boolean;\n /**\n * Defines a menu in the top right of the panel. The menu object is only activated when the dropdown menu itself is shown.\n * So the best way to add dynamic menu actions and links is by adding them in a behavior attached to the menu.\n */\n menu?: VizPanelMenu;\n /**\n * Defines a menu that renders panel link.\n **/\n titleItems?: React.ReactNode | SceneObject | SceneObject[];\n seriesLimit?: number;\n seriesLimitShowAll?: boolean;\n /**\n * Add action to the top right panel header\n */\n headerActions?: React.ReactNode | SceneObject | SceneObject[];\n /**\n * Mainly for advanced use cases that need custom handling of PanelContext callbacks.\n */\n extendPanelContext?: (vizPanel: VizPanel, context: PanelContext) => void;\n\n /**\n * @internal\n * experimental / temporary\n *\n * clears field.values arrays of previous/stale/retained series and annotations frames in PanelData\n *\n * see https://github.com/facebook/react/issues/36176\n * see https://github.com/grafana/grafana/pull/121682\n * see https://github.com/grafana/grafana/pull/120190\n **/\n _UNSAFE_clearPreviousFieldValues?: boolean;\n\n /**\n * Whether to check the panel plugin for system transformations. Set by host to gate rollout (feature toggle)\n */\n applyPluginTransformations?: boolean;\n\n /**\n * Sets panel chrome collapsed state\n */\n collapsible?: boolean;\n collapsed?: boolean;\n /** Marks object as a repeated object and a key pointer to source object */\n repeatSourceKey?: string;\n /**\n * @internal\n * Only for use from core to handle migration from old angular panels\n **/\n _UNSAFE_customMigrationHandler?: (panel: PanelModel, plugin: PanelPlugin) => void;\n /** Internal */\n _pluginLoadError?: string;\n /** Internal */\n _pluginInstanceState?: any;\n _renderCounter?: number;\n}\n\nexport class VizPanel<TOptions = {}, TFieldConfig extends {} = {}>\n extends SceneObjectBase<VizPanelState<TOptions, TFieldConfig>>\n implements SystemTransformationsProvider\n{\n public static Component = VizPanelRenderer;\n\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['title', 'options', 'fieldConfig'],\n onReferencedVariableValueChanged: () => {\n this.clearFieldConfigCache();\n this.forceRender();\n },\n });\n\n // Not part of state as this is not serializable\n protected _panelContext?: PanelContext;\n /**\n * The plugin this panel has adopted: options have been migrated and defaulted against it, so it\n * deliberately lags state.pluginId while a viz type change is still loading.\n */\n private _plugin?: PanelPlugin;\n /** The in-flight import, so concurrent callers share one. */\n private _pluginImport?: { pluginId: string; promise: Promise<PanelPlugin> };\n private _prevData?: PanelData;\n private _dataWithFieldConfig?: PanelData;\n private _structureRev = 0;\n\n public constructor(state: Partial<VizPanelState<TOptions, TFieldConfig>>) {\n super({\n options: {} as TOptions,\n fieldConfig: { defaults: {}, overrides: [] },\n title: t('grafana-scenes.components.viz-panel.title.title', 'Title'),\n pluginId: 'timeseries',\n _renderCounter: 0,\n ...state,\n });\n\n this.addActivationHandler(() => {\n this._onActivate();\n });\n\n state.menu?.addActivationHandler(() => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-menu-shown' }), true);\n });\n }\n\n /**\n * Get the VizPanelRenderProfiler behavior if attached\n */\n public getProfiler(): VizPanelRenderProfiler | undefined {\n if (!this.state.$behaviors) {\n return undefined;\n }\n\n for (const behavior of this.state.$behaviors) {\n if (behavior instanceof VizPanelRenderProfiler) {\n return behavior;\n }\n }\n\n return undefined;\n }\n\n private _onActivate() {\n if (!this._plugin) {\n this._loadPlugin(this.state.pluginId);\n }\n }\n\n public forceRender(): void {\n // Incrementing the render counter means VizRepeater and its children will also re-render\n this.setState({ _renderCounter: (this.state._renderCounter ?? 0) + 1 });\n }\n\n private async _loadPlugin(\n pluginId: string,\n overwriteOptions?: DeepPartial<{}>,\n overwriteFieldConfig?: FieldConfigSource,\n isAfterPluginChange?: boolean\n ) {\n const profiler = this.getProfiler();\n const plugin = loadPanelPluginSync(pluginId);\n\n if (plugin) {\n // Plugin was loaded from cache\n const endPluginLoadCallback = profiler?.onPluginLoadStart(pluginId);\n endPluginLoadCallback?.(plugin, true);\n this._pluginLoaded(plugin, overwriteOptions, overwriteFieldConfig, isAfterPluginChange);\n } else {\n try {\n // Start profiling plugin load - get end callback\n const endPluginLoadCallback = profiler?.onPluginLoadStart(pluginId);\n\n const result = await this._importPlugin(pluginId);\n\n // End profiling plugin load (not from cache)\n endPluginLoadCallback?.(result, false);\n\n this._pluginLoaded(result, overwriteOptions, overwriteFieldConfig, isAfterPluginChange);\n } catch (err: unknown) {\n this._pluginLoaded(getPanelPluginNotFound(pluginId));\n\n if (err instanceof Error) {\n this.setState({ _pluginLoadError: err.message });\n }\n }\n }\n }\n\n /**\n * The only place the plugin is imported. Concurrent callers (_loadPlugin, getPluginAsync) share one import,\n * and a rejection stays cached so a plugin that fails to load is not retried on every call.\n */\n private _importPlugin(pluginId: string): Promise<PanelPlugin> {\n if (this._pluginImport?.pluginId === pluginId) {\n return this._pluginImport.promise;\n }\n\n const promise = getPluginImportUtils().importPanelPlugin(pluginId);\n\n const queryControler = sceneGraph.getQueryController(this);\n if (queryControler && queryControler.state.enableProfiling) {\n wrapPromiseInStateObservable(promise)\n .pipe(registerQueryWithController({ type: `VizPanel/loadPlugin/${pluginId}`, origin: this }))\n .subscribe(() => {});\n }\n\n this._pluginImport = { pluginId, promise };\n\n return promise;\n }\n\n public getLegacyPanelId() {\n /**\n * The `/` part is here because a panel key can be in a clone chain\n * A clone chain looks like `panel-1-clone-0/grid-item-5/panel-14` where the last part is the panel key\n */\n const parts = this.state.key?.split('/') ?? [];\n\n if (parts.length === 0) {\n return 0;\n }\n\n const part = parts[parts.length - 1];\n const panelId = parseInt(part!.replace('panel-', ''), 10);\n\n if (isNaN(panelId)) {\n return 0;\n }\n\n return panelId;\n }\n\n /**\n * Unique id string that includes local variable values (for repeated panels)\n */\n public getPathId() {\n return buildPathIdFor(this);\n }\n\n private async _pluginLoaded(\n plugin: PanelPlugin,\n overwriteOptions?: DeepPartial<{}>,\n overwriteFieldConfig?: FieldConfigSource,\n isAfterPluginChange?: boolean\n ) {\n const { options, fieldConfig, title, pluginVersion, _UNSAFE_customMigrationHandler } = this.state;\n\n const panel: PanelModel = {\n title,\n options,\n fieldConfig,\n id: this.getLegacyPanelId(),\n type: plugin.meta.id,\n pluginVersion: pluginVersion,\n };\n\n if (overwriteOptions) {\n panel.options = overwriteOptions;\n }\n\n if (overwriteFieldConfig) {\n panel.fieldConfig = overwriteFieldConfig;\n }\n\n const currentVersion = this._getPluginVersion(plugin);\n\n _UNSAFE_customMigrationHandler?.(panel, plugin);\n\n //@ts-expect-error (TODO: remove after upgrading with https://github.com/grafana/grafana/pull/108998)\n const needsMigration = currentVersion !== pluginVersion || plugin.shouldMigrate?.(panel);\n\n if (plugin.onPanelMigration && needsMigration && !isAfterPluginChange) {\n // These migration handlers also mutate panel.fieldConfig to migrate fieldConfig\n panel.options = await plugin.onPanelMigration(panel);\n }\n\n // Some panels mutate the transformations on the panel as part of migrations.\n // Unfortunately, these mutations are not available until the panel plugin is loaded.\n // At this time, the data provider is already set, so this is the easiest way to fix it.\n let $data = this.state.$data;\n if (panel.transformations && $data) {\n if ($data instanceof SceneDataTransformer) {\n $data.setState({ transformations: panel.transformations });\n } else if ($data instanceof SceneQueryRunner) {\n $data.clearParent();\n $data = new SceneDataTransformer({\n transformations: panel.transformations,\n $data,\n });\n }\n }\n\n const withDefaults = getPanelOptionsWithDefaults({\n plugin,\n currentOptions: panel.options,\n currentFieldConfig: panel.fieldConfig,\n isAfterPluginChange: isAfterPluginChange ?? false,\n });\n\n this._plugin = plugin;\n\n this.setState({\n $data,\n options: withDefaults.options as DeepPartial<TOptions>,\n fieldConfig: withDefaults.fieldConfig,\n pluginVersion: currentVersion,\n pluginId: plugin.meta.id,\n });\n\n // The plugin arrives async so the pipeline may have already run a pass without its system\n // transformations.\n if (\n this.state.applyPluginTransformations && // does panel support system transformations?\n $data instanceof SceneDataTransformer &&\n $data.isActive &&\n // the plugin supplies a provider method, or a previous one did and its transformations must come back out\n (pluginProvidesSystemTransformations(plugin) || $data.hasAppliedSystemTransformations())\n ) {\n $data.reprocessTransformations();\n }\n\n // Non data panels needs to be re-rendered when time range change\n if (plugin.meta.skipDataQuery) {\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n this._subs.add(sceneTimeRange.subscribeToState(() => this.forceRender()));\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 /**\n * The plugin this panel has adopted, or undefined while it is still loading.\n */\n public getPlugin(): PanelPlugin | undefined {\n return this._plugin;\n }\n\n /**\n * The plugin for the current state.pluginId, importing it if it is not loaded yet. Rejects when\n * the import does, like the host's importPanelPlugin.\n *\n * Unlike getPlugin this does not return undefined merely because the import has not finished, and\n * it does not wait on the panel being activated. It does not adopt what it resolves: option\n * migrations and the state write stay with _loadPlugin, on the render and viz change paths.\n */\n public getPluginAsync(): Promise<PanelPlugin> {\n const resolved = this._resolvePluginSync();\n\n return resolved ? Promise.resolve(resolved) : this._importPlugin(this.state.pluginId);\n }\n\n /**\n * The plugin for the current state.pluginId when it is available without importing: the one this\n * panel adopted, or one already in the host's cache.\n */\n private _resolvePluginSync(): PanelPlugin | undefined {\n const { pluginId } = this.state;\n\n return this._plugin?.meta.id === pluginId ? this._plugin : loadPanelPluginSync(pluginId);\n }\n\n /**\n * @internal\n * Marks this panel as a SystemTransformationsProvider; not for app code.\n */\n public readonly isSystemTransformationsProvider: true = true;\n\n /**\n * @internal\n * Identifies this panel's tier in its data pipeline; not for app code.\n */\n public readonly origin: TransformationOrigin = 'plugin';\n\n /**\n * @internal\n * Called by the SceneDataTransformer that discovered this panel with the frames about to enter the pipeline.\n */\n public getSystemTransformations({ series }: { series: DataFrame[] }): {\n prepend?: Array<DataTransformerConfig | CustomTransformerDefinition>;\n append?: Array<DataTransformerConfig | CustomTransformerDefinition>;\n } {\n if (series.length === 0) {\n return {};\n }\n\n const plugin = this._pluginForTransformations();\n\n return plugin ? getPluginSystemTransformations(plugin, { series }) : {};\n }\n\n /**\n * The plugin that contributes the transformations for this panel.\n */\n private _pluginForTransformations(): PanelPlugin | undefined {\n return this.state.applyPluginTransformations ? this._resolvePluginSync() : undefined;\n }\n\n public getPanelContext(): PanelContext {\n this._panelContext ??= this.buildPanelContext();\n\n return this._panelContext!;\n }\n\n public onTimeRangeChange = (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 getTimeRange = (data?: PanelData) => {\n const liveNowTimer = sceneGraph.findObject(this, (o) => o instanceof LiveNowTimer);\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n\n if (liveNowTimer instanceof LiveNowTimer && liveNowTimer.isEnabled) {\n return evaluateTimeRange(\n sceneTimeRange.state.from,\n sceneTimeRange.state.to,\n sceneTimeRange.getTimeZone(),\n sceneTimeRange.state.fiscalYearStartMonth,\n sceneTimeRange.state.UNSAFE_nowDelay,\n sceneTimeRange.state.weekStart\n );\n }\n\n const plugin = this.getPlugin();\n if (plugin && !plugin.meta.skipDataQuery && data && data.timeRange) {\n return data.timeRange;\n }\n\n return sceneTimeRange.state.value;\n };\n\n public async changePluginType(pluginId: string, newOptions?: DeepPartial<{}>, newFieldConfig?: FieldConfigSource) {\n const { options: prevOptions, fieldConfig: prevFieldConfig, pluginId: prevPluginId } = this.state;\n\n //clear field config cache to update it later\n this._dataWithFieldConfig = undefined;\n\n // If state.pluginId is already the correct plugin we don't treat this as plain user panel type change\n const isAfterPluginChange = this.state.pluginId !== pluginId;\n await this._loadPlugin(pluginId, newOptions ?? {}, newFieldConfig, isAfterPluginChange);\n\n const panel: PanelModel = {\n title: this.state.title,\n options: this.state.options,\n fieldConfig: this.state.fieldConfig,\n id: 1,\n type: pluginId,\n };\n\n // onPanelTypeChanged is mainly used by plugins to migrate from Angular to React.\n // For example, this will migrate options from 'graph' to 'timeseries' if the previous and new plugin ID matches.\n const updatedOptions = this._plugin?.onPanelTypeChanged?.(panel, prevPluginId, prevOptions, prevFieldConfig);\n\n if (updatedOptions && !isEmpty(updatedOptions)) {\n this.onOptionsChange(updatedOptions, true, true);\n }\n }\n\n public onTitleChange = (title: string) => {\n this.setState({ title });\n };\n\n public onDescriptionChange = (description: string) => {\n this.setState({ description });\n };\n\n public onDisplayModeChange = (displayMode: 'default' | 'transparent') => {\n this.setState({ displayMode });\n };\n\n public onToggleCollapse = (collapsed: boolean) => {\n this.setState({\n collapsed,\n });\n };\n\n public onOptionsChange = (optionsUpdate: DeepPartial<TOptions>, replace = false, isAfterPluginChange = false) => {\n const { fieldConfig, options } = this.state;\n\n // When replace is true, we want to replace the entire options object. Default will be applied.\n const nextOptions = replace\n ? optionsUpdate\n : mergeWith(cloneDeep(options), optionsUpdate, (objValue, srcValue, key, obj) => {\n if (isArray(srcValue)) {\n return srcValue;\n }\n // If customizer returns undefined, merging is handled by the method instead\n // so we need to override the value in the object instead\n if (objValue !== srcValue && typeof srcValue === 'undefined') {\n obj[key] = srcValue;\n return;\n }\n return;\n });\n\n const withDefaults = getPanelOptionsWithDefaults({\n plugin: this._plugin!,\n currentOptions: nextOptions,\n currentFieldConfig: fieldConfig,\n isAfterPluginChange: isAfterPluginChange,\n });\n\n this.setState({\n options: withDefaults.options as DeepPartial<TOptions>,\n _renderCounter: (this.state._renderCounter ?? 0) + 1,\n });\n };\n\n public onFieldConfigChange = (fieldConfigUpdate: FieldConfigSource<DeepPartial<TFieldConfig>>, replace?: boolean) => {\n const { fieldConfig, options } = this.state;\n\n // When replace is true, we want to replace the entire field config. Default will be applied.\n const nextFieldConfig = replace ? fieldConfigUpdate : merge(cloneDeep(fieldConfig), fieldConfigUpdate);\n\n const withDefaults = getPanelOptionsWithDefaults({\n plugin: this._plugin!,\n currentOptions: options,\n currentFieldConfig: nextFieldConfig,\n isAfterPluginChange: false,\n });\n\n this._dataWithFieldConfig = undefined;\n this.setState({ fieldConfig: withDefaults.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 public getDescription = () => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-description-shown' }), true);\n\n const { description } = this.state;\n if (description) {\n const markdown = this.interpolate(description);\n return renderMarkdown(markdown);\n }\n return '';\n };\n\n public clearFieldConfigCache() {\n this._dataWithFieldConfig = undefined;\n }\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 timestamp = performance.now();\n const plugin = this._plugin;\n\n const profiler = this.getProfiler();\n\n if (!plugin || plugin.meta.skipDataQuery || !rawData) {\n // TODO setup time range subscription instead\n return emptyPanelData;\n }\n\n // SceneQueryRunner preserves series array identity when frames haven't changed, but\n // still emits new PanelData on state transitions (onDataReceived). Detect this and skip\n // the expensive applyFieldOverrides step.\n if (this._prevData && this._dataWithFieldConfig) {\n if (this._prevData === rawData) {\n return this._dataWithFieldConfig;\n }\n if (this._prevData.series === rawData.series) {\n this._prevData = rawData;\n this._dataWithFieldConfig = {\n ...rawData,\n structureRev: this._dataWithFieldConfig.structureRev,\n series: this._dataWithFieldConfig.series,\n };\n return this._dataWithFieldConfig;\n }\n }\n\n // Start profiling data processing - get end callback\n const endFieldConfigCallback = profiler?.onFieldConfigStart(timestamp);\n\n const pluginDataSupport: PanelPluginDataSupport = plugin.dataSupport || { alertStates: false, annotations: false };\n\n const fieldConfigRegistry = plugin.fieldConfigRegistry;\n const prevFrames = this._dataWithFieldConfig?.series ?? [];\n const newFrames = applyFieldOverrides({\n data: rawData.series,\n fieldConfig: this.state.fieldConfig,\n fieldConfigRegistry,\n replaceVariables: this.interpolate,\n theme: config.theme2,\n timeZone: rawData.request?.timezone,\n // @ts-ignore - @grafana/data is getting this type in Grafana 13.\n featureToggles: config.featureToggles,\n });\n\n if (!compareArrayValues(newFrames, prevFrames, compareDataFrameStructures)) {\n this._structureRev++;\n }\n\n this._dataWithFieldConfig = {\n ...rawData,\n structureRev: this._structureRev,\n series: newFrames,\n };\n\n if (this._dataWithFieldConfig.annotations) {\n this._dataWithFieldConfig.annotations = applyFieldOverrides({\n data: this._dataWithFieldConfig.annotations,\n fieldConfig: {\n defaults: {},\n overrides: [],\n },\n fieldConfigRegistry,\n replaceVariables: this.interpolate,\n theme: config.theme2,\n timeZone: rawData.request?.timezone,\n // @ts-ignore - @grafana/data is getting this type in Grafana 13.\n featureToggles: config.featureToggles,\n });\n }\n\n if (!pluginDataSupport.alertStates) {\n this._dataWithFieldConfig.alertState = undefined;\n }\n\n if (!pluginDataSupport.annotations) {\n this._dataWithFieldConfig.annotations = undefined;\n }\n\n this._prevData = rawData;\n\n // End profiling data processing\n if (profiler) {\n endFieldConfigCallback?.(performance.now());\n }\n\n return this._dataWithFieldConfig;\n }\n\n public onCancelQuery = () => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-cancel-query-clicked' }), true);\n const data = sceneGraph.getData(this);\n data.cancelQuery?.();\n };\n\n public onStatusMessageClick = () => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-status-message-clicked' }), true);\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 true\n );\n };\n\n private _onInstanceStateChange = (state: any) => {\n if (this._panelContext) {\n this._panelContext = {\n ...this._panelContext,\n instanceState: state,\n };\n }\n\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 {\n ...this.state.options,\n legend: { ...legendOptions, sortBy, sortDesc },\n } as TOptions,\n true\n );\n };\n\n public clone(withState?: Partial<VizPanelState>) {\n // Clear _pluginInstanceState and _pluginLoadError as it's not safe to clone\n return super.clone({ _pluginInstanceState: undefined, _pluginLoadError: undefined, ...withState });\n }\n\n private buildPanelContext(): PanelContext {\n const sync = getCursorSyncScope(this);\n\n const context = {\n eventsScope: sync ? sync.getEventsScope() : '__global_',\n eventBus: sync ? sync.getEventsBus(this) : getAppEvents(),\n app: CoreApp.Unknown,\n sync: () => {\n if (sync) {\n return sync.state.sync;\n }\n return DashboardCursorSync.Off;\n },\n onSeriesColorChange: this._onSeriesColorChange,\n onToggleSeriesVisibility: this._onSeriesVisibilityChange,\n onToggleLegendSort: this._onToggleLegendSort,\n onInstanceStateChange: this._onInstanceStateChange,\n };\n\n if (this.state.extendPanelContext) {\n this.state.extendPanelContext(this, context);\n }\n\n return context;\n }\n}\n\nfunction getPanelPluginNotFound(id: string): PanelPlugin {\n const plugin = new PanelPlugin(() => null);\n\n plugin.meta = {\n id: id,\n name: id,\n sort: 100,\n type: PluginType.panel,\n module: '',\n baseUrl: '',\n info: {\n author: {\n name: '',\n },\n description: '',\n links: [],\n logos: {\n large: '',\n small: 'public/img/grafana_icon.svg',\n },\n screenshots: [],\n updated: '',\n version: '',\n },\n };\n\n return plugin;\n}\n\n/**\n * The subset of PanelPlugin that carries panel plugin defined transformations.\n * This is a Grafana 13 addition to PanelPlugin, while scenes builds against\n * @grafana/data >= 11.6, so this file has to compile and behave against versions that lack it.\n */\ninterface PluginWithSystemTransformations {\n getSystemTransformations(ctx: { series: DataFrame[] }): {\n prepend?: Array<DataTransformerConfig | CustomTransformerDefinition>;\n append?: Array<DataTransformerConfig | CustomTransformerDefinition>;\n };\n}\n\n/**\n * Whether the plugin implements the contract\n */\nfunction pluginProvidesSystemTransformations(\n plugin: PanelPlugin\n): plugin is PanelPlugin & PluginWithSystemTransformations {\n // @todo remove type assertion after scenes builds against updated PanelPlugin in Grafana 13\n return typeof (plugin as Partial<PluginWithSystemTransformations>).getSystemTransformations === 'function';\n}\n\n/**\n * Internal helper - resolves system transformations from the plugin\n */\nfunction getPluginSystemTransformations(\n plugin: PanelPlugin,\n ctx: { series: DataFrame[] }\n): {\n prepend?: Array<DataTransformerConfig | CustomTransformerDefinition>;\n append?: Array<DataTransformerConfig | CustomTransformerDefinition>;\n} {\n if (!pluginProvidesSystemTransformations(plugin)) {\n return {};\n }\n\n const { prepend = [], append = [] } = plugin.getSystemTransformations(ctx) ?? {};\n\n // The contract supports the series topic only.\n return { prepend: prepend.filter(appliesToSeriesTopic), append: append.filter(appliesToSeriesTopic) };\n}\n\n/**\n * Internal helper - checks if the transformation applies to series\n */\nfunction appliesToSeriesTopic(transformation: DataTransformerConfig | CustomTransformerDefinition): boolean {\n if (typeof transformation === 'function') {\n return true;\n }\n\n return transformation.topic == null || transformation.topic === DataTopic.Series;\n}\n"],"names":[],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -99,6 +99,7 @@ export { getExploreURL } from './utils/explore.js';
|
|
|
99
99
|
export { getCompareSeriesRefId } from './utils/getCompareSeriesRefId.js';
|
|
100
100
|
export { timeShiftAlignmentProcessor } from './utils/timeShiftAlignmentProcessor.js';
|
|
101
101
|
export { loadResources } from './utils/loadResources.js';
|
|
102
|
+
export { isSystemTransformationsProvider } from './querying/systemTransformations/systemTransformationProvider.js';
|
|
102
103
|
export { FieldConfigBuilders } from './core/PanelBuilders/FieldConfigBuilders.js';
|
|
103
104
|
export { FieldConfigOverridesBuilder } from './core/PanelBuilders/FieldConfigOverridesBuilder.js';
|
|
104
105
|
export { PanelOptionsBuilders } from './core/PanelBuilders/PanelOptionsBuilders.js';
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { getUrlWithAppState } from './components/SceneApp/utils';\nimport { registerRuntimePanelPlugin } from './components/VizPanel/registerRuntimePanelPlugin';\nimport { cloneSceneObjectState } from './core/sceneGraph/cloneSceneObject';\nimport { registerRuntimeDataSource } from './querying/RuntimeDataSource';\nimport { getUrlState, syncStateFromSearchParams } from './services/utils';\nimport { buildPathIdFor } from './utils/pathId';\nimport { isRepeatCloneOrChildOf } from './utils/utils';\n\nimport { registerVariableMacro } from './variables/macros';\nimport {\n escapeLabelValueInExactSelector,\n escapeLabelValueInRegexSelector,\n escapeURLDelimiters,\n renderPrometheusLabelFilters,\n getVariableControlId,\n} from './variables/utils';\nimport {\n isAdHocVariable,\n isQueryVariable,\n isTextBoxVariable,\n isCustomVariable,\n isDataSourceVariable,\n isConstantVariable,\n isIntervalVariable,\n isGroupByVariable,\n isSwitchVariable,\n} from './variables/variants/guards';\n\nexport * from './core/types';\nexport * from './core/events';\nexport { sceneGraph } from './core/sceneGraph';\nexport { getClosest } from './core/sceneGraph/utils';\nexport * as behaviors from './behaviors';\nexport * as performanceUtils from './performance';\nexport { writePerformanceLog } from './utils/writePerformanceLog';\nexport * as dataLayers from './querying/layers';\n\nexport { SceneObjectBase, useSceneObjectState } from './core/SceneObjectBase';\nexport { SceneDataNode } from './core/SceneDataNode';\nexport { SceneTimeRange } from './core/SceneTimeRange';\nexport { SceneTimeZoneOverride } from './core/SceneTimeZoneOverride';\n\nexport { SceneQueryRunner, type QueryRunnerState } from './querying/SceneQueryRunner';\nexport { DataProviderProxy } from './querying/DataProviderProxy';\nexport {\n type ExtraQueryDescriptor,\n type ExtraQueryProvider,\n type ExtraQueryDataProcessor,\n} from './querying/ExtraQueryProvider';\nexport { SceneDataLayerSet, SceneDataLayerSetBase } from './querying/SceneDataLayerSet';\nexport { SceneDataLayerBase } from './querying/layers/SceneDataLayerBase';\nexport { SceneDataLayerControls } from './querying/layers/SceneDataLayerControls';\nexport { SceneDataTransformer, type SceneDataTransformerState } from './querying/SceneDataTransformer';\nexport { registerQueryWithController } from './querying/registerQueryWithController';\nexport { registerRuntimeDataSource, RuntimeDataSource } from './querying/RuntimeDataSource';\nexport type {\n SceneQueryControllerLike,\n SceneQueryControllerEntryType,\n SceneQueryControllerEntry,\n} from './behaviors/types';\n\nexport type { AdHocFilterInteractionHandler } from './core/sceneGraph/getReportInteractionHandler';\n\nexport * from './variables/types';\nexport { VariableDependencyConfig } from './variables/VariableDependencyConfig';\nexport { formatRegistry, type FormatVariable } from './variables/interpolation/formatRegistry';\nexport { VariableValueSelectors } from './variables/components/VariableValueSelectors';\nexport { VariableValueControl } from './variables/components/VariableValueControl';\nexport { SceneVariableSet } from './variables/sets/SceneVariableSet';\nexport { ConstantVariable } from './variables/variants/ConstantVariable';\nexport { CustomVariable } from './variables/variants/CustomVariable';\nexport { SwitchVariable } from './variables/variants/SwitchVariable';\nexport { DataSourceVariable } from './variables/variants/DataSourceVariable';\nexport { QueryVariable } from './variables/variants/query/QueryVariable';\nexport { TestVariable } from './variables/variants/TestVariable';\nexport { TextBoxVariable } from './variables/variants/TextBoxVariable';\nexport { ScopesVariable } from './variables/variants/ScopesVariable';\nexport {\n MultiValueVariable,\n type MultiValueVariableState,\n type VariableGetOptionsArgs,\n} from './variables/variants/MultiValueVariable';\nexport { LocalValueVariable } from './variables/variants/LocalValueVariable';\nexport { IntervalVariable } from './variables/variants/IntervalVariable';\nexport {\n AdHocFiltersVariable,\n OPERATORS,\n GROUP_BY_OPERATOR,\n isGroupByFilter,\n type OperatorDefinition,\n} from './variables/adhoc/AdHocFiltersVariable';\nexport type { AdHocFilterWithLabels } from './variables/adhoc/AdHocFiltersVariable';\nexport type {\n AdHocFiltersController,\n AdHocFiltersControllerState,\n} from './variables/adhoc/controller/AdHocFiltersController';\nexport { AdHocFiltersVariableController } from './variables/adhoc/controller/AdHocFiltersVariableController';\nexport { AdHocFiltersComboboxRenderer } from './variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer';\nexport { GroupByVariable } from './variables/groupby/GroupByVariable';\nexport { type MacroVariableConstructor } from './variables/macros/types';\nexport { escapeUrlPipeDelimiters, getQueriesForVariables } from './variables/utils';\n\nexport {\n type UrlSyncManagerLike,\n UrlSyncManager,\n NewSceneObjectAddedEvent,\n SceneObjectRemovedEvent,\n} from './services/UrlSyncManager';\nexport { useUrlSync } from './services/useUrlSync';\nexport { UrlSyncContextProvider } from './services/UrlSyncContextProvider';\nexport { SceneObjectUrlSyncConfig } from './services/SceneObjectUrlSyncConfig';\n\nexport { EmbeddedScene, type EmbeddedSceneState } from './components/EmbeddedScene';\nexport { VizPanel, type VizPanelState } from './components/VizPanel/VizPanel';\nexport { VizPanelFitScope, type VizPanelFitScopeProps } from './components/VizPanel/VizPanelFitContext';\nexport { VizPanelMenu } from './components/VizPanel/VizPanelMenu';\nexport { VizPanelExploreButton } from './components/VizPanel/VizPanelExploreButton';\nexport { NestedScene } from './components/NestedScene';\nexport { SceneCanvasText } from './components/SceneCanvasText';\nexport { SceneToolbarButton, SceneToolbarInput } from './components/SceneToolbarButton';\nexport { SceneTimePicker } from './components/SceneTimePicker';\nexport { SceneRefreshPicker, type SceneRefreshPickerState } from './components/SceneRefreshPicker';\nexport { SceneTimeRangeTransformerBase } from './core/SceneTimeRangeTransformerBase';\nexport { SceneTimeRangeCompare } from './components/SceneTimeRangeCompare';\nexport { SceneByFrameRepeater } from './components/SceneByFrameRepeater';\nexport { SceneByVariableRepeater } from './components/SceneByVariableRepeater';\nexport { SceneControlsSpacer } from './components/SceneControlsSpacer';\nexport {\n SceneFlexLayout,\n SceneFlexItem,\n type SceneFlexItemPlacement,\n type SceneFlexItemState,\n type SceneFlexItemLike,\n} from './components/layout/SceneFlexLayout';\nexport { SceneCSSGridLayout, SceneCSSGridItem } from './components/layout/CSSGrid/SceneCSSGridLayout';\nexport { SceneGridLayout } from './components/layout/grid/SceneGridLayout';\nexport { SceneGridLayoutDragStartEvent } from './components/layout/grid/types';\nexport { GRID_CELL_HEIGHT, GRID_COLUMN_COUNT } from './components/layout/grid/constants';\nexport { SceneGridItem } from './components/layout/grid/SceneGridItem';\nexport { SceneGridRow } from './components/layout/grid/SceneGridRow';\nexport { type SceneGridItemStateLike, type SceneGridItemLike } from './components/layout/grid/types';\nexport { SplitLayout } from './components/layout/split/SplitLayout';\nexport { LazyLoader, type LazyLoaderMode } from './components/layout/LazyLoader';\nexport {\n type SceneAppPageLike,\n type SceneRouteMatch,\n type SceneAppPageState,\n type SceneAppDrilldownView,\n type SceneAppRoute,\n} from './components/SceneApp/types';\nexport { SceneApp, useSceneApp } from './components/SceneApp/SceneApp';\nexport { SceneAppPage } from './components/SceneApp/SceneAppPage';\nexport { SceneReactObject } from './components/SceneReactObject';\nexport { SceneObjectRef } from './core/SceneObjectRef';\nexport {\n PanelBuilders,\n PanelOptionsBuilders,\n FieldConfigBuilders,\n FieldConfigOverridesBuilder,\n} from './core/PanelBuilders';\nexport { FieldConfigBuilder } from './core/PanelBuilders/FieldConfigBuilder';\nexport { VizPanelBuilder } from './core/PanelBuilders/VizPanelBuilder';\nexport { SceneDebugger } from './components/SceneDebugger/SceneDebugger';\nexport { VariableValueSelectWrapper } from './variables/components/VariableValueSelectors';\nexport { ControlsLabel } from './utils/ControlsLabel';\nexport { MultiOrSingleValueSelect } from './variables/components/VariableValueSelect';\nexport { VizConfigBuilder } from './core/PanelBuilders/VizConfigBuilder';\nexport { VizConfigBuilders } from './core/PanelBuilders/VizConfigBuilders';\nexport { type VizConfig } from './core/PanelBuilders/types';\n\nexport const sceneUtils = {\n getUrlWithAppState,\n registerRuntimePanelPlugin,\n registerRuntimeDataSource,\n registerVariableMacro,\n cloneSceneObjectState,\n syncStateFromSearchParams,\n getUrlState,\n renderPrometheusLabelFilters,\n escapeLabelValueInRegexSelector,\n escapeLabelValueInExactSelector,\n escapeURLDelimiters,\n getVariableControlId,\n\n // Variable guards\n isAdHocVariable,\n isConstantVariable,\n isCustomVariable,\n isDataSourceVariable,\n isIntervalVariable,\n isQueryVariable,\n isTextBoxVariable,\n isGroupByVariable,\n isSwitchVariable,\n isRepeatCloneOrChildOf,\n buildPathIdFor,\n};\n\nexport { SafeSerializableSceneObject } from './utils/SafeSerializableSceneObject';\nexport { getExploreURL } from './utils/explore';\nexport { getCompareSeriesRefId } from './utils/getCompareSeriesRefId';\nexport { timeShiftAlignmentProcessor } from './utils/timeShiftAlignmentProcessor';\nexport { loadResources } from './utils/loadResources';\nexport { PATH_ID_SEPARATOR } from './utils/pathId';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0KO,MAAM,UAAA,GAAa;AAAA,EACxB,kBAAA;AAAA,EACA,0BAAA;AAAA,EACA,yBAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,WAAA;AAAA,EACA,4BAAA;AAAA,EACA,+BAAA;AAAA,EACA,+BAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA;AAAA,EAGA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { getUrlWithAppState } from './components/SceneApp/utils';\nimport { registerRuntimePanelPlugin } from './components/VizPanel/registerRuntimePanelPlugin';\nimport { cloneSceneObjectState } from './core/sceneGraph/cloneSceneObject';\nimport { registerRuntimeDataSource } from './querying/RuntimeDataSource';\nimport { getUrlState, syncStateFromSearchParams } from './services/utils';\nimport { buildPathIdFor } from './utils/pathId';\nimport { isRepeatCloneOrChildOf } from './utils/utils';\n\nimport { registerVariableMacro } from './variables/macros';\nimport {\n escapeLabelValueInExactSelector,\n escapeLabelValueInRegexSelector,\n escapeURLDelimiters,\n getVariableControlId,\n renderPrometheusLabelFilters,\n} from './variables/utils';\nimport {\n isAdHocVariable,\n isConstantVariable,\n isCustomVariable,\n isDataSourceVariable,\n isGroupByVariable,\n isIntervalVariable,\n isQueryVariable,\n isSwitchVariable,\n isTextBoxVariable,\n} from './variables/variants/guards';\n\nexport * from './core/types';\nexport * from './core/events';\nexport { sceneGraph } from './core/sceneGraph';\nexport { getClosest } from './core/sceneGraph/utils';\nexport * as behaviors from './behaviors';\nexport * as performanceUtils from './performance';\nexport { writePerformanceLog } from './utils/writePerformanceLog';\nexport * as dataLayers from './querying/layers';\n\nexport { SceneObjectBase, useSceneObjectState } from './core/SceneObjectBase';\nexport { SceneDataNode } from './core/SceneDataNode';\nexport { SceneTimeRange } from './core/SceneTimeRange';\nexport { SceneTimeZoneOverride } from './core/SceneTimeZoneOverride';\n\nexport { SceneQueryRunner, type QueryRunnerState } from './querying/SceneQueryRunner';\nexport { DataProviderProxy } from './querying/DataProviderProxy';\nexport {\n type ExtraQueryDescriptor,\n type ExtraQueryProvider,\n type ExtraQueryDataProcessor,\n} from './querying/ExtraQueryProvider';\nexport { SceneDataLayerSet, SceneDataLayerSetBase } from './querying/SceneDataLayerSet';\nexport { SceneDataLayerBase } from './querying/layers/SceneDataLayerBase';\nexport { SceneDataLayerControls } from './querying/layers/SceneDataLayerControls';\nexport { SceneDataTransformer, type SceneDataTransformerState } from './querying/SceneDataTransformer';\nexport { registerQueryWithController } from './querying/registerQueryWithController';\nexport { registerRuntimeDataSource, RuntimeDataSource } from './querying/RuntimeDataSource';\nexport type {\n SceneQueryControllerLike,\n SceneQueryControllerEntryType,\n SceneQueryControllerEntry,\n} from './behaviors/types';\n\nexport type { AdHocFilterInteractionHandler } from './core/sceneGraph/getReportInteractionHandler';\n\nexport * from './variables/types';\nexport { VariableDependencyConfig } from './variables/VariableDependencyConfig';\nexport { formatRegistry, type FormatVariable } from './variables/interpolation/formatRegistry';\nexport { VariableValueSelectors } from './variables/components/VariableValueSelectors';\nexport { VariableValueControl } from './variables/components/VariableValueControl';\nexport { SceneVariableSet } from './variables/sets/SceneVariableSet';\nexport { ConstantVariable } from './variables/variants/ConstantVariable';\nexport { CustomVariable } from './variables/variants/CustomVariable';\nexport { SwitchVariable } from './variables/variants/SwitchVariable';\nexport { DataSourceVariable } from './variables/variants/DataSourceVariable';\nexport { QueryVariable } from './variables/variants/query/QueryVariable';\nexport { TestVariable } from './variables/variants/TestVariable';\nexport { TextBoxVariable } from './variables/variants/TextBoxVariable';\nexport { ScopesVariable } from './variables/variants/ScopesVariable';\nexport {\n MultiValueVariable,\n type MultiValueVariableState,\n type VariableGetOptionsArgs,\n} from './variables/variants/MultiValueVariable';\nexport { LocalValueVariable } from './variables/variants/LocalValueVariable';\nexport { IntervalVariable } from './variables/variants/IntervalVariable';\nexport {\n AdHocFiltersVariable,\n OPERATORS,\n GROUP_BY_OPERATOR,\n isGroupByFilter,\n type OperatorDefinition,\n} from './variables/adhoc/AdHocFiltersVariable';\nexport type { AdHocFilterWithLabels } from './variables/adhoc/AdHocFiltersVariable';\nexport type {\n AdHocFiltersController,\n AdHocFiltersControllerState,\n} from './variables/adhoc/controller/AdHocFiltersController';\nexport { AdHocFiltersVariableController } from './variables/adhoc/controller/AdHocFiltersVariableController';\nexport { AdHocFiltersComboboxRenderer } from './variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer';\nexport { GroupByVariable } from './variables/groupby/GroupByVariable';\nexport { type MacroVariableConstructor } from './variables/macros/types';\nexport { escapeUrlPipeDelimiters, getQueriesForVariables } from './variables/utils';\n\nexport {\n type UrlSyncManagerLike,\n UrlSyncManager,\n NewSceneObjectAddedEvent,\n SceneObjectRemovedEvent,\n} from './services/UrlSyncManager';\nexport { useUrlSync } from './services/useUrlSync';\nexport { UrlSyncContextProvider } from './services/UrlSyncContextProvider';\nexport { SceneObjectUrlSyncConfig } from './services/SceneObjectUrlSyncConfig';\n\nexport { EmbeddedScene, type EmbeddedSceneState } from './components/EmbeddedScene';\nexport { VizPanel, type VizPanelState } from './components/VizPanel/VizPanel';\nexport { VizPanelFitScope, type VizPanelFitScopeProps } from './components/VizPanel/VizPanelFitContext';\nexport { VizPanelMenu } from './components/VizPanel/VizPanelMenu';\nexport { VizPanelExploreButton } from './components/VizPanel/VizPanelExploreButton';\nexport { NestedScene } from './components/NestedScene';\nexport { SceneCanvasText } from './components/SceneCanvasText';\nexport { SceneToolbarButton, SceneToolbarInput } from './components/SceneToolbarButton';\nexport { SceneTimePicker } from './components/SceneTimePicker';\nexport { SceneRefreshPicker, type SceneRefreshPickerState } from './components/SceneRefreshPicker';\nexport { SceneTimeRangeTransformerBase } from './core/SceneTimeRangeTransformerBase';\nexport { SceneTimeRangeCompare } from './components/SceneTimeRangeCompare';\nexport { SceneByFrameRepeater } from './components/SceneByFrameRepeater';\nexport { SceneByVariableRepeater } from './components/SceneByVariableRepeater';\nexport { SceneControlsSpacer } from './components/SceneControlsSpacer';\nexport {\n SceneFlexLayout,\n SceneFlexItem,\n type SceneFlexItemPlacement,\n type SceneFlexItemState,\n type SceneFlexItemLike,\n} from './components/layout/SceneFlexLayout';\nexport { SceneCSSGridLayout, SceneCSSGridItem } from './components/layout/CSSGrid/SceneCSSGridLayout';\nexport { SceneGridLayout } from './components/layout/grid/SceneGridLayout';\nexport { SceneGridLayoutDragStartEvent } from './components/layout/grid/types';\nexport { GRID_CELL_HEIGHT, GRID_COLUMN_COUNT } from './components/layout/grid/constants';\nexport { SceneGridItem } from './components/layout/grid/SceneGridItem';\nexport { SceneGridRow } from './components/layout/grid/SceneGridRow';\nexport { type SceneGridItemStateLike, type SceneGridItemLike } from './components/layout/grid/types';\nexport { SplitLayout } from './components/layout/split/SplitLayout';\nexport { LazyLoader, type LazyLoaderMode } from './components/layout/LazyLoader';\nexport {\n type SceneAppPageLike,\n type SceneRouteMatch,\n type SceneAppPageState,\n type SceneAppDrilldownView,\n type SceneAppRoute,\n} from './components/SceneApp/types';\nexport { SceneApp, useSceneApp } from './components/SceneApp/SceneApp';\nexport { SceneAppPage } from './components/SceneApp/SceneAppPage';\nexport { SceneReactObject } from './components/SceneReactObject';\nexport { SceneObjectRef } from './core/SceneObjectRef';\nexport {\n PanelBuilders,\n PanelOptionsBuilders,\n FieldConfigBuilders,\n FieldConfigOverridesBuilder,\n} from './core/PanelBuilders';\nexport { FieldConfigBuilder } from './core/PanelBuilders/FieldConfigBuilder';\nexport { VizPanelBuilder } from './core/PanelBuilders/VizPanelBuilder';\nexport { SceneDebugger } from './components/SceneDebugger/SceneDebugger';\nexport { VariableValueSelectWrapper } from './variables/components/VariableValueSelectors';\nexport { ControlsLabel } from './utils/ControlsLabel';\nexport { MultiOrSingleValueSelect } from './variables/components/VariableValueSelect';\nexport { VizConfigBuilder } from './core/PanelBuilders/VizConfigBuilder';\nexport { VizConfigBuilders } from './core/PanelBuilders/VizConfigBuilders';\nexport { type VizConfig } from './core/PanelBuilders/types';\n\nexport const sceneUtils = {\n getUrlWithAppState,\n registerRuntimePanelPlugin,\n registerRuntimeDataSource,\n registerVariableMacro,\n cloneSceneObjectState,\n syncStateFromSearchParams,\n getUrlState,\n renderPrometheusLabelFilters,\n escapeLabelValueInRegexSelector,\n escapeLabelValueInExactSelector,\n escapeURLDelimiters,\n getVariableControlId,\n\n // Variable guards\n isAdHocVariable,\n isConstantVariable,\n isCustomVariable,\n isDataSourceVariable,\n isIntervalVariable,\n isQueryVariable,\n isTextBoxVariable,\n isGroupByVariable,\n isSwitchVariable,\n isRepeatCloneOrChildOf,\n buildPathIdFor,\n};\n\nexport { SafeSerializableSceneObject } from './utils/SafeSerializableSceneObject';\nexport { getExploreURL } from './utils/explore';\nexport { getCompareSeriesRefId } from './utils/getCompareSeriesRefId';\nexport { timeShiftAlignmentProcessor } from './utils/timeShiftAlignmentProcessor';\nexport { loadResources } from './utils/loadResources';\nexport { PATH_ID_SEPARATOR } from './utils/pathId';\nexport type { SystemTransformationsProvider } from './querying/systemTransformations/systemTransformationTypes';\nexport type { SystemTransformation } from './querying/systemTransformations/systemTransformationTypes';\nexport type { SystemTransformationPosition } from './querying/systemTransformations/systemTransformationTypes';\nexport type { TransformationOrigin } from './querying/systemTransformations/systemTransformationTypes';\nexport type { ResolvedSystemTransformations } from './querying/systemTransformations/systemTransformationTypes';\nexport { isSystemTransformationsProvider } from './querying/systemTransformations/systemTransformationProvider';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0KO,MAAM,UAAA,GAAa;AAAA,EACxB,kBAAA;AAAA,EACA,0BAAA;AAAA,EACA,yBAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,WAAA;AAAA,EACA,4BAAA;AAAA,EACA,+BAAA;AAAA,EACA,+BAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA;AAAA,EAGA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF;;;;"}
|